Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions package.json
Original file line number Diff line number Diff line change
@@ -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,
Expand Down Expand Up @@ -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",
Expand All @@ -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"
Expand Down
19 changes: 16 additions & 3 deletions src/httpClient/redisStorage.ts
Original file line number Diff line number Diff line change
@@ -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<typeof createClient>) {
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
Expand All @@ -35,6 +45,9 @@ export default function createRedisStorage(client: ReturnType<typeof createClien
},

async remove(key) {
if (!client.isReady) {
await client.connect();
}
await client.del(`${KEY_PREFIX}${key}`);
},
});
Expand Down
Loading