@chainlink/external-adapter-framework 0.0.14 → 0.0.16

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.
Files changed (164) hide show
  1. package/adapter.js +114 -101
  2. package/cache/factory.js +3 -0
  3. package/chainlink-external-adapter-framework-v0.0.6.tgz +0 -0
  4. package/config/index.js +69 -83
  5. package/config/provider-limits.js +10 -15
  6. package/examples/bank-frick/accounts.js +3 -2
  7. package/examples/bank-frick/index.js +3 -2
  8. package/examples/coingecko/src/config/index.js +13 -0
  9. package/examples/coingecko/src/config/overrides.json +10826 -0
  10. package/examples/coingecko/src/cryptoUtils.js +41 -0
  11. package/examples/coingecko/src/endpoint/coins.js +33 -0
  12. package/examples/coingecko/src/endpoint/crypto-marketcap.js +46 -0
  13. package/examples/coingecko/src/endpoint/crypto-volume.js +46 -0
  14. package/examples/coingecko/src/endpoint/crypto.js +47 -0
  15. package/examples/coingecko/src/endpoint/dominance.js +26 -0
  16. package/examples/coingecko/src/endpoint/global-marketcap.js +26 -0
  17. package/examples/coingecko/src/endpoint/index.js +15 -0
  18. package/examples/coingecko/src/globalUtils.js +48 -0
  19. package/examples/coingecko/src/index.js +14 -0
  20. package/examples/coingecko/test/e2e/adapter.test.js +262 -0
  21. package/examples/coingecko/test/integration/adapter.test.js +264 -0
  22. package/examples/coingecko/test/integration/capturedRequests.json +1 -0
  23. package/examples/coingecko/test/integration/fixtures.js +41 -0
  24. package/{package/examples/coingecko → examples/coingecko-old}/batch-warming.js +4 -3
  25. package/examples/{coingecko → coingecko-old}/index.js +3 -2
  26. package/{package/examples/coingecko → examples/coingecko-old}/rest.js +3 -2
  27. package/examples/ncfx/index.js +3 -2
  28. package/examples/ncfx/websocket.js +3 -2
  29. package/index.js +17 -23
  30. package/package.json +5 -4
  31. package/rate-limiting/index.js +23 -2
  32. package/transports/batch-warming.js +1 -1
  33. package/transports/rest.js +9 -2
  34. package/transports/util.js +2 -1
  35. package/transports/websocket.js +4 -6
  36. package/util/recordRequests.js +45 -0
  37. package/{package/validation/override-functions.js → validation/overrideFunctions.js} +0 -0
  38. package/adapter.d.ts +0 -107
  39. package/background-executor.d.ts +0 -11
  40. package/cache/factory.d.ts +0 -6
  41. package/cache/index.d.ts +0 -94
  42. package/cache/local.d.ts +0 -23
  43. package/cache/metrics.d.ts +0 -27
  44. package/cache/redis.d.ts +0 -16
  45. package/chainlink-external-adapter-framework-0.0.6.tgz +0 -0
  46. package/config/index.d.ts +0 -209
  47. package/config/provider-limits.d.ts +0 -31
  48. package/examples/bank-frick/accounts.d.ts +0 -39
  49. package/examples/bank-frick/config/index.d.ts +0 -4
  50. package/examples/bank-frick/index.d.ts +0 -2
  51. package/examples/bank-frick/util.d.ts +0 -4
  52. package/examples/coingecko/batch-warming.d.ts +0 -2
  53. package/examples/coingecko/batch-warming.js +0 -52
  54. package/examples/coingecko/index.d.ts +0 -2
  55. package/examples/coingecko/rest.d.ts +0 -2
  56. package/examples/coingecko/rest.js +0 -50
  57. package/examples/ncfx/config/index.d.ts +0 -12
  58. package/examples/ncfx/index.d.ts +0 -2
  59. package/examples/ncfx/websocket.d.ts +0 -36
  60. package/index.d.ts +0 -11
  61. package/metrics/constants.d.ts +0 -16
  62. package/metrics/index.d.ts +0 -15
  63. package/metrics/util.d.ts +0 -7
  64. package/package/adapter.d.ts +0 -88
  65. package/package/adapter.js +0 -112
  66. package/package/background-executor.d.ts +0 -11
  67. package/package/background-executor.js +0 -45
  68. package/package/cache/factory.d.ts +0 -6
  69. package/package/cache/factory.js +0 -57
  70. package/package/cache/index.d.ts +0 -90
  71. package/package/cache/index.js +0 -169
  72. package/package/cache/local.d.ts +0 -23
  73. package/package/cache/local.js +0 -83
  74. package/package/cache/metrics.d.ts +0 -27
  75. package/package/cache/metrics.js +0 -120
  76. package/package/cache/redis.d.ts +0 -16
  77. package/package/cache/redis.js +0 -100
  78. package/package/config/index.d.ts +0 -195
  79. package/package/config/index.js +0 -365
  80. package/package/config/provider-limits.d.ts +0 -31
  81. package/package/config/provider-limits.js +0 -76
  82. package/package/examples/coingecko/batch-warming.d.ts +0 -2
  83. package/package/examples/coingecko/index.d.ts +0 -2
  84. package/package/examples/coingecko/index.js +0 -10
  85. package/package/examples/coingecko/rest.d.ts +0 -2
  86. package/package/examples/ncfx/config/index.d.ts +0 -12
  87. package/package/examples/ncfx/config/index.js +0 -15
  88. package/package/examples/ncfx/index.d.ts +0 -2
  89. package/package/examples/ncfx/index.js +0 -10
  90. package/package/examples/ncfx/websocket.d.ts +0 -36
  91. package/package/examples/ncfx/websocket.js +0 -72
  92. package/package/index.d.ts +0 -12
  93. package/package/index.js +0 -92
  94. package/package/metrics/constants.d.ts +0 -16
  95. package/package/metrics/constants.js +0 -25
  96. package/package/metrics/index.d.ts +0 -15
  97. package/package/metrics/index.js +0 -123
  98. package/package/metrics/util.d.ts +0 -3
  99. package/package/metrics/util.js +0 -9
  100. package/package/package.json +0 -72
  101. package/package/rate-limiting/background/fixed-frequency.d.ts +0 -10
  102. package/package/rate-limiting/background/fixed-frequency.js +0 -37
  103. package/package/rate-limiting/index.d.ts +0 -54
  104. package/package/rate-limiting/index.js +0 -63
  105. package/package/rate-limiting/metrics.d.ts +0 -3
  106. package/package/rate-limiting/metrics.js +0 -44
  107. package/package/rate-limiting/request/simple-counting.d.ts +0 -20
  108. package/package/rate-limiting/request/simple-counting.js +0 -62
  109. package/package/test.d.ts +0 -1
  110. package/package/test.js +0 -6
  111. package/package/transports/batch-warming.d.ts +0 -34
  112. package/package/transports/batch-warming.js +0 -101
  113. package/package/transports/index.d.ts +0 -87
  114. package/package/transports/index.js +0 -87
  115. package/package/transports/metrics.d.ts +0 -21
  116. package/package/transports/metrics.js +0 -105
  117. package/package/transports/rest.d.ts +0 -43
  118. package/package/transports/rest.js +0 -129
  119. package/package/transports/util.d.ts +0 -8
  120. package/package/transports/util.js +0 -85
  121. package/package/transports/websocket.d.ts +0 -80
  122. package/package/transports/websocket.js +0 -169
  123. package/package/util/expiring-sorted-set.d.ts +0 -21
  124. package/package/util/expiring-sorted-set.js +0 -47
  125. package/package/util/index.d.ts +0 -11
  126. package/package/util/index.js +0 -35
  127. package/package/util/logger.d.ts +0 -42
  128. package/package/util/logger.js +0 -62
  129. package/package/util/request.d.ts +0 -55
  130. package/package/util/request.js +0 -2
  131. package/package/validation/error.d.ts +0 -50
  132. package/package/validation/error.js +0 -79
  133. package/package/validation/index.d.ts +0 -5
  134. package/package/validation/index.js +0 -86
  135. package/package/validation/input-params.d.ts +0 -15
  136. package/package/validation/input-params.js +0 -30
  137. package/package/validation/override-functions.d.ts +0 -3
  138. package/package/validation/preset-tokens.json +0 -23
  139. package/package/validation/validator.d.ts +0 -47
  140. package/package/validation/validator.js +0 -303
  141. package/rate-limiting/background/fixed-frequency.d.ts +0 -10
  142. package/rate-limiting/index.d.ts +0 -54
  143. package/rate-limiting/metrics.d.ts +0 -3
  144. package/rate-limiting/request/simple-counting.d.ts +0 -20
  145. package/test.d.ts +0 -1
  146. package/transports/batch-warming.d.ts +0 -35
  147. package/transports/index.d.ts +0 -70
  148. package/transports/metrics.d.ts +0 -21
  149. package/transports/rest.d.ts +0 -44
  150. package/transports/util.d.ts +0 -8
  151. package/transports/websocket.d.ts +0 -81
  152. package/util/expiring-sorted-set.d.ts +0 -21
  153. package/util/expiring-sorted-set.js +0 -47
  154. package/util/index.d.ts +0 -12
  155. package/util/logger.d.ts +0 -42
  156. package/util/request.d.ts +0 -57
  157. package/util/subscription-set/expiring-sorted-set.d.ts +0 -22
  158. package/util/subscription-set/subscription-set.d.ts +0 -18
  159. package/util/test-payload-loader.d.ts +0 -25
  160. package/validation/error.d.ts +0 -50
  161. package/validation/index.d.ts +0 -5
  162. package/validation/input-params.d.ts +0 -15
  163. package/validation/override-functions.d.ts +0 -3
  164. package/validation/validator.d.ts +0 -47
