├── .gitignore ├── src ├── config │ └── anthropic.php ├── Responses │ ├── Response.php │ ├── ErrorResponse.php │ ├── MessageResponse.php │ └── StreamResponse.php ├── Facades │ └── Anthropic.php ├── Exceptions │ ├── ClientException.php │ └── StreamException.php ├── Contracts │ └── APIResource.php ├── AnthropicAPI.php ├── Providers │ └── AnthropicServiceProvider.php ├── Client.php └── Resources │ └── MessagesResource.php ├── composer.json ├── LICENSE ├── README.md └── composer.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor/ 2 | .DS_Store 3 | -------------------------------------------------------------------------------- /src/config/anthropic.php: -------------------------------------------------------------------------------- 1 | env('ANTHROPIC_API_KEY'), 5 | 'api_version' => env('ANTHROPIC_API_VERSION'), 6 | ]; 7 | -------------------------------------------------------------------------------- /src/Responses/Response.php: -------------------------------------------------------------------------------- 1 | version = $apiVersion; 19 | } 20 | 21 | $this->client = new Client($this->baseUrl, $this->headers()); 22 | } 23 | 24 | public function messages(): MessagesResource 25 | { 26 | return new MessagesResource($this->client); 27 | } 28 | 29 | private function headers(): array 30 | { 31 | return [ 32 | 'x-api-key' => $this->apiKey, 33 | 'content-type' => 'application/json', 34 | 'anthropic-version' => $this->version, 35 | ]; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/Providers/AnthropicServiceProvider.php: -------------------------------------------------------------------------------- 1 | app->singleton(AnthropicAPI::class, function ($app) { 17 | return new AnthropicAPI( 18 | Config::get('anthropic.api_key'), 19 | Config::get('anthropic.api_version') 20 | ); 21 | }); 22 | 23 | $this->mergeConfigFrom( 24 | __DIR__.'/../config/anthropic.php', 'anthropic' 25 | ); 26 | } 27 | 28 | /** 29 | * Bootstrap services. 30 | */ 31 | public function boot(): void 32 | { 33 | $this->publishes([ 34 | __DIR__.'/../config/anthropic.php' => config_path('anthropic.php'), 35 | ]); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Greg Hunt 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/Responses/ErrorResponse.php: -------------------------------------------------------------------------------- 1 | response->getBody()->getContents(), true); 16 | $this->type = $data['type']; 17 | $this->error = new ErrorDetails($data['error']); 18 | } 19 | 20 | public function getType(): string 21 | { 22 | return $this->type; 23 | } 24 | 25 | public function getError(): ErrorDetails 26 | { 27 | return $this->error; 28 | } 29 | } 30 | 31 | class ErrorDetails 32 | { 33 | private string $type; 34 | 35 | private string $message; 36 | 37 | public function __construct(array $data) 38 | { 39 | $this->type = $data['type']; 40 | $this->message = $data['message']; 41 | } 42 | 43 | public function getType(): string 44 | { 45 | return $this->type; 46 | } 47 | 48 | public function getMessage(): string 49 | { 50 | return $this->message; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/Responses/MessageResponse.php: -------------------------------------------------------------------------------- 1 | response->getBody()->getContents(), true); 28 | 29 | $this->id = $data['id']; 30 | $this->type = $data['type']; 31 | $this->role = $data['role']; 32 | $this->content = $data['content']; 33 | $this->model = $data['model']; 34 | $this->stopReason = $data['stop_reason']; 35 | $this->stopSequence = $data['stop_sequence']; 36 | $this->usage = new Usage($data['usage']); 37 | } 38 | } 39 | 40 | class Usage 41 | { 42 | public int $inputTokens; 43 | 44 | public int $outputTokens; 45 | 46 | public function __construct(array $data) 47 | { 48 | $this->inputTokens = $data['input_tokens']; 49 | $this->outputTokens = $data['output_tokens']; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/Responses/StreamResponse.php: -------------------------------------------------------------------------------- 1 | response->getBody()->eof()) { 23 | $line = $this->readLine($this->response->getBody()); 24 | 25 | if (! str_starts_with($line, 'data:')) { 26 | continue; 27 | } 28 | 29 | $data = trim(substr($line, strlen('data:'))); 30 | 31 | if ($data === '[DONE]') { 32 | break; 33 | } 34 | 35 | /** @var array{error?: array{message: string|array, type: string, code: string}} $response */ 36 | $response = json_decode($data, true, flags: JSON_THROW_ON_ERROR); 37 | 38 | if (isset($response['error'])) { 39 | throw new StreamException($response['error']); 40 | } 41 | 42 | yield $response; 43 | } 44 | } 45 | 46 | /** 47 | * Read a line from the stream. 48 | */ 49 | private function readLine(StreamInterface $stream): string 50 | { 51 | $buffer = ''; 52 | 53 | while (! $stream->eof()) { 54 | if ('' === ($byte = $stream->read(1))) { 55 | return $buffer; 56 | } 57 | $buffer .= $byte; 58 | if ($byte === "\n") { 59 | break; 60 | } 61 | } 62 | 63 | return $buffer; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/Client.php: -------------------------------------------------------------------------------- 1 | client = new GuzzleClient([ 19 | 'base_uri' => $this->baseUrl, 20 | 'headers' => $headers, 21 | ]); 22 | } 23 | 24 | public function post(string $endpoint, array $args, array $extraHeaders = []): ResponseInterface|ErrorResponse 25 | { 26 | try { 27 | return $this->client->post($endpoint, [ 28 | 'json' => $args, 29 | 'headers' => array_merge($this->client->getConfig('headers'), $extraHeaders), 30 | ]); 31 | } catch (RequestException $e) { 32 | $this->badRequest($e); 33 | } 34 | } 35 | 36 | public function stream(string $endpoint, array $args, array $extraHeaders = []): StreamResponse 37 | { 38 | try { 39 | $response = $this->client->post($endpoint, [ 40 | 'json' => $args, 41 | 'stream' => true, 42 | 'headers' => array_merge($this->client->getConfig('headers'), $extraHeaders), 43 | ]); 44 | 45 | return new StreamResponse($response); 46 | } catch (RequestException $e) { 47 | $this->badRequest($e); 48 | } 49 | } 50 | 51 | private function badRequest(RequestException $e): void 52 | { 53 | $response = $e->getResponse(); 54 | $error = (new ErrorResponse($response))->getError(); 55 | 56 | throw new AnthropicClientException($error->getMessage(), $response->getStatusCode(), $e); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Anthropic PHP SDK 2 | 3 | This library provides convenient access to the Anthropic REST API from server-side PHP 4 | 5 | ## Installation 6 | 7 | ```sh 8 | composer require wpai-inc/anthropic-sdk-php 9 | ``` 10 | 11 | ## Usage 12 | 13 | Set your API key in the constructor: 14 | 15 | ```php 16 | $anthropic = new \WpAi\Anthropic\AnthropicAPI($apiKey); 17 | ``` 18 | 19 | ### Messages Resource 20 | 21 | The only resource available is `/messages`. Note, `/completions` is deprecated and so isn't available in this library. 22 | 23 | ```php 24 | $messages = [ 25 | [ 26 | 'role' => 'user', 27 | 'content' => 'How can you help me?', 28 | ], 29 | ]; 30 | $options = [ 31 | 'model' => 'claude-3-opus-20240229', 32 | 'maxTokens' => 1024, 33 | 'messages' => $messages, 34 | ]; 35 | 36 | $anthropic->messages()->create($options); 37 | ``` 38 | 39 | The options above are required. You may also set them fluently like this: 40 | 41 | ```php 42 | $anthropic->messages()->maxTokens(2048)->create($messages); 43 | ``` 44 | 45 | All other optional [options](https://docs.anthropic.com/claude/reference/messages_post) can be set in the same ways. 46 | 47 | To include additional HTTP headers in the request, such as those required for enabling extended token limits, pass an array as the second argument to the `create()` method. For example, to enable support for 8192 max tokens: 48 | 49 | ```php 50 | $response = Anthropic::messages()->create($query, [ 'anthropic-beta' => 'max-tokens-3-5-sonnet-2024-07-15' ]); 51 | ``` 52 | 53 | #### Stream 54 | 55 | A streamed response follows all of the same options as `create()` but may be invoked with: 56 | 57 | ```php 58 | $anthropic->messages()->stream($options); 59 | 60 | while (! $stream->eof()) { 61 | echo $stream->read(1024); 62 | ob_flush(); 63 | flush(); 64 | } 65 | ``` 66 | 67 | You may set extra HTTP headers by passing an array as a second argument to `stream()`. 68 | 69 | ## Laravel 70 | 71 | This library may also be used in Laravel. 72 | 73 | ```php 74 | use WpAi\Anthropic\Facades\Anthropic; 75 | 76 | // Create a message 77 | $response = Anthropic::messages() 78 | ->model('claude-v1') 79 | ->maxTokens(100) 80 | ->messages([ 81 | ['role' => 'user', 'content' => 'Hello, Claude!'], 82 | ]) 83 | ->create(); 84 | 85 | // Stream a message 86 | $stream = Anthropic::messages() 87 | ->model('claude-v1') 88 | ->maxTokens(100) 89 | ->messages([ 90 | ['role' => 'user', 'content' => 'Tell me a story.'], 91 | ]) 92 | ->stream(); 93 | ``` 94 | 95 | Publish the config with: 96 | 97 | ```sh 98 | php artisan vendor:publish --provider="WpAi\Anthropic\Providers\AnthropicServiceProvider" 99 | ``` 100 | -------------------------------------------------------------------------------- /src/Resources/MessagesResource.php: -------------------------------------------------------------------------------- 1 | model = $model; 36 | 37 | return $this; 38 | } 39 | 40 | public function maxTokens(int $maxTokens): self 41 | { 42 | if ($maxTokens <= 0) { 43 | throw new InvalidArgumentException('Max tokens must be a positive integer.'); 44 | } 45 | $this->maxTokens = $maxTokens; 46 | 47 | return $this; 48 | } 49 | 50 | public function messages(array $messages): self 51 | { 52 | foreach ($messages as $message) { 53 | if (! isset($message['role']) || ! isset($message['content'])) { 54 | throw new InvalidArgumentException('Each message must have a "role" and "content" key.'); 55 | } 56 | if (! is_string($message['role']) || ! is_string($message['content'])) { 57 | throw new InvalidArgumentException('Message "role" and "content" must be strings.'); 58 | } 59 | } 60 | $this->messages = $messages; 61 | 62 | return $this; 63 | } 64 | 65 | public function system(string $system): self 66 | { 67 | $this->system = $system; 68 | 69 | return $this; 70 | } 71 | 72 | public function metadata(array $metadata): self 73 | { 74 | $this->metadata = $metadata; 75 | 76 | return $this; 77 | } 78 | 79 | public function temperature(float $temperature): self 80 | { 81 | if ($temperature < 0.0 || $temperature > 1.0) { 82 | throw new InvalidArgumentException('Temperature must be between 0.0 and 1.0.'); 83 | } 84 | $this->temperature = $temperature; 85 | 86 | return $this; 87 | } 88 | 89 | public function topP(float $topP): self 90 | { 91 | $this->topP = $topP; 92 | 93 | return $this; 94 | } 95 | 96 | public function topK(int $topK): self 97 | { 98 | $this->topK = $topK; 99 | 100 | return $this; 101 | } 102 | 103 | public function create(array $options = [], array $extraHeaders = []): Response 104 | { 105 | $this->validateOptions($options); 106 | $res = $this->client->post($this->endpoint, $this->getRequest(), $extraHeaders); 107 | 108 | return new MessageResponse($res); 109 | } 110 | 111 | public function stream(array $options = [], array $extraHeaders = []): StreamResponse 112 | { 113 | $this->validateOptions($options); 114 | 115 | return $this->client->stream($this->endpoint, [ 116 | ...$this->getRequest(), 117 | 'stream' => true, 118 | ], $extraHeaders); 119 | } 120 | 121 | public function getRequest(): array 122 | { 123 | $optional = array_filter([ 124 | 'system' => $this->system, 125 | 'metadata' => $this->metadata, 126 | 'stop_sequences' => $this->stopSequences, 127 | 'temperature' => $this->temperature, 128 | 'top_p' => $this->topP, 129 | 'top_k' => $this->topK, 130 | ]); 131 | 132 | return [ 133 | 'model' => $this->model, 134 | 'max_tokens' => $this->maxTokens, 135 | 'messages' => $this->messages, 136 | ...$optional, 137 | ]; 138 | } 139 | 140 | private function validateOptions(array $options = []): void 141 | { 142 | $this->model = $options['model'] ?? $this->model; 143 | $this->maxTokens = $options['max_tokens'] ?? $this->maxTokens; 144 | $this->messages = $options['messages'] ?? $this->messages; 145 | $this->system = $options['system'] ?? $this->system; 146 | $this->metadata = $options['metadata'] ?? $this->metadata; 147 | $this->stopSequences = $options['stop_sequences'] ?? $this->stopSequences; 148 | $this->temperature = $options['temperature'] ?? $this->temperature; 149 | $this->topP = $options['top_p'] ?? $this->topP; 150 | $this->topK = $options['top_k'] ?? $this->topK; 151 | 152 | if (empty($this->model)) { 153 | throw new InvalidArgumentException('Model is required.'); 154 | } 155 | if (! isset($this->maxTokens)) { 156 | throw new InvalidArgumentException('Max tokens is required.'); 157 | } 158 | if (empty($this->messages)) { 159 | throw new InvalidArgumentException('Messages are required.'); 160 | } 161 | } 162 | } 163 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "555859c19c26a208e953d06333d55bf4", 8 | "packages": [ 9 | { 10 | "name": "carbonphp/carbon-doctrine-types", 11 | "version": "3.2.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", 15 | "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", 20 | "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": "^8.1" 25 | }, 26 | "conflict": { 27 | "doctrine/dbal": "<4.0.0 || >=5.0.0" 28 | }, 29 | "require-dev": { 30 | "doctrine/dbal": "^4.0.0", 31 | "nesbot/carbon": "^2.71.0 || ^3.0.0", 32 | "phpunit/phpunit": "^10.3" 33 | }, 34 | "type": "library", 35 | "autoload": { 36 | "psr-4": { 37 | "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" 38 | } 39 | }, 40 | "notification-url": "https://packagist.org/downloads/", 41 | "license": [ 42 | "MIT" 43 | ], 44 | "authors": [ 45 | { 46 | "name": "KyleKatarn", 47 | "email": "kylekatarnls@gmail.com" 48 | } 49 | ], 50 | "description": "Types to use Carbon in Doctrine", 51 | "keywords": [ 52 | "carbon", 53 | "date", 54 | "datetime", 55 | "doctrine", 56 | "time" 57 | ], 58 | "support": { 59 | "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", 60 | "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" 61 | }, 62 | "funding": [ 63 | { 64 | "url": "https://github.com/kylekatarnls", 65 | "type": "github" 66 | }, 67 | { 68 | "url": "https://opencollective.com/Carbon", 69 | "type": "open_collective" 70 | }, 71 | { 72 | "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", 73 | "type": "tidelift" 74 | } 75 | ], 76 | "time": "2024-02-09T16:56:22+00:00" 77 | }, 78 | { 79 | "name": "doctrine/inflector", 80 | "version": "2.0.10", 81 | "source": { 82 | "type": "git", 83 | "url": "https://github.com/doctrine/inflector.git", 84 | "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" 85 | }, 86 | "dist": { 87 | "type": "zip", 88 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", 89 | "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", 90 | "shasum": "" 91 | }, 92 | "require": { 93 | "php": "^7.2 || ^8.0" 94 | }, 95 | "require-dev": { 96 | "doctrine/coding-standard": "^11.0", 97 | "phpstan/phpstan": "^1.8", 98 | "phpstan/phpstan-phpunit": "^1.1", 99 | "phpstan/phpstan-strict-rules": "^1.3", 100 | "phpunit/phpunit": "^8.5 || ^9.5", 101 | "vimeo/psalm": "^4.25 || ^5.4" 102 | }, 103 | "type": "library", 104 | "autoload": { 105 | "psr-4": { 106 | "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" 107 | } 108 | }, 109 | "notification-url": "https://packagist.org/downloads/", 110 | "license": [ 111 | "MIT" 112 | ], 113 | "authors": [ 114 | { 115 | "name": "Guilherme Blanco", 116 | "email": "guilhermeblanco@gmail.com" 117 | }, 118 | { 119 | "name": "Roman Borschel", 120 | "email": "roman@code-factory.org" 121 | }, 122 | { 123 | "name": "Benjamin Eberlei", 124 | "email": "kontakt@beberlei.de" 125 | }, 126 | { 127 | "name": "Jonathan Wage", 128 | "email": "jonwage@gmail.com" 129 | }, 130 | { 131 | "name": "Johannes Schmitt", 132 | "email": "schmittjoh@gmail.com" 133 | } 134 | ], 135 | "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", 136 | "homepage": "https://www.doctrine-project.org/projects/inflector.html", 137 | "keywords": [ 138 | "inflection", 139 | "inflector", 140 | "lowercase", 141 | "manipulation", 142 | "php", 143 | "plural", 144 | "singular", 145 | "strings", 146 | "uppercase", 147 | "words" 148 | ], 149 | "support": { 150 | "issues": "https://github.com/doctrine/inflector/issues", 151 | "source": "https://github.com/doctrine/inflector/tree/2.0.10" 152 | }, 153 | "funding": [ 154 | { 155 | "url": "https://www.doctrine-project.org/sponsorship.html", 156 | "type": "custom" 157 | }, 158 | { 159 | "url": "https://www.patreon.com/phpdoctrine", 160 | "type": "patreon" 161 | }, 162 | { 163 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", 164 | "type": "tidelift" 165 | } 166 | ], 167 | "time": "2024-02-18T20:23:39+00:00" 168 | }, 169 | { 170 | "name": "guzzlehttp/guzzle", 171 | "version": "7.8.1", 172 | "source": { 173 | "type": "git", 174 | "url": "https://github.com/guzzle/guzzle.git", 175 | "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" 176 | }, 177 | "dist": { 178 | "type": "zip", 179 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", 180 | "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", 181 | "shasum": "" 182 | }, 183 | "require": { 184 | "ext-json": "*", 185 | "guzzlehttp/promises": "^1.5.3 || ^2.0.1", 186 | "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", 187 | "php": "^7.2.5 || ^8.0", 188 | "psr/http-client": "^1.0", 189 | "symfony/deprecation-contracts": "^2.2 || ^3.0" 190 | }, 191 | "provide": { 192 | "psr/http-client-implementation": "1.0" 193 | }, 194 | "require-dev": { 195 | "bamarni/composer-bin-plugin": "^1.8.2", 196 | "ext-curl": "*", 197 | "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", 198 | "php-http/message-factory": "^1.1", 199 | "phpunit/phpunit": "^8.5.36 || ^9.6.15", 200 | "psr/log": "^1.1 || ^2.0 || ^3.0" 201 | }, 202 | "suggest": { 203 | "ext-curl": "Required for CURL handler support", 204 | "ext-intl": "Required for Internationalized Domain Name (IDN) support", 205 | "psr/log": "Required for using the Log middleware" 206 | }, 207 | "type": "library", 208 | "extra": { 209 | "bamarni-bin": { 210 | "bin-links": true, 211 | "forward-command": false 212 | } 213 | }, 214 | "autoload": { 215 | "files": [ 216 | "src/functions_include.php" 217 | ], 218 | "psr-4": { 219 | "GuzzleHttp\\": "src/" 220 | } 221 | }, 222 | "notification-url": "https://packagist.org/downloads/", 223 | "license": [ 224 | "MIT" 225 | ], 226 | "authors": [ 227 | { 228 | "name": "Graham Campbell", 229 | "email": "hello@gjcampbell.co.uk", 230 | "homepage": "https://github.com/GrahamCampbell" 231 | }, 232 | { 233 | "name": "Michael Dowling", 234 | "email": "mtdowling@gmail.com", 235 | "homepage": "https://github.com/mtdowling" 236 | }, 237 | { 238 | "name": "Jeremy Lindblom", 239 | "email": "jeremeamia@gmail.com", 240 | "homepage": "https://github.com/jeremeamia" 241 | }, 242 | { 243 | "name": "George Mponos", 244 | "email": "gmponos@gmail.com", 245 | "homepage": "https://github.com/gmponos" 246 | }, 247 | { 248 | "name": "Tobias Nyholm", 249 | "email": "tobias.nyholm@gmail.com", 250 | "homepage": "https://github.com/Nyholm" 251 | }, 252 | { 253 | "name": "Márk Sági-Kazár", 254 | "email": "mark.sagikazar@gmail.com", 255 | "homepage": "https://github.com/sagikazarmark" 256 | }, 257 | { 258 | "name": "Tobias Schultze", 259 | "email": "webmaster@tubo-world.de", 260 | "homepage": "https://github.com/Tobion" 261 | } 262 | ], 263 | "description": "Guzzle is a PHP HTTP client library", 264 | "keywords": [ 265 | "client", 266 | "curl", 267 | "framework", 268 | "http", 269 | "http client", 270 | "psr-18", 271 | "psr-7", 272 | "rest", 273 | "web service" 274 | ], 275 | "support": { 276 | "issues": "https://github.com/guzzle/guzzle/issues", 277 | "source": "https://github.com/guzzle/guzzle/tree/7.8.1" 278 | }, 279 | "funding": [ 280 | { 281 | "url": "https://github.com/GrahamCampbell", 282 | "type": "github" 283 | }, 284 | { 285 | "url": "https://github.com/Nyholm", 286 | "type": "github" 287 | }, 288 | { 289 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", 290 | "type": "tidelift" 291 | } 292 | ], 293 | "time": "2023-12-03T20:35:24+00:00" 294 | }, 295 | { 296 | "name": "guzzlehttp/promises", 297 | "version": "2.0.2", 298 | "source": { 299 | "type": "git", 300 | "url": "https://github.com/guzzle/promises.git", 301 | "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" 302 | }, 303 | "dist": { 304 | "type": "zip", 305 | "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", 306 | "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223", 307 | "shasum": "" 308 | }, 309 | "require": { 310 | "php": "^7.2.5 || ^8.0" 311 | }, 312 | "require-dev": { 313 | "bamarni/composer-bin-plugin": "^1.8.2", 314 | "phpunit/phpunit": "^8.5.36 || ^9.6.15" 315 | }, 316 | "type": "library", 317 | "extra": { 318 | "bamarni-bin": { 319 | "bin-links": true, 320 | "forward-command": false 321 | } 322 | }, 323 | "autoload": { 324 | "psr-4": { 325 | "GuzzleHttp\\Promise\\": "src/" 326 | } 327 | }, 328 | "notification-url": "https://packagist.org/downloads/", 329 | "license": [ 330 | "MIT" 331 | ], 332 | "authors": [ 333 | { 334 | "name": "Graham Campbell", 335 | "email": "hello@gjcampbell.co.uk", 336 | "homepage": "https://github.com/GrahamCampbell" 337 | }, 338 | { 339 | "name": "Michael Dowling", 340 | "email": "mtdowling@gmail.com", 341 | "homepage": "https://github.com/mtdowling" 342 | }, 343 | { 344 | "name": "Tobias Nyholm", 345 | "email": "tobias.nyholm@gmail.com", 346 | "homepage": "https://github.com/Nyholm" 347 | }, 348 | { 349 | "name": "Tobias Schultze", 350 | "email": "webmaster@tubo-world.de", 351 | "homepage": "https://github.com/Tobion" 352 | } 353 | ], 354 | "description": "Guzzle promises library", 355 | "keywords": [ 356 | "promise" 357 | ], 358 | "support": { 359 | "issues": "https://github.com/guzzle/promises/issues", 360 | "source": "https://github.com/guzzle/promises/tree/2.0.2" 361 | }, 362 | "funding": [ 363 | { 364 | "url": "https://github.com/GrahamCampbell", 365 | "type": "github" 366 | }, 367 | { 368 | "url": "https://github.com/Nyholm", 369 | "type": "github" 370 | }, 371 | { 372 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", 373 | "type": "tidelift" 374 | } 375 | ], 376 | "time": "2023-12-03T20:19:20+00:00" 377 | }, 378 | { 379 | "name": "guzzlehttp/psr7", 380 | "version": "2.6.2", 381 | "source": { 382 | "type": "git", 383 | "url": "https://github.com/guzzle/psr7.git", 384 | "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" 385 | }, 386 | "dist": { 387 | "type": "zip", 388 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", 389 | "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", 390 | "shasum": "" 391 | }, 392 | "require": { 393 | "php": "^7.2.5 || ^8.0", 394 | "psr/http-factory": "^1.0", 395 | "psr/http-message": "^1.1 || ^2.0", 396 | "ralouphie/getallheaders": "^3.0" 397 | }, 398 | "provide": { 399 | "psr/http-factory-implementation": "1.0", 400 | "psr/http-message-implementation": "1.0" 401 | }, 402 | "require-dev": { 403 | "bamarni/composer-bin-plugin": "^1.8.2", 404 | "http-interop/http-factory-tests": "^0.9", 405 | "phpunit/phpunit": "^8.5.36 || ^9.6.15" 406 | }, 407 | "suggest": { 408 | "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" 409 | }, 410 | "type": "library", 411 | "extra": { 412 | "bamarni-bin": { 413 | "bin-links": true, 414 | "forward-command": false 415 | } 416 | }, 417 | "autoload": { 418 | "psr-4": { 419 | "GuzzleHttp\\Psr7\\": "src/" 420 | } 421 | }, 422 | "notification-url": "https://packagist.org/downloads/", 423 | "license": [ 424 | "MIT" 425 | ], 426 | "authors": [ 427 | { 428 | "name": "Graham Campbell", 429 | "email": "hello@gjcampbell.co.uk", 430 | "homepage": "https://github.com/GrahamCampbell" 431 | }, 432 | { 433 | "name": "Michael Dowling", 434 | "email": "mtdowling@gmail.com", 435 | "homepage": "https://github.com/mtdowling" 436 | }, 437 | { 438 | "name": "George Mponos", 439 | "email": "gmponos@gmail.com", 440 | "homepage": "https://github.com/gmponos" 441 | }, 442 | { 443 | "name": "Tobias Nyholm", 444 | "email": "tobias.nyholm@gmail.com", 445 | "homepage": "https://github.com/Nyholm" 446 | }, 447 | { 448 | "name": "Márk Sági-Kazár", 449 | "email": "mark.sagikazar@gmail.com", 450 | "homepage": "https://github.com/sagikazarmark" 451 | }, 452 | { 453 | "name": "Tobias Schultze", 454 | "email": "webmaster@tubo-world.de", 455 | "homepage": "https://github.com/Tobion" 456 | }, 457 | { 458 | "name": "Márk Sági-Kazár", 459 | "email": "mark.sagikazar@gmail.com", 460 | "homepage": "https://sagikazarmark.hu" 461 | } 462 | ], 463 | "description": "PSR-7 message implementation that also provides common utility methods", 464 | "keywords": [ 465 | "http", 466 | "message", 467 | "psr-7", 468 | "request", 469 | "response", 470 | "stream", 471 | "uri", 472 | "url" 473 | ], 474 | "support": { 475 | "issues": "https://github.com/guzzle/psr7/issues", 476 | "source": "https://github.com/guzzle/psr7/tree/2.6.2" 477 | }, 478 | "funding": [ 479 | { 480 | "url": "https://github.com/GrahamCampbell", 481 | "type": "github" 482 | }, 483 | { 484 | "url": "https://github.com/Nyholm", 485 | "type": "github" 486 | }, 487 | { 488 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", 489 | "type": "tidelift" 490 | } 491 | ], 492 | "time": "2023-12-03T20:05:35+00:00" 493 | }, 494 | { 495 | "name": "illuminate/collections", 496 | "version": "v11.11.1", 497 | "source": { 498 | "type": "git", 499 | "url": "https://github.com/illuminate/collections.git", 500 | "reference": "176f39271b5f85bee3c4bf797d1e95102d55e12b" 501 | }, 502 | "dist": { 503 | "type": "zip", 504 | "url": "https://api.github.com/repos/illuminate/collections/zipball/176f39271b5f85bee3c4bf797d1e95102d55e12b", 505 | "reference": "176f39271b5f85bee3c4bf797d1e95102d55e12b", 506 | "shasum": "" 507 | }, 508 | "require": { 509 | "illuminate/conditionable": "^11.0", 510 | "illuminate/contracts": "^11.0", 511 | "illuminate/macroable": "^11.0", 512 | "php": "^8.2" 513 | }, 514 | "suggest": { 515 | "symfony/var-dumper": "Required to use the dump method (^7.0)." 516 | }, 517 | "type": "library", 518 | "extra": { 519 | "branch-alias": { 520 | "dev-master": "11.x-dev" 521 | } 522 | }, 523 | "autoload": { 524 | "files": [ 525 | "helpers.php" 526 | ], 527 | "psr-4": { 528 | "Illuminate\\Support\\": "" 529 | } 530 | }, 531 | "notification-url": "https://packagist.org/downloads/", 532 | "license": [ 533 | "MIT" 534 | ], 535 | "authors": [ 536 | { 537 | "name": "Taylor Otwell", 538 | "email": "taylor@laravel.com" 539 | } 540 | ], 541 | "description": "The Illuminate Collections package.", 542 | "homepage": "https://laravel.com", 543 | "support": { 544 | "issues": "https://github.com/laravel/framework/issues", 545 | "source": "https://github.com/laravel/framework" 546 | }, 547 | "time": "2024-06-11T13:32:31+00:00" 548 | }, 549 | { 550 | "name": "illuminate/conditionable", 551 | "version": "v11.11.1", 552 | "source": { 553 | "type": "git", 554 | "url": "https://github.com/illuminate/conditionable.git", 555 | "reference": "8a558fec063b6a63da1c3af1d219c0f998edffeb" 556 | }, 557 | "dist": { 558 | "type": "zip", 559 | "url": "https://api.github.com/repos/illuminate/conditionable/zipball/8a558fec063b6a63da1c3af1d219c0f998edffeb", 560 | "reference": "8a558fec063b6a63da1c3af1d219c0f998edffeb", 561 | "shasum": "" 562 | }, 563 | "require": { 564 | "php": "^8.0.2" 565 | }, 566 | "type": "library", 567 | "extra": { 568 | "branch-alias": { 569 | "dev-master": "11.x-dev" 570 | } 571 | }, 572 | "autoload": { 573 | "psr-4": { 574 | "Illuminate\\Support\\": "" 575 | } 576 | }, 577 | "notification-url": "https://packagist.org/downloads/", 578 | "license": [ 579 | "MIT" 580 | ], 581 | "authors": [ 582 | { 583 | "name": "Taylor Otwell", 584 | "email": "taylor@laravel.com" 585 | } 586 | ], 587 | "description": "The Illuminate Conditionable package.", 588 | "homepage": "https://laravel.com", 589 | "support": { 590 | "issues": "https://github.com/laravel/framework/issues", 591 | "source": "https://github.com/laravel/framework" 592 | }, 593 | "time": "2024-04-04T17:36:49+00:00" 594 | }, 595 | { 596 | "name": "illuminate/contracts", 597 | "version": "v11.11.1", 598 | "source": { 599 | "type": "git", 600 | "url": "https://github.com/illuminate/contracts.git", 601 | "reference": "86c1331d0b06c59ca21723d8bfc9faaa19430b46" 602 | }, 603 | "dist": { 604 | "type": "zip", 605 | "url": "https://api.github.com/repos/illuminate/contracts/zipball/86c1331d0b06c59ca21723d8bfc9faaa19430b46", 606 | "reference": "86c1331d0b06c59ca21723d8bfc9faaa19430b46", 607 | "shasum": "" 608 | }, 609 | "require": { 610 | "php": "^8.2", 611 | "psr/container": "^1.1.1|^2.0.1", 612 | "psr/simple-cache": "^1.0|^2.0|^3.0" 613 | }, 614 | "type": "library", 615 | "extra": { 616 | "branch-alias": { 617 | "dev-master": "11.x-dev" 618 | } 619 | }, 620 | "autoload": { 621 | "psr-4": { 622 | "Illuminate\\Contracts\\": "" 623 | } 624 | }, 625 | "notification-url": "https://packagist.org/downloads/", 626 | "license": [ 627 | "MIT" 628 | ], 629 | "authors": [ 630 | { 631 | "name": "Taylor Otwell", 632 | "email": "taylor@laravel.com" 633 | } 634 | ], 635 | "description": "The Illuminate Contracts package.", 636 | "homepage": "https://laravel.com", 637 | "support": { 638 | "issues": "https://github.com/laravel/framework/issues", 639 | "source": "https://github.com/laravel/framework" 640 | }, 641 | "time": "2024-05-21T17:42:34+00:00" 642 | }, 643 | { 644 | "name": "illuminate/macroable", 645 | "version": "v11.11.1", 646 | "source": { 647 | "type": "git", 648 | "url": "https://github.com/illuminate/macroable.git", 649 | "reference": "5b6c7c7c5951e6e8fc22dd7e4363602df8294dfa" 650 | }, 651 | "dist": { 652 | "type": "zip", 653 | "url": "https://api.github.com/repos/illuminate/macroable/zipball/5b6c7c7c5951e6e8fc22dd7e4363602df8294dfa", 654 | "reference": "5b6c7c7c5951e6e8fc22dd7e4363602df8294dfa", 655 | "shasum": "" 656 | }, 657 | "require": { 658 | "php": "^8.2" 659 | }, 660 | "type": "library", 661 | "extra": { 662 | "branch-alias": { 663 | "dev-master": "11.x-dev" 664 | } 665 | }, 666 | "autoload": { 667 | "psr-4": { 668 | "Illuminate\\Support\\": "" 669 | } 670 | }, 671 | "notification-url": "https://packagist.org/downloads/", 672 | "license": [ 673 | "MIT" 674 | ], 675 | "authors": [ 676 | { 677 | "name": "Taylor Otwell", 678 | "email": "taylor@laravel.com" 679 | } 680 | ], 681 | "description": "The Illuminate Macroable package.", 682 | "homepage": "https://laravel.com", 683 | "support": { 684 | "issues": "https://github.com/laravel/framework/issues", 685 | "source": "https://github.com/laravel/framework" 686 | }, 687 | "time": "2024-05-16T21:43:47+00:00" 688 | }, 689 | { 690 | "name": "illuminate/support", 691 | "version": "v11.11.1", 692 | "source": { 693 | "type": "git", 694 | "url": "https://github.com/illuminate/support.git", 695 | "reference": "6b7ca0121e4f3f7e0a02df2d1d54237243518edd" 696 | }, 697 | "dist": { 698 | "type": "zip", 699 | "url": "https://api.github.com/repos/illuminate/support/zipball/6b7ca0121e4f3f7e0a02df2d1d54237243518edd", 700 | "reference": "6b7ca0121e4f3f7e0a02df2d1d54237243518edd", 701 | "shasum": "" 702 | }, 703 | "require": { 704 | "doctrine/inflector": "^2.0", 705 | "ext-ctype": "*", 706 | "ext-filter": "*", 707 | "ext-mbstring": "*", 708 | "illuminate/collections": "^11.0", 709 | "illuminate/conditionable": "^11.0", 710 | "illuminate/contracts": "^11.0", 711 | "illuminate/macroable": "^11.0", 712 | "nesbot/carbon": "^2.72.2|^3.0", 713 | "php": "^8.2", 714 | "voku/portable-ascii": "^2.0" 715 | }, 716 | "conflict": { 717 | "tightenco/collect": "<5.5.33" 718 | }, 719 | "replace": { 720 | "spatie/once": "*" 721 | }, 722 | "suggest": { 723 | "illuminate/filesystem": "Required to use the composer class (^11.0).", 724 | "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^2.0.2).", 725 | "ramsey/uuid": "Required to use Str::uuid() (^4.7).", 726 | "symfony/process": "Required to use the composer class (^7.0).", 727 | "symfony/uid": "Required to use Str::ulid() (^7.0).", 728 | "symfony/var-dumper": "Required to use the dd function (^7.0).", 729 | "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)." 730 | }, 731 | "type": "library", 732 | "extra": { 733 | "branch-alias": { 734 | "dev-master": "11.x-dev" 735 | } 736 | }, 737 | "autoload": { 738 | "files": [ 739 | "helpers.php" 740 | ], 741 | "psr-4": { 742 | "Illuminate\\Support\\": "" 743 | } 744 | }, 745 | "notification-url": "https://packagist.org/downloads/", 746 | "license": [ 747 | "MIT" 748 | ], 749 | "authors": [ 750 | { 751 | "name": "Taylor Otwell", 752 | "email": "taylor@laravel.com" 753 | } 754 | ], 755 | "description": "The Illuminate Support package.", 756 | "homepage": "https://laravel.com", 757 | "support": { 758 | "issues": "https://github.com/laravel/framework/issues", 759 | "source": "https://github.com/laravel/framework" 760 | }, 761 | "time": "2024-06-19T14:30:19+00:00" 762 | }, 763 | { 764 | "name": "nesbot/carbon", 765 | "version": "3.6.0", 766 | "source": { 767 | "type": "git", 768 | "url": "https://github.com/briannesbitt/Carbon.git", 769 | "reference": "39c8ef752db6865717cc3fba63970c16f057982c" 770 | }, 771 | "dist": { 772 | "type": "zip", 773 | "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/39c8ef752db6865717cc3fba63970c16f057982c", 774 | "reference": "39c8ef752db6865717cc3fba63970c16f057982c", 775 | "shasum": "" 776 | }, 777 | "require": { 778 | "carbonphp/carbon-doctrine-types": "*", 779 | "ext-json": "*", 780 | "php": "^8.1", 781 | "psr/clock": "^1.0", 782 | "symfony/clock": "^6.3 || ^7.0", 783 | "symfony/polyfill-mbstring": "^1.0", 784 | "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0" 785 | }, 786 | "provide": { 787 | "psr/clock-implementation": "1.0" 788 | }, 789 | "require-dev": { 790 | "doctrine/dbal": "^3.6.3 || ^4.0", 791 | "doctrine/orm": "^2.15.2 || ^3.0", 792 | "friendsofphp/php-cs-fixer": "^3.57.2", 793 | "kylekatarnls/multi-tester": "^2.5.3", 794 | "ondrejmirtes/better-reflection": "^6.25.0.4", 795 | "phpmd/phpmd": "^2.15.0", 796 | "phpstan/extension-installer": "^1.3.1", 797 | "phpstan/phpstan": "^1.11.2", 798 | "phpunit/phpunit": "^10.5.20", 799 | "squizlabs/php_codesniffer": "^3.9.0" 800 | }, 801 | "bin": [ 802 | "bin/carbon" 803 | ], 804 | "type": "library", 805 | "extra": { 806 | "branch-alias": { 807 | "dev-master": "3.x-dev", 808 | "dev-2.x": "2.x-dev" 809 | }, 810 | "laravel": { 811 | "providers": [ 812 | "Carbon\\Laravel\\ServiceProvider" 813 | ] 814 | }, 815 | "phpstan": { 816 | "includes": [ 817 | "extension.neon" 818 | ] 819 | } 820 | }, 821 | "autoload": { 822 | "psr-4": { 823 | "Carbon\\": "src/Carbon/" 824 | } 825 | }, 826 | "notification-url": "https://packagist.org/downloads/", 827 | "license": [ 828 | "MIT" 829 | ], 830 | "authors": [ 831 | { 832 | "name": "Brian Nesbitt", 833 | "email": "brian@nesbot.com", 834 | "homepage": "https://markido.com" 835 | }, 836 | { 837 | "name": "kylekatarnls", 838 | "homepage": "https://github.com/kylekatarnls" 839 | } 840 | ], 841 | "description": "An API extension for DateTime that supports 281 different languages.", 842 | "homepage": "https://carbon.nesbot.com", 843 | "keywords": [ 844 | "date", 845 | "datetime", 846 | "time" 847 | ], 848 | "support": { 849 | "docs": "https://carbon.nesbot.com/docs", 850 | "issues": "https://github.com/briannesbitt/Carbon/issues", 851 | "source": "https://github.com/briannesbitt/Carbon" 852 | }, 853 | "funding": [ 854 | { 855 | "url": "https://github.com/sponsors/kylekatarnls", 856 | "type": "github" 857 | }, 858 | { 859 | "url": "https://opencollective.com/Carbon#sponsor", 860 | "type": "opencollective" 861 | }, 862 | { 863 | "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", 864 | "type": "tidelift" 865 | } 866 | ], 867 | "time": "2024-06-20T15:52:59+00:00" 868 | }, 869 | { 870 | "name": "psr/clock", 871 | "version": "1.0.0", 872 | "source": { 873 | "type": "git", 874 | "url": "https://github.com/php-fig/clock.git", 875 | "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" 876 | }, 877 | "dist": { 878 | "type": "zip", 879 | "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", 880 | "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", 881 | "shasum": "" 882 | }, 883 | "require": { 884 | "php": "^7.0 || ^8.0" 885 | }, 886 | "type": "library", 887 | "autoload": { 888 | "psr-4": { 889 | "Psr\\Clock\\": "src/" 890 | } 891 | }, 892 | "notification-url": "https://packagist.org/downloads/", 893 | "license": [ 894 | "MIT" 895 | ], 896 | "authors": [ 897 | { 898 | "name": "PHP-FIG", 899 | "homepage": "https://www.php-fig.org/" 900 | } 901 | ], 902 | "description": "Common interface for reading the clock.", 903 | "homepage": "https://github.com/php-fig/clock", 904 | "keywords": [ 905 | "clock", 906 | "now", 907 | "psr", 908 | "psr-20", 909 | "time" 910 | ], 911 | "support": { 912 | "issues": "https://github.com/php-fig/clock/issues", 913 | "source": "https://github.com/php-fig/clock/tree/1.0.0" 914 | }, 915 | "time": "2022-11-25T14:36:26+00:00" 916 | }, 917 | { 918 | "name": "psr/container", 919 | "version": "2.0.2", 920 | "source": { 921 | "type": "git", 922 | "url": "https://github.com/php-fig/container.git", 923 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" 924 | }, 925 | "dist": { 926 | "type": "zip", 927 | "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", 928 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", 929 | "shasum": "" 930 | }, 931 | "require": { 932 | "php": ">=7.4.0" 933 | }, 934 | "type": "library", 935 | "extra": { 936 | "branch-alias": { 937 | "dev-master": "2.0.x-dev" 938 | } 939 | }, 940 | "autoload": { 941 | "psr-4": { 942 | "Psr\\Container\\": "src/" 943 | } 944 | }, 945 | "notification-url": "https://packagist.org/downloads/", 946 | "license": [ 947 | "MIT" 948 | ], 949 | "authors": [ 950 | { 951 | "name": "PHP-FIG", 952 | "homepage": "https://www.php-fig.org/" 953 | } 954 | ], 955 | "description": "Common Container Interface (PHP FIG PSR-11)", 956 | "homepage": "https://github.com/php-fig/container", 957 | "keywords": [ 958 | "PSR-11", 959 | "container", 960 | "container-interface", 961 | "container-interop", 962 | "psr" 963 | ], 964 | "support": { 965 | "issues": "https://github.com/php-fig/container/issues", 966 | "source": "https://github.com/php-fig/container/tree/2.0.2" 967 | }, 968 | "time": "2021-11-05T16:47:00+00:00" 969 | }, 970 | { 971 | "name": "psr/http-client", 972 | "version": "1.0.3", 973 | "source": { 974 | "type": "git", 975 | "url": "https://github.com/php-fig/http-client.git", 976 | "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" 977 | }, 978 | "dist": { 979 | "type": "zip", 980 | "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", 981 | "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", 982 | "shasum": "" 983 | }, 984 | "require": { 985 | "php": "^7.0 || ^8.0", 986 | "psr/http-message": "^1.0 || ^2.0" 987 | }, 988 | "type": "library", 989 | "extra": { 990 | "branch-alias": { 991 | "dev-master": "1.0.x-dev" 992 | } 993 | }, 994 | "autoload": { 995 | "psr-4": { 996 | "Psr\\Http\\Client\\": "src/" 997 | } 998 | }, 999 | "notification-url": "https://packagist.org/downloads/", 1000 | "license": [ 1001 | "MIT" 1002 | ], 1003 | "authors": [ 1004 | { 1005 | "name": "PHP-FIG", 1006 | "homepage": "https://www.php-fig.org/" 1007 | } 1008 | ], 1009 | "description": "Common interface for HTTP clients", 1010 | "homepage": "https://github.com/php-fig/http-client", 1011 | "keywords": [ 1012 | "http", 1013 | "http-client", 1014 | "psr", 1015 | "psr-18" 1016 | ], 1017 | "support": { 1018 | "source": "https://github.com/php-fig/http-client" 1019 | }, 1020 | "time": "2023-09-23T14:17:50+00:00" 1021 | }, 1022 | { 1023 | "name": "psr/http-factory", 1024 | "version": "1.1.0", 1025 | "source": { 1026 | "type": "git", 1027 | "url": "https://github.com/php-fig/http-factory.git", 1028 | "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" 1029 | }, 1030 | "dist": { 1031 | "type": "zip", 1032 | "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", 1033 | "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", 1034 | "shasum": "" 1035 | }, 1036 | "require": { 1037 | "php": ">=7.1", 1038 | "psr/http-message": "^1.0 || ^2.0" 1039 | }, 1040 | "type": "library", 1041 | "extra": { 1042 | "branch-alias": { 1043 | "dev-master": "1.0.x-dev" 1044 | } 1045 | }, 1046 | "autoload": { 1047 | "psr-4": { 1048 | "Psr\\Http\\Message\\": "src/" 1049 | } 1050 | }, 1051 | "notification-url": "https://packagist.org/downloads/", 1052 | "license": [ 1053 | "MIT" 1054 | ], 1055 | "authors": [ 1056 | { 1057 | "name": "PHP-FIG", 1058 | "homepage": "https://www.php-fig.org/" 1059 | } 1060 | ], 1061 | "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", 1062 | "keywords": [ 1063 | "factory", 1064 | "http", 1065 | "message", 1066 | "psr", 1067 | "psr-17", 1068 | "psr-7", 1069 | "request", 1070 | "response" 1071 | ], 1072 | "support": { 1073 | "source": "https://github.com/php-fig/http-factory" 1074 | }, 1075 | "time": "2024-04-15T12:06:14+00:00" 1076 | }, 1077 | { 1078 | "name": "psr/http-message", 1079 | "version": "2.0", 1080 | "source": { 1081 | "type": "git", 1082 | "url": "https://github.com/php-fig/http-message.git", 1083 | "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" 1084 | }, 1085 | "dist": { 1086 | "type": "zip", 1087 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", 1088 | "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", 1089 | "shasum": "" 1090 | }, 1091 | "require": { 1092 | "php": "^7.2 || ^8.0" 1093 | }, 1094 | "type": "library", 1095 | "extra": { 1096 | "branch-alias": { 1097 | "dev-master": "2.0.x-dev" 1098 | } 1099 | }, 1100 | "autoload": { 1101 | "psr-4": { 1102 | "Psr\\Http\\Message\\": "src/" 1103 | } 1104 | }, 1105 | "notification-url": "https://packagist.org/downloads/", 1106 | "license": [ 1107 | "MIT" 1108 | ], 1109 | "authors": [ 1110 | { 1111 | "name": "PHP-FIG", 1112 | "homepage": "https://www.php-fig.org/" 1113 | } 1114 | ], 1115 | "description": "Common interface for HTTP messages", 1116 | "homepage": "https://github.com/php-fig/http-message", 1117 | "keywords": [ 1118 | "http", 1119 | "http-message", 1120 | "psr", 1121 | "psr-7", 1122 | "request", 1123 | "response" 1124 | ], 1125 | "support": { 1126 | "source": "https://github.com/php-fig/http-message/tree/2.0" 1127 | }, 1128 | "time": "2023-04-04T09:54:51+00:00" 1129 | }, 1130 | { 1131 | "name": "psr/simple-cache", 1132 | "version": "3.0.0", 1133 | "source": { 1134 | "type": "git", 1135 | "url": "https://github.com/php-fig/simple-cache.git", 1136 | "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" 1137 | }, 1138 | "dist": { 1139 | "type": "zip", 1140 | "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", 1141 | "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", 1142 | "shasum": "" 1143 | }, 1144 | "require": { 1145 | "php": ">=8.0.0" 1146 | }, 1147 | "type": "library", 1148 | "extra": { 1149 | "branch-alias": { 1150 | "dev-master": "3.0.x-dev" 1151 | } 1152 | }, 1153 | "autoload": { 1154 | "psr-4": { 1155 | "Psr\\SimpleCache\\": "src/" 1156 | } 1157 | }, 1158 | "notification-url": "https://packagist.org/downloads/", 1159 | "license": [ 1160 | "MIT" 1161 | ], 1162 | "authors": [ 1163 | { 1164 | "name": "PHP-FIG", 1165 | "homepage": "https://www.php-fig.org/" 1166 | } 1167 | ], 1168 | "description": "Common interfaces for simple caching", 1169 | "keywords": [ 1170 | "cache", 1171 | "caching", 1172 | "psr", 1173 | "psr-16", 1174 | "simple-cache" 1175 | ], 1176 | "support": { 1177 | "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" 1178 | }, 1179 | "time": "2021-10-29T13:26:27+00:00" 1180 | }, 1181 | { 1182 | "name": "ralouphie/getallheaders", 1183 | "version": "3.0.3", 1184 | "source": { 1185 | "type": "git", 1186 | "url": "https://github.com/ralouphie/getallheaders.git", 1187 | "reference": "120b605dfeb996808c31b6477290a714d356e822" 1188 | }, 1189 | "dist": { 1190 | "type": "zip", 1191 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", 1192 | "reference": "120b605dfeb996808c31b6477290a714d356e822", 1193 | "shasum": "" 1194 | }, 1195 | "require": { 1196 | "php": ">=5.6" 1197 | }, 1198 | "require-dev": { 1199 | "php-coveralls/php-coveralls": "^2.1", 1200 | "phpunit/phpunit": "^5 || ^6.5" 1201 | }, 1202 | "type": "library", 1203 | "autoload": { 1204 | "files": [ 1205 | "src/getallheaders.php" 1206 | ] 1207 | }, 1208 | "notification-url": "https://packagist.org/downloads/", 1209 | "license": [ 1210 | "MIT" 1211 | ], 1212 | "authors": [ 1213 | { 1214 | "name": "Ralph Khattar", 1215 | "email": "ralph.khattar@gmail.com" 1216 | } 1217 | ], 1218 | "description": "A polyfill for getallheaders.", 1219 | "support": { 1220 | "issues": "https://github.com/ralouphie/getallheaders/issues", 1221 | "source": "https://github.com/ralouphie/getallheaders/tree/develop" 1222 | }, 1223 | "time": "2019-03-08T08:55:37+00:00" 1224 | }, 1225 | { 1226 | "name": "symfony/clock", 1227 | "version": "v7.1.1", 1228 | "source": { 1229 | "type": "git", 1230 | "url": "https://github.com/symfony/clock.git", 1231 | "reference": "3dfc8b084853586de51dd1441c6242c76a28cbe7" 1232 | }, 1233 | "dist": { 1234 | "type": "zip", 1235 | "url": "https://api.github.com/repos/symfony/clock/zipball/3dfc8b084853586de51dd1441c6242c76a28cbe7", 1236 | "reference": "3dfc8b084853586de51dd1441c6242c76a28cbe7", 1237 | "shasum": "" 1238 | }, 1239 | "require": { 1240 | "php": ">=8.2", 1241 | "psr/clock": "^1.0", 1242 | "symfony/polyfill-php83": "^1.28" 1243 | }, 1244 | "provide": { 1245 | "psr/clock-implementation": "1.0" 1246 | }, 1247 | "type": "library", 1248 | "autoload": { 1249 | "files": [ 1250 | "Resources/now.php" 1251 | ], 1252 | "psr-4": { 1253 | "Symfony\\Component\\Clock\\": "" 1254 | }, 1255 | "exclude-from-classmap": [ 1256 | "/Tests/" 1257 | ] 1258 | }, 1259 | "notification-url": "https://packagist.org/downloads/", 1260 | "license": [ 1261 | "MIT" 1262 | ], 1263 | "authors": [ 1264 | { 1265 | "name": "Nicolas Grekas", 1266 | "email": "p@tchwork.com" 1267 | }, 1268 | { 1269 | "name": "Symfony Community", 1270 | "homepage": "https://symfony.com/contributors" 1271 | } 1272 | ], 1273 | "description": "Decouples applications from the system clock", 1274 | "homepage": "https://symfony.com", 1275 | "keywords": [ 1276 | "clock", 1277 | "psr20", 1278 | "time" 1279 | ], 1280 | "support": { 1281 | "source": "https://github.com/symfony/clock/tree/v7.1.1" 1282 | }, 1283 | "funding": [ 1284 | { 1285 | "url": "https://symfony.com/sponsor", 1286 | "type": "custom" 1287 | }, 1288 | { 1289 | "url": "https://github.com/fabpot", 1290 | "type": "github" 1291 | }, 1292 | { 1293 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1294 | "type": "tidelift" 1295 | } 1296 | ], 1297 | "time": "2024-05-31T14:57:53+00:00" 1298 | }, 1299 | { 1300 | "name": "symfony/deprecation-contracts", 1301 | "version": "v3.5.0", 1302 | "source": { 1303 | "type": "git", 1304 | "url": "https://github.com/symfony/deprecation-contracts.git", 1305 | "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" 1306 | }, 1307 | "dist": { 1308 | "type": "zip", 1309 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", 1310 | "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", 1311 | "shasum": "" 1312 | }, 1313 | "require": { 1314 | "php": ">=8.1" 1315 | }, 1316 | "type": "library", 1317 | "extra": { 1318 | "branch-alias": { 1319 | "dev-main": "3.5-dev" 1320 | }, 1321 | "thanks": { 1322 | "name": "symfony/contracts", 1323 | "url": "https://github.com/symfony/contracts" 1324 | } 1325 | }, 1326 | "autoload": { 1327 | "files": [ 1328 | "function.php" 1329 | ] 1330 | }, 1331 | "notification-url": "https://packagist.org/downloads/", 1332 | "license": [ 1333 | "MIT" 1334 | ], 1335 | "authors": [ 1336 | { 1337 | "name": "Nicolas Grekas", 1338 | "email": "p@tchwork.com" 1339 | }, 1340 | { 1341 | "name": "Symfony Community", 1342 | "homepage": "https://symfony.com/contributors" 1343 | } 1344 | ], 1345 | "description": "A generic function and convention to trigger deprecation notices", 1346 | "homepage": "https://symfony.com", 1347 | "support": { 1348 | "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" 1349 | }, 1350 | "funding": [ 1351 | { 1352 | "url": "https://symfony.com/sponsor", 1353 | "type": "custom" 1354 | }, 1355 | { 1356 | "url": "https://github.com/fabpot", 1357 | "type": "github" 1358 | }, 1359 | { 1360 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1361 | "type": "tidelift" 1362 | } 1363 | ], 1364 | "time": "2024-04-18T09:32:20+00:00" 1365 | }, 1366 | { 1367 | "name": "symfony/polyfill-mbstring", 1368 | "version": "v1.30.0", 1369 | "source": { 1370 | "type": "git", 1371 | "url": "https://github.com/symfony/polyfill-mbstring.git", 1372 | "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c" 1373 | }, 1374 | "dist": { 1375 | "type": "zip", 1376 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c", 1377 | "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c", 1378 | "shasum": "" 1379 | }, 1380 | "require": { 1381 | "php": ">=7.1" 1382 | }, 1383 | "provide": { 1384 | "ext-mbstring": "*" 1385 | }, 1386 | "suggest": { 1387 | "ext-mbstring": "For best performance" 1388 | }, 1389 | "type": "library", 1390 | "extra": { 1391 | "thanks": { 1392 | "name": "symfony/polyfill", 1393 | "url": "https://github.com/symfony/polyfill" 1394 | } 1395 | }, 1396 | "autoload": { 1397 | "files": [ 1398 | "bootstrap.php" 1399 | ], 1400 | "psr-4": { 1401 | "Symfony\\Polyfill\\Mbstring\\": "" 1402 | } 1403 | }, 1404 | "notification-url": "https://packagist.org/downloads/", 1405 | "license": [ 1406 | "MIT" 1407 | ], 1408 | "authors": [ 1409 | { 1410 | "name": "Nicolas Grekas", 1411 | "email": "p@tchwork.com" 1412 | }, 1413 | { 1414 | "name": "Symfony Community", 1415 | "homepage": "https://symfony.com/contributors" 1416 | } 1417 | ], 1418 | "description": "Symfony polyfill for the Mbstring extension", 1419 | "homepage": "https://symfony.com", 1420 | "keywords": [ 1421 | "compatibility", 1422 | "mbstring", 1423 | "polyfill", 1424 | "portable", 1425 | "shim" 1426 | ], 1427 | "support": { 1428 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0" 1429 | }, 1430 | "funding": [ 1431 | { 1432 | "url": "https://symfony.com/sponsor", 1433 | "type": "custom" 1434 | }, 1435 | { 1436 | "url": "https://github.com/fabpot", 1437 | "type": "github" 1438 | }, 1439 | { 1440 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1441 | "type": "tidelift" 1442 | } 1443 | ], 1444 | "time": "2024-06-19T12:30:46+00:00" 1445 | }, 1446 | { 1447 | "name": "symfony/polyfill-php83", 1448 | "version": "v1.30.0", 1449 | "source": { 1450 | "type": "git", 1451 | "url": "https://github.com/symfony/polyfill-php83.git", 1452 | "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9" 1453 | }, 1454 | "dist": { 1455 | "type": "zip", 1456 | "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9", 1457 | "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9", 1458 | "shasum": "" 1459 | }, 1460 | "require": { 1461 | "php": ">=7.1" 1462 | }, 1463 | "type": "library", 1464 | "extra": { 1465 | "thanks": { 1466 | "name": "symfony/polyfill", 1467 | "url": "https://github.com/symfony/polyfill" 1468 | } 1469 | }, 1470 | "autoload": { 1471 | "files": [ 1472 | "bootstrap.php" 1473 | ], 1474 | "psr-4": { 1475 | "Symfony\\Polyfill\\Php83\\": "" 1476 | }, 1477 | "classmap": [ 1478 | "Resources/stubs" 1479 | ] 1480 | }, 1481 | "notification-url": "https://packagist.org/downloads/", 1482 | "license": [ 1483 | "MIT" 1484 | ], 1485 | "authors": [ 1486 | { 1487 | "name": "Nicolas Grekas", 1488 | "email": "p@tchwork.com" 1489 | }, 1490 | { 1491 | "name": "Symfony Community", 1492 | "homepage": "https://symfony.com/contributors" 1493 | } 1494 | ], 1495 | "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", 1496 | "homepage": "https://symfony.com", 1497 | "keywords": [ 1498 | "compatibility", 1499 | "polyfill", 1500 | "portable", 1501 | "shim" 1502 | ], 1503 | "support": { 1504 | "source": "https://github.com/symfony/polyfill-php83/tree/v1.30.0" 1505 | }, 1506 | "funding": [ 1507 | { 1508 | "url": "https://symfony.com/sponsor", 1509 | "type": "custom" 1510 | }, 1511 | { 1512 | "url": "https://github.com/fabpot", 1513 | "type": "github" 1514 | }, 1515 | { 1516 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1517 | "type": "tidelift" 1518 | } 1519 | ], 1520 | "time": "2024-06-19T12:35:24+00:00" 1521 | }, 1522 | { 1523 | "name": "symfony/translation", 1524 | "version": "v7.1.1", 1525 | "source": { 1526 | "type": "git", 1527 | "url": "https://github.com/symfony/translation.git", 1528 | "reference": "cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3" 1529 | }, 1530 | "dist": { 1531 | "type": "zip", 1532 | "url": "https://api.github.com/repos/symfony/translation/zipball/cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3", 1533 | "reference": "cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3", 1534 | "shasum": "" 1535 | }, 1536 | "require": { 1537 | "php": ">=8.2", 1538 | "symfony/polyfill-mbstring": "~1.0", 1539 | "symfony/translation-contracts": "^2.5|^3.0" 1540 | }, 1541 | "conflict": { 1542 | "symfony/config": "<6.4", 1543 | "symfony/console": "<6.4", 1544 | "symfony/dependency-injection": "<6.4", 1545 | "symfony/http-client-contracts": "<2.5", 1546 | "symfony/http-kernel": "<6.4", 1547 | "symfony/service-contracts": "<2.5", 1548 | "symfony/twig-bundle": "<6.4", 1549 | "symfony/yaml": "<6.4" 1550 | }, 1551 | "provide": { 1552 | "symfony/translation-implementation": "2.3|3.0" 1553 | }, 1554 | "require-dev": { 1555 | "nikic/php-parser": "^4.18|^5.0", 1556 | "psr/log": "^1|^2|^3", 1557 | "symfony/config": "^6.4|^7.0", 1558 | "symfony/console": "^6.4|^7.0", 1559 | "symfony/dependency-injection": "^6.4|^7.0", 1560 | "symfony/finder": "^6.4|^7.0", 1561 | "symfony/http-client-contracts": "^2.5|^3.0", 1562 | "symfony/http-kernel": "^6.4|^7.0", 1563 | "symfony/intl": "^6.4|^7.0", 1564 | "symfony/polyfill-intl-icu": "^1.21", 1565 | "symfony/routing": "^6.4|^7.0", 1566 | "symfony/service-contracts": "^2.5|^3", 1567 | "symfony/yaml": "^6.4|^7.0" 1568 | }, 1569 | "type": "library", 1570 | "autoload": { 1571 | "files": [ 1572 | "Resources/functions.php" 1573 | ], 1574 | "psr-4": { 1575 | "Symfony\\Component\\Translation\\": "" 1576 | }, 1577 | "exclude-from-classmap": [ 1578 | "/Tests/" 1579 | ] 1580 | }, 1581 | "notification-url": "https://packagist.org/downloads/", 1582 | "license": [ 1583 | "MIT" 1584 | ], 1585 | "authors": [ 1586 | { 1587 | "name": "Fabien Potencier", 1588 | "email": "fabien@symfony.com" 1589 | }, 1590 | { 1591 | "name": "Symfony Community", 1592 | "homepage": "https://symfony.com/contributors" 1593 | } 1594 | ], 1595 | "description": "Provides tools to internationalize your application", 1596 | "homepage": "https://symfony.com", 1597 | "support": { 1598 | "source": "https://github.com/symfony/translation/tree/v7.1.1" 1599 | }, 1600 | "funding": [ 1601 | { 1602 | "url": "https://symfony.com/sponsor", 1603 | "type": "custom" 1604 | }, 1605 | { 1606 | "url": "https://github.com/fabpot", 1607 | "type": "github" 1608 | }, 1609 | { 1610 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1611 | "type": "tidelift" 1612 | } 1613 | ], 1614 | "time": "2024-05-31T14:57:53+00:00" 1615 | }, 1616 | { 1617 | "name": "symfony/translation-contracts", 1618 | "version": "v3.5.0", 1619 | "source": { 1620 | "type": "git", 1621 | "url": "https://github.com/symfony/translation-contracts.git", 1622 | "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" 1623 | }, 1624 | "dist": { 1625 | "type": "zip", 1626 | "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", 1627 | "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", 1628 | "shasum": "" 1629 | }, 1630 | "require": { 1631 | "php": ">=8.1" 1632 | }, 1633 | "type": "library", 1634 | "extra": { 1635 | "branch-alias": { 1636 | "dev-main": "3.5-dev" 1637 | }, 1638 | "thanks": { 1639 | "name": "symfony/contracts", 1640 | "url": "https://github.com/symfony/contracts" 1641 | } 1642 | }, 1643 | "autoload": { 1644 | "psr-4": { 1645 | "Symfony\\Contracts\\Translation\\": "" 1646 | }, 1647 | "exclude-from-classmap": [ 1648 | "/Test/" 1649 | ] 1650 | }, 1651 | "notification-url": "https://packagist.org/downloads/", 1652 | "license": [ 1653 | "MIT" 1654 | ], 1655 | "authors": [ 1656 | { 1657 | "name": "Nicolas Grekas", 1658 | "email": "p@tchwork.com" 1659 | }, 1660 | { 1661 | "name": "Symfony Community", 1662 | "homepage": "https://symfony.com/contributors" 1663 | } 1664 | ], 1665 | "description": "Generic abstractions related to translation", 1666 | "homepage": "https://symfony.com", 1667 | "keywords": [ 1668 | "abstractions", 1669 | "contracts", 1670 | "decoupling", 1671 | "interfaces", 1672 | "interoperability", 1673 | "standards" 1674 | ], 1675 | "support": { 1676 | "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" 1677 | }, 1678 | "funding": [ 1679 | { 1680 | "url": "https://symfony.com/sponsor", 1681 | "type": "custom" 1682 | }, 1683 | { 1684 | "url": "https://github.com/fabpot", 1685 | "type": "github" 1686 | }, 1687 | { 1688 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1689 | "type": "tidelift" 1690 | } 1691 | ], 1692 | "time": "2024-04-18T09:32:20+00:00" 1693 | }, 1694 | { 1695 | "name": "voku/portable-ascii", 1696 | "version": "2.0.1", 1697 | "source": { 1698 | "type": "git", 1699 | "url": "https://github.com/voku/portable-ascii.git", 1700 | "reference": "b56450eed252f6801410d810c8e1727224ae0743" 1701 | }, 1702 | "dist": { 1703 | "type": "zip", 1704 | "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", 1705 | "reference": "b56450eed252f6801410d810c8e1727224ae0743", 1706 | "shasum": "" 1707 | }, 1708 | "require": { 1709 | "php": ">=7.0.0" 1710 | }, 1711 | "require-dev": { 1712 | "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" 1713 | }, 1714 | "suggest": { 1715 | "ext-intl": "Use Intl for transliterator_transliterate() support" 1716 | }, 1717 | "type": "library", 1718 | "autoload": { 1719 | "psr-4": { 1720 | "voku\\": "src/voku/" 1721 | } 1722 | }, 1723 | "notification-url": "https://packagist.org/downloads/", 1724 | "license": [ 1725 | "MIT" 1726 | ], 1727 | "authors": [ 1728 | { 1729 | "name": "Lars Moelleken", 1730 | "homepage": "http://www.moelleken.org/" 1731 | } 1732 | ], 1733 | "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", 1734 | "homepage": "https://github.com/voku/portable-ascii", 1735 | "keywords": [ 1736 | "ascii", 1737 | "clean", 1738 | "php" 1739 | ], 1740 | "support": { 1741 | "issues": "https://github.com/voku/portable-ascii/issues", 1742 | "source": "https://github.com/voku/portable-ascii/tree/2.0.1" 1743 | }, 1744 | "funding": [ 1745 | { 1746 | "url": "https://www.paypal.me/moelleken", 1747 | "type": "custom" 1748 | }, 1749 | { 1750 | "url": "https://github.com/voku", 1751 | "type": "github" 1752 | }, 1753 | { 1754 | "url": "https://opencollective.com/portable-ascii", 1755 | "type": "open_collective" 1756 | }, 1757 | { 1758 | "url": "https://www.patreon.com/voku", 1759 | "type": "patreon" 1760 | }, 1761 | { 1762 | "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", 1763 | "type": "tidelift" 1764 | } 1765 | ], 1766 | "time": "2022-03-08T17:03:00+00:00" 1767 | } 1768 | ], 1769 | "packages-dev": [], 1770 | "aliases": [], 1771 | "minimum-stability": "stable", 1772 | "stability-flags": [], 1773 | "prefer-stable": false, 1774 | "prefer-lowest": false, 1775 | "platform": { 1776 | "php": "^8.0" 1777 | }, 1778 | "platform-dev": [], 1779 | "plugin-api-version": "2.6.0" 1780 | } 1781 | --------------------------------------------------------------------------------