diff --git a/composer.json b/composer.json index a0fe058..d19e151 100644 --- a/composer.json +++ b/composer.json @@ -26,9 +26,9 @@ "illuminate/contracts": "^10.0||^11.0||^12.0||^13.0" }, "require-dev": { - "laravel/pint": "^1.14", - "nunomaduro/collision": "^8.8", "larastan/larastan": "^3.0", + "laravel/pint": "^1.29", + "nunomaduro/collision": "^8.8", "orchestra/testbench": "^10.0.0||^9.0.0", "pestphp/pest": "^4.0", "pestphp/pest-plugin-arch": "^4.0", @@ -55,7 +55,8 @@ "analyse": "vendor/bin/phpstan analyse", "test": "vendor/bin/pest", "test-coverage": "vendor/bin/pest --coverage", - "format": "vendor/bin/pint" + "format": "vendor/bin/pint", + "pint": "vendor/bin/pint --ansi" }, "config": { "sort-packages": true, @@ -74,7 +75,7 @@ } } }, - "version": "1.2.2", + "version": "1.2.3", "minimum-stability": "stable", "prefer-stable": true } diff --git a/src/LaravelBitunixApi.php b/src/LaravelBitunixApi.php index 4776360..e895a65 100644 --- a/src/LaravelBitunixApi.php +++ b/src/LaravelBitunixApi.php @@ -4,6 +4,7 @@ namespace Msr\LaravelBitunixApi; use GuzzleHttp\Client; use GuzzleHttp\Exception\GuzzleException; +use Msr\LaravelBitunixApi\Contracts\RateLimiterContract as RateLimiter; use Msr\LaravelBitunixApi\Requests\ChangeLeverageRequestContract; use Msr\LaravelBitunixApi\Requests\ChangeMarginModeRequestContract; use Msr\LaravelBitunixApi\Requests\FlashClosePositionRequestContract; @@ -19,19 +20,14 @@ use Msr\LaravelBitunixApi\Requests\PlacePositionTpSlOrderRequestContract; use Msr\LaravelBitunixApi\Requests\PlaceTpSlOrderRequestContract; use Psr\Http\Message\ResponseInterface; -class LaravelBitunixApi implements ChangeLeverageRequestContract, ChangeMarginModeRequestContract, - FlashClosePositionRequestContract, FutureKLineRequestContract, - GetPendingPositionsRequestContract, GetSingleAccountRequestContract, - GetTradingPairsRequestContract, PlaceOrderRequestContract, - PlacePositionTpSlOrderRequestContract, PlaceTpSlOrderRequestContract, - GetHistoryPositionsRequestContract, GetHistoryTradesRequestContract +class LaravelBitunixApi implements ChangeLeverageRequestContract, ChangeMarginModeRequestContract, FlashClosePositionRequestContract, FutureKLineRequestContract, GetHistoryPositionsRequestContract, GetHistoryTradesRequestContract, GetPendingPositionsRequestContract, GetSingleAccountRequestContract, GetTradingPairsRequestContract, PlaceOrderRequestContract, PlacePositionTpSlOrderRequestContract, PlaceTpSlOrderRequestContract { private Client $publicFutureClient; - public function __construct() + public function __construct(protected RateLimiter $rateLimiter) { $this->publicFutureClient = new Client([ - 'base_uri' => config('bitunix-api.future_base_uri') . '/api/v1/futures/market/', + 'base_uri' => config('bitunix-api.future_base_uri').'/api/v1/futures/market/', ]); } @@ -41,7 +37,7 @@ class LaravelBitunixApi implements ChangeLeverageRequestContract, ChangeMarginMo $headers = Header::generateHeaders($queryParams, $bodyString); return new Client([ - 'base_uri' => config('bitunix-api.future_base_uri') . '/api/v1/futures/', + 'base_uri' => config('bitunix-api.future_base_uri').'/api/v1/futures/', 'headers' => $headers, ]); } @@ -211,6 +207,13 @@ class LaravelBitunixApi implements ChangeLeverageRequestContract, ChangeMarginMo int $skip = 0, int $limit = 100 ): ResponseInterface { + $this->rateLimiter->throttle( + 'futures::get_history_trades', + $this->resolveRateLimitIdentity(), + maxRequests: 8, + perSeconds: 1 + ); + $queryParams = [ 'skip' => $skip, 'limit' => $limit, @@ -243,7 +246,6 @@ class LaravelBitunixApi implements ChangeLeverageRequestContract, ChangeMarginMo return $response; } - public function getPendingPositions(?string $symbol = null, ?string $positionId = null): ResponseInterface { $queryParams = []; @@ -273,6 +275,13 @@ class LaravelBitunixApi implements ChangeLeverageRequestContract, ChangeMarginMo int $skip = 0, int $limit = 100 ): ResponseInterface { + $this->rateLimiter->throttle( + 'futures::get_history_positions', + $this->resolveRateLimitIdentity(), + maxRequests: 8, + perSeconds: 1 + ); + $queryParams = [ 'skip' => $skip, 'limit' => $limit, diff --git a/src/LaravelBitunixApiServiceProvider.php b/src/LaravelBitunixApiServiceProvider.php index e72b2b4..485efc2 100644 --- a/src/LaravelBitunixApiServiceProvider.php +++ b/src/LaravelBitunixApiServiceProvider.php @@ -2,6 +2,7 @@ namespace Msr\LaravelBitunixApi; +use Illuminate\Contracts\Cache\Factory as CacheFactory; use Msr\LaravelBitunixApi\Commands\LaravelBitunixApiCommand; use Msr\LaravelBitunixApi\Contracts\RateLimiterContract; use Msr\LaravelBitunixApi\Requests\ChangeLeverageRequestContract; @@ -19,7 +20,6 @@ use Msr\LaravelBitunixApi\Requests\PlaceTpSlOrderRequestContract; use Msr\LaravelBitunixApi\Support\CacheRateLimiter; use Spatie\LaravelPackageTools\Package; use Spatie\LaravelPackageTools\PackageServiceProvider; -use Illuminate\Contracts\Cache\Factory as CacheFactory; class LaravelBitunixApiServiceProvider extends PackageServiceProvider { diff --git a/src/Support/CacheRateLimiter.php b/src/Support/CacheRateLimiter.php index fee64e2..75e6548 100644 --- a/src/Support/CacheRateLimiter.php +++ b/src/Support/CacheRateLimiter.php @@ -9,8 +9,7 @@ class CacheRateLimiter implements RateLimiterContract { public function __construct( protected Repository $cache, - ) { - } + ) {} public function throttle( string $bucket,