@@ -0,0 +1,264 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ /* eslint-disable max-nested-callbacks */
7
+ const index_1 = require("../../src/index");
8
+ const __1 = require("../../../..");
9
+ const supertest_1 = __importDefault(require("supertest"));
10
+ const fixtures_1 = require("./fixtures");
11
+ let adapterServer;
12
+ function sleep(ms) {
13
+ // eslint-disable-next-line
14
+ return new Promise((resolve) => setTimeout(resolve, ms));
15
+ }
16
+ describe('execute', () => {
17
+ const id = '1';
18
+ let req;
19
+ jest.setTimeout(10000);
20
+ const successfulRequests = {
21
+ crypto: {
22
+ id,
23
+ data: {
24
+ base: 'ETH',
25
+ quote: 'USD',
26
+ },
27
+ },
28
+ cryptoWithCoinid: {
29
+ id,
30
+ data: {
31
+ coinid: 'bitcoin',
32
+ quote: 'USD',
33
+ },
34
+ },
35
+ cryptoWithOverride: {
36
+ id,
37
+ data: {
38
+ base: 'BTC',
39
+ quote: 'EUR',
40
+ overrides: {
41
+ coingecko: {
42
+ BTC: 'solana',
43
+ },
44
+ },
45
+ },
46
+ },
47
+ coins: {
48
+ id,
49
+ endpoint: 'coins',
50
+ },
51
+ marketcap: {
52
+ id,
53
+ endpoint: 'marketcap',
54
+ data: {
55
+ base: 'ETH',
56
+ quote: 'USD',
57
+ },
58
+ },
59
+ volume: {
60
+ id,
61
+ endpoint: 'volume',
62
+ data: {
63
+ base: 'ETH',
64
+ quote: 'USD',
65
+ },
66
+ },
67
+ globalmarketcap: {
68
+ id,
69
+ endpoint: 'globalmarketcap',
70
+ data: {
71
+ market: 'ETH',
72
+ },
73
+ },
74
+ dominance: {
75
+ id,
76
+ endpoint: 'dominance',
77
+ data: {
78
+ market: 'ETH',
79
+ },
80
+ },
81
+ };
82
+ const errorRequests = {
83
+ cryptoWithBadSymbol: {
84
+ id,
85
+ data: {
86
+ base: 'ZWXK',
87
+ quote: 'USD',
88
+ },
89
+ },
90
+ cryptoWithBadOverride: {
91
+ id,
92
+ data: {
93
+ base: 'LINK',
94
+ quote: 'USD',
95
+ overrides: {
96
+ coingecko: {
97
+ LINK: 'badtokenid',
98
+ },
99
+ },
100
+ },
101
+ },
102
+ dominanceWithBadSymbol: {
103
+ id,
104
+ endpoint: 'dominance',
105
+ data: {
106
+ market: 'ZWXK',
107
+ },
108
+ },
109
+ };
110
+ beforeAll(async () => {
111
+ try {
112
+ adapterServer = await (0, __1.expose)(index_1.adapter);
113
+ req = (0, supertest_1.default)('localhost:8080');
114
+ }
115
+ catch {
116
+ throw new Error('Could not start server when running CoinGecko e2e tests');
117
+ }
118
+ if (!adapterServer) {
119
+ throw new Error('Could not start server when running CoinGecko e2e tests');
120
+ }
121
+ (0, fixtures_1.createMocks)();
122
+ // Send inital requests to warm the cache
123
+ const pendingRequests = [];
124
+ for (const reqData of Object.values(successfulRequests)) {
125
+ pendingRequests.push(req.post('/').send(reqData));
126
+ }
127
+ for (const reqData of Object.values(errorRequests)) {
128
+ pendingRequests.push(req.post('/').send(reqData));
129
+ }
130
+ // Wait for all the pending requests to be complete
131
+ Promise.all(pendingRequests);
132
+ // Sleep while the cache is filled
133
+ await sleep(5000);
134
+ });
135
+ afterAll((done) => {
136
+ if (adapterServer) {
137
+ adapterServer.close(done());
138
+ }
139
+ });
140
+ describe('crypto api', () => {
141
+ it('should return success', async () => {
142
+ // Send inital request to warm cache
143
+ const response = await req
144
+ .post('/')
145
+ .send(successfulRequests.crypto)
146
+ .set('Accept', '*/*')
147
+ .set('Content-Type', 'application/json')
148
+ .expect(200);
149
+ expect(response.body.result).toMatchSnapshot();
150
+ });
151
+ it('should return success with coinid', async () => {
152
+ const response = await req
153
+ .post('/')
154
+ .send(successfulRequests.cryptoWithCoinid)
155
+ .set('Accept', '*/*')
156
+ .set('Content-Type', 'application/json')
157
+ .expect('Content-Type', /json/)
158
+ .expect(200);
159
+ expect(response.body.result).toMatchSnapshot();
160
+ });
161
+ it('should return error message for bad symbol', async () => {
162
+ await req
163
+ .post('/')
164
+ .send(errorRequests.cryptoWithBadSymbol)
165
+ .set('Accept', '*/*')
166
+ .set('Content-Type', 'application/json')
167
+ .expect(504);
168
+ });
169
+ it('should return success with override', async () => {
170
+ const response = await req
171
+ .post('/')
172
+ .send(successfulRequests.cryptoWithOverride)
173
+ .set('Accept', '*/*')
174
+ .set('Content-Type', 'application/json')
175
+ .expect('Content-Type', /json/)
176
+ .expect(200);
177
+ expect(response.body.result).toMatchSnapshot();
178
+ });
179
+ it('should return 504 for bad override', async () => {
180
+ const response = await req
181
+ .post('/')
182
+ .send(errorRequests.cryptoWithBadOverride)
183
+ .set('Accept', '*/*')
184
+ .set('Content-Type', 'application/json')
185
+ .expect(504);
186
+ expect(typeof response.body.result === 'string');
187
+ });
188
+ it('should return 504 for bad symbol', async () => {
189
+ await req
190
+ .post('/')
191
+ .send(errorRequests.cryptoWithBadSymbol)
192
+ .set('Accept', '*/*')
193
+ .set('Content-Type', 'application/json')
194
+ .expect(504);
195
+ });
196
+ });
197
+ describe('coins api', () => {
198
+ it('should return success', async () => {
199
+ await req
200
+ .post('/')
201
+ .send(successfulRequests.coins)
202
+ .set('Accept', '*/*')
203
+ .set('Content-Type', 'application/json')
204
+ .expect('Content-Type', /json/)
205
+ .expect(200);
206
+ });
207
+ });
208
+ describe('volume api', () => {
209
+ it('should return success', async () => {
210
+ const response = await req
211
+ .post('/')
212
+ .send(successfulRequests.volume)
213
+ .set('Accept', '*/*')
214
+ .set('Content-Type', 'application/json')
215
+ .expect('Content-Type', /json/)
216
+ .expect(200);
217
+ expect(response.body.result).toMatchSnapshot();
218
+ });
219
+ });
220
+ describe('marketcap api', () => {
221
+ it('should return success', async () => {
222
+ const response = await req
223
+ .post('/')
224
+ .send(successfulRequests.marketcap)
225
+ .set('Accept', '*/*')
226
+ .set('Content-Type', 'application/json')
227
+ .expect('Content-Type', /json/)
228
+ .expect(200);
229
+ expect(response.body.result).toMatchSnapshot();
230
+ });
231
+ });
232
+ describe('globalmarketcap api', () => {
233
+ it('should return success', async () => {
234
+ const response = await req
235
+ .post('/')
236
+ .send(successfulRequests.globalmarketcap)
237
+ .set('Accept', '*/*')
238
+ .set('Content-Type', 'application/json')
239
+ .expect('Content-Type', /json/)
240
+ .expect(200);
241
+ expect(response.body.result).toMatchSnapshot();
242
+ });
243
+ });
244
+ describe('dominance api', () => {
245
+ it('should return success', async () => {
246
+ const response = await req
247
+ .post('/')
248
+ .send(successfulRequests.dominance)
249
+ .set('Accept', '*/*')
250
+ .set('Content-Type', 'application/json')
251
+ .expect('Content-Type', /json/)
252
+ .expect(200);
253
+ expect(response.body.result).toMatchSnapshot();
254
+ });
255
+ it('should return 504 for bad symbol', async () => {
256
+ await req
257
+ .post('/')
258
+ .send(errorRequests.dominanceWithBadSymbol)
259
+ .set('Accept', '*/*')
260
+ .set('Content-Type', 'application/json')
261
+ .expect(504);
262
+ });
263
+ });
264
+ });