@chainlink/external-adapter-framework 0.0.12 → 0.0.15

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 (220) hide show
  1. package/.eslintignore +1 -0
  2. package/.github/README.MD +35 -10
  3. package/.github/workflows/label.yaml +39 -0
  4. package/.github/workflows/publish.yaml +0 -3
  5. package/dist/examples/coingecko/test/e2e/adapter.test.ts.js +82953 -0
  6. package/dist/examples/coingecko/test/integration/adapter.test.ts.js +91672 -0
  7. package/dist/main.js +72703 -0
  8. package/jest.config.js +5 -0
  9. package/package.json +14 -3
  10. package/src/config/provider-limits.ts +14 -17
  11. package/src/examples/coingecko/src/config/index.ts +12 -0
  12. package/src/examples/coingecko/src/config/overrides.json +10826 -0
  13. package/src/examples/coingecko/src/cryptoUtils.ts +88 -0
  14. package/src/examples/coingecko/src/endpoint/coins.ts +54 -0
  15. package/src/examples/coingecko/src/endpoint/crypto-marketcap.ts +66 -0
  16. package/src/examples/coingecko/src/endpoint/crypto-volume.ts +66 -0
  17. package/src/examples/coingecko/src/endpoint/crypto.ts +63 -0
  18. package/src/examples/coingecko/src/endpoint/dominance.ts +40 -0
  19. package/src/examples/coingecko/src/endpoint/global-marketcap.ts +40 -0
  20. package/src/examples/coingecko/src/endpoint/index.ts +6 -0
  21. package/src/examples/coingecko/src/globalUtils.ts +78 -0
  22. package/src/examples/coingecko/src/index.ts +17 -0
  23. package/src/examples/coingecko/test/e2e/adapter.test.ts +278 -0
  24. package/src/examples/coingecko/test/integration/__snapshots__/adapter.test.ts.snap +15 -0
  25. package/src/examples/coingecko/test/integration/adapter.test.ts +281 -0
  26. package/src/examples/coingecko/test/integration/capturedRequests.json +1 -0
  27. package/src/examples/coingecko/test/integration/fixtures.ts +42 -0
  28. package/src/examples/{coingecko → coingecko-old}/batch-warming.ts +1 -0
  29. package/src/examples/{coingecko → coingecko-old}/index.ts +0 -0
  30. package/src/examples/{coingecko → coingecko-old}/rest.ts +0 -0
  31. package/src/transports/batch-warming.ts +7 -2
  32. package/src/transports/rest.ts +5 -1
  33. package/src/util/index.ts +1 -0
  34. package/src/util/recordRequests.ts +47 -0
  35. package/src/validation/overrideFunctions.ts +44 -0
  36. package/test/metrics/warmer-metrics.test.ts +1 -0
  37. package/test/{smoke.test.ts → smoke/smoke.test.ts} +13 -13
  38. package/{test-payload-fail.json → test/smoke/test-payload-fail.json} +0 -0
  39. package/{test-payload.js → test/smoke/test-payload.js} +0 -0
  40. package/{test-payload.json → test/smoke/test-payload.json} +0 -0
  41. package/test/transports/batch.test.ts +1 -0
  42. package/tsconfig.json +4 -1
  43. package/webpack.config.js +39 -5
  44. package/yarn-error.log +3778 -0
  45. package/dist/src/adapter.d.ts +0 -135
  46. package/dist/src/adapter.js +0 -145
  47. package/dist/src/background-executor.d.ts +0 -11
  48. package/dist/src/background-executor.js +0 -45
  49. package/dist/src/cache/factory.d.ts +0 -6
  50. package/dist/src/cache/factory.js +0 -55
  51. package/dist/src/cache/index.d.ts +0 -94
  52. package/dist/src/cache/index.js +0 -173
  53. package/dist/src/cache/local.d.ts +0 -23
  54. package/dist/src/cache/local.js +0 -83
  55. package/dist/src/cache/metrics.d.ts +0 -27
  56. package/dist/src/cache/metrics.js +0 -120
  57. package/dist/src/cache/redis.d.ts +0 -16
  58. package/dist/src/cache/redis.js +0 -100
  59. package/dist/src/chainlink-external-adapter-framework-0.0.6.tgz +0 -0
  60. package/dist/src/config/index.d.ts +0 -214
  61. package/dist/src/config/index.js +0 -380
  62. package/dist/src/config/provider-limits.d.ts +0 -31
  63. package/dist/src/config/provider-limits.js +0 -75
  64. package/dist/src/examples/bank-frick/accounts.d.ts +0 -39
  65. package/dist/src/examples/bank-frick/accounts.js +0 -192
  66. package/dist/src/examples/bank-frick/config/index.d.ts +0 -4
  67. package/dist/src/examples/bank-frick/config/index.js +0 -54
  68. package/dist/src/examples/bank-frick/index.d.ts +0 -2
  69. package/dist/src/examples/bank-frick/index.js +0 -15
  70. package/dist/src/examples/bank-frick/util.d.ts +0 -4
  71. package/dist/src/examples/bank-frick/util.js +0 -39
  72. package/dist/src/examples/coingecko/batch-warming.d.ts +0 -7
  73. package/dist/src/examples/coingecko/batch-warming.js +0 -53
  74. package/dist/src/examples/coingecko/index.d.ts +0 -2
  75. package/dist/src/examples/coingecko/index.js +0 -11
  76. package/dist/src/examples/coingecko/rest.d.ts +0 -12
  77. package/dist/src/examples/coingecko/rest.js +0 -51
  78. package/dist/src/examples/ncfx/config/index.d.ts +0 -12
  79. package/dist/src/examples/ncfx/config/index.js +0 -15
  80. package/dist/src/examples/ncfx/index.d.ts +0 -13
  81. package/dist/src/examples/ncfx/index.js +0 -11
  82. package/dist/src/examples/ncfx/websocket.d.ts +0 -47
  83. package/dist/src/examples/ncfx/websocket.js +0 -73
  84. package/dist/src/index.d.ts +0 -11
  85. package/dist/src/index.js +0 -128
  86. package/dist/src/metrics/constants.d.ts +0 -16
  87. package/dist/src/metrics/constants.js +0 -25
  88. package/dist/src/metrics/index.d.ts +0 -15
  89. package/dist/src/metrics/index.js +0 -122
  90. package/dist/src/metrics/util.d.ts +0 -7
  91. package/dist/src/metrics/util.js +0 -9
  92. package/dist/src/package/adapter.d.ts +0 -88
  93. package/dist/src/package/adapter.js +0 -112
  94. package/dist/src/package/background-executor.d.ts +0 -11
  95. package/dist/src/package/background-executor.js +0 -45
  96. package/dist/src/package/cache/factory.d.ts +0 -6
  97. package/dist/src/package/cache/factory.js +0 -57
  98. package/dist/src/package/cache/index.d.ts +0 -90
  99. package/dist/src/package/cache/index.js +0 -169
  100. package/dist/src/package/cache/local.d.ts +0 -23
  101. package/dist/src/package/cache/local.js +0 -83
  102. package/dist/src/package/cache/metrics.d.ts +0 -27
  103. package/dist/src/package/cache/metrics.js +0 -120
  104. package/dist/src/package/cache/redis.d.ts +0 -16
  105. package/dist/src/package/cache/redis.js +0 -100
  106. package/dist/src/package/config/index.d.ts +0 -195
  107. package/dist/src/package/config/index.js +0 -365
  108. package/dist/src/package/config/provider-limits.d.ts +0 -31
  109. package/dist/src/package/config/provider-limits.js +0 -76
  110. package/dist/src/package/examples/coingecko/batch-warming.d.ts +0 -2
  111. package/dist/src/package/examples/coingecko/batch-warming.js +0 -52
  112. package/dist/src/package/examples/coingecko/index.d.ts +0 -2
  113. package/dist/src/package/examples/coingecko/index.js +0 -10
  114. package/dist/src/package/examples/coingecko/rest.d.ts +0 -2
  115. package/dist/src/package/examples/coingecko/rest.js +0 -50
  116. package/dist/src/package/examples/ncfx/config/index.d.ts +0 -12
  117. package/dist/src/package/examples/ncfx/config/index.js +0 -15
  118. package/dist/src/package/examples/ncfx/index.d.ts +0 -2
  119. package/dist/src/package/examples/ncfx/index.js +0 -10
  120. package/dist/src/package/examples/ncfx/websocket.d.ts +0 -36
  121. package/dist/src/package/examples/ncfx/websocket.js +0 -72
  122. package/dist/src/package/index.d.ts +0 -12
  123. package/dist/src/package/index.js +0 -92
  124. package/dist/src/package/metrics/constants.d.ts +0 -16
  125. package/dist/src/package/metrics/constants.js +0 -25
  126. package/dist/src/package/metrics/index.d.ts +0 -15
  127. package/dist/src/package/metrics/index.js +0 -123
  128. package/dist/src/package/metrics/util.d.ts +0 -3
  129. package/dist/src/package/metrics/util.js +0 -9
  130. package/dist/src/package/package.json +0 -72
  131. package/dist/src/package/rate-limiting/background/fixed-frequency.d.ts +0 -10
  132. package/dist/src/package/rate-limiting/background/fixed-frequency.js +0 -37
  133. package/dist/src/package/rate-limiting/index.d.ts +0 -54
  134. package/dist/src/package/rate-limiting/index.js +0 -63
  135. package/dist/src/package/rate-limiting/metrics.d.ts +0 -3
  136. package/dist/src/package/rate-limiting/metrics.js +0 -44
  137. package/dist/src/package/rate-limiting/request/simple-counting.d.ts +0 -20
  138. package/dist/src/package/rate-limiting/request/simple-counting.js +0 -62
  139. package/dist/src/package/test.d.ts +0 -1
  140. package/dist/src/package/test.js +0 -6
  141. package/dist/src/package/transports/batch-warming.d.ts +0 -34
  142. package/dist/src/package/transports/batch-warming.js +0 -101
  143. package/dist/src/package/transports/index.d.ts +0 -87
  144. package/dist/src/package/transports/index.js +0 -87
  145. package/dist/src/package/transports/metrics.d.ts +0 -21
  146. package/dist/src/package/transports/metrics.js +0 -105
  147. package/dist/src/package/transports/rest.d.ts +0 -43
  148. package/dist/src/package/transports/rest.js +0 -129
  149. package/dist/src/package/transports/util.d.ts +0 -8
  150. package/dist/src/package/transports/util.js +0 -85
  151. package/dist/src/package/transports/websocket.d.ts +0 -80
  152. package/dist/src/package/transports/websocket.js +0 -169
  153. package/dist/src/package/util/expiring-sorted-set.d.ts +0 -21
  154. package/dist/src/package/util/expiring-sorted-set.js +0 -47
  155. package/dist/src/package/util/index.d.ts +0 -11
  156. package/dist/src/package/util/index.js +0 -35
  157. package/dist/src/package/util/logger.d.ts +0 -42
  158. package/dist/src/package/util/logger.js +0 -62
  159. package/dist/src/package/util/request.d.ts +0 -55
  160. package/dist/src/package/util/request.js +0 -2
  161. package/dist/src/package/validation/error.d.ts +0 -50
  162. package/dist/src/package/validation/error.js +0 -79
  163. package/dist/src/package/validation/index.d.ts +0 -5
  164. package/dist/src/package/validation/index.js +0 -86
  165. package/dist/src/package/validation/input-params.d.ts +0 -15
  166. package/dist/src/package/validation/input-params.js +0 -30
  167. package/dist/src/package/validation/override-functions.d.ts +0 -3
  168. package/dist/src/package/validation/override-functions.js +0 -40
  169. package/dist/src/package/validation/preset-tokens.json +0 -23
  170. package/dist/src/package/validation/validator.d.ts +0 -47
  171. package/dist/src/package/validation/validator.js +0 -303
  172. package/dist/src/package.json +0 -72
  173. package/dist/src/rate-limiting/background/fixed-frequency.d.ts +0 -11
  174. package/dist/src/rate-limiting/background/fixed-frequency.js +0 -35
  175. package/dist/src/rate-limiting/index.d.ts +0 -55
  176. package/dist/src/rate-limiting/index.js +0 -63
  177. package/dist/src/rate-limiting/metrics.d.ts +0 -3
  178. package/dist/src/rate-limiting/metrics.js +0 -44
  179. package/dist/src/rate-limiting/request/simple-counting.d.ts +0 -21
  180. package/dist/src/rate-limiting/request/simple-counting.js +0 -62
  181. package/dist/src/test.d.ts +0 -1
  182. package/dist/src/test.js +0 -6
  183. package/dist/src/transports/batch-warming.d.ts +0 -35
  184. package/dist/src/transports/batch-warming.js +0 -101
  185. package/dist/src/transports/index.d.ts +0 -70
  186. package/dist/src/transports/index.js +0 -87
  187. package/dist/src/transports/metrics.d.ts +0 -22
  188. package/dist/src/transports/metrics.js +0 -105
  189. package/dist/src/transports/rest.d.ts +0 -44
  190. package/dist/src/transports/rest.js +0 -131
  191. package/dist/src/transports/util.d.ts +0 -8
  192. package/dist/src/transports/util.js +0 -85
  193. package/dist/src/transports/websocket.d.ts +0 -80
  194. package/dist/src/transports/websocket.js +0 -166
  195. package/dist/src/util/expiring-sorted-set.d.ts +0 -21
  196. package/dist/src/util/expiring-sorted-set.js +0 -47
  197. package/dist/src/util/index.d.ts +0 -12
  198. package/dist/src/util/index.js +0 -35
  199. package/dist/src/util/logger.d.ts +0 -42
  200. package/dist/src/util/logger.js +0 -62
  201. package/dist/src/util/request.d.ts +0 -57
  202. package/dist/src/util/request.js +0 -2
  203. package/dist/src/util/subscription-set/expiring-sorted-set.d.ts +0 -22
  204. package/dist/src/util/subscription-set/expiring-sorted-set.js +0 -47
  205. package/dist/src/util/subscription-set/subscription-set.d.ts +0 -18
  206. package/dist/src/util/subscription-set/subscription-set.js +0 -19
  207. package/dist/src/util/test-payload-loader.d.ts +0 -25
  208. package/dist/src/util/test-payload-loader.js +0 -83
  209. package/dist/src/validation/error.d.ts +0 -50
  210. package/dist/src/validation/error.js +0 -79
  211. package/dist/src/validation/index.d.ts +0 -5
  212. package/dist/src/validation/index.js +0 -91
  213. package/dist/src/validation/input-params.d.ts +0 -15
  214. package/dist/src/validation/input-params.js +0 -30
  215. package/dist/src/validation/override-functions.d.ts +0 -3
  216. package/dist/src/validation/override-functions.js +0 -40
  217. package/dist/src/validation/preset-tokens.json +0 -23
  218. package/dist/src/validation/validator.d.ts +0 -47
  219. package/dist/src/validation/validator.js +0 -303
  220. package/src/test.ts +0 -5
