@routup/rate-limit-redis
Version:
Red adapter for the routup rate-limit plugin.
1 lines • 4.65 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../src/module.ts"],"sourcesContent":["import type { Client } from 'redis-extension';\nimport { createClient, useClient } from 'redis-extension';\nimport type {\n IncrementResponse,\n Options,\n Store,\n} from '@routup/rate-limit';\nimport {\n calculateNextResetTime,\n} from '@routup/rate-limit';\n\nexport class RedisStore implements Store {\n options!: Options;\n\n client : Client;\n\n constructor(connectionString?: string) {\n if (typeof connectionString === 'undefined') {\n this.client = useClient();\n } else {\n this.client = createClient({\n connectionString,\n });\n }\n }\n\n /**\n * Method that initializes the store.\n *\n * @param options {Options} - The options used to setup the middleware.\n */\n init(options: Options) : void {\n this.options = options;\n }\n\n /**\n * Method to increment a client's hit counter.\n *\n * @param key {string} - The identifier for a client.\n *\n * @returns {IncrementResponse} - The number of hits and reset time for that client.\n *\n * @public\n */\n async increment(key: string) : Promise<IncrementResponse> {\n key = this.buildKey(key);\n const entry = await this.client.get(key);\n\n let totalHits : number;\n if (entry) {\n totalHits = parseInt(entry, 10) + 1;\n } else {\n totalHits = 1;\n }\n\n this.client.set(\n key,\n totalHits,\n 'PX',\n this.options.windowMs,\n );\n\n const resetTime = calculateNextResetTime(this.options.windowMs);\n\n return {\n totalHits,\n resetTime,\n };\n }\n\n /**\n * Method to decrement a client's hit counter.\n *\n * @param key {string} - The identifier for a client.\n *\n * @public\n */\n async decrement(key: string): Promise<void> {\n key = this.buildKey(key);\n const entry = await this.client.get(key);\n if (entry) {\n const totalHits = parseInt(entry, 10) - 1;\n\n this.client.set(\n key,\n totalHits,\n 'PX',\n this.options.windowMs,\n );\n }\n }\n\n /**\n * Method to reset a client's hit counter.\n *\n * @param key {string} - The identifier for a client.\n *\n * @public\n */\n async reset(key: string) : Promise<void> {\n key = this.buildKey(key);\n\n this.client.del(key);\n }\n\n /**\n * Method to build redis key.\n *\n * @param key\n * @protected\n */\n protected buildKey(key: string) {\n return `rate-limit:${key}`;\n }\n}\n"],"names":["RedisStore","init","options","increment","key","buildKey","entry","client","get","totalHits","parseInt","set","windowMs","resetTime","calculateNextResetTime","decrement","reset","del","connectionString","useClient","createClient"],"mappings":";;;;;;;AAWO,MAAMA,UAAAA,CAAAA;AAeT;;;;QAKAC,IAAAA,CAAKC,OAAgB,EAAS;QAC1B,IAAI,CAACA,OAAO,GAAGA,OAAAA;AACnB,IAAA;AAEA;;;;;;;;QASA,MAAMC,SAAAA,CAAUC,GAAW,EAA+B;QACtDA,GAAAA,GAAM,IAAI,CAACC,QAAQ,CAACD,GAAAA,CAAAA;AACpB,QAAA,MAAME,QAAQ,MAAM,IAAI,CAACC,MAAM,CAACC,GAAG,CAACJ,GAAAA,CAAAA;QAEpC,IAAIK,SAAAA;AACJ,QAAA,IAAIH,KAAAA,EAAO;YACPG,SAAAA,GAAYC,QAAAA,CAASJ,OAAO,EAAA,CAAA,GAAM,CAAA;QACtC,CAAA,MAAO;YACHG,SAAAA,GAAY,CAAA;AAChB,QAAA;AAEA,QAAA,IAAI,CAACF,MAAM,CAACI,GAAG,CACXP,GAAAA,EACAK,SAAAA,EACA,IAAA,EACA,IAAI,CAACP,OAAO,CAACU,QAAQ,CAAA;AAGzB,QAAA,MAAMC,YAAYC,gCAAAA,CAAuB,IAAI,CAACZ,OAAO,CAACU,QAAQ,CAAA;QAE9D,OAAO;AACHH,YAAAA,SAAAA;AACAI,YAAAA;AACJ,SAAA;AACJ,IAAA;AAEA;;;;;;QAOA,MAAME,SAAAA,CAAUX,GAAW,EAAiB;QACxCA,GAAAA,GAAM,IAAI,CAACC,QAAQ,CAACD,GAAAA,CAAAA;AACpB,QAAA,MAAME,QAAQ,MAAM,IAAI,CAACC,MAAM,CAACC,GAAG,CAACJ,GAAAA,CAAAA;AACpC,QAAA,IAAIE,KAAAA,EAAO;YACP,MAAMG,SAAAA,GAAYC,QAAAA,CAASJ,KAAAA,EAAO,EAAA,CAAA,GAAM,CAAA;AAExC,YAAA,IAAI,CAACC,MAAM,CAACI,GAAG,CACXP,GAAAA,EACAK,SAAAA,EACA,IAAA,EACA,IAAI,CAACP,OAAO,CAACU,QAAQ,CAAA;AAE7B,QAAA;AACJ,IAAA;AAEA;;;;;;QAOA,MAAMI,KAAAA,CAAMZ,GAAW,EAAkB;QACrCA,GAAAA,GAAM,IAAI,CAACC,QAAQ,CAACD,GAAAA,CAAAA;AAEpB,QAAA,IAAI,CAACG,MAAM,CAACU,GAAG,CAACb,GAAAA,CAAAA;AACpB,IAAA;AAEA;;;;;QAMUC,QAAAA,CAASD,GAAW,EAAE;QAC5B,OAAO,CAAC,WAAW,EAAEA,GAAAA,CAAAA,CAAK;AAC9B,IAAA;AAjGA,IAAA,WAAA,CAAYc,gBAAyB,CAAE;QACnC,IAAI,OAAOA,qBAAqB,WAAA,EAAa;YACzC,IAAI,CAACX,MAAM,GAAGY,wBAAAA,EAAAA;QAClB,CAAA,MAAO;YACH,IAAI,CAACZ,MAAM,GAAGa,2BAAAA,CAAa;AACvBF,gBAAAA;AACJ,aAAA,CAAA;AACJ,QAAA;AACJ,IAAA;AA0FJ;;;;;;;;"}