@trigger.dev/redis-worker 4.2.0 → 4.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +3423 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1456 -5
- package/dist/index.d.ts +1456 -5
- package/dist/index.js +3397 -2
- package/dist/index.js.map +1 -1
- package/package.json +4 -2
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/@ioredis+commands@1.2.0/node_modules/@ioredis/commands/built/commands.json","../../../node_modules/.pnpm/@ioredis+commands@1.2.0/node_modules/@ioredis/commands/built/index.js","../../../node_modules/.pnpm/standard-as-callback@2.1.0/node_modules/standard-as-callback/built/utils.js","../../../node_modules/.pnpm/standard-as-callback@2.1.0/node_modules/standard-as-callback/built/index.js","../../../node_modules/.pnpm/redis-errors@1.2.0/node_modules/redis-errors/lib/old.js","../../../node_modules/.pnpm/redis-errors@1.2.0/node_modules/redis-errors/lib/modern.js","../../../node_modules/.pnpm/redis-errors@1.2.0/node_modules/redis-errors/index.js","../../../node_modules/.pnpm/cluster-key-slot@1.1.2/node_modules/cluster-key-slot/lib/index.js","../../../node_modules/.pnpm/lodash.defaults@4.2.0/node_modules/lodash.defaults/index.js","../../../node_modules/.pnpm/lodash.isarguments@3.1.0/node_modules/lodash.isarguments/index.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/utils/lodash.js","../../../node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js","../../../node_modules/.pnpm/debug@4.3.7_supports-color@10.0.0/node_modules/debug/src/common.js","../../../node_modules/.pnpm/debug@4.3.7_supports-color@10.0.0/node_modules/debug/src/browser.js","../../../node_modules/.pnpm/supports-color@10.0.0/node_modules/supports-color/index.js","../../../node_modules/.pnpm/debug@4.3.7_supports-color@10.0.0/node_modules/debug/src/node.js","../../../node_modules/.pnpm/debug@4.3.7_supports-color@10.0.0/node_modules/debug/src/index.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/utils/debug.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/constants/TLSProfiles.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/utils/index.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/Command.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/errors/ClusterAllFailedError.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/ScanStream.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/autoPipelining.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/Script.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/utils/Commander.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/Pipeline.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/transaction.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/utils/applyMixin.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/cluster/ClusterOptions.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/cluster/util.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/cluster/ClusterSubscriber.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/cluster/ConnectionPool.js","../../../node_modules/.pnpm/denque@2.1.0/node_modules/denque/index.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/cluster/DelayQueue.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/cluster/index.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/connectors/AbstractConnector.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/connectors/StandaloneConnector.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/connectors/SentinelConnector/SentinelIterator.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/connectors/SentinelConnector/FailoverDetector.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/connectors/SentinelConnector/index.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/connectors/index.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/errors/MaxRetriesPerRequestError.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/errors/index.js","../../../node_modules/.pnpm/redis-parser@3.0.0/node_modules/redis-parser/lib/parser.js","../../../node_modules/.pnpm/redis-parser@3.0.0/node_modules/redis-parser/index.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/SubscriptionSet.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/DataHandler.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/redis/event_handler.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/redis/RedisOptions.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/Redis.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/index.js","../../../internal-packages/redis/src/index.ts","../../../node_modules/.pnpm/nanoid@5.1.2/node_modules/nanoid/url-alphabet/index.js","../../../node_modules/.pnpm/nanoid@5.1.2/node_modules/nanoid/index.js","../src/queue.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/platform/node/globalThis.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/version.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/internal/semver.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/internal/global-utils.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/diag/ComponentLogger.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/diag/types.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/diag/internal/logLevelLogger.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/api/diag.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/context/context.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/metrics/NoopMeter.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/metrics/Metric.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/context/NoopContextManager.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/api/context.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/trace_flags.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/invalid-span-constants.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/NonRecordingSpan.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/context-utils.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/spancontext-utils.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/NoopTracer.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/ProxyTracer.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/NoopTracerProvider.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/ProxyTracerProvider.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/span_kind.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/status.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/metrics/NoopMeterProvider.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/api/metrics.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/metrics-api.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/api/trace.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace-api.ts","../../../internal-packages/tracing/src/index.ts","../../../node_modules/.pnpm/yocto-queue@1.1.1/node_modules/yocto-queue/index.js","../../../node_modules/.pnpm/p-limit@6.2.0/node_modules/p-limit/index.js","../src/worker.ts"],"names":["flags","hasFlag","args","keys","require_built","toUTF8Array","generate","require_lodash","env","process","os","tty","supportsColor","useColors","require_utils","timeout","pipeline","exec","j","err","_a","Buffer","Redis","Logger","crypto","logger","isCompatible","DiagComponentLogger","DiagLogLevel","DiagAPI","__spreadArray","__read","BaseContext","context","NoopMeter","NoopMetric","NoopCounterMetric","NoopUpDownCounterMetric","NoopGaugeMetric","NoopHistogramMetric","NoopObservableMetric","NoopObservableCounterMetric","NoopObservableGaugeMetric","NoopObservableUpDownCounterMetric","ValueType","NoopContextManager","API_NAME","ContextAPI","TraceFlags","NonRecordingSpan","NoopTracer","ProxyTracer","NoopTracerProvider","ProxyTracerProvider","SpanKind","SpanStatusCode","NoopMeterProvider","MetricsAPI","TraceAPI","z","calculateNextRetryDelay","parseExpression","shutdownManager"],"mappings":"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;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,IAAA;AAAA,MAAQ,GAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,GAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,IAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,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","file":"index.cjs","sourcesContent":["{\n \"acl\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"append\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"asking\": {\n \"arity\": 1,\n \"flags\": [\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"auth\": {\n \"arity\": -2,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"no_auth\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"bgrewriteaof\": {\n \"arity\": 1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"no_async_loading\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"bgsave\": {\n \"arity\": -1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"no_async_loading\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"bitcount\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"bitfield\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"bitfield_ro\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"bitop\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 2,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"bitpos\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"blmove\": {\n \"arity\": 6,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"noscript\",\n \"blocking\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"blmpop\": {\n \"arity\": -5,\n \"flags\": [\n \"write\",\n \"blocking\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"blpop\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"noscript\",\n \"blocking\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -2,\n \"step\": 1\n },\n \"brpop\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"noscript\",\n \"blocking\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -2,\n \"step\": 1\n },\n \"brpoplpush\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"noscript\",\n \"blocking\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"bzmpop\": {\n \"arity\": -5,\n \"flags\": [\n \"write\",\n \"blocking\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"bzpopmax\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"noscript\",\n \"blocking\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -2,\n \"step\": 1\n },\n \"bzpopmin\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"noscript\",\n \"blocking\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -2,\n \"step\": 1\n },\n \"client\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"cluster\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"command\": {\n \"arity\": -1,\n \"flags\": [\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"config\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"copy\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"dbsize\": {\n \"arity\": 1,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"debug\": {\n \"arity\": -2,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"decr\": {\n \"arity\": 2,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"decrby\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"del\": {\n \"arity\": -2,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"discard\": {\n \"arity\": 1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"dump\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"echo\": {\n \"arity\": 2,\n \"flags\": [\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"eval\": {\n \"arity\": -3,\n \"flags\": [\n \"noscript\",\n \"stale\",\n \"skip_monitor\",\n \"no_mandatory_keys\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"eval_ro\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"noscript\",\n \"stale\",\n \"skip_monitor\",\n \"no_mandatory_keys\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"evalsha\": {\n \"arity\": -3,\n \"flags\": [\n \"noscript\",\n \"stale\",\n \"skip_monitor\",\n \"no_mandatory_keys\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"evalsha_ro\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"noscript\",\n \"stale\",\n \"skip_monitor\",\n \"no_mandatory_keys\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"exec\": {\n \"arity\": 1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"skip_slowlog\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"exists\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"expire\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"expireat\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"expiretime\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"failover\": {\n \"arity\": -1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"fcall\": {\n \"arity\": -3,\n \"flags\": [\n \"noscript\",\n \"stale\",\n \"skip_monitor\",\n \"no_mandatory_keys\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"fcall_ro\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"noscript\",\n \"stale\",\n \"skip_monitor\",\n \"no_mandatory_keys\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"flushall\": {\n \"arity\": -1,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"flushdb\": {\n \"arity\": -1,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"function\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"geoadd\": {\n \"arity\": -5,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"geodist\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"geohash\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"geopos\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"georadius\": {\n \"arity\": -6,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"movablekeys\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"georadius_ro\": {\n \"arity\": -6,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"georadiusbymember\": {\n \"arity\": -5,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"movablekeys\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"georadiusbymember_ro\": {\n \"arity\": -5,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"geosearch\": {\n \"arity\": -7,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"geosearchstore\": {\n \"arity\": -8,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"get\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"getbit\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"getdel\": {\n \"arity\": 2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"getex\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"getrange\": {\n \"arity\": 4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"getset\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hdel\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hello\": {\n \"arity\": -1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"no_auth\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"hexists\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hget\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hgetall\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hincrby\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hincrbyfloat\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hkeys\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hlen\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hmget\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hmset\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hrandfield\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hscan\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hset\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hsetnx\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hstrlen\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hvals\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"incr\": {\n \"arity\": 2,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"incrby\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"incrbyfloat\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"info\": {\n \"arity\": -1,\n \"flags\": [\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"keys\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"lastsave\": {\n \"arity\": 1,\n \"flags\": [\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"latency\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"lcs\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"lindex\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"linsert\": {\n \"arity\": 5,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"llen\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"lmove\": {\n \"arity\": 5,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"lmpop\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"lolwut\": {\n \"arity\": -1,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"lpop\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"lpos\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"lpush\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"lpushx\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"lrange\": {\n \"arity\": 4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"lrem\": {\n \"arity\": 4,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"lset\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"ltrim\": {\n \"arity\": 4,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"memory\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"mget\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"migrate\": {\n \"arity\": -6,\n \"flags\": [\n \"write\",\n \"movablekeys\"\n ],\n \"keyStart\": 3,\n \"keyStop\": 3,\n \"step\": 1\n },\n \"module\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"monitor\": {\n \"arity\": 1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"move\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"mset\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 2\n },\n \"msetnx\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 2\n },\n \"multi\": {\n \"arity\": 1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"object\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"persist\": {\n \"arity\": 2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"pexpire\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"pexpireat\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"pexpiretime\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"pfadd\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"pfcount\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"pfdebug\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"admin\"\n ],\n \"keyStart\": 2,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"pfmerge\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"pfselftest\": {\n \"arity\": 1,\n \"flags\": [\n \"admin\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"ping\": {\n \"arity\": -1,\n \"flags\": [\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"psetex\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"psubscribe\": {\n \"arity\": -2,\n \"flags\": [\n \"pubsub\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"psync\": {\n \"arity\": -3,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"no_async_loading\",\n \"no_multi\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"pttl\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"publish\": {\n \"arity\": 3,\n \"flags\": [\n \"pubsub\",\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"pubsub\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"punsubscribe\": {\n \"arity\": -1,\n \"flags\": [\n \"pubsub\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"quit\": {\n \"arity\": -1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"no_auth\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"randomkey\": {\n \"arity\": 1,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"readonly\": {\n \"arity\": 1,\n \"flags\": [\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"readwrite\": {\n \"arity\": 1,\n \"flags\": [\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"rename\": {\n \"arity\": 3,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"renamenx\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"replconf\": {\n \"arity\": -1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"loading\",\n \"stale\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"replicaof\": {\n \"arity\": 3,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"stale\",\n \"no_async_loading\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"reset\": {\n \"arity\": 1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"no_auth\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"restore\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"restore-asking\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"asking\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"role\": {\n \"arity\": 1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"rpop\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"rpoplpush\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"rpush\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"rpushx\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"sadd\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"save\": {\n \"arity\": 1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"no_async_loading\",\n \"no_multi\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"scan\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"scard\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"script\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"sdiff\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"sdiffstore\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"select\": {\n \"arity\": 2,\n \"flags\": [\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"set\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"setbit\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"setex\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"setnx\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"setrange\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"shutdown\": {\n \"arity\": -1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"loading\",\n \"stale\",\n \"no_multi\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"sinter\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"sintercard\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"sinterstore\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"sismember\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"slaveof\": {\n \"arity\": 3,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"stale\",\n \"no_async_loading\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"slowlog\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"smembers\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"smismember\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"smove\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"sort\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"movablekeys\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"sort_ro\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\",\n \"movablekeys\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"spop\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"spublish\": {\n \"arity\": 3,\n \"flags\": [\n \"pubsub\",\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"srandmember\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"srem\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"sscan\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"ssubscribe\": {\n \"arity\": -2,\n \"flags\": [\n \"pubsub\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"strlen\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"subscribe\": {\n \"arity\": -2,\n \"flags\": [\n \"pubsub\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"substr\": {\n \"arity\": 4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"sunion\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"sunionstore\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"sunsubscribe\": {\n \"arity\": -1,\n \"flags\": [\n \"pubsub\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"swapdb\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"sync\": {\n \"arity\": 1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"no_async_loading\",\n \"no_multi\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"time\": {\n \"arity\": 1,\n \"flags\": [\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"touch\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"ttl\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"type\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"unlink\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"unsubscribe\": {\n \"arity\": -1,\n \"flags\": [\n \"pubsub\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"unwatch\": {\n \"arity\": 1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"wait\": {\n \"arity\": 3,\n \"flags\": [\n \"noscript\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"watch\": {\n \"arity\": -2,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"allow_busy\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"xack\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xadd\": {\n \"arity\": -5,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xautoclaim\": {\n \"arity\": -6,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xclaim\": {\n \"arity\": -6,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xdel\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xgroup\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"xinfo\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"xlen\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xpending\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xrange\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xread\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\",\n \"blocking\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"xreadgroup\": {\n \"arity\": -7,\n \"flags\": [\n \"write\",\n \"blocking\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"xrevrange\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xsetid\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xtrim\": {\n \"arity\": -4,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zadd\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zcard\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zcount\": {\n \"arity\": 4,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zdiff\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"zdiffstore\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"movablekeys\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zincrby\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zinter\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"zintercard\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"zinterstore\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"movablekeys\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zlexcount\": {\n \"arity\": 4,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zmpop\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"zmscore\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zpopmax\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zpopmin\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrandmember\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrange\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrangebylex\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrangebyscore\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrangestore\": {\n \"arity\": -5,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"zrank\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrem\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zremrangebylex\": {\n \"arity\": 4,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zremrangebyrank\": {\n \"arity\": 4,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zremrangebyscore\": {\n \"arity\": 4,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrevrange\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrevrangebylex\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrevrangebyscore\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrevrank\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zscan\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zscore\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zunion\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"zunionstore\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"movablekeys\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n }\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getKeyIndexes = exports.hasFlag = exports.exists = exports.list = void 0;\nconst commands_json_1 = __importDefault(require(\"./commands.json\"));\n/**\n * Redis command list\n *\n * All commands are lowercased.\n */\nexports.list = Object.keys(commands_json_1.default);\nconst flags = {};\nexports.list.forEach((commandName) => {\n flags[commandName] = commands_json_1.default[commandName].flags.reduce(function (flags, flag) {\n flags[flag] = true;\n return flags;\n }, {});\n});\n/**\n * Check if the command exists\n */\nfunction exists(commandName) {\n return Boolean(commands_json_1.default[commandName]);\n}\nexports.exists = exists;\n/**\n * Check if the command has the flag\n *\n * Some of possible flags: readonly, noscript, loading\n */\nfunction hasFlag(commandName, flag) {\n if (!flags[commandName]) {\n throw new Error(\"Unknown command \" + commandName);\n }\n return Boolean(flags[commandName][flag]);\n}\nexports.hasFlag = hasFlag;\n/**\n * Get indexes of keys in the command arguments\n *\n * @example\n * ```javascript\n * getKeyIndexes('set', ['key', 'value']) // [0]\n * getKeyIndexes('mget', ['key1', 'key2']) // [0, 1]\n * ```\n */\nfunction getKeyIndexes(commandName, args, options) {\n const command = commands_json_1.default[commandName];\n if (!command) {\n throw new Error(\"Unknown command \" + commandName);\n }\n if (!Array.isArray(args)) {\n throw new Error(\"Expect args to be an array\");\n }\n const keys = [];\n const parseExternalKey = Boolean(options && options.parseExternalKey);\n const takeDynamicKeys = (args, startIndex) => {\n const keys = [];\n const keyStop = Number(args[startIndex]);\n for (let i = 0; i < keyStop; i++) {\n keys.push(i + startIndex + 1);\n }\n return keys;\n };\n const takeKeyAfterToken = (args, startIndex, token) => {\n for (let i = startIndex; i < args.length - 1; i += 1) {\n if (String(args[i]).toLowerCase() === token.toLowerCase()) {\n return i + 1;\n }\n }\n return null;\n };\n switch (commandName) {\n case \"zunionstore\":\n case \"zinterstore\":\n case \"zdiffstore\":\n keys.push(0, ...takeDynamicKeys(args, 1));\n break;\n case \"eval\":\n case \"evalsha\":\n case \"eval_ro\":\n case \"evalsha_ro\":\n case \"fcall\":\n case \"fcall_ro\":\n case \"blmpop\":\n case \"bzmpop\":\n keys.push(...takeDynamicKeys(args, 1));\n break;\n case \"sintercard\":\n case \"lmpop\":\n case \"zunion\":\n case \"zinter\":\n case \"zmpop\":\n case \"zintercard\":\n case \"zdiff\": {\n keys.push(...takeDynamicKeys(args, 0));\n break;\n }\n case \"georadius\": {\n keys.push(0);\n const storeKey = takeKeyAfterToken(args, 5, \"STORE\");\n if (storeKey)\n keys.push(storeKey);\n const distKey = takeKeyAfterToken(args, 5, \"STOREDIST\");\n if (distKey)\n keys.push(distKey);\n break;\n }\n case \"georadiusbymember\": {\n keys.push(0);\n const storeKey = takeKeyAfterToken(args, 4, \"STORE\");\n if (storeKey)\n keys.push(storeKey);\n const distKey = takeKeyAfterToken(args, 4, \"STOREDIST\");\n if (distKey)\n keys.push(distKey);\n break;\n }\n case \"sort\":\n case \"sort_ro\":\n keys.push(0);\n for (let i = 1; i < args.length - 1; i++) {\n let arg = args[i];\n if (typeof arg !== \"string\") {\n continue;\n }\n const directive = arg.toUpperCase();\n if (directive === \"GET\") {\n i += 1;\n arg = args[i];\n if (arg !== \"#\") {\n if (parseExternalKey) {\n keys.push([i, getExternalKeyNameLength(arg)]);\n }\n else {\n keys.push(i);\n }\n }\n }\n else if (directive === \"BY\") {\n i += 1;\n if (parseExternalKey) {\n keys.push([i, getExternalKeyNameLength(args[i])]);\n }\n else {\n keys.push(i);\n }\n }\n else if (directive === \"STORE\") {\n i += 1;\n keys.push(i);\n }\n }\n break;\n case \"migrate\":\n if (args[2] === \"\") {\n for (let i = 5; i < args.length - 1; i++) {\n const arg = args[i];\n if (typeof arg === \"string\" && arg.toUpperCase() === \"KEYS\") {\n for (let j = i + 1; j < args.length; j++) {\n keys.push(j);\n }\n break;\n }\n }\n }\n else {\n keys.push(2);\n }\n break;\n case \"xreadgroup\":\n case \"xread\":\n // Keys are 1st half of the args after STREAMS argument.\n for (let i = commandName === \"xread\" ? 0 : 3; i < args.length - 1; i++) {\n if (String(args[i]).toUpperCase() === \"STREAMS\") {\n for (let j = i + 1; j <= i + (args.length - 1 - i) / 2; j++) {\n keys.push(j);\n }\n break;\n }\n }\n break;\n default:\n // Step has to be at least one in this case, otherwise the command does\n // not contain a key.\n if (command.step > 0) {\n const keyStart = command.keyStart - 1;\n const keyStop = command.keyStop > 0\n ? command.keyStop\n : args.length + command.keyStop + 1;\n for (let i = keyStart; i < keyStop; i += command.step) {\n keys.push(i);\n }\n }\n break;\n }\n return keys;\n}\nexports.getKeyIndexes = getKeyIndexes;\nfunction getExternalKeyNameLength(key) {\n if (typeof key !== \"string\") {\n key = String(key);\n }\n const hashPos = key.indexOf(\"->\");\n return hashPos === -1 ? key.length : hashPos;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.tryCatch = exports.errorObj = void 0;\n//Try catch is not supported in optimizing\n//compiler, so it is isolated\nexports.errorObj = { e: {} };\nlet tryCatchTarget;\nfunction tryCatcher(err, val) {\n try {\n const target = tryCatchTarget;\n tryCatchTarget = null;\n return target.apply(this, arguments);\n }\n catch (e) {\n exports.errorObj.e = e;\n return exports.errorObj;\n }\n}\nfunction tryCatch(fn) {\n tryCatchTarget = fn;\n return tryCatcher;\n}\nexports.tryCatch = tryCatch;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils_1 = require(\"./utils\");\nfunction throwLater(e) {\n setTimeout(function () {\n throw e;\n }, 0);\n}\nfunction asCallback(promise, nodeback, options) {\n if (typeof nodeback === \"function\") {\n promise.then((val) => {\n let ret;\n if (options !== undefined &&\n Object(options).spread &&\n Array.isArray(val)) {\n ret = utils_1.tryCatch(nodeback).apply(undefined, [null].concat(val));\n }\n else {\n ret =\n val === undefined\n ? utils_1.tryCatch(nodeback)(null)\n : utils_1.tryCatch(nodeback)(null, val);\n }\n if (ret === utils_1.errorObj) {\n throwLater(ret.e);\n }\n }, (cause) => {\n if (!cause) {\n const newReason = new Error(cause + \"\");\n Object.assign(newReason, { cause });\n cause = newReason;\n }\n const ret = utils_1.tryCatch(nodeback)(cause);\n if (ret === utils_1.errorObj) {\n throwLater(ret.e);\n }\n });\n }\n return promise;\n}\nexports.default = asCallback;\n","'use strict'\n\nconst assert = require('assert')\nconst util = require('util')\n\n// RedisError\n\nfunction RedisError (message) {\n Object.defineProperty(this, 'message', {\n value: message || '',\n configurable: true,\n writable: true\n })\n Error.captureStackTrace(this, this.constructor)\n}\n\nutil.inherits(RedisError, Error)\n\nObject.defineProperty(RedisError.prototype, 'name', {\n value: 'RedisError',\n configurable: true,\n writable: true\n})\n\n// ParserError\n\nfunction ParserError (message, buffer, offset) {\n assert(buffer)\n assert.strictEqual(typeof offset, 'number')\n\n Object.defineProperty(this, 'message', {\n value: message || '',\n configurable: true,\n writable: true\n })\n\n const tmp = Error.stackTraceLimit\n Error.stackTraceLimit = 2\n Error.captureStackTrace(this, this.constructor)\n Error.stackTraceLimit = tmp\n this.offset = offset\n this.buffer = buffer\n}\n\nutil.inherits(ParserError, RedisError)\n\nObject.defineProperty(ParserError.prototype, 'name', {\n value: 'ParserError',\n configurable: true,\n writable: true\n})\n\n// ReplyError\n\nfunction ReplyError (message) {\n Object.defineProperty(this, 'message', {\n value: message || '',\n configurable: true,\n writable: true\n })\n const tmp = Error.stackTraceLimit\n Error.stackTraceLimit = 2\n Error.captureStackTrace(this, this.constructor)\n Error.stackTraceLimit = tmp\n}\n\nutil.inherits(ReplyError, RedisError)\n\nObject.defineProperty(ReplyError.prototype, 'name', {\n value: 'ReplyError',\n configurable: true,\n writable: true\n})\n\n// AbortError\n\nfunction AbortError (message) {\n Object.defineProperty(this, 'message', {\n value: message || '',\n configurable: true,\n writable: true\n })\n Error.captureStackTrace(this, this.constructor)\n}\n\nutil.inherits(AbortError, RedisError)\n\nObject.defineProperty(AbortError.prototype, 'name', {\n value: 'AbortError',\n configurable: true,\n writable: true\n})\n\n// InterruptError\n\nfunction InterruptError (message) {\n Object.defineProperty(this, 'message', {\n value: message || '',\n configurable: true,\n writable: true\n })\n Error.captureStackTrace(this, this.constructor)\n}\n\nutil.inherits(InterruptError, AbortError)\n\nObject.defineProperty(InterruptError.prototype, 'name', {\n value: 'InterruptError',\n configurable: true,\n writable: true\n})\n\nmodule.exports = {\n RedisError,\n ParserError,\n ReplyError,\n AbortError,\n InterruptError\n}\n","'use strict'\n\nconst assert = require('assert')\n\nclass RedisError extends Error {\n get name () {\n return this.constructor.name\n }\n}\n\nclass ParserError extends RedisError {\n constructor (message, buffer, offset) {\n assert(buffer)\n assert.strictEqual(typeof offset, 'number')\n\n const tmp = Error.stackTraceLimit\n Error.stackTraceLimit = 2\n super(message)\n Error.stackTraceLimit = tmp\n this.offset = offset\n this.buffer = buffer\n }\n\n get name () {\n return this.constructor.name\n }\n}\n\nclass ReplyError extends RedisError {\n constructor (message) {\n const tmp = Error.stackTraceLimit\n Error.stackTraceLimit = 2\n super(message)\n Error.stackTraceLimit = tmp\n }\n get name () {\n return this.constructor.name\n }\n}\n\nclass AbortError extends RedisError {\n get name () {\n return this.constructor.name\n }\n}\n\nclass InterruptError extends AbortError {\n get name () {\n return this.constructor.name\n }\n}\n\nmodule.exports = {\n RedisError,\n ParserError,\n ReplyError,\n AbortError,\n InterruptError\n}\n","'use strict'\n\nconst Errors = process.version.charCodeAt(1) < 55 && process.version.charCodeAt(2) === 46\n ? require('./lib/old') // Node.js < 7\n : require('./lib/modern')\n\nmodule.exports = Errors\n","/*\n * Copyright 2001-2010 Georges Menie (www.menie.org)\n * Copyright 2010 Salvatore Sanfilippo (adapted to Redis coding style)\n * Copyright 2015 Zihua Li (http://zihua.li) (ported to JavaScript)\n * Copyright 2016 Mike Diarmid (http://github.com/salakar) (re-write for performance, ~700% perf inc)\n * All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of the University of California, Berkeley nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* CRC16 implementation according to CCITT standards.\n *\n * Note by @antirez: this is actually the XMODEM CRC 16 algorithm, using the\n * following parameters:\n *\n * Name : \"XMODEM\", also known as \"ZMODEM\", \"CRC-16/ACORN\"\n * Width : 16 bit\n * Poly : 1021 (That is actually x^16 + x^12 + x^5 + 1)\n * Initialization : 0000\n * Reflect Input byte : False\n * Reflect Output CRC : False\n * Xor constant to output CRC : 0000\n * Output for \"123456789\" : 31C3\n */\n\nvar lookup = [\n 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\n\n/**\n * Convert a string to a UTF8 array - faster than via buffer\n * @param str\n * @returns {Array}\n */\nvar toUTF8Array = function toUTF8Array(str) {\n var char;\n var i = 0;\n var p = 0;\n var utf8 = [];\n var len = str.length;\n\n for (; i < len; i++) {\n char = str.charCodeAt(i);\n if (char < 128) {\n utf8[p++] = char;\n } else if (char < 2048) {\n utf8[p++] = (char >> 6) | 192;\n utf8[p++] = (char & 63) | 128;\n } else if (\n ((char & 0xFC00) === 0xD800) && (i + 1) < str.length &&\n ((str.charCodeAt(i + 1) & 0xFC00) === 0xDC00)) {\n char = 0x10000 + ((char & 0x03FF) << 10) + (str.charCodeAt(++i) & 0x03FF);\n utf8[p++] = (char >> 18) | 240;\n utf8[p++] = ((char >> 12) & 63) | 128;\n utf8[p++] = ((char >> 6) & 63) | 128;\n utf8[p++] = (char & 63) | 128;\n } else {\n utf8[p++] = (char >> 12) | 224;\n utf8[p++] = ((char >> 6) & 63) | 128;\n utf8[p++] = (char & 63) | 128;\n }\n }\n\n return utf8;\n};\n\n/**\n * Convert a string into a redis slot hash.\n * @param str\n * @returns {number}\n */\nvar generate = module.exports = function generate(str) {\n var char;\n var i = 0;\n var start = -1;\n var result = 0;\n var resultHash = 0;\n var utf8 = typeof str === 'string' ? toUTF8Array(str) : str;\n var len = utf8.length;\n\n while (i < len) {\n char = utf8[i++];\n if (start === -1) {\n if (char === 0x7B) {\n start = i;\n }\n } else if (char !== 0x7D) {\n resultHash = lookup[(char ^ (resultHash >> 8)) & 0xFF] ^ (resultHash << 8);\n } else if (i - 1 !== start) {\n return resultHash & 0x3FFF;\n }\n\n result = lookup[(char ^ (result >> 8)) & 0xFF] ^ (result << 8);\n }\n\n return result & 0x3FFF;\n};\n\n/**\n * Convert an array of multiple strings into a redis slot hash.\n * Returns -1 if one of the keys is not for the same slot as the others\n * @param keys\n * @returns {number}\n */\nmodule.exports.generateMulti = function generateMulti(keys) {\n var i = 1;\n var len = keys.length;\n var base = generate(keys[0]);\n\n while (i < len) {\n if (generate(keys[i++]) !== base) return -1;\n }\n\n return base;\n};\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Used by `_.defaults` to customize its `_.assignIn` use.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\nfunction assignInDefaults(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n object[key] = value;\n }\n}\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = array;\n return apply(func, this, otherArgs);\n };\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n assignValue(object, key, newValue === undefined ? source[key] : newValue);\n }\n return object;\n}\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n});\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(args) {\n args.push(undefined, assignInDefaults);\n return apply(assignInWith, undefined, args);\n});\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = defaults;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = isArguments;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isArguments = exports.defaults = exports.noop = void 0;\nconst defaults = require(\"lodash.defaults\");\nexports.defaults = defaults;\nconst isArguments = require(\"lodash.isarguments\");\nexports.isArguments = isArguments;\nfunction noop() { }\nexports.noop = noop;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif (!('FORCE_COLOR' in env)) {\n\t\treturn;\n\t}\n\n\tif (env.FORCE_COLOR === 'true') {\n\t\treturn 1;\n\t}\n\n\tif (env.FORCE_COLOR === 'false') {\n\t\treturn 0;\n\t}\n\n\tif (env.FORCE_COLOR.length === 0) {\n\t\treturn 1;\n\t}\n\n\tconst level = Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\n\tif (![0, 1, 2, 3].includes(level)) {\n\t\treturn;\n\t}\n\n\treturn level;\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.genRedactedString = exports.getStringValue = exports.MAX_ARGUMENT_LENGTH = void 0;\nconst debug_1 = require(\"debug\");\nconst MAX_ARGUMENT_LENGTH = 200;\nexports.MAX_ARGUMENT_LENGTH = MAX_ARGUMENT_LENGTH;\nconst NAMESPACE_PREFIX = \"ioredis\";\n/**\n * helper function that tried to get a string value for\n * arbitrary \"debug\" arg\n */\nfunction getStringValue(v) {\n if (v === null) {\n return;\n }\n switch (typeof v) {\n case \"boolean\":\n return;\n case \"number\":\n return;\n case \"object\":\n if (Buffer.isBuffer(v)) {\n return v.toString(\"hex\");\n }\n if (Array.isArray(v)) {\n return v.join(\",\");\n }\n try {\n return JSON.stringify(v);\n }\n catch (e) {\n return;\n }\n case \"string\":\n return v;\n }\n}\nexports.getStringValue = getStringValue;\n/**\n * helper function that redacts a string representation of a \"debug\" arg\n */\nfunction genRedactedString(str, maxLen) {\n const { length } = str;\n return length <= maxLen\n ? str\n : str.slice(0, maxLen) + ' ... <REDACTED full-length=\"' + length + '\">';\n}\nexports.genRedactedString = genRedactedString;\n/**\n * a wrapper for the `debug` module, used to generate\n * \"debug functions\" that trim the values in their output\n */\nfunction genDebugFunction(namespace) {\n const fn = (0, debug_1.default)(`${NAMESPACE_PREFIX}:${namespace}`);\n function wrappedDebug(...args) {\n if (!fn.enabled) {\n return; // no-op\n }\n // we skip the first arg because that is the message\n for (let i = 1; i < args.length; i++) {\n const str = getStringValue(args[i]);\n if (typeof str === \"string\" && str.length > MAX_ARGUMENT_LENGTH) {\n args[i] = genRedactedString(str, MAX_ARGUMENT_LENGTH);\n }\n }\n return fn.apply(null, args);\n }\n Object.defineProperties(wrappedDebug, {\n namespace: {\n get() {\n return fn.namespace;\n },\n },\n enabled: {\n get() {\n return fn.enabled;\n },\n },\n destroy: {\n get() {\n return fn.destroy;\n },\n },\n log: {\n get() {\n return fn.log;\n },\n set(l) {\n fn.log = l;\n },\n },\n });\n return wrappedDebug;\n}\nexports.default = genDebugFunction;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * TLS settings for Redis Cloud. Updated on 2022-08-19.\n */\nconst RedisCloudCA = `-----BEGIN CERTIFICATE-----\nMIIDTzCCAjegAwIBAgIJAKSVpiDswLcwMA0GCSqGSIb3DQEBBQUAMD4xFjAUBgNV\nBAoMDUdhcmFudGlhIERhdGExJDAiBgNVBAMMG1NTTCBDZXJ0aWZpY2F0aW9uIEF1\ndGhvcml0eTAeFw0xMzEwMDExMjE0NTVaFw0yMzA5MjkxMjE0NTVaMD4xFjAUBgNV\nBAoMDUdhcmFudGlhIERhdGExJDAiBgNVBAMMG1NTTCBDZXJ0aWZpY2F0aW9uIEF1\ndGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALZqkh/DczWP\nJnxnHLQ7QL0T4B4CDKWBKCcisriGbA6ZePWVNo4hfKQC6JrzfR+081NeD6VcWUiz\nrmd+jtPhIY4c+WVQYm5PKaN6DT1imYdxQw7aqO5j2KUCEh/cznpLxeSHoTxlR34E\nQwF28Wl3eg2vc5ct8LjU3eozWVk3gb7alx9mSA2SgmuX5lEQawl++rSjsBStemY2\nBDwOpAMXIrdEyP/cVn8mkvi/BDs5M5G+09j0gfhyCzRWMQ7Hn71u1eolRxwVxgi3\nTMn+/vTaFSqxKjgck6zuAYjBRPaHe7qLxHNr1So/Mc9nPy+3wHebFwbIcnUojwbp\n4nctkWbjb2cCAwEAAaNQME4wHQYDVR0OBBYEFP1whtcrydmW3ZJeuSoKZIKjze3w\nMB8GA1UdIwQYMBaAFP1whtcrydmW3ZJeuSoKZIKjze3wMAwGA1UdEwQFMAMBAf8w\nDQYJKoZIhvcNAQEFBQADggEBAG2erXhwRAa7+ZOBs0B6X57Hwyd1R4kfmXcs0rta\nlbPpvgULSiB+TCbf3EbhJnHGyvdCY1tvlffLjdA7HJ0PCOn+YYLBA0pTU/dyvrN6\nSu8NuS5yubnt9mb13nDGYo1rnt0YRfxN+8DM3fXIVr038A30UlPX2Ou1ExFJT0MZ\nuFKY6ZvLdI6/1cbgmguMlAhM+DhKyV6Sr5699LM3zqeI816pZmlREETYkGr91q7k\nBpXJu/dtHaGxg1ZGu6w/PCsYGUcECWENYD4VQPd8N32JjOfu6vEgoEAwfPP+3oGp\nZ4m3ewACcWOAenqflb+cQYC4PsF7qbXDmRaWrbKntOlZ3n0=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIGMTCCBBmgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwajELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMQswCQYDVQQHDAJDQTESMBAGA1UECgwJUmVkaXNMYWJzMS0w\nKwYDVQQDDCRSZWRpc0xhYnMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN\nMTgwMjI1MTUzNzM3WhcNMjgwMjIzMTUzNzM3WjBfMQswCQYDVQQGEwJVUzELMAkG\nA1UECAwCQ0ExEjAQBgNVBAoMCVJlZGlzTGFiczEvMC0GA1UEAwwmUkNQIEludGVy\nbWVkaWF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA\nA4ICDwAwggIKAoICAQDf9dqbxc8Bq7Ctq9rWcxrGNKKHivqLAFpPq02yLPx6fsOv\nTq7GsDChAYBBc4v7Y2Ap9RD5Vs3dIhEANcnolf27QwrG9RMnnvzk8pCvp1o6zSU4\nVuOE1W66/O1/7e2rVxyrnTcP7UgK43zNIXu7+tiAqWsO92uSnuMoGPGpeaUm1jym\nhjWKtkAwDFSqvHY+XL5qDVBEjeUe+WHkYUg40cAXjusAqgm2hZt29c2wnVrxW25W\nP0meNlzHGFdA2AC5z54iRiqj57dTfBTkHoBczQxcyw6hhzxZQ4e5I5zOKjXXEhZN\nr0tA3YC14CTabKRus/JmZieyZzRgEy2oti64tmLYTqSlAD78pRL40VNoaSYetXLw\nhhNsXCHgWaY6d5bLOc/aIQMAV5oLvZQKvuXAF1IDmhPA+bZbpWipp0zagf1P1H3s\nUzsMdn2KM0ejzgotbtNlj5TcrVwpmvE3ktvUAuA+hi3FkVx1US+2Gsp5x4YOzJ7u\nP1WPk6ShF0JgnJH2ILdj6kttTWwFzH17keSFICWDfH/+kM+k7Y1v3EXMQXE7y0T9\nMjvJskz6d/nv+sQhY04xt64xFMGTnZjlJMzfQNi7zWFLTZnDD0lPowq7l3YiPoTT\nt5Xky83lu0KZsZBo0WlWaDG00gLVdtRgVbcuSWxpi5BdLb1kRab66JptWjxwXQID\nAQABo4HrMIHoMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHBzOi8vcmwtY2Etc2VydmVy\nLnJlZGlzbGFicy5jb20vdjEvY3JsMEYGCCsGAQUFBwEBBDowODA2BggrBgEFBQcw\nAYYqaHR0cHM6Ly9ybC1jYS1zZXJ2ZXIucmVkaXNsYWJzLmNvbS92MS9vY3NwMB0G\nA1UdDgQWBBQHar5OKvQUpP2qWt6mckzToeCOHDAfBgNVHSMEGDAWgBQi42wH6hM4\nL2sujEvLM0/u8lRXTzASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIB\nhjANBgkqhkiG9w0BAQsFAAOCAgEAirEn/iTsAKyhd+pu2W3Z5NjCko4NPU0EYUbr\nAP7+POK2rzjIrJO3nFYQ/LLuC7KCXG+2qwan2SAOGmqWst13Y+WHp44Kae0kaChW\nvcYLXXSoGQGC8QuFSNUdaeg3RbMDYFT04dOkqufeWVccoHVxyTSg9eD8LZuHn5jw\n7QDLiEECBmIJHk5Eeo2TAZrx4Yx6ufSUX5HeVjlAzqwtAqdt99uCJ/EL8bgpWbe+\nXoSpvUv0SEC1I1dCAhCKAvRlIOA6VBcmzg5Am12KzkqTul12/VEFIgzqu0Zy2Jbc\nAUPrYVu/+tOGXQaijy7YgwH8P8n3s7ZeUa1VABJHcxrxYduDDJBLZi+MjheUDaZ1\njQRHYevI2tlqeSBqdPKG4zBY5lS0GiAlmuze5oENt0P3XboHoZPHiqcK3VECgTVh\n/BkJcuudETSJcZDmQ8YfoKfBzRQNg2sv/hwvUv73Ss51Sco8GEt2lD8uEdib1Q6z\nzDT5lXJowSzOD5ZA9OGDjnSRL+2riNtKWKEqvtEG3VBJoBzu9GoxbAc7wIZLxmli\niF5a/Zf5X+UXD3s4TMmy6C4QZJpAA2egsSQCnraWO2ULhh7iXMysSkF/nzVfZn43\niqpaB8++9a37hWq14ZmOv0TJIDz//b2+KC4VFXWQ5W5QC6whsjT+OlG4p5ZYG0jo\n616pxqo=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\n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\n-----END CERTIFICATE-----\n\n-----BEGIN CERTIFICATE-----\nMIIEjzCCA3egAwIBAgIQe55B/ALCKJDZtdNT8kD6hTANBgkqhkiG9w0BAQsFADBM\nMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xv\nYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjAeFw0yMjAxMjYxMjAwMDBaFw0y\nNTAxMjYwMDAwMDBaMFgxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWdu\nIG52LXNhMS4wLAYDVQQDEyVHbG9iYWxTaWduIEF0bGFzIFIzIE9WIFRMUyBDQSAy\nMDIyIFEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmGmg1LW9b7Lf\n8zDD83yBDTEkt+FOxKJZqF4veWc5KZsQj9HfnUS2e5nj/E+JImlGPsQuoiosLuXD\nBVBNAMcUFa11buFMGMeEMwiTmCXoXRrXQmH0qjpOfKgYc5gHG3BsRGaRrf7VR4eg\nofNMG9wUBw4/g/TT7+bQJdA4NfE7Y4d5gEryZiBGB/swaX6Jp/8MF4TgUmOWmalK\ndZCKyb4sPGQFRTtElk67F7vU+wdGcrcOx1tDcIB0ncjLPMnaFicagl+daWGsKqTh\ncounQb6QJtYHa91KvCfKWocMxQ7OIbB5UARLPmC4CJ1/f8YFm35ebfzAeULYdGXu\njE9CLor0OwIDAQABo4IBXzCCAVswDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQG\nCCsGAQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQW\nBBSH5Zq7a7B/t95GfJWkDBpA8HHqdjAfBgNVHSMEGDAWgBSP8Et/qC5FJK5NUPpj\nmove4t0bvDB7BggrBgEFBQcBAQRvMG0wLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3Nw\nMi5nbG9iYWxzaWduLmNvbS9yb290cjMwOwYIKwYBBQUHMAKGL2h0dHA6Ly9zZWN1\ncmUuZ2xvYmFsc2lnbi5jb20vY2FjZXJ0L3Jvb3QtcjMuY3J0MDYGA1UdHwQvMC0w\nK6ApoCeGJWh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vcm9vdC1yMy5jcmwwIQYD\nVR0gBBowGDAIBgZngQwBAgIwDAYKKwYBBAGgMgoBAjANBgkqhkiG9w0BAQsFAAOC\nAQEAKRic9/f+nmhQU/wz04APZLjgG5OgsuUOyUEZjKVhNGDwxGTvKhyXGGAMW2B/\n3bRi+aElpXwoxu3pL6fkElbX3B0BeS5LoDtxkyiVEBMZ8m+sXbocwlPyxrPbX6mY\n0rVIvnuUeBH8X0L5IwfpNVvKnBIilTbcebfHyXkPezGwz7E1yhUULjJFm2bt0SdX\ny+4X/WeiiYIv+fTVgZZgl+/2MKIsu/qdBJc3f3TvJ8nz+Eax1zgZmww+RSQWeOj3\n15Iw6Z5FX+NwzY/Ab+9PosR5UosSeq+9HhtaxZttXG1nVh+avYPGYddWmiMT90J5\nZgKnO/Fx2hBgTxhOTMYaD312kg==\n-----END CERTIFICATE-----\n\n-----BEGIN CERTIFICATE-----\nMIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G\nA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp\nZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4\nMTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG\nA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8\nRgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT\ngHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm\nKPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd\nQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ\nXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw\nDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o\nLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU\nRUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp\njjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK\n6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX\nmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs\nMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH\nWD9f\n-----END CERTIFICATE-----`;\nconst TLSProfiles = {\n RedisCloudFixed: { ca: RedisCloudCA },\n RedisCloudFlexible: { ca: RedisCloudCA },\n};\nexports.default = TLSProfiles;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.noop = exports.defaults = exports.Debug = exports.zipMap = exports.CONNECTION_CLOSED_ERROR_MSG = exports.shuffle = exports.sample = exports.resolveTLSProfile = exports.parseURL = exports.optimizeErrorStack = exports.toArg = exports.convertMapToArray = exports.convertObjectToArray = exports.timeout = exports.packObject = exports.isInt = exports.wrapMultiResult = exports.convertBufferToString = void 0;\nconst url_1 = require(\"url\");\nconst lodash_1 = require(\"./lodash\");\nObject.defineProperty(exports, \"defaults\", { enumerable: true, get: function () { return lodash_1.defaults; } });\nObject.defineProperty(exports, \"noop\", { enumerable: true, get: function () { return lodash_1.noop; } });\nconst debug_1 = require(\"./debug\");\nexports.Debug = debug_1.default;\nconst TLSProfiles_1 = require(\"../constants/TLSProfiles\");\n/**\n * Convert a buffer to string, supports buffer array\n *\n * @example\n * ```js\n * const input = [Buffer.from('foo'), [Buffer.from('bar')]]\n * const res = convertBufferToString(input, 'utf8')\n * expect(res).to.eql(['foo', ['bar']])\n * ```\n */\nfunction convertBufferToString(value, encoding) {\n if (value instanceof Buffer) {\n return value.toString(encoding);\n }\n if (Array.isArray(value)) {\n const length = value.length;\n const res = Array(length);\n for (let i = 0; i < length; ++i) {\n res[i] =\n value[i] instanceof Buffer && encoding === \"utf8\"\n ? value[i].toString()\n : convertBufferToString(value[i], encoding);\n }\n return res;\n }\n return value;\n}\nexports.convertBufferToString = convertBufferToString;\n/**\n * Convert a list of results to node-style\n *\n * @example\n * ```js\n * const input = ['a', 'b', new Error('c'), 'd']\n * const output = exports.wrapMultiResult(input)\n * expect(output).to.eql([[null, 'a'], [null, 'b'], [new Error('c')], [null, 'd'])\n * ```\n */\nfunction wrapMultiResult(arr) {\n // When using WATCH/EXEC transactions, the EXEC will return\n // a null instead of an array\n if (!arr) {\n return null;\n }\n const result = [];\n const length = arr.length;\n for (let i = 0; i < length; ++i) {\n const item = arr[i];\n if (item instanceof Error) {\n result.push([item]);\n }\n else {\n result.push([null, item]);\n }\n }\n return result;\n}\nexports.wrapMultiResult = wrapMultiResult;\n/**\n * Detect if the argument is a int\n * @example\n * ```js\n * > isInt('123')\n * true\n * > isInt('123.3')\n * false\n * > isInt('1x')\n * false\n * > isInt(123)\n * true\n * > isInt(true)\n * false\n * ```\n */\nfunction isInt(value) {\n const x = parseFloat(value);\n return !isNaN(value) && (x | 0) === x;\n}\nexports.isInt = isInt;\n/**\n * Pack an array to an Object\n *\n * @example\n * ```js\n * > packObject(['a', 'b', 'c', 'd'])\n * { a: 'b', c: 'd' }\n * ```\n */\nfunction packObject(array) {\n const result = {};\n const length = array.length;\n for (let i = 1; i < length; i += 2) {\n result[array[i - 1]] = array[i];\n }\n return result;\n}\nexports.packObject = packObject;\n/**\n * Return a callback with timeout\n */\nfunction timeout(callback, timeout) {\n let timer = null;\n const run = function () {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n callback.apply(this, arguments);\n }\n };\n timer = setTimeout(run, timeout, new Error(\"timeout\"));\n return run;\n}\nexports.timeout = timeout;\n/**\n * Convert an object to an array\n * @example\n * ```js\n * > convertObjectToArray({ a: '1' })\n * ['a', '1']\n * ```\n */\nfunction convertObjectToArray(obj) {\n const result = [];\n const keys = Object.keys(obj); // Object.entries requires node 7+\n for (let i = 0, l = keys.length; i < l; i++) {\n result.push(keys[i], obj[keys[i]]);\n }\n return result;\n}\nexports.convertObjectToArray = convertObjectToArray;\n/**\n * Convert a map to an array\n * @example\n * ```js\n * > convertMapToArray(new Map([[1, '2']]))\n * [1, '2']\n * ```\n */\nfunction convertMapToArray(map) {\n const result = [];\n let pos = 0;\n map.forEach(function (value, key) {\n result[pos] = key;\n result[pos + 1] = value;\n pos += 2;\n });\n return result;\n}\nexports.convertMapToArray = convertMapToArray;\n/**\n * Convert a non-string arg to a string\n */\nfunction toArg(arg) {\n if (arg === null || typeof arg === \"undefined\") {\n return \"\";\n }\n return String(arg);\n}\nexports.toArg = toArg;\n/**\n * Optimize error stack\n *\n * @param error actually error\n * @param friendlyStack the stack that more meaningful\n * @param filterPath only show stacks with the specified path\n */\nfunction optimizeErrorStack(error, friendlyStack, filterPath) {\n const stacks = friendlyStack.split(\"\\n\");\n let lines = \"\";\n let i;\n for (i = 1; i < stacks.length; ++i) {\n if (stacks[i].indexOf(filterPath) === -1) {\n break;\n }\n }\n for (let j = i; j < stacks.length; ++j) {\n lines += \"\\n\" + stacks[j];\n }\n if (error.stack) {\n const pos = error.stack.indexOf(\"\\n\");\n error.stack = error.stack.slice(0, pos) + lines;\n }\n return error;\n}\nexports.optimizeErrorStack = optimizeErrorStack;\n/**\n * Parse the redis protocol url\n */\nfunction parseURL(url) {\n if (isInt(url)) {\n return { port: url };\n }\n let parsed = (0, url_1.parse)(url, true, true);\n if (!parsed.slashes && url[0] !== \"/\") {\n url = \"//\" + url;\n parsed = (0, url_1.parse)(url, true, true);\n }\n const options = parsed.query || {};\n const result = {};\n if (parsed.auth) {\n const index = parsed.auth.indexOf(\":\");\n result.username = index === -1 ? parsed.auth : parsed.auth.slice(0, index);\n result.password = index === -1 ? \"\" : parsed.auth.slice(index + 1);\n }\n if (parsed.pathname) {\n if (parsed.protocol === \"redis:\" || parsed.protocol === \"rediss:\") {\n if (parsed.pathname.length > 1) {\n result.db = parsed.pathname.slice(1);\n }\n }\n else {\n result.path = parsed.pathname;\n }\n }\n if (parsed.host) {\n result.host = parsed.hostname;\n }\n if (parsed.port) {\n result.port = parsed.port;\n }\n if (typeof options.family === \"string\") {\n const intFamily = Number.parseInt(options.family, 10);\n if (!Number.isNaN(intFamily)) {\n result.family = intFamily;\n }\n }\n (0, lodash_1.defaults)(result, options);\n return result;\n}\nexports.parseURL = parseURL;\n/**\n * Resolve TLS profile shortcut in connection options\n */\nfunction resolveTLSProfile(options) {\n let tls = options === null || options === void 0 ? void 0 : options.tls;\n if (typeof tls === \"string\")\n tls = { profile: tls };\n const profile = TLSProfiles_1.default[tls === null || tls === void 0 ? void 0 : tls.profile];\n if (profile) {\n tls = Object.assign({}, profile, tls);\n delete tls.profile;\n options = Object.assign({}, options, { tls });\n }\n return options;\n}\nexports.resolveTLSProfile = resolveTLSProfile;\n/**\n * Get a random element from `array`\n */\nfunction sample(array, from = 0) {\n const length = array.length;\n if (from >= length) {\n return null;\n }\n return array[from + Math.floor(Math.random() * (length - from))];\n}\nexports.sample = sample;\n/**\n * Shuffle the array using the Fisher-Yates Shuffle.\n * This method will mutate the original array.\n */\nfunction shuffle(array) {\n let counter = array.length;\n // While there are elements in the array\n while (counter > 0) {\n // Pick a random index\n const index = Math.floor(Math.random() * counter);\n // Decrease counter by 1\n counter--;\n // And swap the last element with it\n [array[counter], array[index]] = [array[index], array[counter]];\n }\n return array;\n}\nexports.shuffle = shuffle;\n/**\n * Error message for connection being disconnected\n */\nexports.CONNECTION_CLOSED_ERROR_MSG = \"Connection is closed.\";\nfunction zipMap(keys, values) {\n const map = new Map();\n keys.forEach((key, index) => {\n map.set(key, values[index]);\n });\n return map;\n}\nexports.zipMap = zipMap;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst commands_1 = require(\"@ioredis/commands\");\nconst calculateSlot = require(\"cluster-key-slot\");\nconst standard_as_callback_1 = require(\"standard-as-callback\");\nconst utils_1 = require(\"./utils\");\n/**\n * Command instance\n *\n * It's rare that you need to create a Command instance yourself.\n *\n * ```js\n * var infoCommand = new Command('info', null, function (err, result) {\n * console.log('result', result);\n * });\n *\n * redis.sendCommand(infoCommand);\n *\n * // When no callback provided, Command instance will have a `promise` property,\n * // which will resolve/reject with the result of the command.\n * var getCommand = new Command('get', ['foo']);\n * getCommand.promise.then(function (result) {\n * console.log('result', result);\n * });\n * ```\n */\nclass Command {\n /**\n * Creates an instance of Command.\n * @param name Command name\n * @param args An array of command arguments\n * @param options\n * @param callback The callback that handles the response.\n * If omit, the response will be handled via Promise\n */\n constructor(name, args = [], options = {}, callback) {\n this.name = name;\n this.inTransaction = false;\n this.isResolved = false;\n this.transformed = false;\n this.replyEncoding = options.replyEncoding;\n this.errorStack = options.errorStack;\n this.args = args.flat();\n this.callback = callback;\n this.initPromise();\n if (options.keyPrefix) {\n // @ts-expect-error\n const isBufferKeyPrefix = options.keyPrefix instanceof Buffer;\n // @ts-expect-error\n let keyPrefixBuffer = isBufferKeyPrefix\n ? options.keyPrefix\n : null;\n this._iterateKeys((key) => {\n if (key instanceof Buffer) {\n if (keyPrefixBuffer === null) {\n keyPrefixBuffer = Buffer.from(options.keyPrefix);\n }\n return Buffer.concat([keyPrefixBuffer, key]);\n }\n else if (isBufferKeyPrefix) {\n // @ts-expect-error\n return Buffer.concat([options.keyPrefix, Buffer.from(String(key))]);\n }\n return options.keyPrefix + key;\n });\n }\n if (options.readOnly) {\n this.isReadOnly = true;\n }\n }\n /**\n * Check whether the command has the flag\n */\n static checkFlag(flagName, commandName) {\n return !!this.getFlagMap()[flagName][commandName];\n }\n static setArgumentTransformer(name, func) {\n this._transformer.argument[name] = func;\n }\n static setReplyTransformer(name, func) {\n this._transformer.reply[name] = func;\n }\n static getFlagMap() {\n if (!this.flagMap) {\n this.flagMap = Object.keys(Command.FLAGS).reduce((map, flagName) => {\n map[flagName] = {};\n Command.FLAGS[flagName].forEach((commandName) => {\n map[flagName][commandName] = true;\n });\n return map;\n }, {});\n }\n return this.flagMap;\n }\n getSlot() {\n if (typeof this.slot === \"undefined\") {\n const key = this.getKeys()[0];\n this.slot = key == null ? null : calculateSlot(key);\n }\n return this.slot;\n }\n getKeys() {\n return this._iterateKeys();\n }\n /**\n * Convert command to writable buffer or string\n */\n toWritable(_socket) {\n let result;\n const commandStr = \"*\" +\n (this.args.length + 1) +\n \"\\r\\n$\" +\n Buffer.byteLength(this.name) +\n \"\\r\\n\" +\n this.name +\n \"\\r\\n\";\n if (this.bufferMode) {\n const buffers = new MixedBuffers();\n buffers.push(commandStr);\n for (let i = 0; i < this.args.length; ++i) {\n const arg = this.args[i];\n if (arg instanceof Buffer) {\n if (arg.length === 0) {\n buffers.push(\"$0\\r\\n\\r\\n\");\n }\n else {\n buffers.push(\"$\" + arg.length + \"\\r\\n\");\n buffers.push(arg);\n buffers.push(\"\\r\\n\");\n }\n }\n else {\n buffers.push(\"$\" +\n Buffer.byteLength(arg) +\n \"\\r\\n\" +\n arg +\n \"\\r\\n\");\n }\n }\n result = buffers.toBuffer();\n }\n else {\n result = commandStr;\n for (let i = 0; i < this.args.length; ++i) {\n const arg = this.args[i];\n result +=\n \"$\" +\n Buffer.byteLength(arg) +\n \"\\r\\n\" +\n arg +\n \"\\r\\n\";\n }\n }\n return result;\n }\n stringifyArguments() {\n for (let i = 0; i < this.args.length; ++i) {\n const arg = this.args[i];\n if (typeof arg === \"string\") {\n // buffers and strings don't need any transformation\n }\n else if (arg instanceof Buffer) {\n this.bufferMode = true;\n }\n else {\n this.args[i] = (0, utils_1.toArg)(arg);\n }\n }\n }\n /**\n * Convert buffer/buffer[] to string/string[],\n * and apply reply transformer.\n */\n transformReply(result) {\n if (this.replyEncoding) {\n result = (0, utils_1.convertBufferToString)(result, this.replyEncoding);\n }\n const transformer = Command._transformer.reply[this.name];\n if (transformer) {\n result = transformer(result);\n }\n return result;\n }\n /**\n * Set the wait time before terminating the attempt to execute a command\n * and generating an error.\n */\n setTimeout(ms) {\n if (!this._commandTimeoutTimer) {\n this._commandTimeoutTimer = setTimeout(() => {\n if (!this.isResolved) {\n this.reject(new Error(\"Command timed out\"));\n }\n }, ms);\n }\n }\n initPromise() {\n const promise = new Promise((resolve, reject) => {\n if (!this.transformed) {\n this.transformed = true;\n const transformer = Command._transformer.argument[this.name];\n if (transformer) {\n this.args = transformer(this.args);\n }\n this.stringifyArguments();\n }\n this.resolve = this._convertValue(resolve);\n if (this.errorStack) {\n this.reject = (err) => {\n reject((0, utils_1.optimizeErrorStack)(err, this.errorStack.stack, __dirname));\n };\n }\n else {\n this.reject = reject;\n }\n });\n this.promise = (0, standard_as_callback_1.default)(promise, this.callback);\n }\n /**\n * Iterate through the command arguments that are considered keys.\n */\n _iterateKeys(transform = (key) => key) {\n if (typeof this.keys === \"undefined\") {\n this.keys = [];\n if ((0, commands_1.exists)(this.name)) {\n // @ts-expect-error\n const keyIndexes = (0, commands_1.getKeyIndexes)(this.name, this.args);\n for (const index of keyIndexes) {\n this.args[index] = transform(this.args[index]);\n this.keys.push(this.args[index]);\n }\n }\n }\n return this.keys;\n }\n /**\n * Convert the value from buffer to the target encoding.\n */\n _convertValue(resolve) {\n return (value) => {\n try {\n const existingTimer = this._commandTimeoutTimer;\n if (existingTimer) {\n clearTimeout(existingTimer);\n delete this._commandTimeoutTimer;\n }\n resolve(this.transformReply(value));\n this.isResolved = true;\n }\n catch (err) {\n this.reject(err);\n }\n return this.promise;\n };\n }\n}\nexports.default = Command;\nCommand.FLAGS = {\n VALID_IN_SUBSCRIBER_MODE: [\n \"subscribe\",\n \"psubscribe\",\n \"unsubscribe\",\n \"punsubscribe\",\n \"ssubscribe\",\n \"sunsubscribe\",\n \"ping\",\n \"quit\",\n ],\n VALID_IN_MONITOR_MODE: [\"monitor\", \"auth\"],\n ENTER_SUBSCRIBER_MODE: [\"subscribe\", \"psubscribe\", \"ssubscribe\"],\n EXIT_SUBSCRIBER_MODE: [\"unsubscribe\", \"punsubscribe\", \"sunsubscribe\"],\n WILL_DISCONNECT: [\"quit\"],\n};\nCommand._transformer = {\n argument: {},\n reply: {},\n};\nconst msetArgumentTransformer = function (args) {\n if (args.length === 1) {\n if (args[0] instanceof Map) {\n return (0, utils_1.convertMapToArray)(args[0]);\n }\n if (typeof args[0] === \"object\" && args[0] !== null) {\n return (0, utils_1.convertObjectToArray)(args[0]);\n }\n }\n return args;\n};\nconst hsetArgumentTransformer = function (args) {\n if (args.length === 2) {\n if (args[1] instanceof Map) {\n return [args[0]].concat((0, utils_1.convertMapToArray)(args[1]));\n }\n if (typeof args[1] === \"object\" && args[1] !== null) {\n return [args[0]].concat((0, utils_1.convertObjectToArray)(args[1]));\n }\n }\n return args;\n};\nCommand.setArgumentTransformer(\"mset\", msetArgumentTransformer);\nCommand.setArgumentTransformer(\"msetnx\", msetArgumentTransformer);\nCommand.setArgumentTransformer(\"hset\", hsetArgumentTransformer);\nCommand.setArgumentTransformer(\"hmset\", hsetArgumentTransformer);\nCommand.setReplyTransformer(\"hgetall\", function (result) {\n if (Array.isArray(result)) {\n const obj = {};\n for (let i = 0; i < result.length; i += 2) {\n const key = result[i];\n const value = result[i + 1];\n if (key in obj) {\n // can only be truthy if the property is special somehow, like '__proto__' or 'constructor'\n // https://github.com/luin/ioredis/issues/1267\n Object.defineProperty(obj, key, {\n value,\n configurable: true,\n enumerable: true,\n writable: true,\n });\n }\n else {\n obj[key] = value;\n }\n }\n return obj;\n }\n return result;\n});\nclass MixedBuffers {\n constructor() {\n this.length = 0;\n this.items = [];\n }\n push(x) {\n this.length += Buffer.byteLength(x);\n this.items.push(x);\n }\n toBuffer() {\n const result = Buffer.allocUnsafe(this.length);\n let offset = 0;\n for (const item of this.items) {\n const length = Buffer.byteLength(item);\n Buffer.isBuffer(item)\n ? item.copy(result, offset)\n : result.write(item, offset, length);\n offset += length;\n }\n return result;\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst redis_errors_1 = require(\"redis-errors\");\nclass ClusterAllFailedError extends redis_errors_1.RedisError {\n constructor(message, lastNodeError) {\n super(message);\n this.lastNodeError = lastNodeError;\n Error.captureStackTrace(this, this.constructor);\n }\n get name() {\n return this.constructor.name;\n }\n}\nexports.default = ClusterAllFailedError;\nClusterAllFailedError.defaultMessage = \"Failed to refresh slots cache.\";\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\n/**\n * Convenient class to convert the process of scanning keys to a readable stream.\n */\nclass ScanStream extends stream_1.Readable {\n constructor(opt) {\n super(opt);\n this.opt = opt;\n this._redisCursor = \"0\";\n this._redisDrained = false;\n }\n _read() {\n if (this._redisDrained) {\n this.push(null);\n return;\n }\n const args = [this._redisCursor];\n if (this.opt.key) {\n args.unshift(this.opt.key);\n }\n if (this.opt.match) {\n args.push(\"MATCH\", this.opt.match);\n }\n if (this.opt.type) {\n args.push(\"TYPE\", this.opt.type);\n }\n if (this.opt.count) {\n args.push(\"COUNT\", String(this.opt.count));\n }\n this.opt.redis[this.opt.command](args, (err, res) => {\n if (err) {\n this.emit(\"error\", err);\n return;\n }\n this._redisCursor = res[0] instanceof Buffer ? res[0].toString() : res[0];\n if (this._redisCursor === \"0\") {\n this._redisDrained = true;\n }\n this.push(res[1]);\n });\n }\n close() {\n this._redisDrained = true;\n }\n}\nexports.default = ScanStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.executeWithAutoPipelining = exports.getFirstValueInFlattenedArray = exports.shouldUseAutoPipelining = exports.notAllowedAutoPipelineCommands = exports.kCallbacks = exports.kExec = void 0;\nconst lodash_1 = require(\"./utils/lodash\");\nconst calculateSlot = require(\"cluster-key-slot\");\nconst standard_as_callback_1 = require(\"standard-as-callback\");\nexports.kExec = Symbol(\"exec\");\nexports.kCallbacks = Symbol(\"callbacks\");\nexports.notAllowedAutoPipelineCommands = [\n \"auth\",\n \"info\",\n \"script\",\n \"quit\",\n \"cluster\",\n \"pipeline\",\n \"multi\",\n \"subscribe\",\n \"psubscribe\",\n \"unsubscribe\",\n \"unpsubscribe\",\n \"select\",\n];\nfunction executeAutoPipeline(client, slotKey) {\n /*\n If a pipeline is already executing, keep queueing up commands\n since ioredis won't serve two pipelines at the same time\n */\n if (client._runningAutoPipelines.has(slotKey)) {\n return;\n }\n if (!client._autoPipelines.has(slotKey)) {\n /*\n Rare edge case. Somehow, something has deleted this running autopipeline in an immediate\n call to executeAutoPipeline.\n \n Maybe the callback in the pipeline.exec is sometimes called in the same tick,\n e.g. if redis is disconnected?\n */\n return;\n }\n client._runningAutoPipelines.add(slotKey);\n // Get the pipeline and immediately delete it so that new commands are queued on a new pipeline\n const pipeline = client._autoPipelines.get(slotKey);\n client._autoPipelines.delete(slotKey);\n const callbacks = pipeline[exports.kCallbacks];\n // Stop keeping a reference to callbacks immediately after the callbacks stop being used.\n // This allows the GC to reclaim objects referenced by callbacks, especially with 16384 slots\n // in Redis.Cluster\n pipeline[exports.kCallbacks] = null;\n // Perform the call\n pipeline.exec(function (err, results) {\n client._runningAutoPipelines.delete(slotKey);\n /*\n Invoke all callback in nextTick so the stack is cleared\n and callbacks can throw errors without affecting other callbacks.\n */\n if (err) {\n for (let i = 0; i < callbacks.length; i++) {\n process.nextTick(callbacks[i], err);\n }\n }\n else {\n for (let i = 0; i < callbacks.length; i++) {\n process.nextTick(callbacks[i], ...results[i]);\n }\n }\n // If there is another pipeline on the same node, immediately execute it without waiting for nextTick\n if (client._autoPipelines.has(slotKey)) {\n executeAutoPipeline(client, slotKey);\n }\n });\n}\nfunction shouldUseAutoPipelining(client, functionName, commandName) {\n return (functionName &&\n client.options.enableAutoPipelining &&\n !client.isPipeline &&\n !exports.notAllowedAutoPipelineCommands.includes(commandName) &&\n !client.options.autoPipeliningIgnoredCommands.includes(commandName));\n}\nexports.shouldUseAutoPipelining = shouldUseAutoPipelining;\nfunction getFirstValueInFlattenedArray(args) {\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (typeof arg === \"string\") {\n return arg;\n }\n else if (Array.isArray(arg) || (0, lodash_1.isArguments)(arg)) {\n if (arg.length === 0) {\n continue;\n }\n return arg[0];\n }\n const flattened = [arg].flat();\n if (flattened.length > 0) {\n return flattened[0];\n }\n }\n return undefined;\n}\nexports.getFirstValueInFlattenedArray = getFirstValueInFlattenedArray;\nfunction executeWithAutoPipelining(client, functionName, commandName, args, callback) {\n // On cluster mode let's wait for slots to be available\n if (client.isCluster && !client.slots.length) {\n if (client.status === \"wait\")\n client.connect().catch(lodash_1.noop);\n return (0, standard_as_callback_1.default)(new Promise(function (resolve, reject) {\n client.delayUntilReady((err) => {\n if (err) {\n reject(err);\n return;\n }\n executeWithAutoPipelining(client, functionName, commandName, args, null).then(resolve, reject);\n });\n }), callback);\n }\n // If we have slot information, we can improve routing by grouping slots served by the same subset of nodes\n // Note that the first value in args may be a (possibly empty) array.\n // ioredis will only flatten one level of the array, in the Command constructor.\n const prefix = client.options.keyPrefix || \"\";\n const slotKey = client.isCluster\n ? client.slots[calculateSlot(`${prefix}${getFirstValueInFlattenedArray(args)}`)].join(\",\")\n : \"main\";\n if (!client._autoPipelines.has(slotKey)) {\n const pipeline = client.pipeline();\n pipeline[exports.kExec] = false;\n pipeline[exports.kCallbacks] = [];\n client._autoPipelines.set(slotKey, pipeline);\n }\n const pipeline = client._autoPipelines.get(slotKey);\n /*\n Mark the pipeline as scheduled.\n The symbol will make sure that the pipeline is only scheduled once per tick.\n New commands are appended to an already scheduled pipeline.\n */\n if (!pipeline[exports.kExec]) {\n pipeline[exports.kExec] = true;\n /*\n Deferring with setImmediate so we have a chance to capture multiple\n commands that can be scheduled by I/O events already in the event loop queue.\n */\n setImmediate(executeAutoPipeline, client, slotKey);\n }\n // Create the promise which will execute the command in the pipeline.\n const autoPipelinePromise = new Promise(function (resolve, reject) {\n pipeline[exports.kCallbacks].push(function (err, value) {\n if (err) {\n reject(err);\n return;\n }\n resolve(value);\n });\n if (functionName === \"call\") {\n args.unshift(commandName);\n }\n pipeline[functionName](...args);\n });\n return (0, standard_as_callback_1.default)(autoPipelinePromise, callback);\n}\nexports.executeWithAutoPipelining = executeWithAutoPipelining;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst Command_1 = require(\"./Command\");\nconst standard_as_callback_1 = require(\"standard-as-callback\");\nclass Script {\n constructor(lua, numberOfKeys = null, keyPrefix = \"\", readOnly = false) {\n this.lua = lua;\n this.numberOfKeys = numberOfKeys;\n this.keyPrefix = keyPrefix;\n this.readOnly = readOnly;\n this.sha = (0, crypto_1.createHash)(\"sha1\").update(lua).digest(\"hex\");\n const sha = this.sha;\n const socketHasScriptLoaded = new WeakSet();\n this.Command = class CustomScriptCommand extends Command_1.default {\n toWritable(socket) {\n const origReject = this.reject;\n this.reject = (err) => {\n if (err.message.indexOf(\"NOSCRIPT\") !== -1) {\n socketHasScriptLoaded.delete(socket);\n }\n origReject.call(this, err);\n };\n if (!socketHasScriptLoaded.has(socket)) {\n socketHasScriptLoaded.add(socket);\n this.name = \"eval\";\n this.args[0] = lua;\n }\n else if (this.name === \"eval\") {\n this.name = \"evalsha\";\n this.args[0] = sha;\n }\n return super.toWritable(socket);\n }\n };\n }\n execute(container, args, options, callback) {\n if (typeof this.numberOfKeys === \"number\") {\n args.unshift(this.numberOfKeys);\n }\n if (this.keyPrefix) {\n options.keyPrefix = this.keyPrefix;\n }\n if (this.readOnly) {\n options.readOnly = true;\n }\n const evalsha = new this.Command(\"evalsha\", [this.sha, ...args], options);\n evalsha.promise = evalsha.promise.catch((err) => {\n if (err.message.indexOf(\"NOSCRIPT\") === -1) {\n throw err;\n }\n // Resend the same custom evalsha command that gets transformed\n // to an eval in case it's not loaded yet on the connection.\n const resend = new this.Command(\"evalsha\", [this.sha, ...args], options);\n const client = container.isPipeline ? container.redis : container;\n return client.sendCommand(resend);\n });\n (0, standard_as_callback_1.default)(evalsha.promise, callback);\n return container.sendCommand(evalsha);\n }\n}\nexports.default = Script;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst commands_1 = require(\"@ioredis/commands\");\nconst autoPipelining_1 = require(\"../autoPipelining\");\nconst Command_1 = require(\"../Command\");\nconst Script_1 = require(\"../Script\");\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nclass Commander {\n constructor() {\n this.options = {};\n /**\n * @ignore\n */\n this.scriptsSet = {};\n /**\n * @ignore\n */\n this.addedBuiltinSet = new Set();\n }\n /**\n * Return supported builtin commands\n */\n getBuiltinCommands() {\n return commands.slice(0);\n }\n /**\n * Create a builtin command\n */\n createBuiltinCommand(commandName) {\n return {\n string: generateFunction(null, commandName, \"utf8\"),\n buffer: generateFunction(null, commandName, null),\n };\n }\n /**\n * Create add builtin command\n */\n addBuiltinCommand(commandName) {\n this.addedBuiltinSet.add(commandName);\n this[commandName] = generateFunction(commandName, commandName, \"utf8\");\n this[commandName + \"Buffer\"] = generateFunction(commandName + \"Buffer\", commandName, null);\n }\n /**\n * Define a custom command using lua script\n */\n defineCommand(name, definition) {\n const script = new Script_1.default(definition.lua, definition.numberOfKeys, this.options.keyPrefix, definition.readOnly);\n this.scriptsSet[name] = script;\n this[name] = generateScriptingFunction(name, name, script, \"utf8\");\n this[name + \"Buffer\"] = generateScriptingFunction(name + \"Buffer\", name, script, null);\n }\n /**\n * @ignore\n */\n sendCommand(command, stream, node) {\n throw new Error('\"sendCommand\" is not implemented');\n }\n}\nconst commands = commands_1.list.filter((command) => command !== \"monitor\");\ncommands.push(\"sentinel\");\ncommands.forEach(function (commandName) {\n Commander.prototype[commandName] = generateFunction(commandName, commandName, \"utf8\");\n Commander.prototype[commandName + \"Buffer\"] = generateFunction(commandName + \"Buffer\", commandName, null);\n});\nCommander.prototype.call = generateFunction(\"call\", \"utf8\");\nCommander.prototype.callBuffer = generateFunction(\"callBuffer\", null);\n// @ts-expect-error\nCommander.prototype.send_command = Commander.prototype.call;\nfunction generateFunction(functionName, _commandName, _encoding) {\n if (typeof _encoding === \"undefined\") {\n _encoding = _commandName;\n _commandName = null;\n }\n return function (...args) {\n const commandName = (_commandName || args.shift());\n let callback = args[args.length - 1];\n if (typeof callback === \"function\") {\n args.pop();\n }\n else {\n callback = undefined;\n }\n const options = {\n errorStack: this.options.showFriendlyErrorStack ? new Error() : undefined,\n keyPrefix: this.options.keyPrefix,\n replyEncoding: _encoding,\n };\n // No auto pipeline, use regular command sending\n if (!(0, autoPipelining_1.shouldUseAutoPipelining)(this, functionName, commandName)) {\n return this.sendCommand(\n // @ts-expect-error\n new Command_1.default(commandName, args, options, callback));\n }\n // Create a new pipeline and make sure it's scheduled\n return (0, autoPipelining_1.executeWithAutoPipelining)(this, functionName, commandName, \n // @ts-expect-error\n args, callback);\n };\n}\nfunction generateScriptingFunction(functionName, commandName, script, encoding) {\n return function (...args) {\n const callback = typeof args[args.length - 1] === \"function\" ? args.pop() : undefined;\n const options = {\n replyEncoding: encoding,\n };\n if (this.options.showFriendlyErrorStack) {\n options.errorStack = new Error();\n }\n // No auto pipeline, use regular command sending\n if (!(0, autoPipelining_1.shouldUseAutoPipelining)(this, functionName, commandName)) {\n return script.execute(this, args, options, callback);\n }\n // Create a new pipeline and make sure it's scheduled\n return (0, autoPipelining_1.executeWithAutoPipelining)(this, functionName, commandName, args, callback);\n };\n}\nexports.default = Commander;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst calculateSlot = require(\"cluster-key-slot\");\nconst commands_1 = require(\"@ioredis/commands\");\nconst standard_as_callback_1 = require(\"standard-as-callback\");\nconst util_1 = require(\"util\");\nconst Command_1 = require(\"./Command\");\nconst utils_1 = require(\"./utils\");\nconst Commander_1 = require(\"./utils/Commander\");\n/*\n This function derives from the cluster-key-slot implementation.\n Instead of checking that all keys have the same slot, it checks that all slots are served by the same set of nodes.\n If this is satisfied, it returns the first key's slot.\n*/\nfunction generateMultiWithNodes(redis, keys) {\n const slot = calculateSlot(keys[0]);\n const target = redis._groupsBySlot[slot];\n for (let i = 1; i < keys.length; i++) {\n if (redis._groupsBySlot[calculateSlot(keys[i])] !== target) {\n return -1;\n }\n }\n return slot;\n}\nclass Pipeline extends Commander_1.default {\n constructor(redis) {\n super();\n this.redis = redis;\n this.isPipeline = true;\n this.replyPending = 0;\n this._queue = [];\n this._result = [];\n this._transactions = 0;\n this._shaToScript = {};\n this.isCluster =\n this.redis.constructor.name === \"Cluster\" || this.redis.isCluster;\n this.options = redis.options;\n Object.keys(redis.scriptsSet).forEach((name) => {\n const script = redis.scriptsSet[name];\n this._shaToScript[script.sha] = script;\n this[name] = redis[name];\n this[name + \"Buffer\"] = redis[name + \"Buffer\"];\n });\n redis.addedBuiltinSet.forEach((name) => {\n this[name] = redis[name];\n this[name + \"Buffer\"] = redis[name + \"Buffer\"];\n });\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n const _this = this;\n Object.defineProperty(this, \"length\", {\n get: function () {\n return _this._queue.length;\n },\n });\n }\n fillResult(value, position) {\n if (this._queue[position].name === \"exec\" && Array.isArray(value[1])) {\n const execLength = value[1].length;\n for (let i = 0; i < execLength; i++) {\n if (value[1][i] instanceof Error) {\n continue;\n }\n const cmd = this._queue[position - (execLength - i)];\n try {\n value[1][i] = cmd.transformReply(value[1][i]);\n }\n catch (err) {\n value[1][i] = err;\n }\n }\n }\n this._result[position] = value;\n if (--this.replyPending) {\n return;\n }\n if (this.isCluster) {\n let retriable = true;\n let commonError;\n for (let i = 0; i < this._result.length; ++i) {\n const error = this._result[i][0];\n const command = this._queue[i];\n if (error) {\n if (command.name === \"exec\" &&\n error.message ===\n \"EXECABORT Transaction discarded because of previous errors.\") {\n continue;\n }\n if (!commonError) {\n commonError = {\n name: error.name,\n message: error.message,\n };\n }\n else if (commonError.name !== error.name ||\n commonError.message !== error.message) {\n retriable = false;\n break;\n }\n }\n else if (!command.inTransaction) {\n const isReadOnly = (0, commands_1.exists)(command.name) && (0, commands_1.hasFlag)(command.name, \"readonly\");\n if (!isReadOnly) {\n retriable = false;\n break;\n }\n }\n }\n if (commonError && retriable) {\n const _this = this;\n const errv = commonError.message.split(\" \");\n const queue = this._queue;\n let inTransaction = false;\n this._queue = [];\n for (let i = 0; i < queue.length; ++i) {\n if (errv[0] === \"ASK\" &&\n !inTransaction &&\n queue[i].name !== \"asking\" &&\n (!queue[i - 1] || queue[i - 1].name !== \"asking\")) {\n const asking = new Command_1.default(\"asking\");\n asking.ignore = true;\n this.sendCommand(asking);\n }\n queue[i].initPromise();\n this.sendCommand(queue[i]);\n inTransaction = queue[i].inTransaction;\n }\n let matched = true;\n if (typeof this.leftRedirections === \"undefined\") {\n this.leftRedirections = {};\n }\n const exec = function () {\n _this.exec();\n };\n const cluster = this.redis;\n cluster.handleError(commonError, this.leftRedirections, {\n moved: function (_slot, key) {\n _this.preferKey = key;\n cluster.slots[errv[1]] = [key];\n cluster._groupsBySlot[errv[1]] =\n cluster._groupsIds[cluster.slots[errv[1]].join(\";\")];\n cluster.refreshSlotsCache();\n _this.exec();\n },\n ask: function (_slot, key) {\n _this.preferKey = key;\n _this.exec();\n },\n tryagain: exec,\n clusterDown: exec,\n connectionClosed: exec,\n maxRedirections: () => {\n matched = false;\n },\n defaults: () => {\n matched = false;\n },\n });\n if (matched) {\n return;\n }\n }\n }\n let ignoredCount = 0;\n for (let i = 0; i < this._queue.length - ignoredCount; ++i) {\n if (this._queue[i + ignoredCount].ignore) {\n ignoredCount += 1;\n }\n this._result[i] = this._result[i + ignoredCount];\n }\n this.resolve(this._result.slice(0, this._result.length - ignoredCount));\n }\n sendCommand(command) {\n if (this._transactions > 0) {\n command.inTransaction = true;\n }\n const position = this._queue.length;\n command.pipelineIndex = position;\n command.promise\n .then((result) => {\n this.fillResult([null, result], position);\n })\n .catch((error) => {\n this.fillResult([error], position);\n });\n this._queue.push(command);\n return this;\n }\n addBatch(commands) {\n let command, commandName, args;\n for (let i = 0; i < commands.length; ++i) {\n command = commands[i];\n commandName = command[0];\n args = command.slice(1);\n this[commandName].apply(this, args);\n }\n return this;\n }\n}\nexports.default = Pipeline;\n// @ts-expect-error\nconst multi = Pipeline.prototype.multi;\n// @ts-expect-error\nPipeline.prototype.multi = function () {\n this._transactions += 1;\n return multi.apply(this, arguments);\n};\n// @ts-expect-error\nconst execBuffer = Pipeline.prototype.execBuffer;\n// @ts-expect-error\nPipeline.prototype.execBuffer = (0, util_1.deprecate)(function () {\n if (this._transactions > 0) {\n this._transactions -= 1;\n }\n return execBuffer.apply(this, arguments);\n}, \"Pipeline#execBuffer: Use Pipeline#exec instead\");\n// NOTE: To avoid an unhandled promise rejection, this will unconditionally always return this.promise,\n// which always has the rejection handled by standard-as-callback\n// adding the provided rejection callback.\n//\n// If a different promise instance were returned, that promise would cause its own unhandled promise rejection\n// errors, even if that promise unconditionally resolved to **the resolved value of** this.promise.\nPipeline.prototype.exec = function (callback) {\n // Wait for the cluster to be connected, since we need nodes information before continuing\n if (this.isCluster && !this.redis.slots.length) {\n if (this.redis.status === \"wait\")\n this.redis.connect().catch(utils_1.noop);\n if (callback && !this.nodeifiedPromise) {\n this.nodeifiedPromise = true;\n (0, standard_as_callback_1.default)(this.promise, callback);\n }\n this.redis.delayUntilReady((err) => {\n if (err) {\n this.reject(err);\n return;\n }\n this.exec(callback);\n });\n return this.promise;\n }\n if (this._transactions > 0) {\n this._transactions -= 1;\n return execBuffer.apply(this, arguments);\n }\n if (!this.nodeifiedPromise) {\n this.nodeifiedPromise = true;\n (0, standard_as_callback_1.default)(this.promise, callback);\n }\n if (!this._queue.length) {\n this.resolve([]);\n }\n let pipelineSlot;\n if (this.isCluster) {\n // List of the first key for each command\n const sampleKeys = [];\n for (let i = 0; i < this._queue.length; i++) {\n const keys = this._queue[i].getKeys();\n if (keys.length) {\n sampleKeys.push(keys[0]);\n }\n // For each command, check that the keys belong to the same slot\n if (keys.length && calculateSlot.generateMulti(keys) < 0) {\n this.reject(new Error(\"All the keys in a pipeline command should belong to the same slot\"));\n return this.promise;\n }\n }\n if (sampleKeys.length) {\n pipelineSlot = generateMultiWithNodes(this.redis, sampleKeys);\n if (pipelineSlot < 0) {\n this.reject(new Error(\"All keys in the pipeline should belong to the same slots allocation group\"));\n return this.promise;\n }\n }\n else {\n // Send the pipeline to a random node\n pipelineSlot = (Math.random() * 16384) | 0;\n }\n }\n const _this = this;\n execPipeline();\n return this.promise;\n function execPipeline() {\n let writePending = (_this.replyPending = _this._queue.length);\n let node;\n if (_this.isCluster) {\n node = {\n slot: pipelineSlot,\n redis: _this.redis.connectionPool.nodes.all[_this.preferKey],\n };\n }\n let data = \"\";\n let buffers;\n const stream = {\n isPipeline: true,\n destination: _this.isCluster ? node : { redis: _this.redis },\n write(writable) {\n if (typeof writable !== \"string\") {\n if (!buffers) {\n buffers = [];\n }\n if (data) {\n buffers.push(Buffer.from(data, \"utf8\"));\n data = \"\";\n }\n buffers.push(writable);\n }\n else {\n data += writable;\n }\n if (!--writePending) {\n if (buffers) {\n if (data) {\n buffers.push(Buffer.from(data, \"utf8\"));\n }\n stream.destination.redis.stream.write(Buffer.concat(buffers));\n }\n else {\n stream.destination.redis.stream.write(data);\n }\n // Reset writePending for resending\n writePending = _this._queue.length;\n data = \"\";\n buffers = undefined;\n }\n },\n };\n for (let i = 0; i < _this._queue.length; ++i) {\n _this.redis.sendCommand(_this._queue[i], stream, node);\n }\n return _this.promise;\n }\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addTransactionSupport = void 0;\nconst utils_1 = require(\"./utils\");\nconst standard_as_callback_1 = require(\"standard-as-callback\");\nconst Pipeline_1 = require(\"./Pipeline\");\nfunction addTransactionSupport(redis) {\n redis.pipeline = function (commands) {\n const pipeline = new Pipeline_1.default(this);\n if (Array.isArray(commands)) {\n pipeline.addBatch(commands);\n }\n return pipeline;\n };\n const { multi } = redis;\n redis.multi = function (commands, options) {\n if (typeof options === \"undefined\" && !Array.isArray(commands)) {\n options = commands;\n commands = null;\n }\n if (options && options.pipeline === false) {\n return multi.call(this);\n }\n const pipeline = new Pipeline_1.default(this);\n // @ts-expect-error\n pipeline.multi();\n if (Array.isArray(commands)) {\n pipeline.addBatch(commands);\n }\n const exec = pipeline.exec;\n pipeline.exec = function (callback) {\n // Wait for the cluster to be connected, since we need nodes information before continuing\n if (this.isCluster && !this.redis.slots.length) {\n if (this.redis.status === \"wait\")\n this.redis.connect().catch(utils_1.noop);\n return (0, standard_as_callback_1.default)(new Promise((resolve, reject) => {\n this.redis.delayUntilReady((err) => {\n if (err) {\n reject(err);\n return;\n }\n this.exec(pipeline).then(resolve, reject);\n });\n }), callback);\n }\n if (this._transactions > 0) {\n exec.call(pipeline);\n }\n // Returns directly when the pipeline\n // has been called multiple times (retries).\n if (this.nodeifiedPromise) {\n return exec.call(pipeline);\n }\n const promise = exec.call(pipeline);\n return (0, standard_as_callback_1.default)(promise.then(function (result) {\n const execResult = result[result.length - 1];\n if (typeof execResult === \"undefined\") {\n throw new Error(\"Pipeline cannot be used to send any commands when the `exec()` has been called on it.\");\n }\n if (execResult[0]) {\n execResult[0].previousErrors = [];\n for (let i = 0; i < result.length - 1; ++i) {\n if (result[i][0]) {\n execResult[0].previousErrors.push(result[i][0]);\n }\n }\n throw execResult[0];\n }\n return (0, utils_1.wrapMultiResult)(execResult[1]);\n }), callback);\n };\n // @ts-expect-error\n const { execBuffer } = pipeline;\n // @ts-expect-error\n pipeline.execBuffer = function (callback) {\n if (this._transactions > 0) {\n execBuffer.call(pipeline);\n }\n return pipeline.exec(callback);\n };\n return pipeline;\n };\n const { exec } = redis;\n redis.exec = function (callback) {\n return (0, standard_as_callback_1.default)(exec.call(this).then(function (results) {\n if (Array.isArray(results)) {\n results = (0, utils_1.wrapMultiResult)(results);\n }\n return results;\n }), callback);\n };\n}\nexports.addTransactionSupport = addTransactionSupport;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction applyMixin(derivedConstructor, mixinConstructor) {\n Object.getOwnPropertyNames(mixinConstructor.prototype).forEach((name) => {\n Object.defineProperty(derivedConstructor.prototype, name, Object.getOwnPropertyDescriptor(mixinConstructor.prototype, name));\n });\n}\nexports.default = applyMixin;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_CLUSTER_OPTIONS = void 0;\nconst dns_1 = require(\"dns\");\nexports.DEFAULT_CLUSTER_OPTIONS = {\n clusterRetryStrategy: (times) => Math.min(100 + times * 2, 2000),\n enableOfflineQueue: true,\n enableReadyCheck: true,\n scaleReads: \"master\",\n maxRedirections: 16,\n retryDelayOnMoved: 0,\n retryDelayOnFailover: 100,\n retryDelayOnClusterDown: 100,\n retryDelayOnTryAgain: 100,\n slotsRefreshTimeout: 1000,\n useSRVRecords: false,\n resolveSrv: dns_1.resolveSrv,\n dnsLookup: dns_1.lookup,\n enableAutoPipelining: false,\n autoPipeliningIgnoredCommands: [],\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getConnectionName = exports.weightSrvRecords = exports.groupSrvRecords = exports.getUniqueHostnamesFromOptions = exports.normalizeNodeOptions = exports.nodeKeyToRedisOptions = exports.getNodeKey = void 0;\nconst utils_1 = require(\"../utils\");\nconst net_1 = require(\"net\");\nfunction getNodeKey(node) {\n node.port = node.port || 6379;\n node.host = node.host || \"127.0.0.1\";\n return node.host + \":\" + node.port;\n}\nexports.getNodeKey = getNodeKey;\nfunction nodeKeyToRedisOptions(nodeKey) {\n const portIndex = nodeKey.lastIndexOf(\":\");\n if (portIndex === -1) {\n throw new Error(`Invalid node key ${nodeKey}`);\n }\n return {\n host: nodeKey.slice(0, portIndex),\n port: Number(nodeKey.slice(portIndex + 1)),\n };\n}\nexports.nodeKeyToRedisOptions = nodeKeyToRedisOptions;\nfunction normalizeNodeOptions(nodes) {\n return nodes.map((node) => {\n const options = {};\n if (typeof node === \"object\") {\n Object.assign(options, node);\n }\n else if (typeof node === \"string\") {\n Object.assign(options, (0, utils_1.parseURL)(node));\n }\n else if (typeof node === \"number\") {\n options.port = node;\n }\n else {\n throw new Error(\"Invalid argument \" + node);\n }\n if (typeof options.port === \"string\") {\n options.port = parseInt(options.port, 10);\n }\n // Cluster mode only support db 0\n delete options.db;\n if (!options.port) {\n options.port = 6379;\n }\n if (!options.host) {\n options.host = \"127.0.0.1\";\n }\n return (0, utils_1.resolveTLSProfile)(options);\n });\n}\nexports.normalizeNodeOptions = normalizeNodeOptions;\nfunction getUniqueHostnamesFromOptions(nodes) {\n const uniqueHostsMap = {};\n nodes.forEach((node) => {\n uniqueHostsMap[node.host] = true;\n });\n return Object.keys(uniqueHostsMap).filter((host) => !(0, net_1.isIP)(host));\n}\nexports.getUniqueHostnamesFromOptions = getUniqueHostnamesFromOptions;\nfunction groupSrvRecords(records) {\n const recordsByPriority = {};\n for (const record of records) {\n if (!recordsByPriority.hasOwnProperty(record.priority)) {\n recordsByPriority[record.priority] = {\n totalWeight: record.weight,\n records: [record],\n };\n }\n else {\n recordsByPriority[record.priority].totalWeight += record.weight;\n recordsByPriority[record.priority].records.push(record);\n }\n }\n return recordsByPriority;\n}\nexports.groupSrvRecords = groupSrvRecords;\nfunction weightSrvRecords(recordsGroup) {\n if (recordsGroup.records.length === 1) {\n recordsGroup.totalWeight = 0;\n return recordsGroup.records.shift();\n }\n // + `recordsGroup.records.length` to support `weight` 0\n const random = Math.floor(Math.random() * (recordsGroup.totalWeight + recordsGroup.records.length));\n let total = 0;\n for (const [i, record] of recordsGroup.records.entries()) {\n total += 1 + record.weight;\n if (total > random) {\n recordsGroup.totalWeight -= record.weight;\n recordsGroup.records.splice(i, 1);\n return record;\n }\n }\n}\nexports.weightSrvRecords = weightSrvRecords;\nfunction getConnectionName(component, nodeConnectionName) {\n const prefix = `ioredis-cluster(${component})`;\n return nodeConnectionName ? `${prefix}:${nodeConnectionName}` : prefix;\n}\nexports.getConnectionName = getConnectionName;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"./util\");\nconst utils_1 = require(\"../utils\");\nconst Redis_1 = require(\"../Redis\");\nconst debug = (0, utils_1.Debug)(\"cluster:subscriber\");\nclass ClusterSubscriber {\n constructor(connectionPool, emitter) {\n this.connectionPool = connectionPool;\n this.emitter = emitter;\n this.started = false;\n this.subscriber = null;\n this.onSubscriberEnd = () => {\n if (!this.started) {\n debug(\"subscriber has disconnected, but ClusterSubscriber is not started, so not reconnecting.\");\n return;\n }\n // If the subscriber closes whilst it's still the active connection,\n // we might as well try to connecting to a new node if possible to\n // minimise the number of missed publishes.\n debug(\"subscriber has disconnected, selecting a new one...\");\n this.selectSubscriber();\n };\n // If the current node we're using as the subscriber disappears\n // from the node pool for some reason, we will select a new one\n // to connect to.\n // Note that this event is only triggered if the connection to\n // the node has been used; cluster subscriptions are setup with\n // lazyConnect = true. It's possible for the subscriber node to\n // disappear without this method being called!\n // See https://github.com/luin/ioredis/pull/1589\n this.connectionPool.on(\"-node\", (_, key) => {\n if (!this.started || !this.subscriber) {\n return;\n }\n if ((0, util_1.getNodeKey)(this.subscriber.options) === key) {\n debug(\"subscriber has left, selecting a new one...\");\n this.selectSubscriber();\n }\n });\n this.connectionPool.on(\"+node\", () => {\n if (!this.started || this.subscriber) {\n return;\n }\n debug(\"a new node is discovered and there is no subscriber, selecting a new one...\");\n this.selectSubscriber();\n });\n }\n getInstance() {\n return this.subscriber;\n }\n start() {\n this.started = true;\n this.selectSubscriber();\n debug(\"started\");\n }\n stop() {\n this.started = false;\n if (this.subscriber) {\n this.subscriber.disconnect();\n this.subscriber = null;\n }\n debug(\"stopped\");\n }\n selectSubscriber() {\n const lastActiveSubscriber = this.lastActiveSubscriber;\n // Disconnect the previous subscriber even if there\n // will not be a new one.\n if (lastActiveSubscriber) {\n lastActiveSubscriber.off(\"end\", this.onSubscriberEnd);\n lastActiveSubscriber.disconnect();\n }\n if (this.subscriber) {\n this.subscriber.off(\"end\", this.onSubscriberEnd);\n this.subscriber.disconnect();\n }\n const sampleNode = (0, utils_1.sample)(this.connectionPool.getNodes());\n if (!sampleNode) {\n debug(\"selecting subscriber failed since there is no node discovered in the cluster yet\");\n this.subscriber = null;\n return;\n }\n const { options } = sampleNode;\n debug(\"selected a subscriber %s:%s\", options.host, options.port);\n /*\n * Create a specialized Redis connection for the subscription.\n * Note that auto reconnection is enabled here.\n *\n * `enableReadyCheck` is also enabled because although subscription is allowed\n * while redis is loading data from the disk, we can check if the password\n * provided for the subscriber is correct, and if not, the current subscriber\n * will be disconnected and a new subscriber will be selected.\n */\n this.subscriber = new Redis_1.default({\n port: options.port,\n host: options.host,\n username: options.username,\n password: options.password,\n enableReadyCheck: true,\n connectionName: (0, util_1.getConnectionName)(\"subscriber\", options.connectionName),\n lazyConnect: true,\n tls: options.tls,\n // Don't try to reconnect the subscriber connection. If the connection fails\n // we will get an end event (handled below), at which point we'll pick a new\n // node from the pool and try to connect to that as the subscriber connection.\n retryStrategy: null,\n });\n // Ignore the errors since they're handled in the connection pool.\n this.subscriber.on(\"error\", utils_1.noop);\n // The node we lost connection to may not come back up in a\n // reasonable amount of time (e.g. a slave that's taken down\n // for maintainence), we could potentially miss many published\n // messages so we should reconnect as quickly as possible, to\n // a different node if needed.\n this.subscriber.once(\"end\", this.onSubscriberEnd);\n // Re-subscribe previous channels\n const previousChannels = { subscribe: [], psubscribe: [], ssubscribe: [] };\n if (lastActiveSubscriber) {\n const condition = lastActiveSubscriber.condition || lastActiveSubscriber.prevCondition;\n if (condition && condition.subscriber) {\n previousChannels.subscribe = condition.subscriber.channels(\"subscribe\");\n previousChannels.psubscribe =\n condition.subscriber.channels(\"psubscribe\");\n previousChannels.ssubscribe =\n condition.subscriber.channels(\"ssubscribe\");\n }\n }\n if (previousChannels.subscribe.length ||\n previousChannels.psubscribe.length ||\n previousChannels.ssubscribe.length) {\n let pending = 0;\n for (const type of [\"subscribe\", \"psubscribe\", \"ssubscribe\"]) {\n const channels = previousChannels[type];\n if (channels.length) {\n pending += 1;\n debug(\"%s %d channels\", type, channels.length);\n this.subscriber[type](channels)\n .then(() => {\n if (!--pending) {\n this.lastActiveSubscriber = this.subscriber;\n }\n })\n .catch(() => {\n // TODO: should probably disconnect the subscriber and try again.\n debug(\"failed to %s %d channels\", type, channels.length);\n });\n }\n }\n }\n else {\n this.lastActiveSubscriber = this.subscriber;\n }\n for (const event of [\n \"message\",\n \"messageBuffer\",\n \"smessage\",\n \"smessageBuffer\",\n ]) {\n this.subscriber.on(event, (arg1, arg2) => {\n this.emitter.emit(event, arg1, arg2);\n });\n }\n for (const event of [\"pmessage\", \"pmessageBuffer\"]) {\n this.subscriber.on(event, (arg1, arg2, arg3) => {\n this.emitter.emit(event, arg1, arg2, arg3);\n });\n }\n }\n}\nexports.default = ClusterSubscriber;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst events_1 = require(\"events\");\nconst utils_1 = require(\"../utils\");\nconst util_1 = require(\"./util\");\nconst Redis_1 = require(\"../Redis\");\nconst debug = (0, utils_1.Debug)(\"cluster:connectionPool\");\nclass ConnectionPool extends events_1.EventEmitter {\n constructor(redisOptions) {\n super();\n this.redisOptions = redisOptions;\n // master + slave = all\n this.nodes = {\n all: {},\n master: {},\n slave: {},\n };\n this.specifiedOptions = {};\n }\n getNodes(role = \"all\") {\n const nodes = this.nodes[role];\n return Object.keys(nodes).map((key) => nodes[key]);\n }\n getInstanceByKey(key) {\n return this.nodes.all[key];\n }\n getSampleInstance(role) {\n const keys = Object.keys(this.nodes[role]);\n const sampleKey = (0, utils_1.sample)(keys);\n return this.nodes[role][sampleKey];\n }\n /**\n * Find or create a connection to the node\n */\n findOrCreate(node, readOnly = false) {\n const key = (0, util_1.getNodeKey)(node);\n readOnly = Boolean(readOnly);\n if (this.specifiedOptions[key]) {\n Object.assign(node, this.specifiedOptions[key]);\n }\n else {\n this.specifiedOptions[key] = node;\n }\n let redis;\n if (this.nodes.all[key]) {\n redis = this.nodes.all[key];\n if (redis.options.readOnly !== readOnly) {\n redis.options.readOnly = readOnly;\n debug(\"Change role of %s to %s\", key, readOnly ? \"slave\" : \"master\");\n redis[readOnly ? \"readonly\" : \"readwrite\"]().catch(utils_1.noop);\n if (readOnly) {\n delete this.nodes.master[key];\n this.nodes.slave[key] = redis;\n }\n else {\n delete this.nodes.slave[key];\n this.nodes.master[key] = redis;\n }\n }\n }\n else {\n debug(\"Connecting to %s as %s\", key, readOnly ? \"slave\" : \"master\");\n redis = new Redis_1.default((0, utils_1.defaults)({\n // Never try to reconnect when a node is lose,\n // instead, waiting for a `MOVED` error and\n // fetch the slots again.\n retryStrategy: null,\n // Offline queue should be enabled so that\n // we don't need to wait for the `ready` event\n // before sending commands to the node.\n enableOfflineQueue: true,\n readOnly: readOnly,\n }, node, this.redisOptions, { lazyConnect: true }));\n this.nodes.all[key] = redis;\n this.nodes[readOnly ? \"slave\" : \"master\"][key] = redis;\n redis.once(\"end\", () => {\n this.removeNode(key);\n this.emit(\"-node\", redis, key);\n if (!Object.keys(this.nodes.all).length) {\n this.emit(\"drain\");\n }\n });\n this.emit(\"+node\", redis, key);\n redis.on(\"error\", function (error) {\n this.emit(\"nodeError\", error, key);\n });\n }\n return redis;\n }\n /**\n * Reset the pool with a set of nodes.\n * The old node will be removed.\n */\n reset(nodes) {\n debug(\"Reset with %O\", nodes);\n const newNodes = {};\n nodes.forEach((node) => {\n const key = (0, util_1.getNodeKey)(node);\n // Don't override the existing (master) node\n // when the current one is slave.\n if (!(node.readOnly && newNodes[key])) {\n newNodes[key] = node;\n }\n });\n Object.keys(this.nodes.all).forEach((key) => {\n if (!newNodes[key]) {\n debug(\"Disconnect %s because the node does not hold any slot\", key);\n this.nodes.all[key].disconnect();\n this.removeNode(key);\n }\n });\n Object.keys(newNodes).forEach((key) => {\n const node = newNodes[key];\n this.findOrCreate(node, node.readOnly);\n });\n }\n /**\n * Remove a node from the pool.\n */\n removeNode(key) {\n const { nodes } = this;\n if (nodes.all[key]) {\n debug(\"Remove %s from the pool\", key);\n delete nodes.all[key];\n }\n delete nodes.master[key];\n delete nodes.slave[key];\n }\n}\nexports.default = ConnectionPool;\n","'use strict';\n\n/**\n * Custom implementation of a double ended queue.\n */\nfunction Denque(array, options) {\n var options = options || {};\n this._capacity = options.capacity;\n\n this._head = 0;\n this._tail = 0;\n\n if (Array.isArray(array)) {\n this._fromArray(array);\n } else {\n this._capacityMask = 0x3;\n this._list = new Array(4);\n }\n}\n\n/**\n * --------------\n * PUBLIC API\n * -------------\n */\n\n/**\n * Returns the item at the specified index from the list.\n * 0 is the first element, 1 is the second, and so on...\n * Elements at negative values are that many from the end: -1 is one before the end\n * (the last element), -2 is two before the end (one before last), etc.\n * @param index\n * @returns {*}\n */\nDenque.prototype.peekAt = function peekAt(index) {\n var i = index;\n // expect a number or return undefined\n if ((i !== (i | 0))) {\n return void 0;\n }\n var len = this.size();\n if (i >= len || i < -len) return undefined;\n if (i < 0) i += len;\n i = (this._head + i) & this._capacityMask;\n return this._list[i];\n};\n\n/**\n * Alias for peekAt()\n * @param i\n * @returns {*}\n */\nDenque.prototype.get = function get(i) {\n return this.peekAt(i);\n};\n\n/**\n * Returns the first item in the list without removing it.\n * @returns {*}\n */\nDenque.prototype.peek = function peek() {\n if (this._head === this._tail) return undefined;\n return this._list[this._head];\n};\n\n/**\n * Alias for peek()\n * @returns {*}\n */\nDenque.prototype.peekFront = function peekFront() {\n return this.peek();\n};\n\n/**\n * Returns the item that is at the back of the queue without removing it.\n * Uses peekAt(-1)\n */\nDenque.prototype.peekBack = function peekBack() {\n return this.peekAt(-1);\n};\n\n/**\n * Returns the current length of the queue\n * @return {Number}\n */\nObject.defineProperty(Denque.prototype, 'length', {\n get: function length() {\n return this.size();\n }\n});\n\n/**\n * Return the number of items on the list, or 0 if empty.\n * @returns {number}\n */\nDenque.prototype.size = function size() {\n if (this._head === this._tail) return 0;\n if (this._head < this._tail) return this._tail - this._head;\n else return this._capacityMask + 1 - (this._head - this._tail);\n};\n\n/**\n * Add an item at the beginning of the list.\n * @param item\n */\nDenque.prototype.unshift = function unshift(item) {\n if (arguments.length === 0) return this.size();\n var len = this._list.length;\n this._head = (this._head - 1 + len) & this._capacityMask;\n this._list[this._head] = item;\n if (this._tail === this._head) this._growArray();\n if (this._capacity && this.size() > this._capacity) this.pop();\n if (this._head < this._tail) return this._tail - this._head;\n else return this._capacityMask + 1 - (this._head - this._tail);\n};\n\n/**\n * Remove and return the first item on the list,\n * Returns undefined if the list is empty.\n * @returns {*}\n */\nDenque.prototype.shift = function shift() {\n var head = this._head;\n if (head === this._tail) return undefined;\n var item = this._list[head];\n this._list[head] = undefined;\n this._head = (head + 1) & this._capacityMask;\n if (head < 2 && this._tail > 10000 && this._tail <= this._list.length >>> 2) this._shrinkArray();\n return item;\n};\n\n/**\n * Add an item to the bottom of the list.\n * @param item\n */\nDenque.prototype.push = function push(item) {\n if (arguments.length === 0) return this.size();\n var tail = this._tail;\n this._list[tail] = item;\n this._tail = (tail + 1) & this._capacityMask;\n if (this._tail === this._head) {\n this._growArray();\n }\n if (this._capacity && this.size() > this._capacity) {\n this.shift();\n }\n if (this._head < this._tail) return this._tail - this._head;\n else return this._capacityMask + 1 - (this._head - this._tail);\n};\n\n/**\n * Remove and return the last item on the list.\n * Returns undefined if the list is empty.\n * @returns {*}\n */\nDenque.prototype.pop = function pop() {\n var tail = this._tail;\n if (tail === this._head) return undefined;\n var len = this._list.length;\n this._tail = (tail - 1 + len) & this._capacityMask;\n var item = this._list[this._tail];\n this._list[this._tail] = undefined;\n if (this._head < 2 && tail > 10000 && tail <= len >>> 2) this._shrinkArray();\n return item;\n};\n\n/**\n * Remove and return the item at the specified index from the list.\n * Returns undefined if the list is empty.\n * @param index\n * @returns {*}\n */\nDenque.prototype.removeOne = function removeOne(index) {\n var i = index;\n // expect a number or return undefined\n if ((i !== (i | 0))) {\n return void 0;\n }\n if (this._head === this._tail) return void 0;\n var size = this.size();\n var len = this._list.length;\n if (i >= size || i < -size) return void 0;\n if (i < 0) i += size;\n i = (this._head + i) & this._capacityMask;\n var item = this._list[i];\n var k;\n if (index < size / 2) {\n for (k = index; k > 0; k--) {\n this._list[i] = this._list[i = (i - 1 + len) & this._capacityMask];\n }\n this._list[i] = void 0;\n this._head = (this._head + 1 + len) & this._capacityMask;\n } else {\n for (k = size - 1 - index; k > 0; k--) {\n this._list[i] = this._list[i = (i + 1 + len) & this._capacityMask];\n }\n this._list[i] = void 0;\n this._tail = (this._tail - 1 + len) & this._capacityMask;\n }\n return item;\n};\n\n/**\n * Remove number of items from the specified index from the list.\n * Returns array of removed items.\n * Returns undefined if the list is empty.\n * @param index\n * @param count\n * @returns {array}\n */\nDenque.prototype.remove = function remove(index, count) {\n var i = index;\n var removed;\n var del_count = count;\n // expect a number or return undefined\n if ((i !== (i | 0))) {\n return void 0;\n }\n if (this._head === this._tail) return void 0;\n var size = this.size();\n var len = this._list.length;\n if (i >= size || i < -size || count < 1) return void 0;\n if (i < 0) i += size;\n if (count === 1 || !count) {\n removed = new Array(1);\n removed[0] = this.removeOne(i);\n return removed;\n }\n if (i === 0 && i + count >= size) {\n removed = this.toArray();\n this.clear();\n return removed;\n }\n if (i + count > size) count = size - i;\n var k;\n removed = new Array(count);\n for (k = 0; k < count; k++) {\n removed[k] = this._list[(this._head + i + k) & this._capacityMask];\n }\n i = (this._head + i) & this._capacityMask;\n if (index + count === size) {\n this._tail = (this._tail - count + len) & this._capacityMask;\n for (k = count; k > 0; k--) {\n this._list[i = (i + 1 + len) & this._capacityMask] = void 0;\n }\n return removed;\n }\n if (index === 0) {\n this._head = (this._head + count + len) & this._capacityMask;\n for (k = count - 1; k > 0; k--) {\n this._list[i = (i + 1 + len) & this._capacityMask] = void 0;\n }\n return removed;\n }\n if (i < size / 2) {\n this._head = (this._head + index + count + len) & this._capacityMask;\n for (k = index; k > 0; k--) {\n this.unshift(this._list[i = (i - 1 + len) & this._capacityMask]);\n }\n i = (this._head - 1 + len) & this._capacityMask;\n while (del_count > 0) {\n this._list[i = (i - 1 + len) & this._capacityMask] = void 0;\n del_count--;\n }\n if (index < 0) this._tail = i;\n } else {\n this._tail = i;\n i = (i + count + len) & this._capacityMask;\n for (k = size - (count + index); k > 0; k--) {\n this.push(this._list[i++]);\n }\n i = this._tail;\n while (del_count > 0) {\n this._list[i = (i + 1 + len) & this._capacityMask] = void 0;\n del_count--;\n }\n }\n if (this._head < 2 && this._tail > 10000 && this._tail <= len >>> 2) this._shrinkArray();\n return removed;\n};\n\n/**\n * Native splice implementation.\n * Remove number of items from the specified index from the list and/or add new elements.\n * Returns array of removed items or empty array if count == 0.\n * Returns undefined if the list is empty.\n *\n * @param index\n * @param count\n * @param {...*} [elements]\n * @returns {array}\n */\nDenque.prototype.splice = function splice(index, count) {\n var i = index;\n // expect a number or return undefined\n if ((i !== (i | 0))) {\n return void 0;\n }\n var size = this.size();\n if (i < 0) i += size;\n if (i > size) return void 0;\n if (arguments.length > 2) {\n var k;\n var temp;\n var removed;\n var arg_len = arguments.length;\n var len = this._list.length;\n var arguments_index = 2;\n if (!size || i < size / 2) {\n temp = new Array(i);\n for (k = 0; k < i; k++) {\n temp[k] = this._list[(this._head + k) & this._capacityMask];\n }\n if (count === 0) {\n removed = [];\n if (i > 0) {\n this._head = (this._head + i + len) & this._capacityMask;\n }\n } else {\n removed = this.remove(i, count);\n this._head = (this._head + i + len) & this._capacityMask;\n }\n while (arg_len > arguments_index) {\n this.unshift(arguments[--arg_len]);\n }\n for (k = i; k > 0; k--) {\n this.unshift(temp[k - 1]);\n }\n } else {\n temp = new Array(size - (i + count));\n var leng = temp.length;\n for (k = 0; k < leng; k++) {\n temp[k] = this._list[(this._head + i + count + k) & this._capacityMask];\n }\n if (count === 0) {\n removed = [];\n if (i != size) {\n this._tail = (this._head + i + len) & this._capacityMask;\n }\n } else {\n removed = this.remove(i, count);\n this._tail = (this._tail - leng + len) & this._capacityMask;\n }\n while (arguments_index < arg_len) {\n this.push(arguments[arguments_index++]);\n }\n for (k = 0; k < leng; k++) {\n this.push(temp[k]);\n }\n }\n return removed;\n } else {\n return this.remove(i, count);\n }\n};\n\n/**\n * Soft clear - does not reset capacity.\n */\nDenque.prototype.clear = function clear() {\n this._list = new Array(this._list.length);\n this._head = 0;\n this._tail = 0;\n};\n\n/**\n * Returns true or false whether the list is empty.\n * @returns {boolean}\n */\nDenque.prototype.isEmpty = function isEmpty() {\n return this._head === this._tail;\n};\n\n/**\n * Returns an array of all queue items.\n * @returns {Array}\n */\nDenque.prototype.toArray = function toArray() {\n return this._copyArray(false);\n};\n\n/**\n * -------------\n * INTERNALS\n * -------------\n */\n\n/**\n * Fills the queue with items from an array\n * For use in the constructor\n * @param array\n * @private\n */\nDenque.prototype._fromArray = function _fromArray(array) {\n var length = array.length;\n var capacity = this._nextPowerOf2(length);\n\n this._list = new Array(capacity);\n this._capacityMask = capacity - 1;\n this._tail = length;\n\n for (var i = 0; i < length; i++) this._list[i] = array[i];\n};\n\n/**\n *\n * @param fullCopy\n * @param size Initialize the array with a specific size. Will default to the current list size\n * @returns {Array}\n * @private\n */\nDenque.prototype._copyArray = function _copyArray(fullCopy, size) {\n var src = this._list;\n var capacity = src.length;\n var length = this.length;\n size = size | length;\n\n // No prealloc requested and the buffer is contiguous\n if (size == length && this._head < this._tail) {\n // Simply do a fast slice copy\n return this._list.slice(this._head, this._tail);\n }\n\n var dest = new Array(size);\n\n var k = 0;\n var i;\n if (fullCopy || this._head > this._tail) {\n for (i = this._head; i < capacity; i++) dest[k++] = src[i];\n for (i = 0; i < this._tail; i++) dest[k++] = src[i];\n } else {\n for (i = this._head; i < this._tail; i++) dest[k++] = src[i];\n }\n\n return dest;\n}\n\n/**\n * Grows the internal list array.\n * @private\n */\nDenque.prototype._growArray = function _growArray() {\n if (this._head != 0) {\n // double array size and copy existing data, head to end, then beginning to tail.\n var newList = this._copyArray(true, this._list.length << 1);\n\n this._tail = this._list.length;\n this._head = 0;\n\n this._list = newList;\n } else {\n this._tail = this._list.length;\n this._list.length <<= 1;\n }\n\n this._capacityMask = (this._capacityMask << 1) | 1;\n};\n\n/**\n * Shrinks the internal list array.\n * @private\n */\nDenque.prototype._shrinkArray = function _shrinkArray() {\n this._list.length >>>= 1;\n this._capacityMask >>>= 1;\n};\n\n/**\n * Find the next power of 2, at least 4\n * @private\n * @param {number} num \n * @returns {number}\n */\nDenque.prototype._nextPowerOf2 = function _nextPowerOf2(num) {\n var log2 = Math.log(num) / Math.log(2);\n var nextPow2 = 1 << (log2 + 1);\n\n return Math.max(nextPow2, 4);\n}\n\nmodule.exports = Denque;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils_1 = require(\"../utils\");\nconst Deque = require(\"denque\");\nconst debug = (0, utils_1.Debug)(\"delayqueue\");\n/**\n * Queue that runs items after specified duration\n */\nclass DelayQueue {\n constructor() {\n this.queues = {};\n this.timeouts = {};\n }\n /**\n * Add a new item to the queue\n *\n * @param bucket bucket name\n * @param item function that will run later\n * @param options\n */\n push(bucket, item, options) {\n const callback = options.callback || process.nextTick;\n if (!this.queues[bucket]) {\n this.queues[bucket] = new Deque();\n }\n const queue = this.queues[bucket];\n queue.push(item);\n if (!this.timeouts[bucket]) {\n this.timeouts[bucket] = setTimeout(() => {\n callback(() => {\n this.timeouts[bucket] = null;\n this.execute(bucket);\n });\n }, options.timeout);\n }\n }\n execute(bucket) {\n const queue = this.queues[bucket];\n if (!queue) {\n return;\n }\n const { length } = queue;\n if (!length) {\n return;\n }\n debug(\"send %d commands in %s queue\", length, bucket);\n this.queues[bucket] = null;\n while (queue.length > 0) {\n queue.shift()();\n }\n }\n}\nexports.default = DelayQueue;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst commands_1 = require(\"@ioredis/commands\");\nconst events_1 = require(\"events\");\nconst redis_errors_1 = require(\"redis-errors\");\nconst standard_as_callback_1 = require(\"standard-as-callback\");\nconst Command_1 = require(\"../Command\");\nconst ClusterAllFailedError_1 = require(\"../errors/ClusterAllFailedError\");\nconst Redis_1 = require(\"../Redis\");\nconst ScanStream_1 = require(\"../ScanStream\");\nconst transaction_1 = require(\"../transaction\");\nconst utils_1 = require(\"../utils\");\nconst applyMixin_1 = require(\"../utils/applyMixin\");\nconst Commander_1 = require(\"../utils/Commander\");\nconst ClusterOptions_1 = require(\"./ClusterOptions\");\nconst ClusterSubscriber_1 = require(\"./ClusterSubscriber\");\nconst ConnectionPool_1 = require(\"./ConnectionPool\");\nconst DelayQueue_1 = require(\"./DelayQueue\");\nconst util_1 = require(\"./util\");\nconst Deque = require(\"denque\");\nconst debug = (0, utils_1.Debug)(\"cluster\");\nconst REJECT_OVERWRITTEN_COMMANDS = new WeakSet();\n/**\n * Client for the official Redis Cluster\n */\nclass Cluster extends Commander_1.default {\n /**\n * Creates an instance of Cluster.\n */\n constructor(startupNodes, options = {}) {\n super();\n this.slots = [];\n /**\n * @ignore\n */\n this._groupsIds = {};\n /**\n * @ignore\n */\n this._groupsBySlot = Array(16384);\n /**\n * @ignore\n */\n this.isCluster = true;\n this.retryAttempts = 0;\n this.delayQueue = new DelayQueue_1.default();\n this.offlineQueue = new Deque();\n this.isRefreshing = false;\n this._autoPipelines = new Map();\n this._runningAutoPipelines = new Set();\n this._readyDelayedCallbacks = [];\n /**\n * Every time Cluster#connect() is called, this value will be\n * auto-incrementing. The purpose of this value is used for\n * discarding previous connect attampts when creating a new\n * connection.\n */\n this.connectionEpoch = 0;\n events_1.EventEmitter.call(this);\n this.startupNodes = startupNodes;\n this.options = (0, utils_1.defaults)({}, options, ClusterOptions_1.DEFAULT_CLUSTER_OPTIONS, this.options);\n if (this.options.redisOptions &&\n this.options.redisOptions.keyPrefix &&\n !this.options.keyPrefix) {\n this.options.keyPrefix = this.options.redisOptions.keyPrefix;\n }\n // validate options\n if (typeof this.options.scaleReads !== \"function\" &&\n [\"all\", \"master\", \"slave\"].indexOf(this.options.scaleReads) === -1) {\n throw new Error('Invalid option scaleReads \"' +\n this.options.scaleReads +\n '\". Expected \"all\", \"master\", \"slave\" or a custom function');\n }\n this.connectionPool = new ConnectionPool_1.default(this.options.redisOptions);\n this.connectionPool.on(\"-node\", (redis, key) => {\n this.emit(\"-node\", redis);\n });\n this.connectionPool.on(\"+node\", (redis) => {\n this.emit(\"+node\", redis);\n });\n this.connectionPool.on(\"drain\", () => {\n this.setStatus(\"close\");\n });\n this.connectionPool.on(\"nodeError\", (error, key) => {\n this.emit(\"node error\", error, key);\n });\n this.subscriber = new ClusterSubscriber_1.default(this.connectionPool, this);\n if (this.options.scripts) {\n Object.entries(this.options.scripts).forEach(([name, definition]) => {\n this.defineCommand(name, definition);\n });\n }\n if (this.options.lazyConnect) {\n this.setStatus(\"wait\");\n }\n else {\n this.connect().catch((err) => {\n debug(\"connecting failed: %s\", err);\n });\n }\n }\n /**\n * Connect to a cluster\n */\n connect() {\n return new Promise((resolve, reject) => {\n if (this.status === \"connecting\" ||\n this.status === \"connect\" ||\n this.status === \"ready\") {\n reject(new Error(\"Redis is already connecting/connected\"));\n return;\n }\n const epoch = ++this.connectionEpoch;\n this.setStatus(\"connecting\");\n this.resolveStartupNodeHostnames()\n .then((nodes) => {\n if (this.connectionEpoch !== epoch) {\n debug(\"discard connecting after resolving startup nodes because epoch not match: %d != %d\", epoch, this.connectionEpoch);\n reject(new redis_errors_1.RedisError(\"Connection is discarded because a new connection is made\"));\n return;\n }\n if (this.status !== \"connecting\") {\n debug(\"discard connecting after resolving startup nodes because the status changed to %s\", this.status);\n reject(new redis_errors_1.RedisError(\"Connection is aborted\"));\n return;\n }\n this.connectionPool.reset(nodes);\n const readyHandler = () => {\n this.setStatus(\"ready\");\n this.retryAttempts = 0;\n this.executeOfflineCommands();\n this.resetNodesRefreshInterval();\n resolve();\n };\n let closeListener = undefined;\n const refreshListener = () => {\n this.invokeReadyDelayedCallbacks(undefined);\n this.removeListener(\"close\", closeListener);\n this.manuallyClosing = false;\n this.setStatus(\"connect\");\n if (this.options.enableReadyCheck) {\n this.readyCheck((err, fail) => {\n if (err || fail) {\n debug(\"Ready check failed (%s). Reconnecting...\", err || fail);\n if (this.status === \"connect\") {\n this.disconnect(true);\n }\n }\n else {\n readyHandler();\n }\n });\n }\n else {\n readyHandler();\n }\n };\n closeListener = () => {\n const error = new Error(\"None of startup nodes is available\");\n this.removeListener(\"refresh\", refreshListener);\n this.invokeReadyDelayedCallbacks(error);\n reject(error);\n };\n this.once(\"refresh\", refreshListener);\n this.once(\"close\", closeListener);\n this.once(\"close\", this.handleCloseEvent.bind(this));\n this.refreshSlotsCache((err) => {\n if (err && err.message === ClusterAllFailedError_1.default.defaultMessage) {\n Redis_1.default.prototype.silentEmit.call(this, \"error\", err);\n this.connectionPool.reset([]);\n }\n });\n this.subscriber.start();\n })\n .catch((err) => {\n this.setStatus(\"close\");\n this.handleCloseEvent(err);\n this.invokeReadyDelayedCallbacks(err);\n reject(err);\n });\n });\n }\n /**\n * Disconnect from every node in the cluster.\n */\n disconnect(reconnect = false) {\n const status = this.status;\n this.setStatus(\"disconnecting\");\n if (!reconnect) {\n this.manuallyClosing = true;\n }\n if (this.reconnectTimeout && !reconnect) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n debug(\"Canceled reconnecting attempts\");\n }\n this.clearNodesRefreshInterval();\n this.subscriber.stop();\n if (status === \"wait\") {\n this.setStatus(\"close\");\n this.handleCloseEvent();\n }\n else {\n this.connectionPool.reset([]);\n }\n }\n /**\n * Quit the cluster gracefully.\n */\n quit(callback) {\n const status = this.status;\n this.setStatus(\"disconnecting\");\n this.manuallyClosing = true;\n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n this.clearNodesRefreshInterval();\n this.subscriber.stop();\n if (status === \"wait\") {\n const ret = (0, standard_as_callback_1.default)(Promise.resolve(\"OK\"), callback);\n // use setImmediate to make sure \"close\" event\n // being emitted after quit() is returned\n setImmediate(function () {\n this.setStatus(\"close\");\n this.handleCloseEvent();\n }.bind(this));\n return ret;\n }\n return (0, standard_as_callback_1.default)(Promise.all(this.nodes().map((node) => node.quit().catch((err) => {\n // Ignore the error caused by disconnecting since\n // we're disconnecting...\n if (err.message === utils_1.CONNECTION_CLOSED_ERROR_MSG) {\n return \"OK\";\n }\n throw err;\n }))).then(() => \"OK\"), callback);\n }\n /**\n * Create a new instance with the same startup nodes and options as the current one.\n *\n * @example\n * ```js\n * var cluster = new Redis.Cluster([{ host: \"127.0.0.1\", port: \"30001\" }]);\n * var anotherCluster = cluster.duplicate();\n * ```\n */\n duplicate(overrideStartupNodes = [], overrideOptions = {}) {\n const startupNodes = overrideStartupNodes.length > 0\n ? overrideStartupNodes\n : this.startupNodes.slice(0);\n const options = Object.assign({}, this.options, overrideOptions);\n return new Cluster(startupNodes, options);\n }\n /**\n * Get nodes with the specified role\n */\n nodes(role = \"all\") {\n if (role !== \"all\" && role !== \"master\" && role !== \"slave\") {\n throw new Error('Invalid role \"' + role + '\". Expected \"all\", \"master\" or \"slave\"');\n }\n return this.connectionPool.getNodes(role);\n }\n /**\n * This is needed in order not to install a listener for each auto pipeline\n *\n * @ignore\n */\n delayUntilReady(callback) {\n this._readyDelayedCallbacks.push(callback);\n }\n /**\n * Get the number of commands queued in automatic pipelines.\n *\n * This is not available (and returns 0) until the cluster is connected and slots information have been received.\n */\n get autoPipelineQueueSize() {\n let queued = 0;\n for (const pipeline of this._autoPipelines.values()) {\n queued += pipeline.length;\n }\n return queued;\n }\n /**\n * Refresh the slot cache\n *\n * @ignore\n */\n refreshSlotsCache(callback) {\n if (this.isRefreshing) {\n if (callback) {\n process.nextTick(callback);\n }\n return;\n }\n this.isRefreshing = true;\n const _this = this;\n const wrapper = (error) => {\n this.isRefreshing = false;\n if (callback) {\n callback(error);\n }\n };\n const nodes = (0, utils_1.shuffle)(this.connectionPool.getNodes());\n let lastNodeError = null;\n function tryNode(index) {\n if (index === nodes.length) {\n const error = new ClusterAllFailedError_1.default(ClusterAllFailedError_1.default.defaultMessage, lastNodeError);\n return wrapper(error);\n }\n const node = nodes[index];\n const key = `${node.options.host}:${node.options.port}`;\n debug(\"getting slot cache from %s\", key);\n _this.getInfoFromNode(node, function (err) {\n switch (_this.status) {\n case \"close\":\n case \"end\":\n return wrapper(new Error(\"Cluster is disconnected.\"));\n case \"disconnecting\":\n return wrapper(new Error(\"Cluster is disconnecting.\"));\n }\n if (err) {\n _this.emit(\"node error\", err, key);\n lastNodeError = err;\n tryNode(index + 1);\n }\n else {\n _this.emit(\"refresh\");\n wrapper();\n }\n });\n }\n tryNode(0);\n }\n /**\n * @ignore\n */\n sendCommand(command, stream, node) {\n if (this.status === \"wait\") {\n this.connect().catch(utils_1.noop);\n }\n if (this.status === \"end\") {\n command.reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n return command.promise;\n }\n let to = this.options.scaleReads;\n if (to !== \"master\") {\n const isCommandReadOnly = command.isReadOnly ||\n ((0, commands_1.exists)(command.name) && (0, commands_1.hasFlag)(command.name, \"readonly\"));\n if (!isCommandReadOnly) {\n to = \"master\";\n }\n }\n let targetSlot = node ? node.slot : command.getSlot();\n const ttl = {};\n const _this = this;\n if (!node && !REJECT_OVERWRITTEN_COMMANDS.has(command)) {\n REJECT_OVERWRITTEN_COMMANDS.add(command);\n const reject = command.reject;\n command.reject = function (err) {\n const partialTry = tryConnection.bind(null, true);\n _this.handleError(err, ttl, {\n moved: function (slot, key) {\n debug(\"command %s is moved to %s\", command.name, key);\n targetSlot = Number(slot);\n if (_this.slots[slot]) {\n _this.slots[slot][0] = key;\n }\n else {\n _this.slots[slot] = [key];\n }\n _this._groupsBySlot[slot] =\n _this._groupsIds[_this.slots[slot].join(\";\")];\n _this.connectionPool.findOrCreate(_this.natMapper(key));\n tryConnection();\n debug(\"refreshing slot caches... (triggered by MOVED error)\");\n _this.refreshSlotsCache();\n },\n ask: function (slot, key) {\n debug(\"command %s is required to ask %s:%s\", command.name, key);\n const mapped = _this.natMapper(key);\n _this.connectionPool.findOrCreate(mapped);\n tryConnection(false, `${mapped.host}:${mapped.port}`);\n },\n tryagain: partialTry,\n clusterDown: partialTry,\n connectionClosed: partialTry,\n maxRedirections: function (redirectionError) {\n reject.call(command, redirectionError);\n },\n defaults: function () {\n reject.call(command, err);\n },\n });\n };\n }\n tryConnection();\n function tryConnection(random, asking) {\n if (_this.status === \"end\") {\n command.reject(new redis_errors_1.AbortError(\"Cluster is ended.\"));\n return;\n }\n let redis;\n if (_this.status === \"ready\" || command.name === \"cluster\") {\n if (node && node.redis) {\n redis = node.redis;\n }\n else if (Command_1.default.checkFlag(\"ENTER_SUBSCRIBER_MODE\", command.name) ||\n Command_1.default.checkFlag(\"EXIT_SUBSCRIBER_MODE\", command.name)) {\n redis = _this.subscriber.getInstance();\n if (!redis) {\n command.reject(new redis_errors_1.AbortError(\"No subscriber for the cluster\"));\n return;\n }\n }\n else {\n if (!random) {\n if (typeof targetSlot === \"number\" && _this.slots[targetSlot]) {\n const nodeKeys = _this.slots[targetSlot];\n if (typeof to === \"function\") {\n const nodes = nodeKeys.map(function (key) {\n return _this.connectionPool.getInstanceByKey(key);\n });\n redis = to(nodes, command);\n if (Array.isArray(redis)) {\n redis = (0, utils_1.sample)(redis);\n }\n if (!redis) {\n redis = nodes[0];\n }\n }\n else {\n let key;\n if (to === \"all\") {\n key = (0, utils_1.sample)(nodeKeys);\n }\n else if (to === \"slave\" && nodeKeys.length > 1) {\n key = (0, utils_1.sample)(nodeKeys, 1);\n }\n else {\n key = nodeKeys[0];\n }\n redis = _this.connectionPool.getInstanceByKey(key);\n }\n }\n if (asking) {\n redis = _this.connectionPool.getInstanceByKey(asking);\n redis.asking();\n }\n }\n if (!redis) {\n redis =\n (typeof to === \"function\"\n ? null\n : _this.connectionPool.getSampleInstance(to)) ||\n _this.connectionPool.getSampleInstance(\"all\");\n }\n }\n if (node && !node.redis) {\n node.redis = redis;\n }\n }\n if (redis) {\n redis.sendCommand(command, stream);\n }\n else if (_this.options.enableOfflineQueue) {\n _this.offlineQueue.push({\n command: command,\n stream: stream,\n node: node,\n });\n }\n else {\n command.reject(new Error(\"Cluster isn't ready and enableOfflineQueue options is false\"));\n }\n }\n return command.promise;\n }\n sscanStream(key, options) {\n return this.createScanStream(\"sscan\", { key, options });\n }\n sscanBufferStream(key, options) {\n return this.createScanStream(\"sscanBuffer\", { key, options });\n }\n hscanStream(key, options) {\n return this.createScanStream(\"hscan\", { key, options });\n }\n hscanBufferStream(key, options) {\n return this.createScanStream(\"hscanBuffer\", { key, options });\n }\n zscanStream(key, options) {\n return this.createScanStream(\"zscan\", { key, options });\n }\n zscanBufferStream(key, options) {\n return this.createScanStream(\"zscanBuffer\", { key, options });\n }\n /**\n * @ignore\n */\n handleError(error, ttl, handlers) {\n if (typeof ttl.value === \"undefined\") {\n ttl.value = this.options.maxRedirections;\n }\n else {\n ttl.value -= 1;\n }\n if (ttl.value <= 0) {\n handlers.maxRedirections(new Error(\"Too many Cluster redirections. Last error: \" + error));\n return;\n }\n const errv = error.message.split(\" \");\n if (errv[0] === \"MOVED\") {\n const timeout = this.options.retryDelayOnMoved;\n if (timeout && typeof timeout === \"number\") {\n this.delayQueue.push(\"moved\", handlers.moved.bind(null, errv[1], errv[2]), { timeout });\n }\n else {\n handlers.moved(errv[1], errv[2]);\n }\n }\n else if (errv[0] === \"ASK\") {\n handlers.ask(errv[1], errv[2]);\n }\n else if (errv[0] === \"TRYAGAIN\") {\n this.delayQueue.push(\"tryagain\", handlers.tryagain, {\n timeout: this.options.retryDelayOnTryAgain,\n });\n }\n else if (errv[0] === \"CLUSTERDOWN\" &&\n this.options.retryDelayOnClusterDown > 0) {\n this.delayQueue.push(\"clusterdown\", handlers.connectionClosed, {\n timeout: this.options.retryDelayOnClusterDown,\n callback: this.refreshSlotsCache.bind(this),\n });\n }\n else if (error.message === utils_1.CONNECTION_CLOSED_ERROR_MSG &&\n this.options.retryDelayOnFailover > 0 &&\n this.status === \"ready\") {\n this.delayQueue.push(\"failover\", handlers.connectionClosed, {\n timeout: this.options.retryDelayOnFailover,\n callback: this.refreshSlotsCache.bind(this),\n });\n }\n else {\n handlers.defaults();\n }\n }\n resetOfflineQueue() {\n this.offlineQueue = new Deque();\n }\n clearNodesRefreshInterval() {\n if (this.slotsTimer) {\n clearTimeout(this.slotsTimer);\n this.slotsTimer = null;\n }\n }\n resetNodesRefreshInterval() {\n if (this.slotsTimer || !this.options.slotsRefreshInterval) {\n return;\n }\n const nextRound = () => {\n this.slotsTimer = setTimeout(() => {\n debug('refreshing slot caches... (triggered by \"slotsRefreshInterval\" option)');\n this.refreshSlotsCache(() => {\n nextRound();\n });\n }, this.options.slotsRefreshInterval);\n };\n nextRound();\n }\n /**\n * Change cluster instance's status\n */\n setStatus(status) {\n debug(\"status: %s -> %s\", this.status || \"[empty]\", status);\n this.status = status;\n process.nextTick(() => {\n this.emit(status);\n });\n }\n /**\n * Called when closed to check whether a reconnection should be made\n */\n handleCloseEvent(reason) {\n if (reason) {\n debug(\"closed because %s\", reason);\n }\n let retryDelay;\n if (!this.manuallyClosing &&\n typeof this.options.clusterRetryStrategy === \"function\") {\n retryDelay = this.options.clusterRetryStrategy.call(this, ++this.retryAttempts, reason);\n }\n if (typeof retryDelay === \"number\") {\n this.setStatus(\"reconnecting\");\n this.reconnectTimeout = setTimeout(() => {\n this.reconnectTimeout = null;\n debug(\"Cluster is disconnected. Retrying after %dms\", retryDelay);\n this.connect().catch(function (err) {\n debug(\"Got error %s when reconnecting. Ignoring...\", err);\n });\n }, retryDelay);\n }\n else {\n this.setStatus(\"end\");\n this.flushQueue(new Error(\"None of startup nodes is available\"));\n }\n }\n /**\n * Flush offline queue with error.\n */\n flushQueue(error) {\n let item;\n while ((item = this.offlineQueue.shift())) {\n item.command.reject(error);\n }\n }\n executeOfflineCommands() {\n if (this.offlineQueue.length) {\n debug(\"send %d commands in offline queue\", this.offlineQueue.length);\n const offlineQueue = this.offlineQueue;\n this.resetOfflineQueue();\n let item;\n while ((item = offlineQueue.shift())) {\n this.sendCommand(item.command, item.stream, item.node);\n }\n }\n }\n natMapper(nodeKey) {\n if (this.options.natMap && typeof this.options.natMap === \"object\") {\n const key = typeof nodeKey === \"string\"\n ? nodeKey\n : `${nodeKey.host}:${nodeKey.port}`;\n const mapped = this.options.natMap[key];\n if (mapped) {\n debug(\"NAT mapping %s -> %O\", key, mapped);\n return Object.assign({}, mapped);\n }\n }\n return typeof nodeKey === \"string\"\n ? (0, util_1.nodeKeyToRedisOptions)(nodeKey)\n : nodeKey;\n }\n getInfoFromNode(redis, callback) {\n if (!redis) {\n return callback(new Error(\"Node is disconnected\"));\n }\n // Use a duplication of the connection to avoid\n // timeouts when the connection is in the blocking\n // mode (e.g. waiting for BLPOP).\n const duplicatedConnection = redis.duplicate({\n enableOfflineQueue: true,\n enableReadyCheck: false,\n retryStrategy: null,\n connectionName: (0, util_1.getConnectionName)(\"refresher\", this.options.redisOptions && this.options.redisOptions.connectionName),\n });\n // Ignore error events since we will handle\n // exceptions for the CLUSTER SLOTS command.\n duplicatedConnection.on(\"error\", utils_1.noop);\n duplicatedConnection.cluster(\"SLOTS\", (0, utils_1.timeout)((err, result) => {\n duplicatedConnection.disconnect();\n if (err) {\n return callback(err);\n }\n if (this.status === \"disconnecting\" ||\n this.status === \"close\" ||\n this.status === \"end\") {\n debug(\"ignore CLUSTER.SLOTS results (count: %d) since cluster status is %s\", result.length, this.status);\n callback();\n return;\n }\n const nodes = [];\n debug(\"cluster slots result count: %d\", result.length);\n for (let i = 0; i < result.length; ++i) {\n const items = result[i];\n const slotRangeStart = items[0];\n const slotRangeEnd = items[1];\n const keys = [];\n for (let j = 2; j < items.length; j++) {\n if (!items[j][0]) {\n continue;\n }\n const node = this.natMapper({\n host: items[j][0],\n port: items[j][1],\n });\n node.readOnly = j !== 2;\n nodes.push(node);\n keys.push(node.host + \":\" + node.port);\n }\n debug(\"cluster slots result [%d]: slots %d~%d served by %s\", i, slotRangeStart, slotRangeEnd, keys);\n for (let slot = slotRangeStart; slot <= slotRangeEnd; slot++) {\n this.slots[slot] = keys;\n }\n }\n // Assign to each node keys a numeric value to make autopipeline comparison faster.\n this._groupsIds = Object.create(null);\n let j = 0;\n for (let i = 0; i < 16384; i++) {\n const target = (this.slots[i] || []).join(\";\");\n if (!target.length) {\n this._groupsBySlot[i] = undefined;\n continue;\n }\n if (!this._groupsIds[target]) {\n this._groupsIds[target] = ++j;\n }\n this._groupsBySlot[i] = this._groupsIds[target];\n }\n this.connectionPool.reset(nodes);\n callback();\n }, this.options.slotsRefreshTimeout));\n }\n invokeReadyDelayedCallbacks(err) {\n for (const c of this._readyDelayedCallbacks) {\n process.nextTick(c, err);\n }\n this._readyDelayedCallbacks = [];\n }\n /**\n * Check whether Cluster is able to process commands\n */\n readyCheck(callback) {\n this.cluster(\"INFO\", (err, res) => {\n if (err) {\n return callback(err);\n }\n if (typeof res !== \"string\") {\n return callback();\n }\n let state;\n const lines = res.split(\"\\r\\n\");\n for (let i = 0; i < lines.length; ++i) {\n const parts = lines[i].split(\":\");\n if (parts[0] === \"cluster_state\") {\n state = parts[1];\n break;\n }\n }\n if (state === \"fail\") {\n debug(\"cluster state not ok (%s)\", state);\n callback(null, state);\n }\n else {\n callback();\n }\n });\n }\n resolveSrv(hostname) {\n return new Promise((resolve, reject) => {\n this.options.resolveSrv(hostname, (err, records) => {\n if (err) {\n return reject(err);\n }\n const self = this, groupedRecords = (0, util_1.groupSrvRecords)(records), sortedKeys = Object.keys(groupedRecords).sort((a, b) => parseInt(a) - parseInt(b));\n function tryFirstOne(err) {\n if (!sortedKeys.length) {\n return reject(err);\n }\n const key = sortedKeys[0], group = groupedRecords[key], record = (0, util_1.weightSrvRecords)(group);\n if (!group.records.length) {\n sortedKeys.shift();\n }\n self.dnsLookup(record.name).then((host) => resolve({\n host,\n port: record.port,\n }), tryFirstOne);\n }\n tryFirstOne();\n });\n });\n }\n dnsLookup(hostname) {\n return new Promise((resolve, reject) => {\n this.options.dnsLookup(hostname, (err, address) => {\n if (err) {\n debug(\"failed to resolve hostname %s to IP: %s\", hostname, err.message);\n reject(err);\n }\n else {\n debug(\"resolved hostname %s to IP %s\", hostname, address);\n resolve(address);\n }\n });\n });\n }\n /**\n * Normalize startup nodes, and resolving hostnames to IPs.\n *\n * This process happens every time when #connect() is called since\n * #startupNodes and DNS records may chanage.\n */\n async resolveStartupNodeHostnames() {\n if (!Array.isArray(this.startupNodes) || this.startupNodes.length === 0) {\n throw new Error(\"`startupNodes` should contain at least one node.\");\n }\n const startupNodes = (0, util_1.normalizeNodeOptions)(this.startupNodes);\n const hostnames = (0, util_1.getUniqueHostnamesFromOptions)(startupNodes);\n if (hostnames.length === 0) {\n return startupNodes;\n }\n const configs = await Promise.all(hostnames.map((this.options.useSRVRecords ? this.resolveSrv : this.dnsLookup).bind(this)));\n const hostnameToConfig = (0, utils_1.zipMap)(hostnames, configs);\n return startupNodes.map((node) => {\n const config = hostnameToConfig.get(node.host);\n if (!config) {\n return node;\n }\n if (this.options.useSRVRecords) {\n return Object.assign({}, node, config);\n }\n return Object.assign({}, node, { host: config });\n });\n }\n createScanStream(command, { key, options = {} }) {\n return new ScanStream_1.default({\n objectMode: true,\n key: key,\n redis: this,\n command: command,\n ...options,\n });\n }\n}\n(0, applyMixin_1.default)(Cluster, events_1.EventEmitter);\n(0, transaction_1.addTransactionSupport)(Cluster.prototype);\nexports.default = Cluster;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils_1 = require(\"../utils\");\nconst debug = (0, utils_1.Debug)(\"AbstractConnector\");\nclass AbstractConnector {\n constructor(disconnectTimeout) {\n this.connecting = false;\n this.disconnectTimeout = disconnectTimeout;\n }\n check(info) {\n return true;\n }\n disconnect() {\n this.connecting = false;\n if (this.stream) {\n const stream = this.stream; // Make sure callbacks refer to the same instance\n const timeout = setTimeout(() => {\n debug(\"stream %s:%s still open, destroying it\", stream.remoteAddress, stream.remotePort);\n stream.destroy();\n }, this.disconnectTimeout);\n stream.on(\"close\", () => clearTimeout(timeout));\n stream.end();\n }\n }\n}\nexports.default = AbstractConnector;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst net_1 = require(\"net\");\nconst tls_1 = require(\"tls\");\nconst utils_1 = require(\"../utils\");\nconst AbstractConnector_1 = require(\"./AbstractConnector\");\nclass StandaloneConnector extends AbstractConnector_1.default {\n constructor(options) {\n super(options.disconnectTimeout);\n this.options = options;\n }\n connect(_) {\n const { options } = this;\n this.connecting = true;\n let connectionOptions;\n if (\"path\" in options && options.path) {\n connectionOptions = {\n path: options.path,\n };\n }\n else {\n connectionOptions = {};\n if (\"port\" in options && options.port != null) {\n connectionOptions.port = options.port;\n }\n if (\"host\" in options && options.host != null) {\n connectionOptions.host = options.host;\n }\n if (\"family\" in options && options.family != null) {\n connectionOptions.family = options.family;\n }\n }\n if (options.tls) {\n Object.assign(connectionOptions, options.tls);\n }\n // TODO:\n // We use native Promise here since other Promise\n // implementation may use different schedulers that\n // cause issue when the stream is resolved in the\n // next tick.\n // Should use the provided promise in the next major\n // version and do not connect before resolved.\n return new Promise((resolve, reject) => {\n process.nextTick(() => {\n if (!this.connecting) {\n reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n return;\n }\n try {\n if (options.tls) {\n this.stream = (0, tls_1.connect)(connectionOptions);\n }\n else {\n this.stream = (0, net_1.createConnection)(connectionOptions);\n }\n }\n catch (err) {\n reject(err);\n return;\n }\n this.stream.once(\"error\", (err) => {\n this.firstError = err;\n });\n resolve(this.stream);\n });\n });\n }\n}\nexports.default = StandaloneConnector;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction isSentinelEql(a, b) {\n return ((a.host || \"127.0.0.1\") === (b.host || \"127.0.0.1\") &&\n (a.port || 26379) === (b.port || 26379));\n}\nclass SentinelIterator {\n constructor(sentinels) {\n this.cursor = 0;\n this.sentinels = sentinels.slice(0);\n }\n next() {\n const done = this.cursor >= this.sentinels.length;\n return { done, value: done ? undefined : this.sentinels[this.cursor++] };\n }\n reset(moveCurrentEndpointToFirst) {\n if (moveCurrentEndpointToFirst &&\n this.sentinels.length > 1 &&\n this.cursor !== 1) {\n this.sentinels.unshift(...this.sentinels.splice(this.cursor - 1));\n }\n this.cursor = 0;\n }\n add(sentinel) {\n for (let i = 0; i < this.sentinels.length; i++) {\n if (isSentinelEql(sentinel, this.sentinels[i])) {\n return false;\n }\n }\n this.sentinels.push(sentinel);\n return true;\n }\n toString() {\n return `${JSON.stringify(this.sentinels)} @${this.cursor}`;\n }\n}\nexports.default = SentinelIterator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FailoverDetector = void 0;\nconst utils_1 = require(\"../../utils\");\nconst debug = (0, utils_1.Debug)(\"FailoverDetector\");\nconst CHANNEL_NAME = \"+switch-master\";\nclass FailoverDetector {\n // sentinels can't be used for regular commands after this\n constructor(connector, sentinels) {\n this.isDisconnected = false;\n this.connector = connector;\n this.sentinels = sentinels;\n }\n cleanup() {\n this.isDisconnected = true;\n for (const sentinel of this.sentinels) {\n sentinel.client.disconnect();\n }\n }\n async subscribe() {\n debug(\"Starting FailoverDetector\");\n const promises = [];\n for (const sentinel of this.sentinels) {\n const promise = sentinel.client.subscribe(CHANNEL_NAME).catch((err) => {\n debug(\"Failed to subscribe to failover messages on sentinel %s:%s (%s)\", sentinel.address.host || \"127.0.0.1\", sentinel.address.port || 26739, err.message);\n });\n promises.push(promise);\n sentinel.client.on(\"message\", (channel) => {\n if (!this.isDisconnected && channel === CHANNEL_NAME) {\n this.disconnect();\n }\n });\n }\n await Promise.all(promises);\n }\n disconnect() {\n // Avoid disconnecting more than once per failover.\n // A new FailoverDetector will be created after reconnecting.\n this.isDisconnected = true;\n debug(\"Failover detected, disconnecting\");\n // Will call this.cleanup()\n this.connector.disconnect();\n }\n}\nexports.FailoverDetector = FailoverDetector;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SentinelIterator = void 0;\nconst net_1 = require(\"net\");\nconst utils_1 = require(\"../../utils\");\nconst tls_1 = require(\"tls\");\nconst SentinelIterator_1 = require(\"./SentinelIterator\");\nexports.SentinelIterator = SentinelIterator_1.default;\nconst AbstractConnector_1 = require(\"../AbstractConnector\");\nconst Redis_1 = require(\"../../Redis\");\nconst FailoverDetector_1 = require(\"./FailoverDetector\");\nconst debug = (0, utils_1.Debug)(\"SentinelConnector\");\nclass SentinelConnector extends AbstractConnector_1.default {\n constructor(options) {\n super(options.disconnectTimeout);\n this.options = options;\n this.emitter = null;\n this.failoverDetector = null;\n if (!this.options.sentinels.length) {\n throw new Error(\"Requires at least one sentinel to connect to.\");\n }\n if (!this.options.name) {\n throw new Error(\"Requires the name of master.\");\n }\n this.sentinelIterator = new SentinelIterator_1.default(this.options.sentinels);\n }\n check(info) {\n const roleMatches = !info.role || this.options.role === info.role;\n if (!roleMatches) {\n debug(\"role invalid, expected %s, but got %s\", this.options.role, info.role);\n // Start from the next item.\n // Note that `reset` will move the cursor to the previous element,\n // so we advance two steps here.\n this.sentinelIterator.next();\n this.sentinelIterator.next();\n this.sentinelIterator.reset(true);\n }\n return roleMatches;\n }\n disconnect() {\n super.disconnect();\n if (this.failoverDetector) {\n this.failoverDetector.cleanup();\n }\n }\n connect(eventEmitter) {\n this.connecting = true;\n this.retryAttempts = 0;\n let lastError;\n const connectToNext = async () => {\n const endpoint = this.sentinelIterator.next();\n if (endpoint.done) {\n this.sentinelIterator.reset(false);\n const retryDelay = typeof this.options.sentinelRetryStrategy === \"function\"\n ? this.options.sentinelRetryStrategy(++this.retryAttempts)\n : null;\n let errorMsg = typeof retryDelay !== \"number\"\n ? \"All sentinels are unreachable and retry is disabled.\"\n : `All sentinels are unreachable. Retrying from scratch after ${retryDelay}ms.`;\n if (lastError) {\n errorMsg += ` Last error: ${lastError.message}`;\n }\n debug(errorMsg);\n const error = new Error(errorMsg);\n if (typeof retryDelay === \"number\") {\n eventEmitter(\"error\", error);\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n return connectToNext();\n }\n else {\n throw error;\n }\n }\n let resolved = null;\n let err = null;\n try {\n resolved = await this.resolve(endpoint.value);\n }\n catch (error) {\n err = error;\n }\n if (!this.connecting) {\n throw new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG);\n }\n const endpointAddress = endpoint.value.host + \":\" + endpoint.value.port;\n if (resolved) {\n debug(\"resolved: %s:%s from sentinel %s\", resolved.host, resolved.port, endpointAddress);\n if (this.options.enableTLSForSentinelMode && this.options.tls) {\n Object.assign(resolved, this.options.tls);\n this.stream = (0, tls_1.connect)(resolved);\n this.stream.once(\"secureConnect\", this.initFailoverDetector.bind(this));\n }\n else {\n this.stream = (0, net_1.createConnection)(resolved);\n this.stream.once(\"connect\", this.initFailoverDetector.bind(this));\n }\n this.stream.once(\"error\", (err) => {\n this.firstError = err;\n });\n return this.stream;\n }\n else {\n const errorMsg = err\n ? \"failed to connect to sentinel \" +\n endpointAddress +\n \" because \" +\n err.message\n : \"connected to sentinel \" +\n endpointAddress +\n \" successfully, but got an invalid reply: \" +\n resolved;\n debug(errorMsg);\n eventEmitter(\"sentinelError\", new Error(errorMsg));\n if (err) {\n lastError = err;\n }\n return connectToNext();\n }\n };\n return connectToNext();\n }\n async updateSentinels(client) {\n if (!this.options.updateSentinels) {\n return;\n }\n const result = await client.sentinel(\"sentinels\", this.options.name);\n if (!Array.isArray(result)) {\n return;\n }\n result\n .map(utils_1.packObject)\n .forEach((sentinel) => {\n const flags = sentinel.flags ? sentinel.flags.split(\",\") : [];\n if (flags.indexOf(\"disconnected\") === -1 &&\n sentinel.ip &&\n sentinel.port) {\n const endpoint = this.sentinelNatResolve(addressResponseToAddress(sentinel));\n if (this.sentinelIterator.add(endpoint)) {\n debug(\"adding sentinel %s:%s\", endpoint.host, endpoint.port);\n }\n }\n });\n debug(\"Updated internal sentinels: %s\", this.sentinelIterator);\n }\n async resolveMaster(client) {\n const result = await client.sentinel(\"get-master-addr-by-name\", this.options.name);\n await this.updateSentinels(client);\n return this.sentinelNatResolve(Array.isArray(result)\n ? { host: result[0], port: Number(result[1]) }\n : null);\n }\n async resolveSlave(client) {\n const result = await client.sentinel(\"slaves\", this.options.name);\n if (!Array.isArray(result)) {\n return null;\n }\n const availableSlaves = result\n .map(utils_1.packObject)\n .filter((slave) => slave.flags && !slave.flags.match(/(disconnected|s_down|o_down)/));\n return this.sentinelNatResolve(selectPreferredSentinel(availableSlaves, this.options.preferredSlaves));\n }\n sentinelNatResolve(item) {\n if (!item || !this.options.natMap)\n return item;\n return this.options.natMap[`${item.host}:${item.port}`] || item;\n }\n connectToSentinel(endpoint, options) {\n const redis = new Redis_1.default({\n port: endpoint.port || 26379,\n host: endpoint.host,\n username: this.options.sentinelUsername || null,\n password: this.options.sentinelPassword || null,\n family: endpoint.family ||\n // @ts-expect-error\n (\"path\" in this.options && this.options.path\n ? undefined\n : // @ts-expect-error\n this.options.family),\n tls: this.options.sentinelTLS,\n retryStrategy: null,\n enableReadyCheck: false,\n connectTimeout: this.options.connectTimeout,\n commandTimeout: this.options.sentinelCommandTimeout,\n ...options,\n });\n // @ts-expect-error\n return redis;\n }\n async resolve(endpoint) {\n const client = this.connectToSentinel(endpoint);\n // ignore the errors since resolve* methods will handle them\n client.on(\"error\", noop);\n try {\n if (this.options.role === \"slave\") {\n return await this.resolveSlave(client);\n }\n else {\n return await this.resolveMaster(client);\n }\n }\n finally {\n client.disconnect();\n }\n }\n async initFailoverDetector() {\n var _a;\n if (!this.options.failoverDetector) {\n return;\n }\n // Move the current sentinel to the first position\n this.sentinelIterator.reset(true);\n const sentinels = [];\n // In case of a large amount of sentinels, limit the number of concurrent connections\n while (sentinels.length < this.options.sentinelMaxConnections) {\n const { done, value } = this.sentinelIterator.next();\n if (done) {\n break;\n }\n const client = this.connectToSentinel(value, {\n lazyConnect: true,\n retryStrategy: this.options.sentinelReconnectStrategy,\n });\n client.on(\"reconnecting\", () => {\n var _a;\n // Tests listen to this event\n (_a = this.emitter) === null || _a === void 0 ? void 0 : _a.emit(\"sentinelReconnecting\");\n });\n sentinels.push({ address: value, client });\n }\n this.sentinelIterator.reset(false);\n if (this.failoverDetector) {\n // Clean up previous detector\n this.failoverDetector.cleanup();\n }\n this.failoverDetector = new FailoverDetector_1.FailoverDetector(this, sentinels);\n await this.failoverDetector.subscribe();\n // Tests listen to this event\n (_a = this.emitter) === null || _a === void 0 ? void 0 : _a.emit(\"failoverSubscribed\");\n }\n}\nexports.default = SentinelConnector;\nfunction selectPreferredSentinel(availableSlaves, preferredSlaves) {\n if (availableSlaves.length === 0) {\n return null;\n }\n let selectedSlave;\n if (typeof preferredSlaves === \"function\") {\n selectedSlave = preferredSlaves(availableSlaves);\n }\n else if (preferredSlaves !== null && typeof preferredSlaves === \"object\") {\n const preferredSlavesArray = Array.isArray(preferredSlaves)\n ? preferredSlaves\n : [preferredSlaves];\n // sort by priority\n preferredSlavesArray.sort((a, b) => {\n // default the priority to 1\n if (!a.prio) {\n a.prio = 1;\n }\n if (!b.prio) {\n b.prio = 1;\n }\n // lowest priority first\n if (a.prio < b.prio) {\n return -1;\n }\n if (a.prio > b.prio) {\n return 1;\n }\n return 0;\n });\n // loop over preferred slaves and return the first match\n for (let p = 0; p < preferredSlavesArray.length; p++) {\n for (let a = 0; a < availableSlaves.length; a++) {\n const slave = availableSlaves[a];\n if (slave.ip === preferredSlavesArray[p].ip) {\n if (slave.port === preferredSlavesArray[p].port) {\n selectedSlave = slave;\n break;\n }\n }\n }\n if (selectedSlave) {\n break;\n }\n }\n }\n // if none of the preferred slaves are available, a random available slave is returned\n if (!selectedSlave) {\n selectedSlave = (0, utils_1.sample)(availableSlaves);\n }\n return addressResponseToAddress(selectedSlave);\n}\nfunction addressResponseToAddress(input) {\n return { host: input.ip, port: Number(input.port) };\n}\nfunction noop() { }\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SentinelConnector = exports.StandaloneConnector = void 0;\nconst StandaloneConnector_1 = require(\"./StandaloneConnector\");\nexports.StandaloneConnector = StandaloneConnector_1.default;\nconst SentinelConnector_1 = require(\"./SentinelConnector\");\nexports.SentinelConnector = SentinelConnector_1.default;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst redis_errors_1 = require(\"redis-errors\");\nclass MaxRetriesPerRequestError extends redis_errors_1.AbortError {\n constructor(maxRetriesPerRequest) {\n const message = `Reached the max retries per request limit (which is ${maxRetriesPerRequest}). Refer to \"maxRetriesPerRequest\" option for details.`;\n super(message);\n Error.captureStackTrace(this, this.constructor);\n }\n get name() {\n return this.constructor.name;\n }\n}\nexports.default = MaxRetriesPerRequestError;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaxRetriesPerRequestError = void 0;\nconst MaxRetriesPerRequestError_1 = require(\"./MaxRetriesPerRequestError\");\nexports.MaxRetriesPerRequestError = MaxRetriesPerRequestError_1.default;\n","'use strict'\n\nconst Buffer = require('buffer').Buffer\nconst StringDecoder = require('string_decoder').StringDecoder\nconst decoder = new StringDecoder()\nconst errors = require('redis-errors')\nconst ReplyError = errors.ReplyError\nconst ParserError = errors.ParserError\nvar bufferPool = Buffer.allocUnsafe(32 * 1024)\nvar bufferOffset = 0\nvar interval = null\nvar counter = 0\nvar notDecreased = 0\n\n/**\n * Used for integer numbers only\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|number}\n */\nfunction parseSimpleNumbers (parser) {\n const length = parser.buffer.length - 1\n var offset = parser.offset\n var number = 0\n var sign = 1\n\n if (parser.buffer[offset] === 45) {\n sign = -1\n offset++\n }\n\n while (offset < length) {\n const c1 = parser.buffer[offset++]\n if (c1 === 13) { // \\r\\n\n parser.offset = offset + 1\n return sign * number\n }\n number = (number * 10) + (c1 - 48)\n }\n}\n\n/**\n * Used for integer numbers in case of the returnNumbers option\n *\n * Reading the string as parts of n SMI is more efficient than\n * using a string directly.\n *\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|string}\n */\nfunction parseStringNumbers (parser) {\n const length = parser.buffer.length - 1\n var offset = parser.offset\n var number = 0\n var res = ''\n\n if (parser.buffer[offset] === 45) {\n res += '-'\n offset++\n }\n\n while (offset < length) {\n var c1 = parser.buffer[offset++]\n if (c1 === 13) { // \\r\\n\n parser.offset = offset + 1\n if (number !== 0) {\n res += number\n }\n return res\n } else if (number > 429496728) {\n res += (number * 10) + (c1 - 48)\n number = 0\n } else if (c1 === 48 && number === 0) {\n res += 0\n } else {\n number = (number * 10) + (c1 - 48)\n }\n }\n}\n\n/**\n * Parse a '+' redis simple string response but forward the offsets\n * onto convertBufferRange to generate a string.\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|string|Buffer}\n */\nfunction parseSimpleString (parser) {\n const start = parser.offset\n const buffer = parser.buffer\n const length = buffer.length - 1\n var offset = start\n\n while (offset < length) {\n if (buffer[offset++] === 13) { // \\r\\n\n parser.offset = offset + 1\n if (parser.optionReturnBuffers === true) {\n return parser.buffer.slice(start, offset - 1)\n }\n return parser.buffer.toString('utf8', start, offset - 1)\n }\n }\n}\n\n/**\n * Returns the read length\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|number}\n */\nfunction parseLength (parser) {\n const length = parser.buffer.length - 1\n var offset = parser.offset\n var number = 0\n\n while (offset < length) {\n const c1 = parser.buffer[offset++]\n if (c1 === 13) {\n parser.offset = offset + 1\n return number\n }\n number = (number * 10) + (c1 - 48)\n }\n}\n\n/**\n * Parse a ':' redis integer response\n *\n * If stringNumbers is activated the parser always returns numbers as string\n * This is important for big numbers (number > Math.pow(2, 53)) as js numbers\n * are 64bit floating point numbers with reduced precision\n *\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|number|string}\n */\nfunction parseInteger (parser) {\n if (parser.optionStringNumbers === true) {\n return parseStringNumbers(parser)\n }\n return parseSimpleNumbers(parser)\n}\n\n/**\n * Parse a '$' redis bulk string response\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|null|string}\n */\nfunction parseBulkString (parser) {\n const length = parseLength(parser)\n if (length === undefined) {\n return\n }\n if (length < 0) {\n return null\n }\n const offset = parser.offset + length\n if (offset + 2 > parser.buffer.length) {\n parser.bigStrSize = offset + 2\n parser.totalChunkSize = parser.buffer.length\n parser.bufferCache.push(parser.buffer)\n return\n }\n const start = parser.offset\n parser.offset = offset + 2\n if (parser.optionReturnBuffers === true) {\n return parser.buffer.slice(start, offset)\n }\n return parser.buffer.toString('utf8', start, offset)\n}\n\n/**\n * Parse a '-' redis error response\n * @param {JavascriptRedisParser} parser\n * @returns {ReplyError}\n */\nfunction parseError (parser) {\n var string = parseSimpleString(parser)\n if (string !== undefined) {\n if (parser.optionReturnBuffers === true) {\n string = string.toString()\n }\n return new ReplyError(string)\n }\n}\n\n/**\n * Parsing error handler, resets parser buffer\n * @param {JavascriptRedisParser} parser\n * @param {number} type\n * @returns {undefined}\n */\nfunction handleError (parser, type) {\n const err = new ParserError(\n 'Protocol error, got ' + JSON.stringify(String.fromCharCode(type)) + ' as reply type byte',\n JSON.stringify(parser.buffer),\n parser.offset\n )\n parser.buffer = null\n parser.returnFatalError(err)\n}\n\n/**\n * Parse a '*' redis array response\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|null|any[]}\n */\nfunction parseArray (parser) {\n const length = parseLength(parser)\n if (length === undefined) {\n return\n }\n if (length < 0) {\n return null\n }\n const responses = new Array(length)\n return parseArrayElements(parser, responses, 0)\n}\n\n/**\n * Push a partly parsed array to the stack\n *\n * @param {JavascriptRedisParser} parser\n * @param {any[]} array\n * @param {number} pos\n * @returns {undefined}\n */\nfunction pushArrayCache (parser, array, pos) {\n parser.arrayCache.push(array)\n parser.arrayPos.push(pos)\n}\n\n/**\n * Parse chunked redis array response\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|any[]}\n */\nfunction parseArrayChunks (parser) {\n const tmp = parser.arrayCache.pop()\n var pos = parser.arrayPos.pop()\n if (parser.arrayCache.length) {\n const res = parseArrayChunks(parser)\n if (res === undefined) {\n pushArrayCache(parser, tmp, pos)\n return\n }\n tmp[pos++] = res\n }\n return parseArrayElements(parser, tmp, pos)\n}\n\n/**\n * Parse redis array response elements\n * @param {JavascriptRedisParser} parser\n * @param {Array} responses\n * @param {number} i\n * @returns {undefined|null|any[]}\n */\nfunction parseArrayElements (parser, responses, i) {\n const bufferLength = parser.buffer.length\n while (i < responses.length) {\n const offset = parser.offset\n if (parser.offset >= bufferLength) {\n pushArrayCache(parser, responses, i)\n return\n }\n const response = parseType(parser, parser.buffer[parser.offset++])\n if (response === undefined) {\n if (!(parser.arrayCache.length || parser.bufferCache.length)) {\n parser.offset = offset\n }\n pushArrayCache(parser, responses, i)\n return\n }\n responses[i] = response\n i++\n }\n\n return responses\n}\n\n/**\n * Called the appropriate parser for the specified type.\n *\n * 36: $\n * 43: +\n * 42: *\n * 58: :\n * 45: -\n *\n * @param {JavascriptRedisParser} parser\n * @param {number} type\n * @returns {*}\n */\nfunction parseType (parser, type) {\n switch (type) {\n case 36:\n return parseBulkString(parser)\n case 43:\n return parseSimpleString(parser)\n case 42:\n return parseArray(parser)\n case 58:\n return parseInteger(parser)\n case 45:\n return parseError(parser)\n default:\n return handleError(parser, type)\n }\n}\n\n/**\n * Decrease the bufferPool size over time\n *\n * Balance between increasing and decreasing the bufferPool.\n * Decrease the bufferPool by 10% by removing the first 10% of the current pool.\n * @returns {undefined}\n */\nfunction decreaseBufferPool () {\n if (bufferPool.length > 50 * 1024) {\n if (counter === 1 || notDecreased > counter * 2) {\n const minSliceLen = Math.floor(bufferPool.length / 10)\n const sliceLength = minSliceLen < bufferOffset\n ? bufferOffset\n : minSliceLen\n bufferOffset = 0\n bufferPool = bufferPool.slice(sliceLength, bufferPool.length)\n } else {\n notDecreased++\n counter--\n }\n } else {\n clearInterval(interval)\n counter = 0\n notDecreased = 0\n interval = null\n }\n}\n\n/**\n * Check if the requested size fits in the current bufferPool.\n * If it does not, reset and increase the bufferPool accordingly.\n *\n * @param {number} length\n * @returns {undefined}\n */\nfunction resizeBuffer (length) {\n if (bufferPool.length < length + bufferOffset) {\n const multiplier = length > 1024 * 1024 * 75 ? 2 : 3\n if (bufferOffset > 1024 * 1024 * 111) {\n bufferOffset = 1024 * 1024 * 50\n }\n bufferPool = Buffer.allocUnsafe(length * multiplier + bufferOffset)\n bufferOffset = 0\n counter++\n if (interval === null) {\n interval = setInterval(decreaseBufferPool, 50)\n }\n }\n}\n\n/**\n * Concat a bulk string containing multiple chunks\n *\n * Notes:\n * 1) The first chunk might contain the whole bulk string including the \\r\n * 2) We are only safe to fully add up elements that are neither the first nor any of the last two elements\n *\n * @param {JavascriptRedisParser} parser\n * @returns {String}\n */\nfunction concatBulkString (parser) {\n const list = parser.bufferCache\n const oldOffset = parser.offset\n var chunks = list.length\n var offset = parser.bigStrSize - parser.totalChunkSize\n parser.offset = offset\n if (offset <= 2) {\n if (chunks === 2) {\n return list[0].toString('utf8', oldOffset, list[0].length + offset - 2)\n }\n chunks--\n offset = list[list.length - 2].length + offset\n }\n var res = decoder.write(list[0].slice(oldOffset))\n for (var i = 1; i < chunks - 1; i++) {\n res += decoder.write(list[i])\n }\n res += decoder.end(list[i].slice(0, offset - 2))\n return res\n}\n\n/**\n * Concat the collected chunks from parser.bufferCache.\n *\n * Increases the bufferPool size beforehand if necessary.\n *\n * @param {JavascriptRedisParser} parser\n * @returns {Buffer}\n */\nfunction concatBulkBuffer (parser) {\n const list = parser.bufferCache\n const oldOffset = parser.offset\n const length = parser.bigStrSize - oldOffset - 2\n var chunks = list.length\n var offset = parser.bigStrSize - parser.totalChunkSize\n parser.offset = offset\n if (offset <= 2) {\n if (chunks === 2) {\n return list[0].slice(oldOffset, list[0].length + offset - 2)\n }\n chunks--\n offset = list[list.length - 2].length + offset\n }\n resizeBuffer(length)\n const start = bufferOffset\n list[0].copy(bufferPool, start, oldOffset, list[0].length)\n bufferOffset += list[0].length - oldOffset\n for (var i = 1; i < chunks - 1; i++) {\n list[i].copy(bufferPool, bufferOffset)\n bufferOffset += list[i].length\n }\n list[i].copy(bufferPool, bufferOffset, 0, offset - 2)\n bufferOffset += offset - 2\n return bufferPool.slice(start, bufferOffset)\n}\n\nclass JavascriptRedisParser {\n /**\n * Javascript Redis Parser constructor\n * @param {{returnError: Function, returnReply: Function, returnFatalError?: Function, returnBuffers: boolean, stringNumbers: boolean }} options\n * @constructor\n */\n constructor (options) {\n if (!options) {\n throw new TypeError('Options are mandatory.')\n }\n if (typeof options.returnError !== 'function' || typeof options.returnReply !== 'function') {\n throw new TypeError('The returnReply and returnError options have to be functions.')\n }\n this.setReturnBuffers(!!options.returnBuffers)\n this.setStringNumbers(!!options.stringNumbers)\n this.returnError = options.returnError\n this.returnFatalError = options.returnFatalError || options.returnError\n this.returnReply = options.returnReply\n this.reset()\n }\n\n /**\n * Reset the parser values to the initial state\n *\n * @returns {undefined}\n */\n reset () {\n this.offset = 0\n this.buffer = null\n this.bigStrSize = 0\n this.totalChunkSize = 0\n this.bufferCache = []\n this.arrayCache = []\n this.arrayPos = []\n }\n\n /**\n * Set the returnBuffers option\n *\n * @param {boolean} returnBuffers\n * @returns {undefined}\n */\n setReturnBuffers (returnBuffers) {\n if (typeof returnBuffers !== 'boolean') {\n throw new TypeError('The returnBuffers argument has to be a boolean')\n }\n this.optionReturnBuffers = returnBuffers\n }\n\n /**\n * Set the stringNumbers option\n *\n * @param {boolean} stringNumbers\n * @returns {undefined}\n */\n setStringNumbers (stringNumbers) {\n if (typeof stringNumbers !== 'boolean') {\n throw new TypeError('The stringNumbers argument has to be a boolean')\n }\n this.optionStringNumbers = stringNumbers\n }\n\n /**\n * Parse the redis buffer\n * @param {Buffer} buffer\n * @returns {undefined}\n */\n execute (buffer) {\n if (this.buffer === null) {\n this.buffer = buffer\n this.offset = 0\n } else if (this.bigStrSize === 0) {\n const oldLength = this.buffer.length\n const remainingLength = oldLength - this.offset\n const newBuffer = Buffer.allocUnsafe(remainingLength + buffer.length)\n this.buffer.copy(newBuffer, 0, this.offset, oldLength)\n buffer.copy(newBuffer, remainingLength, 0, buffer.length)\n this.buffer = newBuffer\n this.offset = 0\n if (this.arrayCache.length) {\n const arr = parseArrayChunks(this)\n if (arr === undefined) {\n return\n }\n this.returnReply(arr)\n }\n } else if (this.totalChunkSize + buffer.length >= this.bigStrSize) {\n this.bufferCache.push(buffer)\n var tmp = this.optionReturnBuffers ? concatBulkBuffer(this) : concatBulkString(this)\n this.bigStrSize = 0\n this.bufferCache = []\n this.buffer = buffer\n if (this.arrayCache.length) {\n this.arrayCache[0][this.arrayPos[0]++] = tmp\n tmp = parseArrayChunks(this)\n if (tmp === undefined) {\n return\n }\n }\n this.returnReply(tmp)\n } else {\n this.bufferCache.push(buffer)\n this.totalChunkSize += buffer.length\n return\n }\n\n while (this.offset < this.buffer.length) {\n const offset = this.offset\n const type = this.buffer[this.offset++]\n const response = parseType(this, type)\n if (response === undefined) {\n if (!(this.arrayCache.length || this.bufferCache.length)) {\n this.offset = offset\n }\n return\n }\n\n if (type === 45) {\n this.returnError(response)\n } else {\n this.returnReply(response)\n }\n }\n\n this.buffer = null\n }\n}\n\nmodule.exports = JavascriptRedisParser\n","'use strict'\n\nmodule.exports = require('./lib/parser')\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Tiny class to simplify dealing with subscription set\n */\nclass SubscriptionSet {\n constructor() {\n this.set = {\n subscribe: {},\n psubscribe: {},\n ssubscribe: {},\n };\n }\n add(set, channel) {\n this.set[mapSet(set)][channel] = true;\n }\n del(set, channel) {\n delete this.set[mapSet(set)][channel];\n }\n channels(set) {\n return Object.keys(this.set[mapSet(set)]);\n }\n isEmpty() {\n return (this.channels(\"subscribe\").length === 0 &&\n this.channels(\"psubscribe\").length === 0 &&\n this.channels(\"ssubscribe\").length === 0);\n }\n}\nexports.default = SubscriptionSet;\nfunction mapSet(set) {\n if (set === \"unsubscribe\") {\n return \"subscribe\";\n }\n if (set === \"punsubscribe\") {\n return \"psubscribe\";\n }\n if (set === \"sunsubscribe\") {\n return \"ssubscribe\";\n }\n return set;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Command_1 = require(\"./Command\");\nconst utils_1 = require(\"./utils\");\nconst RedisParser = require(\"redis-parser\");\nconst SubscriptionSet_1 = require(\"./SubscriptionSet\");\nconst debug = (0, utils_1.Debug)(\"dataHandler\");\nclass DataHandler {\n constructor(redis, parserOptions) {\n this.redis = redis;\n const parser = new RedisParser({\n stringNumbers: parserOptions.stringNumbers,\n returnBuffers: true,\n returnError: (err) => {\n this.returnError(err);\n },\n returnFatalError: (err) => {\n this.returnFatalError(err);\n },\n returnReply: (reply) => {\n this.returnReply(reply);\n },\n });\n redis.stream.on(\"data\", (data) => {\n parser.execute(data);\n });\n }\n returnFatalError(err) {\n err.message += \". Please report this.\";\n this.redis.recoverFromFatalError(err, err, { offlineQueue: false });\n }\n returnError(err) {\n const item = this.shiftCommand(err);\n if (!item) {\n return;\n }\n err.command = {\n name: item.command.name,\n args: item.command.args,\n };\n this.redis.handleReconnection(err, item);\n }\n returnReply(reply) {\n if (this.handleMonitorReply(reply)) {\n return;\n }\n if (this.handleSubscriberReply(reply)) {\n return;\n }\n const item = this.shiftCommand(reply);\n if (!item) {\n return;\n }\n if (Command_1.default.checkFlag(\"ENTER_SUBSCRIBER_MODE\", item.command.name)) {\n this.redis.condition.subscriber = new SubscriptionSet_1.default();\n this.redis.condition.subscriber.add(item.command.name, reply[1].toString());\n if (!fillSubCommand(item.command, reply[2])) {\n this.redis.commandQueue.unshift(item);\n }\n }\n else if (Command_1.default.checkFlag(\"EXIT_SUBSCRIBER_MODE\", item.command.name)) {\n if (!fillUnsubCommand(item.command, reply[2])) {\n this.redis.commandQueue.unshift(item);\n }\n }\n else {\n item.command.resolve(reply);\n }\n }\n handleSubscriberReply(reply) {\n if (!this.redis.condition.subscriber) {\n return false;\n }\n const replyType = Array.isArray(reply) ? reply[0].toString() : null;\n debug('receive reply \"%s\" in subscriber mode', replyType);\n switch (replyType) {\n case \"message\":\n if (this.redis.listeners(\"message\").length > 0) {\n // Check if there're listeners to avoid unnecessary `toString()`.\n this.redis.emit(\"message\", reply[1].toString(), reply[2] ? reply[2].toString() : \"\");\n }\n this.redis.emit(\"messageBuffer\", reply[1], reply[2]);\n break;\n case \"pmessage\": {\n const pattern = reply[1].toString();\n if (this.redis.listeners(\"pmessage\").length > 0) {\n this.redis.emit(\"pmessage\", pattern, reply[2].toString(), reply[3].toString());\n }\n this.redis.emit(\"pmessageBuffer\", pattern, reply[2], reply[3]);\n break;\n }\n case \"smessage\": {\n if (this.redis.listeners(\"smessage\").length > 0) {\n this.redis.emit(\"smessage\", reply[1].toString(), reply[2] ? reply[2].toString() : \"\");\n }\n this.redis.emit(\"smessageBuffer\", reply[1], reply[2]);\n break;\n }\n case \"ssubscribe\":\n case \"subscribe\":\n case \"psubscribe\": {\n const channel = reply[1].toString();\n this.redis.condition.subscriber.add(replyType, channel);\n const item = this.shiftCommand(reply);\n if (!item) {\n return;\n }\n if (!fillSubCommand(item.command, reply[2])) {\n this.redis.commandQueue.unshift(item);\n }\n break;\n }\n case \"sunsubscribe\":\n case \"unsubscribe\":\n case \"punsubscribe\": {\n const channel = reply[1] ? reply[1].toString() : null;\n if (channel) {\n this.redis.condition.subscriber.del(replyType, channel);\n }\n const count = reply[2];\n if (Number(count) === 0) {\n this.redis.condition.subscriber = false;\n }\n const item = this.shiftCommand(reply);\n if (!item) {\n return;\n }\n if (!fillUnsubCommand(item.command, count)) {\n this.redis.commandQueue.unshift(item);\n }\n break;\n }\n default: {\n const item = this.shiftCommand(reply);\n if (!item) {\n return;\n }\n item.command.resolve(reply);\n }\n }\n return true;\n }\n handleMonitorReply(reply) {\n if (this.redis.status !== \"monitoring\") {\n return false;\n }\n const replyStr = reply.toString();\n if (replyStr === \"OK\") {\n // Valid commands in the monitoring mode are AUTH and MONITOR,\n // both of which always reply with 'OK'.\n // So if we got an 'OK', we can make certain that\n // the reply is made to AUTH & MONITOR.\n return false;\n }\n // Since commands sent in the monitoring mode will trigger an exception,\n // any replies we received in the monitoring mode should consider to be\n // realtime monitor data instead of result of commands.\n const len = replyStr.indexOf(\" \");\n const timestamp = replyStr.slice(0, len);\n const argIndex = replyStr.indexOf('\"');\n const args = replyStr\n .slice(argIndex + 1, -1)\n .split('\" \"')\n .map((elem) => elem.replace(/\\\\\"/g, '\"'));\n const dbAndSource = replyStr.slice(len + 2, argIndex - 2).split(\" \");\n this.redis.emit(\"monitor\", timestamp, args, dbAndSource[1], dbAndSource[0]);\n return true;\n }\n shiftCommand(reply) {\n const item = this.redis.commandQueue.shift();\n if (!item) {\n const message = \"Command queue state error. If you can reproduce this, please report it.\";\n const error = new Error(message +\n (reply instanceof Error\n ? ` Last error: ${reply.message}`\n : ` Last reply: ${reply.toString()}`));\n this.redis.emit(\"error\", error);\n return null;\n }\n return item;\n }\n}\nexports.default = DataHandler;\nconst remainingRepliesMap = new WeakMap();\nfunction fillSubCommand(command, count) {\n let remainingReplies = remainingRepliesMap.has(command)\n ? remainingRepliesMap.get(command)\n : command.args.length;\n remainingReplies -= 1;\n if (remainingReplies <= 0) {\n command.resolve(count);\n remainingRepliesMap.delete(command);\n return true;\n }\n remainingRepliesMap.set(command, remainingReplies);\n return false;\n}\nfunction fillUnsubCommand(command, count) {\n let remainingReplies = remainingRepliesMap.has(command)\n ? remainingRepliesMap.get(command)\n : command.args.length;\n if (remainingReplies === 0) {\n if (Number(count) === 0) {\n remainingRepliesMap.delete(command);\n command.resolve(count);\n return true;\n }\n return false;\n }\n remainingReplies -= 1;\n if (remainingReplies <= 0) {\n command.resolve(count);\n return true;\n }\n remainingRepliesMap.set(command, remainingReplies);\n return false;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readyHandler = exports.errorHandler = exports.closeHandler = exports.connectHandler = void 0;\nconst redis_errors_1 = require(\"redis-errors\");\nconst Command_1 = require(\"../Command\");\nconst errors_1 = require(\"../errors\");\nconst utils_1 = require(\"../utils\");\nconst DataHandler_1 = require(\"../DataHandler\");\nconst debug = (0, utils_1.Debug)(\"connection\");\nfunction connectHandler(self) {\n return function () {\n self.setStatus(\"connect\");\n self.resetCommandQueue();\n // AUTH command should be processed before any other commands\n let flushed = false;\n const { connectionEpoch } = self;\n if (self.condition.auth) {\n self.auth(self.condition.auth, function (err) {\n if (connectionEpoch !== self.connectionEpoch) {\n return;\n }\n if (err) {\n if (err.message.indexOf(\"no password is set\") !== -1) {\n console.warn(\"[WARN] Redis server does not require a password, but a password was supplied.\");\n }\n else if (err.message.indexOf(\"without any password configured for the default user\") !== -1) {\n console.warn(\"[WARN] This Redis server's `default` user does not require a password, but a password was supplied\");\n }\n else if (err.message.indexOf(\"wrong number of arguments for 'auth' command\") !== -1) {\n console.warn(`[ERROR] The server returned \"wrong number of arguments for 'auth' command\". You are probably passing both username and password to Redis version 5 or below. You should only pass the 'password' option for Redis version 5 and under.`);\n }\n else {\n flushed = true;\n self.recoverFromFatalError(err, err);\n }\n }\n });\n }\n if (self.condition.select) {\n self.select(self.condition.select).catch((err) => {\n // If the node is in cluster mode, select is disallowed.\n // In this case, reconnect won't help.\n self.silentEmit(\"error\", err);\n });\n }\n if (!self.options.enableReadyCheck) {\n exports.readyHandler(self)();\n }\n /*\n No need to keep the reference of DataHandler here\n because we don't need to do the cleanup.\n `Stream#end()` will remove all listeners for us.\n */\n new DataHandler_1.default(self, {\n stringNumbers: self.options.stringNumbers,\n });\n if (self.options.enableReadyCheck) {\n self._readyCheck(function (err, info) {\n if (connectionEpoch !== self.connectionEpoch) {\n return;\n }\n if (err) {\n if (!flushed) {\n self.recoverFromFatalError(new Error(\"Ready check failed: \" + err.message), err);\n }\n }\n else {\n if (self.connector.check(info)) {\n exports.readyHandler(self)();\n }\n else {\n self.disconnect(true);\n }\n }\n });\n }\n };\n}\nexports.connectHandler = connectHandler;\nfunction abortError(command) {\n const err = new redis_errors_1.AbortError(\"Command aborted due to connection close\");\n err.command = {\n name: command.name,\n args: command.args,\n };\n return err;\n}\n// If a contiguous set of pipeline commands starts from index zero then they\n// can be safely reattempted. If however we have a chain of pipelined commands\n// starting at index 1 or more it means we received a partial response before\n// the connection close and those pipelined commands must be aborted. For\n// example, if the queue looks like this: [2, 3, 4, 0, 1, 2] then after\n// aborting and purging we'll have a queue that looks like this: [0, 1, 2]\nfunction abortIncompletePipelines(commandQueue) {\n var _a;\n let expectedIndex = 0;\n for (let i = 0; i < commandQueue.length;) {\n const command = (_a = commandQueue.peekAt(i)) === null || _a === void 0 ? void 0 : _a.command;\n const pipelineIndex = command.pipelineIndex;\n if (pipelineIndex === undefined || pipelineIndex === 0) {\n expectedIndex = 0;\n }\n if (pipelineIndex !== undefined && pipelineIndex !== expectedIndex++) {\n commandQueue.remove(i, 1);\n command.reject(abortError(command));\n continue;\n }\n i++;\n }\n}\n// If only a partial transaction result was received before connection close,\n// we have to abort any transaction fragments that may have ended up in the\n// offline queue\nfunction abortTransactionFragments(commandQueue) {\n var _a;\n for (let i = 0; i < commandQueue.length;) {\n const command = (_a = commandQueue.peekAt(i)) === null || _a === void 0 ? void 0 : _a.command;\n if (command.name === \"multi\") {\n break;\n }\n if (command.name === \"exec\") {\n commandQueue.remove(i, 1);\n command.reject(abortError(command));\n break;\n }\n if (command.inTransaction) {\n commandQueue.remove(i, 1);\n command.reject(abortError(command));\n }\n else {\n i++;\n }\n }\n}\nfunction closeHandler(self) {\n return function () {\n const prevStatus = self.status;\n self.setStatus(\"close\");\n if (self.commandQueue.length) {\n abortIncompletePipelines(self.commandQueue);\n }\n if (self.offlineQueue.length) {\n abortTransactionFragments(self.offlineQueue);\n }\n if (prevStatus === \"ready\") {\n if (!self.prevCondition) {\n self.prevCondition = self.condition;\n }\n if (self.commandQueue.length) {\n self.prevCommandQueue = self.commandQueue;\n }\n }\n if (self.manuallyClosing) {\n self.manuallyClosing = false;\n debug(\"skip reconnecting since the connection is manually closed.\");\n return close();\n }\n if (typeof self.options.retryStrategy !== \"function\") {\n debug(\"skip reconnecting because `retryStrategy` is not a function\");\n return close();\n }\n const retryDelay = self.options.retryStrategy(++self.retryAttempts);\n if (typeof retryDelay !== \"number\") {\n debug(\"skip reconnecting because `retryStrategy` doesn't return a number\");\n return close();\n }\n debug(\"reconnect in %sms\", retryDelay);\n self.setStatus(\"reconnecting\", retryDelay);\n self.reconnectTimeout = setTimeout(function () {\n self.reconnectTimeout = null;\n self.connect().catch(utils_1.noop);\n }, retryDelay);\n const { maxRetriesPerRequest } = self.options;\n if (typeof maxRetriesPerRequest === \"number\") {\n if (maxRetriesPerRequest < 0) {\n debug(\"maxRetriesPerRequest is negative, ignoring...\");\n }\n else {\n const remainder = self.retryAttempts % (maxRetriesPerRequest + 1);\n if (remainder === 0) {\n debug(\"reach maxRetriesPerRequest limitation, flushing command queue...\");\n self.flushQueue(new errors_1.MaxRetriesPerRequestError(maxRetriesPerRequest));\n }\n }\n }\n };\n function close() {\n self.setStatus(\"end\");\n self.flushQueue(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n }\n}\nexports.closeHandler = closeHandler;\nfunction errorHandler(self) {\n return function (error) {\n debug(\"error: %s\", error);\n self.silentEmit(\"error\", error);\n };\n}\nexports.errorHandler = errorHandler;\nfunction readyHandler(self) {\n return function () {\n self.setStatus(\"ready\");\n self.retryAttempts = 0;\n if (self.options.monitor) {\n self.call(\"monitor\").then(() => self.setStatus(\"monitoring\"), (error) => self.emit(\"error\", error));\n const { sendCommand } = self;\n self.sendCommand = function (command) {\n if (Command_1.default.checkFlag(\"VALID_IN_MONITOR_MODE\", command.name)) {\n return sendCommand.call(self, command);\n }\n command.reject(new Error(\"Connection is in monitoring mode, can't process commands.\"));\n return command.promise;\n };\n self.once(\"close\", function () {\n delete self.sendCommand;\n });\n return;\n }\n const finalSelect = self.prevCondition\n ? self.prevCondition.select\n : self.condition.select;\n if (self.options.connectionName) {\n debug(\"set the connection name [%s]\", self.options.connectionName);\n self.client(\"setname\", self.options.connectionName).catch(utils_1.noop);\n }\n if (self.options.readOnly) {\n debug(\"set the connection to readonly mode\");\n self.readonly().catch(utils_1.noop);\n }\n if (self.prevCondition) {\n const condition = self.prevCondition;\n self.prevCondition = null;\n if (condition.subscriber && self.options.autoResubscribe) {\n // We re-select the previous db first since\n // `SELECT` command is not valid in sub mode.\n if (self.condition.select !== finalSelect) {\n debug(\"connect to db [%d]\", finalSelect);\n self.select(finalSelect);\n }\n const subscribeChannels = condition.subscriber.channels(\"subscribe\");\n if (subscribeChannels.length) {\n debug(\"subscribe %d channels\", subscribeChannels.length);\n self.subscribe(subscribeChannels);\n }\n const psubscribeChannels = condition.subscriber.channels(\"psubscribe\");\n if (psubscribeChannels.length) {\n debug(\"psubscribe %d channels\", psubscribeChannels.length);\n self.psubscribe(psubscribeChannels);\n }\n const ssubscribeChannels = condition.subscriber.channels(\"ssubscribe\");\n if (ssubscribeChannels.length) {\n debug(\"ssubscribe %d channels\", ssubscribeChannels.length);\n self.ssubscribe(ssubscribeChannels);\n }\n }\n }\n if (self.prevCommandQueue) {\n if (self.options.autoResendUnfulfilledCommands) {\n debug(\"resend %d unfulfilled commands\", self.prevCommandQueue.length);\n while (self.prevCommandQueue.length > 0) {\n const item = self.prevCommandQueue.shift();\n if (item.select !== self.condition.select &&\n item.command.name !== \"select\") {\n self.select(item.select);\n }\n self.sendCommand(item.command, item.stream);\n }\n }\n else {\n self.prevCommandQueue = null;\n }\n }\n if (self.offlineQueue.length) {\n debug(\"send %d commands in offline queue\", self.offlineQueue.length);\n const offlineQueue = self.offlineQueue;\n self.resetOfflineQueue();\n while (offlineQueue.length > 0) {\n const item = offlineQueue.shift();\n if (item.select !== self.condition.select &&\n item.command.name !== \"select\") {\n self.select(item.select);\n }\n self.sendCommand(item.command, item.stream);\n }\n }\n if (self.condition.select !== finalSelect) {\n debug(\"connect to db [%d]\", finalSelect);\n self.select(finalSelect);\n }\n };\n}\nexports.readyHandler = readyHandler;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_REDIS_OPTIONS = void 0;\nexports.DEFAULT_REDIS_OPTIONS = {\n // Connection\n port: 6379,\n host: \"localhost\",\n family: 4,\n connectTimeout: 10000,\n disconnectTimeout: 2000,\n retryStrategy: function (times) {\n return Math.min(times * 50, 2000);\n },\n keepAlive: 0,\n noDelay: true,\n connectionName: null,\n // Sentinel\n sentinels: null,\n name: null,\n role: \"master\",\n sentinelRetryStrategy: function (times) {\n return Math.min(times * 10, 1000);\n },\n sentinelReconnectStrategy: function () {\n // This strategy only applies when sentinels are used for detecting\n // a failover, not during initial master resolution.\n // The deployment can still function when some of the sentinels are down\n // for a long period of time, so we may not want to attempt reconnection\n // very often. Therefore the default interval is fairly long (1 minute).\n return 60000;\n },\n natMap: null,\n enableTLSForSentinelMode: false,\n updateSentinels: true,\n failoverDetector: false,\n // Status\n username: null,\n password: null,\n db: 0,\n // Others\n enableOfflineQueue: true,\n enableReadyCheck: true,\n autoResubscribe: true,\n autoResendUnfulfilledCommands: true,\n lazyConnect: false,\n keyPrefix: \"\",\n reconnectOnError: null,\n readOnly: false,\n stringNumbers: false,\n maxRetriesPerRequest: 20,\n maxLoadingRetryTime: 10000,\n enableAutoPipelining: false,\n autoPipeliningIgnoredCommands: [],\n sentinelMaxConnections: 10,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst commands_1 = require(\"@ioredis/commands\");\nconst events_1 = require(\"events\");\nconst standard_as_callback_1 = require(\"standard-as-callback\");\nconst cluster_1 = require(\"./cluster\");\nconst Command_1 = require(\"./Command\");\nconst connectors_1 = require(\"./connectors\");\nconst SentinelConnector_1 = require(\"./connectors/SentinelConnector\");\nconst eventHandler = require(\"./redis/event_handler\");\nconst RedisOptions_1 = require(\"./redis/RedisOptions\");\nconst ScanStream_1 = require(\"./ScanStream\");\nconst transaction_1 = require(\"./transaction\");\nconst utils_1 = require(\"./utils\");\nconst applyMixin_1 = require(\"./utils/applyMixin\");\nconst Commander_1 = require(\"./utils/Commander\");\nconst lodash_1 = require(\"./utils/lodash\");\nconst Deque = require(\"denque\");\nconst debug = (0, utils_1.Debug)(\"redis\");\n/**\n * This is the major component of ioredis.\n * Use it to connect to a standalone Redis server or Sentinels.\n *\n * ```typescript\n * const redis = new Redis(); // Default port is 6379\n * async function main() {\n * redis.set(\"foo\", \"bar\");\n * redis.get(\"foo\", (err, result) => {\n * // `result` should be \"bar\"\n * console.log(err, result);\n * });\n * // Or use Promise\n * const result = await redis.get(\"foo\");\n * }\n * ```\n */\nclass Redis extends Commander_1.default {\n constructor(arg1, arg2, arg3) {\n super();\n this.status = \"wait\";\n /**\n * @ignore\n */\n this.isCluster = false;\n this.reconnectTimeout = null;\n this.connectionEpoch = 0;\n this.retryAttempts = 0;\n this.manuallyClosing = false;\n // Prepare autopipelines structures\n this._autoPipelines = new Map();\n this._runningAutoPipelines = new Set();\n this.parseOptions(arg1, arg2, arg3);\n events_1.EventEmitter.call(this);\n this.resetCommandQueue();\n this.resetOfflineQueue();\n if (this.options.Connector) {\n this.connector = new this.options.Connector(this.options);\n }\n else if (this.options.sentinels) {\n const sentinelConnector = new SentinelConnector_1.default(this.options);\n sentinelConnector.emitter = this;\n this.connector = sentinelConnector;\n }\n else {\n this.connector = new connectors_1.StandaloneConnector(this.options);\n }\n if (this.options.scripts) {\n Object.entries(this.options.scripts).forEach(([name, definition]) => {\n this.defineCommand(name, definition);\n });\n }\n // end(or wait) -> connecting -> connect -> ready -> end\n if (this.options.lazyConnect) {\n this.setStatus(\"wait\");\n }\n else {\n this.connect().catch(lodash_1.noop);\n }\n }\n /**\n * Create a Redis instance.\n * This is the same as `new Redis()` but is included for compatibility with node-redis.\n */\n static createClient(...args) {\n return new Redis(...args);\n }\n get autoPipelineQueueSize() {\n let queued = 0;\n for (const pipeline of this._autoPipelines.values()) {\n queued += pipeline.length;\n }\n return queued;\n }\n /**\n * Create a connection to Redis.\n * This method will be invoked automatically when creating a new Redis instance\n * unless `lazyConnect: true` is passed.\n *\n * When calling this method manually, a Promise is returned, which will\n * be resolved when the connection status is ready.\n */\n connect(callback) {\n const promise = new Promise((resolve, reject) => {\n if (this.status === \"connecting\" ||\n this.status === \"connect\" ||\n this.status === \"ready\") {\n reject(new Error(\"Redis is already connecting/connected\"));\n return;\n }\n this.connectionEpoch += 1;\n this.setStatus(\"connecting\");\n const { options } = this;\n this.condition = {\n select: options.db,\n auth: options.username\n ? [options.username, options.password]\n : options.password,\n subscriber: false,\n };\n const _this = this;\n (0, standard_as_callback_1.default)(this.connector.connect(function (type, err) {\n _this.silentEmit(type, err);\n }), function (err, stream) {\n if (err) {\n _this.flushQueue(err);\n _this.silentEmit(\"error\", err);\n reject(err);\n _this.setStatus(\"end\");\n return;\n }\n let CONNECT_EVENT = options.tls ? \"secureConnect\" : \"connect\";\n if (\"sentinels\" in options &&\n options.sentinels &&\n !options.enableTLSForSentinelMode) {\n CONNECT_EVENT = \"connect\";\n }\n _this.stream = stream;\n if (options.noDelay) {\n stream.setNoDelay(true);\n }\n // Node ignores setKeepAlive before connect, therefore we wait for the event:\n // https://github.com/nodejs/node/issues/31663\n if (typeof options.keepAlive === \"number\") {\n if (stream.connecting) {\n stream.once(CONNECT_EVENT, () => {\n stream.setKeepAlive(true, options.keepAlive);\n });\n }\n else {\n stream.setKeepAlive(true, options.keepAlive);\n }\n }\n if (stream.connecting) {\n stream.once(CONNECT_EVENT, eventHandler.connectHandler(_this));\n if (options.connectTimeout) {\n /*\n * Typically, Socket#setTimeout(0) will clear the timer\n * set before. However, in some platforms (Electron 3.x~4.x),\n * the timer will not be cleared. So we introduce a variable here.\n *\n * See https://github.com/electron/electron/issues/14915\n */\n let connectTimeoutCleared = false;\n stream.setTimeout(options.connectTimeout, function () {\n if (connectTimeoutCleared) {\n return;\n }\n stream.setTimeout(0);\n stream.destroy();\n const err = new Error(\"connect ETIMEDOUT\");\n // @ts-expect-error\n err.errorno = \"ETIMEDOUT\";\n // @ts-expect-error\n err.code = \"ETIMEDOUT\";\n // @ts-expect-error\n err.syscall = \"connect\";\n eventHandler.errorHandler(_this)(err);\n });\n stream.once(CONNECT_EVENT, function () {\n connectTimeoutCleared = true;\n stream.setTimeout(0);\n });\n }\n }\n else if (stream.destroyed) {\n const firstError = _this.connector.firstError;\n if (firstError) {\n process.nextTick(() => {\n eventHandler.errorHandler(_this)(firstError);\n });\n }\n process.nextTick(eventHandler.closeHandler(_this));\n }\n else {\n process.nextTick(eventHandler.connectHandler(_this));\n }\n if (!stream.destroyed) {\n stream.once(\"error\", eventHandler.errorHandler(_this));\n stream.once(\"close\", eventHandler.closeHandler(_this));\n }\n const connectionReadyHandler = function () {\n _this.removeListener(\"close\", connectionCloseHandler);\n resolve();\n };\n var connectionCloseHandler = function () {\n _this.removeListener(\"ready\", connectionReadyHandler);\n reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n };\n _this.once(\"ready\", connectionReadyHandler);\n _this.once(\"close\", connectionCloseHandler);\n });\n });\n return (0, standard_as_callback_1.default)(promise, callback);\n }\n /**\n * Disconnect from Redis.\n *\n * This method closes the connection immediately,\n * and may lose some pending replies that haven't written to client.\n * If you want to wait for the pending replies, use Redis#quit instead.\n */\n disconnect(reconnect = false) {\n if (!reconnect) {\n this.manuallyClosing = true;\n }\n if (this.reconnectTimeout && !reconnect) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n if (this.status === \"wait\") {\n eventHandler.closeHandler(this)();\n }\n else {\n this.connector.disconnect();\n }\n }\n /**\n * Disconnect from Redis.\n *\n * @deprecated\n */\n end() {\n this.disconnect();\n }\n /**\n * Create a new instance with the same options as the current one.\n *\n * @example\n * ```js\n * var redis = new Redis(6380);\n * var anotherRedis = redis.duplicate();\n * ```\n */\n duplicate(override) {\n return new Redis({ ...this.options, ...override });\n }\n /**\n * Mode of the connection.\n *\n * One of `\"normal\"`, `\"subscriber\"`, or `\"monitor\"`. When the connection is\n * not in `\"normal\"` mode, certain commands are not allowed.\n */\n get mode() {\n var _a;\n return this.options.monitor\n ? \"monitor\"\n : ((_a = this.condition) === null || _a === void 0 ? void 0 : _a.subscriber)\n ? \"subscriber\"\n : \"normal\";\n }\n /**\n * Listen for all requests received by the server in real time.\n *\n * This command will create a new connection to Redis and send a\n * MONITOR command via the new connection in order to avoid disturbing\n * the current connection.\n *\n * @param callback The callback function. If omit, a promise will be returned.\n * @example\n * ```js\n * var redis = new Redis();\n * redis.monitor(function (err, monitor) {\n * // Entering monitoring mode.\n * monitor.on('monitor', function (time, args, source, database) {\n * console.log(time + \": \" + util.inspect(args));\n * });\n * });\n *\n * // supports promise as well as other commands\n * redis.monitor().then(function (monitor) {\n * monitor.on('monitor', function (time, args, source, database) {\n * console.log(time + \": \" + util.inspect(args));\n * });\n * });\n * ```\n */\n monitor(callback) {\n const monitorInstance = this.duplicate({\n monitor: true,\n lazyConnect: false,\n });\n return (0, standard_as_callback_1.default)(new Promise(function (resolve, reject) {\n monitorInstance.once(\"error\", reject);\n monitorInstance.once(\"monitoring\", function () {\n resolve(monitorInstance);\n });\n }), callback);\n }\n /**\n * Send a command to Redis\n *\n * This method is used internally and in most cases you should not\n * use it directly. If you need to send a command that is not supported\n * by the library, you can use the `call` method:\n *\n * ```js\n * const redis = new Redis();\n *\n * redis.call('set', 'foo', 'bar');\n * // or\n * redis.call(['set', 'foo', 'bar']);\n * ```\n *\n * @ignore\n */\n sendCommand(command, stream) {\n var _a, _b;\n if (this.status === \"wait\") {\n this.connect().catch(lodash_1.noop);\n }\n if (this.status === \"end\") {\n command.reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n return command.promise;\n }\n if (((_a = this.condition) === null || _a === void 0 ? void 0 : _a.subscriber) &&\n !Command_1.default.checkFlag(\"VALID_IN_SUBSCRIBER_MODE\", command.name)) {\n command.reject(new Error(\"Connection in subscriber mode, only subscriber commands may be used\"));\n return command.promise;\n }\n if (typeof this.options.commandTimeout === \"number\") {\n command.setTimeout(this.options.commandTimeout);\n }\n let writable = this.status === \"ready\" ||\n (!stream &&\n this.status === \"connect\" &&\n (0, commands_1.exists)(command.name) &&\n (0, commands_1.hasFlag)(command.name, \"loading\"));\n if (!this.stream) {\n writable = false;\n }\n else if (!this.stream.writable) {\n writable = false;\n // @ts-expect-error\n }\n else if (this.stream._writableState && this.stream._writableState.ended) {\n // TODO: We should be able to remove this as the PR has already been merged.\n // https://github.com/iojs/io.js/pull/1217\n writable = false;\n }\n if (!writable) {\n if (!this.options.enableOfflineQueue) {\n command.reject(new Error(\"Stream isn't writeable and enableOfflineQueue options is false\"));\n return command.promise;\n }\n if (command.name === \"quit\" && this.offlineQueue.length === 0) {\n this.disconnect();\n command.resolve(Buffer.from(\"OK\"));\n return command.promise;\n }\n // @ts-expect-error\n if (debug.enabled) {\n debug(\"queue command[%s]: %d -> %s(%o)\", this._getDescription(), this.condition.select, command.name, command.args);\n }\n this.offlineQueue.push({\n command: command,\n stream: stream,\n select: this.condition.select,\n });\n }\n else {\n // @ts-expect-error\n if (debug.enabled) {\n debug(\"write command[%s]: %d -> %s(%o)\", this._getDescription(), (_b = this.condition) === null || _b === void 0 ? void 0 : _b.select, command.name, command.args);\n }\n if (stream) {\n if (\"isPipeline\" in stream && stream.isPipeline) {\n stream.write(command.toWritable(stream.destination.redis.stream));\n }\n else {\n stream.write(command.toWritable(stream));\n }\n }\n else {\n this.stream.write(command.toWritable(this.stream));\n }\n this.commandQueue.push({\n command: command,\n stream: stream,\n select: this.condition.select,\n });\n if (Command_1.default.checkFlag(\"WILL_DISCONNECT\", command.name)) {\n this.manuallyClosing = true;\n }\n }\n if (command.name === \"select\" && (0, utils_1.isInt)(command.args[0])) {\n const db = parseInt(command.args[0], 10);\n if (this.condition.select !== db) {\n this.condition.select = db;\n this.emit(\"select\", db);\n debug(\"switch to db [%d]\", this.condition.select);\n }\n }\n return command.promise;\n }\n scanStream(options) {\n return this.createScanStream(\"scan\", { options });\n }\n scanBufferStream(options) {\n return this.createScanStream(\"scanBuffer\", { options });\n }\n sscanStream(key, options) {\n return this.createScanStream(\"sscan\", { key, options });\n }\n sscanBufferStream(key, options) {\n return this.createScanStream(\"sscanBuffer\", { key, options });\n }\n hscanStream(key, options) {\n return this.createScanStream(\"hscan\", { key, options });\n }\n hscanBufferStream(key, options) {\n return this.createScanStream(\"hscanBuffer\", { key, options });\n }\n zscanStream(key, options) {\n return this.createScanStream(\"zscan\", { key, options });\n }\n zscanBufferStream(key, options) {\n return this.createScanStream(\"zscanBuffer\", { key, options });\n }\n /**\n * Emit only when there's at least one listener.\n *\n * @ignore\n */\n silentEmit(eventName, arg) {\n let error;\n if (eventName === \"error\") {\n error = arg;\n if (this.status === \"end\") {\n return;\n }\n if (this.manuallyClosing) {\n // ignore connection related errors when manually disconnecting\n if (error instanceof Error &&\n (error.message === utils_1.CONNECTION_CLOSED_ERROR_MSG ||\n // @ts-expect-error\n error.syscall === \"connect\" ||\n // @ts-expect-error\n error.syscall === \"read\")) {\n return;\n }\n }\n }\n if (this.listeners(eventName).length > 0) {\n return this.emit.apply(this, arguments);\n }\n if (error && error instanceof Error) {\n console.error(\"[ioredis] Unhandled error event:\", error.stack);\n }\n return false;\n }\n /**\n * @ignore\n */\n recoverFromFatalError(_commandError, err, options) {\n this.flushQueue(err, options);\n this.silentEmit(\"error\", err);\n this.disconnect(true);\n }\n /**\n * @ignore\n */\n handleReconnection(err, item) {\n var _a;\n let needReconnect = false;\n if (this.options.reconnectOnError) {\n needReconnect = this.options.reconnectOnError(err);\n }\n switch (needReconnect) {\n case 1:\n case true:\n if (this.status !== \"reconnecting\") {\n this.disconnect(true);\n }\n item.command.reject(err);\n break;\n case 2:\n if (this.status !== \"reconnecting\") {\n this.disconnect(true);\n }\n if (((_a = this.condition) === null || _a === void 0 ? void 0 : _a.select) !== item.select &&\n item.command.name !== \"select\") {\n this.select(item.select);\n }\n // TODO\n // @ts-expect-error\n this.sendCommand(item.command);\n break;\n default:\n item.command.reject(err);\n }\n }\n /**\n * Get description of the connection. Used for debugging.\n */\n _getDescription() {\n let description;\n if (\"path\" in this.options && this.options.path) {\n description = this.options.path;\n }\n else if (this.stream &&\n this.stream.remoteAddress &&\n this.stream.remotePort) {\n description = this.stream.remoteAddress + \":\" + this.stream.remotePort;\n }\n else if (\"host\" in this.options && this.options.host) {\n description = this.options.host + \":\" + this.options.port;\n }\n else {\n // Unexpected\n description = \"\";\n }\n if (this.options.connectionName) {\n description += ` (${this.options.connectionName})`;\n }\n return description;\n }\n resetCommandQueue() {\n this.commandQueue = new Deque();\n }\n resetOfflineQueue() {\n this.offlineQueue = new Deque();\n }\n parseOptions(...args) {\n const options = {};\n let isTls = false;\n for (let i = 0; i < args.length; ++i) {\n const arg = args[i];\n if (arg === null || typeof arg === \"undefined\") {\n continue;\n }\n if (typeof arg === \"object\") {\n (0, lodash_1.defaults)(options, arg);\n }\n else if (typeof arg === \"string\") {\n (0, lodash_1.defaults)(options, (0, utils_1.parseURL)(arg));\n if (arg.startsWith(\"rediss://\")) {\n isTls = true;\n }\n }\n else if (typeof arg === \"number\") {\n options.port = arg;\n }\n else {\n throw new Error(\"Invalid argument \" + arg);\n }\n }\n if (isTls) {\n (0, lodash_1.defaults)(options, { tls: true });\n }\n (0, lodash_1.defaults)(options, Redis.defaultOptions);\n if (typeof options.port === \"string\") {\n options.port = parseInt(options.port, 10);\n }\n if (typeof options.db === \"string\") {\n options.db = parseInt(options.db, 10);\n }\n // @ts-expect-error\n this.options = (0, utils_1.resolveTLSProfile)(options);\n }\n /**\n * Change instance's status\n */\n setStatus(status, arg) {\n // @ts-expect-error\n if (debug.enabled) {\n debug(\"status[%s]: %s -> %s\", this._getDescription(), this.status || \"[empty]\", status);\n }\n this.status = status;\n process.nextTick(this.emit.bind(this, status, arg));\n }\n createScanStream(command, { key, options = {} }) {\n return new ScanStream_1.default({\n objectMode: true,\n key: key,\n redis: this,\n command: command,\n ...options,\n });\n }\n /**\n * Flush offline queue and command queue with error.\n *\n * @param error The error object to send to the commands\n * @param options options\n */\n flushQueue(error, options) {\n options = (0, lodash_1.defaults)({}, options, {\n offlineQueue: true,\n commandQueue: true,\n });\n let item;\n if (options.offlineQueue) {\n while ((item = this.offlineQueue.shift())) {\n item.command.reject(error);\n }\n }\n if (options.commandQueue) {\n if (this.commandQueue.length > 0) {\n if (this.stream) {\n this.stream.removeAllListeners(\"data\");\n }\n while ((item = this.commandQueue.shift())) {\n item.command.reject(error);\n }\n }\n }\n }\n /**\n * Check whether Redis has finished loading the persistent data and is able to\n * process commands.\n */\n _readyCheck(callback) {\n const _this = this;\n this.info(function (err, res) {\n if (err) {\n if (err.message && err.message.includes(\"NOPERM\")) {\n console.warn(`Skipping the ready check because INFO command fails: \"${err.message}\". You can disable ready check with \"enableReadyCheck\". More: https://github.com/luin/ioredis/wiki/Disable-ready-check.`);\n return callback(null, {});\n }\n return callback(err);\n }\n if (typeof res !== \"string\") {\n return callback(null, res);\n }\n const info = {};\n const lines = res.split(\"\\r\\n\");\n for (let i = 0; i < lines.length; ++i) {\n const [fieldName, ...fieldValueParts] = lines[i].split(\":\");\n const fieldValue = fieldValueParts.join(\":\");\n if (fieldValue) {\n info[fieldName] = fieldValue;\n }\n }\n if (!info.loading || info.loading === \"0\") {\n callback(null, info);\n }\n else {\n const loadingEtaMs = (info.loading_eta_seconds || 1) * 1000;\n const retryTime = _this.options.maxLoadingRetryTime &&\n _this.options.maxLoadingRetryTime < loadingEtaMs\n ? _this.options.maxLoadingRetryTime\n : loadingEtaMs;\n debug(\"Redis server still loading, trying again in \" + retryTime + \"ms\");\n setTimeout(function () {\n _this._readyCheck(callback);\n }, retryTime);\n }\n }).catch(lodash_1.noop);\n }\n}\nRedis.Cluster = cluster_1.default;\nRedis.Command = Command_1.default;\n/**\n * Default options\n */\nRedis.defaultOptions = RedisOptions_1.DEFAULT_REDIS_OPTIONS;\n(0, applyMixin_1.default)(Redis, events_1.EventEmitter);\n(0, transaction_1.addTransactionSupport)(Redis.prototype);\nexports.default = Redis;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.print = exports.ReplyError = exports.SentinelIterator = exports.SentinelConnector = exports.AbstractConnector = exports.Pipeline = exports.ScanStream = exports.Command = exports.Cluster = exports.Redis = exports.default = void 0;\nexports = module.exports = require(\"./Redis\").default;\nvar Redis_1 = require(\"./Redis\");\nObject.defineProperty(exports, \"default\", { enumerable: true, get: function () { return Redis_1.default; } });\nvar Redis_2 = require(\"./Redis\");\nObject.defineProperty(exports, \"Redis\", { enumerable: true, get: function () { return Redis_2.default; } });\nvar cluster_1 = require(\"./cluster\");\nObject.defineProperty(exports, \"Cluster\", { enumerable: true, get: function () { return cluster_1.default; } });\n/**\n * @ignore\n */\nvar Command_1 = require(\"./Command\");\nObject.defineProperty(exports, \"Command\", { enumerable: true, get: function () { return Command_1.default; } });\n/**\n * @ignore\n */\nvar ScanStream_1 = require(\"./ScanStream\");\nObject.defineProperty(exports, \"ScanStream\", { enumerable: true, get: function () { return ScanStream_1.default; } });\n/**\n * @ignore\n */\nvar Pipeline_1 = require(\"./Pipeline\");\nObject.defineProperty(exports, \"Pipeline\", { enumerable: true, get: function () { return Pipeline_1.default; } });\n/**\n * @ignore\n */\nvar AbstractConnector_1 = require(\"./connectors/AbstractConnector\");\nObject.defineProperty(exports, \"AbstractConnector\", { enumerable: true, get: function () { return AbstractConnector_1.default; } });\n/**\n * @ignore\n */\nvar SentinelConnector_1 = require(\"./connectors/SentinelConnector\");\nObject.defineProperty(exports, \"SentinelConnector\", { enumerable: true, get: function () { return SentinelConnector_1.default; } });\nObject.defineProperty(exports, \"SentinelIterator\", { enumerable: true, get: function () { return SentinelConnector_1.SentinelIterator; } });\n// No TS typings\nexports.ReplyError = require(\"redis-errors\").ReplyError;\n/**\n * @ignore\n */\nObject.defineProperty(exports, \"Promise\", {\n get() {\n console.warn(\"ioredis v5 does not support plugging third-party Promise library anymore. Native Promise will be used.\");\n return Promise;\n },\n set(_lib) {\n console.warn(\"ioredis v5 does not support plugging third-party Promise library anymore. Native Promise will be used.\");\n },\n});\n/**\n * @ignore\n */\nfunction print(err, reply) {\n if (err) {\n console.log(\"Error: \" + err);\n }\n else {\n console.log(\"Reply: \" + reply);\n }\n}\nexports.print = print;\n","import { Redis, type RedisOptions } from \"ioredis\";\nimport { Logger } from \"@trigger.dev/core/logger\";\n\nexport { Redis, type Callback, type RedisOptions, type Result, type RedisCommander } from \"ioredis\";\n\nconst defaultOptions: Partial<RedisOptions> = {\n retryStrategy: (times: number) => {\n const delay = Math.min(times * 50, 1000);\n return delay;\n },\n maxRetriesPerRequest: process.env.GITHUB_ACTIONS ? 50 : process.env.VITEST ? 5 : 20,\n};\n\nconst logger = new Logger(\"Redis\", \"debug\");\n\nexport function createRedisClient(\n options: RedisOptions,\n handlers?: { onError?: (err: Error) => void }\n): Redis {\n const client = new Redis({\n ...defaultOptions,\n ...options,\n });\n\n // Skip error handling setup if running in Vitest\n if (process.env.VITEST) {\n client.on(\"error\", (error) => {\n // swallow errors\n });\n return client;\n }\n\n client.on(\"error\", (error) => {\n if (handlers?.onError) {\n handlers.onError(error);\n } else {\n logger.error(`Redis client error:`, { error, keyPrefix: options.keyPrefix });\n }\n });\n\n return client;\n}\n","export const urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n","import { webcrypto as crypto } from 'node:crypto'\nimport { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nconst POOL_SIZE_MULTIPLIER = 128\nlet pool, poolOffset\nfunction fillPool(bytes) {\n if (!pool || pool.length < bytes) {\n pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)\n crypto.getRandomValues(pool)\n poolOffset = 0\n } else if (poolOffset + bytes > pool.length) {\n crypto.getRandomValues(pool)\n poolOffset = 0\n }\n poolOffset += bytes\n}\nexport function random(bytes) {\n fillPool((bytes |= 0))\n return pool.subarray(poolOffset - bytes, poolOffset)\n}\nexport function customRandom(alphabet, defaultSize, getRandom) {\n let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1\n let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let i = step\n while (i--) {\n id += alphabet[bytes[i] & mask] || ''\n if (id.length >= size) return id\n }\n }\n }\n}\nexport function customAlphabet(alphabet, size = 21) {\n return customRandom(alphabet, size, random)\n}\nexport function nanoid(size = 21) {\n fillPool((size |= 0))\n let id = ''\n for (let i = poolOffset - size; i < poolOffset; i++) {\n id += scopedUrlAlphabet[pool[i] & 63]\n }\n return id\n}\n","import {\n createRedisClient,\n type Redis,\n type Callback,\n type RedisOptions,\n type Result,\n} from \"@internal/redis\";\nimport { Logger } from \"@trigger.dev/core/logger\";\nimport { nanoid } from \"nanoid\";\nimport { z } from \"zod\";\n\nexport interface MessageCatalogSchema {\n [key: string]: z.ZodFirstPartySchemaTypes | z.ZodDiscriminatedUnion<any, any>;\n}\n\nexport type MessageCatalogKey<TMessageCatalog extends MessageCatalogSchema> = keyof TMessageCatalog;\nexport type MessageCatalogValue<\n TMessageCatalog extends MessageCatalogSchema,\n TKey extends MessageCatalogKey<TMessageCatalog>,\n> = z.infer<TMessageCatalog[TKey]>;\n\nexport type AnyMessageCatalog = MessageCatalogSchema;\nexport type QueueItem<TMessageCatalog extends MessageCatalogSchema> = {\n id: string;\n job: MessageCatalogKey<TMessageCatalog>;\n item: MessageCatalogValue<TMessageCatalog, MessageCatalogKey<TMessageCatalog>>;\n visibilityTimeoutMs: number;\n attempt: number;\n timestamp: Date;\n deduplicationKey?: string;\n};\n\nexport type AnyQueueItem = {\n id: string;\n job: string;\n item: any;\n visibilityTimeoutMs: number;\n attempt: number;\n timestamp: Date;\n deduplicationKey?: string;\n};\n\nexport class SimpleQueue<TMessageCatalog extends MessageCatalogSchema> {\n name: string;\n private redis: Redis;\n private schema: TMessageCatalog;\n private logger: Logger;\n\n constructor({\n name,\n schema,\n redisOptions,\n logger,\n }: {\n name: string;\n schema: TMessageCatalog;\n redisOptions: RedisOptions;\n logger?: Logger;\n }) {\n this.name = name;\n this.logger = logger ?? new Logger(\"SimpleQueue\", \"debug\");\n\n this.redis = createRedisClient(\n {\n ...redisOptions,\n keyPrefix: `${redisOptions.keyPrefix ?? \"\"}{queue:${name}:}`,\n retryStrategy(times) {\n const delay = Math.min(times * 50, 1000);\n return delay;\n },\n maxRetriesPerRequest: 20,\n },\n {\n onError: (error) => {\n this.logger.error(`RedisWorker queue redis client error:`, {\n error,\n keyPrefix: redisOptions.keyPrefix,\n });\n },\n }\n );\n this.#registerCommands();\n this.schema = schema;\n }\n\n async cancel(cancellationKey: string): Promise<void> {\n await this.redis.set(`cancellationKey:${cancellationKey}`, \"1\", \"EX\", 60 * 60 * 24); // 1 day\n }\n\n async enqueue({\n id,\n job,\n item,\n attempt,\n availableAt,\n visibilityTimeoutMs,\n cancellationKey,\n }: {\n id?: string;\n job: MessageCatalogKey<TMessageCatalog>;\n item: MessageCatalogValue<TMessageCatalog, MessageCatalogKey<TMessageCatalog>>;\n attempt?: number;\n availableAt?: Date;\n visibilityTimeoutMs: number;\n cancellationKey?: string;\n }): Promise<void> {\n try {\n const score = availableAt ? availableAt.getTime() : Date.now();\n const deduplicationKey = nanoid();\n const serializedItem = JSON.stringify({\n job,\n item,\n visibilityTimeoutMs,\n attempt,\n deduplicationKey,\n });\n\n const result = cancellationKey\n ? await this.redis.enqueueItemWithCancellationKey(\n `queue`,\n `items`,\n `cancellationKey:${cancellationKey}`,\n id ?? nanoid(),\n score,\n serializedItem\n )\n : await this.redis.enqueueItem(`queue`, `items`, id ?? nanoid(), score, serializedItem);\n\n if (result !== 1) {\n throw new Error(\"Enqueue operation failed\");\n }\n } catch (e) {\n this.logger.error(`SimpleQueue ${this.name}.enqueue(): error enqueuing`, {\n queue: this.name,\n error: e,\n id,\n item,\n });\n throw e;\n }\n }\n\n async enqueueOnce({\n id,\n job,\n item,\n attempt,\n availableAt,\n visibilityTimeoutMs,\n }: {\n id: string;\n job: MessageCatalogKey<TMessageCatalog>;\n item: MessageCatalogValue<TMessageCatalog, MessageCatalogKey<TMessageCatalog>>;\n attempt?: number;\n availableAt?: Date;\n visibilityTimeoutMs: number;\n }): Promise<boolean> {\n if (!id) {\n throw new Error(\"enqueueOnce requires an id\");\n }\n try {\n const score = availableAt ? availableAt.getTime() : Date.now();\n const deduplicationKey = nanoid();\n const serializedItem = JSON.stringify({\n job,\n item,\n visibilityTimeoutMs,\n attempt,\n deduplicationKey,\n });\n const result = await this.redis.enqueueItemOnce(`queue`, `items`, id, score, serializedItem);\n // 1 if inserted, 0 if already exists\n return result === 1;\n } catch (e) {\n this.logger.error(`SimpleQueue ${this.name}.enqueueOnce(): error enqueuing`, {\n queue: this.name,\n error: e,\n id,\n item,\n });\n throw e;\n }\n }\n\n async dequeue(count: number = 1): Promise<Array<QueueItem<TMessageCatalog>>> {\n const now = Date.now();\n\n try {\n const results = await this.redis.dequeueItems(`queue`, `items`, now, count);\n\n if (!results || results.length === 0) {\n return [];\n }\n\n const dequeuedItems: Array<QueueItem<TMessageCatalog>> = [];\n\n for (const [id, serializedItem, score] of results) {\n const parsedItem = JSON.parse(serializedItem) as any;\n if (typeof parsedItem.job !== \"string\") {\n this.logger.error(`Invalid item in queue`, { queue: this.name, id, item: parsedItem });\n continue;\n }\n\n const timestamp = new Date(Number(score));\n\n const schema = this.schema[parsedItem.job];\n\n if (!schema) {\n this.logger.error(`Invalid item in queue, schema not found`, {\n queue: this.name,\n id,\n item: parsedItem,\n job: parsedItem.job,\n timestamp,\n availableJobs: Object.keys(this.schema),\n });\n continue;\n }\n\n const validatedItem = schema.safeParse(parsedItem.item);\n\n if (!validatedItem.success) {\n this.logger.error(\"Invalid item in queue\", {\n queue: this.name,\n id,\n item: parsedItem,\n errors: validatedItem.error,\n attempt: parsedItem.attempt,\n timestamp,\n });\n continue;\n }\n\n const visibilityTimeoutMs = parsedItem.visibilityTimeoutMs as number;\n\n dequeuedItems.push({\n id,\n job: parsedItem.job,\n item: validatedItem.data,\n visibilityTimeoutMs,\n attempt: parsedItem.attempt ?? 0,\n timestamp,\n deduplicationKey: parsedItem.deduplicationKey,\n });\n }\n\n return dequeuedItems;\n } catch (e) {\n this.logger.error(`SimpleQueue ${this.name}.dequeue(): error dequeuing`, {\n queue: this.name,\n error: e,\n count,\n });\n throw e;\n }\n }\n\n async ack(id: string, deduplicationKey?: string): Promise<void> {\n try {\n const result = await this.redis.ackItem(`queue`, `items`, id, deduplicationKey ?? \"\");\n if (result !== 1) {\n this.logger.debug(\n `SimpleQueue ${this.name}.ack(): ack operation returned ${result}. This means it was not removed from the queue.`,\n {\n queue: this.name,\n id,\n deduplicationKey,\n result,\n }\n );\n }\n } catch (e) {\n this.logger.error(`SimpleQueue ${this.name}.ack(): error acknowledging item`, {\n queue: this.name,\n error: e,\n id,\n deduplicationKey,\n });\n throw e;\n }\n }\n\n async reschedule(id: string, availableAt: Date): Promise<void> {\n await this.redis.zadd(`queue`, \"XX\", availableAt.getTime(), id);\n }\n\n async size({ includeFuture = false }: { includeFuture?: boolean } = {}): Promise<number> {\n try {\n if (includeFuture) {\n // If includeFuture is true, return the total count of all items\n return await this.redis.zcard(`queue`);\n } else {\n // If includeFuture is false, return the count of items available now\n const now = Date.now();\n return await this.redis.zcount(`queue`, \"-inf\", now);\n }\n } catch (e) {\n this.logger.error(`SimpleQueue ${this.name}.size(): error getting queue size`, {\n queue: this.name,\n error: e,\n includeFuture,\n });\n throw e;\n }\n }\n\n async getJob(id: string): Promise<QueueItem<TMessageCatalog> | null> {\n const result = await this.redis.getJob(`queue`, `items`, id);\n\n if (!result) {\n return null;\n }\n\n const [_, score, serializedItem] = result;\n const item = JSON.parse(serializedItem) as QueueItem<TMessageCatalog>;\n\n return {\n id,\n job: item.job,\n item: item.item,\n visibilityTimeoutMs: item.visibilityTimeoutMs,\n attempt: item.attempt ?? 0,\n timestamp: new Date(Number(score)),\n deduplicationKey: item.deduplicationKey ?? undefined,\n };\n }\n\n async moveToDeadLetterQueue(id: string, errorMessage: string): Promise<void> {\n try {\n this.logger.debug(`SimpleQueue ${this.name}.moveToDeadLetterQueue(): moving item to DLQ`, {\n queue: this.name,\n id,\n errorMessage,\n });\n\n const result = await this.redis.moveToDeadLetterQueue(\n `queue`,\n `items`,\n `dlq`,\n `dlq:items`,\n id,\n errorMessage\n );\n\n if (result !== 1) {\n throw new Error(\"Move to Dead Letter Queue operation failed\");\n }\n } catch (e) {\n this.logger.error(\n `SimpleQueue ${this.name}.moveToDeadLetterQueue(): error moving item to DLQ`,\n {\n queue: this.name,\n error: e,\n id,\n errorMessage,\n }\n );\n throw e;\n }\n }\n\n async sizeOfDeadLetterQueue(): Promise<number> {\n try {\n return await this.redis.zcard(`dlq`);\n } catch (e) {\n this.logger.error(`SimpleQueue ${this.name}.dlqSize(): error getting DLQ size`, {\n queue: this.name,\n error: e,\n });\n throw e;\n }\n }\n\n async redriveFromDeadLetterQueue(id: string): Promise<void> {\n try {\n const result = await this.redis.redriveFromDeadLetterQueue(\n `queue`,\n `items`,\n `dlq`,\n `dlq:items`,\n id\n );\n\n if (result !== 1) {\n throw new Error(\"Redrive from Dead Letter Queue operation failed\");\n }\n } catch (e) {\n this.logger.error(\n `SimpleQueue ${this.name}.redriveFromDeadLetterQueue(): error redriving item from DLQ`,\n {\n queue: this.name,\n error: e,\n id,\n }\n );\n throw e;\n }\n }\n\n async close(): Promise<void> {\n await this.redis.quit();\n }\n\n #registerCommands() {\n this.redis.defineCommand(\"enqueueItem\", {\n numberOfKeys: 2,\n lua: `\n local queue = KEYS[1]\n local items = KEYS[2]\n local id = ARGV[1]\n local score = ARGV[2]\n local serializedItem = ARGV[3]\n\n redis.call('ZADD', queue, score, id)\n redis.call('HSET', items, id, serializedItem)\n\n return 1\n `,\n });\n\n this.redis.defineCommand(\"enqueueItemWithCancellationKey\", {\n numberOfKeys: 3,\n lua: `\n local queue = KEYS[1]\n local items = KEYS[2]\n local cancellationKey = KEYS[3]\n\n local id = ARGV[1]\n local score = ARGV[2]\n local serializedItem = ARGV[3]\n\n -- if the cancellation key exists, return 1\n if redis.call('EXISTS', cancellationKey) == 1 then\n return 1\n end\n\n redis.call('ZADD', queue, score, id)\n redis.call('HSET', items, id, serializedItem)\n\n return 1\n `,\n });\n\n this.redis.defineCommand(\"dequeueItems\", {\n numberOfKeys: 2,\n lua: `\n local queue = KEYS[1]\n local items = KEYS[2]\n local now = tonumber(ARGV[1])\n local count = tonumber(ARGV[2])\n\n local result = redis.call('ZRANGEBYSCORE', queue, '-inf', now, 'WITHSCORES', 'LIMIT', 0, count)\n\n if #result == 0 then\n return {}\n end\n\n local dequeued = {}\n\n for i = 1, #result, 2 do\n local id = result[i]\n local score = tonumber(result[i + 1])\n\n if score > now then\n break\n end\n\n local serializedItem = redis.call('HGET', items, id)\n\n if serializedItem then\n local item = cjson.decode(serializedItem)\n local visibilityTimeoutMs = tonumber(item.visibilityTimeoutMs)\n local invisibleUntil = now + visibilityTimeoutMs\n\n redis.call('ZADD', queue, invisibleUntil, id)\n table.insert(dequeued, {id, serializedItem, score})\n else\n -- Remove the orphaned queue entry if no corresponding item exists\n redis.call('ZREM', queue, id)\n end\n end\n\n return dequeued\n `,\n });\n\n this.redis.defineCommand(\"getJob\", {\n numberOfKeys: 2,\n lua: `\n local queue = KEYS[1]\n local items = KEYS[2]\n local jobId = ARGV[1]\n\n local serializedItem = redis.call('HGET', items, jobId)\n\n if serializedItem == false then\n return nil\n end\n\n -- get the score from the queue sorted set\n local score = redis.call('ZSCORE', queue, jobId)\n\n return { jobId, score, serializedItem }\n `,\n });\n\n this.redis.defineCommand(\"ackItem\", {\n numberOfKeys: 2,\n lua: `\n local queueKey = KEYS[1]\n local itemsKey = KEYS[2]\n local id = ARGV[1]\n local deduplicationKey = ARGV[2]\n\n -- Get the item from the hash\n local item = redis.call('HGET', itemsKey, id)\n if not item then\n return -1\n end\n\n -- Only check deduplicationKey if a non-empty one was passed in\n if deduplicationKey and deduplicationKey ~= \"\" then\n local success, parsed = pcall(cjson.decode, item)\n if success then\n if parsed.deduplicationKey and parsed.deduplicationKey ~= deduplicationKey then\n return 0\n end\n end\n end\n\n -- Remove from sorted set and hash\n redis.call('ZREM', queueKey, id)\n redis.call('HDEL', itemsKey, id)\n return 1\n `,\n });\n\n this.redis.defineCommand(\"moveToDeadLetterQueue\", {\n numberOfKeys: 4,\n lua: `\n local queue = KEYS[1]\n local items = KEYS[2]\n local dlq = KEYS[3]\n local dlqItems = KEYS[4]\n local id = ARGV[1]\n local errorMessage = ARGV[2]\n\n local item = redis.call('HGET', items, id)\n if not item then\n return 0\n end\n\n local parsedItem = cjson.decode(item)\n parsedItem.errorMessage = errorMessage\n\n local time = redis.call('TIME')\n local now = tonumber(time[1]) * 1000 + math.floor(tonumber(time[2]) / 1000)\n\n redis.call('ZREM', queue, id)\n redis.call('HDEL', items, id)\n\n redis.call('ZADD', dlq, now, id)\n redis.call('HSET', dlqItems, id, cjson.encode(parsedItem))\n\n return 1\n `,\n });\n\n this.redis.defineCommand(\"redriveFromDeadLetterQueue\", {\n numberOfKeys: 4,\n lua: `\n local queue = KEYS[1]\n local items = KEYS[2]\n local dlq = KEYS[3]\n local dlqItems = KEYS[4]\n local id = ARGV[1]\n\n local item = redis.call('HGET', dlqItems, id)\n if not item then\n return 0\n end\n\n local parsedItem = cjson.decode(item)\n parsedItem.errorMessage = nil\n\n local time = redis.call('TIME')\n local now = tonumber(time[1]) * 1000 + math.floor(tonumber(time[2]) / 1000)\n\n redis.call('ZREM', dlq, id)\n redis.call('HDEL', dlqItems, id)\n\n redis.call('ZADD', queue, now, id)\n redis.call('HSET', items, id, cjson.encode(parsedItem))\n\n return 1\n `,\n });\n\n this.redis.defineCommand(\"enqueueItemOnce\", {\n numberOfKeys: 2,\n lua: `\n local queue = KEYS[1]\n local items = KEYS[2]\n local id = ARGV[1]\n local score = ARGV[2]\n local serializedItem = ARGV[3]\n\n -- Only add if not exists\n local added = redis.call('HSETNX', items, id, serializedItem)\n if added == 1 then\n redis.call('ZADD', queue, 'NX', score, id)\n return 1\n else\n return 0\n end\n `,\n });\n }\n}\n\ndeclare module \"@internal/redis\" {\n interface RedisCommander<Context> {\n enqueueItem(\n //keys\n queue: string,\n items: string,\n //args\n id: string,\n score: number,\n serializedItem: string,\n callback?: Callback<number>\n ): Result<number, Context>;\n\n enqueueItemWithCancellationKey(\n //keys\n queue: string,\n items: string,\n cancellationKey: string,\n //args\n id: string,\n score: number,\n serializedItem: string,\n callback?: Callback<number>\n ): Result<number, Context>;\n\n dequeueItems(\n //keys\n queue: string,\n items: string,\n //args\n now: number,\n count: number,\n callback?: Callback<Array<[string, string, string]>>\n ): Result<Array<[string, string, string]>, Context>;\n\n ackItem(\n queue: string,\n items: string,\n id: string,\n deduplicationKey: string,\n callback?: Callback<number>\n ): Result<number, Context>;\n\n redriveFromDeadLetterQueue(\n queue: string,\n items: string,\n dlq: string,\n dlqItems: string,\n id: string,\n callback?: Callback<number>\n ): Result<number, Context>;\n\n moveToDeadLetterQueue(\n queue: string,\n items: string,\n dlq: string,\n dlqItems: string,\n id: string,\n errorMessage: string,\n callback?: Callback<number>\n ): Result<number, Context>;\n\n enqueueItemOnce(\n queue: string,\n items: string,\n id: string,\n score: number,\n serializedItem: string,\n callback?: Callback<number>\n ): Result<number, Context>;\n\n getJob(\n queue: string,\n items: string,\n id: string,\n callback?: Callback<[string, string, string] | null>\n ): Result<[string, string, string] | null, Context>;\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** only globals that common to node and browsers are allowed */\n// eslint-disable-next-line node/no-unsupported-features/es-builtins\nexport const _globalThis = typeof globalThis === 'object' ? globalThis : global;\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// this is autogenerated file, see scripts/version-update.js\nexport const VERSION = '1.9.0';\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { VERSION } from '../version';\n\nconst re = /^(\\d+)\\.(\\d+)\\.(\\d+)(-(.+))?$/;\n\n/**\n * Create a function to test an API version to see if it is compatible with the provided ownVersion.\n *\n * The returned function has the following semantics:\n * - Exact match is always compatible\n * - Major versions must match exactly\n * - 1.x package cannot use global 2.x package\n * - 2.x package cannot use global 1.x package\n * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API\n * - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects\n * - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3\n * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor\n * - Patch and build tag differences are not considered at this time\n *\n * @param ownVersion version which should be checked against\n */\nexport function _makeCompatibilityCheck(\n ownVersion: string\n): (globalVersion: string) => boolean {\n const acceptedVersions = new Set<string>([ownVersion]);\n const rejectedVersions = new Set<string>();\n\n const myVersionMatch = ownVersion.match(re);\n if (!myVersionMatch) {\n // we cannot guarantee compatibility so we always return noop\n return () => false;\n }\n\n const ownVersionParsed = {\n major: +myVersionMatch[1],\n minor: +myVersionMatch[2],\n patch: +myVersionMatch[3],\n prerelease: myVersionMatch[4],\n };\n\n // if ownVersion has a prerelease tag, versions must match exactly\n if (ownVersionParsed.prerelease != null) {\n return function isExactmatch(globalVersion: string): boolean {\n return globalVersion === ownVersion;\n };\n }\n\n function _reject(v: string) {\n rejectedVersions.add(v);\n return false;\n }\n\n function _accept(v: string) {\n acceptedVersions.add(v);\n return true;\n }\n\n return function isCompatible(globalVersion: string): boolean {\n if (acceptedVersions.has(globalVersion)) {\n return true;\n }\n\n if (rejectedVersions.has(globalVersion)) {\n return false;\n }\n\n const globalVersionMatch = globalVersion.match(re);\n if (!globalVersionMatch) {\n // cannot parse other version\n // we cannot guarantee compatibility so we always noop\n return _reject(globalVersion);\n }\n\n const globalVersionParsed = {\n major: +globalVersionMatch[1],\n minor: +globalVersionMatch[2],\n patch: +globalVersionMatch[3],\n prerelease: globalVersionMatch[4],\n };\n\n // if globalVersion has a prerelease tag, versions must match exactly\n if (globalVersionParsed.prerelease != null) {\n return _reject(globalVersion);\n }\n\n // major versions must match\n if (ownVersionParsed.major !== globalVersionParsed.major) {\n return _reject(globalVersion);\n }\n\n if (ownVersionParsed.major === 0) {\n if (\n ownVersionParsed.minor === globalVersionParsed.minor &&\n ownVersionParsed.patch <= globalVersionParsed.patch\n ) {\n return _accept(globalVersion);\n }\n\n return _reject(globalVersion);\n }\n\n if (ownVersionParsed.minor <= globalVersionParsed.minor) {\n return _accept(globalVersion);\n }\n\n return _reject(globalVersion);\n };\n}\n\n/**\n * Test an API version to see if it is compatible with this API.\n *\n * - Exact match is always compatible\n * - Major versions must match exactly\n * - 1.x package cannot use global 2.x package\n * - 2.x package cannot use global 1.x package\n * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API\n * - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects\n * - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3\n * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor\n * - Patch and build tag differences are not considered at this time\n *\n * @param version version of the API requesting an instance of the global API\n */\nexport const isCompatible = _makeCompatibilityCheck(VERSION);\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MeterProvider } from '../metrics/MeterProvider';\nimport { ContextManager } from '../context/types';\nimport { DiagLogger } from '../diag/types';\nimport { _globalThis } from '../platform';\nimport { TextMapPropagator } from '../propagation/TextMapPropagator';\nimport type { TracerProvider } from '../trace/tracer_provider';\nimport { VERSION } from '../version';\nimport { isCompatible } from './semver';\n\nconst major = VERSION.split('.')[0];\nconst GLOBAL_OPENTELEMETRY_API_KEY = Symbol.for(\n `opentelemetry.js.api.${major}`\n);\n\nconst _global = _globalThis as OTelGlobal;\n\nexport function registerGlobal<Type extends keyof OTelGlobalAPI>(\n type: Type,\n instance: OTelGlobalAPI[Type],\n diag: DiagLogger,\n allowOverride = false\n): boolean {\n const api = (_global[GLOBAL_OPENTELEMETRY_API_KEY] = _global[\n GLOBAL_OPENTELEMETRY_API_KEY\n ] ?? {\n version: VERSION,\n });\n\n if (!allowOverride && api[type]) {\n // already registered an API of this type\n const err = new Error(\n `@opentelemetry/api: Attempted duplicate registration of API: ${type}`\n );\n diag.error(err.stack || err.message);\n return false;\n }\n\n if (api.version !== VERSION) {\n // All registered APIs must be of the same version exactly\n const err = new Error(\n `@opentelemetry/api: Registration of version v${api.version} for ${type} does not match previously registered API v${VERSION}`\n );\n diag.error(err.stack || err.message);\n return false;\n }\n\n api[type] = instance;\n diag.debug(\n `@opentelemetry/api: Registered a global for ${type} v${VERSION}.`\n );\n\n return true;\n}\n\nexport function getGlobal<Type extends keyof OTelGlobalAPI>(\n type: Type\n): OTelGlobalAPI[Type] | undefined {\n const globalVersion = _global[GLOBAL_OPENTELEMETRY_API_KEY]?.version;\n if (!globalVersion || !isCompatible(globalVersion)) {\n return;\n }\n return _global[GLOBAL_OPENTELEMETRY_API_KEY]?.[type];\n}\n\nexport function unregisterGlobal(type: keyof OTelGlobalAPI, diag: DiagLogger) {\n diag.debug(\n `@opentelemetry/api: Unregistering a global for ${type} v${VERSION}.`\n );\n const api = _global[GLOBAL_OPENTELEMETRY_API_KEY];\n\n if (api) {\n delete api[type];\n }\n}\n\ntype OTelGlobal = {\n [GLOBAL_OPENTELEMETRY_API_KEY]?: OTelGlobalAPI;\n};\n\ntype OTelGlobalAPI = {\n version: string;\n\n diag?: DiagLogger;\n trace?: TracerProvider;\n context?: ContextManager;\n metrics?: MeterProvider;\n propagation?: TextMapPropagator;\n};\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getGlobal } from '../internal/global-utils';\nimport { ComponentLoggerOptions, DiagLogger, DiagLogFunction } from './types';\n\n/**\n * Component Logger which is meant to be used as part of any component which\n * will add automatically additional namespace in front of the log message.\n * It will then forward all message to global diag logger\n * @example\n * const cLogger = diag.createComponentLogger({ namespace: '@opentelemetry/instrumentation-http' });\n * cLogger.debug('test');\n * // @opentelemetry/instrumentation-http test\n */\nexport class DiagComponentLogger implements DiagLogger {\n private _namespace: string;\n\n constructor(props: ComponentLoggerOptions) {\n this._namespace = props.namespace || 'DiagComponentLogger';\n }\n\n public debug(...args: any[]): void {\n return logProxy('debug', this._namespace, args);\n }\n\n public error(...args: any[]): void {\n return logProxy('error', this._namespace, args);\n }\n\n public info(...args: any[]): void {\n return logProxy('info', this._namespace, args);\n }\n\n public warn(...args: any[]): void {\n return logProxy('warn', this._namespace, args);\n }\n\n public verbose(...args: any[]): void {\n return logProxy('verbose', this._namespace, args);\n }\n}\n\nfunction logProxy(\n funcName: keyof DiagLogger,\n namespace: string,\n args: any\n): void {\n const logger = getGlobal('diag');\n // shortcut if logger not set\n if (!logger) {\n return;\n }\n\n args.unshift(namespace);\n return logger[funcName](...(args as Parameters<DiagLogFunction>));\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport type DiagLogFunction = (message: string, ...args: unknown[]) => void;\n\n/**\n * Defines an internal diagnostic logger interface which is used to log internal diagnostic\n * messages, you can set the default diagnostic logger via the {@link DiagAPI} setLogger function.\n * API provided implementations include :-\n * - a No-Op {@link createNoopDiagLogger}\n * - a {@link DiagLogLevel} filtering wrapper {@link createLogLevelDiagLogger}\n * - a general Console {@link DiagConsoleLogger} version.\n */\nexport interface DiagLogger {\n /** Log an error scenario that was not expected and caused the requested operation to fail. */\n error: DiagLogFunction;\n\n /**\n * Log a warning scenario to inform the developer of an issues that should be investigated.\n * The requested operation may or may not have succeeded or completed.\n */\n warn: DiagLogFunction;\n\n /**\n * Log a general informational message, this should not affect functionality.\n * This is also the default logging level so this should NOT be used for logging\n * debugging level information.\n */\n info: DiagLogFunction;\n\n /**\n * Log a general debug message that can be useful for identifying a failure.\n * Information logged at this level may include diagnostic details that would\n * help identify a failure scenario.\n * For example: Logging the order of execution of async operations.\n */\n debug: DiagLogFunction;\n\n /**\n * Log a detailed (verbose) trace level logging that can be used to identify failures\n * where debug level logging would be insufficient, this level of tracing can include\n * input and output parameters and as such may include PII information passing through\n * the API. As such it is recommended that this level of tracing should not be enabled\n * in a production environment.\n */\n verbose: DiagLogFunction;\n}\n\n/**\n * Defines the available internal logging levels for the diagnostic logger, the numeric values\n * of the levels are defined to match the original values from the initial LogLevel to avoid\n * compatibility/migration issues for any implementation that assume the numeric ordering.\n */\nexport enum DiagLogLevel {\n /** Diagnostic Logging level setting to disable all logging (except and forced logs) */\n NONE = 0,\n\n /** Identifies an error scenario */\n ERROR = 30,\n\n /** Identifies a warning scenario */\n WARN = 50,\n\n /** General informational log message */\n INFO = 60,\n\n /** General debug log message */\n DEBUG = 70,\n\n /**\n * Detailed trace level logging should only be used for development, should only be set\n * in a development environment.\n */\n VERBOSE = 80,\n\n /** Used to set the logging level to include all logging */\n ALL = 9999,\n}\n\n/**\n * Defines options for ComponentLogger\n */\nexport interface ComponentLoggerOptions {\n namespace: string;\n}\n\nexport interface DiagLoggerOptions {\n /**\n * The {@link DiagLogLevel} used to filter logs sent to the logger.\n *\n * @defaultValue DiagLogLevel.INFO\n */\n logLevel?: DiagLogLevel;\n\n /**\n * Setting this value to `true` will suppress the warning message normally emitted when registering a logger when another logger is already registered.\n */\n suppressOverrideMessage?: boolean;\n}\n\nexport interface DiagLoggerApi {\n /**\n * Set the global DiagLogger and DiagLogLevel.\n * If a global diag logger is already set, this will override it.\n *\n * @param logger - The {@link DiagLogger} instance to set as the default logger.\n * @param options - A {@link DiagLoggerOptions} object. If not provided, default values will be set.\n * @returns `true` if the logger was successfully registered, else `false`\n */\n setLogger(logger: DiagLogger, options?: DiagLoggerOptions): boolean;\n\n /**\n *\n * @param logger - The {@link DiagLogger} instance to set as the default logger.\n * @param logLevel - The {@link DiagLogLevel} used to filter logs sent to the logger. If not provided it will default to {@link DiagLogLevel.INFO}.\n * @returns `true` if the logger was successfully registered, else `false`\n */\n setLogger(logger: DiagLogger, logLevel?: DiagLogLevel): boolean;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DiagLogFunction, DiagLogger, DiagLogLevel } from '../types';\n\nexport function createLogLevelDiagLogger(\n maxLevel: DiagLogLevel,\n logger: DiagLogger\n): DiagLogger {\n if (maxLevel < DiagLogLevel.NONE) {\n maxLevel = DiagLogLevel.NONE;\n } else if (maxLevel > DiagLogLevel.ALL) {\n maxLevel = DiagLogLevel.ALL;\n }\n\n // In case the logger is null or undefined\n logger = logger || {};\n\n function _filterFunc(\n funcName: keyof DiagLogger,\n theLevel: DiagLogLevel\n ): DiagLogFunction {\n const theFunc = logger[funcName];\n\n if (typeof theFunc === 'function' && maxLevel >= theLevel) {\n return theFunc.bind(logger);\n }\n return function () {};\n }\n\n return {\n error: _filterFunc('error', DiagLogLevel.ERROR),\n warn: _filterFunc('warn', DiagLogLevel.WARN),\n info: _filterFunc('info', DiagLogLevel.INFO),\n debug: _filterFunc('debug', DiagLogLevel.DEBUG),\n verbose: _filterFunc('verbose', DiagLogLevel.VERBOSE),\n };\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DiagComponentLogger } from '../diag/ComponentLogger';\nimport { createLogLevelDiagLogger } from '../diag/internal/logLevelLogger';\nimport {\n ComponentLoggerOptions,\n DiagLogFunction,\n DiagLogger,\n DiagLoggerApi,\n DiagLogLevel,\n} from '../diag/types';\nimport {\n getGlobal,\n registerGlobal,\n unregisterGlobal,\n} from '../internal/global-utils';\n\nconst API_NAME = 'diag';\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry internal\n * diagnostic API\n */\nexport class DiagAPI implements DiagLogger, DiagLoggerApi {\n private static _instance?: DiagAPI;\n\n /** Get the singleton instance of the DiagAPI API */\n public static instance(): DiagAPI {\n if (!this._instance) {\n this._instance = new DiagAPI();\n }\n\n return this._instance;\n }\n\n /**\n * Private internal constructor\n * @private\n */\n private constructor() {\n function _logProxy(funcName: keyof DiagLogger): DiagLogFunction {\n return function (...args) {\n const logger = getGlobal('diag');\n // shortcut if logger not set\n if (!logger) return;\n return logger[funcName](...args);\n };\n }\n\n // Using self local variable for minification purposes as 'this' cannot be minified\n const self = this;\n\n // DiagAPI specific functions\n\n const setLogger: DiagLoggerApi['setLogger'] = (\n logger,\n optionsOrLogLevel = { logLevel: DiagLogLevel.INFO }\n ) => {\n if (logger === self) {\n // There isn't much we can do here.\n // Logging to the console might break the user application.\n // Try to log to self. If a logger was previously registered it will receive the log.\n const err = new Error(\n 'Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation'\n );\n self.error(err.stack ?? err.message);\n return false;\n }\n\n if (typeof optionsOrLogLevel === 'number') {\n optionsOrLogLevel = {\n logLevel: optionsOrLogLevel,\n };\n }\n\n const oldLogger = getGlobal('diag');\n const newLogger = createLogLevelDiagLogger(\n optionsOrLogLevel.logLevel ?? DiagLogLevel.INFO,\n logger\n );\n // There already is an logger registered. We'll let it know before overwriting it.\n if (oldLogger && !optionsOrLogLevel.suppressOverrideMessage) {\n const stack = new Error().stack ?? '<failed to generate stacktrace>';\n oldLogger.warn(`Current logger will be overwritten from ${stack}`);\n newLogger.warn(\n `Current logger will overwrite one already registered from ${stack}`\n );\n }\n\n return registerGlobal('diag', newLogger, self, true);\n };\n\n self.setLogger = setLogger;\n\n self.disable = () => {\n unregisterGlobal(API_NAME, self);\n };\n\n self.createComponentLogger = (options: ComponentLoggerOptions) => {\n return new DiagComponentLogger(options);\n };\n\n self.verbose = _logProxy('verbose');\n self.debug = _logProxy('debug');\n self.info = _logProxy('info');\n self.warn = _logProxy('warn');\n self.error = _logProxy('error');\n }\n\n public setLogger!: DiagLoggerApi['setLogger'];\n /**\n *\n */\n public createComponentLogger!: (\n options: ComponentLoggerOptions\n ) => DiagLogger;\n\n // DiagLogger implementation\n public verbose!: DiagLogFunction;\n public debug!: DiagLogFunction;\n public info!: DiagLogFunction;\n public warn!: DiagLogFunction;\n public error!: DiagLogFunction;\n\n /**\n * Unregister the global logger and return to Noop\n */\n public disable!: () => void;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Context } from './types';\n\n/** Get a key to uniquely identify a context value */\nexport function createContextKey(description: string) {\n // The specification states that for the same input, multiple calls should\n // return different keys. Due to the nature of the JS dependency management\n // system, this creates problems where multiple versions of some package\n // could hold different keys for the same property.\n //\n // Therefore, we use Symbol.for which returns the same key for the same input.\n return Symbol.for(description);\n}\n\nclass BaseContext implements Context {\n private _currentContext!: Map<symbol, unknown>;\n\n /**\n * Construct a new context which inherits values from an optional parent context.\n *\n * @param parentContext a context from which to inherit values\n */\n constructor(parentContext?: Map<symbol, unknown>) {\n // for minification\n const self = this;\n\n self._currentContext = parentContext ? new Map(parentContext) : new Map();\n\n self.getValue = (key: symbol) => self._currentContext.get(key);\n\n self.setValue = (key: symbol, value: unknown): Context => {\n const context = new BaseContext(self._currentContext);\n context._currentContext.set(key, value);\n return context;\n };\n\n self.deleteValue = (key: symbol): Context => {\n const context = new BaseContext(self._currentContext);\n context._currentContext.delete(key);\n return context;\n };\n }\n\n /**\n * Get a value from the context.\n *\n * @param key key which identifies a context value\n */\n public getValue!: (key: symbol) => unknown;\n\n /**\n * Create a new context which inherits from this context and has\n * the given key set to the given value.\n *\n * @param key context key for which to set the value\n * @param value value to set for the given key\n */\n public setValue!: (key: symbol, value: unknown) => Context;\n\n /**\n * Return a new context which inherits from this context but does\n * not contain a value for the given key.\n *\n * @param key context key for which to clear a value\n */\n public deleteValue!: (key: symbol) => Context;\n}\n\n/** The root context is used as the default parent context when there is no active context */\nexport const ROOT_CONTEXT: Context = new BaseContext();\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Meter } from './Meter';\nimport {\n BatchObservableCallback,\n Counter,\n Gauge,\n Histogram,\n MetricAttributes,\n MetricOptions,\n Observable,\n ObservableCallback,\n ObservableCounter,\n ObservableGauge,\n ObservableUpDownCounter,\n UpDownCounter,\n} from './Metric';\n\n/**\n * NoopMeter is a noop implementation of the {@link Meter} interface. It reuses\n * constant NoopMetrics for all of its methods.\n */\nexport class NoopMeter implements Meter {\n constructor() {}\n\n /**\n * @see {@link Meter.createGauge}\n */\n createGauge(_name: string, _options?: MetricOptions): Gauge {\n return NOOP_GAUGE_METRIC;\n }\n\n /**\n * @see {@link Meter.createHistogram}\n */\n createHistogram(_name: string, _options?: MetricOptions): Histogram {\n return NOOP_HISTOGRAM_METRIC;\n }\n\n /**\n * @see {@link Meter.createCounter}\n */\n createCounter(_name: string, _options?: MetricOptions): Counter {\n return NOOP_COUNTER_METRIC;\n }\n\n /**\n * @see {@link Meter.createUpDownCounter}\n */\n createUpDownCounter(_name: string, _options?: MetricOptions): UpDownCounter {\n return NOOP_UP_DOWN_COUNTER_METRIC;\n }\n\n /**\n * @see {@link Meter.createObservableGauge}\n */\n createObservableGauge(\n _name: string,\n _options?: MetricOptions\n ): ObservableGauge {\n return NOOP_OBSERVABLE_GAUGE_METRIC;\n }\n\n /**\n * @see {@link Meter.createObservableCounter}\n */\n createObservableCounter(\n _name: string,\n _options?: MetricOptions\n ): ObservableCounter {\n return NOOP_OBSERVABLE_COUNTER_METRIC;\n }\n\n /**\n * @see {@link Meter.createObservableUpDownCounter}\n */\n createObservableUpDownCounter(\n _name: string,\n _options?: MetricOptions\n ): ObservableUpDownCounter {\n return NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC;\n }\n\n /**\n * @see {@link Meter.addBatchObservableCallback}\n */\n addBatchObservableCallback(\n _callback: BatchObservableCallback,\n _observables: Observable[]\n ): void {}\n\n /**\n * @see {@link Meter.removeBatchObservableCallback}\n */\n removeBatchObservableCallback(_callback: BatchObservableCallback): void {}\n}\n\nexport class NoopMetric {}\n\nexport class NoopCounterMetric extends NoopMetric implements Counter {\n add(_value: number, _attributes: MetricAttributes): void {}\n}\n\nexport class NoopUpDownCounterMetric\n extends NoopMetric\n implements UpDownCounter\n{\n add(_value: number, _attributes: MetricAttributes): void {}\n}\n\nexport class NoopGaugeMetric extends NoopMetric implements Gauge {\n record(_value: number, _attributes: MetricAttributes): void {}\n}\n\nexport class NoopHistogramMetric extends NoopMetric implements Histogram {\n record(_value: number, _attributes: MetricAttributes): void {}\n}\n\nexport class NoopObservableMetric {\n addCallback(_callback: ObservableCallback) {}\n\n removeCallback(_callback: ObservableCallback) {}\n}\n\nexport class NoopObservableCounterMetric\n extends NoopObservableMetric\n implements ObservableCounter {}\n\nexport class NoopObservableGaugeMetric\n extends NoopObservableMetric\n implements ObservableGauge {}\n\nexport class NoopObservableUpDownCounterMetric\n extends NoopObservableMetric\n implements ObservableUpDownCounter {}\n\nexport const NOOP_METER = new NoopMeter();\n\n// Synchronous instruments\nexport const NOOP_COUNTER_METRIC = new NoopCounterMetric();\nexport const NOOP_GAUGE_METRIC = new NoopGaugeMetric();\nexport const NOOP_HISTOGRAM_METRIC = new NoopHistogramMetric();\nexport const NOOP_UP_DOWN_COUNTER_METRIC = new NoopUpDownCounterMetric();\n\n// Asynchronous instruments\nexport const NOOP_OBSERVABLE_COUNTER_METRIC = new NoopObservableCounterMetric();\nexport const NOOP_OBSERVABLE_GAUGE_METRIC = new NoopObservableGaugeMetric();\nexport const NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC =\n new NoopObservableUpDownCounterMetric();\n\n/**\n * Create a no-op Meter\n */\nexport function createNoopMeter(): Meter {\n return NOOP_METER;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Attributes, AttributeValue } from '../common/Attributes';\nimport { Context } from '../context/types';\nimport { BatchObservableResult, ObservableResult } from './ObservableResult';\n\n/**\n * Advisory options influencing aggregation configuration parameters.\n * @experimental\n */\nexport interface MetricAdvice {\n /**\n * Hint the explicit bucket boundaries for SDK if the metric is been\n * aggregated with a HistogramAggregator.\n */\n explicitBucketBoundaries?: number[];\n}\n\n/**\n * Options needed for metric creation\n */\nexport interface MetricOptions {\n /**\n * The description of the Metric.\n * @default ''\n */\n description?: string;\n\n /**\n * The unit of the Metric values.\n * @default ''\n */\n unit?: string;\n\n /**\n * Indicates the type of the recorded value.\n * @default {@link ValueType.DOUBLE}\n */\n valueType?: ValueType;\n\n /**\n * The advice influencing aggregation configuration parameters.\n * @experimental\n */\n advice?: MetricAdvice;\n}\n\n/** The Type of value. It describes how the data is reported. */\nexport enum ValueType {\n INT,\n DOUBLE,\n}\n\n/**\n * Counter is the most common synchronous instrument. This instrument supports\n * an `Add(increment)` function for reporting a sum, and is restricted to\n * non-negative increments. The default aggregation is Sum, as for any additive\n * instrument.\n *\n * Example uses for Counter:\n * <ol>\n * <li> count the number of bytes received. </li>\n * <li> count the number of requests completed. </li>\n * <li> count the number of accounts created. </li>\n * <li> count the number of checkpoints run. </li>\n * <li> count the number of 5xx errors. </li>\n * <ol>\n */\nexport interface Counter<\n AttributesTypes extends MetricAttributes = MetricAttributes,\n> {\n /**\n * Increment value of counter by the input. Inputs must not be negative.\n */\n add(value: number, attributes?: AttributesTypes, context?: Context): void;\n}\n\nexport interface UpDownCounter<\n AttributesTypes extends MetricAttributes = MetricAttributes,\n> {\n /**\n * Increment value of counter by the input. Inputs may be negative.\n */\n add(value: number, attributes?: AttributesTypes, context?: Context): void;\n}\n\nexport interface Gauge<\n AttributesTypes extends MetricAttributes = MetricAttributes,\n> {\n /**\n * Records a measurement.\n */\n record(value: number, attributes?: AttributesTypes, context?: Context): void;\n}\n\nexport interface Histogram<\n AttributesTypes extends MetricAttributes = MetricAttributes,\n> {\n /**\n * Records a measurement. Value of the measurement must not be negative.\n */\n record(value: number, attributes?: AttributesTypes, context?: Context): void;\n}\n\n/**\n * @deprecated please use {@link Attributes}\n */\nexport type MetricAttributes = Attributes;\n\n/**\n * @deprecated please use {@link AttributeValue}\n */\nexport type MetricAttributeValue = AttributeValue;\n\n/**\n * The observable callback for Observable instruments.\n */\nexport type ObservableCallback<\n AttributesTypes extends MetricAttributes = MetricAttributes,\n> = (\n observableResult: ObservableResult<AttributesTypes>\n) => void | Promise<void>;\n\n/**\n * The observable callback for a batch of Observable instruments.\n */\nexport type BatchObservableCallback<\n AttributesTypes extends MetricAttributes = MetricAttributes,\n> = (\n observableResult: BatchObservableResult<AttributesTypes>\n) => void | Promise<void>;\n\nexport interface Observable<\n AttributesTypes extends MetricAttributes = MetricAttributes,\n> {\n /**\n * Sets up a function that will be called whenever a metric collection is initiated.\n *\n * If the function is already in the list of callbacks for this Observable, the function is not added a second time.\n */\n addCallback(callback: ObservableCallback<AttributesTypes>): void;\n\n /**\n * Removes a callback previously registered with {@link Observable.addCallback}.\n */\n removeCallback(callback: ObservableCallback<AttributesTypes>): void;\n}\n\nexport type ObservableCounter<\n AttributesTypes extends MetricAttributes = MetricAttributes,\n> = Observable<AttributesTypes>;\nexport type ObservableUpDownCounter<\n AttributesTypes extends MetricAttributes = MetricAttributes,\n> = Observable<AttributesTypes>;\nexport type ObservableGauge<\n AttributesTypes extends MetricAttributes = MetricAttributes,\n> = Observable<AttributesTypes>;\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ROOT_CONTEXT } from './context';\nimport * as types from './types';\n\nexport class NoopContextManager implements types.ContextManager {\n active(): types.Context {\n return ROOT_CONTEXT;\n }\n\n with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n _context: types.Context,\n fn: F,\n thisArg?: ThisParameterType<F>,\n ...args: A\n ): ReturnType<F> {\n return fn.call(thisArg, ...args);\n }\n\n bind<T>(_context: types.Context, target: T): T {\n return target;\n }\n\n enable(): this {\n return this;\n }\n\n disable(): this {\n return this;\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NoopContextManager } from '../context/NoopContextManager';\nimport { Context, ContextManager } from '../context/types';\nimport {\n getGlobal,\n registerGlobal,\n unregisterGlobal,\n} from '../internal/global-utils';\nimport { DiagAPI } from './diag';\n\nconst API_NAME = 'context';\nconst NOOP_CONTEXT_MANAGER = new NoopContextManager();\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Context API\n */\nexport class ContextAPI {\n private static _instance?: ContextAPI;\n\n /** Empty private constructor prevents end users from constructing a new instance of the API */\n private constructor() {}\n\n /** Get the singleton instance of the Context API */\n public static getInstance(): ContextAPI {\n if (!this._instance) {\n this._instance = new ContextAPI();\n }\n\n return this._instance;\n }\n\n /**\n * Set the current context manager.\n *\n * @returns true if the context manager was successfully registered, else false\n */\n public setGlobalContextManager(contextManager: ContextManager): boolean {\n return registerGlobal(API_NAME, contextManager, DiagAPI.instance());\n }\n\n /**\n * Get the currently active context\n */\n public active(): Context {\n return this._getContextManager().active();\n }\n\n /**\n * Execute a function with an active context\n *\n * @param context context to be active during function execution\n * @param fn function to execute in a context\n * @param thisArg optional receiver to be used for calling fn\n * @param args optional arguments forwarded to fn\n */\n public with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n context: Context,\n fn: F,\n thisArg?: ThisParameterType<F>,\n ...args: A\n ): ReturnType<F> {\n return this._getContextManager().with(context, fn, thisArg, ...args);\n }\n\n /**\n * Bind a context to a target function or event emitter\n *\n * @param context context to bind to the event emitter or function. Defaults to the currently active context\n * @param target function or event emitter to bind\n */\n public bind<T>(context: Context, target: T): T {\n return this._getContextManager().bind(context, target);\n }\n\n private _getContextManager(): ContextManager {\n return getGlobal(API_NAME) || NOOP_CONTEXT_MANAGER;\n }\n\n /** Disable and remove the global context manager */\n public disable() {\n this._getContextManager().disable();\n unregisterGlobal(API_NAME, DiagAPI.instance());\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport enum TraceFlags {\n /** Represents no flag set. */\n NONE = 0x0,\n /** Bit to represent whether trace is sampled in trace flags. */\n SAMPLED = 0x1 << 0,\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SpanContext } from './span_context';\nimport { TraceFlags } from './trace_flags';\n\nexport const INVALID_SPANID = '0000000000000000';\nexport const INVALID_TRACEID = '00000000000000000000000000000000';\nexport const INVALID_SPAN_CONTEXT: SpanContext = {\n traceId: INVALID_TRACEID,\n spanId: INVALID_SPANID,\n traceFlags: TraceFlags.NONE,\n};\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Exception } from '../common/Exception';\nimport { TimeInput } from '../common/Time';\nimport { SpanAttributes } from './attributes';\nimport { INVALID_SPAN_CONTEXT } from './invalid-span-constants';\nimport { Span } from './span';\nimport { SpanContext } from './span_context';\nimport { SpanStatus } from './status';\nimport { Link } from './link';\n\n/**\n * The NonRecordingSpan is the default {@link Span} that is used when no Span\n * implementation is available. All operations are no-op including context\n * propagation.\n */\nexport class NonRecordingSpan implements Span {\n constructor(\n private readonly _spanContext: SpanContext = INVALID_SPAN_CONTEXT\n ) {}\n\n // Returns a SpanContext.\n spanContext(): SpanContext {\n return this._spanContext;\n }\n\n // By default does nothing\n setAttribute(_key: string, _value: unknown): this {\n return this;\n }\n\n // By default does nothing\n setAttributes(_attributes: SpanAttributes): this {\n return this;\n }\n\n // By default does nothing\n addEvent(_name: string, _attributes?: SpanAttributes): this {\n return this;\n }\n\n addLink(_link: Link): this {\n return this;\n }\n\n addLinks(_links: Link[]): this {\n return this;\n }\n\n // By default does nothing\n setStatus(_status: SpanStatus): this {\n return this;\n }\n\n // By default does nothing\n updateName(_name: string): this {\n return this;\n }\n\n // By default does nothing\n end(_endTime?: TimeInput): void {}\n\n // isRecording always returns false for NonRecordingSpan.\n isRecording(): boolean {\n return false;\n }\n\n // By default does nothing\n recordException(_exception: Exception, _time?: TimeInput): void {}\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createContextKey } from '../context/context';\nimport { Context } from '../context/types';\nimport { Span } from './span';\nimport { SpanContext } from './span_context';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { ContextAPI } from '../api/context';\n\n/**\n * span key\n */\nconst SPAN_KEY = createContextKey('OpenTelemetry Context Key SPAN');\n\n/**\n * Return the span if one exists\n *\n * @param context context to get span from\n */\nexport function getSpan(context: Context): Span | undefined {\n return (context.getValue(SPAN_KEY) as Span) || undefined;\n}\n\n/**\n * Gets the span from the current context, if one exists.\n */\nexport function getActiveSpan(): Span | undefined {\n return getSpan(ContextAPI.getInstance().active());\n}\n\n/**\n * Set the span on a context\n *\n * @param context context to use as parent\n * @param span span to set active\n */\nexport function setSpan(context: Context, span: Span): Context {\n return context.setValue(SPAN_KEY, span);\n}\n\n/**\n * Remove current span stored in the context\n *\n * @param context context to delete span from\n */\nexport function deleteSpan(context: Context): Context {\n return context.deleteValue(SPAN_KEY);\n}\n\n/**\n * Wrap span context in a NoopSpan and set as span in a new\n * context\n *\n * @param context context to set active span on\n * @param spanContext span context to be wrapped\n */\nexport function setSpanContext(\n context: Context,\n spanContext: SpanContext\n): Context {\n return setSpan(context, new NonRecordingSpan(spanContext));\n}\n\n/**\n * Get the span context of the span if it exists.\n *\n * @param context context to get values from\n */\nexport function getSpanContext(context: Context): SpanContext | undefined {\n return getSpan(context)?.spanContext();\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { INVALID_SPANID, INVALID_TRACEID } from './invalid-span-constants';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { Span } from './span';\nimport { SpanContext } from './span_context';\n\nconst VALID_TRACEID_REGEX = /^([0-9a-f]{32})$/i;\nconst VALID_SPANID_REGEX = /^[0-9a-f]{16}$/i;\n\nexport function isValidTraceId(traceId: string): boolean {\n return VALID_TRACEID_REGEX.test(traceId) && traceId !== INVALID_TRACEID;\n}\n\nexport function isValidSpanId(spanId: string): boolean {\n return VALID_SPANID_REGEX.test(spanId) && spanId !== INVALID_SPANID;\n}\n\n/**\n * Returns true if this {@link SpanContext} is valid.\n * @return true if this {@link SpanContext} is valid.\n */\nexport function isSpanContextValid(spanContext: SpanContext): boolean {\n return (\n isValidTraceId(spanContext.traceId) && isValidSpanId(spanContext.spanId)\n );\n}\n\n/**\n * Wrap the given {@link SpanContext} in a new non-recording {@link Span}\n *\n * @param spanContext span context to be wrapped\n * @returns a new non-recording {@link Span} with the provided context\n */\nexport function wrapSpanContext(spanContext: SpanContext): Span {\n return new NonRecordingSpan(spanContext);\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ContextAPI } from '../api/context';\nimport { Context } from '../context/types';\nimport { getSpanContext, setSpan } from '../trace/context-utils';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { Span } from './span';\nimport { isSpanContextValid } from './spancontext-utils';\nimport { SpanOptions } from './SpanOptions';\nimport { SpanContext } from './span_context';\nimport { Tracer } from './tracer';\n\nconst contextApi = ContextAPI.getInstance();\n\n/**\n * No-op implementations of {@link Tracer}.\n */\nexport class NoopTracer implements Tracer {\n // startSpan starts a noop span.\n startSpan(\n name: string,\n options?: SpanOptions,\n context = contextApi.active()\n ): Span {\n const root = Boolean(options?.root);\n if (root) {\n return new NonRecordingSpan();\n }\n\n const parentFromContext = context && getSpanContext(context);\n\n if (\n isSpanContext(parentFromContext) &&\n isSpanContextValid(parentFromContext)\n ) {\n return new NonRecordingSpan(parentFromContext);\n } else {\n return new NonRecordingSpan();\n }\n }\n\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n fn: F\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n opts: SpanOptions | undefined,\n fn: F\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n opts: SpanOptions | undefined,\n ctx: Context | undefined,\n fn: F\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n arg2?: F | SpanOptions,\n arg3?: F | Context,\n arg4?: F\n ): ReturnType<F> | undefined {\n let opts: SpanOptions | undefined;\n let ctx: Context | undefined;\n let fn: F;\n\n if (arguments.length < 2) {\n return;\n } else if (arguments.length === 2) {\n fn = arg2 as F;\n } else if (arguments.length === 3) {\n opts = arg2 as SpanOptions | undefined;\n fn = arg3 as F;\n } else {\n opts = arg2 as SpanOptions | undefined;\n ctx = arg3 as Context | undefined;\n fn = arg4 as F;\n }\n\n const parentContext = ctx ?? contextApi.active();\n const span = this.startSpan(name, opts, parentContext);\n const contextWithSpanSet = setSpan(parentContext, span);\n\n return contextApi.with(contextWithSpanSet, fn, undefined, span);\n }\n}\n\nfunction isSpanContext(spanContext: any): spanContext is SpanContext {\n return (\n typeof spanContext === 'object' &&\n typeof spanContext['spanId'] === 'string' &&\n typeof spanContext['traceId'] === 'string' &&\n typeof spanContext['traceFlags'] === 'number'\n );\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Context } from '../context/types';\nimport { NoopTracer } from './NoopTracer';\nimport { Span } from './span';\nimport { SpanOptions } from './SpanOptions';\nimport { Tracer } from './tracer';\nimport { TracerOptions } from './tracer_options';\n\nconst NOOP_TRACER = new NoopTracer();\n\n/**\n * Proxy tracer provided by the proxy tracer provider\n */\nexport class ProxyTracer implements Tracer {\n // When a real implementation is provided, this will be it\n private _delegate?: Tracer;\n\n constructor(\n private _provider: TracerDelegator,\n public readonly name: string,\n public readonly version?: string,\n public readonly options?: TracerOptions\n ) {}\n\n startSpan(name: string, options?: SpanOptions, context?: Context): Span {\n return this._getTracer().startSpan(name, options, context);\n }\n\n startActiveSpan<F extends (span: Span) => unknown>(\n _name: string,\n _options: F | SpanOptions,\n _context?: F | Context,\n _fn?: F\n ): ReturnType<F> {\n const tracer = this._getTracer();\n return Reflect.apply(tracer.startActiveSpan, tracer, arguments);\n }\n\n /**\n * Try to get a tracer from the proxy tracer provider.\n * If the proxy tracer provider has no delegate, return a noop tracer.\n */\n private _getTracer() {\n if (this._delegate) {\n return this._delegate;\n }\n\n const tracer = this._provider.getDelegateTracer(\n this.name,\n this.version,\n this.options\n );\n\n if (!tracer) {\n return NOOP_TRACER;\n }\n\n this._delegate = tracer;\n return this._delegate;\n }\n}\n\nexport interface TracerDelegator {\n getDelegateTracer(\n name: string,\n version?: string,\n options?: TracerOptions\n ): Tracer | undefined;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NoopTracer } from './NoopTracer';\nimport { Tracer } from './tracer';\nimport { TracerOptions } from './tracer_options';\nimport { TracerProvider } from './tracer_provider';\n\n/**\n * An implementation of the {@link TracerProvider} which returns an impotent\n * Tracer for all calls to `getTracer`.\n *\n * All operations are no-op.\n */\nexport class NoopTracerProvider implements TracerProvider {\n getTracer(\n _name?: string,\n _version?: string,\n _options?: TracerOptions\n ): Tracer {\n return new NoopTracer();\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Tracer } from './tracer';\nimport { TracerProvider } from './tracer_provider';\nimport { ProxyTracer } from './ProxyTracer';\nimport { NoopTracerProvider } from './NoopTracerProvider';\nimport { TracerOptions } from './tracer_options';\n\nconst NOOP_TRACER_PROVIDER = new NoopTracerProvider();\n\n/**\n * Tracer provider which provides {@link ProxyTracer}s.\n *\n * Before a delegate is set, tracers provided are NoOp.\n * When a delegate is set, traces are provided from the delegate.\n * When a delegate is set after tracers have already been provided,\n * all tracers already provided will use the provided delegate implementation.\n */\nexport class ProxyTracerProvider implements TracerProvider {\n private _delegate?: TracerProvider;\n\n /**\n * Get a {@link ProxyTracer}\n */\n getTracer(name: string, version?: string, options?: TracerOptions): Tracer {\n return (\n this.getDelegateTracer(name, version, options) ??\n new ProxyTracer(this, name, version, options)\n );\n }\n\n getDelegate(): TracerProvider {\n return this._delegate ?? NOOP_TRACER_PROVIDER;\n }\n\n /**\n * Set the delegate tracer provider\n */\n setDelegate(delegate: TracerProvider) {\n this._delegate = delegate;\n }\n\n getDelegateTracer(\n name: string,\n version?: string,\n options?: TracerOptions\n ): Tracer | undefined {\n return this._delegate?.getTracer(name, version, options);\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport enum SpanKind {\n /** Default value. Indicates that the span is used internally. */\n INTERNAL = 0,\n\n /**\n * Indicates that the span covers server-side handling of an RPC or other\n * remote request.\n */\n SERVER = 1,\n\n /**\n * Indicates that the span covers the client-side wrapper around an RPC or\n * other remote request.\n */\n CLIENT = 2,\n\n /**\n * Indicates that the span describes producer sending a message to a\n * broker. Unlike client and server, there is no direct critical path latency\n * relationship between producer and consumer spans.\n */\n PRODUCER = 3,\n\n /**\n * Indicates that the span describes consumer receiving a message from a\n * broker. Unlike client and server, there is no direct critical path latency\n * relationship between producer and consumer spans.\n */\n CONSUMER = 4,\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport interface SpanStatus {\n /** The status code of this message. */\n code: SpanStatusCode;\n /** A developer-facing error message. */\n message?: string;\n}\n\n/**\n * An enumeration of status codes.\n */\nexport enum SpanStatusCode {\n /**\n * The default status.\n */\n UNSET = 0,\n /**\n * The operation has been validated by an Application developer or\n * Operator to have completed successfully.\n */\n OK = 1,\n /**\n * The operation contains an error.\n */\n ERROR = 2,\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Meter, MeterOptions } from './Meter';\nimport { MeterProvider } from './MeterProvider';\nimport { NOOP_METER } from './NoopMeter';\n\n/**\n * An implementation of the {@link MeterProvider} which returns an impotent Meter\n * for all calls to `getMeter`\n */\nexport class NoopMeterProvider implements MeterProvider {\n getMeter(_name: string, _version?: string, _options?: MeterOptions): Meter {\n return NOOP_METER;\n }\n}\n\nexport const NOOP_METER_PROVIDER = new NoopMeterProvider();\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Meter, MeterOptions } from '../metrics/Meter';\nimport { MeterProvider } from '../metrics/MeterProvider';\nimport { NOOP_METER_PROVIDER } from '../metrics/NoopMeterProvider';\nimport {\n getGlobal,\n registerGlobal,\n unregisterGlobal,\n} from '../internal/global-utils';\nimport { DiagAPI } from './diag';\n\nconst API_NAME = 'metrics';\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Metrics API\n */\nexport class MetricsAPI {\n private static _instance?: MetricsAPI;\n\n /** Empty private constructor prevents end users from constructing a new instance of the API */\n private constructor() {}\n\n /** Get the singleton instance of the Metrics API */\n public static getInstance(): MetricsAPI {\n if (!this._instance) {\n this._instance = new MetricsAPI();\n }\n\n return this._instance;\n }\n\n /**\n * Set the current global meter provider.\n * Returns true if the meter provider was successfully registered, else false.\n */\n public setGlobalMeterProvider(provider: MeterProvider): boolean {\n return registerGlobal(API_NAME, provider, DiagAPI.instance());\n }\n\n /**\n * Returns the global meter provider.\n */\n public getMeterProvider(): MeterProvider {\n return getGlobal(API_NAME) || NOOP_METER_PROVIDER;\n }\n\n /**\n * Returns a meter from the global meter provider.\n */\n public getMeter(\n name: string,\n version?: string,\n options?: MeterOptions\n ): Meter {\n return this.getMeterProvider().getMeter(name, version, options);\n }\n\n /** Remove the global meter provider */\n public disable(): void {\n unregisterGlobal(API_NAME, DiagAPI.instance());\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { MetricsAPI } from './api/metrics';\n/** Entrypoint for metrics API */\nexport const metrics = MetricsAPI.getInstance();\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n getGlobal,\n registerGlobal,\n unregisterGlobal,\n} from '../internal/global-utils';\nimport { ProxyTracerProvider } from '../trace/ProxyTracerProvider';\nimport {\n isSpanContextValid,\n wrapSpanContext,\n} from '../trace/spancontext-utils';\nimport { Tracer } from '../trace/tracer';\nimport { TracerProvider } from '../trace/tracer_provider';\nimport {\n deleteSpan,\n getActiveSpan,\n getSpan,\n getSpanContext,\n setSpan,\n setSpanContext,\n} from '../trace/context-utils';\nimport { DiagAPI } from './diag';\n\nconst API_NAME = 'trace';\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Tracing API\n */\nexport class TraceAPI {\n private static _instance?: TraceAPI;\n\n private _proxyTracerProvider = new ProxyTracerProvider();\n\n /** Empty private constructor prevents end users from constructing a new instance of the API */\n private constructor() {}\n\n /** Get the singleton instance of the Trace API */\n public static getInstance(): TraceAPI {\n if (!this._instance) {\n this._instance = new TraceAPI();\n }\n\n return this._instance;\n }\n\n /**\n * Set the current global tracer.\n *\n * @returns true if the tracer provider was successfully registered, else false\n */\n public setGlobalTracerProvider(provider: TracerProvider): boolean {\n const success = registerGlobal(\n API_NAME,\n this._proxyTracerProvider,\n DiagAPI.instance()\n );\n if (success) {\n this._proxyTracerProvider.setDelegate(provider);\n }\n return success;\n }\n\n /**\n * Returns the global tracer provider.\n */\n public getTracerProvider(): TracerProvider {\n return getGlobal(API_NAME) || this._proxyTracerProvider;\n }\n\n /**\n * Returns a tracer from the global tracer provider.\n */\n public getTracer(name: string, version?: string): Tracer {\n return this.getTracerProvider().getTracer(name, version);\n }\n\n /** Remove the global tracer provider */\n public disable() {\n unregisterGlobal(API_NAME, DiagAPI.instance());\n this._proxyTracerProvider = new ProxyTracerProvider();\n }\n\n public wrapSpanContext = wrapSpanContext;\n\n public isSpanContextValid = isSpanContextValid;\n\n public deleteSpan = deleteSpan;\n\n public getSpan = getSpan;\n\n public getActiveSpan = getActiveSpan;\n\n public getSpanContext = getSpanContext;\n\n public setSpan = setSpan;\n\n public setSpanContext = setSpanContext;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { TraceAPI } from './api/trace';\n/** Entrypoint for trace API */\nexport const trace = TraceAPI.getInstance();\n","import {\n Meter,\n type Span,\n type SpanOptions,\n SpanStatusCode,\n type Tracer,\n} from \"@opentelemetry/api\";\nimport { type Logger, SeverityNumber } from \"@opentelemetry/api-logs\";\nimport { flattenAttributes } from \"@trigger.dev/core/v3/utils/flattenAttributes\";\n\nexport * from \"@opentelemetry/semantic-conventions\";\n\nexport type {\n Tracer,\n Attributes,\n Meter,\n Counter,\n UpDownCounter,\n ObservableGauge,\n ObservableCounter,\n ObservableUpDownCounter,\n MetricOptions,\n Gauge,\n Histogram,\n ObservableResult,\n} from \"@opentelemetry/api\";\n\nimport { trace, context, propagation, SpanKind, metrics, ValueType } from \"@opentelemetry/api\";\nexport {\n trace,\n context,\n propagation,\n type Span,\n SpanKind,\n type SpanOptions,\n SpanStatusCode,\n metrics,\n ValueType,\n};\n\nexport function getTracer(name: string): Tracer {\n return trace.getTracer(name);\n}\n\nexport function getMeter(name: string): Meter {\n return metrics.getMeter(name);\n}\n\nexport async function startSpan<T>(\n tracer: Tracer | undefined,\n name: string,\n fn: (span: Span) => Promise<T>,\n options?: SpanOptions\n): Promise<T> {\n tracer ??= getTracer(\"default\");\n\n return tracer.startActiveSpan(name, options ?? {}, async (span) => {\n try {\n return await fn(span);\n } catch (error) {\n if (error instanceof Error) {\n span.recordException(error);\n } else if (typeof error === \"string\") {\n span.recordException(new Error(error));\n } else {\n span.recordException(new Error(String(error)));\n }\n\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n\n throw error;\n } finally {\n span.end();\n }\n });\n}\n\nexport function recordSpanError(span: Span, error: Error) {\n span.recordException(error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n}\n\nexport async function emitDebugLog(\n logger: Logger,\n message: string,\n params: Record<string, unknown> = {}\n) {\n logger.emit({\n severityNumber: SeverityNumber.DEBUG,\n body: message,\n attributes: { ...flattenAttributes(params, \"params\") },\n });\n}\n\nexport async function emitInfoLog(\n logger: Logger,\n message: string,\n params: Record<string, unknown> = {}\n) {\n logger.emit({\n severityNumber: SeverityNumber.INFO,\n body: message,\n attributes: { ...flattenAttributes(params, \"params\") },\n });\n}\n\nexport async function emitErrorLog(\n logger: Logger,\n message: string,\n params: Record<string, unknown> = {}\n) {\n logger.emit({\n severityNumber: SeverityNumber.ERROR,\n body: message,\n attributes: { ...flattenAttributes(params, \"params\") },\n });\n}\n\nexport async function emitWarnLog(\n logger: Logger,\n message: string,\n params: Record<string, unknown> = {}\n) {\n logger.emit({\n severityNumber: SeverityNumber.WARN,\n body: message,\n attributes: { ...flattenAttributes(params, \"params\") },\n });\n}\n","/*\nHow it works:\n`this.#head` is an instance of `Node` which keeps track of its current value and nests another instance of `Node` that keeps the value that comes after it. When a value is provided to `.enqueue()`, the code needs to iterate through `this.#head`, going deeper and deeper to find the last value. However, iterating through every single item is slow. This problem is solved by saving a reference to the last value as `this.#tail` so that it can reference it to add a new value.\n*/\n\nclass Node {\n\tvalue;\n\tnext;\n\n\tconstructor(value) {\n\t\tthis.value = value;\n\t}\n}\n\nexport default class Queue {\n\t#head;\n\t#tail;\n\t#size;\n\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\n\tenqueue(value) {\n\t\tconst node = new Node(value);\n\n\t\tif (this.#head) {\n\t\t\tthis.#tail.next = node;\n\t\t\tthis.#tail = node;\n\t\t} else {\n\t\t\tthis.#head = node;\n\t\t\tthis.#tail = node;\n\t\t}\n\n\t\tthis.#size++;\n\t}\n\n\tdequeue() {\n\t\tconst current = this.#head;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#head = this.#head.next;\n\t\tthis.#size--;\n\t\treturn current.value;\n\t}\n\n\tpeek() {\n\t\tif (!this.#head) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.#head.value;\n\n\t\t// TODO: Node.js 18.\n\t\t// return this.#head?.value;\n\t}\n\n\tclear() {\n\t\tthis.#head = undefined;\n\t\tthis.#tail = undefined;\n\t\tthis.#size = 0;\n\t}\n\n\tget size() {\n\t\treturn this.#size;\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tlet current = this.#head;\n\n\t\twhile (current) {\n\t\t\tyield current.value;\n\t\t\tcurrent = current.next;\n\t\t}\n\t}\n}\n","import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tvalidateConcurrency(concurrency);\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst resumeNext = () => {\n\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\tqueue.dequeue()();\n\t\t\t// Since `pendingCount` has been decreased by one, increase `activeCount` by one.\n\t\t\tactiveCount++;\n\t\t}\n\t};\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tresumeNext();\n\t};\n\n\tconst run = async (function_, resolve, arguments_) => {\n\t\tconst result = (async () => function_(...arguments_))();\n\n\t\tresolve(result);\n\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\tnext();\n\t};\n\n\tconst enqueue = (function_, resolve, arguments_) => {\n\t\t// Queue `internalResolve` instead of the `run` function\n\t\t// to preserve asynchronous context.\n\t\tnew Promise(internalResolve => {\n\t\t\tqueue.enqueue(internalResolve);\n\t\t}).then(\n\t\t\trun.bind(undefined, function_, resolve, arguments_),\n\t\t);\n\n\t\t(async () => {\n\t\t\t// This function needs to wait until the next microtask before comparing\n\t\t\t// `activeCount` to `concurrency`, because `activeCount` is updated asynchronously\n\t\t\t// after the `internalResolve` function is dequeued and called. The comparison in the if-statement\n\t\t\t// needs to happen asynchronously as well to get an up-to-date value for `activeCount`.\n\t\t\tawait Promise.resolve();\n\n\t\t\tif (activeCount < concurrency) {\n\t\t\t\tresumeNext();\n\t\t\t}\n\t\t})();\n\t};\n\n\tconst generator = (function_, ...arguments_) => new Promise(resolve => {\n\t\tenqueue(function_, resolve, arguments_);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount,\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size,\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue() {\n\t\t\t\tqueue.clear();\n\t\t\t},\n\t\t},\n\t\tconcurrency: {\n\t\t\tget: () => concurrency,\n\n\t\t\tset(newConcurrency) {\n\t\t\t\tvalidateConcurrency(newConcurrency);\n\t\t\t\tconcurrency = newConcurrency;\n\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\t// eslint-disable-next-line no-unmodified-loop-condition\n\t\t\t\t\twhile (activeCount < concurrency && queue.size > 0) {\n\t\t\t\t\t\tresumeNext();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n\nexport function limitFunction(function_, option) {\n\tconst {concurrency} = option;\n\tconst limit = pLimit(concurrency);\n\n\treturn (...arguments_) => limit(() => function_(...arguments_));\n}\n\nfunction validateConcurrency(concurrency) {\n\tif (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n}\n","import { createRedisClient, Redis, type RedisOptions } from \"@internal/redis\";\nimport {\n Attributes,\n Histogram,\n Meter,\n metrics,\n ObservableResult,\n SpanKind,\n startSpan,\n trace,\n Tracer,\n ValueType,\n} from \"@internal/tracing\";\nimport { Logger } from \"@trigger.dev/core/logger\";\nimport { calculateNextRetryDelay } from \"@trigger.dev/core/v3\";\nimport { type RetryOptions } from \"@trigger.dev/core/v3/schemas\";\nimport { shutdownManager } from \"@trigger.dev/core/v3/serverOnly\";\nimport { nanoid } from \"nanoid\";\nimport pLimit from \"p-limit\";\nimport { z } from \"zod\";\nimport { AnyQueueItem, SimpleQueue } from \"./queue.js\";\nimport { parseExpression } from \"cron-parser\";\n\nexport const CronSchema = z.object({\n cron: z.string(),\n lastTimestamp: z.number().optional(),\n timestamp: z.number(),\n});\n\nexport type CronSchema = z.infer<typeof CronSchema>;\n\nexport type WorkerCatalog = {\n [key: string]: {\n schema: z.ZodFirstPartySchemaTypes | z.ZodDiscriminatedUnion<any, any>;\n visibilityTimeoutMs: number;\n retry?: RetryOptions;\n cron?: string;\n jitterInMs?: number;\n /** Defaults to true. If false, errors will not be logged. */\n logErrors?: boolean;\n };\n};\n\ntype WorkerCatalogItem = WorkerCatalog[keyof WorkerCatalog];\n\ntype QueueCatalogFromWorkerCatalog<Catalog extends WorkerCatalog> = {\n [K in keyof Catalog]: Catalog[K][\"schema\"];\n};\n\nexport type JobHandlerParams<Catalog extends WorkerCatalog, K extends keyof Catalog> = {\n id: string;\n payload: z.infer<Catalog[K][\"schema\"]>;\n visibilityTimeoutMs: number;\n attempt: number;\n deduplicationKey?: string;\n};\n\nexport type JobHandler<Catalog extends WorkerCatalog, K extends keyof Catalog> = (\n params: JobHandlerParams<Catalog, K>\n) => Promise<void>;\n\nexport type WorkerConcurrencyOptions = {\n workers?: number;\n tasksPerWorker?: number;\n limit?: number;\n};\n\ntype WorkerOptions<TCatalog extends WorkerCatalog> = {\n name: string;\n redisOptions: RedisOptions;\n catalog: TCatalog;\n jobs: {\n [K in keyof TCatalog]: JobHandler<TCatalog, K>;\n };\n concurrency?: WorkerConcurrencyOptions;\n pollIntervalMs?: number;\n immediatePollIntervalMs?: number;\n shutdownTimeoutMs?: number;\n logger?: Logger;\n tracer?: Tracer;\n meter?: Meter;\n};\n\n// This results in attempt 12 being a delay of 1 hour\nconst defaultRetrySettings = {\n maxAttempts: 12,\n factor: 2,\n //one second\n minTimeoutInMs: 1_000,\n //one hour\n maxTimeoutInMs: 3_600_000,\n randomize: true,\n};\n\nclass Worker<TCatalog extends WorkerCatalog> {\n private subscriber: Redis | undefined;\n private tracer: Tracer;\n private meter: Meter;\n\n private metrics: {\n enqueueDuration?: Histogram;\n dequeueDuration?: Histogram;\n jobDuration?: Histogram;\n ackDuration?: Histogram;\n redriveDuration?: Histogram;\n rescheduleDuration?: Histogram;\n } = {};\n\n queue: SimpleQueue<QueueCatalogFromWorkerCatalog<TCatalog>>;\n private jobs: WorkerOptions<TCatalog>[\"jobs\"];\n private logger: Logger;\n private workerLoops: Promise<void>[] = [];\n private isShuttingDown = false;\n private concurrency: Required<NonNullable<WorkerOptions<TCatalog>[\"concurrency\"]>>;\n private shutdownTimeoutMs: number;\n\n // The p-limit limiter to control overall concurrency.\n private limiters: Record<string, ReturnType<typeof pLimit>> = {};\n\n constructor(private options: WorkerOptions<TCatalog>) {\n this.logger = options.logger ?? new Logger(\"Worker\", \"debug\");\n this.tracer = options.tracer ?? trace.getTracer(options.name);\n this.meter = options.meter ?? metrics.getMeter(options.name);\n\n this.shutdownTimeoutMs = options.shutdownTimeoutMs ?? 60_000;\n\n const schema: QueueCatalogFromWorkerCatalog<TCatalog> = Object.fromEntries(\n Object.entries(this.options.catalog).map(([key, value]) => [key, value.schema])\n ) as QueueCatalogFromWorkerCatalog<TCatalog>;\n\n this.queue = new SimpleQueue({\n name: options.name,\n redisOptions: options.redisOptions,\n logger: this.logger,\n schema,\n });\n\n this.jobs = options.jobs;\n\n const { workers = 1, tasksPerWorker = 1, limit = 10 } = options.concurrency ?? {};\n this.concurrency = { workers, tasksPerWorker, limit };\n\n const masterQueueObservableGauge = this.meter.createObservableGauge(\"redis_worker.queue.size\", {\n description: \"The number of items in the queue\",\n unit: \"items\",\n valueType: ValueType.INT,\n });\n\n masterQueueObservableGauge.addCallback(this.#updateQueueSizeMetric.bind(this));\n\n const deadLetterQueueObservableGauge = this.meter.createObservableGauge(\n \"redis_worker.queue.dead_letter_size\",\n {\n description: \"The number of items in the dead letter queue\",\n unit: \"items\",\n valueType: ValueType.INT,\n }\n );\n\n deadLetterQueueObservableGauge.addCallback(this.#updateDeadLetterQueueSizeMetric.bind(this));\n\n const concurrencyLimitActiveObservableGauge = this.meter.createObservableGauge(\n \"redis_worker.concurrency.active\",\n {\n description: \"The number of active workers\",\n unit: \"workers\",\n valueType: ValueType.INT,\n }\n );\n\n concurrencyLimitActiveObservableGauge.addCallback(\n this.#updateConcurrencyLimitActiveMetric.bind(this)\n );\n\n const concurrencyLimitPendingObservableGauge = this.meter.createObservableGauge(\n \"redis_worker.concurrency.pending\",\n {\n description: \"The number of pending workers\",\n unit: \"workers\",\n valueType: ValueType.INT,\n }\n );\n\n concurrencyLimitPendingObservableGauge.addCallback(\n this.#updateConcurrencyLimitPendingMetric.bind(this)\n );\n }\n\n async #updateQueueSizeMetric(observableResult: ObservableResult<Attributes>) {\n const queueSize = await this.queue.size();\n\n observableResult.observe(queueSize, {\n worker_name: this.options.name,\n });\n }\n\n async #updateDeadLetterQueueSizeMetric(observableResult: ObservableResult<Attributes>) {\n const deadLetterQueueSize = await this.queue.sizeOfDeadLetterQueue();\n observableResult.observe(deadLetterQueueSize, {\n worker_name: this.options.name,\n });\n }\n\n async #updateConcurrencyLimitActiveMetric(observableResult: ObservableResult<Attributes>) {\n for (const [workerId, limiter] of Object.entries(this.limiters)) {\n observableResult.observe(limiter.activeCount, {\n worker_name: this.options.name,\n worker_id: workerId,\n });\n }\n }\n\n async #updateConcurrencyLimitPendingMetric(observableResult: ObservableResult<Attributes>) {\n for (const [workerId, limiter] of Object.entries(this.limiters)) {\n observableResult.observe(limiter.pendingCount, {\n worker_name: this.options.name,\n worker_id: workerId,\n });\n }\n }\n\n public start() {\n const { workers, tasksPerWorker } = this.concurrency;\n\n this.logger.info(\"Starting worker\", {\n workers,\n tasksPerWorker,\n concurrency: this.concurrency,\n });\n\n // Launch a number of \"worker loops\" on the main thread.\n for (let i = 0; i < workers; i++) {\n this.workerLoops.push(this.runWorkerLoop(`worker-${nanoid(12)}`, tasksPerWorker, i, workers));\n }\n\n this.setupShutdownHandlers();\n\n this.subscriber = createRedisClient(this.options.redisOptions, {\n onError: (error) => {\n this.logger.error(`RedisWorker subscriber redis client error:`, {\n error,\n keyPrefix: this.options.redisOptions.keyPrefix,\n });\n },\n });\n\n this.setupSubscriber();\n this.setupCron();\n\n return this;\n }\n\n /**\n * Enqueues a job for processing.\n * @param options - The enqueue options.\n * @param options.id - Optional unique identifier for the job. If not provided, one will be generated. It prevents duplication.\n * @param options.job - The job type from the worker catalog.\n * @param options.payload - The job payload that matches the schema defined in the catalog.\n * @param options.visibilityTimeoutMs - Optional visibility timeout in milliseconds. Defaults to value from catalog.\n * @param options.availableAt - Optional date when the job should become available for processing. Defaults to now.\n * @returns A promise that resolves when the job is enqueued.\n */\n enqueue<K extends keyof TCatalog>({\n id,\n job,\n payload,\n visibilityTimeoutMs,\n availableAt,\n cancellationKey,\n }: {\n id?: string;\n job: K;\n payload: z.infer<TCatalog[K][\"schema\"]>;\n visibilityTimeoutMs?: number;\n availableAt?: Date;\n cancellationKey?: string;\n }) {\n return startSpan(\n this.tracer,\n \"enqueue\",\n async (span) => {\n const timeout = visibilityTimeoutMs ?? this.options.catalog[job]?.visibilityTimeoutMs;\n\n if (!timeout) {\n throw new Error(`No visibility timeout found for job ${String(job)} with id ${id}`);\n }\n\n span.setAttribute(\"job_visibility_timeout_ms\", timeout);\n\n return this.withHistogram(\n this.metrics.enqueueDuration,\n this.queue.enqueue({\n id,\n job,\n item: payload,\n visibilityTimeoutMs: timeout,\n availableAt,\n cancellationKey,\n }),\n {\n job_type: String(job),\n has_available_at: availableAt ? \"true\" : \"false\",\n }\n );\n },\n {\n kind: SpanKind.PRODUCER,\n attributes: {\n job_type: String(job),\n job_id: id,\n },\n }\n );\n }\n\n /**\n * Enqueues a job for processing once. If the job is already in the queue, it will be ignored.\n * @param options - The enqueue options.\n * @param options.id - Required unique identifier for the job.\n * @param options.job - The job type from the worker catalog.\n * @param options.payload - The job payload that matches the schema defined in the catalog.\n * @param options.visibilityTimeoutMs - Optional visibility timeout in milliseconds. Defaults to value from catalog.\n * @param options.availableAt - Optional date when the job should become available for processing. Defaults to now.\n * @returns A promise that resolves when the job is enqueued.\n */\n enqueueOnce<K extends keyof TCatalog>({\n id,\n job,\n payload,\n visibilityTimeoutMs,\n availableAt,\n }: {\n id: string;\n job: K;\n payload: z.infer<TCatalog[K][\"schema\"]>;\n visibilityTimeoutMs?: number;\n availableAt?: Date;\n }) {\n return startSpan(\n this.tracer,\n \"enqueueOnce\",\n async (span) => {\n const timeout = visibilityTimeoutMs ?? this.options.catalog[job]?.visibilityTimeoutMs;\n\n if (!timeout) {\n throw new Error(`No visibility timeout found for job ${String(job)} with id ${id}`);\n }\n\n span.setAttribute(\"job_visibility_timeout_ms\", timeout);\n\n return this.withHistogram(\n this.metrics.enqueueDuration,\n this.queue.enqueueOnce({\n id,\n job,\n item: payload,\n visibilityTimeoutMs: timeout,\n availableAt,\n }),\n {\n job_type: String(job),\n has_available_at: availableAt ? \"true\" : \"false\",\n }\n );\n },\n {\n kind: SpanKind.PRODUCER,\n attributes: {\n job_type: String(job),\n job_id: id,\n },\n }\n );\n }\n\n /**\n * Reschedules an existing job to a new available date.\n * If the job isn't in the queue, it will be ignored.\n */\n reschedule(id: string, availableAt: Date) {\n return startSpan(\n this.tracer,\n \"reschedule\",\n async (span) => {\n return this.withHistogram(\n this.metrics.rescheduleDuration,\n this.queue.reschedule(id, availableAt)\n );\n },\n {\n kind: SpanKind.PRODUCER,\n attributes: {\n job_id: id,\n },\n }\n );\n }\n\n /**\n * Cancels a job before it's enqueued.\n * @param cancellationKey - The cancellation key to cancel.\n * @returns A promise that resolves when the job is cancelled.\n *\n * Any jobs enqueued with the same cancellation key will be not be enqueued.\n */\n cancel(cancellationKey: string) {\n return startSpan(this.tracer, \"cancel\", () => this.queue.cancel(cancellationKey));\n }\n\n ack(id: string) {\n return startSpan(\n this.tracer,\n \"ack\",\n () => {\n return this.withHistogram(this.metrics.ackDuration, this.queue.ack(id));\n },\n {\n attributes: {\n job_id: id,\n },\n }\n );\n }\n\n async getJob(id: string) {\n return this.queue.getJob(id);\n }\n\n /**\n * The main loop that each worker runs. It repeatedly polls for items,\n * processes them, and then waits before the next iteration.\n */\n private async runWorkerLoop(\n workerId: string,\n taskCount: number,\n workerIndex: number,\n totalWorkers: number\n ): Promise<void> {\n const limiter = pLimit(this.concurrency.limit);\n this.limiters[workerId] = limiter;\n\n const pollIntervalMs = this.options.pollIntervalMs ?? 1000;\n const immediatePollIntervalMs = this.options.immediatePollIntervalMs ?? 100;\n\n // Calculate the delay between starting each worker loop so that they don't all start at the same time.\n const delayBetweenWorkers = this.options.pollIntervalMs ?? 1000;\n const delay = delayBetweenWorkers * (totalWorkers - workerIndex);\n await Worker.delay(delay);\n\n this.logger.info(\"Starting worker loop\", {\n workerIndex,\n totalWorkers,\n delay,\n workerId,\n taskCount,\n pollIntervalMs,\n immediatePollIntervalMs,\n concurrencyOptions: this.concurrency,\n });\n\n while (!this.isShuttingDown) {\n // Check overall load. If at capacity, wait a bit before trying to dequeue more.\n if (limiter.activeCount + limiter.pendingCount >= this.concurrency.limit) {\n this.logger.debug(\"Worker at capacity, waiting\", {\n workerId,\n concurrencyOptions: this.concurrency,\n activeCount: limiter.activeCount,\n pendingCount: limiter.pendingCount,\n });\n\n await Worker.delay(pollIntervalMs);\n\n continue;\n }\n\n // If taskCount is 10, concurrency limit is 100, and there are 98 active workers, we should dequeue 2 items at most.\n // If taskCount is 10, concurrency limit is 100, and there are 12 active workers, we should dequeue 10 items at most.\n const $taskCount = Math.min(\n taskCount,\n this.concurrency.limit - limiter.activeCount - limiter.pendingCount\n );\n\n try {\n const items = await this.withHistogram(\n this.metrics.dequeueDuration,\n this.queue.dequeue($taskCount),\n {\n worker_id: workerId,\n task_count: $taskCount,\n }\n );\n\n if (items.length === 0) {\n this.logger.debug(\"No items to dequeue\", {\n workerId,\n concurrencyOptions: this.concurrency,\n activeCount: limiter.activeCount,\n pendingCount: limiter.pendingCount,\n });\n\n await Worker.delay(pollIntervalMs);\n continue;\n }\n\n this.logger.debug(\"Dequeued items\", {\n workerId,\n itemCount: items.length,\n concurrencyOptions: this.concurrency,\n activeCount: limiter.activeCount,\n pendingCount: limiter.pendingCount,\n });\n\n // Schedule each item using the limiter.\n for (const item of items) {\n limiter(() =>\n this.processItem(item as AnyQueueItem, items.length, workerId, limiter)\n ).catch((err) => {\n this.logger.error(\"Unhandled error in processItem:\", { error: err, workerId, item });\n });\n }\n } catch (error) {\n this.logger.error(\"Error dequeuing items:\", { name: this.options.name, error });\n await Worker.delay(pollIntervalMs);\n continue;\n }\n\n // Wait briefly before immediately polling again since we processed items\n await Worker.delay(immediatePollIntervalMs);\n }\n\n this.logger.info(\"Worker loop finished\", { workerId });\n }\n\n /**\n * Processes a single item.\n */\n private async processItem(\n { id, job, item, visibilityTimeoutMs, attempt, timestamp, deduplicationKey }: AnyQueueItem,\n batchSize: number,\n workerId: string,\n limiter: ReturnType<typeof pLimit>\n ): Promise<void> {\n const catalogItem = this.options.catalog[job as any];\n const handler = this.jobs[job as any];\n if (!handler) {\n this.logger.error(`Worker no handler found for job type: ${job}`);\n return;\n }\n\n if (!catalogItem) {\n this.logger.error(`Worker no catalog item found for job type: ${job}`);\n return;\n }\n\n await startSpan(\n this.tracer,\n \"processItem\",\n async () => {\n await this.withHistogram(\n this.metrics.jobDuration,\n handler({ id, payload: item, visibilityTimeoutMs, attempt, deduplicationKey }),\n {\n worker_id: workerId,\n batch_size: batchSize,\n job_type: job,\n attempt,\n }\n );\n\n // On success, acknowledge the item.\n await this.queue.ack(id, deduplicationKey);\n\n if (catalogItem.cron) {\n await this.rescheduleCronJob(job, catalogItem, item);\n }\n },\n {\n kind: SpanKind.CONSUMER,\n attributes: {\n job_id: id,\n job_type: job,\n attempt,\n job_timestamp: timestamp.getTime(),\n job_age_in_ms: Date.now() - timestamp.getTime(),\n worker_id: workerId,\n worker_limit_concurrency: limiter.concurrency,\n worker_limit_active: limiter.activeCount,\n worker_limit_pending: limiter.pendingCount,\n worker_name: this.options.name,\n batch_size: batchSize,\n },\n }\n ).catch(async (error) => {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n const shouldLogError = catalogItem.logErrors ?? true;\n\n const logAttributes = {\n name: this.options.name,\n id,\n job,\n item,\n visibilityTimeoutMs,\n error,\n errorMessage,\n };\n\n if (shouldLogError) {\n this.logger.error(`Worker error processing item`, logAttributes);\n } else {\n this.logger.info(`Worker failed to process item`, logAttributes);\n }\n\n // Attempt requeue logic.\n try {\n const newAttempt = attempt + 1;\n const retrySettings = {\n ...defaultRetrySettings,\n ...catalogItem?.retry,\n };\n const retryDelay = calculateNextRetryDelay(retrySettings, newAttempt);\n\n if (!retryDelay) {\n if (shouldLogError) {\n this.logger.error(`Worker item reached max attempts. Moving to DLQ.`, {\n ...logAttributes,\n attempt: newAttempt,\n });\n } else {\n this.logger.info(`Worker item reached max attempts. Moving to DLQ.`, {\n ...logAttributes,\n attempt: newAttempt,\n });\n }\n\n await this.queue.moveToDeadLetterQueue(id, errorMessage);\n\n if (catalogItem.cron) {\n await this.rescheduleCronJob(job, catalogItem, item);\n }\n\n return;\n }\n\n const retryDate = new Date(Date.now() + retryDelay);\n this.logger.info(`Worker requeuing failed item with delay`, {\n name: this.options.name,\n id,\n job,\n item,\n retryDate,\n retryDelay,\n visibilityTimeoutMs,\n attempt: newAttempt,\n });\n await this.queue.enqueue({\n id,\n job,\n item,\n availableAt: retryDate,\n attempt: newAttempt,\n visibilityTimeoutMs,\n });\n } catch (requeueError) {\n this.logger.error(\n `Worker failed to requeue item. It will be retried after the visibility timeout.`,\n {\n name: this.options.name,\n id,\n job,\n item,\n visibilityTimeoutMs,\n error: requeueError,\n }\n );\n }\n });\n }\n\n private async withHistogram<T>(\n histogram: Histogram | undefined,\n promise: Promise<T>,\n labels?: Record<string, string | number>\n ): Promise<T> {\n if (!histogram) {\n return promise;\n }\n\n const start = Date.now();\n try {\n return await promise;\n } finally {\n const duration = (Date.now() - start) / 1000; // Convert to seconds\n histogram.record(duration, { worker_name: this.options.name, ...labels });\n }\n }\n\n // A simple helper to delay for a given number of milliseconds.\n private static delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n private setupCron() {\n const cronJobs = Object.entries(this.options.catalog).filter(([_, value]) => value.cron);\n\n if (cronJobs.length === 0) {\n return;\n }\n\n this.logger.info(\"Setting up cron jobs\", {\n cronJobs: cronJobs.map(([job, value]) => ({\n job,\n cron: value.cron,\n jitterInMs: value.jitterInMs,\n })),\n });\n\n // For each cron job, we need to try and enqueue a job with the next timestamp of the cron job.\n const enqueuePromises = cronJobs.map(([job, value]) =>\n this.enqueueCronJob(value.cron!, job, value.jitterInMs)\n );\n\n Promise.allSettled(enqueuePromises).then((results) => {\n results.forEach((result) => {\n if (result.status === \"fulfilled\") {\n this.logger.info(\"Enqueued cron job\", { result: result.value });\n } else {\n this.logger.error(\"Failed to enqueue cron job\", { reason: result.reason });\n }\n });\n });\n }\n\n private async enqueueCronJob(cron: string, job: string, jitter?: number, lastTimestamp?: Date) {\n const scheduledAt = this.calculateNextScheduledAt(cron, lastTimestamp);\n const identifier = [job, this.timestampIdentifier(scheduledAt)].join(\":\");\n // Calculate the availableAt date by calculating a random number between -jitter/2 and jitter/2 and adding it to the scheduledAt\n const appliedJitter = typeof jitter === \"number\" ? Math.random() * jitter - jitter / 2 : 0;\n const availableAt = new Date(scheduledAt.getTime() + appliedJitter);\n\n const enqueued = await this.enqueueOnce({\n id: identifier,\n job,\n payload: {\n timestamp: scheduledAt.getTime(),\n lastTimestamp: lastTimestamp?.getTime(),\n cron,\n },\n availableAt,\n });\n\n this.logger.info(\"Enqueued cron job\", {\n identifier,\n cron,\n job,\n scheduledAt,\n enqueued,\n availableAt,\n appliedJitter,\n jitter,\n });\n\n return {\n identifier,\n cron,\n job,\n scheduledAt,\n enqueued,\n };\n }\n\n private async rescheduleCronJob(job: string, catalogItem: WorkerCatalogItem, item: CronSchema) {\n if (!catalogItem.cron) {\n return;\n }\n\n return this.enqueueCronJob(\n catalogItem.cron,\n job,\n catalogItem.jitterInMs,\n new Date(item.timestamp)\n );\n }\n\n private calculateNextScheduledAt(cron: string, lastTimestamp?: Date): Date {\n const scheduledAt = parseExpression(cron, {\n currentDate: lastTimestamp,\n })\n .next()\n .toDate();\n\n // If scheduledAt is in the past, we should just calculate the next one based on the current time\n if (scheduledAt < new Date()) {\n return this.calculateNextScheduledAt(cron);\n }\n\n return scheduledAt;\n }\n\n private timestampIdentifier(timestamp: Date) {\n const year = timestamp.getUTCFullYear();\n const month = timestamp.getUTCMonth();\n const day = timestamp.getUTCDate();\n const hour = timestamp.getUTCHours();\n const minute = timestamp.getUTCMinutes();\n const second = timestamp.getUTCSeconds();\n\n return `${year}-${month}-${day}-${hour}-${minute}-${second}`;\n }\n\n private setupSubscriber() {\n const channel = `${this.options.name}:redrive`;\n this.subscriber?.subscribe(channel, (err) => {\n if (err) {\n this.logger.error(`Failed to subscribe to ${channel}`, { error: err });\n } else {\n this.logger.debug(`Subscribed to ${channel}`);\n }\n });\n\n this.subscriber?.on(\"message\", this.handleRedriveMessage.bind(this));\n }\n\n private async handleRedriveMessage(channel: string, message: string) {\n try {\n const { id } = JSON.parse(message) as any;\n if (typeof id !== \"string\") {\n throw new Error(\"Invalid message format: id must be a string\");\n }\n await this.withHistogram(\n this.metrics.redriveDuration,\n this.queue.redriveFromDeadLetterQueue(id)\n );\n this.logger.log(`Redrived item ${id} from Dead Letter Queue`);\n } catch (error) {\n this.logger.error(\"Error processing redrive message\", { error, message });\n }\n }\n\n private setupShutdownHandlers() {\n shutdownManager.register(`redis-worker:${this.options.name}`, this.shutdown.bind(this));\n }\n\n private async shutdown(signal?: NodeJS.Signals) {\n if (this.isShuttingDown) {\n this.logger.log(\"Worker already shutting down\", { signal });\n return;\n }\n\n this.isShuttingDown = true;\n this.logger.log(\"Shutting down worker loops...\", { signal });\n\n // Wait for all worker loops to finish.\n await Promise.race([\n Promise.all(this.workerLoops),\n Worker.delay(this.shutdownTimeoutMs).then(() => {\n this.logger.error(\"Worker shutdown timed out\", {\n signal,\n shutdownTimeoutMs: this.shutdownTimeoutMs,\n });\n }),\n ]);\n\n await this.subscriber?.unsubscribe();\n await this.subscriber?.quit();\n await this.queue.close();\n this.logger.log(\"All workers and subscribers shut down.\", { signal });\n }\n\n public async stop() {\n shutdownManager.unregister(`redis-worker:${this.options.name}`);\n await this.shutdown();\n }\n}\n\nexport { Worker };\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/@ioredis+commands@1.2.0/node_modules/@ioredis/commands/built/commands.json","../../../node_modules/.pnpm/@ioredis+commands@1.2.0/node_modules/@ioredis/commands/built/index.js","../../../node_modules/.pnpm/standard-as-callback@2.1.0/node_modules/standard-as-callback/built/utils.js","../../../node_modules/.pnpm/standard-as-callback@2.1.0/node_modules/standard-as-callback/built/index.js","../../../node_modules/.pnpm/redis-errors@1.2.0/node_modules/redis-errors/lib/old.js","../../../node_modules/.pnpm/redis-errors@1.2.0/node_modules/redis-errors/lib/modern.js","../../../node_modules/.pnpm/redis-errors@1.2.0/node_modules/redis-errors/index.js","../../../node_modules/.pnpm/cluster-key-slot@1.1.2/node_modules/cluster-key-slot/lib/index.js","../../../node_modules/.pnpm/lodash.defaults@4.2.0/node_modules/lodash.defaults/index.js","../../../node_modules/.pnpm/lodash.isarguments@3.1.0/node_modules/lodash.isarguments/index.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/utils/lodash.js","../../../node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js","../../../node_modules/.pnpm/debug@4.3.7_supports-color@10.0.0/node_modules/debug/src/common.js","../../../node_modules/.pnpm/debug@4.3.7_supports-color@10.0.0/node_modules/debug/src/browser.js","../../../node_modules/.pnpm/supports-color@10.0.0/node_modules/supports-color/index.js","../../../node_modules/.pnpm/debug@4.3.7_supports-color@10.0.0/node_modules/debug/src/node.js","../../../node_modules/.pnpm/debug@4.3.7_supports-color@10.0.0/node_modules/debug/src/index.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/utils/debug.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/constants/TLSProfiles.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/utils/index.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/Command.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/errors/ClusterAllFailedError.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/ScanStream.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/autoPipelining.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/Script.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/utils/Commander.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/Pipeline.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/transaction.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/utils/applyMixin.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/cluster/ClusterOptions.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/cluster/util.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/cluster/ClusterSubscriber.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/cluster/ConnectionPool.js","../../../node_modules/.pnpm/denque@2.1.0/node_modules/denque/index.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/cluster/DelayQueue.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/cluster/index.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/connectors/AbstractConnector.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/connectors/StandaloneConnector.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/connectors/SentinelConnector/SentinelIterator.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/connectors/SentinelConnector/FailoverDetector.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/connectors/SentinelConnector/index.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/connectors/index.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/errors/MaxRetriesPerRequestError.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/errors/index.js","../../../node_modules/.pnpm/redis-parser@3.0.0/node_modules/redis-parser/lib/parser.js","../../../node_modules/.pnpm/redis-parser@3.0.0/node_modules/redis-parser/index.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/SubscriptionSet.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/DataHandler.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/redis/event_handler.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/redis/RedisOptions.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/Redis.js","../../../node_modules/.pnpm/ioredis@5.3.2/node_modules/ioredis/built/index.js","../../../internal-packages/redis/src/index.ts","../../../node_modules/.pnpm/nanoid@5.1.2/node_modules/nanoid/url-alphabet/index.js","../../../node_modules/.pnpm/nanoid@5.1.2/node_modules/nanoid/index.js","../src/queue.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/platform/node/globalThis.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/version.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/internal/semver.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/internal/global-utils.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/diag/ComponentLogger.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/diag/types.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/diag/internal/logLevelLogger.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/api/diag.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/context/context.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/metrics/NoopMeter.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/metrics/Metric.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/context/NoopContextManager.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/api/context.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/trace_flags.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/invalid-span-constants.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/NonRecordingSpan.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/context-utils.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/spancontext-utils.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/NoopTracer.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/ProxyTracer.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/NoopTracerProvider.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/ProxyTracerProvider.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/span_kind.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/status.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/metrics/NoopMeterProvider.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/api/metrics.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/metrics-api.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/api/trace.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace-api.ts","../../../internal-packages/tracing/src/index.ts","../../../node_modules/.pnpm/yocto-queue@1.1.1/node_modules/yocto-queue/index.js","../../../node_modules/.pnpm/p-limit@6.2.0/node_modules/p-limit/index.js","../src/worker.ts","../src/fair-queue/concurrency.ts","../src/fair-queue/masterQueue.ts","../src/fair-queue/telemetry.ts","../src/fair-queue/visibility.ts","../src/fair-queue/workerQueue.ts","../src/fair-queue/keyProducer.ts","../src/fair-queue/scheduler.ts","../src/fair-queue/schedulers/drr.ts","../src/fair-queue/schedulers/weighted.ts","../src/fair-queue/schedulers/roundRobin.ts","../src/fair-queue/retry.ts","../src/fair-queue/index.ts"],"names":["flags","hasFlag","args","keys","require_built","toUTF8Array","generate","require_lodash","env","process","os","tty","supportsColor","useColors","require_utils","timeout","pipeline","exec","j","err","_a","Buffer","Redis","Logger","crypto","logger","isCompatible","DiagComponentLogger","DiagLogLevel","DiagAPI","__spreadArray","__read","BaseContext","context","NoopMeter","NoopMetric","NoopCounterMetric","NoopUpDownCounterMetric","NoopGaugeMetric","NoopHistogramMetric","NoopObservableMetric","NoopObservableCounterMetric","NoopObservableGaugeMetric","NoopObservableUpDownCounterMetric","ValueType","NoopContextManager","API_NAME","ContextAPI","TraceFlags","NonRecordingSpan","NoopTracer","ProxyTracer","NoopTracerProvider","ProxyTracerProvider","SpanKind","SpanStatusCode","NoopMeterProvider","MetricsAPI","TraceAPI","z","calculateNextRetryDelay","parseExpression","shutdownManager","jumpHash","seedrandom","setInterval"],"mappings":"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AAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,IAAA;AAAA,MAAQ,GAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,GAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,IAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MACxD,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,KAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,IAAA;AAAA,MAAQ,KAAA;AAAA,MA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","file":"index.cjs","sourcesContent":["{\n \"acl\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"append\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"asking\": {\n \"arity\": 1,\n \"flags\": [\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"auth\": {\n \"arity\": -2,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"no_auth\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"bgrewriteaof\": {\n \"arity\": 1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"no_async_loading\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"bgsave\": {\n \"arity\": -1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"no_async_loading\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"bitcount\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"bitfield\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"bitfield_ro\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"bitop\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 2,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"bitpos\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"blmove\": {\n \"arity\": 6,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"noscript\",\n \"blocking\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"blmpop\": {\n \"arity\": -5,\n \"flags\": [\n \"write\",\n \"blocking\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"blpop\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"noscript\",\n \"blocking\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -2,\n \"step\": 1\n },\n \"brpop\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"noscript\",\n \"blocking\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -2,\n \"step\": 1\n },\n \"brpoplpush\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"noscript\",\n \"blocking\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"bzmpop\": {\n \"arity\": -5,\n \"flags\": [\n \"write\",\n \"blocking\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"bzpopmax\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"noscript\",\n \"blocking\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -2,\n \"step\": 1\n },\n \"bzpopmin\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"noscript\",\n \"blocking\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -2,\n \"step\": 1\n },\n \"client\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"cluster\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"command\": {\n \"arity\": -1,\n \"flags\": [\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"config\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"copy\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"dbsize\": {\n \"arity\": 1,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"debug\": {\n \"arity\": -2,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"decr\": {\n \"arity\": 2,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"decrby\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"del\": {\n \"arity\": -2,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"discard\": {\n \"arity\": 1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"dump\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"echo\": {\n \"arity\": 2,\n \"flags\": [\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"eval\": {\n \"arity\": -3,\n \"flags\": [\n \"noscript\",\n \"stale\",\n \"skip_monitor\",\n \"no_mandatory_keys\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"eval_ro\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"noscript\",\n \"stale\",\n \"skip_monitor\",\n \"no_mandatory_keys\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"evalsha\": {\n \"arity\": -3,\n \"flags\": [\n \"noscript\",\n \"stale\",\n \"skip_monitor\",\n \"no_mandatory_keys\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"evalsha_ro\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"noscript\",\n \"stale\",\n \"skip_monitor\",\n \"no_mandatory_keys\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"exec\": {\n \"arity\": 1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"skip_slowlog\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"exists\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"expire\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"expireat\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"expiretime\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"failover\": {\n \"arity\": -1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"fcall\": {\n \"arity\": -3,\n \"flags\": [\n \"noscript\",\n \"stale\",\n \"skip_monitor\",\n \"no_mandatory_keys\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"fcall_ro\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"noscript\",\n \"stale\",\n \"skip_monitor\",\n \"no_mandatory_keys\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"flushall\": {\n \"arity\": -1,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"flushdb\": {\n \"arity\": -1,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"function\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"geoadd\": {\n \"arity\": -5,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"geodist\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"geohash\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"geopos\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"georadius\": {\n \"arity\": -6,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"movablekeys\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"georadius_ro\": {\n \"arity\": -6,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"georadiusbymember\": {\n \"arity\": -5,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"movablekeys\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"georadiusbymember_ro\": {\n \"arity\": -5,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"geosearch\": {\n \"arity\": -7,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"geosearchstore\": {\n \"arity\": -8,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"get\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"getbit\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"getdel\": {\n \"arity\": 2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"getex\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"getrange\": {\n \"arity\": 4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"getset\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hdel\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hello\": {\n \"arity\": -1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"no_auth\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"hexists\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hget\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hgetall\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hincrby\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hincrbyfloat\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hkeys\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hlen\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hmget\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hmset\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hrandfield\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hscan\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hset\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hsetnx\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hstrlen\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"hvals\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"incr\": {\n \"arity\": 2,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"incrby\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"incrbyfloat\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"info\": {\n \"arity\": -1,\n \"flags\": [\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"keys\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"lastsave\": {\n \"arity\": 1,\n \"flags\": [\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"latency\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"lcs\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"lindex\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"linsert\": {\n \"arity\": 5,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"llen\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"lmove\": {\n \"arity\": 5,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"lmpop\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"lolwut\": {\n \"arity\": -1,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"lpop\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"lpos\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"lpush\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"lpushx\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"lrange\": {\n \"arity\": 4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"lrem\": {\n \"arity\": 4,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"lset\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"ltrim\": {\n \"arity\": 4,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"memory\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"mget\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"migrate\": {\n \"arity\": -6,\n \"flags\": [\n \"write\",\n \"movablekeys\"\n ],\n \"keyStart\": 3,\n \"keyStop\": 3,\n \"step\": 1\n },\n \"module\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"monitor\": {\n \"arity\": 1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"move\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"mset\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 2\n },\n \"msetnx\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 2\n },\n \"multi\": {\n \"arity\": 1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"object\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"persist\": {\n \"arity\": 2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"pexpire\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"pexpireat\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"pexpiretime\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"pfadd\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"pfcount\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"pfdebug\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"admin\"\n ],\n \"keyStart\": 2,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"pfmerge\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"pfselftest\": {\n \"arity\": 1,\n \"flags\": [\n \"admin\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"ping\": {\n \"arity\": -1,\n \"flags\": [\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"psetex\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"psubscribe\": {\n \"arity\": -2,\n \"flags\": [\n \"pubsub\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"psync\": {\n \"arity\": -3,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"no_async_loading\",\n \"no_multi\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"pttl\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"publish\": {\n \"arity\": 3,\n \"flags\": [\n \"pubsub\",\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"pubsub\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"punsubscribe\": {\n \"arity\": -1,\n \"flags\": [\n \"pubsub\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"quit\": {\n \"arity\": -1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"no_auth\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"randomkey\": {\n \"arity\": 1,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"readonly\": {\n \"arity\": 1,\n \"flags\": [\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"readwrite\": {\n \"arity\": 1,\n \"flags\": [\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"rename\": {\n \"arity\": 3,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"renamenx\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"replconf\": {\n \"arity\": -1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"loading\",\n \"stale\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"replicaof\": {\n \"arity\": 3,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"stale\",\n \"no_async_loading\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"reset\": {\n \"arity\": 1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"no_auth\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"restore\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"restore-asking\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"asking\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"role\": {\n \"arity\": 1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"rpop\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"rpoplpush\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"rpush\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"rpushx\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"sadd\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"save\": {\n \"arity\": 1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"no_async_loading\",\n \"no_multi\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"scan\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"scard\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"script\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"sdiff\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"sdiffstore\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"select\": {\n \"arity\": 2,\n \"flags\": [\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"set\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"setbit\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"setex\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"setnx\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"setrange\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"shutdown\": {\n \"arity\": -1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"loading\",\n \"stale\",\n \"no_multi\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"sinter\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"sintercard\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"sinterstore\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"sismember\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"slaveof\": {\n \"arity\": 3,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"stale\",\n \"no_async_loading\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"slowlog\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"smembers\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"smismember\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"smove\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"sort\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"movablekeys\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"sort_ro\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\",\n \"movablekeys\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"spop\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"spublish\": {\n \"arity\": 3,\n \"flags\": [\n \"pubsub\",\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"srandmember\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"srem\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"sscan\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"ssubscribe\": {\n \"arity\": -2,\n \"flags\": [\n \"pubsub\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"strlen\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"subscribe\": {\n \"arity\": -2,\n \"flags\": [\n \"pubsub\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"substr\": {\n \"arity\": 4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"sunion\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"sunionstore\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"sunsubscribe\": {\n \"arity\": -1,\n \"flags\": [\n \"pubsub\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"swapdb\": {\n \"arity\": 3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"sync\": {\n \"arity\": 1,\n \"flags\": [\n \"admin\",\n \"noscript\",\n \"no_async_loading\",\n \"no_multi\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"time\": {\n \"arity\": 1,\n \"flags\": [\n \"loading\",\n \"stale\",\n \"fast\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"touch\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"ttl\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"type\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"unlink\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"unsubscribe\": {\n \"arity\": -1,\n \"flags\": [\n \"pubsub\",\n \"noscript\",\n \"loading\",\n \"stale\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"unwatch\": {\n \"arity\": 1,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"allow_busy\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"wait\": {\n \"arity\": 3,\n \"flags\": [\n \"noscript\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"watch\": {\n \"arity\": -2,\n \"flags\": [\n \"noscript\",\n \"loading\",\n \"stale\",\n \"fast\",\n \"allow_busy\"\n ],\n \"keyStart\": 1,\n \"keyStop\": -1,\n \"step\": 1\n },\n \"xack\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xadd\": {\n \"arity\": -5,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xautoclaim\": {\n \"arity\": -6,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xclaim\": {\n \"arity\": -6,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xdel\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xgroup\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"xinfo\": {\n \"arity\": -2,\n \"flags\": [],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"xlen\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xpending\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xrange\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xread\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\",\n \"blocking\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"xreadgroup\": {\n \"arity\": -7,\n \"flags\": [\n \"write\",\n \"blocking\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"xrevrange\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xsetid\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"xtrim\": {\n \"arity\": -4,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zadd\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zcard\": {\n \"arity\": 2,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zcount\": {\n \"arity\": 4,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zdiff\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"zdiffstore\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"movablekeys\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zincrby\": {\n \"arity\": 4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zinter\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"zintercard\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"zinterstore\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"movablekeys\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zlexcount\": {\n \"arity\": 4,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zmpop\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"zmscore\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zpopmax\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zpopmin\": {\n \"arity\": -2,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrandmember\": {\n \"arity\": -2,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrange\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrangebylex\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrangebyscore\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrangestore\": {\n \"arity\": -5,\n \"flags\": [\n \"write\",\n \"denyoom\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 2,\n \"step\": 1\n },\n \"zrank\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrem\": {\n \"arity\": -3,\n \"flags\": [\n \"write\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zremrangebylex\": {\n \"arity\": 4,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zremrangebyrank\": {\n \"arity\": 4,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zremrangebyscore\": {\n \"arity\": 4,\n \"flags\": [\n \"write\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrevrange\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrevrangebylex\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrevrangebyscore\": {\n \"arity\": -4,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zrevrank\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zscan\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zscore\": {\n \"arity\": 3,\n \"flags\": [\n \"readonly\",\n \"fast\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n },\n \"zunion\": {\n \"arity\": -3,\n \"flags\": [\n \"readonly\",\n \"movablekeys\"\n ],\n \"keyStart\": 0,\n \"keyStop\": 0,\n \"step\": 0\n },\n \"zunionstore\": {\n \"arity\": -4,\n \"flags\": [\n \"write\",\n \"denyoom\",\n \"movablekeys\"\n ],\n \"keyStart\": 1,\n \"keyStop\": 1,\n \"step\": 1\n }\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getKeyIndexes = exports.hasFlag = exports.exists = exports.list = void 0;\nconst commands_json_1 = __importDefault(require(\"./commands.json\"));\n/**\n * Redis command list\n *\n * All commands are lowercased.\n */\nexports.list = Object.keys(commands_json_1.default);\nconst flags = {};\nexports.list.forEach((commandName) => {\n flags[commandName] = commands_json_1.default[commandName].flags.reduce(function (flags, flag) {\n flags[flag] = true;\n return flags;\n }, {});\n});\n/**\n * Check if the command exists\n */\nfunction exists(commandName) {\n return Boolean(commands_json_1.default[commandName]);\n}\nexports.exists = exists;\n/**\n * Check if the command has the flag\n *\n * Some of possible flags: readonly, noscript, loading\n */\nfunction hasFlag(commandName, flag) {\n if (!flags[commandName]) {\n throw new Error(\"Unknown command \" + commandName);\n }\n return Boolean(flags[commandName][flag]);\n}\nexports.hasFlag = hasFlag;\n/**\n * Get indexes of keys in the command arguments\n *\n * @example\n * ```javascript\n * getKeyIndexes('set', ['key', 'value']) // [0]\n * getKeyIndexes('mget', ['key1', 'key2']) // [0, 1]\n * ```\n */\nfunction getKeyIndexes(commandName, args, options) {\n const command = commands_json_1.default[commandName];\n if (!command) {\n throw new Error(\"Unknown command \" + commandName);\n }\n if (!Array.isArray(args)) {\n throw new Error(\"Expect args to be an array\");\n }\n const keys = [];\n const parseExternalKey = Boolean(options && options.parseExternalKey);\n const takeDynamicKeys = (args, startIndex) => {\n const keys = [];\n const keyStop = Number(args[startIndex]);\n for (let i = 0; i < keyStop; i++) {\n keys.push(i + startIndex + 1);\n }\n return keys;\n };\n const takeKeyAfterToken = (args, startIndex, token) => {\n for (let i = startIndex; i < args.length - 1; i += 1) {\n if (String(args[i]).toLowerCase() === token.toLowerCase()) {\n return i + 1;\n }\n }\n return null;\n };\n switch (commandName) {\n case \"zunionstore\":\n case \"zinterstore\":\n case \"zdiffstore\":\n keys.push(0, ...takeDynamicKeys(args, 1));\n break;\n case \"eval\":\n case \"evalsha\":\n case \"eval_ro\":\n case \"evalsha_ro\":\n case \"fcall\":\n case \"fcall_ro\":\n case \"blmpop\":\n case \"bzmpop\":\n keys.push(...takeDynamicKeys(args, 1));\n break;\n case \"sintercard\":\n case \"lmpop\":\n case \"zunion\":\n case \"zinter\":\n case \"zmpop\":\n case \"zintercard\":\n case \"zdiff\": {\n keys.push(...takeDynamicKeys(args, 0));\n break;\n }\n case \"georadius\": {\n keys.push(0);\n const storeKey = takeKeyAfterToken(args, 5, \"STORE\");\n if (storeKey)\n keys.push(storeKey);\n const distKey = takeKeyAfterToken(args, 5, \"STOREDIST\");\n if (distKey)\n keys.push(distKey);\n break;\n }\n case \"georadiusbymember\": {\n keys.push(0);\n const storeKey = takeKeyAfterToken(args, 4, \"STORE\");\n if (storeKey)\n keys.push(storeKey);\n const distKey = takeKeyAfterToken(args, 4, \"STOREDIST\");\n if (distKey)\n keys.push(distKey);\n break;\n }\n case \"sort\":\n case \"sort_ro\":\n keys.push(0);\n for (let i = 1; i < args.length - 1; i++) {\n let arg = args[i];\n if (typeof arg !== \"string\") {\n continue;\n }\n const directive = arg.toUpperCase();\n if (directive === \"GET\") {\n i += 1;\n arg = args[i];\n if (arg !== \"#\") {\n if (parseExternalKey) {\n keys.push([i, getExternalKeyNameLength(arg)]);\n }\n else {\n keys.push(i);\n }\n }\n }\n else if (directive === \"BY\") {\n i += 1;\n if (parseExternalKey) {\n keys.push([i, getExternalKeyNameLength(args[i])]);\n }\n else {\n keys.push(i);\n }\n }\n else if (directive === \"STORE\") {\n i += 1;\n keys.push(i);\n }\n }\n break;\n case \"migrate\":\n if (args[2] === \"\") {\n for (let i = 5; i < args.length - 1; i++) {\n const arg = args[i];\n if (typeof arg === \"string\" && arg.toUpperCase() === \"KEYS\") {\n for (let j = i + 1; j < args.length; j++) {\n keys.push(j);\n }\n break;\n }\n }\n }\n else {\n keys.push(2);\n }\n break;\n case \"xreadgroup\":\n case \"xread\":\n // Keys are 1st half of the args after STREAMS argument.\n for (let i = commandName === \"xread\" ? 0 : 3; i < args.length - 1; i++) {\n if (String(args[i]).toUpperCase() === \"STREAMS\") {\n for (let j = i + 1; j <= i + (args.length - 1 - i) / 2; j++) {\n keys.push(j);\n }\n break;\n }\n }\n break;\n default:\n // Step has to be at least one in this case, otherwise the command does\n // not contain a key.\n if (command.step > 0) {\n const keyStart = command.keyStart - 1;\n const keyStop = command.keyStop > 0\n ? command.keyStop\n : args.length + command.keyStop + 1;\n for (let i = keyStart; i < keyStop; i += command.step) {\n keys.push(i);\n }\n }\n break;\n }\n return keys;\n}\nexports.getKeyIndexes = getKeyIndexes;\nfunction getExternalKeyNameLength(key) {\n if (typeof key !== \"string\") {\n key = String(key);\n }\n const hashPos = key.indexOf(\"->\");\n return hashPos === -1 ? key.length : hashPos;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.tryCatch = exports.errorObj = void 0;\n//Try catch is not supported in optimizing\n//compiler, so it is isolated\nexports.errorObj = { e: {} };\nlet tryCatchTarget;\nfunction tryCatcher(err, val) {\n try {\n const target = tryCatchTarget;\n tryCatchTarget = null;\n return target.apply(this, arguments);\n }\n catch (e) {\n exports.errorObj.e = e;\n return exports.errorObj;\n }\n}\nfunction tryCatch(fn) {\n tryCatchTarget = fn;\n return tryCatcher;\n}\nexports.tryCatch = tryCatch;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils_1 = require(\"./utils\");\nfunction throwLater(e) {\n setTimeout(function () {\n throw e;\n }, 0);\n}\nfunction asCallback(promise, nodeback, options) {\n if (typeof nodeback === \"function\") {\n promise.then((val) => {\n let ret;\n if (options !== undefined &&\n Object(options).spread &&\n Array.isArray(val)) {\n ret = utils_1.tryCatch(nodeback).apply(undefined, [null].concat(val));\n }\n else {\n ret =\n val === undefined\n ? utils_1.tryCatch(nodeback)(null)\n : utils_1.tryCatch(nodeback)(null, val);\n }\n if (ret === utils_1.errorObj) {\n throwLater(ret.e);\n }\n }, (cause) => {\n if (!cause) {\n const newReason = new Error(cause + \"\");\n Object.assign(newReason, { cause });\n cause = newReason;\n }\n const ret = utils_1.tryCatch(nodeback)(cause);\n if (ret === utils_1.errorObj) {\n throwLater(ret.e);\n }\n });\n }\n return promise;\n}\nexports.default = asCallback;\n","'use strict'\n\nconst assert = require('assert')\nconst util = require('util')\n\n// RedisError\n\nfunction RedisError (message) {\n Object.defineProperty(this, 'message', {\n value: message || '',\n configurable: true,\n writable: true\n })\n Error.captureStackTrace(this, this.constructor)\n}\n\nutil.inherits(RedisError, Error)\n\nObject.defineProperty(RedisError.prototype, 'name', {\n value: 'RedisError',\n configurable: true,\n writable: true\n})\n\n// ParserError\n\nfunction ParserError (message, buffer, offset) {\n assert(buffer)\n assert.strictEqual(typeof offset, 'number')\n\n Object.defineProperty(this, 'message', {\n value: message || '',\n configurable: true,\n writable: true\n })\n\n const tmp = Error.stackTraceLimit\n Error.stackTraceLimit = 2\n Error.captureStackTrace(this, this.constructor)\n Error.stackTraceLimit = tmp\n this.offset = offset\n this.buffer = buffer\n}\n\nutil.inherits(ParserError, RedisError)\n\nObject.defineProperty(ParserError.prototype, 'name', {\n value: 'ParserError',\n configurable: true,\n writable: true\n})\n\n// ReplyError\n\nfunction ReplyError (message) {\n Object.defineProperty(this, 'message', {\n value: message || '',\n configurable: true,\n writable: true\n })\n const tmp = Error.stackTraceLimit\n Error.stackTraceLimit = 2\n Error.captureStackTrace(this, this.constructor)\n Error.stackTraceLimit = tmp\n}\n\nutil.inherits(ReplyError, RedisError)\n\nObject.defineProperty(ReplyError.prototype, 'name', {\n value: 'ReplyError',\n configurable: true,\n writable: true\n})\n\n// AbortError\n\nfunction AbortError (message) {\n Object.defineProperty(this, 'message', {\n value: message || '',\n configurable: true,\n writable: true\n })\n Error.captureStackTrace(this, this.constructor)\n}\n\nutil.inherits(AbortError, RedisError)\n\nObject.defineProperty(AbortError.prototype, 'name', {\n value: 'AbortError',\n configurable: true,\n writable: true\n})\n\n// InterruptError\n\nfunction InterruptError (message) {\n Object.defineProperty(this, 'message', {\n value: message || '',\n configurable: true,\n writable: true\n })\n Error.captureStackTrace(this, this.constructor)\n}\n\nutil.inherits(InterruptError, AbortError)\n\nObject.defineProperty(InterruptError.prototype, 'name', {\n value: 'InterruptError',\n configurable: true,\n writable: true\n})\n\nmodule.exports = {\n RedisError,\n ParserError,\n ReplyError,\n AbortError,\n InterruptError\n}\n","'use strict'\n\nconst assert = require('assert')\n\nclass RedisError extends Error {\n get name () {\n return this.constructor.name\n }\n}\n\nclass ParserError extends RedisError {\n constructor (message, buffer, offset) {\n assert(buffer)\n assert.strictEqual(typeof offset, 'number')\n\n const tmp = Error.stackTraceLimit\n Error.stackTraceLimit = 2\n super(message)\n Error.stackTraceLimit = tmp\n this.offset = offset\n this.buffer = buffer\n }\n\n get name () {\n return this.constructor.name\n }\n}\n\nclass ReplyError extends RedisError {\n constructor (message) {\n const tmp = Error.stackTraceLimit\n Error.stackTraceLimit = 2\n super(message)\n Error.stackTraceLimit = tmp\n }\n get name () {\n return this.constructor.name\n }\n}\n\nclass AbortError extends RedisError {\n get name () {\n return this.constructor.name\n }\n}\n\nclass InterruptError extends AbortError {\n get name () {\n return this.constructor.name\n }\n}\n\nmodule.exports = {\n RedisError,\n ParserError,\n ReplyError,\n AbortError,\n InterruptError\n}\n","'use strict'\n\nconst Errors = process.version.charCodeAt(1) < 55 && process.version.charCodeAt(2) === 46\n ? require('./lib/old') // Node.js < 7\n : require('./lib/modern')\n\nmodule.exports = Errors\n","/*\n * Copyright 2001-2010 Georges Menie (www.menie.org)\n * Copyright 2010 Salvatore Sanfilippo (adapted to Redis coding style)\n * Copyright 2015 Zihua Li (http://zihua.li) (ported to JavaScript)\n * Copyright 2016 Mike Diarmid (http://github.com/salakar) (re-write for performance, ~700% perf inc)\n * All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of the University of California, Berkeley nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* CRC16 implementation according to CCITT standards.\n *\n * Note by @antirez: this is actually the XMODEM CRC 16 algorithm, using the\n * following parameters:\n *\n * Name : \"XMODEM\", also known as \"ZMODEM\", \"CRC-16/ACORN\"\n * Width : 16 bit\n * Poly : 1021 (That is actually x^16 + x^12 + x^5 + 1)\n * Initialization : 0000\n * Reflect Input byte : False\n * Reflect Output CRC : False\n * Xor constant to output CRC : 0000\n * Output for \"123456789\" : 31C3\n */\n\nvar lookup = [\n 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,\n 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,\n 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,\n 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,\n 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,\n 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,\n 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,\n 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,\n 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,\n 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,\n 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,\n 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,\n 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,\n 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,\n 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,\n 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,\n 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,\n 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,\n 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,\n 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,\n 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,\n 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,\n 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,\n 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,\n 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,\n 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,\n 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,\n 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,\n 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,\n 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,\n 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,\n 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0\n];\n\n/**\n * Convert a string to a UTF8 array - faster than via buffer\n * @param str\n * @returns {Array}\n */\nvar toUTF8Array = function toUTF8Array(str) {\n var char;\n var i = 0;\n var p = 0;\n var utf8 = [];\n var len = str.length;\n\n for (; i < len; i++) {\n char = str.charCodeAt(i);\n if (char < 128) {\n utf8[p++] = char;\n } else if (char < 2048) {\n utf8[p++] = (char >> 6) | 192;\n utf8[p++] = (char & 63) | 128;\n } else if (\n ((char & 0xFC00) === 0xD800) && (i + 1) < str.length &&\n ((str.charCodeAt(i + 1) & 0xFC00) === 0xDC00)) {\n char = 0x10000 + ((char & 0x03FF) << 10) + (str.charCodeAt(++i) & 0x03FF);\n utf8[p++] = (char >> 18) | 240;\n utf8[p++] = ((char >> 12) & 63) | 128;\n utf8[p++] = ((char >> 6) & 63) | 128;\n utf8[p++] = (char & 63) | 128;\n } else {\n utf8[p++] = (char >> 12) | 224;\n utf8[p++] = ((char >> 6) & 63) | 128;\n utf8[p++] = (char & 63) | 128;\n }\n }\n\n return utf8;\n};\n\n/**\n * Convert a string into a redis slot hash.\n * @param str\n * @returns {number}\n */\nvar generate = module.exports = function generate(str) {\n var char;\n var i = 0;\n var start = -1;\n var result = 0;\n var resultHash = 0;\n var utf8 = typeof str === 'string' ? toUTF8Array(str) : str;\n var len = utf8.length;\n\n while (i < len) {\n char = utf8[i++];\n if (start === -1) {\n if (char === 0x7B) {\n start = i;\n }\n } else if (char !== 0x7D) {\n resultHash = lookup[(char ^ (resultHash >> 8)) & 0xFF] ^ (resultHash << 8);\n } else if (i - 1 !== start) {\n return resultHash & 0x3FFF;\n }\n\n result = lookup[(char ^ (result >> 8)) & 0xFF] ^ (result << 8);\n }\n\n return result & 0x3FFF;\n};\n\n/**\n * Convert an array of multiple strings into a redis slot hash.\n * Returns -1 if one of the keys is not for the same slot as the others\n * @param keys\n * @returns {number}\n */\nmodule.exports.generateMulti = function generateMulti(keys) {\n var i = 1;\n var len = keys.length;\n var base = generate(keys[0]);\n\n while (i < len) {\n if (generate(keys[i++]) !== base) return -1;\n }\n\n return base;\n};\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Used by `_.defaults` to customize its `_.assignIn` use.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\nfunction assignInDefaults(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n object[key] = value;\n }\n}\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = array;\n return apply(func, this, otherArgs);\n };\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n assignValue(object, key, newValue === undefined ? source[key] : newValue);\n }\n return object;\n}\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n});\n\n/**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\nvar defaults = baseRest(function(args) {\n args.push(undefined, assignInDefaults);\n return apply(assignInWith, undefined, args);\n});\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = defaults;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = isArguments;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isArguments = exports.defaults = exports.noop = void 0;\nconst defaults = require(\"lodash.defaults\");\nexports.defaults = defaults;\nconst isArguments = require(\"lodash.isarguments\");\nexports.isArguments = isArguments;\nfunction noop() { }\nexports.noop = noop;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif (!('FORCE_COLOR' in env)) {\n\t\treturn;\n\t}\n\n\tif (env.FORCE_COLOR === 'true') {\n\t\treturn 1;\n\t}\n\n\tif (env.FORCE_COLOR === 'false') {\n\t\treturn 0;\n\t}\n\n\tif (env.FORCE_COLOR.length === 0) {\n\t\treturn 1;\n\t}\n\n\tconst level = Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\n\tif (![0, 1, 2, 3].includes(level)) {\n\t\treturn;\n\t}\n\n\treturn level;\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.genRedactedString = exports.getStringValue = exports.MAX_ARGUMENT_LENGTH = void 0;\nconst debug_1 = require(\"debug\");\nconst MAX_ARGUMENT_LENGTH = 200;\nexports.MAX_ARGUMENT_LENGTH = MAX_ARGUMENT_LENGTH;\nconst NAMESPACE_PREFIX = \"ioredis\";\n/**\n * helper function that tried to get a string value for\n * arbitrary \"debug\" arg\n */\nfunction getStringValue(v) {\n if (v === null) {\n return;\n }\n switch (typeof v) {\n case \"boolean\":\n return;\n case \"number\":\n return;\n case \"object\":\n if (Buffer.isBuffer(v)) {\n return v.toString(\"hex\");\n }\n if (Array.isArray(v)) {\n return v.join(\",\");\n }\n try {\n return JSON.stringify(v);\n }\n catch (e) {\n return;\n }\n case \"string\":\n return v;\n }\n}\nexports.getStringValue = getStringValue;\n/**\n * helper function that redacts a string representation of a \"debug\" arg\n */\nfunction genRedactedString(str, maxLen) {\n const { length } = str;\n return length <= maxLen\n ? str\n : str.slice(0, maxLen) + ' ... <REDACTED full-length=\"' + length + '\">';\n}\nexports.genRedactedString = genRedactedString;\n/**\n * a wrapper for the `debug` module, used to generate\n * \"debug functions\" that trim the values in their output\n */\nfunction genDebugFunction(namespace) {\n const fn = (0, debug_1.default)(`${NAMESPACE_PREFIX}:${namespace}`);\n function wrappedDebug(...args) {\n if (!fn.enabled) {\n return; // no-op\n }\n // we skip the first arg because that is the message\n for (let i = 1; i < args.length; i++) {\n const str = getStringValue(args[i]);\n if (typeof str === \"string\" && str.length > MAX_ARGUMENT_LENGTH) {\n args[i] = genRedactedString(str, MAX_ARGUMENT_LENGTH);\n }\n }\n return fn.apply(null, args);\n }\n Object.defineProperties(wrappedDebug, {\n namespace: {\n get() {\n return fn.namespace;\n },\n },\n enabled: {\n get() {\n return fn.enabled;\n },\n },\n destroy: {\n get() {\n return fn.destroy;\n },\n },\n log: {\n get() {\n return fn.log;\n },\n set(l) {\n fn.log = l;\n },\n },\n });\n return wrappedDebug;\n}\nexports.default = genDebugFunction;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * TLS settings for Redis Cloud. Updated on 2022-08-19.\n */\nconst RedisCloudCA = `-----BEGIN CERTIFICATE-----\nMIIDTzCCAjegAwIBAgIJAKSVpiDswLcwMA0GCSqGSIb3DQEBBQUAMD4xFjAUBgNV\nBAoMDUdhcmFudGlhIERhdGExJDAiBgNVBAMMG1NTTCBDZXJ0aWZpY2F0aW9uIEF1\ndGhvcml0eTAeFw0xMzEwMDExMjE0NTVaFw0yMzA5MjkxMjE0NTVaMD4xFjAUBgNV\nBAoMDUdhcmFudGlhIERhdGExJDAiBgNVBAMMG1NTTCBDZXJ0aWZpY2F0aW9uIEF1\ndGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALZqkh/DczWP\nJnxnHLQ7QL0T4B4CDKWBKCcisriGbA6ZePWVNo4hfKQC6JrzfR+081NeD6VcWUiz\nrmd+jtPhIY4c+WVQYm5PKaN6DT1imYdxQw7aqO5j2KUCEh/cznpLxeSHoTxlR34E\nQwF28Wl3eg2vc5ct8LjU3eozWVk3gb7alx9mSA2SgmuX5lEQawl++rSjsBStemY2\nBDwOpAMXIrdEyP/cVn8mkvi/BDs5M5G+09j0gfhyCzRWMQ7Hn71u1eolRxwVxgi3\nTMn+/vTaFSqxKjgck6zuAYjBRPaHe7qLxHNr1So/Mc9nPy+3wHebFwbIcnUojwbp\n4nctkWbjb2cCAwEAAaNQME4wHQYDVR0OBBYEFP1whtcrydmW3ZJeuSoKZIKjze3w\nMB8GA1UdIwQYMBaAFP1whtcrydmW3ZJeuSoKZIKjze3wMAwGA1UdEwQFMAMBAf8w\nDQYJKoZIhvcNAQEFBQADggEBAG2erXhwRAa7+ZOBs0B6X57Hwyd1R4kfmXcs0rta\nlbPpvgULSiB+TCbf3EbhJnHGyvdCY1tvlffLjdA7HJ0PCOn+YYLBA0pTU/dyvrN6\nSu8NuS5yubnt9mb13nDGYo1rnt0YRfxN+8DM3fXIVr038A30UlPX2Ou1ExFJT0MZ\nuFKY6ZvLdI6/1cbgmguMlAhM+DhKyV6Sr5699LM3zqeI816pZmlREETYkGr91q7k\nBpXJu/dtHaGxg1ZGu6w/PCsYGUcECWENYD4VQPd8N32JjOfu6vEgoEAwfPP+3oGp\nZ4m3ewACcWOAenqflb+cQYC4PsF7qbXDmRaWrbKntOlZ3n0=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIGMTCCBBmgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwajELMAkGA1UEBhMCVVMx\nCzAJBgNVBAgMAkNBMQswCQYDVQQHDAJDQTESMBAGA1UECgwJUmVkaXNMYWJzMS0w\nKwYDVQQDDCRSZWRpc0xhYnMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN\nMTgwMjI1MTUzNzM3WhcNMjgwMjIzMTUzNzM3WjBfMQswCQYDVQQGEwJVUzELMAkG\nA1UECAwCQ0ExEjAQBgNVBAoMCVJlZGlzTGFiczEvMC0GA1UEAwwmUkNQIEludGVy\nbWVkaWF0ZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA\nA4ICDwAwggIKAoICAQDf9dqbxc8Bq7Ctq9rWcxrGNKKHivqLAFpPq02yLPx6fsOv\nTq7GsDChAYBBc4v7Y2Ap9RD5Vs3dIhEANcnolf27QwrG9RMnnvzk8pCvp1o6zSU4\nVuOE1W66/O1/7e2rVxyrnTcP7UgK43zNIXu7+tiAqWsO92uSnuMoGPGpeaUm1jym\nhjWKtkAwDFSqvHY+XL5qDVBEjeUe+WHkYUg40cAXjusAqgm2hZt29c2wnVrxW25W\nP0meNlzHGFdA2AC5z54iRiqj57dTfBTkHoBczQxcyw6hhzxZQ4e5I5zOKjXXEhZN\nr0tA3YC14CTabKRus/JmZieyZzRgEy2oti64tmLYTqSlAD78pRL40VNoaSYetXLw\nhhNsXCHgWaY6d5bLOc/aIQMAV5oLvZQKvuXAF1IDmhPA+bZbpWipp0zagf1P1H3s\nUzsMdn2KM0ejzgotbtNlj5TcrVwpmvE3ktvUAuA+hi3FkVx1US+2Gsp5x4YOzJ7u\nP1WPk6ShF0JgnJH2ILdj6kttTWwFzH17keSFICWDfH/+kM+k7Y1v3EXMQXE7y0T9\nMjvJskz6d/nv+sQhY04xt64xFMGTnZjlJMzfQNi7zWFLTZnDD0lPowq7l3YiPoTT\nt5Xky83lu0KZsZBo0WlWaDG00gLVdtRgVbcuSWxpi5BdLb1kRab66JptWjxwXQID\nAQABo4HrMIHoMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHBzOi8vcmwtY2Etc2VydmVy\nLnJlZGlzbGFicy5jb20vdjEvY3JsMEYGCCsGAQUFBwEBBDowODA2BggrBgEFBQcw\nAYYqaHR0cHM6Ly9ybC1jYS1zZXJ2ZXIucmVkaXNsYWJzLmNvbS92MS9vY3NwMB0G\nA1UdDgQWBBQHar5OKvQUpP2qWt6mckzToeCOHDAfBgNVHSMEGDAWgBQi42wH6hM4\nL2sujEvLM0/u8lRXTzASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIB\nhjANBgkqhkiG9w0BAQsFAAOCAgEAirEn/iTsAKyhd+pu2W3Z5NjCko4NPU0EYUbr\nAP7+POK2rzjIrJO3nFYQ/LLuC7KCXG+2qwan2SAOGmqWst13Y+WHp44Kae0kaChW\nvcYLXXSoGQGC8QuFSNUdaeg3RbMDYFT04dOkqufeWVccoHVxyTSg9eD8LZuHn5jw\n7QDLiEECBmIJHk5Eeo2TAZrx4Yx6ufSUX5HeVjlAzqwtAqdt99uCJ/EL8bgpWbe+\nXoSpvUv0SEC1I1dCAhCKAvRlIOA6VBcmzg5Am12KzkqTul12/VEFIgzqu0Zy2Jbc\nAUPrYVu/+tOGXQaijy7YgwH8P8n3s7ZeUa1VABJHcxrxYduDDJBLZi+MjheUDaZ1\njQRHYevI2tlqeSBqdPKG4zBY5lS0GiAlmuze5oENt0P3XboHoZPHiqcK3VECgTVh\n/BkJcuudETSJcZDmQ8YfoKfBzRQNg2sv/hwvUv73Ss51Sco8GEt2lD8uEdib1Q6z\nzDT5lXJowSzOD5ZA9OGDjnSRL+2riNtKWKEqvtEG3VBJoBzu9GoxbAc7wIZLxmli\niF5a/Zf5X+UXD3s4TMmy6C4QZJpAA2egsSQCnraWO2ULhh7iXMysSkF/nzVfZn43\niqpaB8++9a37hWq14ZmOv0TJIDz//b2+KC4VFXWQ5W5QC6whsjT+OlG4p5ZYG0jo\n616pxqo=\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\n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\n-----END CERTIFICATE-----\n\n-----BEGIN CERTIFICATE-----\nMIIEjzCCA3egAwIBAgIQe55B/ALCKJDZtdNT8kD6hTANBgkqhkiG9w0BAQsFADBM\nMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xv\nYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjAeFw0yMjAxMjYxMjAwMDBaFw0y\nNTAxMjYwMDAwMDBaMFgxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWdu\nIG52LXNhMS4wLAYDVQQDEyVHbG9iYWxTaWduIEF0bGFzIFIzIE9WIFRMUyBDQSAy\nMDIyIFEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmGmg1LW9b7Lf\n8zDD83yBDTEkt+FOxKJZqF4veWc5KZsQj9HfnUS2e5nj/E+JImlGPsQuoiosLuXD\nBVBNAMcUFa11buFMGMeEMwiTmCXoXRrXQmH0qjpOfKgYc5gHG3BsRGaRrf7VR4eg\nofNMG9wUBw4/g/TT7+bQJdA4NfE7Y4d5gEryZiBGB/swaX6Jp/8MF4TgUmOWmalK\ndZCKyb4sPGQFRTtElk67F7vU+wdGcrcOx1tDcIB0ncjLPMnaFicagl+daWGsKqTh\ncounQb6QJtYHa91KvCfKWocMxQ7OIbB5UARLPmC4CJ1/f8YFm35ebfzAeULYdGXu\njE9CLor0OwIDAQABo4IBXzCCAVswDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQG\nCCsGAQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQW\nBBSH5Zq7a7B/t95GfJWkDBpA8HHqdjAfBgNVHSMEGDAWgBSP8Et/qC5FJK5NUPpj\nmove4t0bvDB7BggrBgEFBQcBAQRvMG0wLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3Nw\nMi5nbG9iYWxzaWduLmNvbS9yb290cjMwOwYIKwYBBQUHMAKGL2h0dHA6Ly9zZWN1\ncmUuZ2xvYmFsc2lnbi5jb20vY2FjZXJ0L3Jvb3QtcjMuY3J0MDYGA1UdHwQvMC0w\nK6ApoCeGJWh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vcm9vdC1yMy5jcmwwIQYD\nVR0gBBowGDAIBgZngQwBAgIwDAYKKwYBBAGgMgoBAjANBgkqhkiG9w0BAQsFAAOC\nAQEAKRic9/f+nmhQU/wz04APZLjgG5OgsuUOyUEZjKVhNGDwxGTvKhyXGGAMW2B/\n3bRi+aElpXwoxu3pL6fkElbX3B0BeS5LoDtxkyiVEBMZ8m+sXbocwlPyxrPbX6mY\n0rVIvnuUeBH8X0L5IwfpNVvKnBIilTbcebfHyXkPezGwz7E1yhUULjJFm2bt0SdX\ny+4X/WeiiYIv+fTVgZZgl+/2MKIsu/qdBJc3f3TvJ8nz+Eax1zgZmww+RSQWeOj3\n15Iw6Z5FX+NwzY/Ab+9PosR5UosSeq+9HhtaxZttXG1nVh+avYPGYddWmiMT90J5\nZgKnO/Fx2hBgTxhOTMYaD312kg==\n-----END CERTIFICATE-----\n\n-----BEGIN CERTIFICATE-----\nMIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G\nA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp\nZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4\nMTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG\nA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8\nRgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT\ngHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm\nKPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd\nQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ\nXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw\nDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o\nLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU\nRUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp\njjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK\n6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX\nmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs\nMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH\nWD9f\n-----END CERTIFICATE-----`;\nconst TLSProfiles = {\n RedisCloudFixed: { ca: RedisCloudCA },\n RedisCloudFlexible: { ca: RedisCloudCA },\n};\nexports.default = TLSProfiles;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.noop = exports.defaults = exports.Debug = exports.zipMap = exports.CONNECTION_CLOSED_ERROR_MSG = exports.shuffle = exports.sample = exports.resolveTLSProfile = exports.parseURL = exports.optimizeErrorStack = exports.toArg = exports.convertMapToArray = exports.convertObjectToArray = exports.timeout = exports.packObject = exports.isInt = exports.wrapMultiResult = exports.convertBufferToString = void 0;\nconst url_1 = require(\"url\");\nconst lodash_1 = require(\"./lodash\");\nObject.defineProperty(exports, \"defaults\", { enumerable: true, get: function () { return lodash_1.defaults; } });\nObject.defineProperty(exports, \"noop\", { enumerable: true, get: function () { return lodash_1.noop; } });\nconst debug_1 = require(\"./debug\");\nexports.Debug = debug_1.default;\nconst TLSProfiles_1 = require(\"../constants/TLSProfiles\");\n/**\n * Convert a buffer to string, supports buffer array\n *\n * @example\n * ```js\n * const input = [Buffer.from('foo'), [Buffer.from('bar')]]\n * const res = convertBufferToString(input, 'utf8')\n * expect(res).to.eql(['foo', ['bar']])\n * ```\n */\nfunction convertBufferToString(value, encoding) {\n if (value instanceof Buffer) {\n return value.toString(encoding);\n }\n if (Array.isArray(value)) {\n const length = value.length;\n const res = Array(length);\n for (let i = 0; i < length; ++i) {\n res[i] =\n value[i] instanceof Buffer && encoding === \"utf8\"\n ? value[i].toString()\n : convertBufferToString(value[i], encoding);\n }\n return res;\n }\n return value;\n}\nexports.convertBufferToString = convertBufferToString;\n/**\n * Convert a list of results to node-style\n *\n * @example\n * ```js\n * const input = ['a', 'b', new Error('c'), 'd']\n * const output = exports.wrapMultiResult(input)\n * expect(output).to.eql([[null, 'a'], [null, 'b'], [new Error('c')], [null, 'd'])\n * ```\n */\nfunction wrapMultiResult(arr) {\n // When using WATCH/EXEC transactions, the EXEC will return\n // a null instead of an array\n if (!arr) {\n return null;\n }\n const result = [];\n const length = arr.length;\n for (let i = 0; i < length; ++i) {\n const item = arr[i];\n if (item instanceof Error) {\n result.push([item]);\n }\n else {\n result.push([null, item]);\n }\n }\n return result;\n}\nexports.wrapMultiResult = wrapMultiResult;\n/**\n * Detect if the argument is a int\n * @example\n * ```js\n * > isInt('123')\n * true\n * > isInt('123.3')\n * false\n * > isInt('1x')\n * false\n * > isInt(123)\n * true\n * > isInt(true)\n * false\n * ```\n */\nfunction isInt(value) {\n const x = parseFloat(value);\n return !isNaN(value) && (x | 0) === x;\n}\nexports.isInt = isInt;\n/**\n * Pack an array to an Object\n *\n * @example\n * ```js\n * > packObject(['a', 'b', 'c', 'd'])\n * { a: 'b', c: 'd' }\n * ```\n */\nfunction packObject(array) {\n const result = {};\n const length = array.length;\n for (let i = 1; i < length; i += 2) {\n result[array[i - 1]] = array[i];\n }\n return result;\n}\nexports.packObject = packObject;\n/**\n * Return a callback with timeout\n */\nfunction timeout(callback, timeout) {\n let timer = null;\n const run = function () {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n callback.apply(this, arguments);\n }\n };\n timer = setTimeout(run, timeout, new Error(\"timeout\"));\n return run;\n}\nexports.timeout = timeout;\n/**\n * Convert an object to an array\n * @example\n * ```js\n * > convertObjectToArray({ a: '1' })\n * ['a', '1']\n * ```\n */\nfunction convertObjectToArray(obj) {\n const result = [];\n const keys = Object.keys(obj); // Object.entries requires node 7+\n for (let i = 0, l = keys.length; i < l; i++) {\n result.push(keys[i], obj[keys[i]]);\n }\n return result;\n}\nexports.convertObjectToArray = convertObjectToArray;\n/**\n * Convert a map to an array\n * @example\n * ```js\n * > convertMapToArray(new Map([[1, '2']]))\n * [1, '2']\n * ```\n */\nfunction convertMapToArray(map) {\n const result = [];\n let pos = 0;\n map.forEach(function (value, key) {\n result[pos] = key;\n result[pos + 1] = value;\n pos += 2;\n });\n return result;\n}\nexports.convertMapToArray = convertMapToArray;\n/**\n * Convert a non-string arg to a string\n */\nfunction toArg(arg) {\n if (arg === null || typeof arg === \"undefined\") {\n return \"\";\n }\n return String(arg);\n}\nexports.toArg = toArg;\n/**\n * Optimize error stack\n *\n * @param error actually error\n * @param friendlyStack the stack that more meaningful\n * @param filterPath only show stacks with the specified path\n */\nfunction optimizeErrorStack(error, friendlyStack, filterPath) {\n const stacks = friendlyStack.split(\"\\n\");\n let lines = \"\";\n let i;\n for (i = 1; i < stacks.length; ++i) {\n if (stacks[i].indexOf(filterPath) === -1) {\n break;\n }\n }\n for (let j = i; j < stacks.length; ++j) {\n lines += \"\\n\" + stacks[j];\n }\n if (error.stack) {\n const pos = error.stack.indexOf(\"\\n\");\n error.stack = error.stack.slice(0, pos) + lines;\n }\n return error;\n}\nexports.optimizeErrorStack = optimizeErrorStack;\n/**\n * Parse the redis protocol url\n */\nfunction parseURL(url) {\n if (isInt(url)) {\n return { port: url };\n }\n let parsed = (0, url_1.parse)(url, true, true);\n if (!parsed.slashes && url[0] !== \"/\") {\n url = \"//\" + url;\n parsed = (0, url_1.parse)(url, true, true);\n }\n const options = parsed.query || {};\n const result = {};\n if (parsed.auth) {\n const index = parsed.auth.indexOf(\":\");\n result.username = index === -1 ? parsed.auth : parsed.auth.slice(0, index);\n result.password = index === -1 ? \"\" : parsed.auth.slice(index + 1);\n }\n if (parsed.pathname) {\n if (parsed.protocol === \"redis:\" || parsed.protocol === \"rediss:\") {\n if (parsed.pathname.length > 1) {\n result.db = parsed.pathname.slice(1);\n }\n }\n else {\n result.path = parsed.pathname;\n }\n }\n if (parsed.host) {\n result.host = parsed.hostname;\n }\n if (parsed.port) {\n result.port = parsed.port;\n }\n if (typeof options.family === \"string\") {\n const intFamily = Number.parseInt(options.family, 10);\n if (!Number.isNaN(intFamily)) {\n result.family = intFamily;\n }\n }\n (0, lodash_1.defaults)(result, options);\n return result;\n}\nexports.parseURL = parseURL;\n/**\n * Resolve TLS profile shortcut in connection options\n */\nfunction resolveTLSProfile(options) {\n let tls = options === null || options === void 0 ? void 0 : options.tls;\n if (typeof tls === \"string\")\n tls = { profile: tls };\n const profile = TLSProfiles_1.default[tls === null || tls === void 0 ? void 0 : tls.profile];\n if (profile) {\n tls = Object.assign({}, profile, tls);\n delete tls.profile;\n options = Object.assign({}, options, { tls });\n }\n return options;\n}\nexports.resolveTLSProfile = resolveTLSProfile;\n/**\n * Get a random element from `array`\n */\nfunction sample(array, from = 0) {\n const length = array.length;\n if (from >= length) {\n return null;\n }\n return array[from + Math.floor(Math.random() * (length - from))];\n}\nexports.sample = sample;\n/**\n * Shuffle the array using the Fisher-Yates Shuffle.\n * This method will mutate the original array.\n */\nfunction shuffle(array) {\n let counter = array.length;\n // While there are elements in the array\n while (counter > 0) {\n // Pick a random index\n const index = Math.floor(Math.random() * counter);\n // Decrease counter by 1\n counter--;\n // And swap the last element with it\n [array[counter], array[index]] = [array[index], array[counter]];\n }\n return array;\n}\nexports.shuffle = shuffle;\n/**\n * Error message for connection being disconnected\n */\nexports.CONNECTION_CLOSED_ERROR_MSG = \"Connection is closed.\";\nfunction zipMap(keys, values) {\n const map = new Map();\n keys.forEach((key, index) => {\n map.set(key, values[index]);\n });\n return map;\n}\nexports.zipMap = zipMap;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst commands_1 = require(\"@ioredis/commands\");\nconst calculateSlot = require(\"cluster-key-slot\");\nconst standard_as_callback_1 = require(\"standard-as-callback\");\nconst utils_1 = require(\"./utils\");\n/**\n * Command instance\n *\n * It's rare that you need to create a Command instance yourself.\n *\n * ```js\n * var infoCommand = new Command('info', null, function (err, result) {\n * console.log('result', result);\n * });\n *\n * redis.sendCommand(infoCommand);\n *\n * // When no callback provided, Command instance will have a `promise` property,\n * // which will resolve/reject with the result of the command.\n * var getCommand = new Command('get', ['foo']);\n * getCommand.promise.then(function (result) {\n * console.log('result', result);\n * });\n * ```\n */\nclass Command {\n /**\n * Creates an instance of Command.\n * @param name Command name\n * @param args An array of command arguments\n * @param options\n * @param callback The callback that handles the response.\n * If omit, the response will be handled via Promise\n */\n constructor(name, args = [], options = {}, callback) {\n this.name = name;\n this.inTransaction = false;\n this.isResolved = false;\n this.transformed = false;\n this.replyEncoding = options.replyEncoding;\n this.errorStack = options.errorStack;\n this.args = args.flat();\n this.callback = callback;\n this.initPromise();\n if (options.keyPrefix) {\n // @ts-expect-error\n const isBufferKeyPrefix = options.keyPrefix instanceof Buffer;\n // @ts-expect-error\n let keyPrefixBuffer = isBufferKeyPrefix\n ? options.keyPrefix\n : null;\n this._iterateKeys((key) => {\n if (key instanceof Buffer) {\n if (keyPrefixBuffer === null) {\n keyPrefixBuffer = Buffer.from(options.keyPrefix);\n }\n return Buffer.concat([keyPrefixBuffer, key]);\n }\n else if (isBufferKeyPrefix) {\n // @ts-expect-error\n return Buffer.concat([options.keyPrefix, Buffer.from(String(key))]);\n }\n return options.keyPrefix + key;\n });\n }\n if (options.readOnly) {\n this.isReadOnly = true;\n }\n }\n /**\n * Check whether the command has the flag\n */\n static checkFlag(flagName, commandName) {\n return !!this.getFlagMap()[flagName][commandName];\n }\n static setArgumentTransformer(name, func) {\n this._transformer.argument[name] = func;\n }\n static setReplyTransformer(name, func) {\n this._transformer.reply[name] = func;\n }\n static getFlagMap() {\n if (!this.flagMap) {\n this.flagMap = Object.keys(Command.FLAGS).reduce((map, flagName) => {\n map[flagName] = {};\n Command.FLAGS[flagName].forEach((commandName) => {\n map[flagName][commandName] = true;\n });\n return map;\n }, {});\n }\n return this.flagMap;\n }\n getSlot() {\n if (typeof this.slot === \"undefined\") {\n const key = this.getKeys()[0];\n this.slot = key == null ? null : calculateSlot(key);\n }\n return this.slot;\n }\n getKeys() {\n return this._iterateKeys();\n }\n /**\n * Convert command to writable buffer or string\n */\n toWritable(_socket) {\n let result;\n const commandStr = \"*\" +\n (this.args.length + 1) +\n \"\\r\\n$\" +\n Buffer.byteLength(this.name) +\n \"\\r\\n\" +\n this.name +\n \"\\r\\n\";\n if (this.bufferMode) {\n const buffers = new MixedBuffers();\n buffers.push(commandStr);\n for (let i = 0; i < this.args.length; ++i) {\n const arg = this.args[i];\n if (arg instanceof Buffer) {\n if (arg.length === 0) {\n buffers.push(\"$0\\r\\n\\r\\n\");\n }\n else {\n buffers.push(\"$\" + arg.length + \"\\r\\n\");\n buffers.push(arg);\n buffers.push(\"\\r\\n\");\n }\n }\n else {\n buffers.push(\"$\" +\n Buffer.byteLength(arg) +\n \"\\r\\n\" +\n arg +\n \"\\r\\n\");\n }\n }\n result = buffers.toBuffer();\n }\n else {\n result = commandStr;\n for (let i = 0; i < this.args.length; ++i) {\n const arg = this.args[i];\n result +=\n \"$\" +\n Buffer.byteLength(arg) +\n \"\\r\\n\" +\n arg +\n \"\\r\\n\";\n }\n }\n return result;\n }\n stringifyArguments() {\n for (let i = 0; i < this.args.length; ++i) {\n const arg = this.args[i];\n if (typeof arg === \"string\") {\n // buffers and strings don't need any transformation\n }\n else if (arg instanceof Buffer) {\n this.bufferMode = true;\n }\n else {\n this.args[i] = (0, utils_1.toArg)(arg);\n }\n }\n }\n /**\n * Convert buffer/buffer[] to string/string[],\n * and apply reply transformer.\n */\n transformReply(result) {\n if (this.replyEncoding) {\n result = (0, utils_1.convertBufferToString)(result, this.replyEncoding);\n }\n const transformer = Command._transformer.reply[this.name];\n if (transformer) {\n result = transformer(result);\n }\n return result;\n }\n /**\n * Set the wait time before terminating the attempt to execute a command\n * and generating an error.\n */\n setTimeout(ms) {\n if (!this._commandTimeoutTimer) {\n this._commandTimeoutTimer = setTimeout(() => {\n if (!this.isResolved) {\n this.reject(new Error(\"Command timed out\"));\n }\n }, ms);\n }\n }\n initPromise() {\n const promise = new Promise((resolve, reject) => {\n if (!this.transformed) {\n this.transformed = true;\n const transformer = Command._transformer.argument[this.name];\n if (transformer) {\n this.args = transformer(this.args);\n }\n this.stringifyArguments();\n }\n this.resolve = this._convertValue(resolve);\n if (this.errorStack) {\n this.reject = (err) => {\n reject((0, utils_1.optimizeErrorStack)(err, this.errorStack.stack, __dirname));\n };\n }\n else {\n this.reject = reject;\n }\n });\n this.promise = (0, standard_as_callback_1.default)(promise, this.callback);\n }\n /**\n * Iterate through the command arguments that are considered keys.\n */\n _iterateKeys(transform = (key) => key) {\n if (typeof this.keys === \"undefined\") {\n this.keys = [];\n if ((0, commands_1.exists)(this.name)) {\n // @ts-expect-error\n const keyIndexes = (0, commands_1.getKeyIndexes)(this.name, this.args);\n for (const index of keyIndexes) {\n this.args[index] = transform(this.args[index]);\n this.keys.push(this.args[index]);\n }\n }\n }\n return this.keys;\n }\n /**\n * Convert the value from buffer to the target encoding.\n */\n _convertValue(resolve) {\n return (value) => {\n try {\n const existingTimer = this._commandTimeoutTimer;\n if (existingTimer) {\n clearTimeout(existingTimer);\n delete this._commandTimeoutTimer;\n }\n resolve(this.transformReply(value));\n this.isResolved = true;\n }\n catch (err) {\n this.reject(err);\n }\n return this.promise;\n };\n }\n}\nexports.default = Command;\nCommand.FLAGS = {\n VALID_IN_SUBSCRIBER_MODE: [\n \"subscribe\",\n \"psubscribe\",\n \"unsubscribe\",\n \"punsubscribe\",\n \"ssubscribe\",\n \"sunsubscribe\",\n \"ping\",\n \"quit\",\n ],\n VALID_IN_MONITOR_MODE: [\"monitor\", \"auth\"],\n ENTER_SUBSCRIBER_MODE: [\"subscribe\", \"psubscribe\", \"ssubscribe\"],\n EXIT_SUBSCRIBER_MODE: [\"unsubscribe\", \"punsubscribe\", \"sunsubscribe\"],\n WILL_DISCONNECT: [\"quit\"],\n};\nCommand._transformer = {\n argument: {},\n reply: {},\n};\nconst msetArgumentTransformer = function (args) {\n if (args.length === 1) {\n if (args[0] instanceof Map) {\n return (0, utils_1.convertMapToArray)(args[0]);\n }\n if (typeof args[0] === \"object\" && args[0] !== null) {\n return (0, utils_1.convertObjectToArray)(args[0]);\n }\n }\n return args;\n};\nconst hsetArgumentTransformer = function (args) {\n if (args.length === 2) {\n if (args[1] instanceof Map) {\n return [args[0]].concat((0, utils_1.convertMapToArray)(args[1]));\n }\n if (typeof args[1] === \"object\" && args[1] !== null) {\n return [args[0]].concat((0, utils_1.convertObjectToArray)(args[1]));\n }\n }\n return args;\n};\nCommand.setArgumentTransformer(\"mset\", msetArgumentTransformer);\nCommand.setArgumentTransformer(\"msetnx\", msetArgumentTransformer);\nCommand.setArgumentTransformer(\"hset\", hsetArgumentTransformer);\nCommand.setArgumentTransformer(\"hmset\", hsetArgumentTransformer);\nCommand.setReplyTransformer(\"hgetall\", function (result) {\n if (Array.isArray(result)) {\n const obj = {};\n for (let i = 0; i < result.length; i += 2) {\n const key = result[i];\n const value = result[i + 1];\n if (key in obj) {\n // can only be truthy if the property is special somehow, like '__proto__' or 'constructor'\n // https://github.com/luin/ioredis/issues/1267\n Object.defineProperty(obj, key, {\n value,\n configurable: true,\n enumerable: true,\n writable: true,\n });\n }\n else {\n obj[key] = value;\n }\n }\n return obj;\n }\n return result;\n});\nclass MixedBuffers {\n constructor() {\n this.length = 0;\n this.items = [];\n }\n push(x) {\n this.length += Buffer.byteLength(x);\n this.items.push(x);\n }\n toBuffer() {\n const result = Buffer.allocUnsafe(this.length);\n let offset = 0;\n for (const item of this.items) {\n const length = Buffer.byteLength(item);\n Buffer.isBuffer(item)\n ? item.copy(result, offset)\n : result.write(item, offset, length);\n offset += length;\n }\n return result;\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst redis_errors_1 = require(\"redis-errors\");\nclass ClusterAllFailedError extends redis_errors_1.RedisError {\n constructor(message, lastNodeError) {\n super(message);\n this.lastNodeError = lastNodeError;\n Error.captureStackTrace(this, this.constructor);\n }\n get name() {\n return this.constructor.name;\n }\n}\nexports.default = ClusterAllFailedError;\nClusterAllFailedError.defaultMessage = \"Failed to refresh slots cache.\";\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\n/**\n * Convenient class to convert the process of scanning keys to a readable stream.\n */\nclass ScanStream extends stream_1.Readable {\n constructor(opt) {\n super(opt);\n this.opt = opt;\n this._redisCursor = \"0\";\n this._redisDrained = false;\n }\n _read() {\n if (this._redisDrained) {\n this.push(null);\n return;\n }\n const args = [this._redisCursor];\n if (this.opt.key) {\n args.unshift(this.opt.key);\n }\n if (this.opt.match) {\n args.push(\"MATCH\", this.opt.match);\n }\n if (this.opt.type) {\n args.push(\"TYPE\", this.opt.type);\n }\n if (this.opt.count) {\n args.push(\"COUNT\", String(this.opt.count));\n }\n this.opt.redis[this.opt.command](args, (err, res) => {\n if (err) {\n this.emit(\"error\", err);\n return;\n }\n this._redisCursor = res[0] instanceof Buffer ? res[0].toString() : res[0];\n if (this._redisCursor === \"0\") {\n this._redisDrained = true;\n }\n this.push(res[1]);\n });\n }\n close() {\n this._redisDrained = true;\n }\n}\nexports.default = ScanStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.executeWithAutoPipelining = exports.getFirstValueInFlattenedArray = exports.shouldUseAutoPipelining = exports.notAllowedAutoPipelineCommands = exports.kCallbacks = exports.kExec = void 0;\nconst lodash_1 = require(\"./utils/lodash\");\nconst calculateSlot = require(\"cluster-key-slot\");\nconst standard_as_callback_1 = require(\"standard-as-callback\");\nexports.kExec = Symbol(\"exec\");\nexports.kCallbacks = Symbol(\"callbacks\");\nexports.notAllowedAutoPipelineCommands = [\n \"auth\",\n \"info\",\n \"script\",\n \"quit\",\n \"cluster\",\n \"pipeline\",\n \"multi\",\n \"subscribe\",\n \"psubscribe\",\n \"unsubscribe\",\n \"unpsubscribe\",\n \"select\",\n];\nfunction executeAutoPipeline(client, slotKey) {\n /*\n If a pipeline is already executing, keep queueing up commands\n since ioredis won't serve two pipelines at the same time\n */\n if (client._runningAutoPipelines.has(slotKey)) {\n return;\n }\n if (!client._autoPipelines.has(slotKey)) {\n /*\n Rare edge case. Somehow, something has deleted this running autopipeline in an immediate\n call to executeAutoPipeline.\n \n Maybe the callback in the pipeline.exec is sometimes called in the same tick,\n e.g. if redis is disconnected?\n */\n return;\n }\n client._runningAutoPipelines.add(slotKey);\n // Get the pipeline and immediately delete it so that new commands are queued on a new pipeline\n const pipeline = client._autoPipelines.get(slotKey);\n client._autoPipelines.delete(slotKey);\n const callbacks = pipeline[exports.kCallbacks];\n // Stop keeping a reference to callbacks immediately after the callbacks stop being used.\n // This allows the GC to reclaim objects referenced by callbacks, especially with 16384 slots\n // in Redis.Cluster\n pipeline[exports.kCallbacks] = null;\n // Perform the call\n pipeline.exec(function (err, results) {\n client._runningAutoPipelines.delete(slotKey);\n /*\n Invoke all callback in nextTick so the stack is cleared\n and callbacks can throw errors without affecting other callbacks.\n */\n if (err) {\n for (let i = 0; i < callbacks.length; i++) {\n process.nextTick(callbacks[i], err);\n }\n }\n else {\n for (let i = 0; i < callbacks.length; i++) {\n process.nextTick(callbacks[i], ...results[i]);\n }\n }\n // If there is another pipeline on the same node, immediately execute it without waiting for nextTick\n if (client._autoPipelines.has(slotKey)) {\n executeAutoPipeline(client, slotKey);\n }\n });\n}\nfunction shouldUseAutoPipelining(client, functionName, commandName) {\n return (functionName &&\n client.options.enableAutoPipelining &&\n !client.isPipeline &&\n !exports.notAllowedAutoPipelineCommands.includes(commandName) &&\n !client.options.autoPipeliningIgnoredCommands.includes(commandName));\n}\nexports.shouldUseAutoPipelining = shouldUseAutoPipelining;\nfunction getFirstValueInFlattenedArray(args) {\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (typeof arg === \"string\") {\n return arg;\n }\n else if (Array.isArray(arg) || (0, lodash_1.isArguments)(arg)) {\n if (arg.length === 0) {\n continue;\n }\n return arg[0];\n }\n const flattened = [arg].flat();\n if (flattened.length > 0) {\n return flattened[0];\n }\n }\n return undefined;\n}\nexports.getFirstValueInFlattenedArray = getFirstValueInFlattenedArray;\nfunction executeWithAutoPipelining(client, functionName, commandName, args, callback) {\n // On cluster mode let's wait for slots to be available\n if (client.isCluster && !client.slots.length) {\n if (client.status === \"wait\")\n client.connect().catch(lodash_1.noop);\n return (0, standard_as_callback_1.default)(new Promise(function (resolve, reject) {\n client.delayUntilReady((err) => {\n if (err) {\n reject(err);\n return;\n }\n executeWithAutoPipelining(client, functionName, commandName, args, null).then(resolve, reject);\n });\n }), callback);\n }\n // If we have slot information, we can improve routing by grouping slots served by the same subset of nodes\n // Note that the first value in args may be a (possibly empty) array.\n // ioredis will only flatten one level of the array, in the Command constructor.\n const prefix = client.options.keyPrefix || \"\";\n const slotKey = client.isCluster\n ? client.slots[calculateSlot(`${prefix}${getFirstValueInFlattenedArray(args)}`)].join(\",\")\n : \"main\";\n if (!client._autoPipelines.has(slotKey)) {\n const pipeline = client.pipeline();\n pipeline[exports.kExec] = false;\n pipeline[exports.kCallbacks] = [];\n client._autoPipelines.set(slotKey, pipeline);\n }\n const pipeline = client._autoPipelines.get(slotKey);\n /*\n Mark the pipeline as scheduled.\n The symbol will make sure that the pipeline is only scheduled once per tick.\n New commands are appended to an already scheduled pipeline.\n */\n if (!pipeline[exports.kExec]) {\n pipeline[exports.kExec] = true;\n /*\n Deferring with setImmediate so we have a chance to capture multiple\n commands that can be scheduled by I/O events already in the event loop queue.\n */\n setImmediate(executeAutoPipeline, client, slotKey);\n }\n // Create the promise which will execute the command in the pipeline.\n const autoPipelinePromise = new Promise(function (resolve, reject) {\n pipeline[exports.kCallbacks].push(function (err, value) {\n if (err) {\n reject(err);\n return;\n }\n resolve(value);\n });\n if (functionName === \"call\") {\n args.unshift(commandName);\n }\n pipeline[functionName](...args);\n });\n return (0, standard_as_callback_1.default)(autoPipelinePromise, callback);\n}\nexports.executeWithAutoPipelining = executeWithAutoPipelining;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst crypto_1 = require(\"crypto\");\nconst Command_1 = require(\"./Command\");\nconst standard_as_callback_1 = require(\"standard-as-callback\");\nclass Script {\n constructor(lua, numberOfKeys = null, keyPrefix = \"\", readOnly = false) {\n this.lua = lua;\n this.numberOfKeys = numberOfKeys;\n this.keyPrefix = keyPrefix;\n this.readOnly = readOnly;\n this.sha = (0, crypto_1.createHash)(\"sha1\").update(lua).digest(\"hex\");\n const sha = this.sha;\n const socketHasScriptLoaded = new WeakSet();\n this.Command = class CustomScriptCommand extends Command_1.default {\n toWritable(socket) {\n const origReject = this.reject;\n this.reject = (err) => {\n if (err.message.indexOf(\"NOSCRIPT\") !== -1) {\n socketHasScriptLoaded.delete(socket);\n }\n origReject.call(this, err);\n };\n if (!socketHasScriptLoaded.has(socket)) {\n socketHasScriptLoaded.add(socket);\n this.name = \"eval\";\n this.args[0] = lua;\n }\n else if (this.name === \"eval\") {\n this.name = \"evalsha\";\n this.args[0] = sha;\n }\n return super.toWritable(socket);\n }\n };\n }\n execute(container, args, options, callback) {\n if (typeof this.numberOfKeys === \"number\") {\n args.unshift(this.numberOfKeys);\n }\n if (this.keyPrefix) {\n options.keyPrefix = this.keyPrefix;\n }\n if (this.readOnly) {\n options.readOnly = true;\n }\n const evalsha = new this.Command(\"evalsha\", [this.sha, ...args], options);\n evalsha.promise = evalsha.promise.catch((err) => {\n if (err.message.indexOf(\"NOSCRIPT\") === -1) {\n throw err;\n }\n // Resend the same custom evalsha command that gets transformed\n // to an eval in case it's not loaded yet on the connection.\n const resend = new this.Command(\"evalsha\", [this.sha, ...args], options);\n const client = container.isPipeline ? container.redis : container;\n return client.sendCommand(resend);\n });\n (0, standard_as_callback_1.default)(evalsha.promise, callback);\n return container.sendCommand(evalsha);\n }\n}\nexports.default = Script;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst commands_1 = require(\"@ioredis/commands\");\nconst autoPipelining_1 = require(\"../autoPipelining\");\nconst Command_1 = require(\"../Command\");\nconst Script_1 = require(\"../Script\");\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nclass Commander {\n constructor() {\n this.options = {};\n /**\n * @ignore\n */\n this.scriptsSet = {};\n /**\n * @ignore\n */\n this.addedBuiltinSet = new Set();\n }\n /**\n * Return supported builtin commands\n */\n getBuiltinCommands() {\n return commands.slice(0);\n }\n /**\n * Create a builtin command\n */\n createBuiltinCommand(commandName) {\n return {\n string: generateFunction(null, commandName, \"utf8\"),\n buffer: generateFunction(null, commandName, null),\n };\n }\n /**\n * Create add builtin command\n */\n addBuiltinCommand(commandName) {\n this.addedBuiltinSet.add(commandName);\n this[commandName] = generateFunction(commandName, commandName, \"utf8\");\n this[commandName + \"Buffer\"] = generateFunction(commandName + \"Buffer\", commandName, null);\n }\n /**\n * Define a custom command using lua script\n */\n defineCommand(name, definition) {\n const script = new Script_1.default(definition.lua, definition.numberOfKeys, this.options.keyPrefix, definition.readOnly);\n this.scriptsSet[name] = script;\n this[name] = generateScriptingFunction(name, name, script, \"utf8\");\n this[name + \"Buffer\"] = generateScriptingFunction(name + \"Buffer\", name, script, null);\n }\n /**\n * @ignore\n */\n sendCommand(command, stream, node) {\n throw new Error('\"sendCommand\" is not implemented');\n }\n}\nconst commands = commands_1.list.filter((command) => command !== \"monitor\");\ncommands.push(\"sentinel\");\ncommands.forEach(function (commandName) {\n Commander.prototype[commandName] = generateFunction(commandName, commandName, \"utf8\");\n Commander.prototype[commandName + \"Buffer\"] = generateFunction(commandName + \"Buffer\", commandName, null);\n});\nCommander.prototype.call = generateFunction(\"call\", \"utf8\");\nCommander.prototype.callBuffer = generateFunction(\"callBuffer\", null);\n// @ts-expect-error\nCommander.prototype.send_command = Commander.prototype.call;\nfunction generateFunction(functionName, _commandName, _encoding) {\n if (typeof _encoding === \"undefined\") {\n _encoding = _commandName;\n _commandName = null;\n }\n return function (...args) {\n const commandName = (_commandName || args.shift());\n let callback = args[args.length - 1];\n if (typeof callback === \"function\") {\n args.pop();\n }\n else {\n callback = undefined;\n }\n const options = {\n errorStack: this.options.showFriendlyErrorStack ? new Error() : undefined,\n keyPrefix: this.options.keyPrefix,\n replyEncoding: _encoding,\n };\n // No auto pipeline, use regular command sending\n if (!(0, autoPipelining_1.shouldUseAutoPipelining)(this, functionName, commandName)) {\n return this.sendCommand(\n // @ts-expect-error\n new Command_1.default(commandName, args, options, callback));\n }\n // Create a new pipeline and make sure it's scheduled\n return (0, autoPipelining_1.executeWithAutoPipelining)(this, functionName, commandName, \n // @ts-expect-error\n args, callback);\n };\n}\nfunction generateScriptingFunction(functionName, commandName, script, encoding) {\n return function (...args) {\n const callback = typeof args[args.length - 1] === \"function\" ? args.pop() : undefined;\n const options = {\n replyEncoding: encoding,\n };\n if (this.options.showFriendlyErrorStack) {\n options.errorStack = new Error();\n }\n // No auto pipeline, use regular command sending\n if (!(0, autoPipelining_1.shouldUseAutoPipelining)(this, functionName, commandName)) {\n return script.execute(this, args, options, callback);\n }\n // Create a new pipeline and make sure it's scheduled\n return (0, autoPipelining_1.executeWithAutoPipelining)(this, functionName, commandName, args, callback);\n };\n}\nexports.default = Commander;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst calculateSlot = require(\"cluster-key-slot\");\nconst commands_1 = require(\"@ioredis/commands\");\nconst standard_as_callback_1 = require(\"standard-as-callback\");\nconst util_1 = require(\"util\");\nconst Command_1 = require(\"./Command\");\nconst utils_1 = require(\"./utils\");\nconst Commander_1 = require(\"./utils/Commander\");\n/*\n This function derives from the cluster-key-slot implementation.\n Instead of checking that all keys have the same slot, it checks that all slots are served by the same set of nodes.\n If this is satisfied, it returns the first key's slot.\n*/\nfunction generateMultiWithNodes(redis, keys) {\n const slot = calculateSlot(keys[0]);\n const target = redis._groupsBySlot[slot];\n for (let i = 1; i < keys.length; i++) {\n if (redis._groupsBySlot[calculateSlot(keys[i])] !== target) {\n return -1;\n }\n }\n return slot;\n}\nclass Pipeline extends Commander_1.default {\n constructor(redis) {\n super();\n this.redis = redis;\n this.isPipeline = true;\n this.replyPending = 0;\n this._queue = [];\n this._result = [];\n this._transactions = 0;\n this._shaToScript = {};\n this.isCluster =\n this.redis.constructor.name === \"Cluster\" || this.redis.isCluster;\n this.options = redis.options;\n Object.keys(redis.scriptsSet).forEach((name) => {\n const script = redis.scriptsSet[name];\n this._shaToScript[script.sha] = script;\n this[name] = redis[name];\n this[name + \"Buffer\"] = redis[name + \"Buffer\"];\n });\n redis.addedBuiltinSet.forEach((name) => {\n this[name] = redis[name];\n this[name + \"Buffer\"] = redis[name + \"Buffer\"];\n });\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n const _this = this;\n Object.defineProperty(this, \"length\", {\n get: function () {\n return _this._queue.length;\n },\n });\n }\n fillResult(value, position) {\n if (this._queue[position].name === \"exec\" && Array.isArray(value[1])) {\n const execLength = value[1].length;\n for (let i = 0; i < execLength; i++) {\n if (value[1][i] instanceof Error) {\n continue;\n }\n const cmd = this._queue[position - (execLength - i)];\n try {\n value[1][i] = cmd.transformReply(value[1][i]);\n }\n catch (err) {\n value[1][i] = err;\n }\n }\n }\n this._result[position] = value;\n if (--this.replyPending) {\n return;\n }\n if (this.isCluster) {\n let retriable = true;\n let commonError;\n for (let i = 0; i < this._result.length; ++i) {\n const error = this._result[i][0];\n const command = this._queue[i];\n if (error) {\n if (command.name === \"exec\" &&\n error.message ===\n \"EXECABORT Transaction discarded because of previous errors.\") {\n continue;\n }\n if (!commonError) {\n commonError = {\n name: error.name,\n message: error.message,\n };\n }\n else if (commonError.name !== error.name ||\n commonError.message !== error.message) {\n retriable = false;\n break;\n }\n }\n else if (!command.inTransaction) {\n const isReadOnly = (0, commands_1.exists)(command.name) && (0, commands_1.hasFlag)(command.name, \"readonly\");\n if (!isReadOnly) {\n retriable = false;\n break;\n }\n }\n }\n if (commonError && retriable) {\n const _this = this;\n const errv = commonError.message.split(\" \");\n const queue = this._queue;\n let inTransaction = false;\n this._queue = [];\n for (let i = 0; i < queue.length; ++i) {\n if (errv[0] === \"ASK\" &&\n !inTransaction &&\n queue[i].name !== \"asking\" &&\n (!queue[i - 1] || queue[i - 1].name !== \"asking\")) {\n const asking = new Command_1.default(\"asking\");\n asking.ignore = true;\n this.sendCommand(asking);\n }\n queue[i].initPromise();\n this.sendCommand(queue[i]);\n inTransaction = queue[i].inTransaction;\n }\n let matched = true;\n if (typeof this.leftRedirections === \"undefined\") {\n this.leftRedirections = {};\n }\n const exec = function () {\n _this.exec();\n };\n const cluster = this.redis;\n cluster.handleError(commonError, this.leftRedirections, {\n moved: function (_slot, key) {\n _this.preferKey = key;\n cluster.slots[errv[1]] = [key];\n cluster._groupsBySlot[errv[1]] =\n cluster._groupsIds[cluster.slots[errv[1]].join(\";\")];\n cluster.refreshSlotsCache();\n _this.exec();\n },\n ask: function (_slot, key) {\n _this.preferKey = key;\n _this.exec();\n },\n tryagain: exec,\n clusterDown: exec,\n connectionClosed: exec,\n maxRedirections: () => {\n matched = false;\n },\n defaults: () => {\n matched = false;\n },\n });\n if (matched) {\n return;\n }\n }\n }\n let ignoredCount = 0;\n for (let i = 0; i < this._queue.length - ignoredCount; ++i) {\n if (this._queue[i + ignoredCount].ignore) {\n ignoredCount += 1;\n }\n this._result[i] = this._result[i + ignoredCount];\n }\n this.resolve(this._result.slice(0, this._result.length - ignoredCount));\n }\n sendCommand(command) {\n if (this._transactions > 0) {\n command.inTransaction = true;\n }\n const position = this._queue.length;\n command.pipelineIndex = position;\n command.promise\n .then((result) => {\n this.fillResult([null, result], position);\n })\n .catch((error) => {\n this.fillResult([error], position);\n });\n this._queue.push(command);\n return this;\n }\n addBatch(commands) {\n let command, commandName, args;\n for (let i = 0; i < commands.length; ++i) {\n command = commands[i];\n commandName = command[0];\n args = command.slice(1);\n this[commandName].apply(this, args);\n }\n return this;\n }\n}\nexports.default = Pipeline;\n// @ts-expect-error\nconst multi = Pipeline.prototype.multi;\n// @ts-expect-error\nPipeline.prototype.multi = function () {\n this._transactions += 1;\n return multi.apply(this, arguments);\n};\n// @ts-expect-error\nconst execBuffer = Pipeline.prototype.execBuffer;\n// @ts-expect-error\nPipeline.prototype.execBuffer = (0, util_1.deprecate)(function () {\n if (this._transactions > 0) {\n this._transactions -= 1;\n }\n return execBuffer.apply(this, arguments);\n}, \"Pipeline#execBuffer: Use Pipeline#exec instead\");\n// NOTE: To avoid an unhandled promise rejection, this will unconditionally always return this.promise,\n// which always has the rejection handled by standard-as-callback\n// adding the provided rejection callback.\n//\n// If a different promise instance were returned, that promise would cause its own unhandled promise rejection\n// errors, even if that promise unconditionally resolved to **the resolved value of** this.promise.\nPipeline.prototype.exec = function (callback) {\n // Wait for the cluster to be connected, since we need nodes information before continuing\n if (this.isCluster && !this.redis.slots.length) {\n if (this.redis.status === \"wait\")\n this.redis.connect().catch(utils_1.noop);\n if (callback && !this.nodeifiedPromise) {\n this.nodeifiedPromise = true;\n (0, standard_as_callback_1.default)(this.promise, callback);\n }\n this.redis.delayUntilReady((err) => {\n if (err) {\n this.reject(err);\n return;\n }\n this.exec(callback);\n });\n return this.promise;\n }\n if (this._transactions > 0) {\n this._transactions -= 1;\n return execBuffer.apply(this, arguments);\n }\n if (!this.nodeifiedPromise) {\n this.nodeifiedPromise = true;\n (0, standard_as_callback_1.default)(this.promise, callback);\n }\n if (!this._queue.length) {\n this.resolve([]);\n }\n let pipelineSlot;\n if (this.isCluster) {\n // List of the first key for each command\n const sampleKeys = [];\n for (let i = 0; i < this._queue.length; i++) {\n const keys = this._queue[i].getKeys();\n if (keys.length) {\n sampleKeys.push(keys[0]);\n }\n // For each command, check that the keys belong to the same slot\n if (keys.length && calculateSlot.generateMulti(keys) < 0) {\n this.reject(new Error(\"All the keys in a pipeline command should belong to the same slot\"));\n return this.promise;\n }\n }\n if (sampleKeys.length) {\n pipelineSlot = generateMultiWithNodes(this.redis, sampleKeys);\n if (pipelineSlot < 0) {\n this.reject(new Error(\"All keys in the pipeline should belong to the same slots allocation group\"));\n return this.promise;\n }\n }\n else {\n // Send the pipeline to a random node\n pipelineSlot = (Math.random() * 16384) | 0;\n }\n }\n const _this = this;\n execPipeline();\n return this.promise;\n function execPipeline() {\n let writePending = (_this.replyPending = _this._queue.length);\n let node;\n if (_this.isCluster) {\n node = {\n slot: pipelineSlot,\n redis: _this.redis.connectionPool.nodes.all[_this.preferKey],\n };\n }\n let data = \"\";\n let buffers;\n const stream = {\n isPipeline: true,\n destination: _this.isCluster ? node : { redis: _this.redis },\n write(writable) {\n if (typeof writable !== \"string\") {\n if (!buffers) {\n buffers = [];\n }\n if (data) {\n buffers.push(Buffer.from(data, \"utf8\"));\n data = \"\";\n }\n buffers.push(writable);\n }\n else {\n data += writable;\n }\n if (!--writePending) {\n if (buffers) {\n if (data) {\n buffers.push(Buffer.from(data, \"utf8\"));\n }\n stream.destination.redis.stream.write(Buffer.concat(buffers));\n }\n else {\n stream.destination.redis.stream.write(data);\n }\n // Reset writePending for resending\n writePending = _this._queue.length;\n data = \"\";\n buffers = undefined;\n }\n },\n };\n for (let i = 0; i < _this._queue.length; ++i) {\n _this.redis.sendCommand(_this._queue[i], stream, node);\n }\n return _this.promise;\n }\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addTransactionSupport = void 0;\nconst utils_1 = require(\"./utils\");\nconst standard_as_callback_1 = require(\"standard-as-callback\");\nconst Pipeline_1 = require(\"./Pipeline\");\nfunction addTransactionSupport(redis) {\n redis.pipeline = function (commands) {\n const pipeline = new Pipeline_1.default(this);\n if (Array.isArray(commands)) {\n pipeline.addBatch(commands);\n }\n return pipeline;\n };\n const { multi } = redis;\n redis.multi = function (commands, options) {\n if (typeof options === \"undefined\" && !Array.isArray(commands)) {\n options = commands;\n commands = null;\n }\n if (options && options.pipeline === false) {\n return multi.call(this);\n }\n const pipeline = new Pipeline_1.default(this);\n // @ts-expect-error\n pipeline.multi();\n if (Array.isArray(commands)) {\n pipeline.addBatch(commands);\n }\n const exec = pipeline.exec;\n pipeline.exec = function (callback) {\n // Wait for the cluster to be connected, since we need nodes information before continuing\n if (this.isCluster && !this.redis.slots.length) {\n if (this.redis.status === \"wait\")\n this.redis.connect().catch(utils_1.noop);\n return (0, standard_as_callback_1.default)(new Promise((resolve, reject) => {\n this.redis.delayUntilReady((err) => {\n if (err) {\n reject(err);\n return;\n }\n this.exec(pipeline).then(resolve, reject);\n });\n }), callback);\n }\n if (this._transactions > 0) {\n exec.call(pipeline);\n }\n // Returns directly when the pipeline\n // has been called multiple times (retries).\n if (this.nodeifiedPromise) {\n return exec.call(pipeline);\n }\n const promise = exec.call(pipeline);\n return (0, standard_as_callback_1.default)(promise.then(function (result) {\n const execResult = result[result.length - 1];\n if (typeof execResult === \"undefined\") {\n throw new Error(\"Pipeline cannot be used to send any commands when the `exec()` has been called on it.\");\n }\n if (execResult[0]) {\n execResult[0].previousErrors = [];\n for (let i = 0; i < result.length - 1; ++i) {\n if (result[i][0]) {\n execResult[0].previousErrors.push(result[i][0]);\n }\n }\n throw execResult[0];\n }\n return (0, utils_1.wrapMultiResult)(execResult[1]);\n }), callback);\n };\n // @ts-expect-error\n const { execBuffer } = pipeline;\n // @ts-expect-error\n pipeline.execBuffer = function (callback) {\n if (this._transactions > 0) {\n execBuffer.call(pipeline);\n }\n return pipeline.exec(callback);\n };\n return pipeline;\n };\n const { exec } = redis;\n redis.exec = function (callback) {\n return (0, standard_as_callback_1.default)(exec.call(this).then(function (results) {\n if (Array.isArray(results)) {\n results = (0, utils_1.wrapMultiResult)(results);\n }\n return results;\n }), callback);\n };\n}\nexports.addTransactionSupport = addTransactionSupport;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction applyMixin(derivedConstructor, mixinConstructor) {\n Object.getOwnPropertyNames(mixinConstructor.prototype).forEach((name) => {\n Object.defineProperty(derivedConstructor.prototype, name, Object.getOwnPropertyDescriptor(mixinConstructor.prototype, name));\n });\n}\nexports.default = applyMixin;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_CLUSTER_OPTIONS = void 0;\nconst dns_1 = require(\"dns\");\nexports.DEFAULT_CLUSTER_OPTIONS = {\n clusterRetryStrategy: (times) => Math.min(100 + times * 2, 2000),\n enableOfflineQueue: true,\n enableReadyCheck: true,\n scaleReads: \"master\",\n maxRedirections: 16,\n retryDelayOnMoved: 0,\n retryDelayOnFailover: 100,\n retryDelayOnClusterDown: 100,\n retryDelayOnTryAgain: 100,\n slotsRefreshTimeout: 1000,\n useSRVRecords: false,\n resolveSrv: dns_1.resolveSrv,\n dnsLookup: dns_1.lookup,\n enableAutoPipelining: false,\n autoPipeliningIgnoredCommands: [],\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getConnectionName = exports.weightSrvRecords = exports.groupSrvRecords = exports.getUniqueHostnamesFromOptions = exports.normalizeNodeOptions = exports.nodeKeyToRedisOptions = exports.getNodeKey = void 0;\nconst utils_1 = require(\"../utils\");\nconst net_1 = require(\"net\");\nfunction getNodeKey(node) {\n node.port = node.port || 6379;\n node.host = node.host || \"127.0.0.1\";\n return node.host + \":\" + node.port;\n}\nexports.getNodeKey = getNodeKey;\nfunction nodeKeyToRedisOptions(nodeKey) {\n const portIndex = nodeKey.lastIndexOf(\":\");\n if (portIndex === -1) {\n throw new Error(`Invalid node key ${nodeKey}`);\n }\n return {\n host: nodeKey.slice(0, portIndex),\n port: Number(nodeKey.slice(portIndex + 1)),\n };\n}\nexports.nodeKeyToRedisOptions = nodeKeyToRedisOptions;\nfunction normalizeNodeOptions(nodes) {\n return nodes.map((node) => {\n const options = {};\n if (typeof node === \"object\") {\n Object.assign(options, node);\n }\n else if (typeof node === \"string\") {\n Object.assign(options, (0, utils_1.parseURL)(node));\n }\n else if (typeof node === \"number\") {\n options.port = node;\n }\n else {\n throw new Error(\"Invalid argument \" + node);\n }\n if (typeof options.port === \"string\") {\n options.port = parseInt(options.port, 10);\n }\n // Cluster mode only support db 0\n delete options.db;\n if (!options.port) {\n options.port = 6379;\n }\n if (!options.host) {\n options.host = \"127.0.0.1\";\n }\n return (0, utils_1.resolveTLSProfile)(options);\n });\n}\nexports.normalizeNodeOptions = normalizeNodeOptions;\nfunction getUniqueHostnamesFromOptions(nodes) {\n const uniqueHostsMap = {};\n nodes.forEach((node) => {\n uniqueHostsMap[node.host] = true;\n });\n return Object.keys(uniqueHostsMap).filter((host) => !(0, net_1.isIP)(host));\n}\nexports.getUniqueHostnamesFromOptions = getUniqueHostnamesFromOptions;\nfunction groupSrvRecords(records) {\n const recordsByPriority = {};\n for (const record of records) {\n if (!recordsByPriority.hasOwnProperty(record.priority)) {\n recordsByPriority[record.priority] = {\n totalWeight: record.weight,\n records: [record],\n };\n }\n else {\n recordsByPriority[record.priority].totalWeight += record.weight;\n recordsByPriority[record.priority].records.push(record);\n }\n }\n return recordsByPriority;\n}\nexports.groupSrvRecords = groupSrvRecords;\nfunction weightSrvRecords(recordsGroup) {\n if (recordsGroup.records.length === 1) {\n recordsGroup.totalWeight = 0;\n return recordsGroup.records.shift();\n }\n // + `recordsGroup.records.length` to support `weight` 0\n const random = Math.floor(Math.random() * (recordsGroup.totalWeight + recordsGroup.records.length));\n let total = 0;\n for (const [i, record] of recordsGroup.records.entries()) {\n total += 1 + record.weight;\n if (total > random) {\n recordsGroup.totalWeight -= record.weight;\n recordsGroup.records.splice(i, 1);\n return record;\n }\n }\n}\nexports.weightSrvRecords = weightSrvRecords;\nfunction getConnectionName(component, nodeConnectionName) {\n const prefix = `ioredis-cluster(${component})`;\n return nodeConnectionName ? `${prefix}:${nodeConnectionName}` : prefix;\n}\nexports.getConnectionName = getConnectionName;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst util_1 = require(\"./util\");\nconst utils_1 = require(\"../utils\");\nconst Redis_1 = require(\"../Redis\");\nconst debug = (0, utils_1.Debug)(\"cluster:subscriber\");\nclass ClusterSubscriber {\n constructor(connectionPool, emitter) {\n this.connectionPool = connectionPool;\n this.emitter = emitter;\n this.started = false;\n this.subscriber = null;\n this.onSubscriberEnd = () => {\n if (!this.started) {\n debug(\"subscriber has disconnected, but ClusterSubscriber is not started, so not reconnecting.\");\n return;\n }\n // If the subscriber closes whilst it's still the active connection,\n // we might as well try to connecting to a new node if possible to\n // minimise the number of missed publishes.\n debug(\"subscriber has disconnected, selecting a new one...\");\n this.selectSubscriber();\n };\n // If the current node we're using as the subscriber disappears\n // from the node pool for some reason, we will select a new one\n // to connect to.\n // Note that this event is only triggered if the connection to\n // the node has been used; cluster subscriptions are setup with\n // lazyConnect = true. It's possible for the subscriber node to\n // disappear without this method being called!\n // See https://github.com/luin/ioredis/pull/1589\n this.connectionPool.on(\"-node\", (_, key) => {\n if (!this.started || !this.subscriber) {\n return;\n }\n if ((0, util_1.getNodeKey)(this.subscriber.options) === key) {\n debug(\"subscriber has left, selecting a new one...\");\n this.selectSubscriber();\n }\n });\n this.connectionPool.on(\"+node\", () => {\n if (!this.started || this.subscriber) {\n return;\n }\n debug(\"a new node is discovered and there is no subscriber, selecting a new one...\");\n this.selectSubscriber();\n });\n }\n getInstance() {\n return this.subscriber;\n }\n start() {\n this.started = true;\n this.selectSubscriber();\n debug(\"started\");\n }\n stop() {\n this.started = false;\n if (this.subscriber) {\n this.subscriber.disconnect();\n this.subscriber = null;\n }\n debug(\"stopped\");\n }\n selectSubscriber() {\n const lastActiveSubscriber = this.lastActiveSubscriber;\n // Disconnect the previous subscriber even if there\n // will not be a new one.\n if (lastActiveSubscriber) {\n lastActiveSubscriber.off(\"end\", this.onSubscriberEnd);\n lastActiveSubscriber.disconnect();\n }\n if (this.subscriber) {\n this.subscriber.off(\"end\", this.onSubscriberEnd);\n this.subscriber.disconnect();\n }\n const sampleNode = (0, utils_1.sample)(this.connectionPool.getNodes());\n if (!sampleNode) {\n debug(\"selecting subscriber failed since there is no node discovered in the cluster yet\");\n this.subscriber = null;\n return;\n }\n const { options } = sampleNode;\n debug(\"selected a subscriber %s:%s\", options.host, options.port);\n /*\n * Create a specialized Redis connection for the subscription.\n * Note that auto reconnection is enabled here.\n *\n * `enableReadyCheck` is also enabled because although subscription is allowed\n * while redis is loading data from the disk, we can check if the password\n * provided for the subscriber is correct, and if not, the current subscriber\n * will be disconnected and a new subscriber will be selected.\n */\n this.subscriber = new Redis_1.default({\n port: options.port,\n host: options.host,\n username: options.username,\n password: options.password,\n enableReadyCheck: true,\n connectionName: (0, util_1.getConnectionName)(\"subscriber\", options.connectionName),\n lazyConnect: true,\n tls: options.tls,\n // Don't try to reconnect the subscriber connection. If the connection fails\n // we will get an end event (handled below), at which point we'll pick a new\n // node from the pool and try to connect to that as the subscriber connection.\n retryStrategy: null,\n });\n // Ignore the errors since they're handled in the connection pool.\n this.subscriber.on(\"error\", utils_1.noop);\n // The node we lost connection to may not come back up in a\n // reasonable amount of time (e.g. a slave that's taken down\n // for maintainence), we could potentially miss many published\n // messages so we should reconnect as quickly as possible, to\n // a different node if needed.\n this.subscriber.once(\"end\", this.onSubscriberEnd);\n // Re-subscribe previous channels\n const previousChannels = { subscribe: [], psubscribe: [], ssubscribe: [] };\n if (lastActiveSubscriber) {\n const condition = lastActiveSubscriber.condition || lastActiveSubscriber.prevCondition;\n if (condition && condition.subscriber) {\n previousChannels.subscribe = condition.subscriber.channels(\"subscribe\");\n previousChannels.psubscribe =\n condition.subscriber.channels(\"psubscribe\");\n previousChannels.ssubscribe =\n condition.subscriber.channels(\"ssubscribe\");\n }\n }\n if (previousChannels.subscribe.length ||\n previousChannels.psubscribe.length ||\n previousChannels.ssubscribe.length) {\n let pending = 0;\n for (const type of [\"subscribe\", \"psubscribe\", \"ssubscribe\"]) {\n const channels = previousChannels[type];\n if (channels.length) {\n pending += 1;\n debug(\"%s %d channels\", type, channels.length);\n this.subscriber[type](channels)\n .then(() => {\n if (!--pending) {\n this.lastActiveSubscriber = this.subscriber;\n }\n })\n .catch(() => {\n // TODO: should probably disconnect the subscriber and try again.\n debug(\"failed to %s %d channels\", type, channels.length);\n });\n }\n }\n }\n else {\n this.lastActiveSubscriber = this.subscriber;\n }\n for (const event of [\n \"message\",\n \"messageBuffer\",\n \"smessage\",\n \"smessageBuffer\",\n ]) {\n this.subscriber.on(event, (arg1, arg2) => {\n this.emitter.emit(event, arg1, arg2);\n });\n }\n for (const event of [\"pmessage\", \"pmessageBuffer\"]) {\n this.subscriber.on(event, (arg1, arg2, arg3) => {\n this.emitter.emit(event, arg1, arg2, arg3);\n });\n }\n }\n}\nexports.default = ClusterSubscriber;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst events_1 = require(\"events\");\nconst utils_1 = require(\"../utils\");\nconst util_1 = require(\"./util\");\nconst Redis_1 = require(\"../Redis\");\nconst debug = (0, utils_1.Debug)(\"cluster:connectionPool\");\nclass ConnectionPool extends events_1.EventEmitter {\n constructor(redisOptions) {\n super();\n this.redisOptions = redisOptions;\n // master + slave = all\n this.nodes = {\n all: {},\n master: {},\n slave: {},\n };\n this.specifiedOptions = {};\n }\n getNodes(role = \"all\") {\n const nodes = this.nodes[role];\n return Object.keys(nodes).map((key) => nodes[key]);\n }\n getInstanceByKey(key) {\n return this.nodes.all[key];\n }\n getSampleInstance(role) {\n const keys = Object.keys(this.nodes[role]);\n const sampleKey = (0, utils_1.sample)(keys);\n return this.nodes[role][sampleKey];\n }\n /**\n * Find or create a connection to the node\n */\n findOrCreate(node, readOnly = false) {\n const key = (0, util_1.getNodeKey)(node);\n readOnly = Boolean(readOnly);\n if (this.specifiedOptions[key]) {\n Object.assign(node, this.specifiedOptions[key]);\n }\n else {\n this.specifiedOptions[key] = node;\n }\n let redis;\n if (this.nodes.all[key]) {\n redis = this.nodes.all[key];\n if (redis.options.readOnly !== readOnly) {\n redis.options.readOnly = readOnly;\n debug(\"Change role of %s to %s\", key, readOnly ? \"slave\" : \"master\");\n redis[readOnly ? \"readonly\" : \"readwrite\"]().catch(utils_1.noop);\n if (readOnly) {\n delete this.nodes.master[key];\n this.nodes.slave[key] = redis;\n }\n else {\n delete this.nodes.slave[key];\n this.nodes.master[key] = redis;\n }\n }\n }\n else {\n debug(\"Connecting to %s as %s\", key, readOnly ? \"slave\" : \"master\");\n redis = new Redis_1.default((0, utils_1.defaults)({\n // Never try to reconnect when a node is lose,\n // instead, waiting for a `MOVED` error and\n // fetch the slots again.\n retryStrategy: null,\n // Offline queue should be enabled so that\n // we don't need to wait for the `ready` event\n // before sending commands to the node.\n enableOfflineQueue: true,\n readOnly: readOnly,\n }, node, this.redisOptions, { lazyConnect: true }));\n this.nodes.all[key] = redis;\n this.nodes[readOnly ? \"slave\" : \"master\"][key] = redis;\n redis.once(\"end\", () => {\n this.removeNode(key);\n this.emit(\"-node\", redis, key);\n if (!Object.keys(this.nodes.all).length) {\n this.emit(\"drain\");\n }\n });\n this.emit(\"+node\", redis, key);\n redis.on(\"error\", function (error) {\n this.emit(\"nodeError\", error, key);\n });\n }\n return redis;\n }\n /**\n * Reset the pool with a set of nodes.\n * The old node will be removed.\n */\n reset(nodes) {\n debug(\"Reset with %O\", nodes);\n const newNodes = {};\n nodes.forEach((node) => {\n const key = (0, util_1.getNodeKey)(node);\n // Don't override the existing (master) node\n // when the current one is slave.\n if (!(node.readOnly && newNodes[key])) {\n newNodes[key] = node;\n }\n });\n Object.keys(this.nodes.all).forEach((key) => {\n if (!newNodes[key]) {\n debug(\"Disconnect %s because the node does not hold any slot\", key);\n this.nodes.all[key].disconnect();\n this.removeNode(key);\n }\n });\n Object.keys(newNodes).forEach((key) => {\n const node = newNodes[key];\n this.findOrCreate(node, node.readOnly);\n });\n }\n /**\n * Remove a node from the pool.\n */\n removeNode(key) {\n const { nodes } = this;\n if (nodes.all[key]) {\n debug(\"Remove %s from the pool\", key);\n delete nodes.all[key];\n }\n delete nodes.master[key];\n delete nodes.slave[key];\n }\n}\nexports.default = ConnectionPool;\n","'use strict';\n\n/**\n * Custom implementation of a double ended queue.\n */\nfunction Denque(array, options) {\n var options = options || {};\n this._capacity = options.capacity;\n\n this._head = 0;\n this._tail = 0;\n\n if (Array.isArray(array)) {\n this._fromArray(array);\n } else {\n this._capacityMask = 0x3;\n this._list = new Array(4);\n }\n}\n\n/**\n * --------------\n * PUBLIC API\n * -------------\n */\n\n/**\n * Returns the item at the specified index from the list.\n * 0 is the first element, 1 is the second, and so on...\n * Elements at negative values are that many from the end: -1 is one before the end\n * (the last element), -2 is two before the end (one before last), etc.\n * @param index\n * @returns {*}\n */\nDenque.prototype.peekAt = function peekAt(index) {\n var i = index;\n // expect a number or return undefined\n if ((i !== (i | 0))) {\n return void 0;\n }\n var len = this.size();\n if (i >= len || i < -len) return undefined;\n if (i < 0) i += len;\n i = (this._head + i) & this._capacityMask;\n return this._list[i];\n};\n\n/**\n * Alias for peekAt()\n * @param i\n * @returns {*}\n */\nDenque.prototype.get = function get(i) {\n return this.peekAt(i);\n};\n\n/**\n * Returns the first item in the list without removing it.\n * @returns {*}\n */\nDenque.prototype.peek = function peek() {\n if (this._head === this._tail) return undefined;\n return this._list[this._head];\n};\n\n/**\n * Alias for peek()\n * @returns {*}\n */\nDenque.prototype.peekFront = function peekFront() {\n return this.peek();\n};\n\n/**\n * Returns the item that is at the back of the queue without removing it.\n * Uses peekAt(-1)\n */\nDenque.prototype.peekBack = function peekBack() {\n return this.peekAt(-1);\n};\n\n/**\n * Returns the current length of the queue\n * @return {Number}\n */\nObject.defineProperty(Denque.prototype, 'length', {\n get: function length() {\n return this.size();\n }\n});\n\n/**\n * Return the number of items on the list, or 0 if empty.\n * @returns {number}\n */\nDenque.prototype.size = function size() {\n if (this._head === this._tail) return 0;\n if (this._head < this._tail) return this._tail - this._head;\n else return this._capacityMask + 1 - (this._head - this._tail);\n};\n\n/**\n * Add an item at the beginning of the list.\n * @param item\n */\nDenque.prototype.unshift = function unshift(item) {\n if (arguments.length === 0) return this.size();\n var len = this._list.length;\n this._head = (this._head - 1 + len) & this._capacityMask;\n this._list[this._head] = item;\n if (this._tail === this._head) this._growArray();\n if (this._capacity && this.size() > this._capacity) this.pop();\n if (this._head < this._tail) return this._tail - this._head;\n else return this._capacityMask + 1 - (this._head - this._tail);\n};\n\n/**\n * Remove and return the first item on the list,\n * Returns undefined if the list is empty.\n * @returns {*}\n */\nDenque.prototype.shift = function shift() {\n var head = this._head;\n if (head === this._tail) return undefined;\n var item = this._list[head];\n this._list[head] = undefined;\n this._head = (head + 1) & this._capacityMask;\n if (head < 2 && this._tail > 10000 && this._tail <= this._list.length >>> 2) this._shrinkArray();\n return item;\n};\n\n/**\n * Add an item to the bottom of the list.\n * @param item\n */\nDenque.prototype.push = function push(item) {\n if (arguments.length === 0) return this.size();\n var tail = this._tail;\n this._list[tail] = item;\n this._tail = (tail + 1) & this._capacityMask;\n if (this._tail === this._head) {\n this._growArray();\n }\n if (this._capacity && this.size() > this._capacity) {\n this.shift();\n }\n if (this._head < this._tail) return this._tail - this._head;\n else return this._capacityMask + 1 - (this._head - this._tail);\n};\n\n/**\n * Remove and return the last item on the list.\n * Returns undefined if the list is empty.\n * @returns {*}\n */\nDenque.prototype.pop = function pop() {\n var tail = this._tail;\n if (tail === this._head) return undefined;\n var len = this._list.length;\n this._tail = (tail - 1 + len) & this._capacityMask;\n var item = this._list[this._tail];\n this._list[this._tail] = undefined;\n if (this._head < 2 && tail > 10000 && tail <= len >>> 2) this._shrinkArray();\n return item;\n};\n\n/**\n * Remove and return the item at the specified index from the list.\n * Returns undefined if the list is empty.\n * @param index\n * @returns {*}\n */\nDenque.prototype.removeOne = function removeOne(index) {\n var i = index;\n // expect a number or return undefined\n if ((i !== (i | 0))) {\n return void 0;\n }\n if (this._head === this._tail) return void 0;\n var size = this.size();\n var len = this._list.length;\n if (i >= size || i < -size) return void 0;\n if (i < 0) i += size;\n i = (this._head + i) & this._capacityMask;\n var item = this._list[i];\n var k;\n if (index < size / 2) {\n for (k = index; k > 0; k--) {\n this._list[i] = this._list[i = (i - 1 + len) & this._capacityMask];\n }\n this._list[i] = void 0;\n this._head = (this._head + 1 + len) & this._capacityMask;\n } else {\n for (k = size - 1 - index; k > 0; k--) {\n this._list[i] = this._list[i = (i + 1 + len) & this._capacityMask];\n }\n this._list[i] = void 0;\n this._tail = (this._tail - 1 + len) & this._capacityMask;\n }\n return item;\n};\n\n/**\n * Remove number of items from the specified index from the list.\n * Returns array of removed items.\n * Returns undefined if the list is empty.\n * @param index\n * @param count\n * @returns {array}\n */\nDenque.prototype.remove = function remove(index, count) {\n var i = index;\n var removed;\n var del_count = count;\n // expect a number or return undefined\n if ((i !== (i | 0))) {\n return void 0;\n }\n if (this._head === this._tail) return void 0;\n var size = this.size();\n var len = this._list.length;\n if (i >= size || i < -size || count < 1) return void 0;\n if (i < 0) i += size;\n if (count === 1 || !count) {\n removed = new Array(1);\n removed[0] = this.removeOne(i);\n return removed;\n }\n if (i === 0 && i + count >= size) {\n removed = this.toArray();\n this.clear();\n return removed;\n }\n if (i + count > size) count = size - i;\n var k;\n removed = new Array(count);\n for (k = 0; k < count; k++) {\n removed[k] = this._list[(this._head + i + k) & this._capacityMask];\n }\n i = (this._head + i) & this._capacityMask;\n if (index + count === size) {\n this._tail = (this._tail - count + len) & this._capacityMask;\n for (k = count; k > 0; k--) {\n this._list[i = (i + 1 + len) & this._capacityMask] = void 0;\n }\n return removed;\n }\n if (index === 0) {\n this._head = (this._head + count + len) & this._capacityMask;\n for (k = count - 1; k > 0; k--) {\n this._list[i = (i + 1 + len) & this._capacityMask] = void 0;\n }\n return removed;\n }\n if (i < size / 2) {\n this._head = (this._head + index + count + len) & this._capacityMask;\n for (k = index; k > 0; k--) {\n this.unshift(this._list[i = (i - 1 + len) & this._capacityMask]);\n }\n i = (this._head - 1 + len) & this._capacityMask;\n while (del_count > 0) {\n this._list[i = (i - 1 + len) & this._capacityMask] = void 0;\n del_count--;\n }\n if (index < 0) this._tail = i;\n } else {\n this._tail = i;\n i = (i + count + len) & this._capacityMask;\n for (k = size - (count + index); k > 0; k--) {\n this.push(this._list[i++]);\n }\n i = this._tail;\n while (del_count > 0) {\n this._list[i = (i + 1 + len) & this._capacityMask] = void 0;\n del_count--;\n }\n }\n if (this._head < 2 && this._tail > 10000 && this._tail <= len >>> 2) this._shrinkArray();\n return removed;\n};\n\n/**\n * Native splice implementation.\n * Remove number of items from the specified index from the list and/or add new elements.\n * Returns array of removed items or empty array if count == 0.\n * Returns undefined if the list is empty.\n *\n * @param index\n * @param count\n * @param {...*} [elements]\n * @returns {array}\n */\nDenque.prototype.splice = function splice(index, count) {\n var i = index;\n // expect a number or return undefined\n if ((i !== (i | 0))) {\n return void 0;\n }\n var size = this.size();\n if (i < 0) i += size;\n if (i > size) return void 0;\n if (arguments.length > 2) {\n var k;\n var temp;\n var removed;\n var arg_len = arguments.length;\n var len = this._list.length;\n var arguments_index = 2;\n if (!size || i < size / 2) {\n temp = new Array(i);\n for (k = 0; k < i; k++) {\n temp[k] = this._list[(this._head + k) & this._capacityMask];\n }\n if (count === 0) {\n removed = [];\n if (i > 0) {\n this._head = (this._head + i + len) & this._capacityMask;\n }\n } else {\n removed = this.remove(i, count);\n this._head = (this._head + i + len) & this._capacityMask;\n }\n while (arg_len > arguments_index) {\n this.unshift(arguments[--arg_len]);\n }\n for (k = i; k > 0; k--) {\n this.unshift(temp[k - 1]);\n }\n } else {\n temp = new Array(size - (i + count));\n var leng = temp.length;\n for (k = 0; k < leng; k++) {\n temp[k] = this._list[(this._head + i + count + k) & this._capacityMask];\n }\n if (count === 0) {\n removed = [];\n if (i != size) {\n this._tail = (this._head + i + len) & this._capacityMask;\n }\n } else {\n removed = this.remove(i, count);\n this._tail = (this._tail - leng + len) & this._capacityMask;\n }\n while (arguments_index < arg_len) {\n this.push(arguments[arguments_index++]);\n }\n for (k = 0; k < leng; k++) {\n this.push(temp[k]);\n }\n }\n return removed;\n } else {\n return this.remove(i, count);\n }\n};\n\n/**\n * Soft clear - does not reset capacity.\n */\nDenque.prototype.clear = function clear() {\n this._list = new Array(this._list.length);\n this._head = 0;\n this._tail = 0;\n};\n\n/**\n * Returns true or false whether the list is empty.\n * @returns {boolean}\n */\nDenque.prototype.isEmpty = function isEmpty() {\n return this._head === this._tail;\n};\n\n/**\n * Returns an array of all queue items.\n * @returns {Array}\n */\nDenque.prototype.toArray = function toArray() {\n return this._copyArray(false);\n};\n\n/**\n * -------------\n * INTERNALS\n * -------------\n */\n\n/**\n * Fills the queue with items from an array\n * For use in the constructor\n * @param array\n * @private\n */\nDenque.prototype._fromArray = function _fromArray(array) {\n var length = array.length;\n var capacity = this._nextPowerOf2(length);\n\n this._list = new Array(capacity);\n this._capacityMask = capacity - 1;\n this._tail = length;\n\n for (var i = 0; i < length; i++) this._list[i] = array[i];\n};\n\n/**\n *\n * @param fullCopy\n * @param size Initialize the array with a specific size. Will default to the current list size\n * @returns {Array}\n * @private\n */\nDenque.prototype._copyArray = function _copyArray(fullCopy, size) {\n var src = this._list;\n var capacity = src.length;\n var length = this.length;\n size = size | length;\n\n // No prealloc requested and the buffer is contiguous\n if (size == length && this._head < this._tail) {\n // Simply do a fast slice copy\n return this._list.slice(this._head, this._tail);\n }\n\n var dest = new Array(size);\n\n var k = 0;\n var i;\n if (fullCopy || this._head > this._tail) {\n for (i = this._head; i < capacity; i++) dest[k++] = src[i];\n for (i = 0; i < this._tail; i++) dest[k++] = src[i];\n } else {\n for (i = this._head; i < this._tail; i++) dest[k++] = src[i];\n }\n\n return dest;\n}\n\n/**\n * Grows the internal list array.\n * @private\n */\nDenque.prototype._growArray = function _growArray() {\n if (this._head != 0) {\n // double array size and copy existing data, head to end, then beginning to tail.\n var newList = this._copyArray(true, this._list.length << 1);\n\n this._tail = this._list.length;\n this._head = 0;\n\n this._list = newList;\n } else {\n this._tail = this._list.length;\n this._list.length <<= 1;\n }\n\n this._capacityMask = (this._capacityMask << 1) | 1;\n};\n\n/**\n * Shrinks the internal list array.\n * @private\n */\nDenque.prototype._shrinkArray = function _shrinkArray() {\n this._list.length >>>= 1;\n this._capacityMask >>>= 1;\n};\n\n/**\n * Find the next power of 2, at least 4\n * @private\n * @param {number} num \n * @returns {number}\n */\nDenque.prototype._nextPowerOf2 = function _nextPowerOf2(num) {\n var log2 = Math.log(num) / Math.log(2);\n var nextPow2 = 1 << (log2 + 1);\n\n return Math.max(nextPow2, 4);\n}\n\nmodule.exports = Denque;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils_1 = require(\"../utils\");\nconst Deque = require(\"denque\");\nconst debug = (0, utils_1.Debug)(\"delayqueue\");\n/**\n * Queue that runs items after specified duration\n */\nclass DelayQueue {\n constructor() {\n this.queues = {};\n this.timeouts = {};\n }\n /**\n * Add a new item to the queue\n *\n * @param bucket bucket name\n * @param item function that will run later\n * @param options\n */\n push(bucket, item, options) {\n const callback = options.callback || process.nextTick;\n if (!this.queues[bucket]) {\n this.queues[bucket] = new Deque();\n }\n const queue = this.queues[bucket];\n queue.push(item);\n if (!this.timeouts[bucket]) {\n this.timeouts[bucket] = setTimeout(() => {\n callback(() => {\n this.timeouts[bucket] = null;\n this.execute(bucket);\n });\n }, options.timeout);\n }\n }\n execute(bucket) {\n const queue = this.queues[bucket];\n if (!queue) {\n return;\n }\n const { length } = queue;\n if (!length) {\n return;\n }\n debug(\"send %d commands in %s queue\", length, bucket);\n this.queues[bucket] = null;\n while (queue.length > 0) {\n queue.shift()();\n }\n }\n}\nexports.default = DelayQueue;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst commands_1 = require(\"@ioredis/commands\");\nconst events_1 = require(\"events\");\nconst redis_errors_1 = require(\"redis-errors\");\nconst standard_as_callback_1 = require(\"standard-as-callback\");\nconst Command_1 = require(\"../Command\");\nconst ClusterAllFailedError_1 = require(\"../errors/ClusterAllFailedError\");\nconst Redis_1 = require(\"../Redis\");\nconst ScanStream_1 = require(\"../ScanStream\");\nconst transaction_1 = require(\"../transaction\");\nconst utils_1 = require(\"../utils\");\nconst applyMixin_1 = require(\"../utils/applyMixin\");\nconst Commander_1 = require(\"../utils/Commander\");\nconst ClusterOptions_1 = require(\"./ClusterOptions\");\nconst ClusterSubscriber_1 = require(\"./ClusterSubscriber\");\nconst ConnectionPool_1 = require(\"./ConnectionPool\");\nconst DelayQueue_1 = require(\"./DelayQueue\");\nconst util_1 = require(\"./util\");\nconst Deque = require(\"denque\");\nconst debug = (0, utils_1.Debug)(\"cluster\");\nconst REJECT_OVERWRITTEN_COMMANDS = new WeakSet();\n/**\n * Client for the official Redis Cluster\n */\nclass Cluster extends Commander_1.default {\n /**\n * Creates an instance of Cluster.\n */\n constructor(startupNodes, options = {}) {\n super();\n this.slots = [];\n /**\n * @ignore\n */\n this._groupsIds = {};\n /**\n * @ignore\n */\n this._groupsBySlot = Array(16384);\n /**\n * @ignore\n */\n this.isCluster = true;\n this.retryAttempts = 0;\n this.delayQueue = new DelayQueue_1.default();\n this.offlineQueue = new Deque();\n this.isRefreshing = false;\n this._autoPipelines = new Map();\n this._runningAutoPipelines = new Set();\n this._readyDelayedCallbacks = [];\n /**\n * Every time Cluster#connect() is called, this value will be\n * auto-incrementing. The purpose of this value is used for\n * discarding previous connect attampts when creating a new\n * connection.\n */\n this.connectionEpoch = 0;\n events_1.EventEmitter.call(this);\n this.startupNodes = startupNodes;\n this.options = (0, utils_1.defaults)({}, options, ClusterOptions_1.DEFAULT_CLUSTER_OPTIONS, this.options);\n if (this.options.redisOptions &&\n this.options.redisOptions.keyPrefix &&\n !this.options.keyPrefix) {\n this.options.keyPrefix = this.options.redisOptions.keyPrefix;\n }\n // validate options\n if (typeof this.options.scaleReads !== \"function\" &&\n [\"all\", \"master\", \"slave\"].indexOf(this.options.scaleReads) === -1) {\n throw new Error('Invalid option scaleReads \"' +\n this.options.scaleReads +\n '\". Expected \"all\", \"master\", \"slave\" or a custom function');\n }\n this.connectionPool = new ConnectionPool_1.default(this.options.redisOptions);\n this.connectionPool.on(\"-node\", (redis, key) => {\n this.emit(\"-node\", redis);\n });\n this.connectionPool.on(\"+node\", (redis) => {\n this.emit(\"+node\", redis);\n });\n this.connectionPool.on(\"drain\", () => {\n this.setStatus(\"close\");\n });\n this.connectionPool.on(\"nodeError\", (error, key) => {\n this.emit(\"node error\", error, key);\n });\n this.subscriber = new ClusterSubscriber_1.default(this.connectionPool, this);\n if (this.options.scripts) {\n Object.entries(this.options.scripts).forEach(([name, definition]) => {\n this.defineCommand(name, definition);\n });\n }\n if (this.options.lazyConnect) {\n this.setStatus(\"wait\");\n }\n else {\n this.connect().catch((err) => {\n debug(\"connecting failed: %s\", err);\n });\n }\n }\n /**\n * Connect to a cluster\n */\n connect() {\n return new Promise((resolve, reject) => {\n if (this.status === \"connecting\" ||\n this.status === \"connect\" ||\n this.status === \"ready\") {\n reject(new Error(\"Redis is already connecting/connected\"));\n return;\n }\n const epoch = ++this.connectionEpoch;\n this.setStatus(\"connecting\");\n this.resolveStartupNodeHostnames()\n .then((nodes) => {\n if (this.connectionEpoch !== epoch) {\n debug(\"discard connecting after resolving startup nodes because epoch not match: %d != %d\", epoch, this.connectionEpoch);\n reject(new redis_errors_1.RedisError(\"Connection is discarded because a new connection is made\"));\n return;\n }\n if (this.status !== \"connecting\") {\n debug(\"discard connecting after resolving startup nodes because the status changed to %s\", this.status);\n reject(new redis_errors_1.RedisError(\"Connection is aborted\"));\n return;\n }\n this.connectionPool.reset(nodes);\n const readyHandler = () => {\n this.setStatus(\"ready\");\n this.retryAttempts = 0;\n this.executeOfflineCommands();\n this.resetNodesRefreshInterval();\n resolve();\n };\n let closeListener = undefined;\n const refreshListener = () => {\n this.invokeReadyDelayedCallbacks(undefined);\n this.removeListener(\"close\", closeListener);\n this.manuallyClosing = false;\n this.setStatus(\"connect\");\n if (this.options.enableReadyCheck) {\n this.readyCheck((err, fail) => {\n if (err || fail) {\n debug(\"Ready check failed (%s). Reconnecting...\", err || fail);\n if (this.status === \"connect\") {\n this.disconnect(true);\n }\n }\n else {\n readyHandler();\n }\n });\n }\n else {\n readyHandler();\n }\n };\n closeListener = () => {\n const error = new Error(\"None of startup nodes is available\");\n this.removeListener(\"refresh\", refreshListener);\n this.invokeReadyDelayedCallbacks(error);\n reject(error);\n };\n this.once(\"refresh\", refreshListener);\n this.once(\"close\", closeListener);\n this.once(\"close\", this.handleCloseEvent.bind(this));\n this.refreshSlotsCache((err) => {\n if (err && err.message === ClusterAllFailedError_1.default.defaultMessage) {\n Redis_1.default.prototype.silentEmit.call(this, \"error\", err);\n this.connectionPool.reset([]);\n }\n });\n this.subscriber.start();\n })\n .catch((err) => {\n this.setStatus(\"close\");\n this.handleCloseEvent(err);\n this.invokeReadyDelayedCallbacks(err);\n reject(err);\n });\n });\n }\n /**\n * Disconnect from every node in the cluster.\n */\n disconnect(reconnect = false) {\n const status = this.status;\n this.setStatus(\"disconnecting\");\n if (!reconnect) {\n this.manuallyClosing = true;\n }\n if (this.reconnectTimeout && !reconnect) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n debug(\"Canceled reconnecting attempts\");\n }\n this.clearNodesRefreshInterval();\n this.subscriber.stop();\n if (status === \"wait\") {\n this.setStatus(\"close\");\n this.handleCloseEvent();\n }\n else {\n this.connectionPool.reset([]);\n }\n }\n /**\n * Quit the cluster gracefully.\n */\n quit(callback) {\n const status = this.status;\n this.setStatus(\"disconnecting\");\n this.manuallyClosing = true;\n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n this.clearNodesRefreshInterval();\n this.subscriber.stop();\n if (status === \"wait\") {\n const ret = (0, standard_as_callback_1.default)(Promise.resolve(\"OK\"), callback);\n // use setImmediate to make sure \"close\" event\n // being emitted after quit() is returned\n setImmediate(function () {\n this.setStatus(\"close\");\n this.handleCloseEvent();\n }.bind(this));\n return ret;\n }\n return (0, standard_as_callback_1.default)(Promise.all(this.nodes().map((node) => node.quit().catch((err) => {\n // Ignore the error caused by disconnecting since\n // we're disconnecting...\n if (err.message === utils_1.CONNECTION_CLOSED_ERROR_MSG) {\n return \"OK\";\n }\n throw err;\n }))).then(() => \"OK\"), callback);\n }\n /**\n * Create a new instance with the same startup nodes and options as the current one.\n *\n * @example\n * ```js\n * var cluster = new Redis.Cluster([{ host: \"127.0.0.1\", port: \"30001\" }]);\n * var anotherCluster = cluster.duplicate();\n * ```\n */\n duplicate(overrideStartupNodes = [], overrideOptions = {}) {\n const startupNodes = overrideStartupNodes.length > 0\n ? overrideStartupNodes\n : this.startupNodes.slice(0);\n const options = Object.assign({}, this.options, overrideOptions);\n return new Cluster(startupNodes, options);\n }\n /**\n * Get nodes with the specified role\n */\n nodes(role = \"all\") {\n if (role !== \"all\" && role !== \"master\" && role !== \"slave\") {\n throw new Error('Invalid role \"' + role + '\". Expected \"all\", \"master\" or \"slave\"');\n }\n return this.connectionPool.getNodes(role);\n }\n /**\n * This is needed in order not to install a listener for each auto pipeline\n *\n * @ignore\n */\n delayUntilReady(callback) {\n this._readyDelayedCallbacks.push(callback);\n }\n /**\n * Get the number of commands queued in automatic pipelines.\n *\n * This is not available (and returns 0) until the cluster is connected and slots information have been received.\n */\n get autoPipelineQueueSize() {\n let queued = 0;\n for (const pipeline of this._autoPipelines.values()) {\n queued += pipeline.length;\n }\n return queued;\n }\n /**\n * Refresh the slot cache\n *\n * @ignore\n */\n refreshSlotsCache(callback) {\n if (this.isRefreshing) {\n if (callback) {\n process.nextTick(callback);\n }\n return;\n }\n this.isRefreshing = true;\n const _this = this;\n const wrapper = (error) => {\n this.isRefreshing = false;\n if (callback) {\n callback(error);\n }\n };\n const nodes = (0, utils_1.shuffle)(this.connectionPool.getNodes());\n let lastNodeError = null;\n function tryNode(index) {\n if (index === nodes.length) {\n const error = new ClusterAllFailedError_1.default(ClusterAllFailedError_1.default.defaultMessage, lastNodeError);\n return wrapper(error);\n }\n const node = nodes[index];\n const key = `${node.options.host}:${node.options.port}`;\n debug(\"getting slot cache from %s\", key);\n _this.getInfoFromNode(node, function (err) {\n switch (_this.status) {\n case \"close\":\n case \"end\":\n return wrapper(new Error(\"Cluster is disconnected.\"));\n case \"disconnecting\":\n return wrapper(new Error(\"Cluster is disconnecting.\"));\n }\n if (err) {\n _this.emit(\"node error\", err, key);\n lastNodeError = err;\n tryNode(index + 1);\n }\n else {\n _this.emit(\"refresh\");\n wrapper();\n }\n });\n }\n tryNode(0);\n }\n /**\n * @ignore\n */\n sendCommand(command, stream, node) {\n if (this.status === \"wait\") {\n this.connect().catch(utils_1.noop);\n }\n if (this.status === \"end\") {\n command.reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n return command.promise;\n }\n let to = this.options.scaleReads;\n if (to !== \"master\") {\n const isCommandReadOnly = command.isReadOnly ||\n ((0, commands_1.exists)(command.name) && (0, commands_1.hasFlag)(command.name, \"readonly\"));\n if (!isCommandReadOnly) {\n to = \"master\";\n }\n }\n let targetSlot = node ? node.slot : command.getSlot();\n const ttl = {};\n const _this = this;\n if (!node && !REJECT_OVERWRITTEN_COMMANDS.has(command)) {\n REJECT_OVERWRITTEN_COMMANDS.add(command);\n const reject = command.reject;\n command.reject = function (err) {\n const partialTry = tryConnection.bind(null, true);\n _this.handleError(err, ttl, {\n moved: function (slot, key) {\n debug(\"command %s is moved to %s\", command.name, key);\n targetSlot = Number(slot);\n if (_this.slots[slot]) {\n _this.slots[slot][0] = key;\n }\n else {\n _this.slots[slot] = [key];\n }\n _this._groupsBySlot[slot] =\n _this._groupsIds[_this.slots[slot].join(\";\")];\n _this.connectionPool.findOrCreate(_this.natMapper(key));\n tryConnection();\n debug(\"refreshing slot caches... (triggered by MOVED error)\");\n _this.refreshSlotsCache();\n },\n ask: function (slot, key) {\n debug(\"command %s is required to ask %s:%s\", command.name, key);\n const mapped = _this.natMapper(key);\n _this.connectionPool.findOrCreate(mapped);\n tryConnection(false, `${mapped.host}:${mapped.port}`);\n },\n tryagain: partialTry,\n clusterDown: partialTry,\n connectionClosed: partialTry,\n maxRedirections: function (redirectionError) {\n reject.call(command, redirectionError);\n },\n defaults: function () {\n reject.call(command, err);\n },\n });\n };\n }\n tryConnection();\n function tryConnection(random, asking) {\n if (_this.status === \"end\") {\n command.reject(new redis_errors_1.AbortError(\"Cluster is ended.\"));\n return;\n }\n let redis;\n if (_this.status === \"ready\" || command.name === \"cluster\") {\n if (node && node.redis) {\n redis = node.redis;\n }\n else if (Command_1.default.checkFlag(\"ENTER_SUBSCRIBER_MODE\", command.name) ||\n Command_1.default.checkFlag(\"EXIT_SUBSCRIBER_MODE\", command.name)) {\n redis = _this.subscriber.getInstance();\n if (!redis) {\n command.reject(new redis_errors_1.AbortError(\"No subscriber for the cluster\"));\n return;\n }\n }\n else {\n if (!random) {\n if (typeof targetSlot === \"number\" && _this.slots[targetSlot]) {\n const nodeKeys = _this.slots[targetSlot];\n if (typeof to === \"function\") {\n const nodes = nodeKeys.map(function (key) {\n return _this.connectionPool.getInstanceByKey(key);\n });\n redis = to(nodes, command);\n if (Array.isArray(redis)) {\n redis = (0, utils_1.sample)(redis);\n }\n if (!redis) {\n redis = nodes[0];\n }\n }\n else {\n let key;\n if (to === \"all\") {\n key = (0, utils_1.sample)(nodeKeys);\n }\n else if (to === \"slave\" && nodeKeys.length > 1) {\n key = (0, utils_1.sample)(nodeKeys, 1);\n }\n else {\n key = nodeKeys[0];\n }\n redis = _this.connectionPool.getInstanceByKey(key);\n }\n }\n if (asking) {\n redis = _this.connectionPool.getInstanceByKey(asking);\n redis.asking();\n }\n }\n if (!redis) {\n redis =\n (typeof to === \"function\"\n ? null\n : _this.connectionPool.getSampleInstance(to)) ||\n _this.connectionPool.getSampleInstance(\"all\");\n }\n }\n if (node && !node.redis) {\n node.redis = redis;\n }\n }\n if (redis) {\n redis.sendCommand(command, stream);\n }\n else if (_this.options.enableOfflineQueue) {\n _this.offlineQueue.push({\n command: command,\n stream: stream,\n node: node,\n });\n }\n else {\n command.reject(new Error(\"Cluster isn't ready and enableOfflineQueue options is false\"));\n }\n }\n return command.promise;\n }\n sscanStream(key, options) {\n return this.createScanStream(\"sscan\", { key, options });\n }\n sscanBufferStream(key, options) {\n return this.createScanStream(\"sscanBuffer\", { key, options });\n }\n hscanStream(key, options) {\n return this.createScanStream(\"hscan\", { key, options });\n }\n hscanBufferStream(key, options) {\n return this.createScanStream(\"hscanBuffer\", { key, options });\n }\n zscanStream(key, options) {\n return this.createScanStream(\"zscan\", { key, options });\n }\n zscanBufferStream(key, options) {\n return this.createScanStream(\"zscanBuffer\", { key, options });\n }\n /**\n * @ignore\n */\n handleError(error, ttl, handlers) {\n if (typeof ttl.value === \"undefined\") {\n ttl.value = this.options.maxRedirections;\n }\n else {\n ttl.value -= 1;\n }\n if (ttl.value <= 0) {\n handlers.maxRedirections(new Error(\"Too many Cluster redirections. Last error: \" + error));\n return;\n }\n const errv = error.message.split(\" \");\n if (errv[0] === \"MOVED\") {\n const timeout = this.options.retryDelayOnMoved;\n if (timeout && typeof timeout === \"number\") {\n this.delayQueue.push(\"moved\", handlers.moved.bind(null, errv[1], errv[2]), { timeout });\n }\n else {\n handlers.moved(errv[1], errv[2]);\n }\n }\n else if (errv[0] === \"ASK\") {\n handlers.ask(errv[1], errv[2]);\n }\n else if (errv[0] === \"TRYAGAIN\") {\n this.delayQueue.push(\"tryagain\", handlers.tryagain, {\n timeout: this.options.retryDelayOnTryAgain,\n });\n }\n else if (errv[0] === \"CLUSTERDOWN\" &&\n this.options.retryDelayOnClusterDown > 0) {\n this.delayQueue.push(\"clusterdown\", handlers.connectionClosed, {\n timeout: this.options.retryDelayOnClusterDown,\n callback: this.refreshSlotsCache.bind(this),\n });\n }\n else if (error.message === utils_1.CONNECTION_CLOSED_ERROR_MSG &&\n this.options.retryDelayOnFailover > 0 &&\n this.status === \"ready\") {\n this.delayQueue.push(\"failover\", handlers.connectionClosed, {\n timeout: this.options.retryDelayOnFailover,\n callback: this.refreshSlotsCache.bind(this),\n });\n }\n else {\n handlers.defaults();\n }\n }\n resetOfflineQueue() {\n this.offlineQueue = new Deque();\n }\n clearNodesRefreshInterval() {\n if (this.slotsTimer) {\n clearTimeout(this.slotsTimer);\n this.slotsTimer = null;\n }\n }\n resetNodesRefreshInterval() {\n if (this.slotsTimer || !this.options.slotsRefreshInterval) {\n return;\n }\n const nextRound = () => {\n this.slotsTimer = setTimeout(() => {\n debug('refreshing slot caches... (triggered by \"slotsRefreshInterval\" option)');\n this.refreshSlotsCache(() => {\n nextRound();\n });\n }, this.options.slotsRefreshInterval);\n };\n nextRound();\n }\n /**\n * Change cluster instance's status\n */\n setStatus(status) {\n debug(\"status: %s -> %s\", this.status || \"[empty]\", status);\n this.status = status;\n process.nextTick(() => {\n this.emit(status);\n });\n }\n /**\n * Called when closed to check whether a reconnection should be made\n */\n handleCloseEvent(reason) {\n if (reason) {\n debug(\"closed because %s\", reason);\n }\n let retryDelay;\n if (!this.manuallyClosing &&\n typeof this.options.clusterRetryStrategy === \"function\") {\n retryDelay = this.options.clusterRetryStrategy.call(this, ++this.retryAttempts, reason);\n }\n if (typeof retryDelay === \"number\") {\n this.setStatus(\"reconnecting\");\n this.reconnectTimeout = setTimeout(() => {\n this.reconnectTimeout = null;\n debug(\"Cluster is disconnected. Retrying after %dms\", retryDelay);\n this.connect().catch(function (err) {\n debug(\"Got error %s when reconnecting. Ignoring...\", err);\n });\n }, retryDelay);\n }\n else {\n this.setStatus(\"end\");\n this.flushQueue(new Error(\"None of startup nodes is available\"));\n }\n }\n /**\n * Flush offline queue with error.\n */\n flushQueue(error) {\n let item;\n while ((item = this.offlineQueue.shift())) {\n item.command.reject(error);\n }\n }\n executeOfflineCommands() {\n if (this.offlineQueue.length) {\n debug(\"send %d commands in offline queue\", this.offlineQueue.length);\n const offlineQueue = this.offlineQueue;\n this.resetOfflineQueue();\n let item;\n while ((item = offlineQueue.shift())) {\n this.sendCommand(item.command, item.stream, item.node);\n }\n }\n }\n natMapper(nodeKey) {\n if (this.options.natMap && typeof this.options.natMap === \"object\") {\n const key = typeof nodeKey === \"string\"\n ? nodeKey\n : `${nodeKey.host}:${nodeKey.port}`;\n const mapped = this.options.natMap[key];\n if (mapped) {\n debug(\"NAT mapping %s -> %O\", key, mapped);\n return Object.assign({}, mapped);\n }\n }\n return typeof nodeKey === \"string\"\n ? (0, util_1.nodeKeyToRedisOptions)(nodeKey)\n : nodeKey;\n }\n getInfoFromNode(redis, callback) {\n if (!redis) {\n return callback(new Error(\"Node is disconnected\"));\n }\n // Use a duplication of the connection to avoid\n // timeouts when the connection is in the blocking\n // mode (e.g. waiting for BLPOP).\n const duplicatedConnection = redis.duplicate({\n enableOfflineQueue: true,\n enableReadyCheck: false,\n retryStrategy: null,\n connectionName: (0, util_1.getConnectionName)(\"refresher\", this.options.redisOptions && this.options.redisOptions.connectionName),\n });\n // Ignore error events since we will handle\n // exceptions for the CLUSTER SLOTS command.\n duplicatedConnection.on(\"error\", utils_1.noop);\n duplicatedConnection.cluster(\"SLOTS\", (0, utils_1.timeout)((err, result) => {\n duplicatedConnection.disconnect();\n if (err) {\n return callback(err);\n }\n if (this.status === \"disconnecting\" ||\n this.status === \"close\" ||\n this.status === \"end\") {\n debug(\"ignore CLUSTER.SLOTS results (count: %d) since cluster status is %s\", result.length, this.status);\n callback();\n return;\n }\n const nodes = [];\n debug(\"cluster slots result count: %d\", result.length);\n for (let i = 0; i < result.length; ++i) {\n const items = result[i];\n const slotRangeStart = items[0];\n const slotRangeEnd = items[1];\n const keys = [];\n for (let j = 2; j < items.length; j++) {\n if (!items[j][0]) {\n continue;\n }\n const node = this.natMapper({\n host: items[j][0],\n port: items[j][1],\n });\n node.readOnly = j !== 2;\n nodes.push(node);\n keys.push(node.host + \":\" + node.port);\n }\n debug(\"cluster slots result [%d]: slots %d~%d served by %s\", i, slotRangeStart, slotRangeEnd, keys);\n for (let slot = slotRangeStart; slot <= slotRangeEnd; slot++) {\n this.slots[slot] = keys;\n }\n }\n // Assign to each node keys a numeric value to make autopipeline comparison faster.\n this._groupsIds = Object.create(null);\n let j = 0;\n for (let i = 0; i < 16384; i++) {\n const target = (this.slots[i] || []).join(\";\");\n if (!target.length) {\n this._groupsBySlot[i] = undefined;\n continue;\n }\n if (!this._groupsIds[target]) {\n this._groupsIds[target] = ++j;\n }\n this._groupsBySlot[i] = this._groupsIds[target];\n }\n this.connectionPool.reset(nodes);\n callback();\n }, this.options.slotsRefreshTimeout));\n }\n invokeReadyDelayedCallbacks(err) {\n for (const c of this._readyDelayedCallbacks) {\n process.nextTick(c, err);\n }\n this._readyDelayedCallbacks = [];\n }\n /**\n * Check whether Cluster is able to process commands\n */\n readyCheck(callback) {\n this.cluster(\"INFO\", (err, res) => {\n if (err) {\n return callback(err);\n }\n if (typeof res !== \"string\") {\n return callback();\n }\n let state;\n const lines = res.split(\"\\r\\n\");\n for (let i = 0; i < lines.length; ++i) {\n const parts = lines[i].split(\":\");\n if (parts[0] === \"cluster_state\") {\n state = parts[1];\n break;\n }\n }\n if (state === \"fail\") {\n debug(\"cluster state not ok (%s)\", state);\n callback(null, state);\n }\n else {\n callback();\n }\n });\n }\n resolveSrv(hostname) {\n return new Promise((resolve, reject) => {\n this.options.resolveSrv(hostname, (err, records) => {\n if (err) {\n return reject(err);\n }\n const self = this, groupedRecords = (0, util_1.groupSrvRecords)(records), sortedKeys = Object.keys(groupedRecords).sort((a, b) => parseInt(a) - parseInt(b));\n function tryFirstOne(err) {\n if (!sortedKeys.length) {\n return reject(err);\n }\n const key = sortedKeys[0], group = groupedRecords[key], record = (0, util_1.weightSrvRecords)(group);\n if (!group.records.length) {\n sortedKeys.shift();\n }\n self.dnsLookup(record.name).then((host) => resolve({\n host,\n port: record.port,\n }), tryFirstOne);\n }\n tryFirstOne();\n });\n });\n }\n dnsLookup(hostname) {\n return new Promise((resolve, reject) => {\n this.options.dnsLookup(hostname, (err, address) => {\n if (err) {\n debug(\"failed to resolve hostname %s to IP: %s\", hostname, err.message);\n reject(err);\n }\n else {\n debug(\"resolved hostname %s to IP %s\", hostname, address);\n resolve(address);\n }\n });\n });\n }\n /**\n * Normalize startup nodes, and resolving hostnames to IPs.\n *\n * This process happens every time when #connect() is called since\n * #startupNodes and DNS records may chanage.\n */\n async resolveStartupNodeHostnames() {\n if (!Array.isArray(this.startupNodes) || this.startupNodes.length === 0) {\n throw new Error(\"`startupNodes` should contain at least one node.\");\n }\n const startupNodes = (0, util_1.normalizeNodeOptions)(this.startupNodes);\n const hostnames = (0, util_1.getUniqueHostnamesFromOptions)(startupNodes);\n if (hostnames.length === 0) {\n return startupNodes;\n }\n const configs = await Promise.all(hostnames.map((this.options.useSRVRecords ? this.resolveSrv : this.dnsLookup).bind(this)));\n const hostnameToConfig = (0, utils_1.zipMap)(hostnames, configs);\n return startupNodes.map((node) => {\n const config = hostnameToConfig.get(node.host);\n if (!config) {\n return node;\n }\n if (this.options.useSRVRecords) {\n return Object.assign({}, node, config);\n }\n return Object.assign({}, node, { host: config });\n });\n }\n createScanStream(command, { key, options = {} }) {\n return new ScanStream_1.default({\n objectMode: true,\n key: key,\n redis: this,\n command: command,\n ...options,\n });\n }\n}\n(0, applyMixin_1.default)(Cluster, events_1.EventEmitter);\n(0, transaction_1.addTransactionSupport)(Cluster.prototype);\nexports.default = Cluster;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils_1 = require(\"../utils\");\nconst debug = (0, utils_1.Debug)(\"AbstractConnector\");\nclass AbstractConnector {\n constructor(disconnectTimeout) {\n this.connecting = false;\n this.disconnectTimeout = disconnectTimeout;\n }\n check(info) {\n return true;\n }\n disconnect() {\n this.connecting = false;\n if (this.stream) {\n const stream = this.stream; // Make sure callbacks refer to the same instance\n const timeout = setTimeout(() => {\n debug(\"stream %s:%s still open, destroying it\", stream.remoteAddress, stream.remotePort);\n stream.destroy();\n }, this.disconnectTimeout);\n stream.on(\"close\", () => clearTimeout(timeout));\n stream.end();\n }\n }\n}\nexports.default = AbstractConnector;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst net_1 = require(\"net\");\nconst tls_1 = require(\"tls\");\nconst utils_1 = require(\"../utils\");\nconst AbstractConnector_1 = require(\"./AbstractConnector\");\nclass StandaloneConnector extends AbstractConnector_1.default {\n constructor(options) {\n super(options.disconnectTimeout);\n this.options = options;\n }\n connect(_) {\n const { options } = this;\n this.connecting = true;\n let connectionOptions;\n if (\"path\" in options && options.path) {\n connectionOptions = {\n path: options.path,\n };\n }\n else {\n connectionOptions = {};\n if (\"port\" in options && options.port != null) {\n connectionOptions.port = options.port;\n }\n if (\"host\" in options && options.host != null) {\n connectionOptions.host = options.host;\n }\n if (\"family\" in options && options.family != null) {\n connectionOptions.family = options.family;\n }\n }\n if (options.tls) {\n Object.assign(connectionOptions, options.tls);\n }\n // TODO:\n // We use native Promise here since other Promise\n // implementation may use different schedulers that\n // cause issue when the stream is resolved in the\n // next tick.\n // Should use the provided promise in the next major\n // version and do not connect before resolved.\n return new Promise((resolve, reject) => {\n process.nextTick(() => {\n if (!this.connecting) {\n reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n return;\n }\n try {\n if (options.tls) {\n this.stream = (0, tls_1.connect)(connectionOptions);\n }\n else {\n this.stream = (0, net_1.createConnection)(connectionOptions);\n }\n }\n catch (err) {\n reject(err);\n return;\n }\n this.stream.once(\"error\", (err) => {\n this.firstError = err;\n });\n resolve(this.stream);\n });\n });\n }\n}\nexports.default = StandaloneConnector;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction isSentinelEql(a, b) {\n return ((a.host || \"127.0.0.1\") === (b.host || \"127.0.0.1\") &&\n (a.port || 26379) === (b.port || 26379));\n}\nclass SentinelIterator {\n constructor(sentinels) {\n this.cursor = 0;\n this.sentinels = sentinels.slice(0);\n }\n next() {\n const done = this.cursor >= this.sentinels.length;\n return { done, value: done ? undefined : this.sentinels[this.cursor++] };\n }\n reset(moveCurrentEndpointToFirst) {\n if (moveCurrentEndpointToFirst &&\n this.sentinels.length > 1 &&\n this.cursor !== 1) {\n this.sentinels.unshift(...this.sentinels.splice(this.cursor - 1));\n }\n this.cursor = 0;\n }\n add(sentinel) {\n for (let i = 0; i < this.sentinels.length; i++) {\n if (isSentinelEql(sentinel, this.sentinels[i])) {\n return false;\n }\n }\n this.sentinels.push(sentinel);\n return true;\n }\n toString() {\n return `${JSON.stringify(this.sentinels)} @${this.cursor}`;\n }\n}\nexports.default = SentinelIterator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FailoverDetector = void 0;\nconst utils_1 = require(\"../../utils\");\nconst debug = (0, utils_1.Debug)(\"FailoverDetector\");\nconst CHANNEL_NAME = \"+switch-master\";\nclass FailoverDetector {\n // sentinels can't be used for regular commands after this\n constructor(connector, sentinels) {\n this.isDisconnected = false;\n this.connector = connector;\n this.sentinels = sentinels;\n }\n cleanup() {\n this.isDisconnected = true;\n for (const sentinel of this.sentinels) {\n sentinel.client.disconnect();\n }\n }\n async subscribe() {\n debug(\"Starting FailoverDetector\");\n const promises = [];\n for (const sentinel of this.sentinels) {\n const promise = sentinel.client.subscribe(CHANNEL_NAME).catch((err) => {\n debug(\"Failed to subscribe to failover messages on sentinel %s:%s (%s)\", sentinel.address.host || \"127.0.0.1\", sentinel.address.port || 26739, err.message);\n });\n promises.push(promise);\n sentinel.client.on(\"message\", (channel) => {\n if (!this.isDisconnected && channel === CHANNEL_NAME) {\n this.disconnect();\n }\n });\n }\n await Promise.all(promises);\n }\n disconnect() {\n // Avoid disconnecting more than once per failover.\n // A new FailoverDetector will be created after reconnecting.\n this.isDisconnected = true;\n debug(\"Failover detected, disconnecting\");\n // Will call this.cleanup()\n this.connector.disconnect();\n }\n}\nexports.FailoverDetector = FailoverDetector;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SentinelIterator = void 0;\nconst net_1 = require(\"net\");\nconst utils_1 = require(\"../../utils\");\nconst tls_1 = require(\"tls\");\nconst SentinelIterator_1 = require(\"./SentinelIterator\");\nexports.SentinelIterator = SentinelIterator_1.default;\nconst AbstractConnector_1 = require(\"../AbstractConnector\");\nconst Redis_1 = require(\"../../Redis\");\nconst FailoverDetector_1 = require(\"./FailoverDetector\");\nconst debug = (0, utils_1.Debug)(\"SentinelConnector\");\nclass SentinelConnector extends AbstractConnector_1.default {\n constructor(options) {\n super(options.disconnectTimeout);\n this.options = options;\n this.emitter = null;\n this.failoverDetector = null;\n if (!this.options.sentinels.length) {\n throw new Error(\"Requires at least one sentinel to connect to.\");\n }\n if (!this.options.name) {\n throw new Error(\"Requires the name of master.\");\n }\n this.sentinelIterator = new SentinelIterator_1.default(this.options.sentinels);\n }\n check(info) {\n const roleMatches = !info.role || this.options.role === info.role;\n if (!roleMatches) {\n debug(\"role invalid, expected %s, but got %s\", this.options.role, info.role);\n // Start from the next item.\n // Note that `reset` will move the cursor to the previous element,\n // so we advance two steps here.\n this.sentinelIterator.next();\n this.sentinelIterator.next();\n this.sentinelIterator.reset(true);\n }\n return roleMatches;\n }\n disconnect() {\n super.disconnect();\n if (this.failoverDetector) {\n this.failoverDetector.cleanup();\n }\n }\n connect(eventEmitter) {\n this.connecting = true;\n this.retryAttempts = 0;\n let lastError;\n const connectToNext = async () => {\n const endpoint = this.sentinelIterator.next();\n if (endpoint.done) {\n this.sentinelIterator.reset(false);\n const retryDelay = typeof this.options.sentinelRetryStrategy === \"function\"\n ? this.options.sentinelRetryStrategy(++this.retryAttempts)\n : null;\n let errorMsg = typeof retryDelay !== \"number\"\n ? \"All sentinels are unreachable and retry is disabled.\"\n : `All sentinels are unreachable. Retrying from scratch after ${retryDelay}ms.`;\n if (lastError) {\n errorMsg += ` Last error: ${lastError.message}`;\n }\n debug(errorMsg);\n const error = new Error(errorMsg);\n if (typeof retryDelay === \"number\") {\n eventEmitter(\"error\", error);\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n return connectToNext();\n }\n else {\n throw error;\n }\n }\n let resolved = null;\n let err = null;\n try {\n resolved = await this.resolve(endpoint.value);\n }\n catch (error) {\n err = error;\n }\n if (!this.connecting) {\n throw new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG);\n }\n const endpointAddress = endpoint.value.host + \":\" + endpoint.value.port;\n if (resolved) {\n debug(\"resolved: %s:%s from sentinel %s\", resolved.host, resolved.port, endpointAddress);\n if (this.options.enableTLSForSentinelMode && this.options.tls) {\n Object.assign(resolved, this.options.tls);\n this.stream = (0, tls_1.connect)(resolved);\n this.stream.once(\"secureConnect\", this.initFailoverDetector.bind(this));\n }\n else {\n this.stream = (0, net_1.createConnection)(resolved);\n this.stream.once(\"connect\", this.initFailoverDetector.bind(this));\n }\n this.stream.once(\"error\", (err) => {\n this.firstError = err;\n });\n return this.stream;\n }\n else {\n const errorMsg = err\n ? \"failed to connect to sentinel \" +\n endpointAddress +\n \" because \" +\n err.message\n : \"connected to sentinel \" +\n endpointAddress +\n \" successfully, but got an invalid reply: \" +\n resolved;\n debug(errorMsg);\n eventEmitter(\"sentinelError\", new Error(errorMsg));\n if (err) {\n lastError = err;\n }\n return connectToNext();\n }\n };\n return connectToNext();\n }\n async updateSentinels(client) {\n if (!this.options.updateSentinels) {\n return;\n }\n const result = await client.sentinel(\"sentinels\", this.options.name);\n if (!Array.isArray(result)) {\n return;\n }\n result\n .map(utils_1.packObject)\n .forEach((sentinel) => {\n const flags = sentinel.flags ? sentinel.flags.split(\",\") : [];\n if (flags.indexOf(\"disconnected\") === -1 &&\n sentinel.ip &&\n sentinel.port) {\n const endpoint = this.sentinelNatResolve(addressResponseToAddress(sentinel));\n if (this.sentinelIterator.add(endpoint)) {\n debug(\"adding sentinel %s:%s\", endpoint.host, endpoint.port);\n }\n }\n });\n debug(\"Updated internal sentinels: %s\", this.sentinelIterator);\n }\n async resolveMaster(client) {\n const result = await client.sentinel(\"get-master-addr-by-name\", this.options.name);\n await this.updateSentinels(client);\n return this.sentinelNatResolve(Array.isArray(result)\n ? { host: result[0], port: Number(result[1]) }\n : null);\n }\n async resolveSlave(client) {\n const result = await client.sentinel(\"slaves\", this.options.name);\n if (!Array.isArray(result)) {\n return null;\n }\n const availableSlaves = result\n .map(utils_1.packObject)\n .filter((slave) => slave.flags && !slave.flags.match(/(disconnected|s_down|o_down)/));\n return this.sentinelNatResolve(selectPreferredSentinel(availableSlaves, this.options.preferredSlaves));\n }\n sentinelNatResolve(item) {\n if (!item || !this.options.natMap)\n return item;\n return this.options.natMap[`${item.host}:${item.port}`] || item;\n }\n connectToSentinel(endpoint, options) {\n const redis = new Redis_1.default({\n port: endpoint.port || 26379,\n host: endpoint.host,\n username: this.options.sentinelUsername || null,\n password: this.options.sentinelPassword || null,\n family: endpoint.family ||\n // @ts-expect-error\n (\"path\" in this.options && this.options.path\n ? undefined\n : // @ts-expect-error\n this.options.family),\n tls: this.options.sentinelTLS,\n retryStrategy: null,\n enableReadyCheck: false,\n connectTimeout: this.options.connectTimeout,\n commandTimeout: this.options.sentinelCommandTimeout,\n ...options,\n });\n // @ts-expect-error\n return redis;\n }\n async resolve(endpoint) {\n const client = this.connectToSentinel(endpoint);\n // ignore the errors since resolve* methods will handle them\n client.on(\"error\", noop);\n try {\n if (this.options.role === \"slave\") {\n return await this.resolveSlave(client);\n }\n else {\n return await this.resolveMaster(client);\n }\n }\n finally {\n client.disconnect();\n }\n }\n async initFailoverDetector() {\n var _a;\n if (!this.options.failoverDetector) {\n return;\n }\n // Move the current sentinel to the first position\n this.sentinelIterator.reset(true);\n const sentinels = [];\n // In case of a large amount of sentinels, limit the number of concurrent connections\n while (sentinels.length < this.options.sentinelMaxConnections) {\n const { done, value } = this.sentinelIterator.next();\n if (done) {\n break;\n }\n const client = this.connectToSentinel(value, {\n lazyConnect: true,\n retryStrategy: this.options.sentinelReconnectStrategy,\n });\n client.on(\"reconnecting\", () => {\n var _a;\n // Tests listen to this event\n (_a = this.emitter) === null || _a === void 0 ? void 0 : _a.emit(\"sentinelReconnecting\");\n });\n sentinels.push({ address: value, client });\n }\n this.sentinelIterator.reset(false);\n if (this.failoverDetector) {\n // Clean up previous detector\n this.failoverDetector.cleanup();\n }\n this.failoverDetector = new FailoverDetector_1.FailoverDetector(this, sentinels);\n await this.failoverDetector.subscribe();\n // Tests listen to this event\n (_a = this.emitter) === null || _a === void 0 ? void 0 : _a.emit(\"failoverSubscribed\");\n }\n}\nexports.default = SentinelConnector;\nfunction selectPreferredSentinel(availableSlaves, preferredSlaves) {\n if (availableSlaves.length === 0) {\n return null;\n }\n let selectedSlave;\n if (typeof preferredSlaves === \"function\") {\n selectedSlave = preferredSlaves(availableSlaves);\n }\n else if (preferredSlaves !== null && typeof preferredSlaves === \"object\") {\n const preferredSlavesArray = Array.isArray(preferredSlaves)\n ? preferredSlaves\n : [preferredSlaves];\n // sort by priority\n preferredSlavesArray.sort((a, b) => {\n // default the priority to 1\n if (!a.prio) {\n a.prio = 1;\n }\n if (!b.prio) {\n b.prio = 1;\n }\n // lowest priority first\n if (a.prio < b.prio) {\n return -1;\n }\n if (a.prio > b.prio) {\n return 1;\n }\n return 0;\n });\n // loop over preferred slaves and return the first match\n for (let p = 0; p < preferredSlavesArray.length; p++) {\n for (let a = 0; a < availableSlaves.length; a++) {\n const slave = availableSlaves[a];\n if (slave.ip === preferredSlavesArray[p].ip) {\n if (slave.port === preferredSlavesArray[p].port) {\n selectedSlave = slave;\n break;\n }\n }\n }\n if (selectedSlave) {\n break;\n }\n }\n }\n // if none of the preferred slaves are available, a random available slave is returned\n if (!selectedSlave) {\n selectedSlave = (0, utils_1.sample)(availableSlaves);\n }\n return addressResponseToAddress(selectedSlave);\n}\nfunction addressResponseToAddress(input) {\n return { host: input.ip, port: Number(input.port) };\n}\nfunction noop() { }\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SentinelConnector = exports.StandaloneConnector = void 0;\nconst StandaloneConnector_1 = require(\"./StandaloneConnector\");\nexports.StandaloneConnector = StandaloneConnector_1.default;\nconst SentinelConnector_1 = require(\"./SentinelConnector\");\nexports.SentinelConnector = SentinelConnector_1.default;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst redis_errors_1 = require(\"redis-errors\");\nclass MaxRetriesPerRequestError extends redis_errors_1.AbortError {\n constructor(maxRetriesPerRequest) {\n const message = `Reached the max retries per request limit (which is ${maxRetriesPerRequest}). Refer to \"maxRetriesPerRequest\" option for details.`;\n super(message);\n Error.captureStackTrace(this, this.constructor);\n }\n get name() {\n return this.constructor.name;\n }\n}\nexports.default = MaxRetriesPerRequestError;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MaxRetriesPerRequestError = void 0;\nconst MaxRetriesPerRequestError_1 = require(\"./MaxRetriesPerRequestError\");\nexports.MaxRetriesPerRequestError = MaxRetriesPerRequestError_1.default;\n","'use strict'\n\nconst Buffer = require('buffer').Buffer\nconst StringDecoder = require('string_decoder').StringDecoder\nconst decoder = new StringDecoder()\nconst errors = require('redis-errors')\nconst ReplyError = errors.ReplyError\nconst ParserError = errors.ParserError\nvar bufferPool = Buffer.allocUnsafe(32 * 1024)\nvar bufferOffset = 0\nvar interval = null\nvar counter = 0\nvar notDecreased = 0\n\n/**\n * Used for integer numbers only\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|number}\n */\nfunction parseSimpleNumbers (parser) {\n const length = parser.buffer.length - 1\n var offset = parser.offset\n var number = 0\n var sign = 1\n\n if (parser.buffer[offset] === 45) {\n sign = -1\n offset++\n }\n\n while (offset < length) {\n const c1 = parser.buffer[offset++]\n if (c1 === 13) { // \\r\\n\n parser.offset = offset + 1\n return sign * number\n }\n number = (number * 10) + (c1 - 48)\n }\n}\n\n/**\n * Used for integer numbers in case of the returnNumbers option\n *\n * Reading the string as parts of n SMI is more efficient than\n * using a string directly.\n *\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|string}\n */\nfunction parseStringNumbers (parser) {\n const length = parser.buffer.length - 1\n var offset = parser.offset\n var number = 0\n var res = ''\n\n if (parser.buffer[offset] === 45) {\n res += '-'\n offset++\n }\n\n while (offset < length) {\n var c1 = parser.buffer[offset++]\n if (c1 === 13) { // \\r\\n\n parser.offset = offset + 1\n if (number !== 0) {\n res += number\n }\n return res\n } else if (number > 429496728) {\n res += (number * 10) + (c1 - 48)\n number = 0\n } else if (c1 === 48 && number === 0) {\n res += 0\n } else {\n number = (number * 10) + (c1 - 48)\n }\n }\n}\n\n/**\n * Parse a '+' redis simple string response but forward the offsets\n * onto convertBufferRange to generate a string.\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|string|Buffer}\n */\nfunction parseSimpleString (parser) {\n const start = parser.offset\n const buffer = parser.buffer\n const length = buffer.length - 1\n var offset = start\n\n while (offset < length) {\n if (buffer[offset++] === 13) { // \\r\\n\n parser.offset = offset + 1\n if (parser.optionReturnBuffers === true) {\n return parser.buffer.slice(start, offset - 1)\n }\n return parser.buffer.toString('utf8', start, offset - 1)\n }\n }\n}\n\n/**\n * Returns the read length\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|number}\n */\nfunction parseLength (parser) {\n const length = parser.buffer.length - 1\n var offset = parser.offset\n var number = 0\n\n while (offset < length) {\n const c1 = parser.buffer[offset++]\n if (c1 === 13) {\n parser.offset = offset + 1\n return number\n }\n number = (number * 10) + (c1 - 48)\n }\n}\n\n/**\n * Parse a ':' redis integer response\n *\n * If stringNumbers is activated the parser always returns numbers as string\n * This is important for big numbers (number > Math.pow(2, 53)) as js numbers\n * are 64bit floating point numbers with reduced precision\n *\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|number|string}\n */\nfunction parseInteger (parser) {\n if (parser.optionStringNumbers === true) {\n return parseStringNumbers(parser)\n }\n return parseSimpleNumbers(parser)\n}\n\n/**\n * Parse a '$' redis bulk string response\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|null|string}\n */\nfunction parseBulkString (parser) {\n const length = parseLength(parser)\n if (length === undefined) {\n return\n }\n if (length < 0) {\n return null\n }\n const offset = parser.offset + length\n if (offset + 2 > parser.buffer.length) {\n parser.bigStrSize = offset + 2\n parser.totalChunkSize = parser.buffer.length\n parser.bufferCache.push(parser.buffer)\n return\n }\n const start = parser.offset\n parser.offset = offset + 2\n if (parser.optionReturnBuffers === true) {\n return parser.buffer.slice(start, offset)\n }\n return parser.buffer.toString('utf8', start, offset)\n}\n\n/**\n * Parse a '-' redis error response\n * @param {JavascriptRedisParser} parser\n * @returns {ReplyError}\n */\nfunction parseError (parser) {\n var string = parseSimpleString(parser)\n if (string !== undefined) {\n if (parser.optionReturnBuffers === true) {\n string = string.toString()\n }\n return new ReplyError(string)\n }\n}\n\n/**\n * Parsing error handler, resets parser buffer\n * @param {JavascriptRedisParser} parser\n * @param {number} type\n * @returns {undefined}\n */\nfunction handleError (parser, type) {\n const err = new ParserError(\n 'Protocol error, got ' + JSON.stringify(String.fromCharCode(type)) + ' as reply type byte',\n JSON.stringify(parser.buffer),\n parser.offset\n )\n parser.buffer = null\n parser.returnFatalError(err)\n}\n\n/**\n * Parse a '*' redis array response\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|null|any[]}\n */\nfunction parseArray (parser) {\n const length = parseLength(parser)\n if (length === undefined) {\n return\n }\n if (length < 0) {\n return null\n }\n const responses = new Array(length)\n return parseArrayElements(parser, responses, 0)\n}\n\n/**\n * Push a partly parsed array to the stack\n *\n * @param {JavascriptRedisParser} parser\n * @param {any[]} array\n * @param {number} pos\n * @returns {undefined}\n */\nfunction pushArrayCache (parser, array, pos) {\n parser.arrayCache.push(array)\n parser.arrayPos.push(pos)\n}\n\n/**\n * Parse chunked redis array response\n * @param {JavascriptRedisParser} parser\n * @returns {undefined|any[]}\n */\nfunction parseArrayChunks (parser) {\n const tmp = parser.arrayCache.pop()\n var pos = parser.arrayPos.pop()\n if (parser.arrayCache.length) {\n const res = parseArrayChunks(parser)\n if (res === undefined) {\n pushArrayCache(parser, tmp, pos)\n return\n }\n tmp[pos++] = res\n }\n return parseArrayElements(parser, tmp, pos)\n}\n\n/**\n * Parse redis array response elements\n * @param {JavascriptRedisParser} parser\n * @param {Array} responses\n * @param {number} i\n * @returns {undefined|null|any[]}\n */\nfunction parseArrayElements (parser, responses, i) {\n const bufferLength = parser.buffer.length\n while (i < responses.length) {\n const offset = parser.offset\n if (parser.offset >= bufferLength) {\n pushArrayCache(parser, responses, i)\n return\n }\n const response = parseType(parser, parser.buffer[parser.offset++])\n if (response === undefined) {\n if (!(parser.arrayCache.length || parser.bufferCache.length)) {\n parser.offset = offset\n }\n pushArrayCache(parser, responses, i)\n return\n }\n responses[i] = response\n i++\n }\n\n return responses\n}\n\n/**\n * Called the appropriate parser for the specified type.\n *\n * 36: $\n * 43: +\n * 42: *\n * 58: :\n * 45: -\n *\n * @param {JavascriptRedisParser} parser\n * @param {number} type\n * @returns {*}\n */\nfunction parseType (parser, type) {\n switch (type) {\n case 36:\n return parseBulkString(parser)\n case 43:\n return parseSimpleString(parser)\n case 42:\n return parseArray(parser)\n case 58:\n return parseInteger(parser)\n case 45:\n return parseError(parser)\n default:\n return handleError(parser, type)\n }\n}\n\n/**\n * Decrease the bufferPool size over time\n *\n * Balance between increasing and decreasing the bufferPool.\n * Decrease the bufferPool by 10% by removing the first 10% of the current pool.\n * @returns {undefined}\n */\nfunction decreaseBufferPool () {\n if (bufferPool.length > 50 * 1024) {\n if (counter === 1 || notDecreased > counter * 2) {\n const minSliceLen = Math.floor(bufferPool.length / 10)\n const sliceLength = minSliceLen < bufferOffset\n ? bufferOffset\n : minSliceLen\n bufferOffset = 0\n bufferPool = bufferPool.slice(sliceLength, bufferPool.length)\n } else {\n notDecreased++\n counter--\n }\n } else {\n clearInterval(interval)\n counter = 0\n notDecreased = 0\n interval = null\n }\n}\n\n/**\n * Check if the requested size fits in the current bufferPool.\n * If it does not, reset and increase the bufferPool accordingly.\n *\n * @param {number} length\n * @returns {undefined}\n */\nfunction resizeBuffer (length) {\n if (bufferPool.length < length + bufferOffset) {\n const multiplier = length > 1024 * 1024 * 75 ? 2 : 3\n if (bufferOffset > 1024 * 1024 * 111) {\n bufferOffset = 1024 * 1024 * 50\n }\n bufferPool = Buffer.allocUnsafe(length * multiplier + bufferOffset)\n bufferOffset = 0\n counter++\n if (interval === null) {\n interval = setInterval(decreaseBufferPool, 50)\n }\n }\n}\n\n/**\n * Concat a bulk string containing multiple chunks\n *\n * Notes:\n * 1) The first chunk might contain the whole bulk string including the \\r\n * 2) We are only safe to fully add up elements that are neither the first nor any of the last two elements\n *\n * @param {JavascriptRedisParser} parser\n * @returns {String}\n */\nfunction concatBulkString (parser) {\n const list = parser.bufferCache\n const oldOffset = parser.offset\n var chunks = list.length\n var offset = parser.bigStrSize - parser.totalChunkSize\n parser.offset = offset\n if (offset <= 2) {\n if (chunks === 2) {\n return list[0].toString('utf8', oldOffset, list[0].length + offset - 2)\n }\n chunks--\n offset = list[list.length - 2].length + offset\n }\n var res = decoder.write(list[0].slice(oldOffset))\n for (var i = 1; i < chunks - 1; i++) {\n res += decoder.write(list[i])\n }\n res += decoder.end(list[i].slice(0, offset - 2))\n return res\n}\n\n/**\n * Concat the collected chunks from parser.bufferCache.\n *\n * Increases the bufferPool size beforehand if necessary.\n *\n * @param {JavascriptRedisParser} parser\n * @returns {Buffer}\n */\nfunction concatBulkBuffer (parser) {\n const list = parser.bufferCache\n const oldOffset = parser.offset\n const length = parser.bigStrSize - oldOffset - 2\n var chunks = list.length\n var offset = parser.bigStrSize - parser.totalChunkSize\n parser.offset = offset\n if (offset <= 2) {\n if (chunks === 2) {\n return list[0].slice(oldOffset, list[0].length + offset - 2)\n }\n chunks--\n offset = list[list.length - 2].length + offset\n }\n resizeBuffer(length)\n const start = bufferOffset\n list[0].copy(bufferPool, start, oldOffset, list[0].length)\n bufferOffset += list[0].length - oldOffset\n for (var i = 1; i < chunks - 1; i++) {\n list[i].copy(bufferPool, bufferOffset)\n bufferOffset += list[i].length\n }\n list[i].copy(bufferPool, bufferOffset, 0, offset - 2)\n bufferOffset += offset - 2\n return bufferPool.slice(start, bufferOffset)\n}\n\nclass JavascriptRedisParser {\n /**\n * Javascript Redis Parser constructor\n * @param {{returnError: Function, returnReply: Function, returnFatalError?: Function, returnBuffers: boolean, stringNumbers: boolean }} options\n * @constructor\n */\n constructor (options) {\n if (!options) {\n throw new TypeError('Options are mandatory.')\n }\n if (typeof options.returnError !== 'function' || typeof options.returnReply !== 'function') {\n throw new TypeError('The returnReply and returnError options have to be functions.')\n }\n this.setReturnBuffers(!!options.returnBuffers)\n this.setStringNumbers(!!options.stringNumbers)\n this.returnError = options.returnError\n this.returnFatalError = options.returnFatalError || options.returnError\n this.returnReply = options.returnReply\n this.reset()\n }\n\n /**\n * Reset the parser values to the initial state\n *\n * @returns {undefined}\n */\n reset () {\n this.offset = 0\n this.buffer = null\n this.bigStrSize = 0\n this.totalChunkSize = 0\n this.bufferCache = []\n this.arrayCache = []\n this.arrayPos = []\n }\n\n /**\n * Set the returnBuffers option\n *\n * @param {boolean} returnBuffers\n * @returns {undefined}\n */\n setReturnBuffers (returnBuffers) {\n if (typeof returnBuffers !== 'boolean') {\n throw new TypeError('The returnBuffers argument has to be a boolean')\n }\n this.optionReturnBuffers = returnBuffers\n }\n\n /**\n * Set the stringNumbers option\n *\n * @param {boolean} stringNumbers\n * @returns {undefined}\n */\n setStringNumbers (stringNumbers) {\n if (typeof stringNumbers !== 'boolean') {\n throw new TypeError('The stringNumbers argument has to be a boolean')\n }\n this.optionStringNumbers = stringNumbers\n }\n\n /**\n * Parse the redis buffer\n * @param {Buffer} buffer\n * @returns {undefined}\n */\n execute (buffer) {\n if (this.buffer === null) {\n this.buffer = buffer\n this.offset = 0\n } else if (this.bigStrSize === 0) {\n const oldLength = this.buffer.length\n const remainingLength = oldLength - this.offset\n const newBuffer = Buffer.allocUnsafe(remainingLength + buffer.length)\n this.buffer.copy(newBuffer, 0, this.offset, oldLength)\n buffer.copy(newBuffer, remainingLength, 0, buffer.length)\n this.buffer = newBuffer\n this.offset = 0\n if (this.arrayCache.length) {\n const arr = parseArrayChunks(this)\n if (arr === undefined) {\n return\n }\n this.returnReply(arr)\n }\n } else if (this.totalChunkSize + buffer.length >= this.bigStrSize) {\n this.bufferCache.push(buffer)\n var tmp = this.optionReturnBuffers ? concatBulkBuffer(this) : concatBulkString(this)\n this.bigStrSize = 0\n this.bufferCache = []\n this.buffer = buffer\n if (this.arrayCache.length) {\n this.arrayCache[0][this.arrayPos[0]++] = tmp\n tmp = parseArrayChunks(this)\n if (tmp === undefined) {\n return\n }\n }\n this.returnReply(tmp)\n } else {\n this.bufferCache.push(buffer)\n this.totalChunkSize += buffer.length\n return\n }\n\n while (this.offset < this.buffer.length) {\n const offset = this.offset\n const type = this.buffer[this.offset++]\n const response = parseType(this, type)\n if (response === undefined) {\n if (!(this.arrayCache.length || this.bufferCache.length)) {\n this.offset = offset\n }\n return\n }\n\n if (type === 45) {\n this.returnError(response)\n } else {\n this.returnReply(response)\n }\n }\n\n this.buffer = null\n }\n}\n\nmodule.exports = JavascriptRedisParser\n","'use strict'\n\nmodule.exports = require('./lib/parser')\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Tiny class to simplify dealing with subscription set\n */\nclass SubscriptionSet {\n constructor() {\n this.set = {\n subscribe: {},\n psubscribe: {},\n ssubscribe: {},\n };\n }\n add(set, channel) {\n this.set[mapSet(set)][channel] = true;\n }\n del(set, channel) {\n delete this.set[mapSet(set)][channel];\n }\n channels(set) {\n return Object.keys(this.set[mapSet(set)]);\n }\n isEmpty() {\n return (this.channels(\"subscribe\").length === 0 &&\n this.channels(\"psubscribe\").length === 0 &&\n this.channels(\"ssubscribe\").length === 0);\n }\n}\nexports.default = SubscriptionSet;\nfunction mapSet(set) {\n if (set === \"unsubscribe\") {\n return \"subscribe\";\n }\n if (set === \"punsubscribe\") {\n return \"psubscribe\";\n }\n if (set === \"sunsubscribe\") {\n return \"ssubscribe\";\n }\n return set;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Command_1 = require(\"./Command\");\nconst utils_1 = require(\"./utils\");\nconst RedisParser = require(\"redis-parser\");\nconst SubscriptionSet_1 = require(\"./SubscriptionSet\");\nconst debug = (0, utils_1.Debug)(\"dataHandler\");\nclass DataHandler {\n constructor(redis, parserOptions) {\n this.redis = redis;\n const parser = new RedisParser({\n stringNumbers: parserOptions.stringNumbers,\n returnBuffers: true,\n returnError: (err) => {\n this.returnError(err);\n },\n returnFatalError: (err) => {\n this.returnFatalError(err);\n },\n returnReply: (reply) => {\n this.returnReply(reply);\n },\n });\n redis.stream.on(\"data\", (data) => {\n parser.execute(data);\n });\n }\n returnFatalError(err) {\n err.message += \". Please report this.\";\n this.redis.recoverFromFatalError(err, err, { offlineQueue: false });\n }\n returnError(err) {\n const item = this.shiftCommand(err);\n if (!item) {\n return;\n }\n err.command = {\n name: item.command.name,\n args: item.command.args,\n };\n this.redis.handleReconnection(err, item);\n }\n returnReply(reply) {\n if (this.handleMonitorReply(reply)) {\n return;\n }\n if (this.handleSubscriberReply(reply)) {\n return;\n }\n const item = this.shiftCommand(reply);\n if (!item) {\n return;\n }\n if (Command_1.default.checkFlag(\"ENTER_SUBSCRIBER_MODE\", item.command.name)) {\n this.redis.condition.subscriber = new SubscriptionSet_1.default();\n this.redis.condition.subscriber.add(item.command.name, reply[1].toString());\n if (!fillSubCommand(item.command, reply[2])) {\n this.redis.commandQueue.unshift(item);\n }\n }\n else if (Command_1.default.checkFlag(\"EXIT_SUBSCRIBER_MODE\", item.command.name)) {\n if (!fillUnsubCommand(item.command, reply[2])) {\n this.redis.commandQueue.unshift(item);\n }\n }\n else {\n item.command.resolve(reply);\n }\n }\n handleSubscriberReply(reply) {\n if (!this.redis.condition.subscriber) {\n return false;\n }\n const replyType = Array.isArray(reply) ? reply[0].toString() : null;\n debug('receive reply \"%s\" in subscriber mode', replyType);\n switch (replyType) {\n case \"message\":\n if (this.redis.listeners(\"message\").length > 0) {\n // Check if there're listeners to avoid unnecessary `toString()`.\n this.redis.emit(\"message\", reply[1].toString(), reply[2] ? reply[2].toString() : \"\");\n }\n this.redis.emit(\"messageBuffer\", reply[1], reply[2]);\n break;\n case \"pmessage\": {\n const pattern = reply[1].toString();\n if (this.redis.listeners(\"pmessage\").length > 0) {\n this.redis.emit(\"pmessage\", pattern, reply[2].toString(), reply[3].toString());\n }\n this.redis.emit(\"pmessageBuffer\", pattern, reply[2], reply[3]);\n break;\n }\n case \"smessage\": {\n if (this.redis.listeners(\"smessage\").length > 0) {\n this.redis.emit(\"smessage\", reply[1].toString(), reply[2] ? reply[2].toString() : \"\");\n }\n this.redis.emit(\"smessageBuffer\", reply[1], reply[2]);\n break;\n }\n case \"ssubscribe\":\n case \"subscribe\":\n case \"psubscribe\": {\n const channel = reply[1].toString();\n this.redis.condition.subscriber.add(replyType, channel);\n const item = this.shiftCommand(reply);\n if (!item) {\n return;\n }\n if (!fillSubCommand(item.command, reply[2])) {\n this.redis.commandQueue.unshift(item);\n }\n break;\n }\n case \"sunsubscribe\":\n case \"unsubscribe\":\n case \"punsubscribe\": {\n const channel = reply[1] ? reply[1].toString() : null;\n if (channel) {\n this.redis.condition.subscriber.del(replyType, channel);\n }\n const count = reply[2];\n if (Number(count) === 0) {\n this.redis.condition.subscriber = false;\n }\n const item = this.shiftCommand(reply);\n if (!item) {\n return;\n }\n if (!fillUnsubCommand(item.command, count)) {\n this.redis.commandQueue.unshift(item);\n }\n break;\n }\n default: {\n const item = this.shiftCommand(reply);\n if (!item) {\n return;\n }\n item.command.resolve(reply);\n }\n }\n return true;\n }\n handleMonitorReply(reply) {\n if (this.redis.status !== \"monitoring\") {\n return false;\n }\n const replyStr = reply.toString();\n if (replyStr === \"OK\") {\n // Valid commands in the monitoring mode are AUTH and MONITOR,\n // both of which always reply with 'OK'.\n // So if we got an 'OK', we can make certain that\n // the reply is made to AUTH & MONITOR.\n return false;\n }\n // Since commands sent in the monitoring mode will trigger an exception,\n // any replies we received in the monitoring mode should consider to be\n // realtime monitor data instead of result of commands.\n const len = replyStr.indexOf(\" \");\n const timestamp = replyStr.slice(0, len);\n const argIndex = replyStr.indexOf('\"');\n const args = replyStr\n .slice(argIndex + 1, -1)\n .split('\" \"')\n .map((elem) => elem.replace(/\\\\\"/g, '\"'));\n const dbAndSource = replyStr.slice(len + 2, argIndex - 2).split(\" \");\n this.redis.emit(\"monitor\", timestamp, args, dbAndSource[1], dbAndSource[0]);\n return true;\n }\n shiftCommand(reply) {\n const item = this.redis.commandQueue.shift();\n if (!item) {\n const message = \"Command queue state error. If you can reproduce this, please report it.\";\n const error = new Error(message +\n (reply instanceof Error\n ? ` Last error: ${reply.message}`\n : ` Last reply: ${reply.toString()}`));\n this.redis.emit(\"error\", error);\n return null;\n }\n return item;\n }\n}\nexports.default = DataHandler;\nconst remainingRepliesMap = new WeakMap();\nfunction fillSubCommand(command, count) {\n let remainingReplies = remainingRepliesMap.has(command)\n ? remainingRepliesMap.get(command)\n : command.args.length;\n remainingReplies -= 1;\n if (remainingReplies <= 0) {\n command.resolve(count);\n remainingRepliesMap.delete(command);\n return true;\n }\n remainingRepliesMap.set(command, remainingReplies);\n return false;\n}\nfunction fillUnsubCommand(command, count) {\n let remainingReplies = remainingRepliesMap.has(command)\n ? remainingRepliesMap.get(command)\n : command.args.length;\n if (remainingReplies === 0) {\n if (Number(count) === 0) {\n remainingRepliesMap.delete(command);\n command.resolve(count);\n return true;\n }\n return false;\n }\n remainingReplies -= 1;\n if (remainingReplies <= 0) {\n command.resolve(count);\n return true;\n }\n remainingRepliesMap.set(command, remainingReplies);\n return false;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readyHandler = exports.errorHandler = exports.closeHandler = exports.connectHandler = void 0;\nconst redis_errors_1 = require(\"redis-errors\");\nconst Command_1 = require(\"../Command\");\nconst errors_1 = require(\"../errors\");\nconst utils_1 = require(\"../utils\");\nconst DataHandler_1 = require(\"../DataHandler\");\nconst debug = (0, utils_1.Debug)(\"connection\");\nfunction connectHandler(self) {\n return function () {\n self.setStatus(\"connect\");\n self.resetCommandQueue();\n // AUTH command should be processed before any other commands\n let flushed = false;\n const { connectionEpoch } = self;\n if (self.condition.auth) {\n self.auth(self.condition.auth, function (err) {\n if (connectionEpoch !== self.connectionEpoch) {\n return;\n }\n if (err) {\n if (err.message.indexOf(\"no password is set\") !== -1) {\n console.warn(\"[WARN] Redis server does not require a password, but a password was supplied.\");\n }\n else if (err.message.indexOf(\"without any password configured for the default user\") !== -1) {\n console.warn(\"[WARN] This Redis server's `default` user does not require a password, but a password was supplied\");\n }\n else if (err.message.indexOf(\"wrong number of arguments for 'auth' command\") !== -1) {\n console.warn(`[ERROR] The server returned \"wrong number of arguments for 'auth' command\". You are probably passing both username and password to Redis version 5 or below. You should only pass the 'password' option for Redis version 5 and under.`);\n }\n else {\n flushed = true;\n self.recoverFromFatalError(err, err);\n }\n }\n });\n }\n if (self.condition.select) {\n self.select(self.condition.select).catch((err) => {\n // If the node is in cluster mode, select is disallowed.\n // In this case, reconnect won't help.\n self.silentEmit(\"error\", err);\n });\n }\n if (!self.options.enableReadyCheck) {\n exports.readyHandler(self)();\n }\n /*\n No need to keep the reference of DataHandler here\n because we don't need to do the cleanup.\n `Stream#end()` will remove all listeners for us.\n */\n new DataHandler_1.default(self, {\n stringNumbers: self.options.stringNumbers,\n });\n if (self.options.enableReadyCheck) {\n self._readyCheck(function (err, info) {\n if (connectionEpoch !== self.connectionEpoch) {\n return;\n }\n if (err) {\n if (!flushed) {\n self.recoverFromFatalError(new Error(\"Ready check failed: \" + err.message), err);\n }\n }\n else {\n if (self.connector.check(info)) {\n exports.readyHandler(self)();\n }\n else {\n self.disconnect(true);\n }\n }\n });\n }\n };\n}\nexports.connectHandler = connectHandler;\nfunction abortError(command) {\n const err = new redis_errors_1.AbortError(\"Command aborted due to connection close\");\n err.command = {\n name: command.name,\n args: command.args,\n };\n return err;\n}\n// If a contiguous set of pipeline commands starts from index zero then they\n// can be safely reattempted. If however we have a chain of pipelined commands\n// starting at index 1 or more it means we received a partial response before\n// the connection close and those pipelined commands must be aborted. For\n// example, if the queue looks like this: [2, 3, 4, 0, 1, 2] then after\n// aborting and purging we'll have a queue that looks like this: [0, 1, 2]\nfunction abortIncompletePipelines(commandQueue) {\n var _a;\n let expectedIndex = 0;\n for (let i = 0; i < commandQueue.length;) {\n const command = (_a = commandQueue.peekAt(i)) === null || _a === void 0 ? void 0 : _a.command;\n const pipelineIndex = command.pipelineIndex;\n if (pipelineIndex === undefined || pipelineIndex === 0) {\n expectedIndex = 0;\n }\n if (pipelineIndex !== undefined && pipelineIndex !== expectedIndex++) {\n commandQueue.remove(i, 1);\n command.reject(abortError(command));\n continue;\n }\n i++;\n }\n}\n// If only a partial transaction result was received before connection close,\n// we have to abort any transaction fragments that may have ended up in the\n// offline queue\nfunction abortTransactionFragments(commandQueue) {\n var _a;\n for (let i = 0; i < commandQueue.length;) {\n const command = (_a = commandQueue.peekAt(i)) === null || _a === void 0 ? void 0 : _a.command;\n if (command.name === \"multi\") {\n break;\n }\n if (command.name === \"exec\") {\n commandQueue.remove(i, 1);\n command.reject(abortError(command));\n break;\n }\n if (command.inTransaction) {\n commandQueue.remove(i, 1);\n command.reject(abortError(command));\n }\n else {\n i++;\n }\n }\n}\nfunction closeHandler(self) {\n return function () {\n const prevStatus = self.status;\n self.setStatus(\"close\");\n if (self.commandQueue.length) {\n abortIncompletePipelines(self.commandQueue);\n }\n if (self.offlineQueue.length) {\n abortTransactionFragments(self.offlineQueue);\n }\n if (prevStatus === \"ready\") {\n if (!self.prevCondition) {\n self.prevCondition = self.condition;\n }\n if (self.commandQueue.length) {\n self.prevCommandQueue = self.commandQueue;\n }\n }\n if (self.manuallyClosing) {\n self.manuallyClosing = false;\n debug(\"skip reconnecting since the connection is manually closed.\");\n return close();\n }\n if (typeof self.options.retryStrategy !== \"function\") {\n debug(\"skip reconnecting because `retryStrategy` is not a function\");\n return close();\n }\n const retryDelay = self.options.retryStrategy(++self.retryAttempts);\n if (typeof retryDelay !== \"number\") {\n debug(\"skip reconnecting because `retryStrategy` doesn't return a number\");\n return close();\n }\n debug(\"reconnect in %sms\", retryDelay);\n self.setStatus(\"reconnecting\", retryDelay);\n self.reconnectTimeout = setTimeout(function () {\n self.reconnectTimeout = null;\n self.connect().catch(utils_1.noop);\n }, retryDelay);\n const { maxRetriesPerRequest } = self.options;\n if (typeof maxRetriesPerRequest === \"number\") {\n if (maxRetriesPerRequest < 0) {\n debug(\"maxRetriesPerRequest is negative, ignoring...\");\n }\n else {\n const remainder = self.retryAttempts % (maxRetriesPerRequest + 1);\n if (remainder === 0) {\n debug(\"reach maxRetriesPerRequest limitation, flushing command queue...\");\n self.flushQueue(new errors_1.MaxRetriesPerRequestError(maxRetriesPerRequest));\n }\n }\n }\n };\n function close() {\n self.setStatus(\"end\");\n self.flushQueue(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n }\n}\nexports.closeHandler = closeHandler;\nfunction errorHandler(self) {\n return function (error) {\n debug(\"error: %s\", error);\n self.silentEmit(\"error\", error);\n };\n}\nexports.errorHandler = errorHandler;\nfunction readyHandler(self) {\n return function () {\n self.setStatus(\"ready\");\n self.retryAttempts = 0;\n if (self.options.monitor) {\n self.call(\"monitor\").then(() => self.setStatus(\"monitoring\"), (error) => self.emit(\"error\", error));\n const { sendCommand } = self;\n self.sendCommand = function (command) {\n if (Command_1.default.checkFlag(\"VALID_IN_MONITOR_MODE\", command.name)) {\n return sendCommand.call(self, command);\n }\n command.reject(new Error(\"Connection is in monitoring mode, can't process commands.\"));\n return command.promise;\n };\n self.once(\"close\", function () {\n delete self.sendCommand;\n });\n return;\n }\n const finalSelect = self.prevCondition\n ? self.prevCondition.select\n : self.condition.select;\n if (self.options.connectionName) {\n debug(\"set the connection name [%s]\", self.options.connectionName);\n self.client(\"setname\", self.options.connectionName).catch(utils_1.noop);\n }\n if (self.options.readOnly) {\n debug(\"set the connection to readonly mode\");\n self.readonly().catch(utils_1.noop);\n }\n if (self.prevCondition) {\n const condition = self.prevCondition;\n self.prevCondition = null;\n if (condition.subscriber && self.options.autoResubscribe) {\n // We re-select the previous db first since\n // `SELECT` command is not valid in sub mode.\n if (self.condition.select !== finalSelect) {\n debug(\"connect to db [%d]\", finalSelect);\n self.select(finalSelect);\n }\n const subscribeChannels = condition.subscriber.channels(\"subscribe\");\n if (subscribeChannels.length) {\n debug(\"subscribe %d channels\", subscribeChannels.length);\n self.subscribe(subscribeChannels);\n }\n const psubscribeChannels = condition.subscriber.channels(\"psubscribe\");\n if (psubscribeChannels.length) {\n debug(\"psubscribe %d channels\", psubscribeChannels.length);\n self.psubscribe(psubscribeChannels);\n }\n const ssubscribeChannels = condition.subscriber.channels(\"ssubscribe\");\n if (ssubscribeChannels.length) {\n debug(\"ssubscribe %d channels\", ssubscribeChannels.length);\n self.ssubscribe(ssubscribeChannels);\n }\n }\n }\n if (self.prevCommandQueue) {\n if (self.options.autoResendUnfulfilledCommands) {\n debug(\"resend %d unfulfilled commands\", self.prevCommandQueue.length);\n while (self.prevCommandQueue.length > 0) {\n const item = self.prevCommandQueue.shift();\n if (item.select !== self.condition.select &&\n item.command.name !== \"select\") {\n self.select(item.select);\n }\n self.sendCommand(item.command, item.stream);\n }\n }\n else {\n self.prevCommandQueue = null;\n }\n }\n if (self.offlineQueue.length) {\n debug(\"send %d commands in offline queue\", self.offlineQueue.length);\n const offlineQueue = self.offlineQueue;\n self.resetOfflineQueue();\n while (offlineQueue.length > 0) {\n const item = offlineQueue.shift();\n if (item.select !== self.condition.select &&\n item.command.name !== \"select\") {\n self.select(item.select);\n }\n self.sendCommand(item.command, item.stream);\n }\n }\n if (self.condition.select !== finalSelect) {\n debug(\"connect to db [%d]\", finalSelect);\n self.select(finalSelect);\n }\n };\n}\nexports.readyHandler = readyHandler;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_REDIS_OPTIONS = void 0;\nexports.DEFAULT_REDIS_OPTIONS = {\n // Connection\n port: 6379,\n host: \"localhost\",\n family: 4,\n connectTimeout: 10000,\n disconnectTimeout: 2000,\n retryStrategy: function (times) {\n return Math.min(times * 50, 2000);\n },\n keepAlive: 0,\n noDelay: true,\n connectionName: null,\n // Sentinel\n sentinels: null,\n name: null,\n role: \"master\",\n sentinelRetryStrategy: function (times) {\n return Math.min(times * 10, 1000);\n },\n sentinelReconnectStrategy: function () {\n // This strategy only applies when sentinels are used for detecting\n // a failover, not during initial master resolution.\n // The deployment can still function when some of the sentinels are down\n // for a long period of time, so we may not want to attempt reconnection\n // very often. Therefore the default interval is fairly long (1 minute).\n return 60000;\n },\n natMap: null,\n enableTLSForSentinelMode: false,\n updateSentinels: true,\n failoverDetector: false,\n // Status\n username: null,\n password: null,\n db: 0,\n // Others\n enableOfflineQueue: true,\n enableReadyCheck: true,\n autoResubscribe: true,\n autoResendUnfulfilledCommands: true,\n lazyConnect: false,\n keyPrefix: \"\",\n reconnectOnError: null,\n readOnly: false,\n stringNumbers: false,\n maxRetriesPerRequest: 20,\n maxLoadingRetryTime: 10000,\n enableAutoPipelining: false,\n autoPipeliningIgnoredCommands: [],\n sentinelMaxConnections: 10,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst commands_1 = require(\"@ioredis/commands\");\nconst events_1 = require(\"events\");\nconst standard_as_callback_1 = require(\"standard-as-callback\");\nconst cluster_1 = require(\"./cluster\");\nconst Command_1 = require(\"./Command\");\nconst connectors_1 = require(\"./connectors\");\nconst SentinelConnector_1 = require(\"./connectors/SentinelConnector\");\nconst eventHandler = require(\"./redis/event_handler\");\nconst RedisOptions_1 = require(\"./redis/RedisOptions\");\nconst ScanStream_1 = require(\"./ScanStream\");\nconst transaction_1 = require(\"./transaction\");\nconst utils_1 = require(\"./utils\");\nconst applyMixin_1 = require(\"./utils/applyMixin\");\nconst Commander_1 = require(\"./utils/Commander\");\nconst lodash_1 = require(\"./utils/lodash\");\nconst Deque = require(\"denque\");\nconst debug = (0, utils_1.Debug)(\"redis\");\n/**\n * This is the major component of ioredis.\n * Use it to connect to a standalone Redis server or Sentinels.\n *\n * ```typescript\n * const redis = new Redis(); // Default port is 6379\n * async function main() {\n * redis.set(\"foo\", \"bar\");\n * redis.get(\"foo\", (err, result) => {\n * // `result` should be \"bar\"\n * console.log(err, result);\n * });\n * // Or use Promise\n * const result = await redis.get(\"foo\");\n * }\n * ```\n */\nclass Redis extends Commander_1.default {\n constructor(arg1, arg2, arg3) {\n super();\n this.status = \"wait\";\n /**\n * @ignore\n */\n this.isCluster = false;\n this.reconnectTimeout = null;\n this.connectionEpoch = 0;\n this.retryAttempts = 0;\n this.manuallyClosing = false;\n // Prepare autopipelines structures\n this._autoPipelines = new Map();\n this._runningAutoPipelines = new Set();\n this.parseOptions(arg1, arg2, arg3);\n events_1.EventEmitter.call(this);\n this.resetCommandQueue();\n this.resetOfflineQueue();\n if (this.options.Connector) {\n this.connector = new this.options.Connector(this.options);\n }\n else if (this.options.sentinels) {\n const sentinelConnector = new SentinelConnector_1.default(this.options);\n sentinelConnector.emitter = this;\n this.connector = sentinelConnector;\n }\n else {\n this.connector = new connectors_1.StandaloneConnector(this.options);\n }\n if (this.options.scripts) {\n Object.entries(this.options.scripts).forEach(([name, definition]) => {\n this.defineCommand(name, definition);\n });\n }\n // end(or wait) -> connecting -> connect -> ready -> end\n if (this.options.lazyConnect) {\n this.setStatus(\"wait\");\n }\n else {\n this.connect().catch(lodash_1.noop);\n }\n }\n /**\n * Create a Redis instance.\n * This is the same as `new Redis()` but is included for compatibility with node-redis.\n */\n static createClient(...args) {\n return new Redis(...args);\n }\n get autoPipelineQueueSize() {\n let queued = 0;\n for (const pipeline of this._autoPipelines.values()) {\n queued += pipeline.length;\n }\n return queued;\n }\n /**\n * Create a connection to Redis.\n * This method will be invoked automatically when creating a new Redis instance\n * unless `lazyConnect: true` is passed.\n *\n * When calling this method manually, a Promise is returned, which will\n * be resolved when the connection status is ready.\n */\n connect(callback) {\n const promise = new Promise((resolve, reject) => {\n if (this.status === \"connecting\" ||\n this.status === \"connect\" ||\n this.status === \"ready\") {\n reject(new Error(\"Redis is already connecting/connected\"));\n return;\n }\n this.connectionEpoch += 1;\n this.setStatus(\"connecting\");\n const { options } = this;\n this.condition = {\n select: options.db,\n auth: options.username\n ? [options.username, options.password]\n : options.password,\n subscriber: false,\n };\n const _this = this;\n (0, standard_as_callback_1.default)(this.connector.connect(function (type, err) {\n _this.silentEmit(type, err);\n }), function (err, stream) {\n if (err) {\n _this.flushQueue(err);\n _this.silentEmit(\"error\", err);\n reject(err);\n _this.setStatus(\"end\");\n return;\n }\n let CONNECT_EVENT = options.tls ? \"secureConnect\" : \"connect\";\n if (\"sentinels\" in options &&\n options.sentinels &&\n !options.enableTLSForSentinelMode) {\n CONNECT_EVENT = \"connect\";\n }\n _this.stream = stream;\n if (options.noDelay) {\n stream.setNoDelay(true);\n }\n // Node ignores setKeepAlive before connect, therefore we wait for the event:\n // https://github.com/nodejs/node/issues/31663\n if (typeof options.keepAlive === \"number\") {\n if (stream.connecting) {\n stream.once(CONNECT_EVENT, () => {\n stream.setKeepAlive(true, options.keepAlive);\n });\n }\n else {\n stream.setKeepAlive(true, options.keepAlive);\n }\n }\n if (stream.connecting) {\n stream.once(CONNECT_EVENT, eventHandler.connectHandler(_this));\n if (options.connectTimeout) {\n /*\n * Typically, Socket#setTimeout(0) will clear the timer\n * set before. However, in some platforms (Electron 3.x~4.x),\n * the timer will not be cleared. So we introduce a variable here.\n *\n * See https://github.com/electron/electron/issues/14915\n */\n let connectTimeoutCleared = false;\n stream.setTimeout(options.connectTimeout, function () {\n if (connectTimeoutCleared) {\n return;\n }\n stream.setTimeout(0);\n stream.destroy();\n const err = new Error(\"connect ETIMEDOUT\");\n // @ts-expect-error\n err.errorno = \"ETIMEDOUT\";\n // @ts-expect-error\n err.code = \"ETIMEDOUT\";\n // @ts-expect-error\n err.syscall = \"connect\";\n eventHandler.errorHandler(_this)(err);\n });\n stream.once(CONNECT_EVENT, function () {\n connectTimeoutCleared = true;\n stream.setTimeout(0);\n });\n }\n }\n else if (stream.destroyed) {\n const firstError = _this.connector.firstError;\n if (firstError) {\n process.nextTick(() => {\n eventHandler.errorHandler(_this)(firstError);\n });\n }\n process.nextTick(eventHandler.closeHandler(_this));\n }\n else {\n process.nextTick(eventHandler.connectHandler(_this));\n }\n if (!stream.destroyed) {\n stream.once(\"error\", eventHandler.errorHandler(_this));\n stream.once(\"close\", eventHandler.closeHandler(_this));\n }\n const connectionReadyHandler = function () {\n _this.removeListener(\"close\", connectionCloseHandler);\n resolve();\n };\n var connectionCloseHandler = function () {\n _this.removeListener(\"ready\", connectionReadyHandler);\n reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n };\n _this.once(\"ready\", connectionReadyHandler);\n _this.once(\"close\", connectionCloseHandler);\n });\n });\n return (0, standard_as_callback_1.default)(promise, callback);\n }\n /**\n * Disconnect from Redis.\n *\n * This method closes the connection immediately,\n * and may lose some pending replies that haven't written to client.\n * If you want to wait for the pending replies, use Redis#quit instead.\n */\n disconnect(reconnect = false) {\n if (!reconnect) {\n this.manuallyClosing = true;\n }\n if (this.reconnectTimeout && !reconnect) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n if (this.status === \"wait\") {\n eventHandler.closeHandler(this)();\n }\n else {\n this.connector.disconnect();\n }\n }\n /**\n * Disconnect from Redis.\n *\n * @deprecated\n */\n end() {\n this.disconnect();\n }\n /**\n * Create a new instance with the same options as the current one.\n *\n * @example\n * ```js\n * var redis = new Redis(6380);\n * var anotherRedis = redis.duplicate();\n * ```\n */\n duplicate(override) {\n return new Redis({ ...this.options, ...override });\n }\n /**\n * Mode of the connection.\n *\n * One of `\"normal\"`, `\"subscriber\"`, or `\"monitor\"`. When the connection is\n * not in `\"normal\"` mode, certain commands are not allowed.\n */\n get mode() {\n var _a;\n return this.options.monitor\n ? \"monitor\"\n : ((_a = this.condition) === null || _a === void 0 ? void 0 : _a.subscriber)\n ? \"subscriber\"\n : \"normal\";\n }\n /**\n * Listen for all requests received by the server in real time.\n *\n * This command will create a new connection to Redis and send a\n * MONITOR command via the new connection in order to avoid disturbing\n * the current connection.\n *\n * @param callback The callback function. If omit, a promise will be returned.\n * @example\n * ```js\n * var redis = new Redis();\n * redis.monitor(function (err, monitor) {\n * // Entering monitoring mode.\n * monitor.on('monitor', function (time, args, source, database) {\n * console.log(time + \": \" + util.inspect(args));\n * });\n * });\n *\n * // supports promise as well as other commands\n * redis.monitor().then(function (monitor) {\n * monitor.on('monitor', function (time, args, source, database) {\n * console.log(time + \": \" + util.inspect(args));\n * });\n * });\n * ```\n */\n monitor(callback) {\n const monitorInstance = this.duplicate({\n monitor: true,\n lazyConnect: false,\n });\n return (0, standard_as_callback_1.default)(new Promise(function (resolve, reject) {\n monitorInstance.once(\"error\", reject);\n monitorInstance.once(\"monitoring\", function () {\n resolve(monitorInstance);\n });\n }), callback);\n }\n /**\n * Send a command to Redis\n *\n * This method is used internally and in most cases you should not\n * use it directly. If you need to send a command that is not supported\n * by the library, you can use the `call` method:\n *\n * ```js\n * const redis = new Redis();\n *\n * redis.call('set', 'foo', 'bar');\n * // or\n * redis.call(['set', 'foo', 'bar']);\n * ```\n *\n * @ignore\n */\n sendCommand(command, stream) {\n var _a, _b;\n if (this.status === \"wait\") {\n this.connect().catch(lodash_1.noop);\n }\n if (this.status === \"end\") {\n command.reject(new Error(utils_1.CONNECTION_CLOSED_ERROR_MSG));\n return command.promise;\n }\n if (((_a = this.condition) === null || _a === void 0 ? void 0 : _a.subscriber) &&\n !Command_1.default.checkFlag(\"VALID_IN_SUBSCRIBER_MODE\", command.name)) {\n command.reject(new Error(\"Connection in subscriber mode, only subscriber commands may be used\"));\n return command.promise;\n }\n if (typeof this.options.commandTimeout === \"number\") {\n command.setTimeout(this.options.commandTimeout);\n }\n let writable = this.status === \"ready\" ||\n (!stream &&\n this.status === \"connect\" &&\n (0, commands_1.exists)(command.name) &&\n (0, commands_1.hasFlag)(command.name, \"loading\"));\n if (!this.stream) {\n writable = false;\n }\n else if (!this.stream.writable) {\n writable = false;\n // @ts-expect-error\n }\n else if (this.stream._writableState && this.stream._writableState.ended) {\n // TODO: We should be able to remove this as the PR has already been merged.\n // https://github.com/iojs/io.js/pull/1217\n writable = false;\n }\n if (!writable) {\n if (!this.options.enableOfflineQueue) {\n command.reject(new Error(\"Stream isn't writeable and enableOfflineQueue options is false\"));\n return command.promise;\n }\n if (command.name === \"quit\" && this.offlineQueue.length === 0) {\n this.disconnect();\n command.resolve(Buffer.from(\"OK\"));\n return command.promise;\n }\n // @ts-expect-error\n if (debug.enabled) {\n debug(\"queue command[%s]: %d -> %s(%o)\", this._getDescription(), this.condition.select, command.name, command.args);\n }\n this.offlineQueue.push({\n command: command,\n stream: stream,\n select: this.condition.select,\n });\n }\n else {\n // @ts-expect-error\n if (debug.enabled) {\n debug(\"write command[%s]: %d -> %s(%o)\", this._getDescription(), (_b = this.condition) === null || _b === void 0 ? void 0 : _b.select, command.name, command.args);\n }\n if (stream) {\n if (\"isPipeline\" in stream && stream.isPipeline) {\n stream.write(command.toWritable(stream.destination.redis.stream));\n }\n else {\n stream.write(command.toWritable(stream));\n }\n }\n else {\n this.stream.write(command.toWritable(this.stream));\n }\n this.commandQueue.push({\n command: command,\n stream: stream,\n select: this.condition.select,\n });\n if (Command_1.default.checkFlag(\"WILL_DISCONNECT\", command.name)) {\n this.manuallyClosing = true;\n }\n }\n if (command.name === \"select\" && (0, utils_1.isInt)(command.args[0])) {\n const db = parseInt(command.args[0], 10);\n if (this.condition.select !== db) {\n this.condition.select = db;\n this.emit(\"select\", db);\n debug(\"switch to db [%d]\", this.condition.select);\n }\n }\n return command.promise;\n }\n scanStream(options) {\n return this.createScanStream(\"scan\", { options });\n }\n scanBufferStream(options) {\n return this.createScanStream(\"scanBuffer\", { options });\n }\n sscanStream(key, options) {\n return this.createScanStream(\"sscan\", { key, options });\n }\n sscanBufferStream(key, options) {\n return this.createScanStream(\"sscanBuffer\", { key, options });\n }\n hscanStream(key, options) {\n return this.createScanStream(\"hscan\", { key, options });\n }\n hscanBufferStream(key, options) {\n return this.createScanStream(\"hscanBuffer\", { key, options });\n }\n zscanStream(key, options) {\n return this.createScanStream(\"zscan\", { key, options });\n }\n zscanBufferStream(key, options) {\n return this.createScanStream(\"zscanBuffer\", { key, options });\n }\n /**\n * Emit only when there's at least one listener.\n *\n * @ignore\n */\n silentEmit(eventName, arg) {\n let error;\n if (eventName === \"error\") {\n error = arg;\n if (this.status === \"end\") {\n return;\n }\n if (this.manuallyClosing) {\n // ignore connection related errors when manually disconnecting\n if (error instanceof Error &&\n (error.message === utils_1.CONNECTION_CLOSED_ERROR_MSG ||\n // @ts-expect-error\n error.syscall === \"connect\" ||\n // @ts-expect-error\n error.syscall === \"read\")) {\n return;\n }\n }\n }\n if (this.listeners(eventName).length > 0) {\n return this.emit.apply(this, arguments);\n }\n if (error && error instanceof Error) {\n console.error(\"[ioredis] Unhandled error event:\", error.stack);\n }\n return false;\n }\n /**\n * @ignore\n */\n recoverFromFatalError(_commandError, err, options) {\n this.flushQueue(err, options);\n this.silentEmit(\"error\", err);\n this.disconnect(true);\n }\n /**\n * @ignore\n */\n handleReconnection(err, item) {\n var _a;\n let needReconnect = false;\n if (this.options.reconnectOnError) {\n needReconnect = this.options.reconnectOnError(err);\n }\n switch (needReconnect) {\n case 1:\n case true:\n if (this.status !== \"reconnecting\") {\n this.disconnect(true);\n }\n item.command.reject(err);\n break;\n case 2:\n if (this.status !== \"reconnecting\") {\n this.disconnect(true);\n }\n if (((_a = this.condition) === null || _a === void 0 ? void 0 : _a.select) !== item.select &&\n item.command.name !== \"select\") {\n this.select(item.select);\n }\n // TODO\n // @ts-expect-error\n this.sendCommand(item.command);\n break;\n default:\n item.command.reject(err);\n }\n }\n /**\n * Get description of the connection. Used for debugging.\n */\n _getDescription() {\n let description;\n if (\"path\" in this.options && this.options.path) {\n description = this.options.path;\n }\n else if (this.stream &&\n this.stream.remoteAddress &&\n this.stream.remotePort) {\n description = this.stream.remoteAddress + \":\" + this.stream.remotePort;\n }\n else if (\"host\" in this.options && this.options.host) {\n description = this.options.host + \":\" + this.options.port;\n }\n else {\n // Unexpected\n description = \"\";\n }\n if (this.options.connectionName) {\n description += ` (${this.options.connectionName})`;\n }\n return description;\n }\n resetCommandQueue() {\n this.commandQueue = new Deque();\n }\n resetOfflineQueue() {\n this.offlineQueue = new Deque();\n }\n parseOptions(...args) {\n const options = {};\n let isTls = false;\n for (let i = 0; i < args.length; ++i) {\n const arg = args[i];\n if (arg === null || typeof arg === \"undefined\") {\n continue;\n }\n if (typeof arg === \"object\") {\n (0, lodash_1.defaults)(options, arg);\n }\n else if (typeof arg === \"string\") {\n (0, lodash_1.defaults)(options, (0, utils_1.parseURL)(arg));\n if (arg.startsWith(\"rediss://\")) {\n isTls = true;\n }\n }\n else if (typeof arg === \"number\") {\n options.port = arg;\n }\n else {\n throw new Error(\"Invalid argument \" + arg);\n }\n }\n if (isTls) {\n (0, lodash_1.defaults)(options, { tls: true });\n }\n (0, lodash_1.defaults)(options, Redis.defaultOptions);\n if (typeof options.port === \"string\") {\n options.port = parseInt(options.port, 10);\n }\n if (typeof options.db === \"string\") {\n options.db = parseInt(options.db, 10);\n }\n // @ts-expect-error\n this.options = (0, utils_1.resolveTLSProfile)(options);\n }\n /**\n * Change instance's status\n */\n setStatus(status, arg) {\n // @ts-expect-error\n if (debug.enabled) {\n debug(\"status[%s]: %s -> %s\", this._getDescription(), this.status || \"[empty]\", status);\n }\n this.status = status;\n process.nextTick(this.emit.bind(this, status, arg));\n }\n createScanStream(command, { key, options = {} }) {\n return new ScanStream_1.default({\n objectMode: true,\n key: key,\n redis: this,\n command: command,\n ...options,\n });\n }\n /**\n * Flush offline queue and command queue with error.\n *\n * @param error The error object to send to the commands\n * @param options options\n */\n flushQueue(error, options) {\n options = (0, lodash_1.defaults)({}, options, {\n offlineQueue: true,\n commandQueue: true,\n });\n let item;\n if (options.offlineQueue) {\n while ((item = this.offlineQueue.shift())) {\n item.command.reject(error);\n }\n }\n if (options.commandQueue) {\n if (this.commandQueue.length > 0) {\n if (this.stream) {\n this.stream.removeAllListeners(\"data\");\n }\n while ((item = this.commandQueue.shift())) {\n item.command.reject(error);\n }\n }\n }\n }\n /**\n * Check whether Redis has finished loading the persistent data and is able to\n * process commands.\n */\n _readyCheck(callback) {\n const _this = this;\n this.info(function (err, res) {\n if (err) {\n if (err.message && err.message.includes(\"NOPERM\")) {\n console.warn(`Skipping the ready check because INFO command fails: \"${err.message}\". You can disable ready check with \"enableReadyCheck\". More: https://github.com/luin/ioredis/wiki/Disable-ready-check.`);\n return callback(null, {});\n }\n return callback(err);\n }\n if (typeof res !== \"string\") {\n return callback(null, res);\n }\n const info = {};\n const lines = res.split(\"\\r\\n\");\n for (let i = 0; i < lines.length; ++i) {\n const [fieldName, ...fieldValueParts] = lines[i].split(\":\");\n const fieldValue = fieldValueParts.join(\":\");\n if (fieldValue) {\n info[fieldName] = fieldValue;\n }\n }\n if (!info.loading || info.loading === \"0\") {\n callback(null, info);\n }\n else {\n const loadingEtaMs = (info.loading_eta_seconds || 1) * 1000;\n const retryTime = _this.options.maxLoadingRetryTime &&\n _this.options.maxLoadingRetryTime < loadingEtaMs\n ? _this.options.maxLoadingRetryTime\n : loadingEtaMs;\n debug(\"Redis server still loading, trying again in \" + retryTime + \"ms\");\n setTimeout(function () {\n _this._readyCheck(callback);\n }, retryTime);\n }\n }).catch(lodash_1.noop);\n }\n}\nRedis.Cluster = cluster_1.default;\nRedis.Command = Command_1.default;\n/**\n * Default options\n */\nRedis.defaultOptions = RedisOptions_1.DEFAULT_REDIS_OPTIONS;\n(0, applyMixin_1.default)(Redis, events_1.EventEmitter);\n(0, transaction_1.addTransactionSupport)(Redis.prototype);\nexports.default = Redis;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.print = exports.ReplyError = exports.SentinelIterator = exports.SentinelConnector = exports.AbstractConnector = exports.Pipeline = exports.ScanStream = exports.Command = exports.Cluster = exports.Redis = exports.default = void 0;\nexports = module.exports = require(\"./Redis\").default;\nvar Redis_1 = require(\"./Redis\");\nObject.defineProperty(exports, \"default\", { enumerable: true, get: function () { return Redis_1.default; } });\nvar Redis_2 = require(\"./Redis\");\nObject.defineProperty(exports, \"Redis\", { enumerable: true, get: function () { return Redis_2.default; } });\nvar cluster_1 = require(\"./cluster\");\nObject.defineProperty(exports, \"Cluster\", { enumerable: true, get: function () { return cluster_1.default; } });\n/**\n * @ignore\n */\nvar Command_1 = require(\"./Command\");\nObject.defineProperty(exports, \"Command\", { enumerable: true, get: function () { return Command_1.default; } });\n/**\n * @ignore\n */\nvar ScanStream_1 = require(\"./ScanStream\");\nObject.defineProperty(exports, \"ScanStream\", { enumerable: true, get: function () { return ScanStream_1.default; } });\n/**\n * @ignore\n */\nvar Pipeline_1 = require(\"./Pipeline\");\nObject.defineProperty(exports, \"Pipeline\", { enumerable: true, get: function () { return Pipeline_1.default; } });\n/**\n * @ignore\n */\nvar AbstractConnector_1 = require(\"./connectors/AbstractConnector\");\nObject.defineProperty(exports, \"AbstractConnector\", { enumerable: true, get: function () { return AbstractConnector_1.default; } });\n/**\n * @ignore\n */\nvar SentinelConnector_1 = require(\"./connectors/SentinelConnector\");\nObject.defineProperty(exports, \"SentinelConnector\", { enumerable: true, get: function () { return SentinelConnector_1.default; } });\nObject.defineProperty(exports, \"SentinelIterator\", { enumerable: true, get: function () { return SentinelConnector_1.SentinelIterator; } });\n// No TS typings\nexports.ReplyError = require(\"redis-errors\").ReplyError;\n/**\n * @ignore\n */\nObject.defineProperty(exports, \"Promise\", {\n get() {\n console.warn(\"ioredis v5 does not support plugging third-party Promise library anymore. Native Promise will be used.\");\n return Promise;\n },\n set(_lib) {\n console.warn(\"ioredis v5 does not support plugging third-party Promise library anymore. Native Promise will be used.\");\n },\n});\n/**\n * @ignore\n */\nfunction print(err, reply) {\n if (err) {\n console.log(\"Error: \" + err);\n }\n else {\n console.log(\"Reply: \" + reply);\n }\n}\nexports.print = print;\n","import { Redis, type RedisOptions } from \"ioredis\";\nimport { Logger } from \"@trigger.dev/core/logger\";\n\nexport { Redis, type Callback, type RedisOptions, type Result, type RedisCommander } from \"ioredis\";\n\nconst defaultOptions: Partial<RedisOptions> = {\n retryStrategy: (times: number) => {\n const delay = Math.min(times * 50, 1000);\n return delay;\n },\n maxRetriesPerRequest: process.env.GITHUB_ACTIONS ? 50 : process.env.VITEST ? 5 : 20,\n};\n\nconst logger = new Logger(\"Redis\", \"debug\");\n\nexport function createRedisClient(\n options: RedisOptions,\n handlers?: { onError?: (err: Error) => void }\n): Redis {\n const client = new Redis({\n ...defaultOptions,\n ...options,\n });\n\n // Skip error handling setup if running in Vitest\n if (process.env.VITEST) {\n client.on(\"error\", (error) => {\n // swallow errors\n });\n return client;\n }\n\n client.on(\"error\", (error) => {\n if (handlers?.onError) {\n handlers.onError(error);\n } else {\n logger.error(`Redis client error:`, { error, keyPrefix: options.keyPrefix });\n }\n });\n\n return client;\n}\n","export const urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n","import { webcrypto as crypto } from 'node:crypto'\nimport { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nconst POOL_SIZE_MULTIPLIER = 128\nlet pool, poolOffset\nfunction fillPool(bytes) {\n if (!pool || pool.length < bytes) {\n pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)\n crypto.getRandomValues(pool)\n poolOffset = 0\n } else if (poolOffset + bytes > pool.length) {\n crypto.getRandomValues(pool)\n poolOffset = 0\n }\n poolOffset += bytes\n}\nexport function random(bytes) {\n fillPool((bytes |= 0))\n return pool.subarray(poolOffset - bytes, poolOffset)\n}\nexport function customRandom(alphabet, defaultSize, getRandom) {\n let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1\n let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let i = step\n while (i--) {\n id += alphabet[bytes[i] & mask] || ''\n if (id.length >= size) return id\n }\n }\n }\n}\nexport function customAlphabet(alphabet, size = 21) {\n return customRandom(alphabet, size, random)\n}\nexport function nanoid(size = 21) {\n fillPool((size |= 0))\n let id = ''\n for (let i = poolOffset - size; i < poolOffset; i++) {\n id += scopedUrlAlphabet[pool[i] & 63]\n }\n return id\n}\n","import {\n createRedisClient,\n type Redis,\n type Callback,\n type RedisOptions,\n type Result,\n} from \"@internal/redis\";\nimport { Logger } from \"@trigger.dev/core/logger\";\nimport { nanoid } from \"nanoid\";\nimport { z } from \"zod\";\n\nexport interface MessageCatalogSchema {\n [key: string]: z.ZodFirstPartySchemaTypes | z.ZodDiscriminatedUnion<any, any>;\n}\n\nexport type MessageCatalogKey<TMessageCatalog extends MessageCatalogSchema> = keyof TMessageCatalog;\nexport type MessageCatalogValue<\n TMessageCatalog extends MessageCatalogSchema,\n TKey extends MessageCatalogKey<TMessageCatalog>,\n> = z.infer<TMessageCatalog[TKey]>;\n\nexport type AnyMessageCatalog = MessageCatalogSchema;\nexport type QueueItem<TMessageCatalog extends MessageCatalogSchema> = {\n id: string;\n job: MessageCatalogKey<TMessageCatalog>;\n item: MessageCatalogValue<TMessageCatalog, MessageCatalogKey<TMessageCatalog>>;\n visibilityTimeoutMs: number;\n attempt: number;\n timestamp: Date;\n deduplicationKey?: string;\n};\n\nexport type AnyQueueItem = {\n id: string;\n job: string;\n item: any;\n visibilityTimeoutMs: number;\n attempt: number;\n timestamp: Date;\n deduplicationKey?: string;\n};\n\nexport class SimpleQueue<TMessageCatalog extends MessageCatalogSchema> {\n name: string;\n private redis: Redis;\n private schema: TMessageCatalog;\n private logger: Logger;\n\n constructor({\n name,\n schema,\n redisOptions,\n logger,\n }: {\n name: string;\n schema: TMessageCatalog;\n redisOptions: RedisOptions;\n logger?: Logger;\n }) {\n this.name = name;\n this.logger = logger ?? new Logger(\"SimpleQueue\", \"debug\");\n\n this.redis = createRedisClient(\n {\n ...redisOptions,\n keyPrefix: `${redisOptions.keyPrefix ?? \"\"}{queue:${name}:}`,\n retryStrategy(times) {\n const delay = Math.min(times * 50, 1000);\n return delay;\n },\n maxRetriesPerRequest: 20,\n },\n {\n onError: (error) => {\n this.logger.error(`RedisWorker queue redis client error:`, {\n error,\n keyPrefix: redisOptions.keyPrefix,\n });\n },\n }\n );\n this.#registerCommands();\n this.schema = schema;\n }\n\n async cancel(cancellationKey: string): Promise<void> {\n await this.redis.set(`cancellationKey:${cancellationKey}`, \"1\", \"EX\", 60 * 60 * 24); // 1 day\n }\n\n async enqueue({\n id,\n job,\n item,\n attempt,\n availableAt,\n visibilityTimeoutMs,\n cancellationKey,\n }: {\n id?: string;\n job: MessageCatalogKey<TMessageCatalog>;\n item: MessageCatalogValue<TMessageCatalog, MessageCatalogKey<TMessageCatalog>>;\n attempt?: number;\n availableAt?: Date;\n visibilityTimeoutMs: number;\n cancellationKey?: string;\n }): Promise<void> {\n try {\n const score = availableAt ? availableAt.getTime() : Date.now();\n const deduplicationKey = nanoid();\n const serializedItem = JSON.stringify({\n job,\n item,\n visibilityTimeoutMs,\n attempt,\n deduplicationKey,\n });\n\n const result = cancellationKey\n ? await this.redis.enqueueItemWithCancellationKey(\n `queue`,\n `items`,\n `cancellationKey:${cancellationKey}`,\n id ?? nanoid(),\n score,\n serializedItem\n )\n : await this.redis.enqueueItem(`queue`, `items`, id ?? nanoid(), score, serializedItem);\n\n if (result !== 1) {\n throw new Error(\"Enqueue operation failed\");\n }\n } catch (e) {\n this.logger.error(`SimpleQueue ${this.name}.enqueue(): error enqueuing`, {\n queue: this.name,\n error: e,\n id,\n item,\n });\n throw e;\n }\n }\n\n async enqueueOnce({\n id,\n job,\n item,\n attempt,\n availableAt,\n visibilityTimeoutMs,\n }: {\n id: string;\n job: MessageCatalogKey<TMessageCatalog>;\n item: MessageCatalogValue<TMessageCatalog, MessageCatalogKey<TMessageCatalog>>;\n attempt?: number;\n availableAt?: Date;\n visibilityTimeoutMs: number;\n }): Promise<boolean> {\n if (!id) {\n throw new Error(\"enqueueOnce requires an id\");\n }\n try {\n const score = availableAt ? availableAt.getTime() : Date.now();\n const deduplicationKey = nanoid();\n const serializedItem = JSON.stringify({\n job,\n item,\n visibilityTimeoutMs,\n attempt,\n deduplicationKey,\n });\n const result = await this.redis.enqueueItemOnce(`queue`, `items`, id, score, serializedItem);\n // 1 if inserted, 0 if already exists\n return result === 1;\n } catch (e) {\n this.logger.error(`SimpleQueue ${this.name}.enqueueOnce(): error enqueuing`, {\n queue: this.name,\n error: e,\n id,\n item,\n });\n throw e;\n }\n }\n\n async dequeue(count: number = 1): Promise<Array<QueueItem<TMessageCatalog>>> {\n const now = Date.now();\n\n try {\n const results = await this.redis.dequeueItems(`queue`, `items`, now, count);\n\n if (!results || results.length === 0) {\n return [];\n }\n\n const dequeuedItems: Array<QueueItem<TMessageCatalog>> = [];\n\n for (const [id, serializedItem, score] of results) {\n const parsedItem = JSON.parse(serializedItem) as any;\n if (typeof parsedItem.job !== \"string\") {\n this.logger.error(`Invalid item in queue`, { queue: this.name, id, item: parsedItem });\n continue;\n }\n\n const timestamp = new Date(Number(score));\n\n const schema = this.schema[parsedItem.job];\n\n if (!schema) {\n this.logger.error(`Invalid item in queue, schema not found`, {\n queue: this.name,\n id,\n item: parsedItem,\n job: parsedItem.job,\n timestamp,\n availableJobs: Object.keys(this.schema),\n });\n continue;\n }\n\n const validatedItem = schema.safeParse(parsedItem.item);\n\n if (!validatedItem.success) {\n this.logger.error(\"Invalid item in queue\", {\n queue: this.name,\n id,\n item: parsedItem,\n errors: validatedItem.error,\n attempt: parsedItem.attempt,\n timestamp,\n });\n continue;\n }\n\n const visibilityTimeoutMs = parsedItem.visibilityTimeoutMs as number;\n\n dequeuedItems.push({\n id,\n job: parsedItem.job,\n item: validatedItem.data,\n visibilityTimeoutMs,\n attempt: parsedItem.attempt ?? 0,\n timestamp,\n deduplicationKey: parsedItem.deduplicationKey,\n });\n }\n\n return dequeuedItems;\n } catch (e) {\n this.logger.error(`SimpleQueue ${this.name}.dequeue(): error dequeuing`, {\n queue: this.name,\n error: e,\n count,\n });\n throw e;\n }\n }\n\n async ack(id: string, deduplicationKey?: string): Promise<void> {\n try {\n const result = await this.redis.ackItem(`queue`, `items`, id, deduplicationKey ?? \"\");\n if (result !== 1) {\n this.logger.debug(\n `SimpleQueue ${this.name}.ack(): ack operation returned ${result}. This means it was not removed from the queue.`,\n {\n queue: this.name,\n id,\n deduplicationKey,\n result,\n }\n );\n }\n } catch (e) {\n this.logger.error(`SimpleQueue ${this.name}.ack(): error acknowledging item`, {\n queue: this.name,\n error: e,\n id,\n deduplicationKey,\n });\n throw e;\n }\n }\n\n async reschedule(id: string, availableAt: Date): Promise<void> {\n await this.redis.zadd(`queue`, \"XX\", availableAt.getTime(), id);\n }\n\n async size({ includeFuture = false }: { includeFuture?: boolean } = {}): Promise<number> {\n try {\n if (includeFuture) {\n // If includeFuture is true, return the total count of all items\n return await this.redis.zcard(`queue`);\n } else {\n // If includeFuture is false, return the count of items available now\n const now = Date.now();\n return await this.redis.zcount(`queue`, \"-inf\", now);\n }\n } catch (e) {\n this.logger.error(`SimpleQueue ${this.name}.size(): error getting queue size`, {\n queue: this.name,\n error: e,\n includeFuture,\n });\n throw e;\n }\n }\n\n async getJob(id: string): Promise<QueueItem<TMessageCatalog> | null> {\n const result = await this.redis.getJob(`queue`, `items`, id);\n\n if (!result) {\n return null;\n }\n\n const [_, score, serializedItem] = result;\n const item = JSON.parse(serializedItem) as QueueItem<TMessageCatalog>;\n\n return {\n id,\n job: item.job,\n item: item.item,\n visibilityTimeoutMs: item.visibilityTimeoutMs,\n attempt: item.attempt ?? 0,\n timestamp: new Date(Number(score)),\n deduplicationKey: item.deduplicationKey ?? undefined,\n };\n }\n\n async moveToDeadLetterQueue(id: string, errorMessage: string): Promise<void> {\n try {\n this.logger.debug(`SimpleQueue ${this.name}.moveToDeadLetterQueue(): moving item to DLQ`, {\n queue: this.name,\n id,\n errorMessage,\n });\n\n const result = await this.redis.moveToDeadLetterQueue(\n `queue`,\n `items`,\n `dlq`,\n `dlq:items`,\n id,\n errorMessage\n );\n\n if (result !== 1) {\n throw new Error(\"Move to Dead Letter Queue operation failed\");\n }\n } catch (e) {\n this.logger.error(\n `SimpleQueue ${this.name}.moveToDeadLetterQueue(): error moving item to DLQ`,\n {\n queue: this.name,\n error: e,\n id,\n errorMessage,\n }\n );\n throw e;\n }\n }\n\n async sizeOfDeadLetterQueue(): Promise<number> {\n try {\n return await this.redis.zcard(`dlq`);\n } catch (e) {\n this.logger.error(`SimpleQueue ${this.name}.dlqSize(): error getting DLQ size`, {\n queue: this.name,\n error: e,\n });\n throw e;\n }\n }\n\n async redriveFromDeadLetterQueue(id: string): Promise<void> {\n try {\n const result = await this.redis.redriveFromDeadLetterQueue(\n `queue`,\n `items`,\n `dlq`,\n `dlq:items`,\n id\n );\n\n if (result !== 1) {\n throw new Error(\"Redrive from Dead Letter Queue operation failed\");\n }\n } catch (e) {\n this.logger.error(\n `SimpleQueue ${this.name}.redriveFromDeadLetterQueue(): error redriving item from DLQ`,\n {\n queue: this.name,\n error: e,\n id,\n }\n );\n throw e;\n }\n }\n\n async close(): Promise<void> {\n await this.redis.quit();\n }\n\n #registerCommands() {\n this.redis.defineCommand(\"enqueueItem\", {\n numberOfKeys: 2,\n lua: `\n local queue = KEYS[1]\n local items = KEYS[2]\n local id = ARGV[1]\n local score = ARGV[2]\n local serializedItem = ARGV[3]\n\n redis.call('ZADD', queue, score, id)\n redis.call('HSET', items, id, serializedItem)\n\n return 1\n `,\n });\n\n this.redis.defineCommand(\"enqueueItemWithCancellationKey\", {\n numberOfKeys: 3,\n lua: `\n local queue = KEYS[1]\n local items = KEYS[2]\n local cancellationKey = KEYS[3]\n\n local id = ARGV[1]\n local score = ARGV[2]\n local serializedItem = ARGV[3]\n\n -- if the cancellation key exists, return 1\n if redis.call('EXISTS', cancellationKey) == 1 then\n return 1\n end\n\n redis.call('ZADD', queue, score, id)\n redis.call('HSET', items, id, serializedItem)\n\n return 1\n `,\n });\n\n this.redis.defineCommand(\"dequeueItems\", {\n numberOfKeys: 2,\n lua: `\n local queue = KEYS[1]\n local items = KEYS[2]\n local now = tonumber(ARGV[1])\n local count = tonumber(ARGV[2])\n\n local result = redis.call('ZRANGEBYSCORE', queue, '-inf', now, 'WITHSCORES', 'LIMIT', 0, count)\n\n if #result == 0 then\n return {}\n end\n\n local dequeued = {}\n\n for i = 1, #result, 2 do\n local id = result[i]\n local score = tonumber(result[i + 1])\n\n if score > now then\n break\n end\n\n local serializedItem = redis.call('HGET', items, id)\n\n if serializedItem then\n local item = cjson.decode(serializedItem)\n local visibilityTimeoutMs = tonumber(item.visibilityTimeoutMs)\n local invisibleUntil = now + visibilityTimeoutMs\n\n redis.call('ZADD', queue, invisibleUntil, id)\n table.insert(dequeued, {id, serializedItem, score})\n else\n -- Remove the orphaned queue entry if no corresponding item exists\n redis.call('ZREM', queue, id)\n end\n end\n\n return dequeued\n `,\n });\n\n this.redis.defineCommand(\"getJob\", {\n numberOfKeys: 2,\n lua: `\n local queue = KEYS[1]\n local items = KEYS[2]\n local jobId = ARGV[1]\n\n local serializedItem = redis.call('HGET', items, jobId)\n\n if serializedItem == false then\n return nil\n end\n\n -- get the score from the queue sorted set\n local score = redis.call('ZSCORE', queue, jobId)\n\n return { jobId, score, serializedItem }\n `,\n });\n\n this.redis.defineCommand(\"ackItem\", {\n numberOfKeys: 2,\n lua: `\n local queueKey = KEYS[1]\n local itemsKey = KEYS[2]\n local id = ARGV[1]\n local deduplicationKey = ARGV[2]\n\n -- Get the item from the hash\n local item = redis.call('HGET', itemsKey, id)\n if not item then\n return -1\n end\n\n -- Only check deduplicationKey if a non-empty one was passed in\n if deduplicationKey and deduplicationKey ~= \"\" then\n local success, parsed = pcall(cjson.decode, item)\n if success then\n if parsed.deduplicationKey and parsed.deduplicationKey ~= deduplicationKey then\n return 0\n end\n end\n end\n\n -- Remove from sorted set and hash\n redis.call('ZREM', queueKey, id)\n redis.call('HDEL', itemsKey, id)\n return 1\n `,\n });\n\n this.redis.defineCommand(\"moveToDeadLetterQueue\", {\n numberOfKeys: 4,\n lua: `\n local queue = KEYS[1]\n local items = KEYS[2]\n local dlq = KEYS[3]\n local dlqItems = KEYS[4]\n local id = ARGV[1]\n local errorMessage = ARGV[2]\n\n local item = redis.call('HGET', items, id)\n if not item then\n return 0\n end\n\n local parsedItem = cjson.decode(item)\n parsedItem.errorMessage = errorMessage\n\n local time = redis.call('TIME')\n local now = tonumber(time[1]) * 1000 + math.floor(tonumber(time[2]) / 1000)\n\n redis.call('ZREM', queue, id)\n redis.call('HDEL', items, id)\n\n redis.call('ZADD', dlq, now, id)\n redis.call('HSET', dlqItems, id, cjson.encode(parsedItem))\n\n return 1\n `,\n });\n\n this.redis.defineCommand(\"redriveFromDeadLetterQueue\", {\n numberOfKeys: 4,\n lua: `\n local queue = KEYS[1]\n local items = KEYS[2]\n local dlq = KEYS[3]\n local dlqItems = KEYS[4]\n local id = ARGV[1]\n\n local item = redis.call('HGET', dlqItems, id)\n if not item then\n return 0\n end\n\n local parsedItem = cjson.decode(item)\n parsedItem.errorMessage = nil\n\n local time = redis.call('TIME')\n local now = tonumber(time[1]) * 1000 + math.floor(tonumber(time[2]) / 1000)\n\n redis.call('ZREM', dlq, id)\n redis.call('HDEL', dlqItems, id)\n\n redis.call('ZADD', queue, now, id)\n redis.call('HSET', items, id, cjson.encode(parsedItem))\n\n return 1\n `,\n });\n\n this.redis.defineCommand(\"enqueueItemOnce\", {\n numberOfKeys: 2,\n lua: `\n local queue = KEYS[1]\n local items = KEYS[2]\n local id = ARGV[1]\n local score = ARGV[2]\n local serializedItem = ARGV[3]\n\n -- Only add if not exists\n local added = redis.call('HSETNX', items, id, serializedItem)\n if added == 1 then\n redis.call('ZADD', queue, 'NX', score, id)\n return 1\n else\n return 0\n end\n `,\n });\n }\n}\n\ndeclare module \"@internal/redis\" {\n interface RedisCommander<Context> {\n enqueueItem(\n //keys\n queue: string,\n items: string,\n //args\n id: string,\n score: number,\n serializedItem: string,\n callback?: Callback<number>\n ): Result<number, Context>;\n\n enqueueItemWithCancellationKey(\n //keys\n queue: string,\n items: string,\n cancellationKey: string,\n //args\n id: string,\n score: number,\n serializedItem: string,\n callback?: Callback<number>\n ): Result<number, Context>;\n\n dequeueItems(\n //keys\n queue: string,\n items: string,\n //args\n now: number,\n count: number,\n callback?: Callback<Array<[string, string, string]>>\n ): Result<Array<[string, string, string]>, Context>;\n\n ackItem(\n queue: string,\n items: string,\n id: string,\n deduplicationKey: string,\n callback?: Callback<number>\n ): Result<number, Context>;\n\n redriveFromDeadLetterQueue(\n queue: string,\n items: string,\n dlq: string,\n dlqItems: string,\n id: string,\n callback?: Callback<number>\n ): Result<number, Context>;\n\n moveToDeadLetterQueue(\n queue: string,\n items: string,\n dlq: string,\n dlqItems: string,\n id: string,\n errorMessage: string,\n callback?: Callback<number>\n ): Result<number, Context>;\n\n enqueueItemOnce(\n queue: string,\n items: string,\n id: string,\n score: number,\n serializedItem: string,\n callback?: Callback<number>\n ): Result<number, Context>;\n\n getJob(\n queue: string,\n items: string,\n id: string,\n callback?: Callback<[string, string, string] | null>\n ): Result<[string, string, string] | null, Context>;\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** only globals that common to node and browsers are allowed */\n// eslint-disable-next-line node/no-unsupported-features/es-builtins\nexport const _globalThis = typeof globalThis === 'object' ? globalThis : global;\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// this is autogenerated file, see scripts/version-update.js\nexport const VERSION = '1.9.0';\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { VERSION } from '../version';\n\nconst re = /^(\\d+)\\.(\\d+)\\.(\\d+)(-(.+))?$/;\n\n/**\n * Create a function to test an API version to see if it is compatible with the provided ownVersion.\n *\n * The returned function has the following semantics:\n * - Exact match is always compatible\n * - Major versions must match exactly\n * - 1.x package cannot use global 2.x package\n * - 2.x package cannot use global 1.x package\n * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API\n * - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects\n * - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3\n * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor\n * - Patch and build tag differences are not considered at this time\n *\n * @param ownVersion version which should be checked against\n */\nexport function _makeCompatibilityCheck(\n ownVersion: string\n): (globalVersion: string) => boolean {\n const acceptedVersions = new Set<string>([ownVersion]);\n const rejectedVersions = new Set<string>();\n\n const myVersionMatch = ownVersion.match(re);\n if (!myVersionMatch) {\n // we cannot guarantee compatibility so we always return noop\n return () => false;\n }\n\n const ownVersionParsed = {\n major: +myVersionMatch[1],\n minor: +myVersionMatch[2],\n patch: +myVersionMatch[3],\n prerelease: myVersionMatch[4],\n };\n\n // if ownVersion has a prerelease tag, versions must match exactly\n if (ownVersionParsed.prerelease != null) {\n return function isExactmatch(globalVersion: string): boolean {\n return globalVersion === ownVersion;\n };\n }\n\n function _reject(v: string) {\n rejectedVersions.add(v);\n return false;\n }\n\n function _accept(v: string) {\n acceptedVersions.add(v);\n return true;\n }\n\n return function isCompatible(globalVersion: string): boolean {\n if (acceptedVersions.has(globalVersion)) {\n return true;\n }\n\n if (rejectedVersions.has(globalVersion)) {\n return false;\n }\n\n const globalVersionMatch = globalVersion.match(re);\n if (!globalVersionMatch) {\n // cannot parse other version\n // we cannot guarantee compatibility so we always noop\n return _reject(globalVersion);\n }\n\n const globalVersionParsed = {\n major: +globalVersionMatch[1],\n minor: +globalVersionMatch[2],\n patch: +globalVersionMatch[3],\n prerelease: globalVersionMatch[4],\n };\n\n // if globalVersion has a prerelease tag, versions must match exactly\n if (globalVersionParsed.prerelease != null) {\n return _reject(globalVersion);\n }\n\n // major versions must match\n if (ownVersionParsed.major !== globalVersionParsed.major) {\n return _reject(globalVersion);\n }\n\n if (ownVersionParsed.major === 0) {\n if (\n ownVersionParsed.minor === globalVersionParsed.minor &&\n ownVersionParsed.patch <= globalVersionParsed.patch\n ) {\n return _accept(globalVersion);\n }\n\n return _reject(globalVersion);\n }\n\n if (ownVersionParsed.minor <= globalVersionParsed.minor) {\n return _accept(globalVersion);\n }\n\n return _reject(globalVersion);\n };\n}\n\n/**\n * Test an API version to see if it is compatible with this API.\n *\n * - Exact match is always compatible\n * - Major versions must match exactly\n * - 1.x package cannot use global 2.x package\n * - 2.x package cannot use global 1.x package\n * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API\n * - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects\n * - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3\n * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor\n * - Patch and build tag differences are not considered at this time\n *\n * @param version version of the API requesting an instance of the global API\n */\nexport const isCompatible = _makeCompatibilityCheck(VERSION);\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MeterProvider } from '../metrics/MeterProvider';\nimport { ContextManager } from '../context/types';\nimport { DiagLogger } from '../diag/types';\nimport { _globalThis } from '../platform';\nimport { TextMapPropagator } from '../propagation/TextMapPropagator';\nimport type { TracerProvider } from '../trace/tracer_provider';\nimport { VERSION } from '../version';\nimport { isCompatible } from './semver';\n\nconst major = VERSION.split('.')[0];\nconst GLOBAL_OPENTELEMETRY_API_KEY = Symbol.for(\n `opentelemetry.js.api.${major}`\n);\n\nconst _global = _globalThis as OTelGlobal;\n\nexport function registerGlobal<Type extends keyof OTelGlobalAPI>(\n type: Type,\n instance: OTelGlobalAPI[Type],\n diag: DiagLogger,\n allowOverride = false\n): boolean {\n const api = (_global[GLOBAL_OPENTELEMETRY_API_KEY] = _global[\n GLOBAL_OPENTELEMETRY_API_KEY\n ] ?? {\n version: VERSION,\n });\n\n if (!allowOverride && api[type]) {\n // already registered an API of this type\n const err = new Error(\n `@opentelemetry/api: Attempted duplicate registration of API: ${type}`\n );\n diag.error(err.stack || err.message);\n return false;\n }\n\n if (api.version !== VERSION) {\n // All registered APIs must be of the same version exactly\n const err = new Error(\n `@opentelemetry/api: Registration of version v${api.version} for ${type} does not match previously registered API v${VERSION}`\n );\n diag.error(err.stack || err.message);\n return false;\n }\n\n api[type] = instance;\n diag.debug(\n `@opentelemetry/api: Registered a global for ${type} v${VERSION}.`\n );\n\n return true;\n}\n\nexport function getGlobal<Type extends keyof OTelGlobalAPI>(\n type: Type\n): OTelGlobalAPI[Type] | undefined {\n const globalVersion = _global[GLOBAL_OPENTELEMETRY_API_KEY]?.version;\n if (!globalVersion || !isCompatible(globalVersion)) {\n return;\n }\n return _global[GLOBAL_OPENTELEMETRY_API_KEY]?.[type];\n}\n\nexport function unregisterGlobal(type: keyof OTelGlobalAPI, diag: DiagLogger) {\n diag.debug(\n `@opentelemetry/api: Unregistering a global for ${type} v${VERSION}.`\n );\n const api = _global[GLOBAL_OPENTELEMETRY_API_KEY];\n\n if (api) {\n delete api[type];\n }\n}\n\ntype OTelGlobal = {\n [GLOBAL_OPENTELEMETRY_API_KEY]?: OTelGlobalAPI;\n};\n\ntype OTelGlobalAPI = {\n version: string;\n\n diag?: DiagLogger;\n trace?: TracerProvider;\n context?: ContextManager;\n metrics?: MeterProvider;\n propagation?: TextMapPropagator;\n};\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getGlobal } from '../internal/global-utils';\nimport { ComponentLoggerOptions, DiagLogger, DiagLogFunction } from './types';\n\n/**\n * Component Logger which is meant to be used as part of any component which\n * will add automatically additional namespace in front of the log message.\n * It will then forward all message to global diag logger\n * @example\n * const cLogger = diag.createComponentLogger({ namespace: '@opentelemetry/instrumentation-http' });\n * cLogger.debug('test');\n * // @opentelemetry/instrumentation-http test\n */\nexport class DiagComponentLogger implements DiagLogger {\n private _namespace: string;\n\n constructor(props: ComponentLoggerOptions) {\n this._namespace = props.namespace || 'DiagComponentLogger';\n }\n\n public debug(...args: any[]): void {\n return logProxy('debug', this._namespace, args);\n }\n\n public error(...args: any[]): void {\n return logProxy('error', this._namespace, args);\n }\n\n public info(...args: any[]): void {\n return logProxy('info', this._namespace, args);\n }\n\n public warn(...args: any[]): void {\n return logProxy('warn', this._namespace, args);\n }\n\n public verbose(...args: any[]): void {\n return logProxy('verbose', this._namespace, args);\n }\n}\n\nfunction logProxy(\n funcName: keyof DiagLogger,\n namespace: string,\n args: any\n): void {\n const logger = getGlobal('diag');\n // shortcut if logger not set\n if (!logger) {\n return;\n }\n\n args.unshift(namespace);\n return logger[funcName](...(args as Parameters<DiagLogFunction>));\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport type DiagLogFunction = (message: string, ...args: unknown[]) => void;\n\n/**\n * Defines an internal diagnostic logger interface which is used to log internal diagnostic\n * messages, you can set the default diagnostic logger via the {@link DiagAPI} setLogger function.\n * API provided implementations include :-\n * - a No-Op {@link createNoopDiagLogger}\n * - a {@link DiagLogLevel} filtering wrapper {@link createLogLevelDiagLogger}\n * - a general Console {@link DiagConsoleLogger} version.\n */\nexport interface DiagLogger {\n /** Log an error scenario that was not expected and caused the requested operation to fail. */\n error: DiagLogFunction;\n\n /**\n * Log a warning scenario to inform the developer of an issues that should be investigated.\n * The requested operation may or may not have succeeded or completed.\n */\n warn: DiagLogFunction;\n\n /**\n * Log a general informational message, this should not affect functionality.\n * This is also the default logging level so this should NOT be used for logging\n * debugging level information.\n */\n info: DiagLogFunction;\n\n /**\n * Log a general debug message that can be useful for identifying a failure.\n * Information logged at this level may include diagnostic details that would\n * help identify a failure scenario.\n * For example: Logging the order of execution of async operations.\n */\n debug: DiagLogFunction;\n\n /**\n * Log a detailed (verbose) trace level logging that can be used to identify failures\n * where debug level logging would be insufficient, this level of tracing can include\n * input and output parameters and as such may include PII information passing through\n * the API. As such it is recommended that this level of tracing should not be enabled\n * in a production environment.\n */\n verbose: DiagLogFunction;\n}\n\n/**\n * Defines the available internal logging levels for the diagnostic logger, the numeric values\n * of the levels are defined to match the original values from the initial LogLevel to avoid\n * compatibility/migration issues for any implementation that assume the numeric ordering.\n */\nexport enum DiagLogLevel {\n /** Diagnostic Logging level setting to disable all logging (except and forced logs) */\n NONE = 0,\n\n /** Identifies an error scenario */\n ERROR = 30,\n\n /** Identifies a warning scenario */\n WARN = 50,\n\n /** General informational log message */\n INFO = 60,\n\n /** General debug log message */\n DEBUG = 70,\n\n /**\n * Detailed trace level logging should only be used for development, should only be set\n * in a development environment.\n */\n VERBOSE = 80,\n\n /** Used to set the logging level to include all logging */\n ALL = 9999,\n}\n\n/**\n * Defines options for ComponentLogger\n */\nexport interface ComponentLoggerOptions {\n namespace: string;\n}\n\nexport interface DiagLoggerOptions {\n /**\n * The {@link DiagLogLevel} used to filter logs sent to the logger.\n *\n * @defaultValue DiagLogLevel.INFO\n */\n logLevel?: DiagLogLevel;\n\n /**\n * Setting this value to `true` will suppress the warning message normally emitted when registering a logger when another logger is already registered.\n */\n suppressOverrideMessage?: boolean;\n}\n\nexport interface DiagLoggerApi {\n /**\n * Set the global DiagLogger and DiagLogLevel.\n * If a global diag logger is already set, this will override it.\n *\n * @param logger - The {@link DiagLogger} instance to set as the default logger.\n * @param options - A {@link DiagLoggerOptions} object. If not provided, default values will be set.\n * @returns `true` if the logger was successfully registered, else `false`\n */\n setLogger(logger: DiagLogger, options?: DiagLoggerOptions): boolean;\n\n /**\n *\n * @param logger - The {@link DiagLogger} instance to set as the default logger.\n * @param logLevel - The {@link DiagLogLevel} used to filter logs sent to the logger. If not provided it will default to {@link DiagLogLevel.INFO}.\n * @returns `true` if the logger was successfully registered, else `false`\n */\n setLogger(logger: DiagLogger, logLevel?: DiagLogLevel): boolean;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DiagLogFunction, DiagLogger, DiagLogLevel } from '../types';\n\nexport function createLogLevelDiagLogger(\n maxLevel: DiagLogLevel,\n logger: DiagLogger\n): DiagLogger {\n if (maxLevel < DiagLogLevel.NONE) {\n maxLevel = DiagLogLevel.NONE;\n } else if (maxLevel > DiagLogLevel.ALL) {\n maxLevel = DiagLogLevel.ALL;\n }\n\n // In case the logger is null or undefined\n logger = logger || {};\n\n function _filterFunc(\n funcName: keyof DiagLogger,\n theLevel: DiagLogLevel\n ): DiagLogFunction {\n const theFunc = logger[funcName];\n\n if (typeof theFunc === 'function' && maxLevel >= theLevel) {\n return theFunc.bind(logger);\n }\n return function () {};\n }\n\n return {\n error: _filterFunc('error', DiagLogLevel.ERROR),\n warn: _filterFunc('warn', DiagLogLevel.WARN),\n info: _filterFunc('info', DiagLogLevel.INFO),\n debug: _filterFunc('debug', DiagLogLevel.DEBUG),\n verbose: _filterFunc('verbose', DiagLogLevel.VERBOSE),\n };\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DiagComponentLogger } from '../diag/ComponentLogger';\nimport { createLogLevelDiagLogger } from '../diag/internal/logLevelLogger';\nimport {\n ComponentLoggerOptions,\n DiagLogFunction,\n DiagLogger,\n DiagLoggerApi,\n DiagLogLevel,\n} from '../diag/types';\nimport {\n getGlobal,\n registerGlobal,\n unregisterGlobal,\n} from '../internal/global-utils';\n\nconst API_NAME = 'diag';\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry internal\n * diagnostic API\n */\nexport class DiagAPI implements DiagLogger, DiagLoggerApi {\n private static _instance?: DiagAPI;\n\n /** Get the singleton instance of the DiagAPI API */\n public static instance(): DiagAPI {\n if (!this._instance) {\n this._instance = new DiagAPI();\n }\n\n return this._instance;\n }\n\n /**\n * Private internal constructor\n * @private\n */\n private constructor() {\n function _logProxy(funcName: keyof DiagLogger): DiagLogFunction {\n return function (...args) {\n const logger = getGlobal('diag');\n // shortcut if logger not set\n if (!logger) return;\n return logger[funcName](...args);\n };\n }\n\n // Using self local variable for minification purposes as 'this' cannot be minified\n const self = this;\n\n // DiagAPI specific functions\n\n const setLogger: DiagLoggerApi['setLogger'] = (\n logger,\n optionsOrLogLevel = { logLevel: DiagLogLevel.INFO }\n ) => {\n if (logger === self) {\n // There isn't much we can do here.\n // Logging to the console might break the user application.\n // Try to log to self. If a logger was previously registered it will receive the log.\n const err = new Error(\n 'Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation'\n );\n self.error(err.stack ?? err.message);\n return false;\n }\n\n if (typeof optionsOrLogLevel === 'number') {\n optionsOrLogLevel = {\n logLevel: optionsOrLogLevel,\n };\n }\n\n const oldLogger = getGlobal('diag');\n const newLogger = createLogLevelDiagLogger(\n optionsOrLogLevel.logLevel ?? DiagLogLevel.INFO,\n logger\n );\n // There already is an logger registered. We'll let it know before overwriting it.\n if (oldLogger && !optionsOrLogLevel.suppressOverrideMessage) {\n const stack = new Error().stack ?? '<failed to generate stacktrace>';\n oldLogger.warn(`Current logger will be overwritten from ${stack}`);\n newLogger.warn(\n `Current logger will overwrite one already registered from ${stack}`\n );\n }\n\n return registerGlobal('diag', newLogger, self, true);\n };\n\n self.setLogger = setLogger;\n\n self.disable = () => {\n unregisterGlobal(API_NAME, self);\n };\n\n self.createComponentLogger = (options: ComponentLoggerOptions) => {\n return new DiagComponentLogger(options);\n };\n\n self.verbose = _logProxy('verbose');\n self.debug = _logProxy('debug');\n self.info = _logProxy('info');\n self.warn = _logProxy('warn');\n self.error = _logProxy('error');\n }\n\n public setLogger!: DiagLoggerApi['setLogger'];\n /**\n *\n */\n public createComponentLogger!: (\n options: ComponentLoggerOptions\n ) => DiagLogger;\n\n // DiagLogger implementation\n public verbose!: DiagLogFunction;\n public debug!: DiagLogFunction;\n public info!: DiagLogFunction;\n public warn!: DiagLogFunction;\n public error!: DiagLogFunction;\n\n /**\n * Unregister the global logger and return to Noop\n */\n public disable!: () => void;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Context } from './types';\n\n/** Get a key to uniquely identify a context value */\nexport function createContextKey(description: string) {\n // The specification states that for the same input, multiple calls should\n // return different keys. Due to the nature of the JS dependency management\n // system, this creates problems where multiple versions of some package\n // could hold different keys for the same property.\n //\n // Therefore, we use Symbol.for which returns the same key for the same input.\n return Symbol.for(description);\n}\n\nclass BaseContext implements Context {\n private _currentContext!: Map<symbol, unknown>;\n\n /**\n * Construct a new context which inherits values from an optional parent context.\n *\n * @param parentContext a context from which to inherit values\n */\n constructor(parentContext?: Map<symbol, unknown>) {\n // for minification\n const self = this;\n\n self._currentContext = parentContext ? new Map(parentContext) : new Map();\n\n self.getValue = (key: symbol) => self._currentContext.get(key);\n\n self.setValue = (key: symbol, value: unknown): Context => {\n const context = new BaseContext(self._currentContext);\n context._currentContext.set(key, value);\n return context;\n };\n\n self.deleteValue = (key: symbol): Context => {\n const context = new BaseContext(self._currentContext);\n context._currentContext.delete(key);\n return context;\n };\n }\n\n /**\n * Get a value from the context.\n *\n * @param key key which identifies a context value\n */\n public getValue!: (key: symbol) => unknown;\n\n /**\n * Create a new context which inherits from this context and has\n * the given key set to the given value.\n *\n * @param key context key for which to set the value\n * @param value value to set for the given key\n */\n public setValue!: (key: symbol, value: unknown) => Context;\n\n /**\n * Return a new context which inherits from this context but does\n * not contain a value for the given key.\n *\n * @param key context key for which to clear a value\n */\n public deleteValue!: (key: symbol) => Context;\n}\n\n/** The root context is used as the default parent context when there is no active context */\nexport const ROOT_CONTEXT: Context = new BaseContext();\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Meter } from './Meter';\nimport {\n BatchObservableCallback,\n Counter,\n Gauge,\n Histogram,\n MetricAttributes,\n MetricOptions,\n Observable,\n ObservableCallback,\n ObservableCounter,\n ObservableGauge,\n ObservableUpDownCounter,\n UpDownCounter,\n} from './Metric';\n\n/**\n * NoopMeter is a noop implementation of the {@link Meter} interface. It reuses\n * constant NoopMetrics for all of its methods.\n */\nexport class NoopMeter implements Meter {\n constructor() {}\n\n /**\n * @see {@link Meter.createGauge}\n */\n createGauge(_name: string, _options?: MetricOptions): Gauge {\n return NOOP_GAUGE_METRIC;\n }\n\n /**\n * @see {@link Meter.createHistogram}\n */\n createHistogram(_name: string, _options?: MetricOptions): Histogram {\n return NOOP_HISTOGRAM_METRIC;\n }\n\n /**\n * @see {@link Meter.createCounter}\n */\n createCounter(_name: string, _options?: MetricOptions): Counter {\n return NOOP_COUNTER_METRIC;\n }\n\n /**\n * @see {@link Meter.createUpDownCounter}\n */\n createUpDownCounter(_name: string, _options?: MetricOptions): UpDownCounter {\n return NOOP_UP_DOWN_COUNTER_METRIC;\n }\n\n /**\n * @see {@link Meter.createObservableGauge}\n */\n createObservableGauge(\n _name: string,\n _options?: MetricOptions\n ): ObservableGauge {\n return NOOP_OBSERVABLE_GAUGE_METRIC;\n }\n\n /**\n * @see {@link Meter.createObservableCounter}\n */\n createObservableCounter(\n _name: string,\n _options?: MetricOptions\n ): ObservableCounter {\n return NOOP_OBSERVABLE_COUNTER_METRIC;\n }\n\n /**\n * @see {@link Meter.createObservableUpDownCounter}\n */\n createObservableUpDownCounter(\n _name: string,\n _options?: MetricOptions\n ): ObservableUpDownCounter {\n return NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC;\n }\n\n /**\n * @see {@link Meter.addBatchObservableCallback}\n */\n addBatchObservableCallback(\n _callback: BatchObservableCallback,\n _observables: Observable[]\n ): void {}\n\n /**\n * @see {@link Meter.removeBatchObservableCallback}\n */\n removeBatchObservableCallback(_callback: BatchObservableCallback): void {}\n}\n\nexport class NoopMetric {}\n\nexport class NoopCounterMetric extends NoopMetric implements Counter {\n add(_value: number, _attributes: MetricAttributes): void {}\n}\n\nexport class NoopUpDownCounterMetric\n extends NoopMetric\n implements UpDownCounter\n{\n add(_value: number, _attributes: MetricAttributes): void {}\n}\n\nexport class NoopGaugeMetric extends NoopMetric implements Gauge {\n record(_value: number, _attributes: MetricAttributes): void {}\n}\n\nexport class NoopHistogramMetric extends NoopMetric implements Histogram {\n record(_value: number, _attributes: MetricAttributes): void {}\n}\n\nexport class NoopObservableMetric {\n addCallback(_callback: ObservableCallback) {}\n\n removeCallback(_callback: ObservableCallback) {}\n}\n\nexport class NoopObservableCounterMetric\n extends NoopObservableMetric\n implements ObservableCounter {}\n\nexport class NoopObservableGaugeMetric\n extends NoopObservableMetric\n implements ObservableGauge {}\n\nexport class NoopObservableUpDownCounterMetric\n extends NoopObservableMetric\n implements ObservableUpDownCounter {}\n\nexport const NOOP_METER = new NoopMeter();\n\n// Synchronous instruments\nexport const NOOP_COUNTER_METRIC = new NoopCounterMetric();\nexport const NOOP_GAUGE_METRIC = new NoopGaugeMetric();\nexport const NOOP_HISTOGRAM_METRIC = new NoopHistogramMetric();\nexport const NOOP_UP_DOWN_COUNTER_METRIC = new NoopUpDownCounterMetric();\n\n// Asynchronous instruments\nexport const NOOP_OBSERVABLE_COUNTER_METRIC = new NoopObservableCounterMetric();\nexport const NOOP_OBSERVABLE_GAUGE_METRIC = new NoopObservableGaugeMetric();\nexport const NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC =\n new NoopObservableUpDownCounterMetric();\n\n/**\n * Create a no-op Meter\n */\nexport function createNoopMeter(): Meter {\n return NOOP_METER;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Attributes, AttributeValue } from '../common/Attributes';\nimport { Context } from '../context/types';\nimport { BatchObservableResult, ObservableResult } from './ObservableResult';\n\n/**\n * Advisory options influencing aggregation configuration parameters.\n * @experimental\n */\nexport interface MetricAdvice {\n /**\n * Hint the explicit bucket boundaries for SDK if the metric is been\n * aggregated with a HistogramAggregator.\n */\n explicitBucketBoundaries?: number[];\n}\n\n/**\n * Options needed for metric creation\n */\nexport interface MetricOptions {\n /**\n * The description of the Metric.\n * @default ''\n */\n description?: string;\n\n /**\n * The unit of the Metric values.\n * @default ''\n */\n unit?: string;\n\n /**\n * Indicates the type of the recorded value.\n * @default {@link ValueType.DOUBLE}\n */\n valueType?: ValueType;\n\n /**\n * The advice influencing aggregation configuration parameters.\n * @experimental\n */\n advice?: MetricAdvice;\n}\n\n/** The Type of value. It describes how the data is reported. */\nexport enum ValueType {\n INT,\n DOUBLE,\n}\n\n/**\n * Counter is the most common synchronous instrument. This instrument supports\n * an `Add(increment)` function for reporting a sum, and is restricted to\n * non-negative increments. The default aggregation is Sum, as for any additive\n * instrument.\n *\n * Example uses for Counter:\n * <ol>\n * <li> count the number of bytes received. </li>\n * <li> count the number of requests completed. </li>\n * <li> count the number of accounts created. </li>\n * <li> count the number of checkpoints run. </li>\n * <li> count the number of 5xx errors. </li>\n * <ol>\n */\nexport interface Counter<\n AttributesTypes extends MetricAttributes = MetricAttributes,\n> {\n /**\n * Increment value of counter by the input. Inputs must not be negative.\n */\n add(value: number, attributes?: AttributesTypes, context?: Context): void;\n}\n\nexport interface UpDownCounter<\n AttributesTypes extends MetricAttributes = MetricAttributes,\n> {\n /**\n * Increment value of counter by the input. Inputs may be negative.\n */\n add(value: number, attributes?: AttributesTypes, context?: Context): void;\n}\n\nexport interface Gauge<\n AttributesTypes extends MetricAttributes = MetricAttributes,\n> {\n /**\n * Records a measurement.\n */\n record(value: number, attributes?: AttributesTypes, context?: Context): void;\n}\n\nexport interface Histogram<\n AttributesTypes extends MetricAttributes = MetricAttributes,\n> {\n /**\n * Records a measurement. Value of the measurement must not be negative.\n */\n record(value: number, attributes?: AttributesTypes, context?: Context): void;\n}\n\n/**\n * @deprecated please use {@link Attributes}\n */\nexport type MetricAttributes = Attributes;\n\n/**\n * @deprecated please use {@link AttributeValue}\n */\nexport type MetricAttributeValue = AttributeValue;\n\n/**\n * The observable callback for Observable instruments.\n */\nexport type ObservableCallback<\n AttributesTypes extends MetricAttributes = MetricAttributes,\n> = (\n observableResult: ObservableResult<AttributesTypes>\n) => void | Promise<void>;\n\n/**\n * The observable callback for a batch of Observable instruments.\n */\nexport type BatchObservableCallback<\n AttributesTypes extends MetricAttributes = MetricAttributes,\n> = (\n observableResult: BatchObservableResult<AttributesTypes>\n) => void | Promise<void>;\n\nexport interface Observable<\n AttributesTypes extends MetricAttributes = MetricAttributes,\n> {\n /**\n * Sets up a function that will be called whenever a metric collection is initiated.\n *\n * If the function is already in the list of callbacks for this Observable, the function is not added a second time.\n */\n addCallback(callback: ObservableCallback<AttributesTypes>): void;\n\n /**\n * Removes a callback previously registered with {@link Observable.addCallback}.\n */\n removeCallback(callback: ObservableCallback<AttributesTypes>): void;\n}\n\nexport type ObservableCounter<\n AttributesTypes extends MetricAttributes = MetricAttributes,\n> = Observable<AttributesTypes>;\nexport type ObservableUpDownCounter<\n AttributesTypes extends MetricAttributes = MetricAttributes,\n> = Observable<AttributesTypes>;\nexport type ObservableGauge<\n AttributesTypes extends MetricAttributes = MetricAttributes,\n> = Observable<AttributesTypes>;\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ROOT_CONTEXT } from './context';\nimport * as types from './types';\n\nexport class NoopContextManager implements types.ContextManager {\n active(): types.Context {\n return ROOT_CONTEXT;\n }\n\n with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n _context: types.Context,\n fn: F,\n thisArg?: ThisParameterType<F>,\n ...args: A\n ): ReturnType<F> {\n return fn.call(thisArg, ...args);\n }\n\n bind<T>(_context: types.Context, target: T): T {\n return target;\n }\n\n enable(): this {\n return this;\n }\n\n disable(): this {\n return this;\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NoopContextManager } from '../context/NoopContextManager';\nimport { Context, ContextManager } from '../context/types';\nimport {\n getGlobal,\n registerGlobal,\n unregisterGlobal,\n} from '../internal/global-utils';\nimport { DiagAPI } from './diag';\n\nconst API_NAME = 'context';\nconst NOOP_CONTEXT_MANAGER = new NoopContextManager();\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Context API\n */\nexport class ContextAPI {\n private static _instance?: ContextAPI;\n\n /** Empty private constructor prevents end users from constructing a new instance of the API */\n private constructor() {}\n\n /** Get the singleton instance of the Context API */\n public static getInstance(): ContextAPI {\n if (!this._instance) {\n this._instance = new ContextAPI();\n }\n\n return this._instance;\n }\n\n /**\n * Set the current context manager.\n *\n * @returns true if the context manager was successfully registered, else false\n */\n public setGlobalContextManager(contextManager: ContextManager): boolean {\n return registerGlobal(API_NAME, contextManager, DiagAPI.instance());\n }\n\n /**\n * Get the currently active context\n */\n public active(): Context {\n return this._getContextManager().active();\n }\n\n /**\n * Execute a function with an active context\n *\n * @param context context to be active during function execution\n * @param fn function to execute in a context\n * @param thisArg optional receiver to be used for calling fn\n * @param args optional arguments forwarded to fn\n */\n public with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n context: Context,\n fn: F,\n thisArg?: ThisParameterType<F>,\n ...args: A\n ): ReturnType<F> {\n return this._getContextManager().with(context, fn, thisArg, ...args);\n }\n\n /**\n * Bind a context to a target function or event emitter\n *\n * @param context context to bind to the event emitter or function. Defaults to the currently active context\n * @param target function or event emitter to bind\n */\n public bind<T>(context: Context, target: T): T {\n return this._getContextManager().bind(context, target);\n }\n\n private _getContextManager(): ContextManager {\n return getGlobal(API_NAME) || NOOP_CONTEXT_MANAGER;\n }\n\n /** Disable and remove the global context manager */\n public disable() {\n this._getContextManager().disable();\n unregisterGlobal(API_NAME, DiagAPI.instance());\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport enum TraceFlags {\n /** Represents no flag set. */\n NONE = 0x0,\n /** Bit to represent whether trace is sampled in trace flags. */\n SAMPLED = 0x1 << 0,\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SpanContext } from './span_context';\nimport { TraceFlags } from './trace_flags';\n\nexport const INVALID_SPANID = '0000000000000000';\nexport const INVALID_TRACEID = '00000000000000000000000000000000';\nexport const INVALID_SPAN_CONTEXT: SpanContext = {\n traceId: INVALID_TRACEID,\n spanId: INVALID_SPANID,\n traceFlags: TraceFlags.NONE,\n};\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Exception } from '../common/Exception';\nimport { TimeInput } from '../common/Time';\nimport { SpanAttributes } from './attributes';\nimport { INVALID_SPAN_CONTEXT } from './invalid-span-constants';\nimport { Span } from './span';\nimport { SpanContext } from './span_context';\nimport { SpanStatus } from './status';\nimport { Link } from './link';\n\n/**\n * The NonRecordingSpan is the default {@link Span} that is used when no Span\n * implementation is available. All operations are no-op including context\n * propagation.\n */\nexport class NonRecordingSpan implements Span {\n constructor(\n private readonly _spanContext: SpanContext = INVALID_SPAN_CONTEXT\n ) {}\n\n // Returns a SpanContext.\n spanContext(): SpanContext {\n return this._spanContext;\n }\n\n // By default does nothing\n setAttribute(_key: string, _value: unknown): this {\n return this;\n }\n\n // By default does nothing\n setAttributes(_attributes: SpanAttributes): this {\n return this;\n }\n\n // By default does nothing\n addEvent(_name: string, _attributes?: SpanAttributes): this {\n return this;\n }\n\n addLink(_link: Link): this {\n return this;\n }\n\n addLinks(_links: Link[]): this {\n return this;\n }\n\n // By default does nothing\n setStatus(_status: SpanStatus): this {\n return this;\n }\n\n // By default does nothing\n updateName(_name: string): this {\n return this;\n }\n\n // By default does nothing\n end(_endTime?: TimeInput): void {}\n\n // isRecording always returns false for NonRecordingSpan.\n isRecording(): boolean {\n return false;\n }\n\n // By default does nothing\n recordException(_exception: Exception, _time?: TimeInput): void {}\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createContextKey } from '../context/context';\nimport { Context } from '../context/types';\nimport { Span } from './span';\nimport { SpanContext } from './span_context';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { ContextAPI } from '../api/context';\n\n/**\n * span key\n */\nconst SPAN_KEY = createContextKey('OpenTelemetry Context Key SPAN');\n\n/**\n * Return the span if one exists\n *\n * @param context context to get span from\n */\nexport function getSpan(context: Context): Span | undefined {\n return (context.getValue(SPAN_KEY) as Span) || undefined;\n}\n\n/**\n * Gets the span from the current context, if one exists.\n */\nexport function getActiveSpan(): Span | undefined {\n return getSpan(ContextAPI.getInstance().active());\n}\n\n/**\n * Set the span on a context\n *\n * @param context context to use as parent\n * @param span span to set active\n */\nexport function setSpan(context: Context, span: Span): Context {\n return context.setValue(SPAN_KEY, span);\n}\n\n/**\n * Remove current span stored in the context\n *\n * @param context context to delete span from\n */\nexport function deleteSpan(context: Context): Context {\n return context.deleteValue(SPAN_KEY);\n}\n\n/**\n * Wrap span context in a NoopSpan and set as span in a new\n * context\n *\n * @param context context to set active span on\n * @param spanContext span context to be wrapped\n */\nexport function setSpanContext(\n context: Context,\n spanContext: SpanContext\n): Context {\n return setSpan(context, new NonRecordingSpan(spanContext));\n}\n\n/**\n * Get the span context of the span if it exists.\n *\n * @param context context to get values from\n */\nexport function getSpanContext(context: Context): SpanContext | undefined {\n return getSpan(context)?.spanContext();\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { INVALID_SPANID, INVALID_TRACEID } from './invalid-span-constants';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { Span } from './span';\nimport { SpanContext } from './span_context';\n\nconst VALID_TRACEID_REGEX = /^([0-9a-f]{32})$/i;\nconst VALID_SPANID_REGEX = /^[0-9a-f]{16}$/i;\n\nexport function isValidTraceId(traceId: string): boolean {\n return VALID_TRACEID_REGEX.test(traceId) && traceId !== INVALID_TRACEID;\n}\n\nexport function isValidSpanId(spanId: string): boolean {\n return VALID_SPANID_REGEX.test(spanId) && spanId !== INVALID_SPANID;\n}\n\n/**\n * Returns true if this {@link SpanContext} is valid.\n * @return true if this {@link SpanContext} is valid.\n */\nexport function isSpanContextValid(spanContext: SpanContext): boolean {\n return (\n isValidTraceId(spanContext.traceId) && isValidSpanId(spanContext.spanId)\n );\n}\n\n/**\n * Wrap the given {@link SpanContext} in a new non-recording {@link Span}\n *\n * @param spanContext span context to be wrapped\n * @returns a new non-recording {@link Span} with the provided context\n */\nexport function wrapSpanContext(spanContext: SpanContext): Span {\n return new NonRecordingSpan(spanContext);\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ContextAPI } from '../api/context';\nimport { Context } from '../context/types';\nimport { getSpanContext, setSpan } from '../trace/context-utils';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { Span } from './span';\nimport { isSpanContextValid } from './spancontext-utils';\nimport { SpanOptions } from './SpanOptions';\nimport { SpanContext } from './span_context';\nimport { Tracer } from './tracer';\n\nconst contextApi = ContextAPI.getInstance();\n\n/**\n * No-op implementations of {@link Tracer}.\n */\nexport class NoopTracer implements Tracer {\n // startSpan starts a noop span.\n startSpan(\n name: string,\n options?: SpanOptions,\n context = contextApi.active()\n ): Span {\n const root = Boolean(options?.root);\n if (root) {\n return new NonRecordingSpan();\n }\n\n const parentFromContext = context && getSpanContext(context);\n\n if (\n isSpanContext(parentFromContext) &&\n isSpanContextValid(parentFromContext)\n ) {\n return new NonRecordingSpan(parentFromContext);\n } else {\n return new NonRecordingSpan();\n }\n }\n\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n fn: F\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n opts: SpanOptions | undefined,\n fn: F\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n opts: SpanOptions | undefined,\n ctx: Context | undefined,\n fn: F\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n name: string,\n arg2?: F | SpanOptions,\n arg3?: F | Context,\n arg4?: F\n ): ReturnType<F> | undefined {\n let opts: SpanOptions | undefined;\n let ctx: Context | undefined;\n let fn: F;\n\n if (arguments.length < 2) {\n return;\n } else if (arguments.length === 2) {\n fn = arg2 as F;\n } else if (arguments.length === 3) {\n opts = arg2 as SpanOptions | undefined;\n fn = arg3 as F;\n } else {\n opts = arg2 as SpanOptions | undefined;\n ctx = arg3 as Context | undefined;\n fn = arg4 as F;\n }\n\n const parentContext = ctx ?? contextApi.active();\n const span = this.startSpan(name, opts, parentContext);\n const contextWithSpanSet = setSpan(parentContext, span);\n\n return contextApi.with(contextWithSpanSet, fn, undefined, span);\n }\n}\n\nfunction isSpanContext(spanContext: any): spanContext is SpanContext {\n return (\n typeof spanContext === 'object' &&\n typeof spanContext['spanId'] === 'string' &&\n typeof spanContext['traceId'] === 'string' &&\n typeof spanContext['traceFlags'] === 'number'\n );\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Context } from '../context/types';\nimport { NoopTracer } from './NoopTracer';\nimport { Span } from './span';\nimport { SpanOptions } from './SpanOptions';\nimport { Tracer } from './tracer';\nimport { TracerOptions } from './tracer_options';\n\nconst NOOP_TRACER = new NoopTracer();\n\n/**\n * Proxy tracer provided by the proxy tracer provider\n */\nexport class ProxyTracer implements Tracer {\n // When a real implementation is provided, this will be it\n private _delegate?: Tracer;\n\n constructor(\n private _provider: TracerDelegator,\n public readonly name: string,\n public readonly version?: string,\n public readonly options?: TracerOptions\n ) {}\n\n startSpan(name: string, options?: SpanOptions, context?: Context): Span {\n return this._getTracer().startSpan(name, options, context);\n }\n\n startActiveSpan<F extends (span: Span) => unknown>(\n _name: string,\n _options: F | SpanOptions,\n _context?: F | Context,\n _fn?: F\n ): ReturnType<F> {\n const tracer = this._getTracer();\n return Reflect.apply(tracer.startActiveSpan, tracer, arguments);\n }\n\n /**\n * Try to get a tracer from the proxy tracer provider.\n * If the proxy tracer provider has no delegate, return a noop tracer.\n */\n private _getTracer() {\n if (this._delegate) {\n return this._delegate;\n }\n\n const tracer = this._provider.getDelegateTracer(\n this.name,\n this.version,\n this.options\n );\n\n if (!tracer) {\n return NOOP_TRACER;\n }\n\n this._delegate = tracer;\n return this._delegate;\n }\n}\n\nexport interface TracerDelegator {\n getDelegateTracer(\n name: string,\n version?: string,\n options?: TracerOptions\n ): Tracer | undefined;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NoopTracer } from './NoopTracer';\nimport { Tracer } from './tracer';\nimport { TracerOptions } from './tracer_options';\nimport { TracerProvider } from './tracer_provider';\n\n/**\n * An implementation of the {@link TracerProvider} which returns an impotent\n * Tracer for all calls to `getTracer`.\n *\n * All operations are no-op.\n */\nexport class NoopTracerProvider implements TracerProvider {\n getTracer(\n _name?: string,\n _version?: string,\n _options?: TracerOptions\n ): Tracer {\n return new NoopTracer();\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Tracer } from './tracer';\nimport { TracerProvider } from './tracer_provider';\nimport { ProxyTracer } from './ProxyTracer';\nimport { NoopTracerProvider } from './NoopTracerProvider';\nimport { TracerOptions } from './tracer_options';\n\nconst NOOP_TRACER_PROVIDER = new NoopTracerProvider();\n\n/**\n * Tracer provider which provides {@link ProxyTracer}s.\n *\n * Before a delegate is set, tracers provided are NoOp.\n * When a delegate is set, traces are provided from the delegate.\n * When a delegate is set after tracers have already been provided,\n * all tracers already provided will use the provided delegate implementation.\n */\nexport class ProxyTracerProvider implements TracerProvider {\n private _delegate?: TracerProvider;\n\n /**\n * Get a {@link ProxyTracer}\n */\n getTracer(name: string, version?: string, options?: TracerOptions): Tracer {\n return (\n this.getDelegateTracer(name, version, options) ??\n new ProxyTracer(this, name, version, options)\n );\n }\n\n getDelegate(): TracerProvider {\n return this._delegate ?? NOOP_TRACER_PROVIDER;\n }\n\n /**\n * Set the delegate tracer provider\n */\n setDelegate(delegate: TracerProvider) {\n this._delegate = delegate;\n }\n\n getDelegateTracer(\n name: string,\n version?: string,\n options?: TracerOptions\n ): Tracer | undefined {\n return this._delegate?.getTracer(name, version, options);\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport enum SpanKind {\n /** Default value. Indicates that the span is used internally. */\n INTERNAL = 0,\n\n /**\n * Indicates that the span covers server-side handling of an RPC or other\n * remote request.\n */\n SERVER = 1,\n\n /**\n * Indicates that the span covers the client-side wrapper around an RPC or\n * other remote request.\n */\n CLIENT = 2,\n\n /**\n * Indicates that the span describes producer sending a message to a\n * broker. Unlike client and server, there is no direct critical path latency\n * relationship between producer and consumer spans.\n */\n PRODUCER = 3,\n\n /**\n * Indicates that the span describes consumer receiving a message from a\n * broker. Unlike client and server, there is no direct critical path latency\n * relationship between producer and consumer spans.\n */\n CONSUMER = 4,\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport interface SpanStatus {\n /** The status code of this message. */\n code: SpanStatusCode;\n /** A developer-facing error message. */\n message?: string;\n}\n\n/**\n * An enumeration of status codes.\n */\nexport enum SpanStatusCode {\n /**\n * The default status.\n */\n UNSET = 0,\n /**\n * The operation has been validated by an Application developer or\n * Operator to have completed successfully.\n */\n OK = 1,\n /**\n * The operation contains an error.\n */\n ERROR = 2,\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Meter, MeterOptions } from './Meter';\nimport { MeterProvider } from './MeterProvider';\nimport { NOOP_METER } from './NoopMeter';\n\n/**\n * An implementation of the {@link MeterProvider} which returns an impotent Meter\n * for all calls to `getMeter`\n */\nexport class NoopMeterProvider implements MeterProvider {\n getMeter(_name: string, _version?: string, _options?: MeterOptions): Meter {\n return NOOP_METER;\n }\n}\n\nexport const NOOP_METER_PROVIDER = new NoopMeterProvider();\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Meter, MeterOptions } from '../metrics/Meter';\nimport { MeterProvider } from '../metrics/MeterProvider';\nimport { NOOP_METER_PROVIDER } from '../metrics/NoopMeterProvider';\nimport {\n getGlobal,\n registerGlobal,\n unregisterGlobal,\n} from '../internal/global-utils';\nimport { DiagAPI } from './diag';\n\nconst API_NAME = 'metrics';\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Metrics API\n */\nexport class MetricsAPI {\n private static _instance?: MetricsAPI;\n\n /** Empty private constructor prevents end users from constructing a new instance of the API */\n private constructor() {}\n\n /** Get the singleton instance of the Metrics API */\n public static getInstance(): MetricsAPI {\n if (!this._instance) {\n this._instance = new MetricsAPI();\n }\n\n return this._instance;\n }\n\n /**\n * Set the current global meter provider.\n * Returns true if the meter provider was successfully registered, else false.\n */\n public setGlobalMeterProvider(provider: MeterProvider): boolean {\n return registerGlobal(API_NAME, provider, DiagAPI.instance());\n }\n\n /**\n * Returns the global meter provider.\n */\n public getMeterProvider(): MeterProvider {\n return getGlobal(API_NAME) || NOOP_METER_PROVIDER;\n }\n\n /**\n * Returns a meter from the global meter provider.\n */\n public getMeter(\n name: string,\n version?: string,\n options?: MeterOptions\n ): Meter {\n return this.getMeterProvider().getMeter(name, version, options);\n }\n\n /** Remove the global meter provider */\n public disable(): void {\n unregisterGlobal(API_NAME, DiagAPI.instance());\n }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { MetricsAPI } from './api/metrics';\n/** Entrypoint for metrics API */\nexport const metrics = MetricsAPI.getInstance();\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n getGlobal,\n registerGlobal,\n unregisterGlobal,\n} from '../internal/global-utils';\nimport { ProxyTracerProvider } from '../trace/ProxyTracerProvider';\nimport {\n isSpanContextValid,\n wrapSpanContext,\n} from '../trace/spancontext-utils';\nimport { Tracer } from '../trace/tracer';\nimport { TracerProvider } from '../trace/tracer_provider';\nimport {\n deleteSpan,\n getActiveSpan,\n getSpan,\n getSpanContext,\n setSpan,\n setSpanContext,\n} from '../trace/context-utils';\nimport { DiagAPI } from './diag';\n\nconst API_NAME = 'trace';\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Tracing API\n */\nexport class TraceAPI {\n private static _instance?: TraceAPI;\n\n private _proxyTracerProvider = new ProxyTracerProvider();\n\n /** Empty private constructor prevents end users from constructing a new instance of the API */\n private constructor() {}\n\n /** Get the singleton instance of the Trace API */\n public static getInstance(): TraceAPI {\n if (!this._instance) {\n this._instance = new TraceAPI();\n }\n\n return this._instance;\n }\n\n /**\n * Set the current global tracer.\n *\n * @returns true if the tracer provider was successfully registered, else false\n */\n public setGlobalTracerProvider(provider: TracerProvider): boolean {\n const success = registerGlobal(\n API_NAME,\n this._proxyTracerProvider,\n DiagAPI.instance()\n );\n if (success) {\n this._proxyTracerProvider.setDelegate(provider);\n }\n return success;\n }\n\n /**\n * Returns the global tracer provider.\n */\n public getTracerProvider(): TracerProvider {\n return getGlobal(API_NAME) || this._proxyTracerProvider;\n }\n\n /**\n * Returns a tracer from the global tracer provider.\n */\n public getTracer(name: string, version?: string): Tracer {\n return this.getTracerProvider().getTracer(name, version);\n }\n\n /** Remove the global tracer provider */\n public disable() {\n unregisterGlobal(API_NAME, DiagAPI.instance());\n this._proxyTracerProvider = new ProxyTracerProvider();\n }\n\n public wrapSpanContext = wrapSpanContext;\n\n public isSpanContextValid = isSpanContextValid;\n\n public deleteSpan = deleteSpan;\n\n public getSpan = getSpan;\n\n public getActiveSpan = getActiveSpan;\n\n public getSpanContext = getSpanContext;\n\n public setSpan = setSpan;\n\n public setSpanContext = setSpanContext;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { TraceAPI } from './api/trace';\n/** Entrypoint for trace API */\nexport const trace = TraceAPI.getInstance();\n","import {\n Meter,\n type Span,\n type SpanOptions,\n SpanStatusCode,\n type Tracer,\n} from \"@opentelemetry/api\";\nimport { type Logger, SeverityNumber } from \"@opentelemetry/api-logs\";\nimport { flattenAttributes } from \"@trigger.dev/core/v3/utils/flattenAttributes\";\n\nexport * from \"@opentelemetry/semantic-conventions\";\n\nexport type {\n Tracer,\n Attributes,\n Meter,\n Counter,\n UpDownCounter,\n ObservableGauge,\n ObservableCounter,\n ObservableUpDownCounter,\n MetricOptions,\n Gauge,\n Histogram,\n ObservableResult,\n} from \"@opentelemetry/api\";\n\nimport { trace, context, propagation, SpanKind, metrics, ValueType } from \"@opentelemetry/api\";\nexport {\n trace,\n context,\n propagation,\n type Span,\n SpanKind,\n type SpanOptions,\n SpanStatusCode,\n metrics,\n ValueType,\n};\n\nexport function getTracer(name: string): Tracer {\n return trace.getTracer(name);\n}\n\nexport function getMeter(name: string): Meter {\n return metrics.getMeter(name);\n}\n\nexport async function startSpan<T>(\n tracer: Tracer | undefined,\n name: string,\n fn: (span: Span) => Promise<T>,\n options?: SpanOptions\n): Promise<T> {\n tracer ??= getTracer(\"default\");\n\n return tracer.startActiveSpan(name, options ?? {}, async (span) => {\n try {\n return await fn(span);\n } catch (error) {\n if (error instanceof Error) {\n span.recordException(error);\n } else if (typeof error === \"string\") {\n span.recordException(new Error(error));\n } else {\n span.recordException(new Error(String(error)));\n }\n\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n\n throw error;\n } finally {\n span.end();\n }\n });\n}\n\nexport function recordSpanError(span: Span, error: Error) {\n span.recordException(error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n}\n\nexport async function emitDebugLog(\n logger: Logger,\n message: string,\n params: Record<string, unknown> = {}\n) {\n logger.emit({\n severityNumber: SeverityNumber.DEBUG,\n body: message,\n attributes: { ...flattenAttributes(params, \"params\") },\n });\n}\n\nexport async function emitInfoLog(\n logger: Logger,\n message: string,\n params: Record<string, unknown> = {}\n) {\n logger.emit({\n severityNumber: SeverityNumber.INFO,\n body: message,\n attributes: { ...flattenAttributes(params, \"params\") },\n });\n}\n\nexport async function emitErrorLog(\n logger: Logger,\n message: string,\n params: Record<string, unknown> = {}\n) {\n logger.emit({\n severityNumber: SeverityNumber.ERROR,\n body: message,\n attributes: { ...flattenAttributes(params, \"params\") },\n });\n}\n\nexport async function emitWarnLog(\n logger: Logger,\n message: string,\n params: Record<string, unknown> = {}\n) {\n logger.emit({\n severityNumber: SeverityNumber.WARN,\n body: message,\n attributes: { ...flattenAttributes(params, \"params\") },\n });\n}\n","/*\nHow it works:\n`this.#head` is an instance of `Node` which keeps track of its current value and nests another instance of `Node` that keeps the value that comes after it. When a value is provided to `.enqueue()`, the code needs to iterate through `this.#head`, going deeper and deeper to find the last value. However, iterating through every single item is slow. This problem is solved by saving a reference to the last value as `this.#tail` so that it can reference it to add a new value.\n*/\n\nclass Node {\n\tvalue;\n\tnext;\n\n\tconstructor(value) {\n\t\tthis.value = value;\n\t}\n}\n\nexport default class Queue {\n\t#head;\n\t#tail;\n\t#size;\n\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\n\tenqueue(value) {\n\t\tconst node = new Node(value);\n\n\t\tif (this.#head) {\n\t\t\tthis.#tail.next = node;\n\t\t\tthis.#tail = node;\n\t\t} else {\n\t\t\tthis.#head = node;\n\t\t\tthis.#tail = node;\n\t\t}\n\n\t\tthis.#size++;\n\t}\n\n\tdequeue() {\n\t\tconst current = this.#head;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#head = this.#head.next;\n\t\tthis.#size--;\n\t\treturn current.value;\n\t}\n\n\tpeek() {\n\t\tif (!this.#head) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.#head.value;\n\n\t\t// TODO: Node.js 18.\n\t\t// return this.#head?.value;\n\t}\n\n\tclear() {\n\t\tthis.#head = undefined;\n\t\tthis.#tail = undefined;\n\t\tthis.#size = 0;\n\t}\n\n\tget size() {\n\t\treturn this.#size;\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tlet current = this.#head;\n\n\t\twhile (current) {\n\t\t\tyield current.value;\n\t\t\tcurrent = current.next;\n\t\t}\n\t}\n}\n","import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tvalidateConcurrency(concurrency);\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst resumeNext = () => {\n\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\tqueue.dequeue()();\n\t\t\t// Since `pendingCount` has been decreased by one, increase `activeCount` by one.\n\t\t\tactiveCount++;\n\t\t}\n\t};\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tresumeNext();\n\t};\n\n\tconst run = async (function_, resolve, arguments_) => {\n\t\tconst result = (async () => function_(...arguments_))();\n\n\t\tresolve(result);\n\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\tnext();\n\t};\n\n\tconst enqueue = (function_, resolve, arguments_) => {\n\t\t// Queue `internalResolve` instead of the `run` function\n\t\t// to preserve asynchronous context.\n\t\tnew Promise(internalResolve => {\n\t\t\tqueue.enqueue(internalResolve);\n\t\t}).then(\n\t\t\trun.bind(undefined, function_, resolve, arguments_),\n\t\t);\n\n\t\t(async () => {\n\t\t\t// This function needs to wait until the next microtask before comparing\n\t\t\t// `activeCount` to `concurrency`, because `activeCount` is updated asynchronously\n\t\t\t// after the `internalResolve` function is dequeued and called. The comparison in the if-statement\n\t\t\t// needs to happen asynchronously as well to get an up-to-date value for `activeCount`.\n\t\t\tawait Promise.resolve();\n\n\t\t\tif (activeCount < concurrency) {\n\t\t\t\tresumeNext();\n\t\t\t}\n\t\t})();\n\t};\n\n\tconst generator = (function_, ...arguments_) => new Promise(resolve => {\n\t\tenqueue(function_, resolve, arguments_);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount,\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size,\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue() {\n\t\t\t\tqueue.clear();\n\t\t\t},\n\t\t},\n\t\tconcurrency: {\n\t\t\tget: () => concurrency,\n\n\t\t\tset(newConcurrency) {\n\t\t\t\tvalidateConcurrency(newConcurrency);\n\t\t\t\tconcurrency = newConcurrency;\n\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\t// eslint-disable-next-line no-unmodified-loop-condition\n\t\t\t\t\twhile (activeCount < concurrency && queue.size > 0) {\n\t\t\t\t\t\tresumeNext();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n\nexport function limitFunction(function_, option) {\n\tconst {concurrency} = option;\n\tconst limit = pLimit(concurrency);\n\n\treturn (...arguments_) => limit(() => function_(...arguments_));\n}\n\nfunction validateConcurrency(concurrency) {\n\tif (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n}\n","import { createRedisClient, Redis, type RedisOptions } from \"@internal/redis\";\nimport {\n Attributes,\n Histogram,\n Meter,\n metrics,\n ObservableResult,\n SpanKind,\n startSpan,\n trace,\n Tracer,\n ValueType,\n} from \"@internal/tracing\";\nimport { Logger } from \"@trigger.dev/core/logger\";\nimport { calculateNextRetryDelay } from \"@trigger.dev/core/v3\";\nimport { type RetryOptions } from \"@trigger.dev/core/v3/schemas\";\nimport { shutdownManager } from \"@trigger.dev/core/v3/serverOnly\";\nimport { nanoid } from \"nanoid\";\nimport pLimit from \"p-limit\";\nimport { z } from \"zod\";\nimport { AnyQueueItem, SimpleQueue } from \"./queue.js\";\nimport { parseExpression } from \"cron-parser\";\n\nexport const CronSchema = z.object({\n cron: z.string(),\n lastTimestamp: z.number().optional(),\n timestamp: z.number(),\n});\n\nexport type CronSchema = z.infer<typeof CronSchema>;\n\nexport type WorkerCatalog = {\n [key: string]: {\n schema: z.ZodFirstPartySchemaTypes | z.ZodDiscriminatedUnion<any, any>;\n visibilityTimeoutMs: number;\n retry?: RetryOptions;\n cron?: string;\n jitterInMs?: number;\n /** Defaults to true. If false, errors will not be logged. */\n logErrors?: boolean;\n };\n};\n\ntype WorkerCatalogItem = WorkerCatalog[keyof WorkerCatalog];\n\ntype QueueCatalogFromWorkerCatalog<Catalog extends WorkerCatalog> = {\n [K in keyof Catalog]: Catalog[K][\"schema\"];\n};\n\nexport type JobHandlerParams<Catalog extends WorkerCatalog, K extends keyof Catalog> = {\n id: string;\n payload: z.infer<Catalog[K][\"schema\"]>;\n visibilityTimeoutMs: number;\n attempt: number;\n deduplicationKey?: string;\n};\n\nexport type JobHandler<Catalog extends WorkerCatalog, K extends keyof Catalog> = (\n params: JobHandlerParams<Catalog, K>\n) => Promise<void>;\n\nexport type WorkerConcurrencyOptions = {\n workers?: number;\n tasksPerWorker?: number;\n limit?: number;\n};\n\ntype WorkerOptions<TCatalog extends WorkerCatalog> = {\n name: string;\n redisOptions: RedisOptions;\n catalog: TCatalog;\n jobs: {\n [K in keyof TCatalog]: JobHandler<TCatalog, K>;\n };\n concurrency?: WorkerConcurrencyOptions;\n pollIntervalMs?: number;\n immediatePollIntervalMs?: number;\n shutdownTimeoutMs?: number;\n logger?: Logger;\n tracer?: Tracer;\n meter?: Meter;\n};\n\n// This results in attempt 12 being a delay of 1 hour\nconst defaultRetrySettings = {\n maxAttempts: 12,\n factor: 2,\n //one second\n minTimeoutInMs: 1_000,\n //one hour\n maxTimeoutInMs: 3_600_000,\n randomize: true,\n};\n\nclass Worker<TCatalog extends WorkerCatalog> {\n private subscriber: Redis | undefined;\n private tracer: Tracer;\n private meter: Meter;\n\n private metrics: {\n enqueueDuration?: Histogram;\n dequeueDuration?: Histogram;\n jobDuration?: Histogram;\n ackDuration?: Histogram;\n redriveDuration?: Histogram;\n rescheduleDuration?: Histogram;\n } = {};\n\n queue: SimpleQueue<QueueCatalogFromWorkerCatalog<TCatalog>>;\n private jobs: WorkerOptions<TCatalog>[\"jobs\"];\n private logger: Logger;\n private workerLoops: Promise<void>[] = [];\n private isShuttingDown = false;\n private concurrency: Required<NonNullable<WorkerOptions<TCatalog>[\"concurrency\"]>>;\n private shutdownTimeoutMs: number;\n\n // The p-limit limiter to control overall concurrency.\n private limiters: Record<string, ReturnType<typeof pLimit>> = {};\n\n constructor(private options: WorkerOptions<TCatalog>) {\n this.logger = options.logger ?? new Logger(\"Worker\", \"debug\");\n this.tracer = options.tracer ?? trace.getTracer(options.name);\n this.meter = options.meter ?? metrics.getMeter(options.name);\n\n this.shutdownTimeoutMs = options.shutdownTimeoutMs ?? 60_000;\n\n const schema: QueueCatalogFromWorkerCatalog<TCatalog> = Object.fromEntries(\n Object.entries(this.options.catalog).map(([key, value]) => [key, value.schema])\n ) as QueueCatalogFromWorkerCatalog<TCatalog>;\n\n this.queue = new SimpleQueue({\n name: options.name,\n redisOptions: options.redisOptions,\n logger: this.logger,\n schema,\n });\n\n this.jobs = options.jobs;\n\n const { workers = 1, tasksPerWorker = 1, limit = 10 } = options.concurrency ?? {};\n this.concurrency = { workers, tasksPerWorker, limit };\n\n const masterQueueObservableGauge = this.meter.createObservableGauge(\"redis_worker.queue.size\", {\n description: \"The number of items in the queue\",\n unit: \"items\",\n valueType: ValueType.INT,\n });\n\n masterQueueObservableGauge.addCallback(this.#updateQueueSizeMetric.bind(this));\n\n const deadLetterQueueObservableGauge = this.meter.createObservableGauge(\n \"redis_worker.queue.dead_letter_size\",\n {\n description: \"The number of items in the dead letter queue\",\n unit: \"items\",\n valueType: ValueType.INT,\n }\n );\n\n deadLetterQueueObservableGauge.addCallback(this.#updateDeadLetterQueueSizeMetric.bind(this));\n\n const concurrencyLimitActiveObservableGauge = this.meter.createObservableGauge(\n \"redis_worker.concurrency.active\",\n {\n description: \"The number of active workers\",\n unit: \"workers\",\n valueType: ValueType.INT,\n }\n );\n\n concurrencyLimitActiveObservableGauge.addCallback(\n this.#updateConcurrencyLimitActiveMetric.bind(this)\n );\n\n const concurrencyLimitPendingObservableGauge = this.meter.createObservableGauge(\n \"redis_worker.concurrency.pending\",\n {\n description: \"The number of pending workers\",\n unit: \"workers\",\n valueType: ValueType.INT,\n }\n );\n\n concurrencyLimitPendingObservableGauge.addCallback(\n this.#updateConcurrencyLimitPendingMetric.bind(this)\n );\n }\n\n async #updateQueueSizeMetric(observableResult: ObservableResult<Attributes>) {\n const queueSize = await this.queue.size();\n\n observableResult.observe(queueSize, {\n worker_name: this.options.name,\n });\n }\n\n async #updateDeadLetterQueueSizeMetric(observableResult: ObservableResult<Attributes>) {\n const deadLetterQueueSize = await this.queue.sizeOfDeadLetterQueue();\n observableResult.observe(deadLetterQueueSize, {\n worker_name: this.options.name,\n });\n }\n\n async #updateConcurrencyLimitActiveMetric(observableResult: ObservableResult<Attributes>) {\n for (const [workerId, limiter] of Object.entries(this.limiters)) {\n observableResult.observe(limiter.activeCount, {\n worker_name: this.options.name,\n worker_id: workerId,\n });\n }\n }\n\n async #updateConcurrencyLimitPendingMetric(observableResult: ObservableResult<Attributes>) {\n for (const [workerId, limiter] of Object.entries(this.limiters)) {\n observableResult.observe(limiter.pendingCount, {\n worker_name: this.options.name,\n worker_id: workerId,\n });\n }\n }\n\n public start() {\n const { workers, tasksPerWorker } = this.concurrency;\n\n this.logger.info(\"Starting worker\", {\n workers,\n tasksPerWorker,\n concurrency: this.concurrency,\n });\n\n // Launch a number of \"worker loops\" on the main thread.\n for (let i = 0; i < workers; i++) {\n this.workerLoops.push(this.runWorkerLoop(`worker-${nanoid(12)}`, tasksPerWorker, i, workers));\n }\n\n this.setupShutdownHandlers();\n\n this.subscriber = createRedisClient(this.options.redisOptions, {\n onError: (error) => {\n this.logger.error(`RedisWorker subscriber redis client error:`, {\n error,\n keyPrefix: this.options.redisOptions.keyPrefix,\n });\n },\n });\n\n this.setupSubscriber();\n this.setupCron();\n\n return this;\n }\n\n /**\n * Enqueues a job for processing.\n * @param options - The enqueue options.\n * @param options.id - Optional unique identifier for the job. If not provided, one will be generated. It prevents duplication.\n * @param options.job - The job type from the worker catalog.\n * @param options.payload - The job payload that matches the schema defined in the catalog.\n * @param options.visibilityTimeoutMs - Optional visibility timeout in milliseconds. Defaults to value from catalog.\n * @param options.availableAt - Optional date when the job should become available for processing. Defaults to now.\n * @returns A promise that resolves when the job is enqueued.\n */\n enqueue<K extends keyof TCatalog>({\n id,\n job,\n payload,\n visibilityTimeoutMs,\n availableAt,\n cancellationKey,\n }: {\n id?: string;\n job: K;\n payload: z.infer<TCatalog[K][\"schema\"]>;\n visibilityTimeoutMs?: number;\n availableAt?: Date;\n cancellationKey?: string;\n }) {\n return startSpan(\n this.tracer,\n \"enqueue\",\n async (span) => {\n const timeout = visibilityTimeoutMs ?? this.options.catalog[job]?.visibilityTimeoutMs;\n\n if (!timeout) {\n throw new Error(`No visibility timeout found for job ${String(job)} with id ${id}`);\n }\n\n span.setAttribute(\"job_visibility_timeout_ms\", timeout);\n\n return this.withHistogram(\n this.metrics.enqueueDuration,\n this.queue.enqueue({\n id,\n job,\n item: payload,\n visibilityTimeoutMs: timeout,\n availableAt,\n cancellationKey,\n }),\n {\n job_type: String(job),\n has_available_at: availableAt ? \"true\" : \"false\",\n }\n );\n },\n {\n kind: SpanKind.PRODUCER,\n attributes: {\n job_type: String(job),\n job_id: id,\n },\n }\n );\n }\n\n /**\n * Enqueues a job for processing once. If the job is already in the queue, it will be ignored.\n * @param options - The enqueue options.\n * @param options.id - Required unique identifier for the job.\n * @param options.job - The job type from the worker catalog.\n * @param options.payload - The job payload that matches the schema defined in the catalog.\n * @param options.visibilityTimeoutMs - Optional visibility timeout in milliseconds. Defaults to value from catalog.\n * @param options.availableAt - Optional date when the job should become available for processing. Defaults to now.\n * @returns A promise that resolves when the job is enqueued.\n */\n enqueueOnce<K extends keyof TCatalog>({\n id,\n job,\n payload,\n visibilityTimeoutMs,\n availableAt,\n }: {\n id: string;\n job: K;\n payload: z.infer<TCatalog[K][\"schema\"]>;\n visibilityTimeoutMs?: number;\n availableAt?: Date;\n }) {\n return startSpan(\n this.tracer,\n \"enqueueOnce\",\n async (span) => {\n const timeout = visibilityTimeoutMs ?? this.options.catalog[job]?.visibilityTimeoutMs;\n\n if (!timeout) {\n throw new Error(`No visibility timeout found for job ${String(job)} with id ${id}`);\n }\n\n span.setAttribute(\"job_visibility_timeout_ms\", timeout);\n\n return this.withHistogram(\n this.metrics.enqueueDuration,\n this.queue.enqueueOnce({\n id,\n job,\n item: payload,\n visibilityTimeoutMs: timeout,\n availableAt,\n }),\n {\n job_type: String(job),\n has_available_at: availableAt ? \"true\" : \"false\",\n }\n );\n },\n {\n kind: SpanKind.PRODUCER,\n attributes: {\n job_type: String(job),\n job_id: id,\n },\n }\n );\n }\n\n /**\n * Reschedules an existing job to a new available date.\n * If the job isn't in the queue, it will be ignored.\n */\n reschedule(id: string, availableAt: Date) {\n return startSpan(\n this.tracer,\n \"reschedule\",\n async (span) => {\n return this.withHistogram(\n this.metrics.rescheduleDuration,\n this.queue.reschedule(id, availableAt)\n );\n },\n {\n kind: SpanKind.PRODUCER,\n attributes: {\n job_id: id,\n },\n }\n );\n }\n\n /**\n * Cancels a job before it's enqueued.\n * @param cancellationKey - The cancellation key to cancel.\n * @returns A promise that resolves when the job is cancelled.\n *\n * Any jobs enqueued with the same cancellation key will be not be enqueued.\n */\n cancel(cancellationKey: string) {\n return startSpan(this.tracer, \"cancel\", () => this.queue.cancel(cancellationKey));\n }\n\n ack(id: string) {\n return startSpan(\n this.tracer,\n \"ack\",\n () => {\n return this.withHistogram(this.metrics.ackDuration, this.queue.ack(id));\n },\n {\n attributes: {\n job_id: id,\n },\n }\n );\n }\n\n async getJob(id: string) {\n return this.queue.getJob(id);\n }\n\n /**\n * The main loop that each worker runs. It repeatedly polls for items,\n * processes them, and then waits before the next iteration.\n */\n private async runWorkerLoop(\n workerId: string,\n taskCount: number,\n workerIndex: number,\n totalWorkers: number\n ): Promise<void> {\n const limiter = pLimit(this.concurrency.limit);\n this.limiters[workerId] = limiter;\n\n const pollIntervalMs = this.options.pollIntervalMs ?? 1000;\n const immediatePollIntervalMs = this.options.immediatePollIntervalMs ?? 100;\n\n // Calculate the delay between starting each worker loop so that they don't all start at the same time.\n const delayBetweenWorkers = this.options.pollIntervalMs ?? 1000;\n const delay = delayBetweenWorkers * (totalWorkers - workerIndex);\n await Worker.delay(delay);\n\n this.logger.info(\"Starting worker loop\", {\n workerIndex,\n totalWorkers,\n delay,\n workerId,\n taskCount,\n pollIntervalMs,\n immediatePollIntervalMs,\n concurrencyOptions: this.concurrency,\n });\n\n while (!this.isShuttingDown) {\n // Check overall load. If at capacity, wait a bit before trying to dequeue more.\n if (limiter.activeCount + limiter.pendingCount >= this.concurrency.limit) {\n this.logger.debug(\"Worker at capacity, waiting\", {\n workerId,\n concurrencyOptions: this.concurrency,\n activeCount: limiter.activeCount,\n pendingCount: limiter.pendingCount,\n });\n\n await Worker.delay(pollIntervalMs);\n\n continue;\n }\n\n // If taskCount is 10, concurrency limit is 100, and there are 98 active workers, we should dequeue 2 items at most.\n // If taskCount is 10, concurrency limit is 100, and there are 12 active workers, we should dequeue 10 items at most.\n const $taskCount = Math.min(\n taskCount,\n this.concurrency.limit - limiter.activeCount - limiter.pendingCount\n );\n\n try {\n const items = await this.withHistogram(\n this.metrics.dequeueDuration,\n this.queue.dequeue($taskCount),\n {\n worker_id: workerId,\n task_count: $taskCount,\n }\n );\n\n if (items.length === 0) {\n this.logger.debug(\"No items to dequeue\", {\n workerId,\n concurrencyOptions: this.concurrency,\n activeCount: limiter.activeCount,\n pendingCount: limiter.pendingCount,\n });\n\n await Worker.delay(pollIntervalMs);\n continue;\n }\n\n this.logger.debug(\"Dequeued items\", {\n workerId,\n itemCount: items.length,\n concurrencyOptions: this.concurrency,\n activeCount: limiter.activeCount,\n pendingCount: limiter.pendingCount,\n });\n\n // Schedule each item using the limiter.\n for (const item of items) {\n limiter(() =>\n this.processItem(item as AnyQueueItem, items.length, workerId, limiter)\n ).catch((err) => {\n this.logger.error(\"Unhandled error in processItem:\", { error: err, workerId, item });\n });\n }\n } catch (error) {\n this.logger.error(\"Error dequeuing items:\", { name: this.options.name, error });\n await Worker.delay(pollIntervalMs);\n continue;\n }\n\n // Wait briefly before immediately polling again since we processed items\n await Worker.delay(immediatePollIntervalMs);\n }\n\n this.logger.info(\"Worker loop finished\", { workerId });\n }\n\n /**\n * Processes a single item.\n */\n private async processItem(\n { id, job, item, visibilityTimeoutMs, attempt, timestamp, deduplicationKey }: AnyQueueItem,\n batchSize: number,\n workerId: string,\n limiter: ReturnType<typeof pLimit>\n ): Promise<void> {\n const catalogItem = this.options.catalog[job as any];\n const handler = this.jobs[job as any];\n if (!handler) {\n this.logger.error(`Worker no handler found for job type: ${job}`);\n return;\n }\n\n if (!catalogItem) {\n this.logger.error(`Worker no catalog item found for job type: ${job}`);\n return;\n }\n\n await startSpan(\n this.tracer,\n \"processItem\",\n async () => {\n await this.withHistogram(\n this.metrics.jobDuration,\n handler({ id, payload: item, visibilityTimeoutMs, attempt, deduplicationKey }),\n {\n worker_id: workerId,\n batch_size: batchSize,\n job_type: job,\n attempt,\n }\n );\n\n // On success, acknowledge the item.\n await this.queue.ack(id, deduplicationKey);\n\n if (catalogItem.cron) {\n await this.rescheduleCronJob(job, catalogItem, item);\n }\n },\n {\n kind: SpanKind.CONSUMER,\n attributes: {\n job_id: id,\n job_type: job,\n attempt,\n job_timestamp: timestamp.getTime(),\n job_age_in_ms: Date.now() - timestamp.getTime(),\n worker_id: workerId,\n worker_limit_concurrency: limiter.concurrency,\n worker_limit_active: limiter.activeCount,\n worker_limit_pending: limiter.pendingCount,\n worker_name: this.options.name,\n batch_size: batchSize,\n },\n }\n ).catch(async (error) => {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n const shouldLogError = catalogItem.logErrors ?? true;\n\n const logAttributes = {\n name: this.options.name,\n id,\n job,\n item,\n visibilityTimeoutMs,\n error,\n errorMessage,\n };\n\n if (shouldLogError) {\n this.logger.error(`Worker error processing item`, logAttributes);\n } else {\n this.logger.info(`Worker failed to process item`, logAttributes);\n }\n\n // Attempt requeue logic.\n try {\n const newAttempt = attempt + 1;\n const retrySettings = {\n ...defaultRetrySettings,\n ...catalogItem?.retry,\n };\n const retryDelay = calculateNextRetryDelay(retrySettings, newAttempt);\n\n if (!retryDelay) {\n if (shouldLogError) {\n this.logger.error(`Worker item reached max attempts. Moving to DLQ.`, {\n ...logAttributes,\n attempt: newAttempt,\n });\n } else {\n this.logger.info(`Worker item reached max attempts. Moving to DLQ.`, {\n ...logAttributes,\n attempt: newAttempt,\n });\n }\n\n await this.queue.moveToDeadLetterQueue(id, errorMessage);\n\n if (catalogItem.cron) {\n await this.rescheduleCronJob(job, catalogItem, item);\n }\n\n return;\n }\n\n const retryDate = new Date(Date.now() + retryDelay);\n this.logger.info(`Worker requeuing failed item with delay`, {\n name: this.options.name,\n id,\n job,\n item,\n retryDate,\n retryDelay,\n visibilityTimeoutMs,\n attempt: newAttempt,\n });\n await this.queue.enqueue({\n id,\n job,\n item,\n availableAt: retryDate,\n attempt: newAttempt,\n visibilityTimeoutMs,\n });\n } catch (requeueError) {\n this.logger.error(\n `Worker failed to requeue item. It will be retried after the visibility timeout.`,\n {\n name: this.options.name,\n id,\n job,\n item,\n visibilityTimeoutMs,\n error: requeueError,\n }\n );\n }\n });\n }\n\n private async withHistogram<T>(\n histogram: Histogram | undefined,\n promise: Promise<T>,\n labels?: Record<string, string | number>\n ): Promise<T> {\n if (!histogram) {\n return promise;\n }\n\n const start = Date.now();\n try {\n return await promise;\n } finally {\n const duration = (Date.now() - start) / 1000; // Convert to seconds\n histogram.record(duration, { worker_name: this.options.name, ...labels });\n }\n }\n\n // A simple helper to delay for a given number of milliseconds.\n private static delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n private setupCron() {\n const cronJobs = Object.entries(this.options.catalog).filter(([_, value]) => value.cron);\n\n if (cronJobs.length === 0) {\n return;\n }\n\n this.logger.info(\"Setting up cron jobs\", {\n cronJobs: cronJobs.map(([job, value]) => ({\n job,\n cron: value.cron,\n jitterInMs: value.jitterInMs,\n })),\n });\n\n // For each cron job, we need to try and enqueue a job with the next timestamp of the cron job.\n const enqueuePromises = cronJobs.map(([job, value]) =>\n this.enqueueCronJob(value.cron!, job, value.jitterInMs)\n );\n\n Promise.allSettled(enqueuePromises).then((results) => {\n results.forEach((result) => {\n if (result.status === \"fulfilled\") {\n this.logger.info(\"Enqueued cron job\", { result: result.value });\n } else {\n this.logger.error(\"Failed to enqueue cron job\", { reason: result.reason });\n }\n });\n });\n }\n\n private async enqueueCronJob(cron: string, job: string, jitter?: number, lastTimestamp?: Date) {\n const scheduledAt = this.calculateNextScheduledAt(cron, lastTimestamp);\n const identifier = [job, this.timestampIdentifier(scheduledAt)].join(\":\");\n // Calculate the availableAt date by calculating a random number between -jitter/2 and jitter/2 and adding it to the scheduledAt\n const appliedJitter = typeof jitter === \"number\" ? Math.random() * jitter - jitter / 2 : 0;\n const availableAt = new Date(scheduledAt.getTime() + appliedJitter);\n\n const enqueued = await this.enqueueOnce({\n id: identifier,\n job,\n payload: {\n timestamp: scheduledAt.getTime(),\n lastTimestamp: lastTimestamp?.getTime(),\n cron,\n },\n availableAt,\n });\n\n this.logger.info(\"Enqueued cron job\", {\n identifier,\n cron,\n job,\n scheduledAt,\n enqueued,\n availableAt,\n appliedJitter,\n jitter,\n });\n\n return {\n identifier,\n cron,\n job,\n scheduledAt,\n enqueued,\n };\n }\n\n private async rescheduleCronJob(job: string, catalogItem: WorkerCatalogItem, item: CronSchema) {\n if (!catalogItem.cron) {\n return;\n }\n\n return this.enqueueCronJob(\n catalogItem.cron,\n job,\n catalogItem.jitterInMs,\n new Date(item.timestamp)\n );\n }\n\n private calculateNextScheduledAt(cron: string, lastTimestamp?: Date): Date {\n const scheduledAt = parseExpression(cron, {\n currentDate: lastTimestamp,\n })\n .next()\n .toDate();\n\n // If scheduledAt is in the past, we should just calculate the next one based on the current time\n if (scheduledAt < new Date()) {\n return this.calculateNextScheduledAt(cron);\n }\n\n return scheduledAt;\n }\n\n private timestampIdentifier(timestamp: Date) {\n const year = timestamp.getUTCFullYear();\n const month = timestamp.getUTCMonth();\n const day = timestamp.getUTCDate();\n const hour = timestamp.getUTCHours();\n const minute = timestamp.getUTCMinutes();\n const second = timestamp.getUTCSeconds();\n\n return `${year}-${month}-${day}-${hour}-${minute}-${second}`;\n }\n\n private setupSubscriber() {\n const channel = `${this.options.name}:redrive`;\n this.subscriber?.subscribe(channel, (err) => {\n if (err) {\n this.logger.error(`Failed to subscribe to ${channel}`, { error: err });\n } else {\n this.logger.debug(`Subscribed to ${channel}`);\n }\n });\n\n this.subscriber?.on(\"message\", this.handleRedriveMessage.bind(this));\n }\n\n private async handleRedriveMessage(channel: string, message: string) {\n try {\n const { id } = JSON.parse(message) as any;\n if (typeof id !== \"string\") {\n throw new Error(\"Invalid message format: id must be a string\");\n }\n await this.withHistogram(\n this.metrics.redriveDuration,\n this.queue.redriveFromDeadLetterQueue(id)\n );\n this.logger.log(`Redrived item ${id} from Dead Letter Queue`);\n } catch (error) {\n this.logger.error(\"Error processing redrive message\", { error, message });\n }\n }\n\n private setupShutdownHandlers() {\n shutdownManager.register(`redis-worker:${this.options.name}`, this.shutdown.bind(this));\n }\n\n private async shutdown(signal?: NodeJS.Signals) {\n if (this.isShuttingDown) {\n this.logger.log(\"Worker already shutting down\", { signal });\n return;\n }\n\n this.isShuttingDown = true;\n this.logger.log(\"Shutting down worker loops...\", { signal });\n\n // Wait for all worker loops to finish.\n await Promise.race([\n Promise.all(this.workerLoops),\n Worker.delay(this.shutdownTimeoutMs).then(() => {\n this.logger.error(\"Worker shutdown timed out\", {\n signal,\n shutdownTimeoutMs: this.shutdownTimeoutMs,\n });\n }),\n ]);\n\n await this.subscriber?.unsubscribe();\n await this.subscriber?.quit();\n await this.queue.close();\n this.logger.log(\"All workers and subscribers shut down.\", { signal });\n }\n\n public async stop() {\n shutdownManager.unregister(`redis-worker:${this.options.name}`);\n await this.shutdown();\n }\n}\n\nexport { Worker };\n","import { createRedisClient, type Redis, type RedisOptions } from \"@internal/redis\";\nimport type {\n ConcurrencyCheckResult,\n ConcurrencyGroupConfig,\n ConcurrencyState,\n FairQueueKeyProducer,\n QueueDescriptor,\n} from \"./types.js\";\n\nexport interface ConcurrencyManagerOptions {\n redis: RedisOptions;\n keys: FairQueueKeyProducer;\n groups: ConcurrencyGroupConfig[];\n}\n\n/**\n * ConcurrencyManager handles multi-level concurrency tracking and limiting.\n *\n * Features:\n * - Multiple concurrent concurrency groups (tenant, org, project, etc.)\n * - Atomic reserve/release operations using Lua scripts\n * - Efficient batch checking of all groups\n */\nexport class ConcurrencyManager {\n private redis: Redis;\n private keys: FairQueueKeyProducer;\n private groups: ConcurrencyGroupConfig[];\n private groupsByName: Map<string, ConcurrencyGroupConfig>;\n\n constructor(private options: ConcurrencyManagerOptions) {\n this.redis = createRedisClient(options.redis);\n this.keys = options.keys;\n this.groups = options.groups;\n this.groupsByName = new Map(options.groups.map((g) => [g.name, g]));\n\n this.#registerCommands();\n }\n\n // ============================================================================\n // Public Methods\n // ============================================================================\n\n /**\n * Check if a message can be processed given all concurrency constraints.\n * Checks all configured groups and returns the first one at capacity.\n */\n async canProcess(queue: QueueDescriptor): Promise<ConcurrencyCheckResult> {\n for (const group of this.groups) {\n const groupId = group.extractGroupId(queue);\n const isAtCapacity = await this.isAtCapacity(group.name, groupId);\n\n if (isAtCapacity) {\n const state = await this.getState(group.name, groupId);\n return {\n allowed: false,\n blockedBy: state,\n };\n }\n }\n\n return { allowed: true };\n }\n\n /**\n * Reserve concurrency slots for a message across all groups.\n * Atomic - either all groups are reserved or none.\n *\n * @returns true if reservation successful, false if any group is at capacity\n */\n async reserve(queue: QueueDescriptor, messageId: string): Promise<boolean> {\n // Build list of group keys and limits\n const groupData = await Promise.all(\n this.groups.map(async (group) => {\n const groupId = group.extractGroupId(queue);\n const limit = await group.getLimit(groupId);\n return {\n key: this.keys.concurrencyKey(group.name, groupId),\n limit: limit || group.defaultLimit,\n };\n })\n );\n\n // Use Lua script for atomic multi-group reservation\n // Pass keys as KEYS array so ioredis applies keyPrefix correctly\n const keys = groupData.map((g) => g.key);\n const limits = groupData.map((g) => g.limit.toString());\n\n // Args order: messageId, ...limits (keys are passed separately)\n const result = await this.redis.reserveConcurrency(keys.length, keys, messageId, ...limits);\n\n return result === 1;\n }\n\n /**\n * Release concurrency slots for a message across all groups.\n */\n async release(queue: QueueDescriptor, messageId: string): Promise<void> {\n const pipeline = this.redis.pipeline();\n\n for (const group of this.groups) {\n const groupId = group.extractGroupId(queue);\n const key = this.keys.concurrencyKey(group.name, groupId);\n pipeline.srem(key, messageId);\n }\n\n await pipeline.exec();\n }\n\n /**\n * Get current concurrency for a specific group.\n */\n async getCurrentConcurrency(groupName: string, groupId: string): Promise<number> {\n const key = this.keys.concurrencyKey(groupName, groupId);\n return await this.redis.scard(key);\n }\n\n /**\n * Get concurrency limit for a specific group.\n */\n async getConcurrencyLimit(groupName: string, groupId: string): Promise<number> {\n const group = this.groupsByName.get(groupName);\n if (!group) {\n throw new Error(`Unknown concurrency group: ${groupName}`);\n }\n return (await group.getLimit(groupId)) || group.defaultLimit;\n }\n\n /**\n * Check if a group is at capacity.\n */\n async isAtCapacity(groupName: string, groupId: string): Promise<boolean> {\n const [current, limit] = await Promise.all([\n this.getCurrentConcurrency(groupName, groupId),\n this.getConcurrencyLimit(groupName, groupId),\n ]);\n return current >= limit;\n }\n\n /**\n * Get full state for a group.\n */\n async getState(groupName: string, groupId: string): Promise<ConcurrencyState> {\n const [current, limit] = await Promise.all([\n this.getCurrentConcurrency(groupName, groupId),\n this.getConcurrencyLimit(groupName, groupId),\n ]);\n return {\n groupName,\n groupId,\n current,\n limit,\n };\n }\n\n /**\n * Get all active message IDs for a group.\n */\n async getActiveMessages(groupName: string, groupId: string): Promise<string[]> {\n const key = this.keys.concurrencyKey(groupName, groupId);\n return await this.redis.smembers(key);\n }\n\n /**\n * Force-clear concurrency for a group (use with caution).\n * Useful for cleanup after crashes.\n */\n async clearGroup(groupName: string, groupId: string): Promise<void> {\n const key = this.keys.concurrencyKey(groupName, groupId);\n await this.redis.del(key);\n }\n\n /**\n * Remove a specific message from concurrency tracking.\n * Useful for cleanup.\n */\n async removeMessage(messageId: string, queue: QueueDescriptor): Promise<void> {\n await this.release(queue, messageId);\n }\n\n /**\n * Get configured group names.\n */\n getGroupNames(): string[] {\n return this.groups.map((g) => g.name);\n }\n\n /**\n * Close the Redis connection.\n */\n async close(): Promise<void> {\n await this.redis.quit();\n }\n\n // ============================================================================\n // Private Methods\n // ============================================================================\n\n #registerCommands(): void {\n // Atomic multi-group reservation\n // KEYS: concurrency set keys for each group (keyPrefix is applied by ioredis)\n // ARGV[1]: messageId\n // ARGV[2..n]: limits for each group (in same order as KEYS)\n this.redis.defineCommand(\"reserveConcurrency\", {\n lua: `\nlocal numGroups = #KEYS\nlocal messageId = ARGV[1]\n\n-- Check all groups first\nfor i = 1, numGroups do\n local key = KEYS[i]\n local limit = tonumber(ARGV[1 + i]) -- Limits start at ARGV[2]\n local current = redis.call('SCARD', key)\n \n if current >= limit then\n return 0 -- At capacity\n end\nend\n\n-- All groups have capacity, add message to all\nfor i = 1, numGroups do\n local key = KEYS[i]\n redis.call('SADD', key, messageId)\nend\n\nreturn 1\n `,\n });\n }\n}\n\n// Extend Redis interface for custom commands\ndeclare module \"@internal/redis\" {\n interface RedisCommander<Context> {\n reserveConcurrency(\n numKeys: number,\n keys: string[],\n messageId: string,\n ...limits: string[]\n ): Promise<number>;\n }\n}\n","import { createRedisClient, type Redis, type RedisOptions } from \"@internal/redis\";\nimport { jumpHash } from \"@trigger.dev/core/v3/serverOnly\";\nimport type { FairQueueKeyProducer, QueueWithScore } from \"./types.js\";\n\nexport interface MasterQueueOptions {\n redis: RedisOptions;\n keys: FairQueueKeyProducer;\n shardCount: number;\n}\n\n/**\n * Master queue manages the top-level queue of queues.\n *\n * Features:\n * - Sharding for horizontal scaling\n * - Consistent hashing for queue-to-shard assignment\n * - Queues scored by oldest message timestamp\n */\nexport class MasterQueue {\n private redis: Redis;\n private keys: FairQueueKeyProducer;\n private shardCount: number;\n\n constructor(private options: MasterQueueOptions) {\n this.redis = createRedisClient(options.redis);\n this.keys = options.keys;\n this.shardCount = Math.max(1, options.shardCount);\n\n this.#registerCommands();\n }\n\n // ============================================================================\n // Public Methods\n // ============================================================================\n\n /**\n * Get the shard ID for a queue.\n * Uses consistent hashing based on queue ID.\n */\n getShardForQueue(queueId: string): number {\n return this.#hashToShard(queueId);\n }\n\n /**\n * Add a queue to its master queue shard.\n * Updates the score to the oldest message timestamp.\n *\n * @param queueId - The queue identifier\n * @param oldestMessageTimestamp - Timestamp of the oldest message in the queue\n */\n async addQueue(queueId: string, oldestMessageTimestamp: number): Promise<void> {\n const shardId = this.getShardForQueue(queueId);\n const masterKey = this.keys.masterQueueKey(shardId);\n\n // Just use plain ZADD - it will add if not exists, or update if exists\n // The score represents the oldest message timestamp\n // We rely on the enqueue Lua scripts to set the correct score\n await this.redis.zadd(masterKey, oldestMessageTimestamp, queueId);\n }\n\n /**\n * Update a queue's score in the master queue.\n * This is typically called after dequeuing to update to the new oldest message.\n *\n * @param queueId - The queue identifier\n * @param newOldestTimestamp - New timestamp of the oldest message\n */\n async updateQueueScore(queueId: string, newOldestTimestamp: number): Promise<void> {\n const shardId = this.getShardForQueue(queueId);\n const masterKey = this.keys.masterQueueKey(shardId);\n\n await this.redis.zadd(masterKey, newOldestTimestamp, queueId);\n }\n\n /**\n * Remove a queue from its master queue shard.\n * Called when a queue becomes empty.\n *\n * @param queueId - The queue identifier\n */\n async removeQueue(queueId: string): Promise<void> {\n const shardId = this.getShardForQueue(queueId);\n const masterKey = this.keys.masterQueueKey(shardId);\n\n await this.redis.zrem(masterKey, queueId);\n }\n\n /**\n * Get queues from a shard, ordered by oldest message (lowest score first).\n *\n * @param shardId - The shard to query\n * @param limit - Maximum number of queues to return (default: 1000)\n * @param maxScore - Maximum score (timestamp) to include (default: now)\n */\n async getQueuesFromShard(\n shardId: number,\n limit: number = 1000,\n maxScore?: number\n ): Promise<QueueWithScore[]> {\n const masterKey = this.keys.masterQueueKey(shardId);\n const score = maxScore ?? Date.now();\n\n // Get queues with scores up to maxScore\n const results = await this.redis.zrangebyscore(\n masterKey,\n \"-inf\",\n score,\n \"WITHSCORES\",\n \"LIMIT\",\n 0,\n limit\n );\n\n const queues: QueueWithScore[] = [];\n for (let i = 0; i < results.length; i += 2) {\n const queueId = results[i];\n const scoreStr = results[i + 1];\n if (queueId && scoreStr) {\n queues.push({\n queueId,\n score: parseFloat(scoreStr),\n tenantId: this.keys.extractTenantId(queueId),\n });\n }\n }\n\n return queues;\n }\n\n /**\n * Get the number of queues in a shard.\n */\n async getShardQueueCount(shardId: number): Promise<number> {\n const masterKey = this.keys.masterQueueKey(shardId);\n return await this.redis.zcard(masterKey);\n }\n\n /**\n * Get total queue count across all shards.\n */\n async getTotalQueueCount(): Promise<number> {\n const counts = await Promise.all(\n Array.from({ length: this.shardCount }, (_, i) => this.getShardQueueCount(i))\n );\n return counts.reduce((sum, count) => sum + count, 0);\n }\n\n /**\n * Atomically add a queue to master queue only if queue has messages.\n * Uses Lua script for atomicity.\n *\n * @param queueId - The queue identifier\n * @param queueKey - The actual queue sorted set key\n * @returns Whether the queue was added to the master queue\n */\n async addQueueIfNotEmpty(queueId: string, queueKey: string): Promise<boolean> {\n const shardId = this.getShardForQueue(queueId);\n const masterKey = this.keys.masterQueueKey(shardId);\n\n const result = await this.redis.addQueueIfNotEmpty(masterKey, queueKey, queueId);\n return result === 1;\n }\n\n /**\n * Atomically remove a queue from master queue only if queue is empty.\n * Uses Lua script for atomicity.\n *\n * @param queueId - The queue identifier\n * @param queueKey - The actual queue sorted set key\n * @returns Whether the queue was removed from the master queue\n */\n async removeQueueIfEmpty(queueId: string, queueKey: string): Promise<boolean> {\n const shardId = this.getShardForQueue(queueId);\n const masterKey = this.keys.masterQueueKey(shardId);\n\n const result = await this.redis.removeQueueIfEmpty(masterKey, queueKey, queueId);\n return result === 1;\n }\n\n /**\n * Close the Redis connection.\n */\n async close(): Promise<void> {\n await this.redis.quit();\n }\n\n // ============================================================================\n // Private Methods\n // ============================================================================\n\n /**\n * Map queue ID to shard using Jump Consistent Hash.\n * Provides better distribution than djb2 and minimal reshuffling when shard count changes.\n */\n #hashToShard(queueId: string): number {\n return jumpHash(queueId, this.shardCount);\n }\n\n #registerCommands(): void {\n // Atomically add queue to master if it has messages\n this.redis.defineCommand(\"addQueueIfNotEmpty\", {\n numberOfKeys: 2,\n lua: `\nlocal masterKey = KEYS[1]\nlocal queueKey = KEYS[2]\nlocal queueId = ARGV[1]\n\n-- Check if queue has any messages\nlocal count = redis.call('ZCARD', queueKey)\nif count == 0 then\n return 0\nend\n\n-- Get the oldest message timestamp (lowest score)\nlocal oldest = redis.call('ZRANGE', queueKey, 0, 0, 'WITHSCORES')\nif #oldest == 0 then\n return 0\nend\n\nlocal score = oldest[2]\n\n-- Add to master queue with the oldest message score\nredis.call('ZADD', masterKey, score, queueId)\nreturn 1\n `,\n });\n\n // Atomically remove queue from master if it's empty\n this.redis.defineCommand(\"removeQueueIfEmpty\", {\n numberOfKeys: 2,\n lua: `\nlocal masterKey = KEYS[1]\nlocal queueKey = KEYS[2]\nlocal queueId = ARGV[1]\n\n-- Check if queue is empty\nlocal count = redis.call('ZCARD', queueKey)\nif count > 0 then\n return 0\nend\n\n-- Remove from master queue\nredis.call('ZREM', masterKey, queueId)\nreturn 1\n `,\n });\n }\n}\n\n// Extend Redis interface for custom commands\ndeclare module \"@internal/redis\" {\n interface RedisCommander<Context> {\n addQueueIfNotEmpty(masterKey: string, queueKey: string, queueId: string): Promise<number>;\n\n removeQueueIfEmpty(masterKey: string, queueKey: string, queueId: string): Promise<number>;\n }\n}\n","import type {\n Attributes,\n Counter,\n Histogram,\n Meter,\n ObservableGauge,\n Span,\n SpanKind,\n SpanOptions,\n Tracer,\n} from \"@internal/tracing\";\n\n/**\n * Semantic attributes for fair queue messaging operations.\n */\nexport const FairQueueAttributes = {\n QUEUE_ID: \"fairqueue.queue_id\",\n TENANT_ID: \"fairqueue.tenant_id\",\n MESSAGE_ID: \"fairqueue.message_id\",\n SHARD_ID: \"fairqueue.shard_id\",\n WORKER_QUEUE: \"fairqueue.worker_queue\",\n CONSUMER_ID: \"fairqueue.consumer_id\",\n ATTEMPT: \"fairqueue.attempt\",\n CONCURRENCY_GROUP: \"fairqueue.concurrency_group\",\n MESSAGE_COUNT: \"fairqueue.message_count\",\n RESULT: \"fairqueue.result\",\n} as const;\n\n/**\n * Standard messaging semantic attributes.\n */\nexport const MessagingAttributes = {\n SYSTEM: \"messaging.system\",\n OPERATION: \"messaging.operation\",\n MESSAGE_ID: \"messaging.message_id\",\n DESTINATION_NAME: \"messaging.destination.name\",\n} as const;\n\n/**\n * FairQueue metrics collection.\n */\nexport interface FairQueueMetrics {\n // Counters\n messagesEnqueued: Counter;\n messagesCompleted: Counter;\n messagesFailed: Counter;\n messagesRetried: Counter;\n messagesToDLQ: Counter;\n\n // Histograms\n processingTime: Histogram;\n queueTime: Histogram;\n\n // Observable gauges (registered with callbacks)\n queueLength: ObservableGauge;\n masterQueueLength: ObservableGauge;\n inflightCount: ObservableGauge;\n dlqLength: ObservableGauge;\n}\n\n/**\n * Options for creating FairQueue telemetry.\n */\nexport interface TelemetryOptions {\n tracer?: Tracer;\n meter?: Meter;\n /** Custom name for metrics prefix */\n name?: string;\n}\n\n/**\n * Telemetry helper for FairQueue.\n *\n * Provides:\n * - Span creation with proper attributes\n * - Metric recording\n * - Context propagation helpers\n */\nexport class FairQueueTelemetry {\n private tracer?: Tracer;\n private meter?: Meter;\n private metrics?: FairQueueMetrics;\n private name: string;\n\n constructor(options: TelemetryOptions) {\n this.tracer = options.tracer;\n this.meter = options.meter;\n this.name = options.name ?? \"fairqueue\";\n\n if (this.meter) {\n this.#initializeMetrics();\n }\n }\n\n // ============================================================================\n // Tracing\n // ============================================================================\n\n /**\n * Create a traced span for an operation.\n * Returns the result of the function, or throws any error after recording it.\n */\n async trace<T>(\n name: string,\n fn: (span: Span) => Promise<T>,\n options?: {\n kind?: SpanKind;\n attributes?: Attributes;\n }\n ): Promise<T> {\n if (!this.tracer) {\n // No tracer, just execute the function with a no-op span\n return fn(noopSpan);\n }\n\n const spanOptions: SpanOptions = {\n kind: options?.kind,\n attributes: {\n [MessagingAttributes.SYSTEM]: this.name,\n ...options?.attributes,\n },\n };\n\n return this.tracer.startActiveSpan(`${this.name}.${name}`, spanOptions, async (span) => {\n try {\n const result = await fn(span);\n return result;\n } catch (error) {\n if (error instanceof Error) {\n span.recordException(error);\n } else {\n span.recordException(new Error(String(error)));\n }\n throw error;\n } finally {\n span.end();\n }\n });\n }\n\n /**\n * Synchronous version of trace.\n */\n traceSync<T>(\n name: string,\n fn: (span: Span) => T,\n options?: {\n kind?: SpanKind;\n attributes?: Attributes;\n }\n ): T {\n if (!this.tracer) {\n return fn(noopSpan);\n }\n\n const spanOptions: SpanOptions = {\n kind: options?.kind,\n attributes: {\n [MessagingAttributes.SYSTEM]: this.name,\n ...options?.attributes,\n },\n };\n\n return this.tracer.startActiveSpan(`${this.name}.${name}`, spanOptions, (span) => {\n try {\n return fn(span);\n } catch (error) {\n if (error instanceof Error) {\n span.recordException(error);\n } else {\n span.recordException(new Error(String(error)));\n }\n throw error;\n } finally {\n span.end();\n }\n });\n }\n\n // ============================================================================\n // Metrics\n // ============================================================================\n\n /**\n * Record a message enqueued.\n */\n recordEnqueue(attributes?: Attributes): void {\n this.metrics?.messagesEnqueued.add(1, attributes);\n }\n\n /**\n * Record a batch of messages enqueued.\n */\n recordEnqueueBatch(count: number, attributes?: Attributes): void {\n this.metrics?.messagesEnqueued.add(count, attributes);\n }\n\n /**\n * Record a message completed successfully.\n */\n recordComplete(attributes?: Attributes): void {\n this.metrics?.messagesCompleted.add(1, attributes);\n }\n\n /**\n * Record a message processing failure.\n */\n recordFailure(attributes?: Attributes): void {\n this.metrics?.messagesFailed.add(1, attributes);\n }\n\n /**\n * Record a message retry.\n */\n recordRetry(attributes?: Attributes): void {\n this.metrics?.messagesRetried.add(1, attributes);\n }\n\n /**\n * Record a message sent to DLQ.\n */\n recordDLQ(attributes?: Attributes): void {\n this.metrics?.messagesToDLQ.add(1, attributes);\n }\n\n /**\n * Record message processing time.\n *\n * @param durationMs - Processing duration in milliseconds\n */\n recordProcessingTime(durationMs: number, attributes?: Attributes): void {\n this.metrics?.processingTime.record(durationMs, attributes);\n }\n\n /**\n * Record time a message spent waiting in queue.\n *\n * @param durationMs - Queue wait time in milliseconds\n */\n recordQueueTime(durationMs: number, attributes?: Attributes): void {\n this.metrics?.queueTime.record(durationMs, attributes);\n }\n\n /**\n * Register observable gauge callbacks.\n * Call this after FairQueue is initialized to register the gauge callbacks.\n */\n registerGaugeCallbacks(callbacks: {\n getQueueLength?: (queueId: string) => Promise<number>;\n getMasterQueueLength?: (shardId: number) => Promise<number>;\n getInflightCount?: (shardId: number) => Promise<number>;\n getDLQLength?: (tenantId: string) => Promise<number>;\n shardCount?: number;\n observedQueues?: string[];\n observedTenants?: string[];\n }): void {\n if (!this.metrics) return;\n\n // Queue length gauge\n if (callbacks.getQueueLength && callbacks.observedQueues) {\n const getQueueLength = callbacks.getQueueLength;\n const queues = callbacks.observedQueues;\n\n this.metrics.queueLength.addCallback(async (observableResult) => {\n for (const queueId of queues) {\n const length = await getQueueLength(queueId);\n observableResult.observe(length, {\n [FairQueueAttributes.QUEUE_ID]: queueId,\n });\n }\n });\n }\n\n // Master queue length gauge\n if (callbacks.getMasterQueueLength && callbacks.shardCount) {\n const getMasterQueueLength = callbacks.getMasterQueueLength;\n const shardCount = callbacks.shardCount;\n\n this.metrics.masterQueueLength.addCallback(async (observableResult) => {\n for (let shardId = 0; shardId < shardCount; shardId++) {\n const length = await getMasterQueueLength(shardId);\n observableResult.observe(length, {\n [FairQueueAttributes.SHARD_ID]: shardId.toString(),\n });\n }\n });\n }\n\n // Inflight count gauge\n if (callbacks.getInflightCount && callbacks.shardCount) {\n const getInflightCount = callbacks.getInflightCount;\n const shardCount = callbacks.shardCount;\n\n this.metrics.inflightCount.addCallback(async (observableResult) => {\n for (let shardId = 0; shardId < shardCount; shardId++) {\n const count = await getInflightCount(shardId);\n observableResult.observe(count, {\n [FairQueueAttributes.SHARD_ID]: shardId.toString(),\n });\n }\n });\n }\n\n // DLQ length gauge\n if (callbacks.getDLQLength && callbacks.observedTenants) {\n const getDLQLength = callbacks.getDLQLength;\n const tenants = callbacks.observedTenants;\n\n this.metrics.dlqLength.addCallback(async (observableResult) => {\n for (const tenantId of tenants) {\n const length = await getDLQLength(tenantId);\n observableResult.observe(length, {\n [FairQueueAttributes.TENANT_ID]: tenantId,\n });\n }\n });\n }\n }\n\n // ============================================================================\n // Helper Methods\n // ============================================================================\n\n /**\n * Create standard attributes for a message operation.\n */\n messageAttributes(params: {\n queueId?: string;\n tenantId?: string;\n messageId?: string;\n attempt?: number;\n workerQueue?: string;\n consumerId?: string;\n }): Attributes {\n const attrs: Attributes = {};\n\n if (params.queueId) attrs[FairQueueAttributes.QUEUE_ID] = params.queueId;\n if (params.tenantId) attrs[FairQueueAttributes.TENANT_ID] = params.tenantId;\n if (params.messageId) attrs[FairQueueAttributes.MESSAGE_ID] = params.messageId;\n if (params.attempt !== undefined) attrs[FairQueueAttributes.ATTEMPT] = params.attempt;\n if (params.workerQueue) attrs[FairQueueAttributes.WORKER_QUEUE] = params.workerQueue;\n if (params.consumerId) attrs[FairQueueAttributes.CONSUMER_ID] = params.consumerId;\n\n return attrs;\n }\n\n /**\n * Check if telemetry is enabled.\n */\n get isEnabled(): boolean {\n return !!this.tracer || !!this.meter;\n }\n\n /**\n * Check if tracing is enabled.\n */\n get hasTracer(): boolean {\n return !!this.tracer;\n }\n\n /**\n * Check if metrics are enabled.\n */\n get hasMetrics(): boolean {\n return !!this.meter;\n }\n\n // ============================================================================\n // Private Methods\n // ============================================================================\n\n #initializeMetrics(): void {\n if (!this.meter) return;\n\n this.metrics = {\n // Counters\n messagesEnqueued: this.meter.createCounter(`${this.name}.messages.enqueued`, {\n description: \"Number of messages enqueued\",\n unit: \"messages\",\n }),\n messagesCompleted: this.meter.createCounter(`${this.name}.messages.completed`, {\n description: \"Number of messages completed successfully\",\n unit: \"messages\",\n }),\n messagesFailed: this.meter.createCounter(`${this.name}.messages.failed`, {\n description: \"Number of messages that failed processing\",\n unit: \"messages\",\n }),\n messagesRetried: this.meter.createCounter(`${this.name}.messages.retried`, {\n description: \"Number of message retries\",\n unit: \"messages\",\n }),\n messagesToDLQ: this.meter.createCounter(`${this.name}.messages.dlq`, {\n description: \"Number of messages sent to dead letter queue\",\n unit: \"messages\",\n }),\n\n // Histograms\n processingTime: this.meter.createHistogram(`${this.name}.message.processing_time`, {\n description: \"Message processing time\",\n unit: \"ms\",\n }),\n queueTime: this.meter.createHistogram(`${this.name}.message.queue_time`, {\n description: \"Time message spent waiting in queue\",\n unit: \"ms\",\n }),\n\n // Observable gauges\n queueLength: this.meter.createObservableGauge(`${this.name}.queue.length`, {\n description: \"Number of messages in a queue\",\n unit: \"messages\",\n }),\n masterQueueLength: this.meter.createObservableGauge(`${this.name}.master_queue.length`, {\n description: \"Number of queues in master queue shard\",\n unit: \"queues\",\n }),\n inflightCount: this.meter.createObservableGauge(`${this.name}.inflight.count`, {\n description: \"Number of messages currently being processed\",\n unit: \"messages\",\n }),\n dlqLength: this.meter.createObservableGauge(`${this.name}.dlq.length`, {\n description: \"Number of messages in dead letter queue\",\n unit: \"messages\",\n }),\n };\n }\n}\n\n/**\n * No-op span implementation for when telemetry is disabled.\n */\nconst noopSpan: Span = {\n spanContext: () => ({\n traceId: \"\",\n spanId: \"\",\n traceFlags: 0,\n }),\n setAttribute: () => noopSpan,\n setAttributes: () => noopSpan,\n addEvent: () => noopSpan,\n addLink: () => noopSpan,\n addLinks: () => noopSpan,\n setStatus: () => noopSpan,\n updateName: () => noopSpan,\n end: () => {},\n isRecording: () => false,\n recordException: () => {},\n};\n\n/**\n * No-op telemetry instance for when telemetry is disabled.\n */\nexport const noopTelemetry = new FairQueueTelemetry({});\n","import { createRedisClient, type Redis, type RedisOptions } from \"@internal/redis\";\nimport { jumpHash } from \"@trigger.dev/core/v3/serverOnly\";\nimport type { ClaimResult, FairQueueKeyProducer, InFlightMessage } from \"./types.js\";\n\nexport interface VisibilityManagerOptions {\n redis: RedisOptions;\n keys: FairQueueKeyProducer;\n shardCount: number;\n defaultTimeoutMs: number;\n logger?: {\n debug: (message: string, context?: Record<string, unknown>) => void;\n error: (message: string, context?: Record<string, unknown>) => void;\n };\n}\n\n/**\n * VisibilityManager handles message visibility timeouts for safe message processing.\n *\n * Features:\n * - Claim messages with visibility timeout\n * - Heartbeat to extend timeout\n * - Automatic reclaim of timed-out messages\n * - Per-shard in-flight tracking\n *\n * Data structures:\n * - In-flight sorted set: score = deadline timestamp, member = \"{messageId}:{queueId}\"\n * - In-flight data hash: field = messageId, value = JSON message data\n */\nexport class VisibilityManager {\n private redis: Redis;\n private keys: FairQueueKeyProducer;\n private shardCount: number;\n private defaultTimeoutMs: number;\n private logger: NonNullable<VisibilityManagerOptions[\"logger\"]>;\n\n constructor(private options: VisibilityManagerOptions) {\n this.redis = createRedisClient(options.redis);\n this.keys = options.keys;\n this.shardCount = options.shardCount;\n this.defaultTimeoutMs = options.defaultTimeoutMs;\n this.logger = options.logger ?? {\n debug: () => {},\n error: () => {},\n };\n\n this.#registerCommands();\n }\n\n // ============================================================================\n // Public Methods\n // ============================================================================\n\n /**\n * Claim a message for processing.\n * Moves the message from its queue to the in-flight set with a visibility timeout.\n *\n * @param queueId - The queue to claim from\n * @param queueKey - The Redis key for the queue sorted set\n * @param queueItemsKey - The Redis key for the queue items hash\n * @param consumerId - ID of the consumer claiming the message\n * @param timeoutMs - Visibility timeout in milliseconds\n * @returns Claim result with the message if successful\n */\n async claim<TPayload = unknown>(\n queueId: string,\n queueKey: string,\n queueItemsKey: string,\n consumerId: string,\n timeoutMs?: number\n ): Promise<ClaimResult<TPayload>> {\n const timeout = timeoutMs ?? this.defaultTimeoutMs;\n const deadline = Date.now() + timeout;\n const shardId = this.#getShardForQueue(queueId);\n const inflightKey = this.keys.inflightKey(shardId);\n const inflightDataKey = this.keys.inflightDataKey(shardId);\n\n // Use Lua script to atomically:\n // 1. Pop oldest message from queue\n // 2. Add to in-flight set with deadline\n // 3. Store message data\n const result = await this.redis.claimMessage(\n queueKey,\n queueItemsKey,\n inflightKey,\n inflightDataKey,\n queueId,\n consumerId,\n deadline.toString()\n );\n\n if (!result) {\n return { claimed: false };\n }\n\n const [messageId, payloadJson] = result;\n\n try {\n const payload = JSON.parse(payloadJson) as TPayload;\n const message: InFlightMessage<TPayload> = {\n messageId,\n queueId,\n payload,\n deadline,\n consumerId,\n };\n\n this.logger.debug(\"Message claimed\", {\n messageId,\n queueId,\n consumerId,\n deadline,\n });\n\n return { claimed: true, message };\n } catch (error) {\n // JSON parse error - message data is corrupted\n this.logger.error(\"Failed to parse claimed message\", {\n messageId,\n queueId,\n error: error instanceof Error ? error.message : String(error),\n });\n\n // Remove the corrupted message from in-flight\n await this.#removeFromInflight(shardId, messageId, queueId);\n\n return { claimed: false };\n }\n }\n\n /**\n * Extend the visibility timeout for a message (heartbeat).\n *\n * @param messageId - The message ID\n * @param queueId - The queue ID\n * @param extendMs - Additional milliseconds to add to the deadline\n * @returns true if the heartbeat was successful\n */\n async heartbeat(messageId: string, queueId: string, extendMs: number): Promise<boolean> {\n const shardId = this.#getShardForQueue(queueId);\n const inflightKey = this.keys.inflightKey(shardId);\n const member = this.#makeMember(messageId, queueId);\n const newDeadline = Date.now() + extendMs;\n\n // Use Lua script to atomically check existence and update score\n // ZADD XX returns 0 even on successful updates, so we use a custom command\n const result = await this.redis.heartbeatMessage(\n inflightKey,\n member,\n newDeadline.toString()\n );\n\n const success = result === 1;\n\n if (success) {\n this.logger.debug(\"Heartbeat successful\", {\n messageId,\n queueId,\n newDeadline,\n });\n }\n\n return success;\n }\n\n /**\n * Mark a message as successfully processed.\n * Removes the message from in-flight tracking.\n *\n * @param messageId - The message ID\n * @param queueId - The queue ID\n */\n async complete(messageId: string, queueId: string): Promise<void> {\n const shardId = this.#getShardForQueue(queueId);\n await this.#removeFromInflight(shardId, messageId, queueId);\n\n this.logger.debug(\"Message completed\", {\n messageId,\n queueId,\n });\n }\n\n /**\n * Release a message back to its queue.\n * Used when processing fails or consumer wants to retry later.\n *\n * @param messageId - The message ID\n * @param queueId - The queue ID\n * @param queueKey - The Redis key for the queue\n * @param queueItemsKey - The Redis key for the queue items hash\n * @param score - Optional score for the message (defaults to now)\n */\n async release<TPayload = unknown>(\n messageId: string,\n queueId: string,\n queueKey: string,\n queueItemsKey: string,\n score?: number\n ): Promise<void> {\n const shardId = this.#getShardForQueue(queueId);\n const inflightKey = this.keys.inflightKey(shardId);\n const inflightDataKey = this.keys.inflightDataKey(shardId);\n const member = this.#makeMember(messageId, queueId);\n const messageScore = score ?? Date.now();\n\n // Use Lua script to atomically:\n // 1. Get message data from in-flight\n // 2. Remove from in-flight\n // 3. Add back to queue\n await this.redis.releaseMessage(\n inflightKey,\n inflightDataKey,\n queueKey,\n queueItemsKey,\n member,\n messageId,\n messageScore.toString()\n );\n\n this.logger.debug(\"Message released\", {\n messageId,\n queueId,\n score: messageScore,\n });\n }\n\n /**\n * Reclaim timed-out messages from a shard.\n * Returns messages to their original queues.\n *\n * @param shardId - The shard to check\n * @param getQueueKeys - Function to get queue keys for a queue ID\n * @returns Number of messages reclaimed\n */\n async reclaimTimedOut(\n shardId: number,\n getQueueKeys: (queueId: string) => { queueKey: string; queueItemsKey: string }\n ): Promise<number> {\n const inflightKey = this.keys.inflightKey(shardId);\n const inflightDataKey = this.keys.inflightDataKey(shardId);\n const now = Date.now();\n\n // Get all messages past their deadline\n const timedOut = await this.redis.zrangebyscore(\n inflightKey,\n \"-inf\",\n now,\n \"WITHSCORES\",\n \"LIMIT\",\n 0,\n 100 // Process in batches\n );\n\n let reclaimed = 0;\n\n for (let i = 0; i < timedOut.length; i += 2) {\n const member = timedOut[i];\n const originalScore = timedOut[i + 1];\n if (!member || !originalScore) {\n continue;\n }\n const { messageId, queueId } = this.#parseMember(member);\n const { queueKey, queueItemsKey } = getQueueKeys(queueId);\n\n try {\n // Re-add to queue with original score (or now if not available)\n const score = parseFloat(originalScore) || now;\n await this.redis.releaseMessage(\n inflightKey,\n inflightDataKey,\n queueKey,\n queueItemsKey,\n member,\n messageId,\n score.toString()\n );\n\n reclaimed++;\n\n this.logger.debug(\"Reclaimed timed-out message\", {\n messageId,\n queueId,\n originalScore,\n });\n } catch (error) {\n this.logger.error(\"Failed to reclaim message\", {\n messageId,\n queueId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n return reclaimed;\n }\n\n /**\n * Get all in-flight messages for a shard.\n */\n async getInflightMessages(shardId: number): Promise<\n Array<{\n messageId: string;\n queueId: string;\n deadline: number;\n }>\n > {\n const inflightKey = this.keys.inflightKey(shardId);\n const results = await this.redis.zrange(inflightKey, 0, -1, \"WITHSCORES\");\n\n const messages: Array<{ messageId: string; queueId: string; deadline: number }> = [];\n\n for (let i = 0; i < results.length; i += 2) {\n const member = results[i];\n const deadlineStr = results[i + 1];\n if (!member || !deadlineStr) {\n continue;\n }\n const deadline = parseFloat(deadlineStr);\n const { messageId, queueId } = this.#parseMember(member);\n\n messages.push({ messageId, queueId, deadline });\n }\n\n return messages;\n }\n\n /**\n * Get count of in-flight messages for a shard.\n */\n async getInflightCount(shardId: number): Promise<number> {\n const inflightKey = this.keys.inflightKey(shardId);\n return await this.redis.zcard(inflightKey);\n }\n\n /**\n * Get total in-flight count across all shards.\n */\n async getTotalInflightCount(): Promise<number> {\n const counts = await Promise.all(\n Array.from({ length: this.shardCount }, (_, i) => this.getInflightCount(i))\n );\n return counts.reduce((sum, count) => sum + count, 0);\n }\n\n /**\n * Close the Redis connection.\n */\n async close(): Promise<void> {\n await this.redis.quit();\n }\n\n // ============================================================================\n // Private Methods\n // ============================================================================\n\n /**\n * Map queue ID to shard using Jump Consistent Hash.\n * Must use same algorithm as MasterQueue for consistency.\n */\n #getShardForQueue(queueId: string): number {\n return jumpHash(queueId, this.shardCount);\n }\n\n #makeMember(messageId: string, queueId: string): string {\n return `${messageId}:${queueId}`;\n }\n\n #parseMember(member: string): { messageId: string; queueId: string } {\n const colonIndex = member.indexOf(\":\");\n if (colonIndex === -1) {\n return { messageId: member, queueId: \"\" };\n }\n return {\n messageId: member.substring(0, colonIndex),\n queueId: member.substring(colonIndex + 1),\n };\n }\n\n async #removeFromInflight(shardId: number, messageId: string, queueId: string): Promise<void> {\n const inflightKey = this.keys.inflightKey(shardId);\n const inflightDataKey = this.keys.inflightDataKey(shardId);\n const member = this.#makeMember(messageId, queueId);\n\n const pipeline = this.redis.pipeline();\n pipeline.zrem(inflightKey, member);\n pipeline.hdel(inflightDataKey, messageId);\n await pipeline.exec();\n }\n\n #registerCommands(): void {\n // Atomic claim: pop from queue, add to in-flight\n this.redis.defineCommand(\"claimMessage\", {\n numberOfKeys: 4,\n lua: `\nlocal queueKey = KEYS[1]\nlocal queueItemsKey = KEYS[2]\nlocal inflightKey = KEYS[3]\nlocal inflightDataKey = KEYS[4]\n\nlocal queueId = ARGV[1]\nlocal consumerId = ARGV[2]\nlocal deadline = tonumber(ARGV[3])\n\n-- Get oldest message from queue\nlocal items = redis.call('ZRANGE', queueKey, 0, 0)\nif #items == 0 then\n return nil\nend\n\nlocal messageId = items[1]\n\n-- Get message data\nlocal payload = redis.call('HGET', queueItemsKey, messageId)\nif not payload then\n -- Message data missing, remove from queue and return nil\n redis.call('ZREM', queueKey, messageId)\n return nil\nend\n\n-- Remove from queue\nredis.call('ZREM', queueKey, messageId)\nredis.call('HDEL', queueItemsKey, messageId)\n\n-- Add to in-flight set with deadline\nlocal member = messageId .. ':' .. queueId\nredis.call('ZADD', inflightKey, deadline, member)\n\n-- Store message data for potential release\nredis.call('HSET', inflightDataKey, messageId, payload)\n\nreturn {messageId, payload}\n `,\n });\n\n // Atomic release: remove from in-flight, add back to queue\n this.redis.defineCommand(\"releaseMessage\", {\n numberOfKeys: 4,\n lua: `\nlocal inflightKey = KEYS[1]\nlocal inflightDataKey = KEYS[2]\nlocal queueKey = KEYS[3]\nlocal queueItemsKey = KEYS[4]\n\nlocal member = ARGV[1]\nlocal messageId = ARGV[2]\nlocal score = tonumber(ARGV[3])\n\n-- Get message data from in-flight\nlocal payload = redis.call('HGET', inflightDataKey, messageId)\nif not payload then\n -- Message not in in-flight or already released\n return 0\nend\n\n-- Remove from in-flight\nredis.call('ZREM', inflightKey, member)\nredis.call('HDEL', inflightDataKey, messageId)\n\n-- Add back to queue\nredis.call('ZADD', queueKey, score, messageId)\nredis.call('HSET', queueItemsKey, messageId, payload)\n\nreturn 1\n `,\n });\n\n // Atomic heartbeat: check if member exists and update score\n // ZADD XX returns 0 even on successful updates (it counts new additions only)\n // So we need to check existence first with ZSCORE\n this.redis.defineCommand(\"heartbeatMessage\", {\n numberOfKeys: 1,\n lua: `\nlocal inflightKey = KEYS[1]\nlocal member = ARGV[1]\nlocal newDeadline = tonumber(ARGV[2])\n\n-- Check if member exists in the in-flight set\nlocal score = redis.call('ZSCORE', inflightKey, member)\nif not score then\n return 0\nend\n\n-- Update the deadline\nredis.call('ZADD', inflightKey, 'XX', newDeadline, member)\nreturn 1\n `,\n });\n }\n}\n\n// Extend Redis interface for custom commands\ndeclare module \"@internal/redis\" {\n interface RedisCommander<Context> {\n claimMessage(\n queueKey: string,\n queueItemsKey: string,\n inflightKey: string,\n inflightDataKey: string,\n queueId: string,\n consumerId: string,\n deadline: string\n ): Promise<[string, string] | null>;\n\n releaseMessage(\n inflightKey: string,\n inflightDataKey: string,\n queueKey: string,\n queueItemsKey: string,\n member: string,\n messageId: string,\n score: string\n ): Promise<number>;\n\n heartbeatMessage(inflightKey: string, member: string, newDeadline: string): Promise<number>;\n }\n}\n","import { createRedisClient, type Redis, type RedisOptions } from \"@internal/redis\";\nimport type { FairQueueKeyProducer } from \"./types.js\";\n\nexport interface WorkerQueueManagerOptions {\n redis: RedisOptions;\n keys: FairQueueKeyProducer;\n logger?: {\n debug: (message: string, context?: Record<string, unknown>) => void;\n error: (message: string, context?: Record<string, unknown>) => void;\n };\n}\n\n/**\n * WorkerQueueManager handles the intermediate worker queue layer.\n *\n * This provides:\n * - Low-latency message delivery via blocking pop (BLPOP)\n * - Routing of messages to specific workers/consumers\n * - Efficient waiting without polling\n *\n * Flow:\n * 1. Master queue consumer claims message from message queue\n * 2. Message key is pushed to worker queue\n * 3. Worker queue consumer does blocking pop to receive message\n */\nexport class WorkerQueueManager {\n private redis: Redis;\n private keys: FairQueueKeyProducer;\n private logger: NonNullable<WorkerQueueManagerOptions[\"logger\"]>;\n\n constructor(private options: WorkerQueueManagerOptions) {\n this.redis = createRedisClient(options.redis);\n this.keys = options.keys;\n this.logger = options.logger ?? {\n debug: () => {},\n error: () => {},\n };\n this.#registerCommands();\n }\n\n // ============================================================================\n // Public Methods\n // ============================================================================\n\n /**\n * Push a message key to a worker queue.\n * Called after claiming a message from the message queue.\n *\n * @param workerQueueId - The worker queue identifier\n * @param messageKey - The message key to push (typically \"messageId:queueId\")\n */\n async push(workerQueueId: string, messageKey: string): Promise<void> {\n const workerQueueKey = this.keys.workerQueueKey(workerQueueId);\n await this.redis.rpush(workerQueueKey, messageKey);\n\n this.logger.debug(\"Pushed to worker queue\", {\n workerQueueId,\n workerQueueKey,\n messageKey,\n });\n }\n\n /**\n * Push multiple message keys to a worker queue.\n *\n * @param workerQueueId - The worker queue identifier\n * @param messageKeys - The message keys to push\n */\n async pushBatch(workerQueueId: string, messageKeys: string[]): Promise<void> {\n if (messageKeys.length === 0) {\n return;\n }\n\n const workerQueueKey = this.keys.workerQueueKey(workerQueueId);\n await this.redis.rpush(workerQueueKey, ...messageKeys);\n\n this.logger.debug(\"Pushed batch to worker queue\", {\n workerQueueId,\n workerQueueKey,\n count: messageKeys.length,\n });\n }\n\n /**\n * Blocking pop from a worker queue.\n * Waits until a message is available or timeout expires.\n *\n * @param workerQueueId - The worker queue identifier\n * @param timeoutSeconds - Maximum time to wait (0 = wait forever)\n * @param signal - Optional abort signal to cancel waiting\n * @returns The message key, or null if timeout\n */\n async blockingPop(\n workerQueueId: string,\n timeoutSeconds: number,\n signal?: AbortSignal\n ): Promise<string | null> {\n const workerQueueKey = this.keys.workerQueueKey(workerQueueId);\n\n // Create a separate client for blocking operation\n // This is required because BLPOP blocks the connection\n const blockingClient = this.redis.duplicate();\n\n try {\n // Set up abort handler\n if (signal) {\n const cleanup = () => {\n blockingClient.disconnect();\n };\n signal.addEventListener(\"abort\", cleanup, { once: true });\n\n if (signal.aborted) {\n return null;\n }\n }\n\n const result = await blockingClient.blpop(workerQueueKey, timeoutSeconds);\n\n if (!result) {\n return null;\n }\n\n // BLPOP returns [key, value]\n const [, messageKey] = result;\n\n this.logger.debug(\"Blocking pop received message\", {\n workerQueueId,\n workerQueueKey,\n messageKey,\n });\n\n return messageKey;\n } catch (error) {\n // Handle abort/disconnect\n if (signal?.aborted) {\n return null;\n }\n\n this.logger.error(\"Blocking pop error\", {\n workerQueueId,\n error: error instanceof Error ? error.message : String(error),\n });\n\n throw error;\n } finally {\n await blockingClient.quit().catch(() => {\n // Ignore quit errors (may already be disconnected)\n });\n }\n }\n\n /**\n * Non-blocking pop from a worker queue.\n *\n * @param workerQueueId - The worker queue identifier\n * @returns The message key and queue length, or null if empty\n */\n async pop(workerQueueId: string): Promise<{ messageKey: string; queueLength: number } | null> {\n const workerQueueKey = this.keys.workerQueueKey(workerQueueId);\n\n const result = await this.redis.popWithLength(workerQueueKey);\n\n if (!result) {\n return null;\n }\n\n const [messageKey, queueLength] = result;\n\n this.logger.debug(\"Non-blocking pop received message\", {\n workerQueueId,\n workerQueueKey,\n messageKey,\n queueLength,\n });\n\n return { messageKey, queueLength: Number(queueLength) };\n }\n\n /**\n * Get the current length of a worker queue.\n */\n async getLength(workerQueueId: string): Promise<number> {\n const workerQueueKey = this.keys.workerQueueKey(workerQueueId);\n return await this.redis.llen(workerQueueKey);\n }\n\n /**\n * Peek at all messages in a worker queue without removing them.\n * Useful for debugging and tests.\n */\n async peek(workerQueueId: string): Promise<string[]> {\n const workerQueueKey = this.keys.workerQueueKey(workerQueueId);\n return await this.redis.lrange(workerQueueKey, 0, -1);\n }\n\n /**\n * Remove a specific message from the worker queue.\n * Used when a message needs to be removed without processing.\n *\n * @param workerQueueId - The worker queue identifier\n * @param messageKey - The message key to remove\n * @returns Number of removed items\n */\n async remove(workerQueueId: string, messageKey: string): Promise<number> {\n const workerQueueKey = this.keys.workerQueueKey(workerQueueId);\n return await this.redis.lrem(workerQueueKey, 0, messageKey);\n }\n\n /**\n * Clear all messages from a worker queue.\n */\n async clear(workerQueueId: string): Promise<void> {\n const workerQueueKey = this.keys.workerQueueKey(workerQueueId);\n await this.redis.del(workerQueueKey);\n }\n\n /**\n * Close the Redis connection.\n */\n async close(): Promise<void> {\n await this.redis.quit();\n }\n\n // ============================================================================\n // Private - Register Commands\n // ============================================================================\n\n /**\n * Initialize custom Redis commands.\n */\n #registerCommands(): void {\n // Non-blocking pop with queue length\n this.redis.defineCommand(\"popWithLength\", {\n numberOfKeys: 1,\n lua: `\nlocal workerQueueKey = KEYS[1]\n\n-- Pop the first message\nlocal messageKey = redis.call('LPOP', workerQueueKey)\nif not messageKey then\n return nil\nend\n\n-- Get remaining queue length\nlocal queueLength = redis.call('LLEN', workerQueueKey)\n\nreturn {messageKey, queueLength}\n `,\n });\n }\n\n /**\n * Register custom commands on an external Redis client.\n * Use this when initializing FairQueue with worker queues.\n */\n registerCommands(redis: Redis): void {\n redis.defineCommand(\"popWithLength\", {\n numberOfKeys: 1,\n lua: `\nlocal workerQueueKey = KEYS[1]\n\n-- Pop the first message\nlocal messageKey = redis.call('LPOP', workerQueueKey)\nif not messageKey then\n return nil\nend\n\n-- Get remaining queue length\nlocal queueLength = redis.call('LLEN', workerQueueKey)\n\nreturn {messageKey, queueLength}\n `,\n });\n }\n}\n\n// Extend Redis interface for custom commands\ndeclare module \"@internal/redis\" {\n interface RedisCommander<Context> {\n popWithLength(workerQueueKey: string): Promise<[string, string] | null>;\n }\n}\n","import type { FairQueueKeyProducer } from \"./types.js\";\n\n/**\n * Default key producer for the fair queue system.\n * Uses a configurable prefix and standard key structure.\n *\n * Key structure:\n * - Master queue: {prefix}:master:{shardId}\n * - Queue: {prefix}:queue:{queueId}\n * - Queue items: {prefix}:queue:{queueId}:items\n * - Concurrency: {prefix}:concurrency:{groupName}:{groupId}\n * - In-flight: {prefix}:inflight:{shardId}\n * - In-flight data: {prefix}:inflight:{shardId}:data\n * - Worker queue: {prefix}:worker:{consumerId}\n */\nexport class DefaultFairQueueKeyProducer implements FairQueueKeyProducer {\n private readonly prefix: string;\n private readonly separator: string;\n\n constructor(options: { prefix?: string; separator?: string } = {}) {\n this.prefix = options.prefix ?? \"fq\";\n this.separator = options.separator ?? \":\";\n }\n\n // ============================================================================\n // Master Queue Keys\n // ============================================================================\n\n masterQueueKey(shardId: number): string {\n return this.#buildKey(\"master\", shardId.toString());\n }\n\n // ============================================================================\n // Queue Keys\n // ============================================================================\n\n queueKey(queueId: string): string {\n return this.#buildKey(\"queue\", queueId);\n }\n\n queueItemsKey(queueId: string): string {\n return this.#buildKey(\"queue\", queueId, \"items\");\n }\n\n // ============================================================================\n // Concurrency Keys\n // ============================================================================\n\n concurrencyKey(groupName: string, groupId: string): string {\n return this.#buildKey(\"concurrency\", groupName, groupId);\n }\n\n // ============================================================================\n // In-Flight Keys\n // ============================================================================\n\n inflightKey(shardId: number): string {\n return this.#buildKey(\"inflight\", shardId.toString());\n }\n\n inflightDataKey(shardId: number): string {\n return this.#buildKey(\"inflight\", shardId.toString(), \"data\");\n }\n\n // ============================================================================\n // Worker Queue Keys\n // ============================================================================\n\n workerQueueKey(consumerId: string): string {\n return this.#buildKey(\"worker\", consumerId);\n }\n\n // ============================================================================\n // Dead Letter Queue Keys\n // ============================================================================\n\n deadLetterQueueKey(tenantId: string): string {\n return this.#buildKey(\"dlq\", tenantId);\n }\n\n deadLetterQueueDataKey(tenantId: string): string {\n return this.#buildKey(\"dlq\", tenantId, \"data\");\n }\n\n // ============================================================================\n // Extraction Methods\n // ============================================================================\n\n /**\n * Extract tenant ID from a queue ID.\n * Default implementation assumes queue IDs are formatted as: tenant:{tenantId}:...\n * Override this method for custom queue ID formats.\n */\n extractTenantId(queueId: string): string {\n const parts = queueId.split(this.separator);\n // Expect format: tenant:{tenantId}:...\n if (parts.length >= 2 && parts[0] === \"tenant\" && parts[1]) {\n return parts[1];\n }\n // Fallback: return the first segment\n return parts[0] ?? \"\";\n }\n\n /**\n * Extract a group ID from a queue ID.\n * Default implementation looks for pattern: {groupName}:{groupId}:...\n * Override this method for custom queue ID formats.\n */\n extractGroupId(groupName: string, queueId: string): string {\n const parts = queueId.split(this.separator);\n\n // Look for the group name in the queue ID parts\n for (let i = 0; i < parts.length - 1; i++) {\n if (parts[i] === groupName) {\n const nextPart = parts[i + 1];\n if (nextPart) {\n return nextPart;\n }\n }\n }\n\n // Fallback: return an empty string\n return \"\";\n }\n\n // ============================================================================\n // Helper Methods\n // ============================================================================\n\n #buildKey(...parts: string[]): string {\n return [this.prefix, ...parts].join(this.separator);\n }\n}\n\n/**\n * Key producer with custom extraction logic via callbacks.\n * Useful when queue IDs don't follow a standard pattern.\n */\nexport class CallbackFairQueueKeyProducer extends DefaultFairQueueKeyProducer {\n private readonly tenantExtractor: (queueId: string) => string;\n private readonly groupExtractor: (groupName: string, queueId: string) => string;\n\n constructor(options: {\n prefix?: string;\n separator?: string;\n extractTenantId: (queueId: string) => string;\n extractGroupId: (groupName: string, queueId: string) => string;\n }) {\n super({ prefix: options.prefix, separator: options.separator });\n this.tenantExtractor = options.extractTenantId;\n this.groupExtractor = options.extractGroupId;\n }\n\n override extractTenantId(queueId: string): string {\n return this.tenantExtractor(queueId);\n }\n\n override extractGroupId(groupName: string, queueId: string): string {\n return this.groupExtractor(groupName, queueId);\n }\n}\n","import type { FairScheduler, SchedulerContext, TenantQueues, QueueDescriptor } from \"./types.js\";\n\n/**\n * Re-export scheduler types for convenience.\n */\nexport type { FairScheduler, SchedulerContext, TenantQueues };\n\n/**\n * Base class for scheduler implementations.\n * Provides common utilities and default implementations.\n */\nexport abstract class BaseScheduler implements FairScheduler {\n /**\n * Select queues for processing from a master queue shard.\n * Must be implemented by subclasses.\n */\n abstract selectQueues(\n masterQueueShard: string,\n consumerId: string,\n context: SchedulerContext\n ): Promise<TenantQueues[]>;\n\n /**\n * Called after processing a message to update scheduler state.\n * Default implementation does nothing.\n */\n async recordProcessed(_tenantId: string, _queueId: string): Promise<void> {\n // Default: no state tracking\n }\n\n /**\n * Initialize the scheduler.\n * Default implementation does nothing.\n */\n async initialize(): Promise<void> {\n // Default: no initialization needed\n }\n\n /**\n * Cleanup scheduler resources.\n * Default implementation does nothing.\n */\n async close(): Promise<void> {\n // Default: no cleanup needed\n }\n\n /**\n * Helper to group queues by tenant.\n */\n protected groupQueuesByTenant(\n queues: Array<{ queueId: string; tenantId: string }>\n ): Map<string, string[]> {\n const grouped = new Map<string, string[]>();\n\n for (const { queueId, tenantId } of queues) {\n const existing = grouped.get(tenantId) ?? [];\n existing.push(queueId);\n grouped.set(tenantId, existing);\n }\n\n return grouped;\n }\n\n /**\n * Helper to convert grouped queues to TenantQueues array.\n */\n protected toTenantQueuesArray(grouped: Map<string, string[]>): TenantQueues[] {\n return Array.from(grouped.entries()).map(([tenantId, queues]) => ({\n tenantId,\n queues,\n }));\n }\n\n /**\n * Helper to filter out tenants at capacity.\n */\n protected async filterAtCapacity(\n tenants: TenantQueues[],\n context: SchedulerContext,\n groupName: string = \"tenant\"\n ): Promise<TenantQueues[]> {\n const filtered: TenantQueues[] = [];\n\n for (const tenant of tenants) {\n const isAtCapacity = await context.isAtCapacity(groupName, tenant.tenantId);\n if (!isAtCapacity) {\n filtered.push(tenant);\n }\n }\n\n return filtered;\n }\n}\n\n/**\n * Simple noop scheduler that returns empty results.\n * Useful for testing or disabling scheduling.\n */\nexport class NoopScheduler extends BaseScheduler {\n async selectQueues(\n _masterQueueShard: string,\n _consumerId: string,\n _context: SchedulerContext\n ): Promise<TenantQueues[]> {\n return [];\n }\n}\n\n","import { createRedisClient, type Redis, type RedisOptions } from \"@internal/redis\";\nimport { BaseScheduler } from \"../scheduler.js\";\nimport type {\n DRRSchedulerConfig,\n FairQueueKeyProducer,\n SchedulerContext,\n TenantQueues,\n QueueWithScore,\n} from \"../types.js\";\n\n/**\n * Deficit Round Robin (DRR) Scheduler.\n *\n * DRR ensures fair processing across tenants by:\n * - Allocating a \"quantum\" of credits to each tenant per round\n * - Accumulating unused credits as \"deficit\"\n * - Processing from tenants with available deficit\n * - Capping deficit to prevent starvation\n *\n * Key improvements over basic implementations:\n * - Atomic deficit operations using Lua scripts\n * - Efficient iteration through tenants\n * - Automatic deficit cleanup for inactive tenants\n */\nexport class DRRScheduler extends BaseScheduler {\n private redis: Redis;\n private keys: FairQueueKeyProducer;\n private quantum: number;\n private maxDeficit: number;\n private logger: NonNullable<DRRSchedulerConfig[\"logger\"]>;\n\n constructor(private config: DRRSchedulerConfig) {\n super();\n this.redis = createRedisClient(config.redis);\n this.keys = config.keys;\n this.quantum = config.quantum;\n this.maxDeficit = config.maxDeficit;\n this.logger = config.logger ?? {\n debug: () => {},\n error: () => {},\n };\n\n this.#registerCommands();\n }\n\n // ============================================================================\n // FairScheduler Implementation\n // ============================================================================\n\n /**\n * Select queues for processing using DRR algorithm.\n *\n * Algorithm:\n * 1. Get all queues from the master shard\n * 2. Group by tenant\n * 3. Filter out tenants at concurrency capacity\n * 4. Add quantum to each tenant's deficit (atomically)\n * 5. Select queues from tenants with deficit >= 1\n * 6. Order tenants by deficit (highest first for fairness)\n */\n async selectQueues(\n masterQueueShard: string,\n consumerId: string,\n context: SchedulerContext\n ): Promise<TenantQueues[]> {\n // Get all queues from the master shard\n const queues = await this.#getQueuesFromShard(masterQueueShard);\n\n if (queues.length === 0) {\n return [];\n }\n\n // Group queues by tenant\n const queuesByTenant = this.groupQueuesByTenant(\n queues.map((q) => ({ queueId: q.queueId, tenantId: q.tenantId }))\n );\n\n // Get unique tenant IDs\n const tenantIds = Array.from(queuesByTenant.keys());\n\n // Add quantum to all active tenants atomically\n const deficits = await this.#addQuantumToTenants(tenantIds);\n\n // Build tenant data with deficits\n const tenantData: Array<{\n tenantId: string;\n deficit: number;\n queues: string[];\n isAtCapacity: boolean;\n }> = await Promise.all(\n tenantIds.map(async (tenantId, index) => {\n const isAtCapacity = await context.isAtCapacity(\"tenant\", tenantId);\n return {\n tenantId,\n deficit: deficits[index] ?? 0,\n queues: queuesByTenant.get(tenantId) ?? [],\n isAtCapacity,\n };\n })\n );\n\n // Filter out tenants at capacity or with no deficit\n const eligibleTenants = tenantData.filter(\n (t) => !t.isAtCapacity && t.deficit >= 1\n );\n\n // Log tenants blocked by capacity\n const blockedTenants = tenantData.filter((t) => t.isAtCapacity);\n if (blockedTenants.length > 0) {\n this.logger.debug(\"DRR: tenants blocked by concurrency\", {\n blockedCount: blockedTenants.length,\n blockedTenants: blockedTenants.map((t) => t.tenantId),\n });\n }\n\n // Sort by deficit (highest first for fairness)\n eligibleTenants.sort((a, b) => b.deficit - a.deficit);\n\n this.logger.debug(\"DRR: queue selection complete\", {\n totalQueues: queues.length,\n totalTenants: tenantIds.length,\n eligibleTenants: eligibleTenants.length,\n topTenantDeficit: eligibleTenants[0]?.deficit,\n });\n\n // Convert to TenantQueues format\n return eligibleTenants.map((t) => ({\n tenantId: t.tenantId,\n queues: t.queues,\n }));\n }\n\n /**\n * Record that a message was processed from a tenant.\n * Decrements the tenant's deficit.\n */\n override async recordProcessed(tenantId: string, _queueId: string): Promise<void> {\n await this.#decrementDeficit(tenantId);\n }\n\n override async close(): Promise<void> {\n await this.redis.quit();\n }\n\n // ============================================================================\n // Public Methods for Deficit Management\n // ============================================================================\n\n /**\n * Get the current deficit for a tenant.\n */\n async getDeficit(tenantId: string): Promise<number> {\n const key = this.#deficitKey();\n const value = await this.redis.hget(key, tenantId);\n return value ? parseFloat(value) : 0;\n }\n\n /**\n * Reset deficit for a tenant.\n * Used when a tenant has no more active queues.\n */\n async resetDeficit(tenantId: string): Promise<void> {\n const key = this.#deficitKey();\n await this.redis.hdel(key, tenantId);\n }\n\n /**\n * Get all tenant deficits.\n */\n async getAllDeficits(): Promise<Map<string, number>> {\n const key = this.#deficitKey();\n const data = await this.redis.hgetall(key);\n const result = new Map<string, number>();\n for (const [tenantId, value] of Object.entries(data)) {\n result.set(tenantId, parseFloat(value));\n }\n return result;\n }\n\n // ============================================================================\n // Private Methods\n // ============================================================================\n\n #deficitKey(): string {\n // Use a fixed key for DRR deficit tracking\n return `${this.keys.masterQueueKey(0).split(\":\")[0]}:drr:deficit`;\n }\n\n async #getQueuesFromShard(shardKey: string): Promise<QueueWithScore[]> {\n const now = Date.now();\n const results = await this.redis.zrangebyscore(\n shardKey,\n \"-inf\",\n now,\n \"WITHSCORES\",\n \"LIMIT\",\n 0,\n 1000 // Limit for performance\n );\n\n const queues: QueueWithScore[] = [];\n for (let i = 0; i < results.length; i += 2) {\n const queueId = results[i];\n const scoreStr = results[i + 1];\n if (queueId && scoreStr) {\n queues.push({\n queueId,\n score: parseFloat(scoreStr),\n tenantId: this.keys.extractTenantId(queueId),\n });\n }\n }\n\n return queues;\n }\n\n /**\n * Add quantum to multiple tenants atomically.\n * Returns the new deficit values.\n */\n async #addQuantumToTenants(tenantIds: string[]): Promise<number[]> {\n if (tenantIds.length === 0) {\n return [];\n }\n\n const key = this.#deficitKey();\n\n // Use Lua script for atomic quantum addition with capping\n const results = await this.redis.drrAddQuantum(\n key,\n this.quantum.toString(),\n this.maxDeficit.toString(),\n ...tenantIds\n );\n\n return results.map((r) => parseFloat(r));\n }\n\n /**\n * Decrement deficit for a tenant atomically.\n */\n async #decrementDeficit(tenantId: string): Promise<number> {\n const key = this.#deficitKey();\n\n // Use Lua script to decrement and ensure non-negative\n const result = await this.redis.drrDecrementDeficit(key, tenantId);\n return parseFloat(result);\n }\n\n #registerCommands(): void {\n // Atomic quantum addition with capping for multiple tenants\n this.redis.defineCommand(\"drrAddQuantum\", {\n numberOfKeys: 1,\n lua: `\nlocal deficitKey = KEYS[1]\nlocal quantum = tonumber(ARGV[1])\nlocal maxDeficit = tonumber(ARGV[2])\nlocal results = {}\n\nfor i = 3, #ARGV do\n local tenantId = ARGV[i]\n \n -- Add quantum to deficit\n local newDeficit = redis.call('HINCRBYFLOAT', deficitKey, tenantId, quantum)\n newDeficit = tonumber(newDeficit)\n \n -- Cap at maxDeficit\n if newDeficit > maxDeficit then\n redis.call('HSET', deficitKey, tenantId, maxDeficit)\n newDeficit = maxDeficit\n end\n \n table.insert(results, tostring(newDeficit))\nend\n\nreturn results\n `,\n });\n\n // Atomic deficit decrement with floor at 0\n this.redis.defineCommand(\"drrDecrementDeficit\", {\n numberOfKeys: 1,\n lua: `\nlocal deficitKey = KEYS[1]\nlocal tenantId = ARGV[1]\n\nlocal newDeficit = redis.call('HINCRBYFLOAT', deficitKey, tenantId, -1)\nnewDeficit = tonumber(newDeficit)\n\n-- Floor at 0\nif newDeficit < 0 then\n redis.call('HSET', deficitKey, tenantId, 0)\n newDeficit = 0\nend\n\nreturn tostring(newDeficit)\n `,\n });\n }\n}\n\n// Extend Redis interface for custom commands\ndeclare module \"@internal/redis\" {\n interface RedisCommander<Context> {\n drrAddQuantum(\n deficitKey: string,\n quantum: string,\n maxDeficit: string,\n ...tenantIds: string[]\n ): Promise<string[]>;\n\n drrDecrementDeficit(deficitKey: string, tenantId: string): Promise<string>;\n }\n}\n\n","import { createRedisClient, type Redis, type RedisOptions } from \"@internal/redis\";\nimport seedrandom from \"seedrandom\";\nimport { BaseScheduler } from \"../scheduler.js\";\nimport type {\n FairQueueKeyProducer,\n SchedulerContext,\n TenantQueues,\n QueueWithScore,\n WeightedSchedulerBiases,\n WeightedSchedulerConfig,\n} from \"../types.js\";\n\ninterface TenantConcurrency {\n current: number;\n limit: number;\n}\n\ninterface TenantSnapshot {\n tenantId: string;\n concurrency: TenantConcurrency;\n queues: Array<{ queueId: string; age: number }>;\n}\n\ninterface QueueSnapshot {\n id: string;\n tenants: Map<string, TenantSnapshot>;\n queues: Array<{ queueId: string; tenantId: string; age: number }>;\n}\n\nconst defaultBiases: WeightedSchedulerBiases = {\n concurrencyLimitBias: 0,\n availableCapacityBias: 0,\n queueAgeRandomization: 0,\n};\n\n/**\n * Weighted Shuffle Scheduler.\n *\n * Uses weighted random selection to balance between:\n * - Concurrency limit (higher limits get more weight)\n * - Available capacity (tenants with more capacity get more weight)\n * - Queue age (older queues get priority, with configurable randomization)\n *\n * Features:\n * - Snapshot caching to reduce Redis calls\n * - Configurable biases for fine-tuning\n * - Maximum tenant count to limit iteration\n */\nexport class WeightedScheduler extends BaseScheduler {\n private redis: Redis;\n private keys: FairQueueKeyProducer;\n private rng: seedrandom.PRNG;\n private biases: WeightedSchedulerBiases;\n private defaultTenantLimit: number;\n private masterQueueLimit: number;\n private reuseSnapshotCount: number;\n private maximumTenantCount: number;\n\n // Snapshot cache\n private snapshotCache: Map<string, { snapshot: QueueSnapshot; reuseCount: number }> = new Map();\n\n constructor(private config: WeightedSchedulerConfig) {\n super();\n this.redis = createRedisClient(config.redis);\n this.keys = config.keys;\n this.rng = seedrandom(config.seed);\n this.biases = config.biases ?? defaultBiases;\n this.defaultTenantLimit = config.defaultTenantConcurrencyLimit ?? 100;\n this.masterQueueLimit = config.masterQueueLimit ?? 100;\n this.reuseSnapshotCount = config.reuseSnapshotCount ?? 0;\n this.maximumTenantCount = config.maximumTenantCount ?? 0;\n }\n\n // ============================================================================\n // FairScheduler Implementation\n // ============================================================================\n\n async selectQueues(\n masterQueueShard: string,\n consumerId: string,\n context: SchedulerContext\n ): Promise<TenantQueues[]> {\n const snapshot = await this.#getOrCreateSnapshot(\n masterQueueShard,\n consumerId,\n context\n );\n\n if (snapshot.queues.length === 0) {\n return [];\n }\n\n // Shuffle tenants based on weights\n const shuffledTenants = this.#shuffleTenantsByWeight(snapshot);\n\n // Order queues within each tenant\n return shuffledTenants.map((tenantId) => ({\n tenantId,\n queues: this.#orderQueuesForTenant(snapshot, tenantId),\n }));\n }\n\n override async close(): Promise<void> {\n this.snapshotCache.clear();\n await this.redis.quit();\n }\n\n // ============================================================================\n // Private Methods\n // ============================================================================\n\n async #getOrCreateSnapshot(\n masterQueueShard: string,\n consumerId: string,\n context: SchedulerContext\n ): Promise<QueueSnapshot> {\n const cacheKey = `${masterQueueShard}:${consumerId}`;\n\n // Check cache\n if (this.reuseSnapshotCount > 0) {\n const cached = this.snapshotCache.get(cacheKey);\n if (cached && cached.reuseCount < this.reuseSnapshotCount) {\n this.snapshotCache.set(cacheKey, {\n snapshot: cached.snapshot,\n reuseCount: cached.reuseCount + 1,\n });\n return cached.snapshot;\n }\n }\n\n // Create new snapshot\n const snapshot = await this.#createSnapshot(masterQueueShard, context);\n\n // Cache if enabled\n if (this.reuseSnapshotCount > 0) {\n this.snapshotCache.set(cacheKey, { snapshot, reuseCount: 0 });\n }\n\n return snapshot;\n }\n\n async #createSnapshot(\n masterQueueShard: string,\n context: SchedulerContext\n ): Promise<QueueSnapshot> {\n const now = Date.now();\n\n // Get queues from master shard\n let rawQueues = await this.#getQueuesFromShard(masterQueueShard, now);\n\n if (rawQueues.length === 0) {\n return { id: crypto.randomUUID(), tenants: new Map(), queues: [] };\n }\n\n // Apply maximum tenant count if configured\n if (this.maximumTenantCount > 0) {\n rawQueues = this.#selectTopTenantQueues(rawQueues);\n }\n\n // Build tenant data\n const tenantIds = new Set<string>();\n const queuesByTenant = new Map<string, Array<{ queueId: string; age: number }>>();\n\n for (const queue of rawQueues) {\n tenantIds.add(queue.tenantId);\n const tenantQueues = queuesByTenant.get(queue.tenantId) ?? [];\n tenantQueues.push({\n queueId: queue.queueId,\n age: now - queue.score,\n });\n queuesByTenant.set(queue.tenantId, tenantQueues);\n }\n\n // Get concurrency for each tenant\n const tenants = new Map<string, TenantSnapshot>();\n for (const tenantId of tenantIds) {\n const [current, limit] = await Promise.all([\n context.getCurrentConcurrency(\"tenant\", tenantId),\n context.getConcurrencyLimit(\"tenant\", tenantId),\n ]);\n\n // Skip tenants at capacity\n if (current >= limit) {\n continue;\n }\n\n tenants.set(tenantId, {\n tenantId,\n concurrency: { current, limit },\n queues: queuesByTenant.get(tenantId) ?? [],\n });\n }\n\n // Build final queue list (only from non-capacity tenants)\n const queues = rawQueues\n .filter((q) => tenants.has(q.tenantId))\n .map((q) => ({\n queueId: q.queueId,\n tenantId: q.tenantId,\n age: now - q.score,\n }));\n\n return {\n id: crypto.randomUUID(),\n tenants,\n queues,\n };\n }\n\n async #getQueuesFromShard(shardKey: string, maxScore: number): Promise<QueueWithScore[]> {\n const results = await this.redis.zrangebyscore(\n shardKey,\n \"-inf\",\n maxScore,\n \"WITHSCORES\",\n \"LIMIT\",\n 0,\n this.masterQueueLimit\n );\n\n const queues: QueueWithScore[] = [];\n for (let i = 0; i < results.length; i += 2) {\n const queueId = results[i];\n const scoreStr = results[i + 1];\n if (queueId && scoreStr) {\n queues.push({\n queueId,\n score: parseFloat(scoreStr),\n tenantId: this.keys.extractTenantId(queueId),\n });\n }\n }\n\n return queues;\n }\n\n #selectTopTenantQueues(queues: QueueWithScore[]): QueueWithScore[] {\n // Group by tenant and calculate average age\n const queuesByTenant = new Map<string, QueueWithScore[]>();\n for (const queue of queues) {\n const tenantQueues = queuesByTenant.get(queue.tenantId) ?? [];\n tenantQueues.push(queue);\n queuesByTenant.set(queue.tenantId, tenantQueues);\n }\n\n // Calculate average age per tenant\n const tenantAges = Array.from(queuesByTenant.entries()).map(([tenantId, tQueues]) => {\n const avgAge = tQueues.reduce((sum, q) => sum + q.score, 0) / tQueues.length;\n return { tenantId, avgAge };\n });\n\n // Weighted shuffle to select top N tenants\n const maxAge = Math.max(...tenantAges.map((t) => t.avgAge));\n // Guard against division by zero: if maxAge is 0, assign equal weights\n const weightedTenants =\n maxAge === 0\n ? tenantAges.map((t) => ({\n tenantId: t.tenantId,\n weight: 1 / tenantAges.length,\n }))\n : tenantAges.map((t) => ({\n tenantId: t.tenantId,\n weight: t.avgAge / maxAge,\n }));\n\n const selectedTenants = new Set<string>();\n let remaining = [...weightedTenants];\n let totalWeight = remaining.reduce((sum, t) => sum + t.weight, 0);\n\n while (selectedTenants.size < this.maximumTenantCount && remaining.length > 0) {\n let random = this.rng() * totalWeight;\n let index = 0;\n\n while (random > 0 && index < remaining.length) {\n const item = remaining[index];\n if (item) {\n random -= item.weight;\n }\n index++;\n }\n index = Math.max(0, index - 1);\n\n const selected = remaining[index];\n if (selected) {\n selectedTenants.add(selected.tenantId);\n totalWeight -= selected.weight;\n remaining.splice(index, 1);\n }\n }\n\n // Return queues only from selected tenants\n return queues.filter((q) => selectedTenants.has(q.tenantId));\n }\n\n #shuffleTenantsByWeight(snapshot: QueueSnapshot): string[] {\n const tenantIds = Array.from(snapshot.tenants.keys());\n\n if (tenantIds.length === 0) {\n return [];\n }\n\n const { concurrencyLimitBias, availableCapacityBias } = this.biases;\n\n // If no biases, do simple shuffle\n if (concurrencyLimitBias === 0 && availableCapacityBias === 0) {\n return this.#shuffle(tenantIds);\n }\n\n // Calculate weights\n const maxLimit = Math.max(\n ...tenantIds.map((id) => snapshot.tenants.get(id)!.concurrency.limit)\n );\n\n const weightedTenants = tenantIds.map((tenantId) => {\n const tenant = snapshot.tenants.get(tenantId)!;\n let weight = 1;\n\n // Concurrency limit bias\n if (concurrencyLimitBias > 0) {\n // Guard against division by zero: if maxLimit is 0, treat normalizedLimit as 0\n const normalizedLimit = maxLimit > 0 ? tenant.concurrency.limit / maxLimit : 0;\n weight *= 1 + Math.pow(normalizedLimit * concurrencyLimitBias, 2);\n }\n\n // Available capacity bias\n if (availableCapacityBias > 0) {\n // Guard against division by zero: if limit is 0, treat as fully used (no bonus)\n const usedPercentage =\n tenant.concurrency.limit > 0 ? tenant.concurrency.current / tenant.concurrency.limit : 1;\n const availableBonus = 1 - usedPercentage;\n weight *= 1 + Math.pow(availableBonus * availableCapacityBias, 2);\n }\n\n return { tenantId, weight };\n });\n\n return this.#weightedShuffle(weightedTenants);\n }\n\n #orderQueuesForTenant(snapshot: QueueSnapshot, tenantId: string): string[] {\n const tenant = snapshot.tenants.get(tenantId);\n if (!tenant || tenant.queues.length === 0) {\n return [];\n }\n\n const queues = [...tenant.queues];\n const { queueAgeRandomization } = this.biases;\n\n // Strict age-based ordering\n if (queueAgeRandomization === 0) {\n return queues.sort((a, b) => b.age - a.age).map((q) => q.queueId);\n }\n\n // Weighted random based on age\n const maxAge = Math.max(...queues.map((q) => q.age));\n // Guard against division by zero: if maxAge is 0, all queues have equal weight\n const ageDenom = maxAge === 0 ? 1 : maxAge;\n const weightedQueues = queues.map((q) => ({\n queue: q,\n weight: 1 + (q.age / ageDenom) * queueAgeRandomization,\n }));\n\n const result: string[] = [];\n let remaining = [...weightedQueues];\n let totalWeight = remaining.reduce((sum, q) => sum + q.weight, 0);\n\n while (remaining.length > 0) {\n let random = this.rng() * totalWeight;\n let index = 0;\n\n while (random > 0 && index < remaining.length) {\n const item = remaining[index];\n if (item) {\n random -= item.weight;\n }\n index++;\n }\n index = Math.max(0, index - 1);\n\n const selected = remaining[index];\n if (selected) {\n result.push(selected.queue.queueId);\n totalWeight -= selected.weight;\n remaining.splice(index, 1);\n }\n }\n\n return result;\n }\n\n #shuffle<T>(array: T[]): T[] {\n const result = [...array];\n for (let i = result.length - 1; i > 0; i--) {\n const j = Math.floor(this.rng() * (i + 1));\n const temp = result[i];\n const swapValue = result[j];\n if (temp !== undefined && swapValue !== undefined) {\n result[i] = swapValue;\n result[j] = temp;\n }\n }\n return result;\n }\n\n #weightedShuffle(items: Array<{ tenantId: string; weight: number }>): string[] {\n const result: string[] = [];\n let remaining = [...items];\n let totalWeight = remaining.reduce((sum, item) => sum + item.weight, 0);\n\n while (remaining.length > 0) {\n let random = this.rng() * totalWeight;\n let index = 0;\n\n while (random > 0 && index < remaining.length) {\n const item = remaining[index];\n if (item) {\n random -= item.weight;\n }\n index++;\n }\n index = Math.max(0, index - 1);\n\n const selected = remaining[index];\n if (selected) {\n result.push(selected.tenantId);\n totalWeight -= selected.weight;\n remaining.splice(index, 1);\n }\n }\n\n return result;\n }\n}\n\n","import { createRedisClient, type Redis, type RedisOptions } from \"@internal/redis\";\nimport { BaseScheduler } from \"../scheduler.js\";\nimport type {\n FairQueueKeyProducer,\n SchedulerContext,\n TenantQueues,\n QueueWithScore,\n} from \"../types.js\";\n\nexport interface RoundRobinSchedulerConfig {\n redis: RedisOptions;\n keys: FairQueueKeyProducer;\n /** Maximum queues to fetch from master queue per iteration */\n masterQueueLimit?: number;\n}\n\n/**\n * Round Robin Scheduler.\n *\n * Simple scheduler that processes tenants in strict rotation order.\n * Maintains a \"last served\" pointer in Redis to track position.\n *\n * Features:\n * - Predictable ordering (good for debugging)\n * - Fair rotation through all tenants\n * - No weighting or bias\n */\nexport class RoundRobinScheduler extends BaseScheduler {\n private redis: Redis;\n private keys: FairQueueKeyProducer;\n private masterQueueLimit: number;\n\n constructor(private config: RoundRobinSchedulerConfig) {\n super();\n this.redis = createRedisClient(config.redis);\n this.keys = config.keys;\n this.masterQueueLimit = config.masterQueueLimit ?? 1000;\n }\n\n // ============================================================================\n // FairScheduler Implementation\n // ============================================================================\n\n async selectQueues(\n masterQueueShard: string,\n consumerId: string,\n context: SchedulerContext\n ): Promise<TenantQueues[]> {\n const now = Date.now();\n\n // Get all queues from master shard\n const queues = await this.#getQueuesFromShard(masterQueueShard, now);\n\n if (queues.length === 0) {\n return [];\n }\n\n // Group queues by tenant\n const queuesByTenant = new Map<string, string[]>();\n const tenantOrder: string[] = [];\n\n for (const queue of queues) {\n if (!queuesByTenant.has(queue.tenantId)) {\n queuesByTenant.set(queue.tenantId, []);\n tenantOrder.push(queue.tenantId);\n }\n queuesByTenant.get(queue.tenantId)!.push(queue.queueId);\n }\n\n // Get last served index\n const lastServedIndex = await this.#getLastServedIndex(masterQueueShard);\n\n // Rotate tenant order based on last served\n const rotatedTenants = this.#rotateArray(tenantOrder, lastServedIndex);\n\n // Filter out tenants at capacity\n const eligibleTenants: TenantQueues[] = [];\n\n for (const tenantId of rotatedTenants) {\n const isAtCapacity = await context.isAtCapacity(\"tenant\", tenantId);\n if (!isAtCapacity) {\n const tenantQueues = queuesByTenant.get(tenantId) ?? [];\n // Sort queues by age (oldest first based on original scores)\n eligibleTenants.push({\n tenantId,\n queues: tenantQueues,\n });\n }\n }\n\n // Update last served index to the first eligible tenant\n const firstEligible = eligibleTenants[0];\n if (firstEligible) {\n const firstTenantIndex = tenantOrder.indexOf(firstEligible.tenantId);\n await this.#setLastServedIndex(masterQueueShard, firstTenantIndex + 1);\n }\n\n return eligibleTenants;\n }\n\n override async close(): Promise<void> {\n await this.redis.quit();\n }\n\n // ============================================================================\n // Private Methods\n // ============================================================================\n\n async #getQueuesFromShard(shardKey: string, maxScore: number): Promise<QueueWithScore[]> {\n const results = await this.redis.zrangebyscore(\n shardKey,\n \"-inf\",\n maxScore,\n \"WITHSCORES\",\n \"LIMIT\",\n 0,\n this.masterQueueLimit\n );\n\n const queues: QueueWithScore[] = [];\n for (let i = 0; i < results.length; i += 2) {\n const queueId = results[i];\n const scoreStr = results[i + 1];\n if (queueId && scoreStr) {\n queues.push({\n queueId,\n score: parseFloat(scoreStr),\n tenantId: this.keys.extractTenantId(queueId),\n });\n }\n }\n\n return queues;\n }\n\n #lastServedKey(shardKey: string): string {\n return `${shardKey}:rr:lastServed`;\n }\n\n async #getLastServedIndex(shardKey: string): Promise<number> {\n const key = this.#lastServedKey(shardKey);\n const value = await this.redis.get(key);\n return value ? parseInt(value, 10) : 0;\n }\n\n async #setLastServedIndex(shardKey: string, index: number): Promise<void> {\n const key = this.#lastServedKey(shardKey);\n await this.redis.set(key, index.toString());\n }\n\n #rotateArray<T>(array: T[], startIndex: number): T[] {\n if (array.length === 0) return [];\n const normalizedIndex = startIndex % array.length;\n return [...array.slice(normalizedIndex), ...array.slice(0, normalizedIndex)];\n }\n}\n\n","import { calculateNextRetryDelay } from \"@trigger.dev/core/v3\";\nimport type { RetryOptions } from \"@trigger.dev/core/v3/schemas\";\n\n/**\n * RetryStrategy interface for pluggable retry logic.\n */\nexport interface RetryStrategy {\n /**\n * Calculate the next retry delay in milliseconds.\n * Return null to indicate the message should be sent to DLQ.\n *\n * @param attempt - Current attempt number (1-indexed)\n * @param error - Optional error from the failed attempt\n * @returns Delay in milliseconds, or null to send to DLQ\n */\n getNextDelay(attempt: number, error?: Error): number | null;\n\n /**\n * Maximum number of attempts before moving to DLQ.\n */\n maxAttempts: number;\n}\n\n/**\n * Exponential backoff retry strategy.\n *\n * Uses the same algorithm as @trigger.dev/core's calculateNextRetryDelay.\n */\nexport class ExponentialBackoffRetry implements RetryStrategy {\n readonly maxAttempts: number;\n private options: RetryOptions;\n\n constructor(options?: Partial<RetryOptions>) {\n this.options = {\n maxAttempts: options?.maxAttempts ?? 12,\n factor: options?.factor ?? 2,\n minTimeoutInMs: options?.minTimeoutInMs ?? 1_000,\n maxTimeoutInMs: options?.maxTimeoutInMs ?? 3_600_000, // 1 hour\n randomize: options?.randomize ?? true,\n };\n this.maxAttempts = this.options.maxAttempts ?? 12;\n }\n\n getNextDelay(attempt: number, _error?: Error): number | null {\n if (attempt >= this.maxAttempts) {\n return null; // Send to DLQ\n }\n\n const delay = calculateNextRetryDelay(this.options, attempt);\n return delay ?? null;\n }\n}\n\n/**\n * Fixed delay retry strategy.\n *\n * Always waits the same amount of time between retries.\n */\nexport class FixedDelayRetry implements RetryStrategy {\n readonly maxAttempts: number;\n private delayMs: number;\n\n constructor(options: { maxAttempts: number; delayMs: number }) {\n this.maxAttempts = options.maxAttempts;\n this.delayMs = options.delayMs;\n }\n\n getNextDelay(attempt: number, _error?: Error): number | null {\n if (attempt >= this.maxAttempts) {\n return null; // Send to DLQ\n }\n return this.delayMs;\n }\n}\n\n/**\n * Linear backoff retry strategy.\n *\n * Delay increases linearly with each attempt.\n */\nexport class LinearBackoffRetry implements RetryStrategy {\n readonly maxAttempts: number;\n private baseDelayMs: number;\n private maxDelayMs: number;\n\n constructor(options: { maxAttempts: number; baseDelayMs: number; maxDelayMs?: number }) {\n this.maxAttempts = options.maxAttempts;\n this.baseDelayMs = options.baseDelayMs;\n this.maxDelayMs = options.maxDelayMs ?? options.baseDelayMs * options.maxAttempts;\n }\n\n getNextDelay(attempt: number, _error?: Error): number | null {\n if (attempt >= this.maxAttempts) {\n return null; // Send to DLQ\n }\n const delay = this.baseDelayMs * attempt;\n return Math.min(delay, this.maxDelayMs);\n }\n}\n\n/**\n * No retry strategy.\n *\n * Messages go directly to DLQ on first failure.\n */\nexport class NoRetry implements RetryStrategy {\n readonly maxAttempts = 1;\n\n getNextDelay(_attempt: number, _error?: Error): number | null {\n return null; // Always send to DLQ\n }\n}\n\n/**\n * Immediate retry strategy.\n *\n * Retries immediately without any delay.\n */\nexport class ImmediateRetry implements RetryStrategy {\n readonly maxAttempts: number;\n\n constructor(maxAttempts: number) {\n this.maxAttempts = maxAttempts;\n }\n\n getNextDelay(attempt: number, _error?: Error): number | null {\n if (attempt >= this.maxAttempts) {\n return null; // Send to DLQ\n }\n return 0; // Immediate retry\n }\n}\n\n/**\n * Custom retry strategy that uses a user-provided function.\n */\nexport class CustomRetry implements RetryStrategy {\n readonly maxAttempts: number;\n private calculateDelay: (attempt: number, error?: Error) => number | null;\n\n constructor(options: {\n maxAttempts: number;\n calculateDelay: (attempt: number, error?: Error) => number | null;\n }) {\n this.maxAttempts = options.maxAttempts;\n this.calculateDelay = options.calculateDelay;\n }\n\n getNextDelay(attempt: number, error?: Error): number | null {\n if (attempt >= this.maxAttempts) {\n return null;\n }\n return this.calculateDelay(attempt, error);\n }\n}\n\n/**\n * Default retry options matching @trigger.dev/core defaults.\n */\nexport const defaultRetryOptions: RetryOptions = {\n maxAttempts: 12,\n factor: 2,\n minTimeoutInMs: 1_000,\n maxTimeoutInMs: 3_600_000,\n randomize: true,\n};\n\n/**\n * Create an exponential backoff retry strategy with default options.\n */\nexport function createDefaultRetryStrategy(): RetryStrategy {\n return new ExponentialBackoffRetry(defaultRetryOptions);\n}\n","import { createRedisClient, type Redis, type RedisOptions } from \"@internal/redis\";\nimport { SpanKind } from \"@internal/tracing\";\nimport { Logger } from \"@trigger.dev/core/logger\";\nimport { nanoid } from \"nanoid\";\nimport { setInterval } from \"node:timers/promises\";\nimport { type z } from \"zod\";\nimport { ConcurrencyManager } from \"./concurrency.js\";\nimport { MasterQueue } from \"./masterQueue.js\";\nimport { type RetryStrategy, ExponentialBackoffRetry } from \"./retry.js\";\nimport { FairQueueTelemetry, FairQueueAttributes, MessagingAttributes } from \"./telemetry.js\";\nimport type {\n ConcurrencyGroupConfig,\n DeadLetterMessage,\n EnqueueBatchOptions,\n EnqueueOptions,\n FairQueueKeyProducer,\n FairQueueOptions,\n FairScheduler,\n GlobalRateLimiter,\n MessageHandler,\n MessageHandlerContext,\n QueueCooloffState,\n QueueDescriptor,\n QueueMessage,\n SchedulerContext,\n StoredMessage,\n} from \"./types.js\";\nimport { VisibilityManager } from \"./visibility.js\";\nimport { WorkerQueueManager } from \"./workerQueue.js\";\n\n// Re-export all types and components\nexport * from \"./types.js\";\nexport * from \"./keyProducer.js\";\nexport * from \"./masterQueue.js\";\nexport * from \"./concurrency.js\";\nexport * from \"./visibility.js\";\nexport * from \"./workerQueue.js\";\nexport * from \"./scheduler.js\";\nexport * from \"./schedulers/index.js\";\nexport * from \"./retry.js\";\nexport * from \"./telemetry.js\";\n\n/**\n * FairQueue is the main orchestrator for fair queue processing.\n *\n * It coordinates:\n * - Master queue with sharding (using jump consistent hash)\n * - Fair scheduling via pluggable schedulers\n * - Multi-level concurrency limiting\n * - Visibility timeouts with heartbeats\n * - Worker queues with blocking pop\n * - Retry strategies with dead letter queue\n * - OpenTelemetry tracing and metrics\n *\n * @typeParam TPayloadSchema - Zod schema for message payload validation\n */\nexport class FairQueue<TPayloadSchema extends z.ZodTypeAny = z.ZodUnknown> {\n private redis: Redis;\n private keys: FairQueueKeyProducer;\n private scheduler: FairScheduler;\n private masterQueue: MasterQueue;\n private concurrencyManager?: ConcurrencyManager;\n private visibilityManager: VisibilityManager;\n private workerQueueManager?: WorkerQueueManager;\n private telemetry: FairQueueTelemetry;\n private logger: Logger;\n\n // Configuration\n private payloadSchema?: TPayloadSchema;\n private validateOnEnqueue: boolean;\n private retryStrategy?: RetryStrategy;\n private deadLetterQueueEnabled: boolean;\n private shardCount: number;\n private consumerCount: number;\n private consumerIntervalMs: number;\n private visibilityTimeoutMs: number;\n private heartbeatIntervalMs: number;\n private reclaimIntervalMs: number;\n private workerQueueEnabled: boolean;\n private workerQueueBlockingTimeoutSeconds: number;\n private workerQueueResolver?: (message: StoredMessage<z.infer<TPayloadSchema>>) => string;\n\n // Cooloff state\n private cooloffEnabled: boolean;\n private cooloffThreshold: number;\n private cooloffPeriodMs: number;\n private queueCooloffStates = new Map<string, QueueCooloffState>();\n\n // Global rate limiter\n private globalRateLimiter?: GlobalRateLimiter;\n\n // Runtime state\n private messageHandler?: MessageHandler<z.infer<TPayloadSchema>>;\n private isRunning = false;\n private abortController: AbortController;\n private masterQueueConsumerLoops: Promise<void>[] = [];\n private workerQueueConsumerLoops: Promise<void>[] = [];\n private reclaimLoop?: Promise<void>;\n\n // Queue descriptor cache for message processing\n private queueDescriptorCache = new Map<string, QueueDescriptor>();\n\n constructor(private options: FairQueueOptions<TPayloadSchema>) {\n this.redis = createRedisClient(options.redis);\n this.keys = options.keys;\n this.scheduler = options.scheduler;\n this.logger = options.logger ?? new Logger(\"FairQueue\", \"info\");\n this.abortController = new AbortController();\n\n // Payload validation\n this.payloadSchema = options.payloadSchema;\n this.validateOnEnqueue = options.validateOnEnqueue ?? false;\n\n // Retry and DLQ\n this.retryStrategy = options.retry?.strategy;\n this.deadLetterQueueEnabled = options.retry?.deadLetterQueue ?? true;\n\n // Configuration\n this.shardCount = options.shardCount ?? 1;\n this.consumerCount = options.consumerCount ?? 1;\n this.consumerIntervalMs = options.consumerIntervalMs ?? 100;\n this.visibilityTimeoutMs = options.visibilityTimeoutMs ?? 30_000;\n this.heartbeatIntervalMs = options.heartbeatIntervalMs ?? this.visibilityTimeoutMs / 3;\n this.reclaimIntervalMs = options.reclaimIntervalMs ?? 5_000;\n\n // Worker queue\n this.workerQueueEnabled = options.workerQueue?.enabled ?? false;\n this.workerQueueBlockingTimeoutSeconds = options.workerQueue?.blockingTimeoutSeconds ?? 10;\n this.workerQueueResolver = options.workerQueue?.resolveWorkerQueue;\n\n // Cooloff\n this.cooloffEnabled = options.cooloff?.enabled ?? true;\n this.cooloffThreshold = options.cooloff?.threshold ?? 10;\n this.cooloffPeriodMs = options.cooloff?.periodMs ?? 10_000;\n\n // Global rate limiter\n this.globalRateLimiter = options.globalRateLimiter;\n\n // Initialize telemetry\n this.telemetry = new FairQueueTelemetry({\n tracer: options.tracer,\n meter: options.meter,\n name: options.name ?? \"fairqueue\",\n });\n\n // Initialize components\n this.masterQueue = new MasterQueue({\n redis: options.redis,\n keys: options.keys,\n shardCount: this.shardCount,\n });\n\n if (options.concurrencyGroups && options.concurrencyGroups.length > 0) {\n this.concurrencyManager = new ConcurrencyManager({\n redis: options.redis,\n keys: options.keys,\n groups: options.concurrencyGroups,\n });\n }\n\n this.visibilityManager = new VisibilityManager({\n redis: options.redis,\n keys: options.keys,\n shardCount: this.shardCount,\n defaultTimeoutMs: this.visibilityTimeoutMs,\n logger: {\n debug: (msg, ctx) => this.logger.debug(msg, ctx),\n error: (msg, ctx) => this.logger.error(msg, ctx),\n },\n });\n\n if (this.workerQueueEnabled) {\n this.workerQueueManager = new WorkerQueueManager({\n redis: options.redis,\n keys: options.keys,\n logger: {\n debug: (msg, ctx) => this.logger.debug(msg, ctx),\n error: (msg, ctx) => this.logger.error(msg, ctx),\n },\n });\n }\n\n this.#registerCommands();\n\n // Auto-start consumers if not disabled\n if (options.startConsumers !== false) {\n this.start();\n }\n }\n\n // ============================================================================\n // Public API - Telemetry\n // ============================================================================\n\n /**\n * Register observable gauge callbacks for telemetry.\n * Call this after FairQueue is created to enable gauge metrics.\n *\n * @param options.observedTenants - List of tenant IDs to observe for DLQ metrics\n */\n registerTelemetryGauges(options?: { observedTenants?: string[] }): void {\n this.telemetry.registerGaugeCallbacks({\n getMasterQueueLength: async (shardId: number) => {\n return await this.masterQueue.getShardQueueCount(shardId);\n },\n getInflightCount: async (shardId: number) => {\n return await this.visibilityManager.getInflightCount(shardId);\n },\n getDLQLength: async (tenantId: string) => {\n return await this.getDeadLetterQueueLength(tenantId);\n },\n shardCount: this.shardCount,\n observedTenants: options?.observedTenants,\n });\n }\n\n // ============================================================================\n // Public API - Message Handler\n // ============================================================================\n\n /**\n * Set the message handler for processing dequeued messages.\n */\n onMessage(handler: MessageHandler<z.infer<TPayloadSchema>>): void {\n this.messageHandler = handler;\n }\n\n // ============================================================================\n // Public API - Enqueueing\n // ============================================================================\n\n /**\n * Enqueue a single message to a queue.\n */\n async enqueue(options: EnqueueOptions<z.infer<TPayloadSchema>>): Promise<string> {\n return this.telemetry.trace(\n \"enqueue\",\n async (span) => {\n const messageId = options.messageId ?? nanoid();\n const timestamp = options.timestamp ?? Date.now();\n const queueKey = this.keys.queueKey(options.queueId);\n const queueItemsKey = this.keys.queueItemsKey(options.queueId);\n const shardId = this.masterQueue.getShardForQueue(options.queueId);\n const masterQueueKey = this.keys.masterQueueKey(shardId);\n\n // Validate payload if schema provided and validation enabled\n if (this.validateOnEnqueue && this.payloadSchema) {\n const result = this.payloadSchema.safeParse(options.payload);\n if (!result.success) {\n throw new Error(`Payload validation failed: ${result.error.message}`);\n }\n }\n\n // Store queue descriptor for later use\n const descriptor: QueueDescriptor = {\n id: options.queueId,\n tenantId: options.tenantId,\n metadata: options.metadata ?? {},\n };\n this.queueDescriptorCache.set(options.queueId, descriptor);\n\n // Build stored message\n const storedMessage: StoredMessage<z.infer<TPayloadSchema>> = {\n id: messageId,\n queueId: options.queueId,\n tenantId: options.tenantId,\n payload: options.payload,\n timestamp,\n attempt: 1,\n workerQueue: this.workerQueueResolver\n ? this.workerQueueResolver({\n id: messageId,\n queueId: options.queueId,\n tenantId: options.tenantId,\n payload: options.payload,\n timestamp,\n attempt: 1,\n metadata: options.metadata,\n })\n : options.queueId,\n metadata: options.metadata,\n };\n\n // Use atomic Lua script to enqueue and update master queue\n await this.redis.enqueueMessageAtomic(\n queueKey,\n queueItemsKey,\n masterQueueKey,\n options.queueId,\n messageId,\n timestamp.toString(),\n JSON.stringify(storedMessage)\n );\n\n span.setAttributes({\n [FairQueueAttributes.QUEUE_ID]: options.queueId,\n [FairQueueAttributes.TENANT_ID]: options.tenantId,\n [FairQueueAttributes.MESSAGE_ID]: messageId,\n [FairQueueAttributes.SHARD_ID]: shardId.toString(),\n });\n\n this.telemetry.recordEnqueue(\n this.telemetry.messageAttributes({\n queueId: options.queueId,\n tenantId: options.tenantId,\n messageId,\n })\n );\n\n this.logger.debug(\"Message enqueued\", {\n queueId: options.queueId,\n messageId,\n timestamp,\n });\n\n return messageId;\n },\n {\n kind: SpanKind.PRODUCER,\n attributes: {\n [MessagingAttributes.OPERATION]: \"publish\",\n },\n }\n );\n }\n\n /**\n * Enqueue multiple messages to a queue.\n */\n async enqueueBatch(options: EnqueueBatchOptions<z.infer<TPayloadSchema>>): Promise<string[]> {\n return this.telemetry.trace(\n \"enqueueBatch\",\n async (span) => {\n const queueKey = this.keys.queueKey(options.queueId);\n const queueItemsKey = this.keys.queueItemsKey(options.queueId);\n const shardId = this.masterQueue.getShardForQueue(options.queueId);\n const masterQueueKey = this.keys.masterQueueKey(shardId);\n const now = Date.now();\n\n // Store queue descriptor\n const descriptor: QueueDescriptor = {\n id: options.queueId,\n tenantId: options.tenantId,\n metadata: options.metadata ?? {},\n };\n this.queueDescriptorCache.set(options.queueId, descriptor);\n\n const messageIds: string[] = [];\n const args: string[] = [];\n\n for (const message of options.messages) {\n const messageId = message.messageId ?? nanoid();\n const timestamp = message.timestamp ?? now;\n\n // Validate if enabled\n if (this.validateOnEnqueue && this.payloadSchema) {\n const result = this.payloadSchema.safeParse(message.payload);\n if (!result.success) {\n throw new Error(\n `Payload validation failed for message ${messageId}: ${result.error.message}`\n );\n }\n }\n\n const storedMessage: StoredMessage<z.infer<TPayloadSchema>> = {\n id: messageId,\n queueId: options.queueId,\n tenantId: options.tenantId,\n payload: message.payload,\n timestamp,\n attempt: 1,\n workerQueue: this.workerQueueResolver\n ? this.workerQueueResolver({\n id: messageId,\n queueId: options.queueId,\n tenantId: options.tenantId,\n payload: message.payload,\n timestamp,\n attempt: 1,\n metadata: options.metadata,\n })\n : options.queueId,\n metadata: options.metadata,\n };\n\n messageIds.push(messageId);\n args.push(messageId, timestamp.toString(), JSON.stringify(storedMessage));\n }\n\n // Use atomic Lua script for batch enqueue\n await this.redis.enqueueBatchAtomic(\n queueKey,\n queueItemsKey,\n masterQueueKey,\n options.queueId,\n ...args\n );\n\n span.setAttributes({\n [FairQueueAttributes.QUEUE_ID]: options.queueId,\n [FairQueueAttributes.TENANT_ID]: options.tenantId,\n [FairQueueAttributes.MESSAGE_COUNT]: messageIds.length,\n [FairQueueAttributes.SHARD_ID]: shardId.toString(),\n });\n\n this.telemetry.recordEnqueueBatch(\n messageIds.length,\n this.telemetry.messageAttributes({\n queueId: options.queueId,\n tenantId: options.tenantId,\n })\n );\n\n this.logger.debug(\"Batch enqueued\", {\n queueId: options.queueId,\n messageCount: messageIds.length,\n });\n\n return messageIds;\n },\n {\n kind: SpanKind.PRODUCER,\n attributes: {\n [MessagingAttributes.OPERATION]: \"publish\",\n },\n }\n );\n }\n\n // ============================================================================\n // Public API - Dead Letter Queue\n // ============================================================================\n\n /**\n * Get messages from the dead letter queue for a tenant.\n */\n async getDeadLetterMessages(\n tenantId: string,\n limit: number = 100\n ): Promise<DeadLetterMessage<z.infer<TPayloadSchema>>[]> {\n if (!this.deadLetterQueueEnabled) {\n return [];\n }\n\n const dlqKey = this.keys.deadLetterQueueKey(tenantId);\n const dlqDataKey = this.keys.deadLetterQueueDataKey(tenantId);\n\n // Get message IDs with scores (deadLetteredAt timestamps)\n const results = await this.redis.zrange(dlqKey, 0, limit - 1, \"WITHSCORES\");\n\n const messages: DeadLetterMessage<z.infer<TPayloadSchema>>[] = [];\n\n for (let i = 0; i < results.length; i += 2) {\n const messageId = results[i];\n const deadLetteredAtStr = results[i + 1];\n if (!messageId || !deadLetteredAtStr) continue;\n\n const dataJson = await this.redis.hget(dlqDataKey, messageId);\n if (!dataJson) continue;\n\n try {\n const data = JSON.parse(dataJson) as DeadLetterMessage<z.infer<TPayloadSchema>>;\n data.deadLetteredAt = parseFloat(deadLetteredAtStr);\n messages.push(data);\n } catch {\n this.logger.error(\"Failed to parse DLQ message\", { messageId, tenantId });\n }\n }\n\n return messages;\n }\n\n /**\n * Redrive a message from DLQ back to its original queue.\n */\n async redriveMessage(tenantId: string, messageId: string): Promise<boolean> {\n if (!this.deadLetterQueueEnabled) {\n return false;\n }\n\n return this.telemetry.trace(\n \"redriveMessage\",\n async (span) => {\n const dlqKey = this.keys.deadLetterQueueKey(tenantId);\n const dlqDataKey = this.keys.deadLetterQueueDataKey(tenantId);\n\n // Get the message data\n const dataJson = await this.redis.hget(dlqDataKey, messageId);\n if (!dataJson) {\n return false;\n }\n\n const dlqMessage = JSON.parse(dataJson) as DeadLetterMessage<z.infer<TPayloadSchema>>;\n\n // Re-enqueue with reset attempt count\n await this.enqueue({\n queueId: dlqMessage.queueId,\n tenantId: dlqMessage.tenantId,\n payload: dlqMessage.payload,\n messageId: dlqMessage.id,\n timestamp: Date.now(),\n });\n\n // Remove from DLQ\n const pipeline = this.redis.pipeline();\n pipeline.zrem(dlqKey, messageId);\n pipeline.hdel(dlqDataKey, messageId);\n await pipeline.exec();\n\n span.setAttributes({\n [FairQueueAttributes.TENANT_ID]: tenantId,\n [FairQueueAttributes.MESSAGE_ID]: messageId,\n });\n\n this.logger.info(\"Redrived message from DLQ\", { tenantId, messageId });\n\n return true;\n },\n {\n kind: SpanKind.PRODUCER,\n attributes: {\n [MessagingAttributes.OPERATION]: \"redrive\",\n },\n }\n );\n }\n\n /**\n * Redrive all messages from DLQ back to their original queues.\n */\n async redriveAll(tenantId: string): Promise<number> {\n const messages = await this.getDeadLetterMessages(tenantId, 1000);\n let count = 0;\n\n for (const message of messages) {\n const success = await this.redriveMessage(tenantId, message.id);\n if (success) count++;\n }\n\n return count;\n }\n\n /**\n * Purge all messages from a tenant's DLQ.\n */\n async purgeDeadLetterQueue(tenantId: string): Promise<number> {\n if (!this.deadLetterQueueEnabled) {\n return 0;\n }\n\n const dlqKey = this.keys.deadLetterQueueKey(tenantId);\n const dlqDataKey = this.keys.deadLetterQueueDataKey(tenantId);\n\n const count = await this.redis.zcard(dlqKey);\n\n const pipeline = this.redis.pipeline();\n pipeline.del(dlqKey);\n pipeline.del(dlqDataKey);\n await pipeline.exec();\n\n this.logger.info(\"Purged DLQ\", { tenantId, count });\n\n return count;\n }\n\n /**\n * Get the number of messages in a tenant's DLQ.\n */\n async getDeadLetterQueueLength(tenantId: string): Promise<number> {\n if (!this.deadLetterQueueEnabled) {\n return 0;\n }\n\n const dlqKey = this.keys.deadLetterQueueKey(tenantId);\n return await this.redis.zcard(dlqKey);\n }\n\n // ============================================================================\n // Public API - Lifecycle\n // ============================================================================\n\n /**\n * Start the consumer loops and reclaim loop.\n */\n start(): void {\n if (this.isRunning) {\n return;\n }\n\n this.isRunning = true;\n this.abortController = new AbortController();\n\n if (this.workerQueueEnabled && this.workerQueueManager) {\n // Two-stage processing: master queue consumers push to worker queues\n // Start master queue consumers (one per shard)\n for (let shardId = 0; shardId < this.shardCount; shardId++) {\n const loop = this.#runMasterQueueConsumerLoop(shardId);\n this.masterQueueConsumerLoops.push(loop);\n }\n\n // Start worker queue consumers (multiple per consumer count)\n for (let consumerId = 0; consumerId < this.consumerCount; consumerId++) {\n const loop = this.#runWorkerQueueConsumerLoop(consumerId);\n this.workerQueueConsumerLoops.push(loop);\n }\n } else {\n // Direct processing: consumers process from message queues directly\n for (let consumerId = 0; consumerId < this.consumerCount; consumerId++) {\n for (let shardId = 0; shardId < this.shardCount; shardId++) {\n const loop = this.#runDirectConsumerLoop(consumerId, shardId);\n this.masterQueueConsumerLoops.push(loop);\n }\n }\n }\n\n // Start reclaim loop\n this.reclaimLoop = this.#runReclaimLoop();\n\n this.logger.info(\"FairQueue started\", {\n consumerCount: this.consumerCount,\n shardCount: this.shardCount,\n workerQueueEnabled: this.workerQueueEnabled,\n consumerIntervalMs: this.consumerIntervalMs,\n });\n }\n\n /**\n * Stop the consumer loops gracefully.\n */\n async stop(): Promise<void> {\n if (!this.isRunning) {\n return;\n }\n\n this.isRunning = false;\n this.abortController.abort();\n\n await Promise.allSettled([\n ...this.masterQueueConsumerLoops,\n ...this.workerQueueConsumerLoops,\n this.reclaimLoop,\n ]);\n\n this.masterQueueConsumerLoops = [];\n this.workerQueueConsumerLoops = [];\n this.reclaimLoop = undefined;\n\n this.logger.info(\"FairQueue stopped\");\n }\n\n /**\n * Close all resources.\n */\n async close(): Promise<void> {\n await this.stop();\n await Promise.all([\n this.masterQueue.close(),\n this.concurrencyManager?.close(),\n this.visibilityManager.close(),\n this.workerQueueManager?.close(),\n this.scheduler.close?.(),\n this.redis.quit(),\n ]);\n }\n\n // ============================================================================\n // Public API - Inspection\n // ============================================================================\n\n /**\n * Get the number of messages in a queue.\n */\n async getQueueLength(queueId: string): Promise<number> {\n const queueKey = this.keys.queueKey(queueId);\n return await this.redis.zcard(queueKey);\n }\n\n /**\n * Get total queue count across all shards.\n */\n async getTotalQueueCount(): Promise<number> {\n return await this.masterQueue.getTotalQueueCount();\n }\n\n /**\n * Get total in-flight message count.\n */\n async getTotalInflightCount(): Promise<number> {\n return await this.visibilityManager.getTotalInflightCount();\n }\n\n /**\n * Get the shard ID for a queue.\n */\n getShardForQueue(queueId: string): number {\n return this.masterQueue.getShardForQueue(queueId);\n }\n\n // ============================================================================\n // Private - Master Queue Consumer Loop (Two-Stage)\n // ============================================================================\n\n async #runMasterQueueConsumerLoop(shardId: number): Promise<void> {\n const loopId = `master-shard-${shardId}`;\n\n try {\n for await (const _ of setInterval(this.consumerIntervalMs, null, {\n signal: this.abortController.signal,\n })) {\n try {\n await this.#processMasterQueueShard(loopId, shardId);\n } catch (error) {\n this.logger.error(\"Master queue consumer error\", {\n loopId,\n shardId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n this.logger.debug(\"Master queue consumer aborted\", { loopId });\n return;\n }\n throw error;\n }\n }\n\n async #processMasterQueueShard(loopId: string, shardId: number): Promise<void> {\n const masterQueueKey = this.keys.masterQueueKey(shardId);\n\n // Create scheduler context\n const context = this.#createSchedulerContext();\n\n // Get queues to process from scheduler\n const tenantQueues = await this.scheduler.selectQueues(masterQueueKey, loopId, context);\n\n if (tenantQueues.length === 0) {\n return;\n }\n\n // Process queues and push to worker queues\n for (const { tenantId, queues } of tenantQueues) {\n for (const queueId of queues) {\n // Check cooloff\n if (this.cooloffEnabled && this.#isInCooloff(queueId)) {\n continue;\n }\n\n const processed = await this.#claimAndPushToWorkerQueue(loopId, queueId, tenantId, shardId);\n\n if (processed) {\n await this.scheduler.recordProcessed?.(tenantId, queueId);\n this.#resetCooloff(queueId);\n } else {\n this.#incrementCooloff(queueId);\n }\n }\n }\n }\n\n async #claimAndPushToWorkerQueue(\n loopId: string,\n queueId: string,\n tenantId: string,\n shardId: number\n ): Promise<boolean> {\n const queueKey = this.keys.queueKey(queueId);\n const queueItemsKey = this.keys.queueItemsKey(queueId);\n const masterQueueKey = this.keys.masterQueueKey(shardId);\n const descriptor = this.queueDescriptorCache.get(queueId) ?? {\n id: queueId,\n tenantId,\n metadata: {},\n };\n\n // Check concurrency before claiming\n if (this.concurrencyManager) {\n const check = await this.concurrencyManager.canProcess(descriptor);\n if (!check.allowed) {\n return false;\n }\n }\n\n // Check global rate limit - wait if rate limited\n if (this.globalRateLimiter) {\n const result = await this.globalRateLimiter.limit();\n if (!result.allowed && result.resetAt) {\n const waitMs = Math.max(0, result.resetAt - Date.now());\n if (waitMs > 0) {\n this.logger.debug(\"Global rate limit reached, waiting\", { waitMs, loopId });\n await new Promise((resolve) => setTimeout(resolve, waitMs));\n }\n }\n }\n\n // Claim message with visibility timeout\n const claimResult = await this.visibilityManager.claim<StoredMessage<z.infer<TPayloadSchema>>>(\n queueId,\n queueKey,\n queueItemsKey,\n loopId,\n this.visibilityTimeoutMs\n );\n\n if (!claimResult.claimed || !claimResult.message) {\n // Queue is empty, update master queue\n await this.redis.updateMasterQueueIfEmpty(masterQueueKey, queueKey, queueId);\n return false;\n }\n\n const { message } = claimResult;\n\n // Reserve concurrency slot\n if (this.concurrencyManager) {\n const reserved = await this.concurrencyManager.reserve(descriptor, message.messageId);\n if (!reserved) {\n // Release message back to queue\n await this.visibilityManager.release(message.messageId, queueId, queueKey, queueItemsKey);\n return false;\n }\n }\n\n // Determine worker queue\n const workerQueueId = message.payload.workerQueue ?? queueId;\n\n // Push to worker queue\n const messageKey = `${message.messageId}:${queueId}`;\n await this.workerQueueManager!.push(workerQueueId, messageKey);\n\n return true;\n }\n\n // ============================================================================\n // Private - Worker Queue Consumer Loop (Two-Stage)\n // ============================================================================\n\n async #runWorkerQueueConsumerLoop(consumerId: number): Promise<void> {\n const loopId = `worker-${consumerId}`;\n const workerQueueId = loopId; // Each consumer has its own worker queue by default\n\n try {\n while (this.isRunning) {\n if (!this.messageHandler) {\n await new Promise((resolve) => setTimeout(resolve, this.consumerIntervalMs));\n continue;\n }\n\n try {\n // Blocking pop from worker queue\n const messageKey = await this.workerQueueManager!.blockingPop(\n workerQueueId,\n this.workerQueueBlockingTimeoutSeconds,\n this.abortController.signal\n );\n\n if (!messageKey) {\n continue; // Timeout, loop again\n }\n\n // Parse message key\n const colonIndex = messageKey.indexOf(\":\");\n if (colonIndex === -1) {\n this.logger.error(\"Invalid message key format\", { messageKey });\n continue;\n }\n\n const messageId = messageKey.substring(0, colonIndex);\n const queueId = messageKey.substring(colonIndex + 1);\n\n await this.#processMessageFromWorkerQueue(loopId, messageId, queueId);\n } catch (error) {\n if (this.abortController.signal.aborted) {\n break;\n }\n this.logger.error(\"Worker queue consumer error\", {\n loopId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n this.logger.debug(\"Worker queue consumer aborted\", { loopId });\n return;\n }\n throw error;\n }\n }\n\n async #processMessageFromWorkerQueue(\n loopId: string,\n messageId: string,\n queueId: string\n ): Promise<void> {\n // Get message data from in-flight\n const shardId = this.masterQueue.getShardForQueue(queueId);\n const inflightDataKey = this.keys.inflightDataKey(shardId);\n const dataJson = await this.redis.hget(inflightDataKey, messageId);\n\n if (!dataJson) {\n this.logger.error(\"Message not found in in-flight data\", { messageId, queueId });\n return;\n }\n\n let storedMessage: StoredMessage<z.infer<TPayloadSchema>>;\n try {\n storedMessage = JSON.parse(dataJson);\n } catch {\n this.logger.error(\"Failed to parse message data\", { messageId, queueId });\n return;\n }\n\n await this.#processMessage(loopId, storedMessage, queueId);\n }\n\n // ============================================================================\n // Private - Direct Consumer Loop (No Worker Queue)\n // ============================================================================\n\n async #runDirectConsumerLoop(consumerId: number, shardId: number): Promise<void> {\n const loopId = `consumer-${consumerId}-shard-${shardId}`;\n\n try {\n for await (const _ of setInterval(this.consumerIntervalMs, null, {\n signal: this.abortController.signal,\n })) {\n if (!this.messageHandler) {\n continue;\n }\n\n try {\n await this.#processDirectIteration(loopId, shardId);\n } catch (error) {\n this.logger.error(\"Direct consumer iteration error\", {\n loopId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n this.logger.debug(\"Direct consumer loop aborted\", { loopId });\n return;\n }\n throw error;\n }\n }\n\n async #processDirectIteration(loopId: string, shardId: number): Promise<void> {\n const masterQueueKey = this.keys.masterQueueKey(shardId);\n\n // Create scheduler context\n const context = this.#createSchedulerContext();\n\n // Get queues to process from scheduler\n const tenantQueues = await this.scheduler.selectQueues(masterQueueKey, loopId, context);\n\n if (tenantQueues.length === 0) {\n return;\n }\n\n // Process messages from each selected tenant\n // For fairness, process up to available concurrency slots per tenant\n for (const { tenantId, queues } of tenantQueues) {\n // Get available concurrency for this tenant\n let availableSlots = 1; // Default to 1 for backwards compatibility\n if (this.concurrencyManager) {\n const [current, limit] = await Promise.all([\n this.concurrencyManager.getCurrentConcurrency(\"tenant\", tenantId),\n this.concurrencyManager.getConcurrencyLimit(\"tenant\", tenantId),\n ]);\n availableSlots = Math.max(1, limit - current);\n }\n\n // Process up to availableSlots messages from this tenant's queues\n let slotsUsed = 0;\n queueLoop: for (const queueId of queues) {\n while (slotsUsed < availableSlots) {\n // Check cooloff\n if (this.cooloffEnabled && this.#isInCooloff(queueId)) {\n break; // Try next queue\n }\n\n const processed = await this.#processOneMessage(loopId, queueId, tenantId, shardId);\n\n if (processed) {\n await this.scheduler.recordProcessed?.(tenantId, queueId);\n this.#resetCooloff(queueId);\n slotsUsed++;\n } else {\n this.#incrementCooloff(queueId);\n break; // Queue empty or blocked, try next queue\n }\n }\n if (slotsUsed >= availableSlots) {\n break queueLoop;\n }\n }\n }\n }\n\n async #processOneMessage(\n loopId: string,\n queueId: string,\n tenantId: string,\n shardId: number\n ): Promise<boolean> {\n const queueKey = this.keys.queueKey(queueId);\n const queueItemsKey = this.keys.queueItemsKey(queueId);\n const masterQueueKey = this.keys.masterQueueKey(shardId);\n const descriptor = this.queueDescriptorCache.get(queueId) ?? {\n id: queueId,\n tenantId,\n metadata: {},\n };\n\n // Check concurrency before claiming\n if (this.concurrencyManager) {\n const check = await this.concurrencyManager.canProcess(descriptor);\n if (!check.allowed) {\n return false;\n }\n }\n\n // Check global rate limit - wait if rate limited\n if (this.globalRateLimiter) {\n const result = await this.globalRateLimiter.limit();\n if (!result.allowed && result.resetAt) {\n const waitMs = Math.max(0, result.resetAt - Date.now());\n if (waitMs > 0) {\n this.logger.debug(\"Global rate limit reached, waiting\", { waitMs, loopId });\n await new Promise((resolve) => setTimeout(resolve, waitMs));\n }\n }\n }\n\n // Claim message with visibility timeout\n const claimResult = await this.visibilityManager.claim<StoredMessage<z.infer<TPayloadSchema>>>(\n queueId,\n queueKey,\n queueItemsKey,\n loopId,\n this.visibilityTimeoutMs\n );\n\n if (!claimResult.claimed || !claimResult.message) {\n // Queue is empty, update master queue\n await this.redis.updateMasterQueueIfEmpty(masterQueueKey, queueKey, queueId);\n return false;\n }\n\n const { message } = claimResult;\n\n // Reserve concurrency slot\n if (this.concurrencyManager) {\n const reserved = await this.concurrencyManager.reserve(descriptor, message.messageId);\n if (!reserved) {\n // Release message back to queue\n await this.visibilityManager.release(message.messageId, queueId, queueKey, queueItemsKey);\n return false;\n }\n }\n\n await this.#processMessage(loopId, message.payload, queueId);\n return true;\n }\n\n // ============================================================================\n // Private - Message Processing\n // ============================================================================\n\n async #processMessage(\n loopId: string,\n storedMessage: StoredMessage<z.infer<TPayloadSchema>>,\n queueId: string\n ): Promise<void> {\n const startTime = Date.now();\n const queueKey = this.keys.queueKey(queueId);\n const queueItemsKey = this.keys.queueItemsKey(queueId);\n const shardId = this.masterQueue.getShardForQueue(queueId);\n const masterQueueKey = this.keys.masterQueueKey(shardId);\n\n const descriptor = this.queueDescriptorCache.get(queueId) ?? {\n id: queueId,\n tenantId: storedMessage.tenantId,\n metadata: storedMessage.metadata ?? {},\n };\n\n // Parse payload with schema if provided\n let payload: z.infer<TPayloadSchema>;\n if (this.payloadSchema) {\n const result = this.payloadSchema.safeParse(storedMessage.payload);\n if (!result.success) {\n this.logger.error(\"Payload validation failed on dequeue\", {\n messageId: storedMessage.id,\n queueId,\n error: result.error.message,\n });\n // Move to DLQ\n await this.#moveToDeadLetterQueue(storedMessage, \"Payload validation failed\");\n\n // Release reserved concurrency slot\n if (this.concurrencyManager) {\n try {\n await this.concurrencyManager.release(descriptor, storedMessage.id);\n } catch (releaseError) {\n this.logger.error(\"Failed to release concurrency slot after payload validation failure\", {\n messageId: storedMessage.id,\n queueId,\n error: releaseError instanceof Error ? releaseError.message : String(releaseError),\n });\n }\n }\n\n return;\n }\n payload = result.data;\n } else {\n payload = storedMessage.payload;\n }\n\n // Build queue message\n const queueMessage: QueueMessage<z.infer<TPayloadSchema>> = {\n id: storedMessage.id,\n queueId,\n payload,\n timestamp: storedMessage.timestamp,\n attempt: storedMessage.attempt,\n metadata: storedMessage.metadata,\n };\n\n // Record queue time\n const queueTime = startTime - storedMessage.timestamp;\n this.telemetry.recordQueueTime(\n queueTime,\n this.telemetry.messageAttributes({\n queueId,\n tenantId: storedMessage.tenantId,\n messageId: storedMessage.id,\n })\n );\n\n // Build handler context\n const handlerContext: MessageHandlerContext<z.infer<TPayloadSchema>> = {\n message: queueMessage,\n queue: descriptor,\n consumerId: loopId,\n heartbeat: async () => {\n return this.visibilityManager.heartbeat(\n storedMessage.id,\n queueId,\n this.heartbeatIntervalMs\n );\n },\n complete: async () => {\n await this.#completeMessage(storedMessage, queueId, queueKey, masterQueueKey, descriptor);\n this.telemetry.recordComplete(\n this.telemetry.messageAttributes({\n queueId,\n tenantId: storedMessage.tenantId,\n messageId: storedMessage.id,\n })\n );\n this.telemetry.recordProcessingTime(\n Date.now() - startTime,\n this.telemetry.messageAttributes({\n queueId,\n tenantId: storedMessage.tenantId,\n messageId: storedMessage.id,\n })\n );\n },\n release: async () => {\n await this.#releaseMessage(storedMessage, queueId, queueKey, queueItemsKey, descriptor);\n },\n fail: async (error?: Error) => {\n await this.#handleMessageFailure(\n storedMessage,\n queueId,\n queueKey,\n queueItemsKey,\n masterQueueKey,\n descriptor,\n error\n );\n },\n };\n\n // Call message handler\n try {\n await this.telemetry.trace(\n \"processMessage\",\n async (span) => {\n span.setAttributes({\n [FairQueueAttributes.QUEUE_ID]: queueId,\n [FairQueueAttributes.TENANT_ID]: storedMessage.tenantId,\n [FairQueueAttributes.MESSAGE_ID]: storedMessage.id,\n [FairQueueAttributes.ATTEMPT]: storedMessage.attempt,\n [FairQueueAttributes.CONSUMER_ID]: loopId,\n });\n\n await this.messageHandler!(handlerContext);\n },\n {\n kind: SpanKind.CONSUMER,\n attributes: {\n [MessagingAttributes.OPERATION]: \"process\",\n },\n }\n );\n } catch (error) {\n this.logger.error(\"Message handler error\", {\n messageId: storedMessage.id,\n queueId,\n error: error instanceof Error ? error.message : String(error),\n });\n // Trigger failure handling\n await handlerContext.fail(error instanceof Error ? error : new Error(String(error)));\n }\n }\n\n async #completeMessage(\n storedMessage: StoredMessage<z.infer<TPayloadSchema>>,\n queueId: string,\n queueKey: string,\n masterQueueKey: string,\n descriptor: QueueDescriptor\n ): Promise<void> {\n const shardId = this.masterQueue.getShardForQueue(queueId);\n\n // Complete in visibility manager\n await this.visibilityManager.complete(storedMessage.id, queueId);\n\n // Release concurrency\n if (this.concurrencyManager) {\n await this.concurrencyManager.release(descriptor, storedMessage.id);\n }\n\n // Update master queue if queue is now empty\n await this.redis.updateMasterQueueIfEmpty(masterQueueKey, queueKey, queueId);\n\n this.logger.debug(\"Message completed\", {\n messageId: storedMessage.id,\n queueId,\n });\n }\n\n async #releaseMessage(\n storedMessage: StoredMessage<z.infer<TPayloadSchema>>,\n queueId: string,\n queueKey: string,\n queueItemsKey: string,\n descriptor: QueueDescriptor\n ): Promise<void> {\n // Release back to queue\n await this.visibilityManager.release(\n storedMessage.id,\n queueId,\n queueKey,\n queueItemsKey,\n Date.now() // Put at back of queue\n );\n\n // Release concurrency\n if (this.concurrencyManager) {\n await this.concurrencyManager.release(descriptor, storedMessage.id);\n }\n\n this.logger.debug(\"Message released\", {\n messageId: storedMessage.id,\n queueId,\n });\n }\n\n async #handleMessageFailure(\n storedMessage: StoredMessage<z.infer<TPayloadSchema>>,\n queueId: string,\n queueKey: string,\n queueItemsKey: string,\n masterQueueKey: string,\n descriptor: QueueDescriptor,\n error?: Error\n ): Promise<void> {\n this.telemetry.recordFailure(\n this.telemetry.messageAttributes({\n queueId,\n tenantId: storedMessage.tenantId,\n messageId: storedMessage.id,\n attempt: storedMessage.attempt,\n })\n );\n\n // Check retry strategy\n if (this.retryStrategy) {\n const nextDelay = this.retryStrategy.getNextDelay(storedMessage.attempt, error);\n\n if (nextDelay !== null) {\n // Retry with incremented attempt\n const updatedMessage = {\n ...storedMessage,\n attempt: storedMessage.attempt + 1,\n };\n\n // Release with delay\n await this.visibilityManager.release(\n storedMessage.id,\n queueId,\n queueKey,\n queueItemsKey,\n Date.now() + nextDelay\n );\n\n // Update message in items hash with new attempt count\n await this.redis.hset(queueItemsKey, storedMessage.id, JSON.stringify(updatedMessage));\n\n // Release concurrency\n if (this.concurrencyManager) {\n await this.concurrencyManager.release(descriptor, storedMessage.id);\n }\n\n this.telemetry.recordRetry(\n this.telemetry.messageAttributes({\n queueId,\n tenantId: storedMessage.tenantId,\n messageId: storedMessage.id,\n attempt: storedMessage.attempt + 1,\n })\n );\n\n this.logger.debug(\"Message scheduled for retry\", {\n messageId: storedMessage.id,\n queueId,\n attempt: storedMessage.attempt + 1,\n delayMs: nextDelay,\n });\n\n return;\n }\n }\n\n // Move to DLQ\n await this.#moveToDeadLetterQueue(storedMessage, error?.message);\n\n // Release concurrency\n if (this.concurrencyManager) {\n await this.concurrencyManager.release(descriptor, storedMessage.id);\n }\n }\n\n async #moveToDeadLetterQueue(\n storedMessage: StoredMessage<z.infer<TPayloadSchema>>,\n errorMessage?: string\n ): Promise<void> {\n if (!this.deadLetterQueueEnabled) {\n // Just complete and discard\n await this.visibilityManager.complete(storedMessage.id, storedMessage.queueId);\n return;\n }\n\n const dlqKey = this.keys.deadLetterQueueKey(storedMessage.tenantId);\n const dlqDataKey = this.keys.deadLetterQueueDataKey(storedMessage.tenantId);\n const shardId = this.masterQueue.getShardForQueue(storedMessage.queueId);\n\n const dlqMessage: DeadLetterMessage<z.infer<TPayloadSchema>> = {\n id: storedMessage.id,\n queueId: storedMessage.queueId,\n tenantId: storedMessage.tenantId,\n payload: storedMessage.payload,\n deadLetteredAt: Date.now(),\n attempts: storedMessage.attempt,\n lastError: errorMessage,\n originalTimestamp: storedMessage.timestamp,\n };\n\n // Complete in visibility manager\n await this.visibilityManager.complete(storedMessage.id, storedMessage.queueId);\n\n // Add to DLQ\n const pipeline = this.redis.pipeline();\n pipeline.zadd(dlqKey, dlqMessage.deadLetteredAt, storedMessage.id);\n pipeline.hset(dlqDataKey, storedMessage.id, JSON.stringify(dlqMessage));\n await pipeline.exec();\n\n this.telemetry.recordDLQ(\n this.telemetry.messageAttributes({\n queueId: storedMessage.queueId,\n tenantId: storedMessage.tenantId,\n messageId: storedMessage.id,\n attempt: storedMessage.attempt,\n })\n );\n\n this.logger.info(\"Message moved to DLQ\", {\n messageId: storedMessage.id,\n queueId: storedMessage.queueId,\n tenantId: storedMessage.tenantId,\n attempts: storedMessage.attempt,\n error: errorMessage,\n });\n }\n\n // ============================================================================\n // Private - Reclaim Loop\n // ============================================================================\n\n async #runReclaimLoop(): Promise<void> {\n try {\n for await (const _ of setInterval(this.reclaimIntervalMs, null, {\n signal: this.abortController.signal,\n })) {\n try {\n await this.#reclaimTimedOutMessages();\n } catch (error) {\n this.logger.error(\"Reclaim loop error\", {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n this.logger.debug(\"Reclaim loop aborted\");\n return;\n }\n throw error;\n }\n }\n\n async #reclaimTimedOutMessages(): Promise<void> {\n let totalReclaimed = 0;\n\n for (let shardId = 0; shardId < this.shardCount; shardId++) {\n const reclaimed = await this.visibilityManager.reclaimTimedOut(shardId, (queueId) => ({\n queueKey: this.keys.queueKey(queueId),\n queueItemsKey: this.keys.queueItemsKey(queueId),\n }));\n\n totalReclaimed += reclaimed;\n }\n\n if (totalReclaimed > 0) {\n this.logger.info(\"Reclaimed timed-out messages\", { count: totalReclaimed });\n }\n }\n\n // ============================================================================\n // Private - Cooloff State\n // ============================================================================\n\n #isInCooloff(queueId: string): boolean {\n const state = this.queueCooloffStates.get(queueId);\n if (!state) return false;\n\n if (state.tag === \"cooloff\") {\n if (Date.now() >= state.expiresAt) {\n this.queueCooloffStates.delete(queueId);\n return false;\n }\n return true;\n }\n\n return false;\n }\n\n #incrementCooloff(queueId: string): void {\n const state = this.queueCooloffStates.get(queueId) ?? {\n tag: \"normal\" as const,\n consecutiveFailures: 0,\n };\n\n if (state.tag === \"normal\") {\n const newFailures = state.consecutiveFailures + 1;\n if (newFailures >= this.cooloffThreshold) {\n this.queueCooloffStates.set(queueId, {\n tag: \"cooloff\",\n expiresAt: Date.now() + this.cooloffPeriodMs,\n });\n this.logger.debug(\"Queue entered cooloff\", {\n queueId,\n cooloffPeriodMs: this.cooloffPeriodMs,\n consecutiveFailures: newFailures,\n });\n } else {\n this.queueCooloffStates.set(queueId, {\n tag: \"normal\",\n consecutiveFailures: newFailures,\n });\n }\n }\n }\n\n #resetCooloff(queueId: string): void {\n this.queueCooloffStates.delete(queueId);\n }\n\n // ============================================================================\n // Private - Helpers\n // ============================================================================\n\n #createSchedulerContext(): SchedulerContext {\n return {\n getCurrentConcurrency: async (groupName, groupId) => {\n if (!this.concurrencyManager) return 0;\n return this.concurrencyManager.getCurrentConcurrency(groupName, groupId);\n },\n getConcurrencyLimit: async (groupName, groupId) => {\n if (!this.concurrencyManager) return Infinity;\n return this.concurrencyManager.getConcurrencyLimit(groupName, groupId);\n },\n isAtCapacity: async (groupName, groupId) => {\n if (!this.concurrencyManager) return false;\n return this.concurrencyManager.isAtCapacity(groupName, groupId);\n },\n getQueueDescriptor: (queueId) => {\n return (\n this.queueDescriptorCache.get(queueId) ?? {\n id: queueId,\n tenantId: this.keys.extractTenantId(queueId),\n metadata: {},\n }\n );\n },\n };\n }\n\n // ============================================================================\n // Private - Redis Commands\n // ============================================================================\n\n #registerCommands(): void {\n // Atomic single message enqueue with master queue update\n this.redis.defineCommand(\"enqueueMessageAtomic\", {\n numberOfKeys: 3,\n lua: `\nlocal queueKey = KEYS[1]\nlocal queueItemsKey = KEYS[2]\nlocal masterQueueKey = KEYS[3]\n\nlocal queueId = ARGV[1]\nlocal messageId = ARGV[2]\nlocal timestamp = tonumber(ARGV[3])\nlocal payload = ARGV[4]\n\n-- Add to sorted set (score = timestamp)\nredis.call('ZADD', queueKey, timestamp, messageId)\n\n-- Store payload in hash\nredis.call('HSET', queueItemsKey, messageId, payload)\n\n-- Update master queue with oldest message timestamp\nlocal oldest = redis.call('ZRANGE', queueKey, 0, 0, 'WITHSCORES')\nif #oldest >= 2 then\n redis.call('ZADD', masterQueueKey, oldest[2], queueId)\nend\n\nreturn 1\n `,\n });\n\n // Atomic batch message enqueue with master queue update\n this.redis.defineCommand(\"enqueueBatchAtomic\", {\n numberOfKeys: 3,\n lua: `\nlocal queueKey = KEYS[1]\nlocal queueItemsKey = KEYS[2]\nlocal masterQueueKey = KEYS[3]\n\nlocal queueId = ARGV[1]\n\n-- Args after queueId are triples: [messageId, timestamp, payload, ...]\nfor i = 2, #ARGV, 3 do\n local messageId = ARGV[i]\n local timestamp = tonumber(ARGV[i + 1])\n local payload = ARGV[i + 2]\n \n -- Add to sorted set\n redis.call('ZADD', queueKey, timestamp, messageId)\n \n -- Store payload in hash\n redis.call('HSET', queueItemsKey, messageId, payload)\nend\n\n-- Update master queue with oldest message timestamp\nlocal oldest = redis.call('ZRANGE', queueKey, 0, 0, 'WITHSCORES')\nif #oldest >= 2 then\n redis.call('ZADD', masterQueueKey, oldest[2], queueId)\nend\n\nreturn (#ARGV - 1) / 3\n `,\n });\n\n // Update master queue if queue is empty\n this.redis.defineCommand(\"updateMasterQueueIfEmpty\", {\n numberOfKeys: 2,\n lua: `\nlocal masterQueueKey = KEYS[1]\nlocal queueKey = KEYS[2]\nlocal queueId = ARGV[1]\n\nlocal count = redis.call('ZCARD', queueKey)\nif count == 0 then\n redis.call('ZREM', masterQueueKey, queueId)\n return 1\nelse\n -- Update with oldest message timestamp\n local oldest = redis.call('ZRANGE', queueKey, 0, 0, 'WITHSCORES')\n if #oldest >= 2 then\n redis.call('ZADD', masterQueueKey, oldest[2], queueId)\n end\n return 0\nend\n `,\n });\n\n // Register worker queue commands if enabled\n if (this.workerQueueManager) {\n this.workerQueueManager.registerCommands(this.redis);\n }\n }\n}\n\n// Extend Redis interface for custom commands\ndeclare module \"@internal/redis\" {\n interface RedisCommander<Context> {\n enqueueMessageAtomic(\n queueKey: string,\n queueItemsKey: string,\n masterQueueKey: string,\n queueId: string,\n messageId: string,\n timestamp: string,\n payload: string\n ): Promise<number>;\n\n enqueueBatchAtomic(\n queueKey: string,\n queueItemsKey: string,\n masterQueueKey: string,\n queueId: string,\n ...args: string[]\n ): Promise<number>;\n\n updateMasterQueueIfEmpty(\n masterQueueKey: string,\n queueKey: string,\n queueId: string\n ): Promise<number>;\n }\n}\n"]}
|