@@ -0,0 +1,42 @@
1
+ import nock from 'nock'
2
+ import capturedRequests from './capturedRequests.json'
3
+
4
+ type RecordedRequest = Record<
5
+ string,
6
+ { statusCode: number; response: unknown; method: string; path: string }[]
7
+ >
8
+
9
+ // This is a generic fixture file that can be copy-pasted to generate fixtures from a
10
+ // capturedRequests.json file. To generate a capturedRequests.json file,
11
+ // set env var RECORD=true and run e2e tests.
12
+ export const createMocks = (): nock.Scope[] => {
13
+ const mocks: nock.Scope[] = []
14
+ for (const baseUrl in capturedRequests) {
15
+ const mock = nock(baseUrl, { encodedQueryParams: true })
16
+ for (const request of (capturedRequests as RecordedRequest)[baseUrl]) {
17
+ if (request.method === 'GET') {
18
+ mock
19
+ .get((uri: string) => {
20
+ const deconstructedRequestUrl = uri.split(/[?=,&]+/)
21
+ const deconstructedMockUrl = request.path.split(/[?=,&]+/)
22
+ return (
23
+ deconstructedRequestUrl.sort().join(',') === deconstructedMockUrl.sort().join(',')
24
+ )
25
+ })
26
+ .times(100)
27
+ .reply(request.statusCode, () => request.response, [
28
+ 'Content-Type',
29
+ 'application/json',
30
+ 'Connection',
31
+ 'close',
32
+ 'Vary',
33
+ 'Accept-Encoding',
34
+ 'Vary',
35
+ 'Origin',
36
+ ])
37
+ }
38
+ }
39
+ mocks.push(mock)
40
+ }
41
+ return mocks
42
+ }
@@ -56,6 +56,7 @@ const batchEndpointTransport = new BatchWarmingTransport({
56
56
  }
57
57
  },
