File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -35,6 +35,7 @@ import { versionDeprecationMiddleware } from "./lib/version-deprecation.js";
3535
3636export async function createApp ( { redisClient } ) {
3737 const app = express ( ) ;
38+ const redisAvailable = Boolean ( redisClient && redisClient . isOpen ) ;
3839
3940 const __filename = fileURLToPath ( import . meta. url ) ;
4041 const __dirname = path . dirname ( __filename ) ;
@@ -200,17 +201,17 @@ export async function createApp({ redisClient }) {
200201 services : {
201202 database : dbOk ? "ok" : "unavailable" ,
202203 horizon : horizonOk ? "ok" : "unavailable" ,
203- redis : "ok" ,
204+ redis : redisAvailable ? "ok" : "unavailable ",
204205 } ,
205206 } ) ;
206207 } ) ;
207208
208209 const verifyPaymentRateLimit = createVerifyPaymentRateLimit ( {
209- store : createRedisRateLimitStore ( { client : redisClient } ) ,
210+ store : redisAvailable ? createRedisRateLimitStore ( { client : redisClient } ) : undefined ,
210211 } ) ;
211212
212213 const merchantRegistrationRateLimit = createMerchantRegistrationRateLimit ( {
213- store : createRedisRateLimitStore ( { client : redisClient } ) ,
214+ store : redisAvailable ? createRedisRateLimitStore ( { client : redisClient } ) : undefined ,
214215 } ) ;
215216
216217 // x402 pay-per-request on payment creation endpoints (custom middleware flow)
Original file line number Diff line number Diff line change 11import { createHash } from "node:crypto" ;
2- import rateLimit from "express-rate-limit" ;
2+ import rateLimit , { ipKeyGenerator } from "express-rate-limit" ;
33
44const DEFAULT_CREATE_PAYMENT_RATE_LIMIT_MAX = 50 ;
55const DEFAULT_CREATE_PAYMENT_RATE_LIMIT_WINDOW_MS = 60 * 1000 ;
@@ -44,7 +44,7 @@ export function getCreatePaymentRateLimitKey(req) {
4444 return `merchant:${ req . merchant . id } ` ;
4545 }
4646
47- return req . ip ;
47+ return ipKeyGenerator ( req . ip ) ;
4848}
4949
5050export function getRetryAfterSeconds ( resetTime , now = new Date ( ) , windowMs = DEFAULT_CREATE_PAYMENT_RATE_LIMIT_WINDOW_MS ) {
Original file line number Diff line number Diff line change @@ -16,7 +16,13 @@ validateEnvironmentVariables();
1616const port = process . env . PORT || 4000 ;
1717
1818async function startServer ( ) {
19- const redisClient = await connectRedisClient ( ) ;
19+ let redisClient = null ;
20+ try {
21+ redisClient = await connectRedisClient ( ) ;
22+ logger . info ( "redis connected" ) ;
23+ } catch ( err ) {
24+ logger . warn ( { err } , "redis unavailable, continuing with in-memory fallbacks" ) ;
25+ }
2026
2127 const { app, io } = await createApp ( { redisClient } ) ;
2228
@@ -34,7 +40,7 @@ async function startServer() {
3440
3541 const results = await Promise . allSettled ( [
3642 probe ( "Database" , ( ) => pool . query ( "SELECT 1" ) ) ,
37- probe ( "Redis" , ( ) => redisClient . ping ( ) ) ,
43+ probe ( "Redis" , ( ) => ( redisClient ? redisClient . ping ( ) : Promise . reject ( new Error ( "redis unavailable" ) ) ) ) ,
3844 probe ( "Horizon" , ( ) => isHorizonReachable ( ) )
3945 ] ) ;
4046
You can’t perform that action at this time.
0 commit comments