@@ -9,6 +9,7 @@ import { KeyValueCache } from 'apollo-server-caching'
99import { ResponseData , RequestOptions as UndiciRequestOptions } from 'undici/types/dispatcher'
1010import { ApolloError } from 'apollo-server-errors'
1111import { EventEmitter , Readable } from 'stream'
12+ import { Logger } from 'apollo-server-types'
1213
1314type AbortSignal = unknown
1415
@@ -31,9 +32,10 @@ export type RequestOptions = {
3132 signal ?: AbortSignal | EventEmitter | null
3233} & CacheTTLOptions
3334
34- export type Request = UndiciRequestOptions & CacheTTLOptions & {
35- headers : Dictionary < string >
36- }
35+ export type Request = UndiciRequestOptions &
36+ CacheTTLOptions & {
37+ headers : Dictionary < string >
38+ }
3739
3840export type Response < TResult > = {
3941 body : TResult
@@ -45,6 +47,7 @@ export interface LRUOptions {
4547}
4648
4749export interface HTTPDataSourceOptions {
50+ logger ?: Logger
4851 pool ?: Pool
4952 requestOptions ?: RequestOptions
5053 clientOptions ?: Pool . Options
@@ -86,6 +89,7 @@ export abstract class HTTPDataSource<TContext = any> extends DataSource {
8689 public context ! : TContext
8790 private storageAdapter ! : Keyv
8891 private pool : Pool
92+ private logger ?: Logger
8993 private globalRequestOptions ?: RequestOptions
9094 private readonly memoizedResults : QuickLRU < string , Response < any > >
9195
@@ -96,6 +100,7 @@ export abstract class HTTPDataSource<TContext = any> extends DataSource {
96100 } )
97101 this . pool = options ?. pool ?? new Pool ( this . baseURL , options ?. clientOptions )
98102 this . globalRequestOptions = options ?. requestOptions
103+ this . logger = options ?. logger
99104 }
100105
101106 /**
@@ -243,12 +248,13 @@ export abstract class HTTPDataSource<TContext = any> extends DataSource {
243248 this . onResponse < TResult > ( options , response )
244249
245250 if ( options . requestCache && this . isResponseCacheable < TResult > ( options , response ) ) {
246- this . storageAdapter . set ( cacheKey , response , options . requestCache ?. maxTtl )
247- this . storageAdapter . set (
248- `staleIfError:${ cacheKey } ` ,
249- response ,
250- options . requestCache ?. maxTtlIfError ,
251- )
251+ // TODO log errors with external logger
252+ this . storageAdapter
253+ . set ( cacheKey , response , options . requestCache ?. maxTtl )
254+ . catch ( ( err ) => this . logger ?. error ( err ) )
255+ this . storageAdapter
256+ . set ( `staleIfError:${ cacheKey } ` , response , options . requestCache ?. maxTtlIfError )
257+ . catch ( ( err ) => this . logger ?. error ( err ) )
252258 }
253259
254260 return response
0 commit comments