58
58
  parseResponse: (
59
+ params: AdapterRequestParams[],
59
60
  res: AxiosResponse<ProviderResponseBody>,
60
61
  ): ProviderResult<AdapterRequestParams>[] => {
61
62
  const entries = [] as ProviderResult<AdapterRequestParams>[]
@@ -2,7 +2,7 @@ import { AxiosRequestConfig, AxiosResponse } from 'axios'
2
2
  import { Cache } from '../cache'
3
3
  import { AdapterConfig, SettingsMap } from '../config'
4
4
  import { BackgroundExecuteRateLimiter } from '../rate-limiting'
5
- import { makeLogger, SubscriptionSet } from '../util'
5
+ import { makeLogger, recordRequests, SubscriptionSet } from '../util'
6
6
  import { AdapterRequest, ProviderResult } from '../util/request'
7
7
  import { Transport, buildCacheEntriesFromResults } from './'
8
8
  import { axiosRequest } from './util'
@@ -48,6 +48,7 @@ export class BatchWarmingTransport<
48
48
  context: AdapterContext<CustomSettings>,
49
49
  ) => AxiosRequestConfig<ProviderRequestBody>
50
50
  parseResponse: (
51
+ params: AdapterParams[],
51
52
  res: AxiosResponse<ProviderResponseBody>,
52
53
  context: AdapterContext<CustomSettings>,
53
54
  ) => ProviderResult<AdapterParams>[]
