aboutsummaryrefslogtreecommitdiff
path: root/node_modules/@types/cacheable-request/index.d.ts
blob: 832f9b9e854b1040a22732bbe7e2122c0ad5dabc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// Type definitions for cacheable-request 6.0
// Project: https://github.com/lukechilds/cacheable-request#readme
// Definitions by: BendingBender <https://github.com/BendingBender>
//                 Paul Melnikow <https://github.com/paulmelnikow>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.3

/// <reference types="node" />

import { request, RequestOptions, ClientRequest, ServerResponse } from 'http';
import { URL } from 'url';
import { EventEmitter } from 'events';
import { Store } from 'keyv';
import { Options as CacheSemanticsOptions } from 'http-cache-semantics';
import ResponseLike = require('responselike');

export = CacheableRequest;

declare const CacheableRequest: CacheableRequest;

type RequestFn = typeof request;

interface CacheableRequest {
    new (requestFn: RequestFn, storageAdapter?: string | CacheableRequest.StorageAdapter): (
        opts: string | URL | (RequestOptions & CacheSemanticsOptions),
        cb?: (response: ServerResponse | ResponseLike) => void
    ) => CacheableRequest.Emitter;

    RequestError: typeof RequestErrorCls;
    CacheError: typeof CacheErrorCls;
}

declare namespace CacheableRequest {
    type StorageAdapter = Store<any>;

    interface Options {
        /**
         * If the cache should be used. Setting this to `false` will completely bypass the cache for the current request.
         * @default true
         */
        cache?: boolean | undefined;

        /**
         * If set to `true` once a cached resource has expired it is deleted and will have to be re-requested.
         *
         * If set to `false`, after a cached resource's TTL expires it is kept in the cache and will be revalidated
         * on the next request with `If-None-Match`/`If-Modified-Since` headers.
         * @default false
         */
        strictTtl?: boolean | undefined;

        /**
         * Limits TTL. The `number` represents milliseconds.
         * @default undefined
         */
        maxTtl?: number | undefined;

        /**
         * When set to `true`, if the DB connection fails we will automatically fallback to a network request.
         * DB errors will still be emitted to notify you of the problem even though the request callback may succeed.
         * @default false
         */
        automaticFailover?: boolean | undefined;

        /**
         * Forces refreshing the cache. If the response could be retrieved from the cache, it will perform a
         * new request and override the cache instead.
         * @default false
         */
        forceRefresh?: boolean | undefined;
    }

    interface Emitter extends EventEmitter {
        addListener(event: 'request', listener: (request: ClientRequest) => void): this;
        addListener(
            event: 'response',
            listener: (response: ServerResponse | ResponseLike) => void
        ): this;
        addListener(event: 'error', listener: (error: RequestError | CacheError) => void): this;
        on(event: 'request', listener: (request: ClientRequest) => void): this;
        on(event: 'response', listener: (response: ServerResponse | ResponseLike) => void): this;
        on(event: 'error', listener: (error: RequestError | CacheError) => void): this;
        once(event: 'request', listener: (request: ClientRequest) => void): this;
        once(event: 'response', listener: (response: ServerResponse | ResponseLike) => void): this;
        once(event: 'error', listener: (error: RequestError | CacheError) => void): this;
        prependListener(event: 'request', listener: (request: ClientRequest) => void): this;
        prependListener(
            event: 'response',
            listener: (response: ServerResponse | ResponseLike) => void
        ): this;
        prependListener(event: 'error', listener: (error: RequestError | CacheError) => void): this;
        prependOnceListener(event: 'request', listener: (request: ClientRequest) => void): this;
        prependOnceListener(
            event: 'response',
            listener: (response: ServerResponse | ResponseLike) => void
        ): this;
        prependOnceListener(
            event: 'error',
            listener: (error: RequestError | CacheError) => void
        ): this;
        removeListener(event: 'request', listener: (request: ClientRequest) => void): this;
        removeListener(
            event: 'response',
            listener: (response: ServerResponse | ResponseLike) => void
        ): this;
        removeListener(event: 'error', listener: (error: RequestError | CacheError) => void): this;
        off(event: 'request', listener: (request: ClientRequest) => void): this;
        off(event: 'response', listener: (response: ServerResponse | ResponseLike) => void): this;
        off(event: 'error', listener: (error: RequestError | CacheError) => void): this;
        removeAllListeners(event?: 'request' | 'response' | 'error'): this;
        listeners(event: 'request'): Array<(request: ClientRequest) => void>;
        listeners(event: 'response'): Array<(response: ServerResponse | ResponseLike) => void>;
        listeners(event: 'error'): Array<(error: RequestError | CacheError) => void>;
        rawListeners(event: 'request'): Array<(request: ClientRequest) => void>;
        rawListeners(event: 'response'): Array<(response: ServerResponse | ResponseLike) => void>;
        rawListeners(event: 'error'): Array<(error: RequestError | CacheError) => void>;
        emit(event: 'request', request: ClientRequest): boolean;
        emit(event: 'response', response: ServerResponse | ResponseLike): boolean;
        emit(event: 'error', error: RequestError | CacheError): boolean;
        eventNames(): Array<'request' | 'response' | 'error'>;
        listenerCount(type: 'request' | 'response' | 'error'): number;
    }

    type RequestError = RequestErrorCls;
    type CacheError = CacheErrorCls;
}

declare class RequestErrorCls extends Error {
    readonly name: 'RequestError';

    constructor(error: Error);
}
declare class CacheErrorCls extends Error {
    readonly name: 'CacheError';

    constructor(error: Error);
}