Skip to content

Commit 1f72e12

Browse files
authored
Improve EA calling logic (#4140)
1 parent 3a41c79 commit 1f72e12

File tree

5 files changed

+49
-26
lines changed

5 files changed

+49
-26
lines changed

.changeset/breezy-points-care.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@chainlink/llama-guard-adapter': patch
3+
'@chainlink/data-engine-adapter': patch
4+
---
5+
6+
Bug fix

packages/composites/llama-guard/src/transport/ea.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ export const getRawNav = async (source: string, sourceInput: string, requester:
2121
if (!data || !(data as any).result) {
2222
throw new AdapterError({
2323
statusCode: (data as any)?.statusCode || 500,
24-
message: `EA request failed: ${JSON.stringify(response?.response)}`,
24+
message: `EA request failed: ${JSON.stringify(response?.response?.data)} ${
25+
response?.response?.status
26+
} ${response?.response?.statusText}`,
2527
})
2628
}
2729

packages/composites/llama-guard/test/unit/ea.test.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -77,25 +77,33 @@ describe('ea.ts', () => {
7777

7878
requester.request.mockResolvedValueOnce({})
7979
await expect(() => getRawNav('ea', '{}', requester)).rejects.toThrow(
80-
'EA request failed: undefined',
80+
'EA request failed: undefined undefined undefined AdapterError',
8181
)
8282

8383
requester.request.mockResolvedValueOnce({ response: {} })
84-
await expect(() => getRawNav('ea', '{}', requester)).rejects.toThrow('EA request failed: {}')
84+
await expect(() => getRawNav('ea', '{}', requester)).rejects.toThrow(
85+
'EA request failed: undefined undefined undefined AdapterError',
86+
)
8587

86-
requester.request.mockResolvedValueOnce({ response: { data: {} } })
88+
requester.request.mockResolvedValueOnce({
89+
response: { data: {}, status: 404, statusText: 'fail' },
90+
})
8791
await expect(() => getRawNav('ea', '{}', requester)).rejects.toThrow(
88-
'EA request failed: {"data":{}}',
92+
'EA request failed: {} 404 fail AdapterError',
8993
)
9094

91-
requester.request.mockResolvedValueOnce({ response: { data: { result: null } } })
95+
requester.request.mockResolvedValueOnce({
96+
response: { data: { result: null }, status: 200, statusText: 'ok' },
97+
})
9298
await expect(() => getRawNav('ea', '{}', requester)).rejects.toThrow(
93-
'EA request failed: {"data":{"result":null}}',
99+
'EA request failed: {"result":null} 200 ok AdapterError',
94100
)
95101

96-
requester.request.mockResolvedValueOnce({ response: { data: { result: 0 } } })
102+
requester.request.mockResolvedValueOnce({
103+
response: { data: { result: 0 }, status: 200, statusText: 'ok' },
104+
})
97105
await expect(() => getRawNav('ea', '{}', requester)).rejects.toThrow(
98-
'EA request failed: {"data":{"result":0}}',
106+
'EA request failed: {"result":0} 200 ok AdapterError',
99107
)
100108
})
101109

packages/sources/data-engine/src/lib.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import { BaseEndpointTypes as CryptoV3Types } from './endpoint/cryptoV3'
66
import { BaseEndpointTypes as RwaV8Types } from './endpoint/rwaV8'
77

88
export const getCryptoPrice = async (feedId: string, url: string, requester: Requester) =>
9-
(await callEA<CryptoV3Types['Response']>(feedId, 'crypto-v3', url, requester)).Data
9+
callEA<CryptoV3Types['Response']['Data']>(feedId, 'crypto-v3', url, requester)
1010

1111
export const getRwaPrice = async (feedId: string, url: string, requester: Requester) =>
12-
(await callEA<RwaV8Types['Response']>(feedId, 'rwa-v8', url, requester)).Data
12+
callEA<RwaV8Types['Response']['Data']>(feedId, 'rwa-v8', url, requester)
1313

1414
const callEA = async <T>(feedId: string, endpoint: string, url: string, requester: Requester) => {
1515
const requestConfig = {
@@ -24,17 +24,18 @@ const callEA = async <T>(feedId: string, endpoint: string, url: string, requeste
2424
}
2525

2626
try {
27-
const response = await requester.request<T>(JSON.stringify(requestConfig), requestConfig)
27+
const response = await requester.request(JSON.stringify(requestConfig), requestConfig)
2828

2929
const data = response?.response?.data
30-
if (!data || !(data as any).Data) {
30+
if (!data || !(data as any).data) {
3131
throw new AdapterError({
3232
statusCode: (data as any)?.statusCode || 500,
33-
message: `EA request failed: ${JSON.stringify(response?.response)}`,
33+
message: `EA request failed: ${JSON.stringify(response?.response?.data)} ${
34+
response?.response?.status
35+
} ${response?.response?.statusText}`,
3436
})
3537
}
36-
37-
return data
38+
return (data as any).data as T
3839
} catch (e) {
3940
if (e instanceof AdapterError) {
4041
e.message = `${e.message} ${JSON.stringify(e?.errorResponse) || e.name}`

packages/sources/data-engine/test/unit/lib.test.ts

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ describe('lib.ts', () => {
55
const requester = { request: jest.fn() } as any
66
const data = { bid: '1', ask: '2', price: '3', decimals: 4 }
77

8-
requester.request.mockResolvedValueOnce({ response: { data: { result: null, Data: data } } })
8+
requester.request.mockResolvedValueOnce({ response: { data: { result: null, data: data } } })
99

1010
await expect(getCryptoPrice('feed-1', 'ea-url', requester)).resolves.toEqual(data)
1111
})
@@ -14,7 +14,7 @@ describe('lib.ts', () => {
1414
const requester = { request: jest.fn() } as any
1515
const data = { midPrice: '1', marketStatus: 2, decimals: 3 }
1616

17-
requester.request.mockResolvedValueOnce({ response: { data: { result: null, Data: data } } })
17+
requester.request.mockResolvedValueOnce({ response: { data: { result: null, data: data } } })
1818

1919
await expect(getRwaPrice('feed-2', 'ea-url', requester)).resolves.toEqual(data)
2020
})
@@ -24,27 +24,33 @@ describe('lib.ts', () => {
2424

2525
requester.request.mockResolvedValueOnce({})
2626
await expect(() => getCryptoPrice('feed-1', 'ea-url', requester)).rejects.toThrow(
27-
'EA request failed: undefined',
27+
'EA request failed: undefined undefined undefined AdapterError',
2828
)
2929

3030
requester.request.mockResolvedValueOnce({ response: {} })
3131
await expect(() => getCryptoPrice('feed-1', 'ea-url', requester)).rejects.toThrow(
32-
'EA request failed: {}',
32+
'EA request failed: undefined undefined undefined AdapterError',
3333
)
3434

35-
requester.request.mockResolvedValueOnce({ response: { data: {} } })
35+
requester.request.mockResolvedValueOnce({
36+
response: { data: {}, status: 404, statusText: 'fail' },
37+
})
3638
await expect(() => getCryptoPrice('feed-1', 'ea-url', requester)).rejects.toThrow(
37-
'EA request failed: {"data":{}}',
39+
'EA request failed: {} 404 fail AdapterError',
3840
)
3941

40-
requester.request.mockResolvedValueOnce({ response: { data: { result: null } } })
42+
requester.request.mockResolvedValueOnce({
43+
response: { data: { result: null }, status: 200, statusText: 'ok' },
44+
})
4145
await expect(() => getCryptoPrice('feed-1', 'ea-url', requester)).rejects.toThrow(
42-
'EA request failed: {"data":{"result":null}}',
46+
'EA request failed: {"result":null} 200 ok AdapterError',
4347
)
4448

45-
requester.request.mockResolvedValueOnce({ response: { data: { result: { Data: null } } } })
49+
requester.request.mockResolvedValueOnce({
50+
response: { data: { result: { data: null } }, status: 200, statusText: 'ok' },
51+
})
4652
await expect(() => getCryptoPrice('feed-1', 'ea-url', requester)).rejects.toThrow(
47-
'EA request failed: {"data":{"result":{"Data":null}}}',
53+
'EA request failed: {"result":{"data":null}} 200 ok AdapterError',
4854
)
4955
})
5056
})

0 commit comments

Comments
 (0)