@@ -101,8 +102,12 @@ export class BatchWarmingTransport<
101
102
  logger.trace('Sending request to data provider...')
102
103
  const providerResponse = await axiosRequest<ProviderRequestBody, ProviderResponseBody>(request)
103
104
 
105
+ if (process.env['RECORD'] === 'true') {
106
+ recordRequests(request, providerResponse)
107
+ }
108
+
104
109
  logger.debug(`Got response from provider, parsing (raw body: ${providerResponse.data})`)
105
- const results = this.config.parseResponse(providerResponse, context)
110
+ const results = this.config.parseResponse(entries, providerResponse, context)
106
111
  const adapterResponses = buildCacheEntriesFromResults(results, context)
107
112
 
108
113
  logger.debug('Setting adapter responses in cache')
@@ -2,7 +2,7 @@ import { AdapterRequest, AdapterResponse } from '../util/request'
2
2
  import { Transport } from './'
3
3
  import { Cache } from '../cache'
4
4
  import { AxiosRequestConfig, AxiosResponse } from 'axios'
5
- import { makeLogger, sleep } from '../util'
5
+ import { makeLogger, recordRequests, sleep } from '../util'
6
6
  import { AdapterConfig, SettingsMap } from '../config'
7
7
  import { RequestRateLimiter } from '../rate-limiting'
