Skip to content

Commit

Permalink
feat(): add support for other API domains via easy config
Browse files Browse the repository at this point in the history
  • Loading branch information
tiagosiebler committed Sep 9, 2024
1 parent d70b794 commit c83b2ff
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 2 deletions.
57 changes: 57 additions & 0 deletions examples/rest-v5-custom-url.ts
Original file line number Diff line number Diff line change
@@ -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);
}
})();
24 changes: 22 additions & 2 deletions src/util/requestUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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',
};
Expand All @@ -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
Expand Down

0 comments on commit c83b2ff

Please sign in to comment.