diff --git a/examples/rest-v5-custom-url.ts b/examples/rest-v5-custom-url.ts new file mode 100644 index 0000000..80b02ce --- /dev/null +++ b/examples/rest-v5-custom-url.ts @@ -0,0 +1,57 @@ +import { RestClientV5 } from '../src/index'; + +// or +// import { RestClientV5 } from 'bybit-api'; + +/** + * The first parameter of the REST client allows you to pass any configuration parameters supported by the SDK. + * + * These include API keys, if you wish to use private endpoints, but also expose other features such as + * setting a custom base URL (e.g. for Turkish users). + * + * Refer to the API documentation for a complete list of domains: https://bybit-exchange.github.io/docs/v5/guide#authentication + */ +const client = new RestClientV5({ + /** + * You can pass a completely custom base URL, + * e.g. if you're trying to use a domain that hasn't been added yet (please let us know) + */ + // baseUrl: 'https://api5.bybit.com', + // + // + /** + * + * There are also predefined API regions, which you can easily use with the "apiRegion" property: + * + */ + // + // + // default: routes to api.bybit.com + // apiRegion: 'default', + // + // + // bytick: routes to api.bytick.com + // apiRegion: 'bytick', + // + // + // NL: routes to api.bybit.nl (for Netherland users) + // apiRegion: 'NL', + // + // + // HK: routes to api.byhkbit.com (for Hong Kong users) + // apiRegion: 'HK', + // + // + // TK: routes to api.bybit-tr.com (for Turkey users) + // apiRegion: 'TK', +}); + +(async () => { + try { + const time1 = await client.getServerTime(); + + console.log('time res: ', { time1 }); + } catch (e) { + console.error('request failed: ', e); + } +})(); diff --git a/src/util/requestUtils.ts b/src/util/requestUtils.ts index 541da61..4c541bb 100644 --- a/src/util/requestUtils.ts +++ b/src/util/requestUtils.ts @@ -51,6 +51,8 @@ export interface RestClientOptions { **/ baseUrl?: string; + apiRegion?: 'default' | 'bytick' | 'NL' | 'HK' | 'TK'; + /** Default: true. whether to try and post-process request exceptions. */ parse_exceptions?: boolean; @@ -100,7 +102,13 @@ export function getRestBaseUrl( restClientOptions: RestClientOptions, ): string { const exchangeBaseUrls = { - livenet: 'https://api.bybit.com', + livenet: { + default: 'https://api.bybit.com', + bytick: 'https://api.bytick.com', + NL: 'https://api.bybit.nl', + HK: 'https://api.byhkbit.com', + TK: 'https://api.bybit-tr.com', + }, testnet: 'https://api-testnet.bybit.com', demoLivenet: 'https://api-demo.bybit.com', }; @@ -117,7 +125,19 @@ export function getRestBaseUrl( return exchangeBaseUrls.testnet; } - return exchangeBaseUrls.livenet; + if (restClientOptions.apiRegion) { + const regionalBaseURL = + exchangeBaseUrls.livenet[restClientOptions.apiRegion]; + + if (!regionalBaseURL) { + throw new Error( + `No base URL found for region "${restClientOptions.apiRegion}". Check that your "apiRegion" value is valid.`, + ); + } + return regionalBaseURL; + } + + return exchangeBaseUrls.livenet.default; } // eslint-disable-next-line @typescript-eslint/no-explicit-any