@chainlink/external-adapter-framework 0.0.111 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adapter/basic.d.ts +37 -3
- package/adapter/basic.js +138 -2
- package/adapter/basic.js.map +1 -1
- package/adapter/price.d.ts +33 -5
- package/adapter/price.js +41 -2
- package/adapter/price.js.map +1 -1
- package/adapter/types.d.ts +18 -1
- package/cache/index.d.ts +3 -10
- package/cache/index.js +4 -46
- package/cache/index.js.map +1 -1
- package/cache/redis.d.ts +1 -8
- package/cache/redis.js +22 -39
- package/cache/redis.js.map +1 -1
- package/config/index.d.ts +6 -1
- package/config/index.js +20 -12
- package/config/index.js.map +1 -1
- package/examples/bank-frick/accounts.d.ts +2 -3
- package/examples/bank-frick/accounts.js +1 -4
- package/examples/bank-frick/accounts.js.map +1 -1
- package/examples/bank-frick/config/index.d.ts +1 -1
- package/examples/coingecko/src/crypto-utils.d.ts +5 -5
- package/examples/coingecko/src/crypto-utils.js +1 -2
- package/examples/coingecko/src/crypto-utils.js.map +1 -1
- package/examples/coingecko/src/endpoint/coins.js.map +1 -1
- package/examples/coingecko/src/endpoint/crypto-marketcap.d.ts +1 -1
- package/examples/coingecko/src/endpoint/crypto-marketcap.js +2 -2
- package/examples/coingecko/src/endpoint/crypto-marketcap.js.map +1 -1
- package/examples/coingecko/src/endpoint/crypto-volume.d.ts +1 -1
- package/examples/coingecko/src/endpoint/crypto-volume.js +2 -2
- package/examples/coingecko/src/endpoint/crypto-volume.js.map +1 -1
- package/examples/coingecko/src/endpoint/crypto.d.ts +1 -4
- package/examples/coingecko/src/endpoint/crypto.js +2 -2
- package/examples/coingecko/src/endpoint/crypto.js.map +1 -1
- package/examples/coingecko/src/endpoint/dominance.d.ts +1 -1
- package/examples/coingecko/src/endpoint/dominance.js +2 -2
- package/examples/coingecko/src/endpoint/dominance.js.map +1 -1
- package/examples/coingecko/src/endpoint/global-marketcap.d.ts +1 -1
- package/examples/coingecko/src/endpoint/global-marketcap.js +2 -2
- package/examples/coingecko/src/endpoint/global-marketcap.js.map +1 -1
- package/examples/coingecko/src/global-utils.d.ts +3 -3
- package/examples/coingecko/src/global-utils.js.map +1 -1
- package/examples/coingecko/src/index.d.ts +1 -1
- package/examples/coingecko-old/batch-warming.d.ts +1 -1
- package/examples/coingecko-old/batch-warming.js +2 -2
- package/examples/coingecko-old/batch-warming.js.map +1 -1
- package/examples/coingecko-old/rest.js.map +1 -1
- package/examples/cryptocompare/src/endpoints/crypto.d.ts +1 -1
- package/examples/cryptocompare/src/index.d.ts +1 -1
- package/examples/genesis/sseStream.d.ts +2 -2
- package/examples/genesis/sseStream.js +15 -8
- package/examples/genesis/sseStream.js.map +1 -1
- package/examples/ncfx/websocket.d.ts +1 -1
- package/index.d.ts +3 -1
- package/index.js +4 -6
- package/index.js.map +1 -1
- package/metrics/index.d.ts +2 -0
- package/metrics/index.js +5 -4
- package/metrics/index.js.map +1 -1
- package/package.json +4 -7
- package/rate-limiting/index.d.ts +2 -2
- package/transports/batch-warming.d.ts +9 -9
- package/transports/batch-warming.js +40 -13
- package/transports/batch-warming.js.map +1 -1
- package/transports/index.d.ts +23 -26
- package/transports/index.js +2 -59
- package/transports/index.js.map +1 -1
- package/transports/metrics.d.ts +1 -1
- package/transports/rest.d.ts +5 -4
- package/transports/rest.js +16 -22
- package/transports/rest.js.map +1 -1
- package/transports/sse.d.ts +6 -7
- package/transports/sse.js +2 -6
- package/transports/sse.js.map +1 -1
- package/transports/websocket.d.ts +6 -7
- package/transports/websocket.js +5 -9
- package/transports/websocket.js.map +1 -1
- package/util/logger.d.ts +4 -0
- package/util/logger.js +45 -4
- package/util/logger.js.map +1 -1
- package/util/subscription-set/subscription-set.d.ts +1 -1
- package/util/subscription-set/subscription-set.js +1 -1
- package/util/subscription-set/subscription-set.js.map +1 -1
- package/util/test-payload-loader.d.ts +1 -0
- package/util/test-payload-loader.js +2 -1
- package/util/test-payload-loader.js.map +1 -1
- package/validation/error.d.ts +1 -3
- package/validation/error.js +1 -3
- package/validation/error.js.map +1 -1
- package/validation/index.js +12 -14
- package/validation/index.js.map +1 -1
- package/validation/input-params.d.ts +0 -1
- package/validation/input-params.js +0 -28
- package/validation/input-params.js.map +1 -1
- package/validation/input-validator.js +1 -2
- package/validation/input-validator.js.map +1 -1
- package/adapter.d.ts +0 -156
- package/adapter.js +0 -200
- package/adapter.js.map +0 -1
- package/examples/coingecko/batch-warming.d.ts +0 -7
- package/examples/coingecko/batch-warming.js +0 -54
- package/examples/coingecko/batch-warming.js.map +0 -1
- package/examples/coingecko/index.d.ts +0 -2
- package/examples/coingecko/index.js +0 -12
- package/examples/coingecko/index.js.map +0 -1
- package/examples/coingecko/rest.d.ts +0 -12
- package/examples/coingecko/rest.js +0 -55
- package/examples/coingecko/rest.js.map +0 -1
- package/examples/coingecko/src/cryptoUtils.d.ts +0 -31
- package/examples/coingecko/src/cryptoUtils.js +0 -60
- package/examples/coingecko/src/globalUtils.d.ts +0 -27
- package/examples/coingecko/src/globalUtils.js +0 -46
- package/validation/override-functions.d.ts +0 -3
- package/validation/override-functions.js +0 -41
- package/validation/override-functions.js.map +0 -1
- package/validation/preset-tokens.json +0 -23
- package/validation/validator.d.ts +0 -47
- package/validation/validator.js +0 -303
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch-warming.js","sourceRoot":"","sources":["../../../../src/examples/coingecko-old/batch-warming.ts"],"names":[],"mappings":";;;AACA,2CAA+
|
|
1
|
+
{"version":3,"file":"batch-warming.js","sourceRoot":"","sources":["../../../../src/examples/coingecko-old/batch-warming.ts"],"names":[],"mappings":";;;AACA,2CAA+C;AAC/C,kEAAsE;AAKtE,MAAM,WAAW,GAAG,sCAAsC,CAAA;AAO1D,MAAM,eAAe,GAAoB;IACvC,MAAM,EAAE;QACN,WAAW,EACT,8IAA8I;QAChJ,QAAQ,EAAE,KAAK;KAChB;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,yDAAyD;QACtE,QAAQ,EAAE,IAAI;KACf;IACD,KAAK,EAAE;QACL,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC;QACzB,WAAW,EAAE,0CAA0C;QACvD,QAAQ,EAAE,IAAI;KACf;CACF,CAAA;AAYD,MAAM,sBAAsB,GAAG,IAAI,qCAAqB,CAAC;IACvD,cAAc,EAAE,CACd,MAA8B,EAC9B,MAAqB,EACoB,EAAE;QAC3C,OAAO;YACL,OAAO,EAAE,WAAW;YACpB,GAAG,EAAE,eAAe;YACpB,MAAM,EAAE,KAAK;YACb,MAAM,EAAE;gBACN,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;gBACtD,aAAa,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;gBACjE,gBAAgB,EAAE,MAAM,CAAC,OAAO;aACjC;SACF,CAAA;IACH,CAAC;IACD,aAAa,EAAE,CACb,MAA8B,EAC9B,GAAwC,EACA,EAAE;QAC1C,MAAM,OAAO,GAAG,EAA4C,CAAA;QAC5D,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACpD,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBAClD,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;oBACvB,KAAK,EAAE,KAAK;iBACb,CAAC,CAAA;aACH;SACF;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;CACF,CAAC,CAAA;AAEW,QAAA,aAAa,GAAG,IAAI,yBAAe,CAAC;IAC/C,IAAI,EAAE,OAAO;IACb,SAAS,EAAE,sBAAsB;IACjC,eAAe;CAChB,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rest.js","sourceRoot":"","sources":["../../../../src/examples/coingecko-old/rest.ts"],"names":[],"mappings":";;;AACA,2CAA+C;AAC/C,iDAAgD;AAIhD,MAAM,WAAW,GAAG,kCAAkC,CAAA;AAOtD,MAAM,eAAe,GAAoB;IACvC,MAAM,EAAE;QACN,WAAW,EACT,8IAA8I;QAChJ,QAAQ,EAAE,KAAK;KAChB;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,yDAAyD;QACtE,QAAQ,EAAE,IAAI;KACf;IACD,KAAK,EAAE;QACL,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC;QACzB,WAAW,EAAE,0CAA0C;QACvD,QAAQ,EAAE,IAAI;KACf;CACF,CAAA;AAaD,MAAM,qBAAqB,GAAG,IAAI,0BAAa,CAAC;IAC9C,cAAc,EAAE,CACd,GAAyC,EACA,EAAE;QAC3C,OAAO;YACL,OAAO,EAAE,WAAW;YACpB,GAAG,EAAE,eAAe;YACpB,MAAM,EAAE,KAAK;YACb,MAAM,EAAE;gBACN,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI;gBACjC,aAAa,EAAE,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK;aAC7C;SACF,CAAA;IACH,CAAC;IACD,aAAa,EAAE,CACb,GAAyC,EACzC,GAAwC,EACD,EAAE;QACzC,OAAO;YACL,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,UAAU,EAAE,GAAG;YACf,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"rest.js","sourceRoot":"","sources":["../../../../src/examples/coingecko-old/rest.ts"],"names":[],"mappings":";;;AACA,2CAA+C;AAC/C,iDAAgD;AAIhD,MAAM,WAAW,GAAG,kCAAkC,CAAA;AAOtD,MAAM,eAAe,GAAoB;IACvC,MAAM,EAAE;QACN,WAAW,EACT,8IAA8I;QAChJ,QAAQ,EAAE,KAAK;KAChB;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,yDAAyD;QACtE,QAAQ,EAAE,IAAI;KACf;IACD,KAAK,EAAE;QACL,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC;QACzB,WAAW,EAAE,0CAA0C;QACvD,QAAQ,EAAE,IAAI;KACf;CACF,CAAA;AAaD,MAAM,qBAAqB,GAAG,IAAI,0BAAa,CAAC;IAC9C,cAAc,EAAE,CACd,GAAyC,EACA,EAAE;QAC3C,OAAO;YACL,OAAO,EAAE,WAAW;YACpB,GAAG,EAAE,eAAe;YACpB,MAAM,EAAE,KAAK;YACb,MAAM,EAAE;gBACN,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI;gBACjC,aAAa,EAAE,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK;aAC7C;SACF,CAAA;IACH,CAAC;IACD,aAAa,EAAE,CACb,GAAyC,EACzC,GAAwC,EACD,EAAE;QACzC,OAAO;YACL,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,UAAU,EAAE,GAAG;YACf,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;SACvC,CAAA;IAC5C,CAAC;IACD,OAAO,EAAE;QACP,iBAAiB,EAAE;YACjB,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,CAAC;SACd;KACF;CACF,CAAC,CAAA;AAEW,QAAA,YAAY,GAAG,IAAI,yBAAe,CAAC;IAC9C,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,CAAC,KAAK,CAAC;IAChB,SAAS,EAAE,qBAAqB;IAChC,eAAe;CAChB,CAAC,CAAA"}
|
|
@@ -24,5 +24,5 @@ export interface WSErrorType {
|
|
|
24
24
|
INFO: string;
|
|
25
25
|
}
|
|
26
26
|
export declare const transport: WebSocketTransport<AdapterRequestParams, Message, import("../../../../config").SettingsMap>;
|
|
27
|
-
export declare const endpoint: PriceEndpoint<AdapterRequestParams,
|
|
27
|
+
export declare const endpoint: PriceEndpoint<AdapterRequestParams, import("../../../../transports").BackgroundStoredResultType, import("../../../../config").SettingsMap>;
|
|
28
28
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { PriceAdapter } from '../../../../src/adapter';
|
|
3
3
|
export declare const adapter: PriceAdapter<import("../../../config").SettingsMap>;
|
|
4
|
-
export declare const server: () => Promise<import("fastify").FastifyInstance<import("
|
|
4
|
+
export declare const server: () => Promise<import("fastify/types/instance").FastifyInstance<import("fastify").RawServerDefault, import("http").IncomingMessage, import("http").ServerResponse<import("http").IncomingMessage>, import("fastify").FastifyBaseLogger, import("fastify").FastifyTypeProviderDefault> | undefined>;
|
|
@@ -10,7 +10,7 @@ export declare const inputParameters: InputParameters;
|
|
|
10
10
|
declare type Price = number;
|
|
11
11
|
declare type Quantity = number;
|
|
12
12
|
export declare type Entry = ['BUY' | 'SELL' | '', Price, Quantity];
|
|
13
|
-
export declare const sseTransport: SSETransport<AdapterRequestParams, undefined,
|
|
13
|
+
export declare const sseTransport: SSETransport<AdapterRequestParams, undefined, SettingsMap>;
|
|
14
14
|
export declare const calculateQWAPprice: (entries: Entry[]) => number | undefined;
|
|
15
|
-
export declare const sseEndpoint: AdapterEndpoint<AdapterRequestParams,
|
|
15
|
+
export declare const sseEndpoint: AdapterEndpoint<AdapterRequestParams, import("../../transports").BackgroundStoredResultType, SettingsMap>;
|
|
16
16
|
export {};
|
|
@@ -8,6 +8,7 @@ const crypto_1 = __importDefault(require("crypto"));
|
|
|
8
8
|
const adapter_1 = require("../../adapter");
|
|
9
9
|
const transports_1 = require("../../transports");
|
|
10
10
|
const util_1 = require("../../util");
|
|
11
|
+
const DEFAULT_ENDPOINT = 'https://api.genesistrading.com';
|
|
11
12
|
exports.inputParameters = {
|
|
12
13
|
base: {
|
|
13
14
|
aliases: ['from', 'coin'],
|
|
@@ -86,15 +87,17 @@ exports.sseTransport = new transports_1.SSETransport({
|
|
|
86
87
|
const value = (0, exports.calculateQWAPprice)(entries);
|
|
87
88
|
if (value) {
|
|
88
89
|
const [base, quote] = providerData.Symbol.split('-');
|
|
89
|
-
return [
|
|
90
|
+
return [
|
|
91
|
+
{
|
|
90
92
|
params: { base, quote },
|
|
91
|
-
value
|
|
92
|
-
}
|
|
93
|
+
value,
|
|
94
|
+
},
|
|
95
|
+
];
|
|
93
96
|
}
|
|
94
97
|
return [];
|
|
95
98
|
},
|
|
96
|
-
}
|
|
97
|
-
]
|
|
99
|
+
},
|
|
100
|
+
],
|
|
98
101
|
});
|
|
99
102
|
const calculateQWAPprice = (entries) => {
|
|
100
103
|
const meanPriceByQuantity = {};
|
|
@@ -116,8 +119,10 @@ const calculateQWAPprice = (entries) => {
|
|
|
116
119
|
if (Object.keys(meanPriceByQuantity).length === 0) {
|
|
117
120
|
return;
|
|
118
121
|
}
|
|
119
|
-
const priceTimesQuantitySum = Object.values(meanPriceByQuantity)
|
|
120
|
-
|
|
122
|
+
const priceTimesQuantitySum = Object.values(meanPriceByQuantity).reduce((e1, e2) => [
|
|
123
|
+
NaN,
|
|
124
|
+
e1[1] + e2[1],
|
|
125
|
+
])[1];
|
|
121
126
|
// Return a sum of all the products divided by the total quantity
|
|
122
127
|
return priceTimesQuantitySum / totalQuantity;
|
|
123
128
|
};
|
|
@@ -132,7 +137,9 @@ const prepareRequestUrl = (config, endpoint, payload) => {
|
|
|
132
137
|
const hash = crypto_1.default.createHmac('sha384', Buffer.from(apiSecret ?? ''));
|
|
133
138
|
const data = hash.update(Buffer.from(apiKey + payload + nonce));
|
|
134
139
|
const sig = data.digest().toString('hex');
|
|
135
|
-
|
|
140
|
+
const baseUrl = config.API_ENDPOINT ?? DEFAULT_ENDPOINT;
|
|
141
|
+
const subDir = `${endpoint}?APIKEY=${apiKey}&PAYLOAD=${payload}&NONCE=${nonce}&SIGNATURE=${sig}`;
|
|
142
|
+
return new URL(subDir, baseUrl).toString();
|
|
136
143
|
};
|
|
137
144
|
exports.sseEndpoint = new adapter_1.AdapterEndpoint({
|
|
138
145
|
name: 'sseStream',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sseStream.js","sourceRoot":"","sources":["../../../../src/examples/genesis/sseStream.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA2B;
|
|
1
|
+
{"version":3,"file":"sseStream.js","sourceRoot":"","sources":["../../../../src/examples/genesis/sseStream.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,7 +32,7 @@ export declare const websocketTransport: WebSocketTransport<AdapterRequestParams
|
|
|
32
32
|
readonly required: true;
|
|
33
33
|
};
|
|
34
34
|
}>;
|
|
35
|
-
export declare const webSocketEndpoint: AdapterEndpoint<AdapterRequestParams,
|
|
35
|
+
export declare const webSocketEndpoint: AdapterEndpoint<AdapterRequestParams, import("../../transports").BackgroundStoredResultType, {
|
|
36
36
|
readonly USERNAME: {
|
|
37
37
|
readonly description: "Username for the NCFX API";
|
|
38
38
|
readonly type: "string";
|
package/index.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `prom-client` is shared between v2 and v3 when both are dependencies, resulting in metric collision errors
|
|
3
3
|
* Clearing metrics on import will wipe v2's existing register so we can replace them with v3's metrics
|
|
4
|
+
* METRICS_ENABLED=false is used to trigger this behavior because generators in the monorepo (where v2 and v3 are dependencies) tend to set it to false.
|
|
4
5
|
*/
|
|
5
6
|
import { FastifyInstance } from 'fastify';
|
|
6
7
|
import { Adapter, AdapterDependencies } from './adapter';
|
|
8
|
+
export { FastifyInstance as ServerInstance };
|
|
7
9
|
/**
|
|
8
10
|
* Main function for the framework.
|
|
9
11
|
* Initializes config and dependencies, uses those to initialize Transports, and starts listening for requests.
|
|
@@ -12,4 +14,4 @@ import { Adapter, AdapterDependencies } from './adapter';
|
|
|
12
14
|
* @param dependencies - an optional object with adapter dependencies to inject
|
|
13
15
|
* @returns a Promise that resolves to the http.Server listening for connections
|
|
14
16
|
*/
|
|
15
|
-
export declare const expose: (adapter: Adapter, dependencies?: Partial<AdapterDependencies>
|
|
17
|
+
export declare const expose: (adapter: Adapter, dependencies?: Partial<AdapterDependencies>) => Promise<FastifyInstance | undefined>;
|
package/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* `prom-client` is shared between v2 and v3 when both are dependencies, resulting in metric collision errors
|
|
4
4
|
* Clearing metrics on import will wipe v2's existing register so we can replace them with v3's metrics
|
|
5
|
+
* METRICS_ENABLED=false is used to trigger this behavior because generators in the monorepo (where v2 and v3 are dependencies) tend to set it to false.
|
|
5
6
|
*/
|
|
6
7
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
8
|
if (k2 === undefined) k2 = k;
|
|
@@ -32,16 +33,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
32
33
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33
34
|
exports.expose = void 0;
|
|
34
35
|
const client = __importStar(require("prom-client"));
|
|
35
|
-
|
|
36
|
+
// , so when it's false, we can clear any metrics before reg
|
|
37
|
+
if (process.env['METRICS_ENABLED'] === 'false') {
|
|
36
38
|
client.register.clear();
|
|
37
39
|
}
|
|
38
40
|
const fastify_1 = __importDefault(require("fastify"));
|
|
39
41
|
const path_1 = require("path");
|
|
40
42
|
const adapter_1 = require("./adapter");
|
|
41
43
|
const background_executor_1 = require("./background-executor");
|
|
42
|
-
const cache_1 = require("./cache");
|
|
43
44
|
const metrics_1 = require("./metrics");
|
|
44
|
-
const transports_1 = require("./transports");
|
|
45
45
|
const util_1 = require("./util");
|
|
46
46
|
const test_payload_loader_1 = require("./util/test-payload-loader");
|
|
47
47
|
const validation_1 = require("./validation");
|
|
@@ -114,18 +114,16 @@ async function buildRestApi(adapter) {
|
|
|
114
114
|
reply.headers({ 'content-type': 'application/json; charset=utf-8' });
|
|
115
115
|
done();
|
|
116
116
|
});
|
|
117
|
-
const transportHandler = await (0, transports_1.buildTransportHandler)(adapter);
|
|
118
117
|
app.register(async (router) => {
|
|
119
118
|
// Set up "middlewares" (hooks in fastify)
|
|
120
119
|
router.addHook('preHandler', (0, validation_1.validatorMiddleware)(adapter));
|
|
121
|
-
router.addHook('preHandler', (0, cache_1.buildCacheMiddleware)(adapter));
|
|
122
120
|
if (adapter.config['CORRELATION_ID_ENABLED']) {
|
|
123
121
|
router.addHook('onRequest', util_1.loggingContextMiddleware);
|
|
124
122
|
}
|
|
125
123
|
router.route({
|
|
126
124
|
url: adapter.config.BASE_URL,
|
|
127
125
|
method: 'POST',
|
|
128
|
-
handler:
|
|
126
|
+
handler: async (req, reply) => reply.send(await adapter.handleRequest(req, reply)),
|
|
129
127
|
});
|
|
130
128
|
if (adapter.config.METRICS_ENABLED && adapter.config.EXPERIMENTAL_METRICS_ENABLED) {
|
|
131
129
|
router.addHook('onResponse', metrics_1.buildMetricsMiddleware);
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/metrics/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import * as client from 'prom-client';
|
|
|
2
2
|
import { AdapterRequest } from '../util';
|
|
3
3
|
import { AdapterConfig } from '../config';
|
|
4
4
|
import { FastifyReply, HookHandlerDoneFunction } from 'fastify';
|
|
5
|
+
import { AdapterError } from '../validation/error';
|
|
5
6
|
export declare function setupMetricsServer(name: string, config: AdapterConfig): void;
|
|
6
7
|
export declare const setupMetrics: (name: string, config: AdapterConfig) => void;
|
|
7
8
|
/**
|
|
@@ -11,6 +12,7 @@ export declare const setupMetrics: (name: string, config: AdapterConfig) => void
|
|
|
11
12
|
* @returns the cache middleware function
|
|
12
13
|
*/
|
|
13
14
|
export declare const buildMetricsMiddleware: (req: AdapterRequest, res: FastifyReply, done: HookHandlerDoneFunction) => void;
|
|
15
|
+
export declare const buildHttpRequestMetricsLabel: (feedId: string, error?: AdapterError | Error, cacheHit?: boolean) => Partial<Record<"type" | "method" | "feed_id" | "status_code" | "provider_status_code" | "retry" | "is_cache_warming", string | number>>;
|
|
14
16
|
export declare const httpRequestsTotal: client.Counter<"type" | "method" | "feed_id" | "status_code" | "provider_status_code" | "retry" | "is_cache_warming">;
|
|
15
17
|
export declare const httpRequestDurationSeconds: client.Histogram<string>;
|
|
16
18
|
export declare const bgExecuteTotal: client.Counter<"endpoint">;
|
package/metrics/index.js
CHANGED
|
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.bgExecuteDurationSeconds = exports.bgExecuteTotal = exports.httpRequestDurationSeconds = exports.httpRequestsTotal = exports.buildMetricsMiddleware = exports.setupMetrics = exports.setupMetricsServer = void 0;
|
|
29
|
+
exports.bgExecuteDurationSeconds = exports.bgExecuteTotal = exports.httpRequestDurationSeconds = exports.httpRequestsTotal = exports.buildHttpRequestMetricsLabel = exports.buildMetricsMiddleware = exports.setupMetrics = exports.setupMetricsServer = void 0;
|
|
30
30
|
const client = __importStar(require("prom-client"));
|
|
31
31
|
const constants_1 = require("./constants");
|
|
32
32
|
const util_1 = require("../util");
|
|
@@ -56,7 +56,7 @@ const setupMetrics = (name, config) => {
|
|
|
56
56
|
client.collectDefaultMetrics();
|
|
57
57
|
client.register.setDefaultLabels({
|
|
58
58
|
app_name: config.METRICS_NAME || name || 'N/A',
|
|
59
|
-
app_version:
|
|
59
|
+
app_version: process.env['npm_package_version'],
|
|
60
60
|
});
|
|
61
61
|
};
|
|
62
62
|
exports.setupMetrics = setupMetrics;
|
|
@@ -69,11 +69,11 @@ exports.setupMetrics = setupMetrics;
|
|
|
69
69
|
const buildMetricsMiddleware = (req, res, done) => {
|
|
70
70
|
// The request context can technically be empty if the input validation failed
|
|
71
71
|
const feedId = req.requestContext?.meta?.metrics?.feedId || 'N/A';
|
|
72
|
-
const labels = buildHttpRequestMetricsLabel(feedId, req.requestContext?.meta?.error, req.requestContext?.meta?.metrics?.cacheHit);
|
|
72
|
+
const labels = (0, exports.buildHttpRequestMetricsLabel)(feedId, req.requestContext?.meta?.error, req.requestContext?.meta?.metrics?.cacheHit);
|
|
73
73
|
// Record number of requests sent to EA
|
|
74
74
|
exports.httpRequestsTotal.labels(labels).inc();
|
|
75
75
|
// Record response time of request through entire EA
|
|
76
|
-
exports.httpRequestDurationSeconds.observe(res.getResponseTime());
|
|
76
|
+
exports.httpRequestDurationSeconds.observe(res.getResponseTime() / 1000);
|
|
77
77
|
logger.debug(`Response time for ${feedId}: ${res.getResponseTime()}ms`);
|
|
78
78
|
done();
|
|
79
79
|
};
|
|
@@ -106,6 +106,7 @@ const buildHttpRequestMetricsLabel = (feedId, error, cacheHit) => {
|
|
|
106
106
|
}
|
|
107
107
|
return labels;
|
|
108
108
|
};
|
|
109
|
+
exports.buildHttpRequestMetricsLabel = buildHttpRequestMetricsLabel;
|
|
109
110
|
exports.httpRequestsTotal = new client.Counter({
|
|
110
111
|
name: 'http_requests_total',
|
|
111
112
|
help: 'The number of http requests this external adapter has serviced for its entire uptime',
|
package/metrics/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/metrics/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAAqC;AACrC,2CAAqE;AACrE,kCAAoD;AAEpD,sDAAwE;AACxE,+BAA2B;AAC3B,+CAAkD;AAElD,MAAM,MAAM,GAAG,IAAA,iBAAU,EAAC,SAAS,CAAC,CAAA;AAEpC,SAAgB,kBAAkB,CAAC,IAAY,EAAE,MAAqB;IACpE,MAAM,UAAU,GAAG,IAAA,iBAAO,EAAC;QACzB,MAAM,EAAE,KAAK;KACd,CAAC,CAAA;IACF,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAA;IACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAA,WAAI,EAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;IAC5F,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAA;IAE7B,IAAA,oBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAE1B,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE;QACxC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACf,GAAG,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,UAAU,CAAC,MAAM,CACf;QACE,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,MAAM;KACb,EACD,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,WAAW,GAAG,CAAC,CAClE,CAAA;AACH,CAAC;AAtBD,gDAsBC;AAEM,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,MAAqB,EAAQ,EAAE;IACxE,MAAM,CAAC,qBAAqB,EAAE,CAAA;IAC9B,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC/B,QAAQ,EAAE,MAAM,CAAC,YAAY,IAAI,IAAI,IAAI,KAAK;QAC9C,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/metrics/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chainlink/external-adapter-framework",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"dependencies": {
|
|
@@ -23,7 +23,8 @@
|
|
|
23
23
|
"start": "ts-node -e 'import(`./src/examples/${process.argv[1]}/src/index`).then(ea => ea.server())'",
|
|
24
24
|
"test-debug": "SKIP_METRICS_CLEAR=true LOG_LEVEL=trace DEBUG=true EA_PORT=0 c8 ava --verbose",
|
|
25
25
|
"test": "SKIP_METRICS_CLEAR=true LOG_LEVEL=error EA_PORT=0 c8 ava",
|
|
26
|
-
"verify": "yarn lint && yarn build && yarn build -p ./test/tsconfig.json && yarn test"
|
|
26
|
+
"verify": "yarn lint && yarn build && yarn build -p ./test/tsconfig.json && yarn test",
|
|
27
|
+
"code-coverage": "c8 check-coverage --statements 95 --lines 95 --functions 95 --branches 90"
|
|
27
28
|
},
|
|
28
29
|
"devDependencies": {
|
|
29
30
|
"@sinonjs/fake-timers": "9.1.2",
|
|
@@ -47,8 +48,8 @@
|
|
|
47
48
|
"pino-pretty": "9.1.0",
|
|
48
49
|
"prettier": "2.7.1",
|
|
49
50
|
"supertest": "6.3.0",
|
|
50
|
-
"ts-jest": "29.0.3",
|
|
51
51
|
"ts-node": "10.9.1",
|
|
52
|
+
"ts-jest": "29.0.3",
|
|
52
53
|
"ts-node-dev": "2.0.0",
|
|
53
54
|
"typedoc": "0.23.15",
|
|
54
55
|
"typescript": "4.8.4"
|
|
@@ -61,10 +62,6 @@
|
|
|
61
62
|
"trailingComma": "all",
|
|
62
63
|
"arrowParens": "always"
|
|
63
64
|
},
|
|
64
|
-
"optionalDependencies": {
|
|
65
|
-
"bufferutil": "^4.0.6",
|
|
66
|
-
"utf-8-validate": "^5.0.9"
|
|
67
|
-
},
|
|
68
65
|
"ava": {
|
|
69
66
|
"files": [
|
|
70
67
|
"test/**/*.test.ts"
|
package/rate-limiting/index.d.ts
CHANGED
|
@@ -44,7 +44,7 @@ export interface BackgroundExecuteRateLimiter extends RateLimiter {
|
|
|
44
44
|
* @param limits - the rate limit tier set for the adapter
|
|
45
45
|
* @returns the most restrictive of the set options, in requests per second
|
|
46
46
|
*/
|
|
47
|
-
export declare const consolidateTierLimits: (limits?: AdapterRateLimitTier
|
|
47
|
+
export declare const consolidateTierLimits: (limits?: AdapterRateLimitTier) => number;
|
|
48
48
|
/**
|
|
49
49
|
* Validates rate limiting tiers specified for the adapter, and returns the one to use.
|
|
50
50
|
*
|
|
@@ -52,5 +52,5 @@ export declare const consolidateTierLimits: (limits?: AdapterRateLimitTier | und
|
|
|
52
52
|
* @param tiers - the adapter config listing the different available API tiers
|
|
53
53
|
* @returns the specified API tier, or a default one if none are specified
|
|
54
54
|
*/
|
|
55
|
-
export declare const getRateLimitingTier: (config: AdapterConfig, tiers?: Record<string, AdapterRateLimitTier>
|
|
55
|
+
export declare const getRateLimitingTier: (config: AdapterConfig, tiers?: Record<string, AdapterRateLimitTier>) => AdapterRateLimitTier | undefined;
|
|
56
56
|
export declare const buildRateLimitTiersFromConfig: (config: AdapterConfig) => AdapterRateLimitTier | undefined;
|
|
@@ -3,8 +3,8 @@ import { Cache } from '../cache';
|
|
|
3
3
|
import { AdapterConfig, SettingsMap } from '../config';
|
|
4
4
|
import { BackgroundExecuteRateLimiter } from '../rate-limiting';
|
|
5
5
|
import { SubscriptionSet } from '../util';
|
|
6
|
-
import { AdapterRequest, ProviderResult } from '../util/request';
|
|
7
|
-
import { Transport } from './';
|
|
6
|
+
import { AdapterRequest, AdapterResponse, ProviderResult } from '../util/request';
|
|
7
|
+
import { Transport, BackgroundStoredResultType } from './';
|
|
8
8
|
import { AdapterContext, AdapterDependencies } from '../adapter';
|
|
9
9
|
/**
|
|
10
10
|
* Transport implementation that takes incoming batches requests and keeps a warm cache of values.
|
|
@@ -18,18 +18,18 @@ import { AdapterContext, AdapterDependencies } from '../adapter';
|
|
|
18
18
|
* @typeParam ProviderRequestBody - interface for the body of the request to the Data Provider
|
|
19
19
|
* @typeParam ProviderResponseBody - interface for the body of the Data Provider's response
|
|
20
20
|
*/
|
|
21
|
-
export declare class BatchWarmingTransport<AdapterParams, ProviderRequestBody, ProviderResponseBody, CustomSettings extends SettingsMap> implements Transport<AdapterParams,
|
|
21
|
+
export declare class BatchWarmingTransport<AdapterParams, ProviderRequestBody, ProviderResponseBody, CustomSettings extends SettingsMap> implements Transport<AdapterParams, BackgroundStoredResultType, CustomSettings> {
|
|
22
22
|
private config;
|
|
23
|
-
cache: Cache
|
|
23
|
+
cache: Cache<AdapterResponse<BackgroundStoredResultType>>;
|
|
24
24
|
rateLimiter: BackgroundExecuteRateLimiter;
|
|
25
25
|
subscriptionSet: SubscriptionSet<AdapterParams>;
|
|
26
26
|
WARMER_ACTIVE: boolean;
|
|
27
27
|
constructor(config: {
|
|
28
|
-
prepareRequest: (params: AdapterParams[],
|
|
29
|
-
parseResponse: (params: AdapterParams[], res: AxiosResponse<ProviderResponseBody>,
|
|
28
|
+
prepareRequest: (params: AdapterParams[], config: AdapterConfig<CustomSettings>) => AxiosRequestConfig<ProviderRequestBody>;
|
|
29
|
+
parseResponse: (params: AdapterParams[], res: AxiosResponse<ProviderResponseBody>, config: AdapterConfig<CustomSettings>) => ProviderResult<AdapterParams>[];
|
|
30
30
|
});
|
|
31
|
-
initialize(dependencies: AdapterDependencies, _: AdapterConfig
|
|
32
|
-
|
|
33
|
-
setup(req: AdapterRequest<AdapterParams>, config: AdapterConfig<CustomSettings>): Promise<void>;
|
|
31
|
+
initialize(dependencies: AdapterDependencies, _: AdapterConfig<CustomSettings>, endpointName: string): Promise<void>;
|
|
32
|
+
registerRequest(req: AdapterRequest<AdapterParams>, config: AdapterConfig<CustomSettings>): Promise<void>;
|
|
34
33
|
backgroundExecute(context: AdapterContext<CustomSettings>): Promise<number>;
|
|
34
|
+
private makeRequest;
|
|
35
35
|
}
|
|
@@ -30,6 +30,7 @@ const util_2 = require("./util");
|
|
|
30
30
|
const rateLimitMetrics = __importStar(require("../rate-limiting/metrics"));
|
|
31
31
|
const cacheMetrics = __importStar(require("../cache/metrics"));
|
|
32
32
|
const transportMetrics = __importStar(require("./metrics"));
|
|
33
|
+
const error_1 = require("../validation/error");
|
|
33
34
|
const WARMUP_BATCH_REQUEST_ID = '9002';
|
|
34
35
|
const logger = (0, util_1.makeLogger)('BatchWarmingTransport');
|
|
35
36
|
/**
|
|
@@ -57,11 +58,19 @@ class BatchWarmingTransport {
|
|
|
57
58
|
this.subscriptionSet = dependencies.subscriptionSetFactory.buildSet(endpointName);
|
|
58
59
|
}
|
|
59
60
|
// This might need coalescing to avoid too frequent ttl updates
|
|
60
|
-
async
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
61
|
+
async registerRequest(req, config) {
|
|
62
|
+
logger.debug(`Adding entry to subscription set (ttl ${config.WARMUP_SUBSCRIPTION_TTL}): [${req.requestContext.cacheKey}] = ${req.requestContext.data}`);
|
|
63
|
+
if (config.BATCH_TRANSPORT_SETUP_VALIDATION) {
|
|
64
|
+
const response = await this.makeRequest([req.requestContext.data], config);
|
|
65
|
+
if (!response.results.length) {
|
|
66
|
+
throw new error_1.AdapterError({
|
|
67
|
+
statusCode: 200,
|
|
68
|
+
providerStatusCode: response.providerResponse.status,
|
|
69
|
+
message: response.providerResponse.message ||
|
|
70
|
+
'There was an error while validating the incoming request before adding to the batch subscription set',
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
65
74
|
await this.subscriptionSet.add(req.requestContext.cacheKey, req.requestContext.data, config.WARMUP_SUBSCRIPTION_TTL);
|
|
66
75
|
}
|
|
67
76
|
async backgroundExecute(context) {
|
|
@@ -86,16 +95,15 @@ class BatchWarmingTransport {
|
|
|
86
95
|
cacheMetrics.cacheWarmerCount.labels({ isBatched: 'true' }).inc();
|
|
87
96
|
this.WARMER_ACTIVE = true;
|
|
88
97
|
}
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const
|
|
94
|
-
const adapterResponses = (0, _1.buildCacheEntriesFromResults)(results, context);
|
|
98
|
+
const response = await this.makeRequest(entries, context.adapterConfig);
|
|
99
|
+
if (!response.results?.length) {
|
|
100
|
+
return interval;
|
|
101
|
+
}
|
|
102
|
+
const cacheEntries = (0, _1.buildCacheEntriesFromResults)(response.results, context);
|
|
95
103
|
logger.debug('Setting adapter responses in cache');
|
|
96
|
-
await this.cache.setMany(
|
|
104
|
+
await this.cache.setMany(cacheEntries, context.adapterConfig.CACHE_MAX_AGE);
|
|
97
105
|
// Record cost of data provider call
|
|
98
|
-
const cost = rateLimitMetrics.retrieveCost(providerResponse.data);
|
|
106
|
+
const cost = rateLimitMetrics.retrieveCost(response.providerResponse.data);
|
|
99
107
|
rateLimitMetrics.rateLimitCreditsSpentTotal
|
|
100
108
|
.labels({
|
|
101
109
|
feed_id: 'N/A',
|
|
@@ -104,6 +112,25 @@ class BatchWarmingTransport {
|
|
|
104
112
|
.inc(cost);
|
|
105
113
|
return interval;
|
|
106
114
|
}
|
|
115
|
+
async makeRequest(entries, config) {
|
|
116
|
+
const request = this.config.prepareRequest(entries, config);
|
|
117
|
+
logger.trace('Sending request to data provider...');
|
|
118
|
+
let providerResponse;
|
|
119
|
+
try {
|
|
120
|
+
providerResponse = await (0, util_2.axiosRequest)(request, config);
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
return {
|
|
124
|
+
results: [],
|
|
125
|
+
providerResponse: e,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
logger.debug(`Got response from provider, parsing (raw body: ${providerResponse.data})`);
|
|
129
|
+
return {
|
|
130
|
+
results: this.config.parseResponse(entries, providerResponse, config),
|
|
131
|
+
providerResponse,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
107
134
|
}
|
|
108
135
|
exports.BatchWarmingTransport = BatchWarmingTransport;
|
|
109
136
|
//# sourceMappingURL=batch-warming.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch-warming.js","sourceRoot":"","sources":["../../../src/transports/batch-warming.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,kCAAqD;AAErD,
|
|
1
|
+
{"version":3,"file":"batch-warming.js","sourceRoot":"","sources":["../../../src/transports/batch-warming.ts"],"names":[],"mappings":"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"}
|
package/transports/index.d.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { CacheEntry } from '../cache';
|
|
1
|
+
import { AdapterContext, AdapterDependencies } from '../adapter';
|
|
2
|
+
import { Cache, CacheEntry } from '../cache';
|
|
4
3
|
import { AdapterConfig, SettingsMap } from '../config';
|
|
5
4
|
import { AdapterRequest, AdapterResponse, ProviderResult } from '../util/request';
|
|
6
5
|
export * from './batch-warming';
|
|
7
6
|
export * from './rest';
|
|
8
|
-
export * from './websocket';
|
|
9
7
|
export * from './sse';
|
|
8
|
+
export * from './websocket';
|
|
10
9
|
/**
|
|
11
10
|
* Generic interface for a Transport.
|
|
12
11
|
* A Transport defines the way in which an AdapterEndpoint will process incoming requests to
|
|
@@ -19,6 +18,7 @@ export * from './sse';
|
|
|
19
18
|
* @typeParam Result - the structure of the AdapterResponse's body
|
|
20
19
|
*/
|
|
21
20
|
export interface Transport<Params, Result, CustomSettings extends SettingsMap> {
|
|
21
|
+
cache: Cache<AdapterResponse<Result>>;
|
|
22
22
|
/**
|
|
23
23
|
* Initializes the transport in the Adapter context.
|
|
24
24
|
*
|
|
@@ -26,34 +26,41 @@ export interface Transport<Params, Result, CustomSettings extends SettingsMap> {
|
|
|
26
26
|
* @param config - Adapter config containing env vars
|
|
27
27
|
* @returns an empty Promise
|
|
28
28
|
*/
|
|
29
|
-
initialize: (dependencies: AdapterDependencies, config: AdapterConfig
|
|
29
|
+
initialize: (dependencies: AdapterDependencies, config: AdapterConfig<CustomSettings>, endpointName: string) => Promise<void>;
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
32
|
-
* This
|
|
31
|
+
* Registers a request within the context of the transport.
|
|
32
|
+
* This means things like adding the request to a subscription set.
|
|
33
33
|
*
|
|
34
34
|
* @param req - the incoming AdapterRequest
|
|
35
|
-
* @
|
|
35
|
+
* @param config - common configuration for the Adapter as a whole
|
|
36
|
+
* @returns an empty Promise
|
|
36
37
|
*/
|
|
37
|
-
|
|
38
|
+
registerRequest?: (req: AdapterRequest<Params>, config: AdapterConfig<CustomSettings>) => Promise<void>;
|
|
38
39
|
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
40
|
+
* Performs a synchronous fetch/processing of information within the lifecycle of an incoming request.
|
|
41
|
+
* This is mostly intended to be used as a backwards compatibility mechanism, or for very specific cases where
|
|
42
|
+
* processing is expected to be very simple. Things like rate limiting for example won't be able to be applied
|
|
43
|
+
* to this method with more than one EA instance. It's heavily encouraged to instead rework adapter logic
|
|
44
|
+
* to perform as much of the work as possible (or all of it) in the backgroundExecute method.
|
|
42
45
|
*
|
|
43
46
|
* @param req - the incoming AdapterRequest
|
|
44
47
|
* @param config - common configuration for the Adapter as a whole
|
|
45
48
|
* @returns a Promise that _optionally_ returns an AdapterResponse, if the Transport has the capability of
|
|
46
49
|
* immediately fetching data and returning it without the background process.
|
|
47
50
|
*/
|
|
48
|
-
|
|
51
|
+
foregroundExecute?: (req: AdapterRequest<Params>, config: AdapterConfig<CustomSettings>) => Promise<AdapterResponse<Result> | void>;
|
|
49
52
|
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
53
|
+
* Main function that will be called by the main background loop of the writer EA.
|
|
54
|
+
* All logic fetching from providers should live here.
|
|
52
55
|
*
|
|
53
56
|
* @param context - background context for the execution (e.g. endpoint name)
|
|
57
|
+
* @returns an empty Promise
|
|
54
58
|
*/
|
|
55
59
|
backgroundExecute?: (context: AdapterContext<CustomSettings>) => Promise<number>;
|
|
56
60
|
}
|
|
61
|
+
export declare type BackgroundStoredResultType = {
|
|
62
|
+
result: unknown;
|
|
63
|
+
};
|
|
57
64
|
/**
|
|
58
65
|
* Helper method to build cache entries to set after getting a bunch of responses from a DP.
|
|
59
66
|
*
|
|
@@ -61,14 +68,4 @@ export interface Transport<Params, Result, CustomSettings extends SettingsMap> {
|
|
|
61
68
|
* @param context - context for the Adapter
|
|
62
69
|
* @returns a list of CacheEntries of AdapterResponses
|
|
63
70
|
*/
|
|
64
|
-
export declare const buildCacheEntriesFromResults: <Params, CustomSettings extends SettingsMap>(results: ProviderResult<Params>[], context: AdapterContext<CustomSettings>) => CacheEntry<AdapterResponse<
|
|
65
|
-
result: unknown;
|
|
66
|
-
}>>[];
|
|
67
|
-
/**
|
|
68
|
-
* Takes an Adapter, its configuration, and its dependencies, and it creates an express middleware
|
|
69
|
-
* that will pass along the AdapterRequest to the appropriate Transport (acc. to the endpoint in the req.)
|
|
70
|
-
*
|
|
71
|
-
* @param adapter - main adapter object, already initialized
|
|
72
|
-
* @returns the transport handler middleware function
|
|
73
|
-
*/
|
|
74
|
-
export declare const buildTransportHandler: (adapter: Adapter) => (req: AdapterRequest, reply: FastifyReply) => Promise<never>;
|
|
71
|
+
export declare const buildCacheEntriesFromResults: <Params, CustomSettings extends SettingsMap>(results: ProviderResult<Params>[], context: AdapterContext<CustomSettings>) => CacheEntry<AdapterResponse<BackgroundStoredResultType>>[];
|