diff --git a/src/LaravelBitunixApi.php b/src/LaravelBitunixApi.php index e895a65..3f47c3f 100644 --- a/src/LaravelBitunixApi.php +++ b/src/LaravelBitunixApi.php @@ -18,26 +18,38 @@ use Msr\LaravelBitunixApi\Requests\Header; use Msr\LaravelBitunixApi\Requests\PlaceOrderRequestContract; use Msr\LaravelBitunixApi\Requests\PlacePositionTpSlOrderRequestContract; use Msr\LaravelBitunixApi\Requests\PlaceTpSlOrderRequestContract; +use Msr\LaravelBitunixApi\Support\BitunixAccountConfig; use Psr\Http\Message\ResponseInterface; class LaravelBitunixApi implements ChangeLeverageRequestContract, ChangeMarginModeRequestContract, FlashClosePositionRequestContract, FutureKLineRequestContract, GetHistoryPositionsRequestContract, GetHistoryTradesRequestContract, GetPendingPositionsRequestContract, GetSingleAccountRequestContract, GetTradingPairsRequestContract, PlaceOrderRequestContract, PlacePositionTpSlOrderRequestContract, PlaceTpSlOrderRequestContract { private Client $publicFutureClient; + protected BitunixAccountConfig $config; + public function __construct(protected RateLimiter $rateLimiter) { + $this->config = BitunixAccountConfig::fromConfig(); + $this->publicFutureClient = new Client([ - 'base_uri' => config('bitunix-api.future_base_uri').'/api/v1/futures/market/', + 'base_uri' => ($this->config->baseUrl ?? config('bitunix-api.future_base_uri')).'/api/v1/futures/market/', ]); } + public function forAccount(BitunixAccountConfig $config): self + { + $this->config = $config; + + return $this; + } + protected function getPrivateFutureClient(array $queryParams = [], array $body = []): Client { $bodyString = count($body) ? json_encode($body) : ''; - $headers = Header::generateHeaders($queryParams, $bodyString); + $headers = Header::generateHeaders($queryParams, $bodyString, $this->config); return new Client([ - 'base_uri' => config('bitunix-api.future_base_uri').'/api/v1/futures/', + 'base_uri' => ($this->config->baseUrl ?? config('bitunix-api.future_base_uri')).'/api/v1/futures/', 'headers' => $headers, ]); } @@ -409,6 +421,6 @@ class LaravelBitunixApi implements ChangeLeverageRequestContract, ChangeMarginMo protected function resolveRateLimitIdentity(): string { - return (string) config('bitunix-api.api_key'); + return (string) ($this->config->accountKey ?? $this->config->apiKey); } } diff --git a/src/Requests/Header.php b/src/Requests/Header.php index 70eea0e..c171466 100644 --- a/src/Requests/Header.php +++ b/src/Requests/Header.php @@ -2,6 +2,8 @@ namespace Msr\LaravelBitunixApi\Requests; +use Msr\LaravelBitunixApi\Support\BitunixAccountConfig; + class Header { /** @@ -64,13 +66,13 @@ class Header * 3. Create digest: SHA256(nonce + timestamp + api-key + queryParams + body) * 4. Create sign: SHA256(digest + secretKey) */ - public static function generateSignValue(array $queryParams = [], string $body = '', string $nonce = '', string $timestamp = ''): string + public static function generateSignValue(array $queryParams, string $body, string $nonce, string $timestamp, BitunixAccountConfig $config): string { - $apiKey = config('bitunix-api.api_key'); - $apiSecret = config('bitunix-api.api_secret'); + $apiKey = $config->apiKey; + $apiSecret = $config->apiSecret; if (empty($apiKey) || empty($apiSecret)) { - throw new \InvalidArgumentException('API key and secret must be configured'); + throw new \InvalidArgumentException('API key and secret must be provided in config'); } // Step 1: Sort query parameters in ascending ASCII order @@ -97,18 +99,18 @@ class Header /** * Generate complete headers for authenticated requests */ - public static function generateHeaders(array $queryParams = [], string $body = ''): array + public static function generateHeaders(array $queryParams, string $body, BitunixAccountConfig $config): array { $nonce = self::generateNonce(); $timestamp = self::generateTimestamp(); - $sign = self::generateSignValue($queryParams, $body, $nonce, $timestamp); + $sign = self::generateSignValue($queryParams, $body, $nonce, $timestamp, $config); return [ - 'api-key' => config('bitunix-api.api_key'), + 'api-key' => $config->apiKey, 'sign' => $sign, 'nonce' => $nonce, 'timestamp' => $timestamp, - 'language' => config('bitunix-api.language', 'en-US'), + 'language' => $config->language, //config('bitunix-api.language', 'en-US'), 'Content-Type' => 'application/json', ]; } diff --git a/src/Support/BitunixAccountConfig.php b/src/Support/BitunixAccountConfig.php new file mode 100644 index 0000000..2d519ca --- /dev/null +++ b/src/Support/BitunixAccountConfig.php @@ -0,0 +1,41 @@ +