8
8
  import { AdapterError } from '../validation/error'
@@ -124,6 +124,10 @@ export class RestTransport<
124
124
  logger.trace('Sending request to data provider...')
125
125
  const providerResponse = await axiosRequest<ProviderRequestBody, ProviderResponseBody>(request)
126
126
 
127
+ if (process.env['RECORD'] === 'true') {
128
+ recordRequests(request, providerResponse)
129
+ }
130
+
127
131
  logger.debug(`Got response from provider, parsing (raw body: ${providerResponse.data})`) // TODO: Sensitive data?
128
132
  const parsedResponse = await this.config.parseResponse(req, providerResponse, config)
129
133
 
package/src/util/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './request'
2
2
  export * from './logger'
3
+ export * from './recordRequests'
3
4
  export * from './subscription-set/subscription-set'
4
5
 
5
6
  /**
@@ -0,0 +1,47 @@
1
+ import fs from 'fs'
2
+ import { AxiosRequestConfig, AxiosResponse } from 'axios'
3
+
4
+ export const recordRequests = (
5
+ requestConfig: AxiosRequestConfig<unknown>,
6
+ providerResponse: AxiosResponse<unknown, unknown>,
7
+ ) => {
8
+ let recordedRequests: Record<
9
+ string,
10
+ { method: string; path: string; data?: unknown; response: unknown; statusCode: number }[]
11
+ > = {}
12
+ try {
13
+ recordedRequests = JSON.parse(fs.readFileSync('capturedRequests.json').toString())
14
+ } catch {} // eslint-disable-line no-empty
15
+ let baseUrl = requestConfig.baseURL as string
16
+ baseUrl =
17
+ nthIndexOf(baseUrl, '/', 3) === -1 ? baseUrl : baseUrl.slice(0, nthIndexOf(baseUrl, '/', 3))
18
+ const recordedRequest = {
19
+ method: requestConfig.method as string,
20
+ path: providerResponse.request.path,
21
+ data: requestConfig.data,
22
+ response: providerResponse.data,
23
+ statusCode: providerResponse.status,
24
+ }
25
+ if (!recordedRequests[baseUrl]) {
26
+ recordedRequests[baseUrl] = [recordedRequest]
27
+ } else if (
28
+ recordedRequests[baseUrl].every((r) => {
29
+ return r.path !== recordedRequest.path
30
+ })
31
+ ) {
32
+ recordedRequests[baseUrl].push(recordedRequest)
33
+ }
34
+ fs.writeFileSync('capturedRequests.json', JSON.stringify(recordedRequests))
35
+ }
36
+
37
+ const nthIndexOf = (input: string, match: string, n: number) => {
38
+ let i = -1
39
+ let n_ = n
40
+ while (n_-- && i++ < input.length) {
41
+ i = input.indexOf(match, i)
42
+ if (i < 0) {
43
+ break
44
+ }
45
+ }
46
+ return i
47
+ }
@@ -0,0 +1,44 @@
1
+ import { InitializedAdapter } from '../adapter'
2
+ import { AdapterRequest } from '../util/request'
3
+
4
+ type Overrides = Record<string, Record<string, string>>
5
+
6
+ export const performSymbolOverrides = (adapter: InitializedAdapter, req: AdapterRequest) => {
7
+ let adapterOverrides = {} as Record<string, string>
8
+ if (
9
+ req.requestContext.data &&
10
+ req.requestContext.data['overrides'] &&
11
+ (req.requestContext.data['overrides'] as Overrides)[adapter.name]
12
+ ) {
13
+ adapterOverrides = (req.requestContext.data['overrides'] as Overrides)[adapter.name]
14
+ }
15
+ if (!Array.isArray(req.requestContext.data['base'])) {
16
+ // Perform overrides specified in the request payload
17
+ req.requestContext.data['base'] =
18
+ adapterOverrides[req.requestContext.data['base'] as string] ?? req.requestContext.data['base']
19
+ // Perform hardcoded overrides
20
+ if (adapter.overrides) {
21
+ req.requestContext.data['base'] =
22
+ adapter.overrides[req.requestContext.data['base'] as string] ??
23
+ req.requestContext.data['base']
24
+ }
25
+ return
26
+ }
27
+ let requestedSymbols = req.requestContext.data['base']
28
+ for (let i = 0; i < requestedSymbols.length; i++) {
29
+ const symbol = requestedSymbols[i]
30
+ // Perform overrides specified in the request payload
31
+ let overriddenSymbol =
32
+ adapterOverrides[symbol.toUpperCase()] ?? adapterOverrides[symbol.toLowerCase()]
33
+ // Perform hardcoded overrides
34
+ if (adapter.overrides) {
35
+ overriddenSymbol =
36
+ adapter.overrides[symbol.toUpperCase()] ??
37
+ adapter.overrides[symbol.toLowerCase()] ??
38
+ overriddenSymbol
39
+ }
40
+ requestedSymbols[i] = overriddenSymbol ?? requestedSymbols[i]
41
+ }
42
+ requestedSymbols = requestedSymbols.length > 1 ? requestedSymbols : requestedSymbols[1]
43
+ req.requestContext.data['base'] = requestedSymbols
44
+ }
@@ -96,6 +96,7 @@ class MockBatchWarmingTransport extends BatchWarmingTransport<
96
96
  }
97
97
  },
98
98
  parseResponse: (
99
+ params: AdapterRequestParams[],
99
100
  res: AxiosResponse<ProviderResponseBody>,
100
101
  ): ProviderResult<AdapterRequestParams>[] => {
101
102
  return res.data.prices.map((p) => {
@@ -2,12 +2,12 @@ import untypedTest, { TestFn } from 'ava'
2
2
  import axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios'
3
3
  import { AddressInfo } from 'net'
4
4
  import nock from 'nock'
5
- import { expose } from '../src'
6
- import { Adapter, AdapterEndpoint } from '../src/adapter'
7
- import { EmptySettings } from '../src/config'
8
- import { RestTransport } from '../src/transports'
9
- import { AdapterRequest, AdapterResponse } from '../src/util'
10
- import { loadTestPayload } from '../src/util/test-payload-loader'
5
+ import { expose } from '../../src'
6
+ import { Adapter, AdapterEndpoint } from '../../src/adapter'
7
+ import { EmptySettings } from '../../src/config'
8
+ import { RestTransport } from '../../src/transports'
9
+ import { AdapterRequest, AdapterResponse } from '../../src/util'
10
+ import { loadTestPayload } from '../../src/util/test-payload-loader'
11
11
 
12
12
  const test = untypedTest as TestFn
13
13
 
@@ -99,7 +99,7 @@ const quote = 'USD'
99
99
  const price = 1234
100
100
 
101
101
  test('Test payload loader static', async (t) => {
102
- const testPayload = loadTestPayload('test-payload.json')
102
+ const testPayload = loadTestPayload('test/smoke/test-payload.json')
103
103
  if (testPayload.isDefault) {
104
104
  t.fail('Test payload loader return isDefault request unexpectedly')
105
105
  return
@@ -108,7 +108,7 @@ test('Test payload loader static', async (t) => {
108
108
  })
109
109
 
110
110
  test('Test payload loader dynamic', async (t) => {
111
- const testPayload = loadTestPayload('test-payload.js')
111
+ const testPayload = loadTestPayload('test/smoke/test-payload.js')
112
112
  if (testPayload.isDefault) {
113
113
  t.fail('Test payload loader return isDefault request unexpectedly')
114
114
  return
@@ -119,13 +119,13 @@ test('Test payload loader dynamic', async (t) => {
119
119
  t.deepEqual(testPayload.requests[3], { from: 'BTC', to: 'JPY' })
120
120
  })
121
121
 
122
- test('Test payload loader bad file name', async (t) => {
123
- const testPayload = loadTestPayload('test-payload-bad.json')
124
- t.is(testPayload.isDefault, false)
122
+ test.only('Test payload loader bad file name', async (t) => {
123
+ const testPayload = loadTestPayload('test/smoke/test-payload-bad.json')
124
+ t.is(testPayload.isDefault, true)
125
125
  })
126
126
 
127
127
  test.serial('Test smoke endpoint success', async (t) => {
128
- process.env['SMOKE_TEST_PAYLOAD_FILE_NAME'] = 'test-payload.json'
128
+ process.env['SMOKE_TEST_PAYLOAD_FILE_NAME'] = 'test/smoke/test-payload.json'
129
129
  const server = await expose(adapter)
130
130
  if (!server) {
131
131
  throw 'Server did not start'
@@ -150,7 +150,7 @@ test.serial('Test smoke endpoint success', async (t) => {
150
150
  })
151
151
 
152
152
  test.serial('Test smoke endpoint failure', async (t) => {
153
- process.env['SMOKE_TEST_PAYLOAD_FILE_NAME'] = 'test-payload-fail.json'
153
+ process.env['SMOKE_TEST_PAYLOAD_FILE_NAME'] = 'test/smoke/test-payload-fail.json'
154
154
  const server = await expose(adapter)
155
155
  if (!server) {
156
156
  throw 'Server did not start'
File without changes
@@ -75,6 +75,7 @@ class MockBatchWarmingTransport extends BatchWarmingTransport<
75
75
  }
76
76
  },
77
77
  parseResponse: (
78
+ params: AdapterRequestParams[],
78
79
  res: AxiosResponse<ProviderResponseBody>,
79
80
  ): ProviderResult<AdapterRequestParams>[] => {
80
81
  return res.data.prices.map((p) => {
package/tsconfig.json CHANGED
@@ -11,6 +11,7 @@
11
11
  // Type checking
12
12
  "allowUnreachableCode": false,
13
13
  "allowUnusedLabels": false,
14
+ "allowJs": true,
14
15
  "alwaysStrict": true,
15
16
  "noImplicitAny": true,
16
17
  "noImplicitOverride": true,
@@ -19,7 +20,9 @@
19
20
  "noPropertyAccessFromIndexSignature": true,
20
21
  "noUnusedLocals": true,
21
22
  "strict": true,
22
- "declaration": true // Emit a d.ts file
23
+ "sourceMap": true,
24
+ // "declaration": true
23
25
  },
26
+ "exclude": ["src/**/test/**/*"],
24
27
  "include": ["./src/**/*"]
