-
Notifications
You must be signed in to change notification settings - Fork 32
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
SDK: add RFQ #1695
SDK: add RFQ #1695
Changes from 54 commits
bb00e65
35d395e
29f40e5
b9b5b79
49be732
6f01711
a075c0d
3a5c04c
05c4821
3fc3564
40494b1
266b978
740c583
a5cd3ad
1419de6
30972c0
c232272
43e7190
e2e89b2
601af73
0bca1ab
13bf199
0f38c83
fe786cb
438dd57
c34a918
b5a56bc
18b4425
01e23e8
32dcaf6
b5c0c0b
6d9afdb
8fae090
7949f72
4f1dda0
be79abc
77a860a
5276086
4c46d14
fd973fd
41c9d46
9af5cb5
9fade87
60f8a20
48157b4
b821bc9
2087e02
655ee4b
ae4844c
9fa247b
032f4c0
3ec5a76
ad6e838
2f990a6
4a3b78a
6a8fd75
41f7a52
1645c00
32f68b1
5c40fca
a49e86f
c9eb34c
f215684
1c5af4f
dffb9f7
d9ae90e
410ebdb
b1e6301
d0e6a01
a3c745e
139c512
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,69 @@ | ||||||||||||||||||||||||||
import { getAllQuotes } from './api' | ||||||||||||||||||||||||||
import { FastBridgeQuoteAPI, unmarshallFastBridgeQuote } from './quote' | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
describe('getAllQuotes', () => { | ||||||||||||||||||||||||||
const quotesAPI: FastBridgeQuoteAPI[] = [ | ||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||
origin_chain_id: 1, | ||||||||||||||||||||||||||
origin_token_addr: '0x0000000000000000000000000000000000000001', | ||||||||||||||||||||||||||
dest_chain_id: 2, | ||||||||||||||||||||||||||
dest_token_addr: '0x0000000000000000000000000000000000000002', | ||||||||||||||||||||||||||
dest_amount: '3', | ||||||||||||||||||||||||||
max_origin_amount: '4', | ||||||||||||||||||||||||||
fixed_fee: '5', | ||||||||||||||||||||||||||
origin_fast_bridge_address: '10', | ||||||||||||||||||||||||||
dest_fast_bridge_address: '11', | ||||||||||||||||||||||||||
relayer_addr: '0x0000000000000000000000000000000000000003', | ||||||||||||||||||||||||||
updated_at: '2023-01-01T00:00:00.420Z', | ||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||
origin_chain_id: 3, | ||||||||||||||||||||||||||
origin_token_addr: '0x0000000000000000000000000000000000000004', | ||||||||||||||||||||||||||
dest_chain_id: 4, | ||||||||||||||||||||||||||
dest_token_addr: '0x0000000000000000000000000000000000000005', | ||||||||||||||||||||||||||
dest_amount: '6', | ||||||||||||||||||||||||||
max_origin_amount: '7', | ||||||||||||||||||||||||||
fixed_fee: '8', | ||||||||||||||||||||||||||
origin_fast_bridge_address: '20', | ||||||||||||||||||||||||||
dest_fast_bridge_address: '21', | ||||||||||||||||||||||||||
relayer_addr: '0x0000000000000000000000000000000000000006', | ||||||||||||||||||||||||||
updated_at: '2023-01-02T00:00:00.420Z', | ||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||
] | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
it('returns an empty array when the response is not ok', async () => { | ||||||||||||||||||||||||||
global.fetch = jest.fn(() => | ||||||||||||||||||||||||||
Promise.resolve({ | ||||||||||||||||||||||||||
status: 500, | ||||||||||||||||||||||||||
ok: false, | ||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||
) as any | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
const result = await getAllQuotes() | ||||||||||||||||||||||||||
expect(result).toEqual([]) | ||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
it('returns a list of quotes when the response is ok', async () => { | ||||||||||||||||||||||||||
global.fetch = jest.fn(() => | ||||||||||||||||||||||||||
Promise.resolve({ | ||||||||||||||||||||||||||
status: 200, | ||||||||||||||||||||||||||
ok: true, | ||||||||||||||||||||||||||
json: () => Promise.resolve(quotesAPI), | ||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||
) as any | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
const result = await getAllQuotes() | ||||||||||||||||||||||||||
// You might need to adjust this depending on how your unmarshallFastBridgeQuote function works | ||||||||||||||||||||||||||
expect(result).toEqual([ | ||||||||||||||||||||||||||
unmarshallFastBridgeQuote(quotesAPI[0]), | ||||||||||||||||||||||||||
unmarshallFastBridgeQuote(quotesAPI[1]), | ||||||||||||||||||||||||||
]) | ||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
it('Integration test', async () => { | ||||||||||||||||||||||||||
global.fetch = require('node-fetch') | ||||||||||||||||||||||||||
const result = await getAllQuotes() | ||||||||||||||||||||||||||
console.log('Quotes: ' + JSON.stringify(result, null, 2)) | ||||||||||||||||||||||||||
expect(result.length).toBeGreaterThan(0) | ||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||
Comment on lines
+63
to
+68
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The integration test now includes an assertion for the result length, which is an improvement over the previous use of - console.log('Quotes: ' + JSON.stringify(result, null, 2))
+ // Additional structure and content checks can be added here Committable suggestion
Suggested change
|
||||||||||||||||||||||||||
}) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
import { | ||
FastBridgeQuote, | ||
FastBridgeQuoteAPI, | ||
unmarshallFastBridgeQuote, | ||
} from './quote' | ||
|
||
const API_URL = 'https://rfq-api.omnirpc.io' | ||
|
||
/** | ||
* Hits Quoter API /quotes endpoint to get all quotes. | ||
* | ||
* @returns A promise that resolves to the list of quotes. | ||
*/ | ||
export const getAllQuotes = async (): Promise<FastBridgeQuote[]> => { | ||
const response = await fetch(API_URL + '/quotes') | ||
// Return empty list if response is not ok | ||
if (!response.ok) { | ||
return [] | ||
} | ||
// The response is a list of quotes in the FastBridgeQuoteAPI format | ||
const quotes: FastBridgeQuoteAPI[] = await response.json() | ||
return quotes.map(unmarshallFastBridgeQuote) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The
FAST_BRIDGE_ADDRESS
is currently an empty string with a TODO comment to update it once the FastBridge is deployed. Ensure that this placeholder does not cause any issues in the current implementation and that the TODO is addressed before deployment.