diff --git a/package.json b/package.json index 3a7c3cb..5147e18 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lambda-essentials-ts", - "version": "7.0.3", + "version": "7.0.4", "description": "A selection of the finest modules supporting authorization, API routing, error handling, logging and sending HTTP requests.", "main": "lib/index.js", "private": false, @@ -28,12 +28,12 @@ "dependencies": { "@aws-sdk/client-kms": "^3.930.0", "@aws-sdk/client-secrets-manager": "^3.930.0", - "@types/node": "^24.10.1", + "@types/node": "^25.0.3", "axios": "1.13.2", - "axios-cache-interceptor": "^1.8.3", + "axios-cache-interceptor": "1.11.2", "fast-safe-stringify": "~2.1.1", "is-error": "~2.2.2", - "jsonwebtoken": "9.0.2", + "jsonwebtoken": "9.0.3", "md5": "~2.3.0", "openapi-factory": "5.4.60", "retry-axios": "~3.2.1", @@ -42,17 +42,17 @@ "devDependencies": { "@types/jest": "^29.5.14", "@types/newrelic": "^9.14.8", - "redis": "^5.9.0", "axios-mock-adapter": "^2.1.0", "eslint": "^8.57.1", - "eslint-config-cimpress-atsquad": "^2.2.0-beta", + "eslint-config-cimpress-atsquad": "^2.2.3", "husky": "^9.1.7", "jest": "^29.7.0", "lint-staged": "^15.5.2", "prettier": "^2.8.8", - "ts-jest": "^29.4.5", + "ts-jest": "^29.4.6", "ts-node": "^10.9.2", - "typescript": "^5.9.3" + "typescript": "^5.9.3", + "redis": "^5.10.0" }, "eslintConfig": { "extends": "cimpress-atsquad" diff --git a/src/httpClient/redisStorage.ts b/src/httpClient/redisStorage.ts index cf07771..b819dff 100644 --- a/src/httpClient/redisStorage.ts +++ b/src/httpClient/redisStorage.ts @@ -1,22 +1,32 @@ import { buildStorage, canStale } from 'axios-cache-interceptor'; import type { StorageValue } from 'axios-cache-interceptor'; -// eslint-disable-next-line import/no-extraneous-dependencies -import { createClient } from 'redis'; const KEY_PREFIX = 'axios-cache-'; const MIN_TTL = 60000; -export default function createRedisStorage(client: ReturnType) { +export default function createRedisStorage(redisEndpoint: string) { + // eslint-disable-next-line import/no-extraneous-dependencies + const redis = require('redis'); + + const client = redis.createClient({ url: redisEndpoint }); + // source https://axios-cache-interceptor.js.org/guide/storages#node-redis-storage return buildStorage({ async find(key) { + if (!client.isReady) { + await client.connect(); + } const result = await client.get(`${KEY_PREFIX}${key}`); return result ? (JSON.parse(result) as StorageValue) : undefined; }, // eslint-disable-next-line complexity async set(key, value, req) { + if (!client.isReady) { + await client.connect(); + } + await client.set(`${KEY_PREFIX}${key}`, JSON.stringify(value), { PXAT: // We don't want to keep indefinitely values in the storage if @@ -35,6 +45,9 @@ export default function createRedisStorage(client: ReturnType