25
28
  }
package/webpack.config.js CHANGED
@@ -1,9 +1,15 @@
1
1
  const path = require('path')
2
+ const glob = require('glob')
2
3
 
3
4
  module.exports = {
4
- entry: './src/index.ts',
5
-
6
- devtool: 'inline-source-map',
5
+ target: 'node',
6
+ // entry: './src/index.ts',
7
+ // entry: glob.sync('./src/**/*.test.{ts,tsx}').reduce((acc, file) => {
8
+ // acc[file.replace(/^\.\/src\//, '')] = file
9
+ // return acc
10
+ // }, {}),
11
+ mode: 'development', // This shouldn't be used in production, but is fine for now since the pkg is in active development.
12
+ devtool: 'inline-source-map', // This shouldn't be used in production, but is fine for now since the pkg is in active development.
7
13
  module: {
8
14
  rules: [
9
15
  {
@@ -11,13 +17,41 @@ module.exports = {
11
17
  use: 'ts-loader',
12
18
  exclude: /node_modules/,
13
19
  },
20
+ { test: /\.json$/, type: 'json' },
21
+ // { test: /\.js$/, type: 'js' },
14
22
  ],
15
23
  },
16
24
  resolve: {
17
- extensions: ['.tsx', '.ts', '.js'],
25
+ extensions: ['.tsx', '.ts', '.js', '.json'],
26
+ fallback: {
27
+ // buffer: require.resolve('buffer'),
28
+ // https: require.resolve('https-browserify'),
29
+ // assert: require.resolve('assert'),
30
+ // http: require.resolve('stream-http'),
31
+ // querystring: require.resolve('querystring-es3'),
32
+ // url: require.resolve('url'),
33
+ // stream: require.resolve('stream-browserify'),
34
+ // crypto: require.resolve('crypto-browserify'),
35
+ // path: require.resolve('path-browserify'),
36
+ // os: require.resolve('os-browserify/browser'),
37
+ // process: require.resolve('process/browser'),
38
+ // fs: false,
39
+ // tls: false,
40
+ long: false,
41
+ },
42
+ // alias: {
43
+ // 'node:async_hooks': 'async_hooks',
44
+ // },
18
45
  },
19
46
  output: {
20
- filename: 'bundle.js',
47
+ // filename: 'bundle.js',
21
48
  path: path.resolve(__dirname, 'dist'),
49
+ // filename: '[name].[contenthash].js',
50
+ filename: '[name].js',
51
+ },
52
+ optimization: {
53
+ splitChunks: {
54
+ chunks: 'all',
55
+ },
22
56
  },
23
57
  }