├── src ├── Exception │ ├── NtfyException.php │ └── EndpointException.php ├── Auth │ ├── Token.php │ ├── User.php │ └── AbstractAuth.php ├── Action │ ├── View.php │ ├── Broadcast.php │ ├── AbstractAction.php │ └── Http.php ├── Client.php ├── Json.php ├── Server.php ├── Guzzle.php └── Message.php ├── docs ├── classes │ ├── server.md │ ├── client.md │ ├── auth.md │ ├── action.md │ └── message.md ├── test-users.md ├── exceptions.md └── README.md ├── LICENSE ├── examples ├── send-message.php ├── send-message-with-markdown-body.php ├── send-message-with-token-auth.php ├── send-message-with-user-auth.php └── send-message-with-view-action.php ├── composer.json ├── README.md ├── CHANGELOG.md └── composer.lock /src/Exception/NtfyException.php: -------------------------------------------------------------------------------- 1 | token = $token; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /docs/exceptions.md: -------------------------------------------------------------------------------- 1 | # Exceptions 2 | 3 | When the library encounters an error it will always throw an exception. Your code must catch the exceptions listed below. 4 | 5 | ## NtfyException 6 | ```PHP 7 | Ntfy\Exception\NtfyException 8 | ``` 9 | 10 | Thrown when the ntfy library experiences an error. 11 | 12 | Example: [`Ntfy\Server`](../src/Server.php) will throw `NtfyException` if the given server URI is invalid. 13 | 14 | ## EndpointException 15 | ```PHP 16 | Ntfy\Exception\EndpointException 17 | ``` 18 | 19 | Thrown when the ntfy server returns an error. -------------------------------------------------------------------------------- /docs/classes/client.md: -------------------------------------------------------------------------------- 1 | # Client 2 | 3 | Class for sending requests to a Ntfy server. 4 | 5 | ```PHP 6 | Ntfy\Client(Server $server, User|Token|null $auth = null) 7 | ``` 8 | 9 | ### Examples 10 | 11 | - [Send a message](../../examples/send-message.php) 12 | - [Send a message to a server protected with user authentication](../../examples/send-message-with-user-auth.php) 13 | - [Send a message to a server protected with token authentication](../../examples/send-message-with-token-auth.php) 14 | 15 | ### Methods 16 | 17 | Send a message to the defined server. 18 | 19 | ```PHP 20 | send(Message $message): stdClass 21 | ``` 22 | -------------------------------------------------------------------------------- /src/Auth/User.php: -------------------------------------------------------------------------------- 1 | username = $username; 24 | $this->password = $password; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/Action/View.php: -------------------------------------------------------------------------------- 1 | url = $url; 28 | } 29 | 30 | /** 31 | * {@inheritDoc} 32 | */ 33 | protected function generate(): array 34 | { 35 | $action = parent::generate(); 36 | $action['url'] = $this->url; 37 | 38 | return $action; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /docs/classes/auth.md: -------------------------------------------------------------------------------- 1 | # Authentication Classes 2 | 3 | ## User 4 | 5 | ```PHP 6 | Ntfy\Auth\User(string $username, string $password) 7 | ``` 8 | 9 | Class: [User](../../src/Auth/User.php) 10 | 11 | ### Examples 12 | - [Send a message to a server protected with user authentication](../../examples/send-message-with-user-auth.php) 13 | 14 | ### Methods 15 | 16 | Get authentication method 17 | ```PHP 18 | getMethod(): string 19 | ``` 20 | 21 | Get username 22 | 23 | ```PHP 24 | getUsername(): string 25 | ``` 26 | 27 | Get password 28 | 29 | ```PHP 30 | getPassword(): string 31 | ``` 32 | 33 | ## Token 34 | 35 | ```PHP 36 | Ntfy\Auth\Token(string $token) 37 | ``` 38 | 39 | Class: [Token](../../src/Auth/Token.php) 40 | 41 | ### Examples 42 | - [Send a message to a server protected with token authentication](../../examples/send-message-with-token-auth.php) 43 | 44 | ### Methods 45 | 46 | Get authentication method 47 | ```PHP 48 | getMethod(): string 49 | ``` 50 | 51 | Get token 52 | 53 | ```PHP 54 | getToken(): string 55 | ``` 56 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # Documentation 2 | 3 | ## Classes 4 | 5 | - [Auth](classes/auth.md) 6 | - [Client](classes/client.md) 7 | - [Server](classes/server.md) 8 | - [Message](classes/message.md) 9 | - [Action](classes/action.md) 10 | 11 | ## Exceptions 12 | 13 | - [NtfyException](exceptions.md#NtfyException) 14 | - [EndpointException](exceptions.md#EndpointException) 15 | 16 | ## Code Examples 17 | 18 | - [Send a message](../examples/send-message.php) 19 | - [Send a message with a markdown body](../examples/send-message-with-markdown-body.php) 20 | - [Send a message with a view action button](../examples/send-message-with-view-action.php) 21 | - [Send a message to a server protected with user authentication](../examples/send-message-with-user-auth.php) 22 | - [Send a message to a server protected with token authentication](../examples/send-message-with-token-auth.php) 23 | 24 | ## External Links 25 | 26 | - [ntfy documentation (docs.ntfy.sh)](https://ntfy.sh/docs/) 27 | - [ntfy source code (github.com/binwiederhier/ntfy)](https://github.com/binwiederhier/ntfy) -------------------------------------------------------------------------------- /src/Client.php: -------------------------------------------------------------------------------- 1 | guzzle = new Guzzle( 24 | $server->get(), 25 | $auth 26 | ); 27 | } 28 | 29 | /** 30 | * Send the message to the defined server. 31 | * 32 | * @param Message $message 33 | * @return stdClass 34 | * @throws NtfyException 35 | */ 36 | public function send(Message $message): stdClass 37 | { 38 | $response = $this->guzzle->post('', $message->getData()); 39 | $message = Json::decode($response->getBody()->getContents()); 40 | 41 | return $message; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Joseph 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 | -------------------------------------------------------------------------------- /examples/send-message.php: -------------------------------------------------------------------------------- 1 | topic('mytopic'); 22 | $message->title('Hello World'); 23 | $message->body('Hello World from ntfy.sh'); 24 | $message->priority(Message::PRIORITY_HIGH); 25 | 26 | $client = new Client($server); 27 | $response = $client->send($message); 28 | 29 | // Display sent message details 30 | echo 'Id: ' . $response->id . PHP_EOL; 31 | echo 'Time: ' . $response->time . PHP_EOL; 32 | echo 'Topic: ' . $response->topic . PHP_EOL; 33 | echo 'Title: ' . $response->title . PHP_EOL; 34 | echo 'Message: ' . $response->message . PHP_EOL; 35 | echo 'Priority: ' . $response->priority . PHP_EOL; 36 | } catch (EndpointException | NtfyException $err) { 37 | echo $err->getMessage(); 38 | } 39 | -------------------------------------------------------------------------------- /examples/send-message-with-markdown-body.php: -------------------------------------------------------------------------------- 1 | topic('mytopic'); 22 | $message->title('Hello World'); 23 | $message->markdownBody('**Hello World** from [ntfy.sh](https://ntfy.sh)'); 24 | $message->priority(Message::PRIORITY_HIGH); 25 | 26 | $client = new Client($server); 27 | $response = $client->send($message); 28 | 29 | // Display sent message details 30 | echo 'Id: ' . $response->id . PHP_EOL; 31 | echo 'Time: ' . $response->time . PHP_EOL; 32 | echo 'Topic: ' . $response->topic . PHP_EOL; 33 | echo 'Title: ' . $response->title . PHP_EOL; 34 | echo 'Message: ' . $response->message . PHP_EOL; 35 | echo 'Priority: ' . $response->priority . PHP_EOL; 36 | } catch (EndpointException | NtfyException $err) { 37 | echo $err->getMessage(); 38 | } 39 | -------------------------------------------------------------------------------- /src/Json.php: -------------------------------------------------------------------------------- 1 | getMessage()); 30 | } 31 | } 32 | 33 | /** 34 | * Decode JSON 35 | * 36 | * @param string $json 37 | * @return stdClass 38 | * 39 | * @throws NtfyException if JSON could not be decoded 40 | */ 41 | public static function decode(string $json): stdClass 42 | { 43 | try { 44 | return json_decode($json, flags: JSON_THROW_ON_ERROR); 45 | } catch (JsonException $err) { 46 | throw new NtfyException('JSON Error: ' . $err->getMessage()); 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/Auth/AbstractAuth.php: -------------------------------------------------------------------------------- 1 | method; 29 | } 30 | 31 | /** 32 | * Get authentication token 33 | * 34 | * @return string 35 | */ 36 | final public function getToken(): string 37 | { 38 | return $this->token; 39 | } 40 | 41 | /** 42 | * Get username 43 | * 44 | * @return string 45 | */ 46 | final public function getUsername(): string 47 | { 48 | return $this->username; 49 | } 50 | 51 | /** 52 | * Get password 53 | * 54 | * @return string 55 | */ 56 | final public function getPassword(): string 57 | { 58 | return $this->password; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /examples/send-message-with-token-auth.php: -------------------------------------------------------------------------------- 1 | topic('mytopic'); 23 | $message->title('Hello World'); 24 | $message->body('Hello World from ntfy.sh'); 25 | $message->priority(Message::PRIORITY_HIGH); 26 | 27 | // Set authentication token 28 | $auth = new Token('TokenString'); 29 | 30 | // New client 31 | $client = new Client($server, $auth); 32 | 33 | // Send message 34 | $response = $client->send($message); 35 | 36 | // Display response from server 37 | echo 'Id: ' . $response->id . PHP_EOL; 38 | echo 'Time: ' . $response->time . PHP_EOL; 39 | echo 'Topic: ' . $response->topic . PHP_EOL; 40 | echo 'Title: ' . $response->title . PHP_EOL; 41 | echo 'Message: ' . $response->message . PHP_EOL; 42 | echo 'Priority: ' . $response->priority . PHP_EOL; 43 | } catch (EndpointException | NtfyException $err) { 44 | echo $err->getMessage(); 45 | } 46 | -------------------------------------------------------------------------------- /examples/send-message-with-user-auth.php: -------------------------------------------------------------------------------- 1 | topic('mytopic'); 23 | $message->title('Hello World'); 24 | $message->body('Hello World from ntfy.sh'); 25 | $message->priority(Message::PRIORITY_HIGH); 26 | 27 | // Set authentication username and password 28 | $auth = new User('username', 'password'); 29 | 30 | // New client 31 | $client = new Client($server, $auth); 32 | 33 | // Send message 34 | $response = $client->send($message); 35 | 36 | // Display response from server 37 | echo 'Id: ' . $response->id . PHP_EOL; 38 | echo 'Time: ' . $response->time . PHP_EOL; 39 | echo 'Topic: ' . $response->topic . PHP_EOL; 40 | echo 'Title: ' . $response->title . PHP_EOL; 41 | echo 'Message: ' . $response->message . PHP_EOL; 42 | echo 'Priority: ' . $response->priority . PHP_EOL; 43 | } catch (EndpointException | NtfyException $err) { 44 | echo $err->getMessage(); 45 | } 46 | -------------------------------------------------------------------------------- /src/Server.php: -------------------------------------------------------------------------------- 1 | uri = $this->validate($uri); 24 | } 25 | 26 | /** 27 | * Get server 28 | * 29 | * @return string Returns server URI 30 | */ 31 | public function get(): string 32 | { 33 | return $this->uri; 34 | } 35 | 36 | /** 37 | * Validate server URI 38 | * 39 | * Checks if server URI starts with `https://` or `http://`. 40 | * 41 | * Checks if server URI ends with a forward slash and adds it if missing. 42 | * 43 | * @param string $uri Server URI 44 | * @return string $uri Returns validated server URI 45 | * 46 | * @throws NtfyException if Server URL doesn't start with `https://` or `http://`. 47 | */ 48 | private function validate(string $uri): string 49 | { 50 | if (preg_match('/^https?:\/\//', $uri) === 0) { 51 | throw new NtfyException('Server URI must start with https:// or http://'); 52 | } 53 | 54 | if (substr($uri, -1) !== '/') { 55 | $uri .= '/'; 56 | } 57 | 58 | return $uri; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "verifiedjoseph/ntfy-php-library", 3 | "description": "PHP library for sending push notifications using ntfy.", 4 | "keywords": ["Ntfy", "ntfy.sh", "push notifications"], 5 | "homepage": "https://github.com/VerifiedJoseph/ntfy-php-library", 6 | "license": "MIT", 7 | "authors": [ 8 | { 9 | "name": "VerifiedJoseph", 10 | "homepage": "https://github.com/VerifiedJoseph" 11 | } 12 | ], 13 | "require": { 14 | "php": "^8.2", 15 | "ext-curl": "*", 16 | "ext-json": "*", 17 | "guzzlehttp/guzzle": "^7.4" 18 | }, 19 | "autoload": { 20 | "psr-4": { 21 | "Ntfy\\": "src/" 22 | } 23 | }, 24 | "autoload-dev": { 25 | "classmap": [ 26 | "tests/" 27 | ] 28 | }, 29 | "require-dev": { 30 | "phpstan/phpstan": "^2.0", 31 | "phpstan/phpstan-deprecation-rules": "^2.0", 32 | "phpstan/phpstan-phpunit": "^2.0", 33 | "phpunit/phpunit": "^11.4", 34 | "squizlabs/php_codesniffer": "^4.0" 35 | }, 36 | "scripts": { 37 | "lint": "phpstan && phpcs", 38 | "lint-phpstan": "phpstan", 39 | "lint-phpcs": "phpcs", 40 | "lint-phpcs-action": "phpcs --report=checkstyle | cs2pr", 41 | "test": "phpunit --colors --coverage-html coverage-reports", 42 | "fix": "phpcbf" 43 | }, 44 | "config": { 45 | "platform": { 46 | "php": "8.2" 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/Action/Broadcast.php: -------------------------------------------------------------------------------- 1 | $extras Android intent extra */ 21 | protected array $extras = []; 22 | 23 | /** 24 | * Set android intent name 25 | * 26 | * @param string $intent intent Android intent name 27 | */ 28 | public function intent(string $intent): void 29 | { 30 | $this->intent = $intent; 31 | } 32 | 33 | /** 34 | * Set an android intent extra 35 | * 36 | * @param string $parameter Parameter name 37 | * @param string $value Parameter value 38 | */ 39 | public function extra(string $parameter, string $value): void 40 | { 41 | $this->extras[$parameter] = $value; 42 | } 43 | 44 | /** 45 | * {@inheritDoc} 46 | */ 47 | protected function generate(): array 48 | { 49 | $action = parent::generate(); 50 | 51 | if ($this->intent !== '') { 52 | $action['intent'] = $this->intent; 53 | } 54 | 55 | if ($this->extras !== []) { 56 | $action['extras'] = $this->extras; 57 | } 58 | 59 | return $action; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/Action/AbstractAction.php: -------------------------------------------------------------------------------- 1 | 27 | */ 28 | final public function get(): array 29 | { 30 | return $this->generate(); 31 | } 32 | 33 | /** 34 | * Set button label 35 | * 36 | * @param string $label Button label 37 | */ 38 | final public function label(string $label): void 39 | { 40 | $this->label = $label; 41 | } 42 | 43 | /** 44 | * Enable clearing notification after action button is tapped 45 | */ 46 | final public function enableNoteClear(): void 47 | { 48 | $this->clear = true; 49 | } 50 | 51 | /** 52 | * Generate array with action button parameters 53 | * 54 | * @return array 55 | */ 56 | protected function generate(): array 57 | { 58 | $action = []; 59 | $action['action'] = $this->type; 60 | $action['label'] = $this->label; 61 | $action['clear'] = $this->clear; 62 | 63 | return $action; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /examples/send-message-with-view-action.php: -------------------------------------------------------------------------------- 1 | label('Open website'); 22 | $action->url('https://example.com/'); 23 | 24 | // Create a new message 25 | $message = new Message(); 26 | $message->topic('mytopic'); 27 | $message->title('Hello World'); 28 | $message->body('Hello World from ntfy.sh'); 29 | $message->priority(Message::PRIORITY_HIGH); 30 | $message->action($action); 31 | 32 | $client = new Client($server); 33 | $response = $client->send($message); 34 | 35 | // Display sent message details 36 | echo 'Id: ' . $response->id . PHP_EOL; 37 | echo 'Time: ' . $response->time . PHP_EOL; 38 | echo 'Topic: ' . $response->topic . PHP_EOL; 39 | echo 'Title: ' . $response->title . PHP_EOL; 40 | echo 'Message: ' . $response->message . PHP_EOL; 41 | echo 'Priority: ' . $response->priority . PHP_EOL; 42 | 43 | echo 'Action type: ' . $response->actions[0]->action . PHP_EOL; 44 | echo 'Action label: ' . $response->actions[0]->label . PHP_EOL; 45 | echo 'Action url: ' . $response->actions[0]->url . PHP_EOL; 46 | } catch (EndpointException | NtfyException $err) { 47 | echo $err->getMessage(); 48 | } 49 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ntfy-php-library 2 | 3 | [![Latest Version](https://img.shields.io/github/release/VerifiedJoseph/ntfy-php-library.svg?style=flat-square)](https://github.com/VerifiedJoseph/ntfy-php-library/releases/latest) 4 | [![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE) 5 | [![Codecov](https://img.shields.io/codecov/c/github/VerifiedJoseph/ntfy-php-library?style=flat-square)](https://app.codecov.io/gh/VerifiedJoseph/ntfy-php-library/) 6 | 7 | PHP library for sending push notifications using [ntfy](https://github.com/binwiederhier/ntfy). 8 | 9 | Supports ntfy server version 2. 10 | 11 | ## Install 12 | 13 | ``` 14 | composer require verifiedjoseph/ntfy-php-library 15 | ``` 16 | 17 | ## Quick Start 18 | 19 | ```PHP 20 | require __DIR__ . '/vendor/autoload.php'; 21 | 22 | use Ntfy\Server; 23 | use Ntfy\Message; 24 | use Ntfy\Client; 25 | 26 | $server = new Server('https://ntfy.sh/'); 27 | 28 | $message = new Message(); 29 | $message->topic('mytopic'); 30 | $message->title('Hello World'); 31 | $message->body('Hello World from ntfy.sh'); 32 | $message->priority(Message::PRIORITY_HIGH); 33 | 34 | $client = new Client($server); 35 | $client->send($message); 36 | ``` 37 | 38 | ## Documentation 39 | 40 | - [Classes](docs/README.md#Classes) 41 | - [Exceptions](docs/exceptions.md) 42 | - [Code examples](docs/README.md#code-examples) 43 | 44 | ## Requirements 45 | 46 | - PHP >= 8.2 47 | - Composer 48 | - PHP Extensions: 49 | - [`JSON`](https://www.php.net/manual/en/book.json.php) 50 | - [`cURL`](https://secure.php.net/manual/en/book.curl.php) 51 | 52 | ## Dependencies 53 | 54 | [`guzzlehttp/guzzle`](https://github.com/guzzle/guzzle/) 55 | 56 | ## Changelog 57 | 58 | All notable changes to this project are documented in the [CHANGELOG](CHANGELOG.md). 59 | 60 | ## License 61 | 62 | MIT License. Please see [LICENSE](LICENSE) for more information. 63 | -------------------------------------------------------------------------------- /src/Action/Http.php: -------------------------------------------------------------------------------- 1 | $headers HTTP request headers */ 24 | protected array $headers = []; 25 | 26 | /** @var string $body HTTP request body */ 27 | protected string $body = ''; 28 | 29 | /** 30 | * Set HTTP request URL 31 | * 32 | * @param string $url URL 33 | */ 34 | public function url(string $url): void 35 | { 36 | $this->url = $url; 37 | } 38 | 39 | /** 40 | * Set HTTP request method 41 | * 42 | * @param string $method HTTP request method 43 | */ 44 | public function method(string $method): void 45 | { 46 | $this->method = $method; 47 | } 48 | 49 | /** 50 | * Set an HTTP request header 51 | * 52 | * @param string $name Header name 53 | * @param string $value Header value 54 | */ 55 | public function header(string $name, string $value): void 56 | { 57 | $this->headers[$name] = $value; 58 | } 59 | 60 | /** 61 | * Set HTTP request body 62 | * 63 | * @param string $body Request body 64 | */ 65 | public function body(string $body): void 66 | { 67 | $this->body = $body; 68 | } 69 | 70 | /** 71 | * {@inheritDoc} 72 | */ 73 | protected function generate(): array 74 | { 75 | $action = parent::generate(); 76 | $action['url'] = $this->url; 77 | $action['method'] = $this->method; 78 | 79 | if ($this->headers !== []) { 80 | $action['headers'] = $this->headers; 81 | } 82 | 83 | if ($this->body !== '') { 84 | $action['body'] = $this->body; 85 | } 86 | 87 | return $action; 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /docs/classes/action.md: -------------------------------------------------------------------------------- 1 | # Action Classes 2 | 3 | - [Broadcast](#broadcast) 4 | - [Http](#http) 5 | - [View](#view) 6 | 7 | 8 | ## Broadcast 9 | 10 | Class for creating an android broadcast button action 11 | 12 | ```PHP 13 | Ntfy\Action\Broadcast() 14 | ``` 15 | 16 | ### Methods 17 | 18 | Get action as an array 19 | 20 | ```PHP 21 | get(): array 22 | ``` 23 | 24 | Set button label 25 | 26 | ```PHP 27 | label(string $label): void 28 | ``` 29 | 30 | Enable clearing notification after action button is tapped 31 | 32 | ```PHP 33 | enableNoteClear(): void 34 | ``` 35 | 36 | Set android intent name 37 | 38 | ```PHP 39 | intent(string $intent): void 40 | ``` 41 | 42 | Set an android intent extra 43 | 44 | ```PHP 45 | extra($parameter, $value): void 46 | ``` 47 | 48 | ## Http 49 | 50 | Class for creating a HTTP button action 51 | 52 | ```PHP 53 | Ntfy\Action\Http() 54 | ``` 55 | 56 | ### Methods 57 | 58 | Get action as an array 59 | 60 | ```PHP 61 | get(): array 62 | ``` 63 | 64 | Set button label 65 | 66 | ```PHP 67 | label(string $label): void 68 | ``` 69 | 70 | Enable clearing notification after action button is tapped 71 | 72 | ```PHP 73 | enableNoteClear(): void 74 | ``` 75 | 76 | Set HTTP request URL 77 | 78 | ```PHP 79 | url(string $url): void 80 | ``` 81 | 82 | Set HTTP request method 83 | 84 | ```PHP 85 | method(string $method): void 86 | ``` 87 | 88 | Set an HTTP request header 89 | 90 | ```PHP 91 | header(string $name, string $value): void 92 | ``` 93 | 94 | Set HTTP request body 95 | 96 | ```PHP 97 | body(string $body): void 98 | ``` 99 | 100 | ## View 101 | 102 | Class for creating a view button action 103 | 104 | ```PHP 105 | Ntfy\Action\View() 106 | ``` 107 | 108 | ### Examples 109 | 110 | - [Send message with a view action button](../../examples/send-message-with-view-action.php) 111 | 112 | ### Methods 113 | 114 | Get action as an array 115 | 116 | ```PHP 117 | get(): array 118 | ``` 119 | 120 | Set button label 121 | 122 | ```PHP 123 | label(string $label): void 124 | ``` 125 | 126 | Enable clearing notification after action button is tapped 127 | 128 | ```PHP 129 | enableNoteClear(): void 130 | ``` 131 | 132 | Set action URL 133 | 134 | ```PHP 135 | url(string $url): void 136 | ``` -------------------------------------------------------------------------------- /docs/classes/message.md: -------------------------------------------------------------------------------- 1 | # Message 2 | 3 | Class for creating a message 4 | 5 | ```PHP 6 | Ntfy\Message() 7 | ``` 8 | 9 | ### Examples 10 | 11 | - [Send a message](../../examples/send-message.php) 12 | - [Send a message with a markdown body](../../examples/send-message-with-markdown-body.php) 13 | - [Send a message with a view action button](../../examples/send-message-with-view-action.php) 14 | - [Send a message to a server protected with user authentication](../../examples/send-message-with-user-auth.php) 15 | - [Send a message to a server protected with token authentication](../../examples/send-message-with-token-auth.php) 16 | 17 | ### Constants 18 | 19 | Maximum message priority 20 | 21 | ```PHP 22 | Message::PRIORITY_MAX 23 | ``` 24 | 25 | High message priority 26 | 27 | ```PHP 28 | Message::PRIORITY_HIGH 29 | ``` 30 | 31 | Default message priority 32 | 33 | ```PHP 34 | Message::PRIORITY_DEFAULT 35 | ``` 36 | 37 | Low message priority 38 | 39 | ```PHP 40 | Message::PRIORITY_LOW 41 | ``` 42 | 43 | Minimum message priority 44 | 45 | ```PHP 46 | Message::PRIORITY_MIN 47 | ``` 48 | 49 | ### Methods 50 | 51 | Set message topic 52 | 53 | ```PHP 54 | topic(string $topic): void 55 | ``` 56 | 57 | Set message title 58 | 59 | ```PHP 60 | title(string $title): void 61 | ``` 62 | 63 | Set message priority 64 | 65 | ```PHP 66 | priority(int $priority): void 67 | ``` 68 | 69 | Set plaintext message body 70 | 71 | ```PHP 72 | body(string $body): void 73 | ``` 74 | 75 | Set markdown message body 76 | 77 | ```PHP 78 | markdownBody(string $body): void 79 | ``` 80 | 81 | Set message tags 82 | 83 | ```PHP 84 | tags(array $tags): void 85 | ``` 86 | 87 | Set scheduled delivery for the message 88 | 89 | ```PHP 90 | schedule(string $delay): void 91 | ``` 92 | 93 | Set URL to open when message notification is clicked 94 | 95 | ```PHP 96 | clickAction(string $url): void 97 | ``` 98 | 99 | Set email address for sending a email notification 100 | 101 | ```PHP 102 | email(string $email): void 103 | ``` 104 | 105 | Set URL for message notification icon 106 | 107 | ```PHP 108 | icon(string $url): void 109 | ``` 110 | 111 | Set a file attachment using a URL 112 | 113 | ```PHP 114 | attachURL(string $url, string $name = ''): void 115 | ``` 116 | 117 | Set an action button 118 | 119 | ```PHP 120 | action(Action $action): void 121 | ``` 122 | 123 | Disable caching for this message 124 | 125 | ```PHP 126 | disableCaching(): void 127 | ``` 128 | 129 | Disable firebase for this message 130 | 131 | ```PHP 132 | disableFirebase(): void 133 | ``` 134 | 135 | Get the data to be sent as JSON to the server. 136 | 137 | ```PHP 138 | getData(): array 139 | ``` 140 | -------------------------------------------------------------------------------- /src/Guzzle.php: -------------------------------------------------------------------------------- 1 | $requestMethods Array of supported HTTP request methods */ 25 | private array $requestMethods = ['GET', 'POST']; 26 | 27 | /** @var int $timeout Request timeout in seconds */ 28 | private int $timeout = 10; 29 | 30 | /** 31 | * 32 | * @param string $uri Server URI 33 | * @param ?AbstractAuth $auth Authentication class instance 34 | * @param ?HandlerStack $handlerStack Guzzle handler stack 35 | */ 36 | public function __construct(string $uri, ?AbstractAuth $auth, ?HandlerStack $handlerStack = null) 37 | { 38 | $config = $this->getConfig($uri, $auth, $handlerStack); 39 | $this->client = new Client($config); 40 | } 41 | 42 | /** 43 | * Make a GET request 44 | * 45 | * @param string $endpoint API endpoint 46 | * @param array $query HTTP Query data 47 | * @return ResponseInterface 48 | */ 49 | public function get(string $endpoint, array $query = []): ResponseInterface 50 | { 51 | $options = [ 52 | RequestOptions::QUERY => $query 53 | ]; 54 | 55 | return $this->request('GET', $endpoint, $options); 56 | } 57 | 58 | /** 59 | * Make a POST request 60 | * 61 | * @param string $endpoint API endpoint 62 | * @param array $data 63 | * @param array $headers 64 | * @return ResponseInterface 65 | */ 66 | public function post(string $endpoint, array $data = [], array $headers = []): ResponseInterface 67 | { 68 | $options = [ 69 | RequestOptions::HEADERS => $headers, 70 | RequestOptions::JSON => $data 71 | ]; 72 | 73 | return $this->request('POST', $endpoint, $options); 74 | } 75 | 76 | /** 77 | * Make an HTTP request 78 | * 79 | * @param string $method HTTP request method 80 | * @param string $endpoint API endpoint 81 | * @param array $options HTTP request options 82 | * @return ResponseInterface 83 | * 84 | * @throws NtfyException if HTTP request method is not supported 85 | * @throws NtfyException if a connection cannot be established 86 | * @throws EndpointException if the server returned an error 87 | */ 88 | protected function request(string $method, string $endpoint, array $options = []): ResponseInterface 89 | { 90 | try { 91 | if (in_array($method, $this->requestMethods) === false) { 92 | throw new NtfyException('Request method must be GET or POST'); 93 | } 94 | 95 | $response = $this->client->request($method, $endpoint, $options); 96 | } catch (ConnectException $err) { 97 | throw new NtfyException($err->getMessage()); 98 | } catch (RequestException $err) { 99 | $response = $err->getResponse(); 100 | $contentType = $response->getHeaderLine('Content-Type'); 101 | 102 | if ($contentType === 'application/json') { 103 | $json = Json::decode($response->getBody()->getContents()); 104 | $message = sprintf( 105 | '%s (error code: %s, http status: %s)', 106 | $json->error, 107 | $json->code, 108 | $json->http 109 | ); 110 | 111 | throw new EndpointException($message, $json->http); 112 | } 113 | 114 | throw new EndpointException( 115 | $err->getMessage(), 116 | $response->getStatusCode() 117 | ); 118 | } 119 | 120 | return $response; 121 | } 122 | 123 | /** 124 | * Get GuzzleHttp client config 125 | * 126 | * @param string $uri Server URI 127 | * @param ?AbstractAuth $auth Authentication class instance 128 | * @param ?HandlerStack $handlerStack Guzzle handler stack 129 | * @return array Returns client config array 130 | */ 131 | private function getConfig(string $uri, ?AbstractAuth $auth, ?HandlerStack $handlerStack = null): array 132 | { 133 | $config = [ 134 | 'base_uri' => $uri, 135 | 'Accept' => 'application/json', 136 | 'timeout' => $this->timeout, 137 | 'allow_redirects' => false, 138 | ]; 139 | 140 | if ($handlerStack !== null) { 141 | $config['handler'] = $handlerStack; 142 | } 143 | 144 | $config = array_merge( 145 | $config, 146 | $this->getAuthConfig($auth) 147 | ); 148 | 149 | return $config; 150 | } 151 | 152 | /** 153 | * Get authentication config 154 | * 155 | * @param ?AbstractAuth $auth Authentication class instance 156 | * @return array> 157 | */ 158 | private function getAuthConfig(?AbstractAuth $auth): array 159 | { 160 | $config = []; 161 | 162 | if ($auth !== null) { 163 | switch ($auth->getMethod()) { 164 | case 'user': 165 | $config[RequestOptions::AUTH] = [ 166 | $auth->getUsername(), 167 | $auth->getPassword(), 168 | ]; 169 | 170 | break; 171 | case 'token': 172 | $config[RequestOptions::HEADERS] = [ 173 | 'Authorization' => 'Bearer ' . $auth->getToken() 174 | ]; 175 | 176 | break; 177 | } 178 | } 179 | 180 | return $config; 181 | } 182 | } 183 | -------------------------------------------------------------------------------- /src/Message.php: -------------------------------------------------------------------------------- 1 | $data Message settings */ 48 | private array $data = [ 49 | 'topic' => '' 50 | ]; 51 | 52 | /** 53 | * Set message topic (required) 54 | * 55 | * @param string $topic Message topic 56 | * 57 | * @see https://ntfy.sh/docs/publish/#publishing 58 | */ 59 | public function topic(string $topic): void 60 | { 61 | $this->data['topic'] = $topic; 62 | } 63 | 64 | /** 65 | * Set message title 66 | * 67 | * @param string $title Message title 68 | */ 69 | public function title(string $title): void 70 | { 71 | $this->data['title'] = $title; 72 | } 73 | 74 | /** 75 | * Set message priority 76 | * 77 | * Priorities: 78 | * - `5` - Max 79 | * - `4` - High 80 | * - `3` - Default 81 | * - `2` - Low 82 | * - `1` - Min 83 | * 84 | * @param int $priority Message priority 85 | * 86 | * @see https://ntfy.sh/docs/publish/#message-priority 87 | */ 88 | public function priority(int $priority): void 89 | { 90 | $this->data['priority'] = $priority; 91 | } 92 | 93 | /** 94 | * Set plaintext message body 95 | * 96 | * Use `markdownBody()` to set a markdown formatted message body 97 | * 98 | * @param string $body Message body 99 | */ 100 | public function body(string $body): void 101 | { 102 | $this->data['message'] = $body; 103 | $this->data['markdown'] = false; 104 | } 105 | 106 | /** 107 | * Set markdown formatted message body 108 | * 109 | * Use `body()` to set a plaintext message body 110 | * 111 | * @param string $body Message body 112 | * 113 | * @see https://docs.ntfy.sh/publish/#markdown-formatting 114 | */ 115 | public function markdownBody(string $body): void 116 | { 117 | $this->data['message'] = $body; 118 | $this->data['markdown'] = true; 119 | } 120 | 121 | /** 122 | * Set message tags 123 | * 124 | * @param array $tags Array of message tags 125 | * 126 | * @see https://ntfy.sh/docs/publish/#tags-emojis 127 | */ 128 | public function tags(array $tags): void 129 | { 130 | $this->data['tags'] = $tags; 131 | } 132 | 133 | /** 134 | * Set scheduled delivery for the message 135 | * 136 | * @param string $delay Duration of the delay (e.g 1min, 1hour, 1day) 137 | * 138 | * @see https://ntfy.sh/docs/publish/#scheduled-delivery 139 | */ 140 | public function schedule(string $delay): void 141 | { 142 | $this->data['delay'] = $delay; 143 | } 144 | 145 | /** 146 | * Set URL to open when message notification is clicked 147 | * 148 | * @param string $url URL 149 | * 150 | * @see https://ntfy.sh/docs/publish/#click-action 151 | */ 152 | public function clickAction(string $url): void 153 | { 154 | $this->data['click'] = $url; 155 | } 156 | 157 | /** 158 | * Set email address for sending a email notification 159 | * 160 | * @param string $email Email address 161 | * 162 | * @see https://ntfy.sh/docs/publish/#e-mail-notifications 163 | */ 164 | public function email(string $email): void 165 | { 166 | $this->data['email'] = $email; 167 | } 168 | 169 | /** 170 | * Set URL for message notification icon 171 | * 172 | * @param string $url icon URL 173 | * 174 | * @see https://ntfy.sh/docs/publish/#icons 175 | */ 176 | public function icon(string $url): void 177 | { 178 | $this->data['icon'] = $url; 179 | } 180 | 181 | /** 182 | * Set a file attachment using a URL 183 | * 184 | * @param string $url File URL 185 | * @param string $name Filename (optional, ntfy will fetch filename its self if not given) 186 | * 187 | * @see https://ntfy.sh/docs/publish/#attachments 188 | * @see https://ntfy.sh/docs/publish/#attach-local-file 189 | */ 190 | public function attachURL(string $url, string $name = ''): void 191 | { 192 | $this->data['attach'] = $url; 193 | $this->data['filename'] = $name; 194 | } 195 | 196 | /** 197 | * Set an action button 198 | * 199 | * @param Broadcast|Http|View $action Action class instance 200 | * 201 | * @see https://ntfy.sh/docs/publish/#action-buttons 202 | */ 203 | public function action(Broadcast|Http|View $action): void 204 | { 205 | $this->data['actions'][] = $action->get(); 206 | } 207 | 208 | /** 209 | * Disable caching for this message 210 | * 211 | * @see https://ntfy.sh/docs/publish/#message-caching 212 | */ 213 | public function disableCaching(): void 214 | { 215 | $this->data['cache'] = 'no'; 216 | } 217 | 218 | /** 219 | * Disable firebase for this message 220 | * 221 | * @see https://ntfy.sh/docs/publish/#disable-firebase 222 | */ 223 | public function disableFirebase(): void 224 | { 225 | $this->data['firebase'] = 'no'; 226 | } 227 | 228 | /** 229 | * Get the data to be sent as JSON to the server. 230 | * 231 | * @return array 232 | * @throws NtfyException if the message topic is not given 233 | */ 234 | public function getData(): array 235 | { 236 | if ($this->data['topic'] === '') { 237 | throw new NtfyException('Message topic must be given'); 238 | } 239 | 240 | return $this->data; 241 | } 242 | } 243 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project are documented in this file. 4 | 5 | ## [4.7.2](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.7.2) - 2025-08-28 6 | 7 | - Fixed deprecation notice in Guzzle class. ([#502](https://github.com/VerifiedJoseph/ntfy-php-library/pull/502), [`bef7531`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/bef7531f6bcb972d230270b64e3bedc675221ec4)) 8 | - Updated `guzzlehttp/guzzle` from 7.9.3 to 7.10.0 ([#497](https://github.com/VerifiedJoseph/ntfy-php-library/pull/497), [`116cd2c`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/116cd2cf80c509bf802d02408f0df3ba6188c36a)) 9 | 10 | ## [4.7.1](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.7.1) - 2025-04-01 11 | 12 | - Enforced strict typing. ([#445](https://github.com/VerifiedJoseph/ntfy-php-library/pull/445), [`3da3fd9`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/3da3fd9eca8e82911a3c49477b4557a2c73bed4a)) 13 | - Updated `guzzlehttp/guzzle` from 7.9.2 to 7.9.3 ([#461](https://github.com/VerifiedJoseph/ntfy-php-library/pull/461), [`fb2fc2e`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/fb2fc2eaa0f8d8e5880162b81b18c46b37c93a03)) 14 | 15 | ## [4.7.0](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.7.0) - 2024-12-10 16 | 17 | - Dropped support for php 8.1 ([#420](https://github.com/VerifiedJoseph/ntfy-php-library/pull/420), [`fd73f1e`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/fd73f1e16db985853d7aa08aa953775d3ee722a8)) 18 | 19 | ## [4.6.2](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.6.2) - 2024-08-01 20 | 21 | - Updated `guzzlehttp/guzzle` from 7.9.1 to 7.9.2 ([#400](https://github.com/VerifiedJoseph/ntfy-php-library/pull/400), [`440f4a2`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/440f4a21c36db658376b7eb849a592419ea74720)) 22 | 23 | ## [4.6.1](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.6.1) - 2024-07-20 24 | 25 | - Updated `guzzlehttp/guzzle` from 7.9.0 to 7.9.1 ([#394](https://github.com/VerifiedJoseph/ntfy-php-library/pull/394), [`a3fed39`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/a3fed39d0b577d8dd27f553232769be665af2f5c)) 26 | 27 | ## [4.6.0](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.6.0) - 2024-07-18 28 | 29 | - Updated `guzzlehttp/guzzle` from 7.8.1 to 7.9.0 ([#390](https://github.com/VerifiedJoseph/ntfy-php-library/pull/390), [`bf44cbd`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/bf44cbd1b0616f5ef4c2191146a05c751e323ab9)) 30 | - Updated supported `binwiederhier/ntfy` version from 2.10.0 to 2.11.0 ([#377](https://github.com/VerifiedJoseph/ntfy-php-library/pull/377), [`043db4f`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/043db4f5cc1c3b647933eeedc2fffdc837ca75bd)) 31 | - Renamed and move abstract classes. ([#367](https://github.com/VerifiedJoseph/ntfy-php-library/pull/367), [`3e37deb`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/3e37debe276831c826d8de5afaf238a404dd6026)) 32 | - Changed auth parameter in Client construct to use union types. ([#392](https://github.com/VerifiedJoseph/ntfy-php-library/pull/392), [`81cfc7d`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/81cfc7db1f5d0bbc82cd71966a9ee8dc219886d9)) 33 | 34 | ## [4.5.2](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.5.2) - 2024-03-25 35 | 36 | * Refactored `Message` class ([#341](https://github.com/VerifiedJoseph/ntfy-php-library/pull/341), [`6d02ac5`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/6d02ac5e0cb27164346f379aa800b0c17c8d46c2)) 37 | * Updated supported `binwiederhier/ntfy` version from 2.8.0 to 2.9.0 ([#346](https://github.com/VerifiedJoseph/ntfy-php-library/pull/346), [`e62a361`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/e62a36132cc326e3b3fd414a7e3a3049366934fa), [#345](https://github.com/VerifiedJoseph/ntfy-php-library/pull/345), [`915d0dd`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/915d0dd235499149be5317675e3be53473edf869)) 38 | 39 | ## [4.5.1](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.5.1) - 2023-12-04 40 | 41 | - Updated `guzzlehttp/guzzle` from 7.8.0 to 7.8.1 ([#309](https://github.com/VerifiedJoseph/ntfy-php-library/pull/309), [`606dde1`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/606dde1016655e247e1a0017849312b610f41350)) 42 | 43 | ## [4.5.0](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.5.0) - 2023-11-20 44 | 45 | - Dropped support for PHP 8.0. ([#225](https://github.com/VerifiedJoseph/ntfy-php-library/pull/225), [`76dc61f`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/76dc61f4c0e94f4a5ef7fcb1cb86324324b2bbf6)) 46 | * Updated supported `binwiederhier/ntfy` version from 2.7.0 to 2.8.0 ([#304](https://github.com/VerifiedJoseph/ntfy-php-library/pull/304), [`4f68864`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/4f688642d2fdd934d20a9bb9b4884a0fc1585426)) 47 | 48 | ## [4.4.0](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.4.0) - 2023-10-16 49 | 50 | - Added support for markdown messages. ([#292](https://github.com/VerifiedJoseph/ntfy-php-library/pull/292), [`ab31611`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/ab31611e467126dc994265262f8396a84dd93666)) 51 | 52 | ## [4.3.0](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.3.0) - 2023-08-28 53 | 54 | * Action\Broadcast: Added type hints to method `extra()`. ([#268](https://github.com/VerifiedJoseph/ntfy-php-library/pull/268), [`eb00101`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/eb001010dff4ee4b310fb3f9a0b777240b60eefb)) 55 | * Updated dependency `guzzlehttp/guzzle` from 7.7.0 to 7.8.0 ([#264](https://github.com/VerifiedJoseph/ntfy-php-library/pull/264), [`0d5f26b`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/0d5f26bb828346eec79e71f73f97d0e1f9937bff)) 56 | 57 | ## [4.2.5](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.2.5) - 2023-08-18 58 | 59 | * Updated supported `binwiederhier/ntfy` version from 2.6.2 to 2.7.0 ([#257](https://github.com/VerifiedJoseph/ntfy-php-library/pull/257), [`17e1918`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/17e1918185c099e48d4beeb125d4f369e618a0a9)) 60 | 61 | ## [4.2.4](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.2.4) - 2023-07-09 62 | 63 | * Updated supported `binwiederhier/ntfy` version from 2.6.0 to 2.6.2 ([#245](https://github.com/VerifiedJoseph/ntfy-php-library/pull/245), [`2c36036`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/2c360361bd35659dd15155117b77008e3cb68bb4)) 64 | 65 | ## [4.2.3](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.2.3) - 2023-06-28 66 | 67 | * Updated supported `binwiederhier/ntfy` version from 2.4.0 to 2.6.0 ([#240](https://github.com/VerifiedJoseph/ntfy-php-library/pull/240), [`560705d`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/560705df1c8fdba6698db8c66858cb2284ad6ada)) 68 | 69 | ## [4.2.2](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.2.2) - 2023-05-29 70 | 71 | * Updated dependency `guzzlehttp/guzzle` from 7.6.0 to 7.6.1 ([#223](https://github.com/VerifiedJoseph/ntfy-php-library/pull/223), [`7474a7e`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/7474a7ee8040ea3442642196b2b2292ba0385af6)) 72 | * Updated dependency `guzzlehttp/guzzle` from 7.6.1 to 7.7.0 ([#226](https://github.com/VerifiedJoseph/ntfy-php-library/pull/226), [`bfcec3e`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/bfcec3e2b1d5d590b69aee9c299b00a93b858341)) 73 | 74 | ## [4.2.1](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.2.1) - 2023-05-14 75 | 76 | * Updated dependency `guzzlehttp/guzzle` from 7.5.1 to 7.6.0. ([#219](https://github.com/VerifiedJoseph/ntfy-php-library/pull/219), [`b3b44b8`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/b3b44b8c19bb45c77419b6d46d5705b1f070e16a)) 77 | 78 | ## [4.2.0](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.2.0) - 2023-04-18 79 | 80 | * Removed deprecated option for setting user authentication with `Auth` class. Use [`Auth\User`](docs/classes/auth.md#user) class. ([#169](https://github.com/VerifiedJoseph/ntfy-php-library/pull/169), [`da96849`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/da96849425de6f08199175c7db1d7684f07bc979)) 81 | * Updated dependency `guzzlehttp/guzzle` from 7.5.0 to 7.5.1. ([#208](https://github.com/VerifiedJoseph/ntfy-php-library/pull/208), [`9897e68`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/9897e68bb5f2c0bf83bc0f78bbb051d539717cee)) 82 | 83 | ## [4.1.1](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.1.1) - 2023-02-18 84 | 85 | * Minor `Guzzle` class refactoring. ([#170](https://github.com/VerifiedJoseph/ntfy-php-library/pull/170), [`6d0c28a`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/6d0c28ac1443caa775ed12b7abe8fdd109bebda5)) 86 | * Updated supported `binwiederhier/ntfy` version from 2.0.0 to 2.0.1 ([#171](https://github.com/VerifiedJoseph/ntfy-php-library/pull/171), [`f195051`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/f19505102f419a6ab5d83c5205619d59f3d16912)) 87 | 88 | ## [4.1.0](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.1.0) - 2023-02-17 89 | 90 | * Added support for access tokens. ([#166](https://github.com/VerifiedJoseph/ntfy-php-library/pull/166), [`cdb1137`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/cdb113793b2ccfbd9490a7973a98d3e84e8fea91)) 91 | * Updated supported `binwiederhier/ntfy` version from 1.31.0 to 2.0.0 ([#164](https://github.com/VerifiedJoseph/ntfy-php-library/pull/164), [`44915b2`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/44915b2a1d8eccf5158f65693d863e0ed515b226)) 92 | * Deprecated setting username and password authentication with class `Auth`. Use class `Auth\User` instead. 93 | 94 | ## [4.0.4](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.0.4) - 2023-02-15 95 | 96 | * Updated supported `binwiederhier/ntfy` version from 1.30.1 to 1.31.0 ([#161](https://github.com/VerifiedJoseph/ntfy-php-library/pull/161), [`da49312`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/da493129d671b0294db4031989ee2af21ece36f7)) 97 | 98 | ## [4.0.3](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.0.3) - 2022-12-24 99 | 100 | * Updated supported `binwiederhier/ntfy` version from 1.29.1 to 1.30.1 ([#138](https://github.com/VerifiedJoseph/ntfy-php-library/pull/138), [`47cf52f`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/47cf52fef4741cedeed38f1f1040d8f13ebec1d8)) 101 | 102 | ## [4.0.2](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.0.2) - 2022-11-23 103 | 104 | * Updated supported `binwiederhier/ntfy` version from 1.29.0 to 1.29.1 ([#131](https://github.com/VerifiedJoseph/ntfy-php-library/pull/131), [`ad40e19`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/ad40e195e98c8464e2962a23f190e2fe280949c1)) 105 | 106 | ## [4.0.1](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.0.1) - 2022-11-16 107 | 108 | * Updated supported `binwiederhier/ntfy` version from 1.28.0 to 1.29.0 ([#125](https://github.com/VerifiedJoseph/ntfy-php-library/pull/125), [`ee9f29d`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/ee9f29d8ac3a3b6ad36b7453e05d1abf8f94c0bb)) 109 | * Tidied code ([#126](https://github.com/VerifiedJoseph/ntfy-php-library/pull/126), [`f82efed`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/f82efed909f101f2a259a3a2b0a38c3b93df182c)) 110 | 111 | ## [4.0.0](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v4.0.0) - 2022-10-10 112 | 113 | **This release is not backwards compatible with version 3. Review the updated [documentation](https://github.com/VerifiedJoseph/ntfy-php-library/tree/main/docs).** 114 | 115 | * Added `Client` class to handle sending messages. ([#98](https://github.com/VerifiedJoseph/ntfy-php-library/pull/98), [`502dd27`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/502dd27ffc680ec0dbdeeb2fc309f0a07e2965d3)) 116 | * Added `Auth` class to handle authentication. 117 | * Added code example for sending messages to a server with authentication. 118 | 119 | ## [3.2.0](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v3.2.0) - 2022-10-03 120 | 121 | * Added support for message notification icons. ([#101](https://github.com/VerifiedJoseph/ntfy-php-library/pull/101), [`9bf4ae5`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/9bf4ae54de22e100b035bcd3d4b4a04bff0dd321)) 122 | 123 | ## [3.1.10](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v3.1.10) - 2022-09-27 124 | 125 | * Updated supported `binwiederhier/ntfy` version from 1.27.2 to 1.28.0 ([#95](https://github.com/VerifiedJoseph/ntfy-php-library/pull/95), [`585033b`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/585033bb4c0b600227258c19b05101710028a380)) 126 | 127 | ## [3.1.9](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v3.1.9) - 2022-09-05 128 | 129 | * Updated dependency `guzzlehttp/guzzle` from 7.4.5 to 7.5.0. ([#88](https://github.com/VerifiedJoseph/ntfy-php-library/pull/88), [`bfdc0b5`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/bfdc0b533b5191e02463a52c0c762b0e367efd91)) 130 | 131 | ## [3.1.8](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v3.1.8) - 2022-07-15 132 | 133 | * Updated supported `binwiederhier/ntfy` version from 1.26.0 to 1.27.2 ([#81](https://github.com/VerifiedJoseph/ntfy-php-library/pull/81), [`95e7486`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/95e7486cb7b6806b0360fda9cae113a14b17b307)) 134 | 135 | ## [3.1.7](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v3.1.7) - 2022-06-22 136 | 137 | * Updated dependency `guzzlehttp/guzzle` from 7.4.4 to 7.4.5. ([#76](https://github.com/VerifiedJoseph/ntfy-php-library/pull/76), [`e01f701`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/e01f7013f507a72c34395c8b132e06d0b828b23d)) 138 | 139 | ## [3.1.6](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v3.1.6) - 2022-06-18 140 | 141 | * Updated supported `binwiederhier/ntfy` version from 1.25.2 to 1.26.0 ([#72](https://github.com/VerifiedJoseph/ntfy-php-library/pull/72), [`8f4fb87`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/8f4fb87ae16301256df6ad2c80ce95e286f69d14)) 142 | 143 | ## [3.1.5](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v3.1.5) - 2022-06-10 144 | 145 | * Updated dependency `guzzlehttp/guzzle` from 7.4.3 to 7.4.4. ([#69](https://github.com/VerifiedJoseph/ntfy-php-library/pull/69), [`703f6a3`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/703f6a3e760a2a3851891fdf31b01f522cb6c147)) 146 | 147 | ## [3.1.4](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v3.1.4) - 2022-06-04 148 | 149 | * Updated supported `binwiederhier/ntfy` version from 1.24.0 to 1.25.2 ([#66](https://github.com/VerifiedJoseph/ntfy-php-library/pull/66), [`c934621`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/c9346217f4a944a5309c9f287a986d0b71f1e88c)) 150 | 151 | ## [3.1.3](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v3.1.3) - 2022-05-29 152 | 153 | * Updated supported `binwiederhier/ntfy` version from 1.23.0 to 1.24.0 ([`3321712`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/3321712b57b919287bc20a9cb029ff8c0a572bde)) 154 | 155 | ## [3.1.2](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v3.1.2) - 2022-05-26 156 | 157 | * Updated dependency `guzzlehttp/guzzle` from 7.4.2 to 7.4.3. ([#62](https://github.com/VerifiedJoseph/ntfy-php-library/pull/62), [`6ba07b9`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/6ba07b94b43f4072b98e74fa22f85b0ab778676c)) 158 | 159 | ## [3.1.1](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v3.1.1) - 2022-05-21 160 | 161 | * Updated supported `binwiederhier/ntfy` version from 1.22.0 to 1.23.0 ([`33029cf`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/33029cff024d4ef5dd6d02a1b4a531f1ca811baa)) 162 | 163 | ## [3.1.0](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v3.1.0) - 2022-04-09 164 | 165 | * Added `name` parameter to `Message` class method `attachURL()`. ([`7b4f641`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/7b4f641f4b6850a137f367cff74793b1b234aad9)) 166 | * Updated `Message` class method `schedule()` to require delay parameter value be a string. ([`6e05139`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/6e05139dee90534c574ecd90ec879c5daeb3113c)) 167 | 168 | ## [3.0.0](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v3.0.0) - 2022-04-08 169 | 170 | * Reworked library to publish messages as JSON. ([#53](https://github.com/VerifiedJoseph/ntfy-php-library/pull/53). [`fcd7662`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/fcd76626135e1b3632a61c2e0cddbd6e69f9c0b4)) 171 | * Added support for action buttons. ([#54](https://github.com/VerifiedJoseph/ntfy-php-library/pull/54). [`00f9072`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/00f90720e94fcbe697e8ed28e89bf8e177ec6822)) 172 | * Updated supported `binwiederhier/ntfy` version from 1.18.0 to 1.22.0. 173 | * Updated dependency `guzzlehttp/guzzle` from 7.4.1 to 7.4.2 ([#38](https://github.com/VerifiedJoseph/ntfy-php-library/pull/38). [`8c7d2c6`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/8c7d2c6a2cc771f8b148472e08b830b38a8c4f3b)) 174 | 175 | ## [2.1.1](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v2.1.1) - 2022-03-17 176 | 177 | * Updated supported ntfy version from 1.14.0 to 1.18.0. ([`75e3354`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/75e33544e2ecea4fe45628d5b10db9c762eaf44d)) 178 | 179 | ## [2.1.0](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v2.1.0) - 2022-02-08 180 | 181 | * Updated supported binwiederhier/ntfy version from 1.13.0 to 1.14.0. 182 | * Added support for basic access authentication. ([#25](https://github.com/VerifiedJoseph/ntfy-php-library/pull/25), [`587fb60`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/587fb60bdfcb497ff50d3fcf1ce420701cea2ecd)) 183 | 184 | ## [2.0.0](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v2.0.0) - 2022-02-01 185 | 186 | Version 2 is **not** backwards compatible. See the updated [documentation](https://github.com/VerifiedJoseph/ntfy-php-library/tree/main/docs). 187 | 188 | * Major library rewrite. ([#20](https://github.com/VerifiedJoseph/ntfy-php-library/pull/20)) 189 | 190 | ## [1.2.0](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v1.1.0) - 2021-12-14 191 | 192 | * Added support for disabling message caching. ([`b5bfa94`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/b5bfa94578b6123e32fbdf214e3e4410d93645e6)) 193 | * Added support for delaying messages. ([`8974a7b`](https://github.com/VerifiedJoseph/ntfy-php-library/commit/8974a7b4764a8c85ba4609c2e92b8b69392d99c8)) 194 | 195 | ## [1.1.0](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v1.1.0) - 2021-12-09 196 | 197 | * Added message priority constants. ([#6](https://github.com/VerifiedJoseph/ntfy-php-library/pull/6)) 198 | 199 | ## [1.0.0](https://github.com/VerifiedJoseph/ntfy-php-library/releases/tag/v1.0.0) - 2021-12-06 200 | Initial release 201 | -------------------------------------------------------------------------------- /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": "290c999f9e8eb40731db76a6bd015bc0", 8 | "packages": [ 9 | { 10 | "name": "guzzlehttp/guzzle", 11 | "version": "7.10.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/guzzle/guzzle.git", 15 | "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", 20 | "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "ext-json": "*", 25 | "guzzlehttp/promises": "^2.3", 26 | "guzzlehttp/psr7": "^2.8", 27 | "php": "^7.2.5 || ^8.0", 28 | "psr/http-client": "^1.0", 29 | "symfony/deprecation-contracts": "^2.2 || ^3.0" 30 | }, 31 | "provide": { 32 | "psr/http-client-implementation": "1.0" 33 | }, 34 | "require-dev": { 35 | "bamarni/composer-bin-plugin": "^1.8.2", 36 | "ext-curl": "*", 37 | "guzzle/client-integration-tests": "3.0.2", 38 | "php-http/message-factory": "^1.1", 39 | "phpunit/phpunit": "^8.5.39 || ^9.6.20", 40 | "psr/log": "^1.1 || ^2.0 || ^3.0" 41 | }, 42 | "suggest": { 43 | "ext-curl": "Required for CURL handler support", 44 | "ext-intl": "Required for Internationalized Domain Name (IDN) support", 45 | "psr/log": "Required for using the Log middleware" 46 | }, 47 | "type": "library", 48 | "extra": { 49 | "bamarni-bin": { 50 | "bin-links": true, 51 | "forward-command": false 52 | } 53 | }, 54 | "autoload": { 55 | "files": [ 56 | "src/functions_include.php" 57 | ], 58 | "psr-4": { 59 | "GuzzleHttp\\": "src/" 60 | } 61 | }, 62 | "notification-url": "https://packagist.org/downloads/", 63 | "license": [ 64 | "MIT" 65 | ], 66 | "authors": [ 67 | { 68 | "name": "Graham Campbell", 69 | "email": "hello@gjcampbell.co.uk", 70 | "homepage": "https://github.com/GrahamCampbell" 71 | }, 72 | { 73 | "name": "Michael Dowling", 74 | "email": "mtdowling@gmail.com", 75 | "homepage": "https://github.com/mtdowling" 76 | }, 77 | { 78 | "name": "Jeremy Lindblom", 79 | "email": "jeremeamia@gmail.com", 80 | "homepage": "https://github.com/jeremeamia" 81 | }, 82 | { 83 | "name": "George Mponos", 84 | "email": "gmponos@gmail.com", 85 | "homepage": "https://github.com/gmponos" 86 | }, 87 | { 88 | "name": "Tobias Nyholm", 89 | "email": "tobias.nyholm@gmail.com", 90 | "homepage": "https://github.com/Nyholm" 91 | }, 92 | { 93 | "name": "Márk Sági-Kazár", 94 | "email": "mark.sagikazar@gmail.com", 95 | "homepage": "https://github.com/sagikazarmark" 96 | }, 97 | { 98 | "name": "Tobias Schultze", 99 | "email": "webmaster@tubo-world.de", 100 | "homepage": "https://github.com/Tobion" 101 | } 102 | ], 103 | "description": "Guzzle is a PHP HTTP client library", 104 | "keywords": [ 105 | "client", 106 | "curl", 107 | "framework", 108 | "http", 109 | "http client", 110 | "psr-18", 111 | "psr-7", 112 | "rest", 113 | "web service" 114 | ], 115 | "support": { 116 | "issues": "https://github.com/guzzle/guzzle/issues", 117 | "source": "https://github.com/guzzle/guzzle/tree/7.10.0" 118 | }, 119 | "funding": [ 120 | { 121 | "url": "https://github.com/GrahamCampbell", 122 | "type": "github" 123 | }, 124 | { 125 | "url": "https://github.com/Nyholm", 126 | "type": "github" 127 | }, 128 | { 129 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", 130 | "type": "tidelift" 131 | } 132 | ], 133 | "time": "2025-08-23T22:36:01+00:00" 134 | }, 135 | { 136 | "name": "guzzlehttp/promises", 137 | "version": "2.3.0", 138 | "source": { 139 | "type": "git", 140 | "url": "https://github.com/guzzle/promises.git", 141 | "reference": "481557b130ef3790cf82b713667b43030dc9c957" 142 | }, 143 | "dist": { 144 | "type": "zip", 145 | "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", 146 | "reference": "481557b130ef3790cf82b713667b43030dc9c957", 147 | "shasum": "" 148 | }, 149 | "require": { 150 | "php": "^7.2.5 || ^8.0" 151 | }, 152 | "require-dev": { 153 | "bamarni/composer-bin-plugin": "^1.8.2", 154 | "phpunit/phpunit": "^8.5.44 || ^9.6.25" 155 | }, 156 | "type": "library", 157 | "extra": { 158 | "bamarni-bin": { 159 | "bin-links": true, 160 | "forward-command": false 161 | } 162 | }, 163 | "autoload": { 164 | "psr-4": { 165 | "GuzzleHttp\\Promise\\": "src/" 166 | } 167 | }, 168 | "notification-url": "https://packagist.org/downloads/", 169 | "license": [ 170 | "MIT" 171 | ], 172 | "authors": [ 173 | { 174 | "name": "Graham Campbell", 175 | "email": "hello@gjcampbell.co.uk", 176 | "homepage": "https://github.com/GrahamCampbell" 177 | }, 178 | { 179 | "name": "Michael Dowling", 180 | "email": "mtdowling@gmail.com", 181 | "homepage": "https://github.com/mtdowling" 182 | }, 183 | { 184 | "name": "Tobias Nyholm", 185 | "email": "tobias.nyholm@gmail.com", 186 | "homepage": "https://github.com/Nyholm" 187 | }, 188 | { 189 | "name": "Tobias Schultze", 190 | "email": "webmaster@tubo-world.de", 191 | "homepage": "https://github.com/Tobion" 192 | } 193 | ], 194 | "description": "Guzzle promises library", 195 | "keywords": [ 196 | "promise" 197 | ], 198 | "support": { 199 | "issues": "https://github.com/guzzle/promises/issues", 200 | "source": "https://github.com/guzzle/promises/tree/2.3.0" 201 | }, 202 | "funding": [ 203 | { 204 | "url": "https://github.com/GrahamCampbell", 205 | "type": "github" 206 | }, 207 | { 208 | "url": "https://github.com/Nyholm", 209 | "type": "github" 210 | }, 211 | { 212 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", 213 | "type": "tidelift" 214 | } 215 | ], 216 | "time": "2025-08-22T14:34:08+00:00" 217 | }, 218 | { 219 | "name": "guzzlehttp/psr7", 220 | "version": "2.8.0", 221 | "source": { 222 | "type": "git", 223 | "url": "https://github.com/guzzle/psr7.git", 224 | "reference": "21dc724a0583619cd1652f673303492272778051" 225 | }, 226 | "dist": { 227 | "type": "zip", 228 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051", 229 | "reference": "21dc724a0583619cd1652f673303492272778051", 230 | "shasum": "" 231 | }, 232 | "require": { 233 | "php": "^7.2.5 || ^8.0", 234 | "psr/http-factory": "^1.0", 235 | "psr/http-message": "^1.1 || ^2.0", 236 | "ralouphie/getallheaders": "^3.0" 237 | }, 238 | "provide": { 239 | "psr/http-factory-implementation": "1.0", 240 | "psr/http-message-implementation": "1.0" 241 | }, 242 | "require-dev": { 243 | "bamarni/composer-bin-plugin": "^1.8.2", 244 | "http-interop/http-factory-tests": "0.9.0", 245 | "phpunit/phpunit": "^8.5.44 || ^9.6.25" 246 | }, 247 | "suggest": { 248 | "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" 249 | }, 250 | "type": "library", 251 | "extra": { 252 | "bamarni-bin": { 253 | "bin-links": true, 254 | "forward-command": false 255 | } 256 | }, 257 | "autoload": { 258 | "psr-4": { 259 | "GuzzleHttp\\Psr7\\": "src/" 260 | } 261 | }, 262 | "notification-url": "https://packagist.org/downloads/", 263 | "license": [ 264 | "MIT" 265 | ], 266 | "authors": [ 267 | { 268 | "name": "Graham Campbell", 269 | "email": "hello@gjcampbell.co.uk", 270 | "homepage": "https://github.com/GrahamCampbell" 271 | }, 272 | { 273 | "name": "Michael Dowling", 274 | "email": "mtdowling@gmail.com", 275 | "homepage": "https://github.com/mtdowling" 276 | }, 277 | { 278 | "name": "George Mponos", 279 | "email": "gmponos@gmail.com", 280 | "homepage": "https://github.com/gmponos" 281 | }, 282 | { 283 | "name": "Tobias Nyholm", 284 | "email": "tobias.nyholm@gmail.com", 285 | "homepage": "https://github.com/Nyholm" 286 | }, 287 | { 288 | "name": "Márk Sági-Kazár", 289 | "email": "mark.sagikazar@gmail.com", 290 | "homepage": "https://github.com/sagikazarmark" 291 | }, 292 | { 293 | "name": "Tobias Schultze", 294 | "email": "webmaster@tubo-world.de", 295 | "homepage": "https://github.com/Tobion" 296 | }, 297 | { 298 | "name": "Márk Sági-Kazár", 299 | "email": "mark.sagikazar@gmail.com", 300 | "homepage": "https://sagikazarmark.hu" 301 | } 302 | ], 303 | "description": "PSR-7 message implementation that also provides common utility methods", 304 | "keywords": [ 305 | "http", 306 | "message", 307 | "psr-7", 308 | "request", 309 | "response", 310 | "stream", 311 | "uri", 312 | "url" 313 | ], 314 | "support": { 315 | "issues": "https://github.com/guzzle/psr7/issues", 316 | "source": "https://github.com/guzzle/psr7/tree/2.8.0" 317 | }, 318 | "funding": [ 319 | { 320 | "url": "https://github.com/GrahamCampbell", 321 | "type": "github" 322 | }, 323 | { 324 | "url": "https://github.com/Nyholm", 325 | "type": "github" 326 | }, 327 | { 328 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", 329 | "type": "tidelift" 330 | } 331 | ], 332 | "time": "2025-08-23T21:21:41+00:00" 333 | }, 334 | { 335 | "name": "psr/http-client", 336 | "version": "1.0.3", 337 | "source": { 338 | "type": "git", 339 | "url": "https://github.com/php-fig/http-client.git", 340 | "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" 341 | }, 342 | "dist": { 343 | "type": "zip", 344 | "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", 345 | "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", 346 | "shasum": "" 347 | }, 348 | "require": { 349 | "php": "^7.0 || ^8.0", 350 | "psr/http-message": "^1.0 || ^2.0" 351 | }, 352 | "type": "library", 353 | "extra": { 354 | "branch-alias": { 355 | "dev-master": "1.0.x-dev" 356 | } 357 | }, 358 | "autoload": { 359 | "psr-4": { 360 | "Psr\\Http\\Client\\": "src/" 361 | } 362 | }, 363 | "notification-url": "https://packagist.org/downloads/", 364 | "license": [ 365 | "MIT" 366 | ], 367 | "authors": [ 368 | { 369 | "name": "PHP-FIG", 370 | "homepage": "https://www.php-fig.org/" 371 | } 372 | ], 373 | "description": "Common interface for HTTP clients", 374 | "homepage": "https://github.com/php-fig/http-client", 375 | "keywords": [ 376 | "http", 377 | "http-client", 378 | "psr", 379 | "psr-18" 380 | ], 381 | "support": { 382 | "source": "https://github.com/php-fig/http-client" 383 | }, 384 | "time": "2023-09-23T14:17:50+00:00" 385 | }, 386 | { 387 | "name": "psr/http-factory", 388 | "version": "1.1.0", 389 | "source": { 390 | "type": "git", 391 | "url": "https://github.com/php-fig/http-factory.git", 392 | "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" 393 | }, 394 | "dist": { 395 | "type": "zip", 396 | "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", 397 | "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", 398 | "shasum": "" 399 | }, 400 | "require": { 401 | "php": ">=7.1", 402 | "psr/http-message": "^1.0 || ^2.0" 403 | }, 404 | "type": "library", 405 | "extra": { 406 | "branch-alias": { 407 | "dev-master": "1.0.x-dev" 408 | } 409 | }, 410 | "autoload": { 411 | "psr-4": { 412 | "Psr\\Http\\Message\\": "src/" 413 | } 414 | }, 415 | "notification-url": "https://packagist.org/downloads/", 416 | "license": [ 417 | "MIT" 418 | ], 419 | "authors": [ 420 | { 421 | "name": "PHP-FIG", 422 | "homepage": "https://www.php-fig.org/" 423 | } 424 | ], 425 | "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", 426 | "keywords": [ 427 | "factory", 428 | "http", 429 | "message", 430 | "psr", 431 | "psr-17", 432 | "psr-7", 433 | "request", 434 | "response" 435 | ], 436 | "support": { 437 | "source": "https://github.com/php-fig/http-factory" 438 | }, 439 | "time": "2024-04-15T12:06:14+00:00" 440 | }, 441 | { 442 | "name": "psr/http-message", 443 | "version": "2.0", 444 | "source": { 445 | "type": "git", 446 | "url": "https://github.com/php-fig/http-message.git", 447 | "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" 448 | }, 449 | "dist": { 450 | "type": "zip", 451 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", 452 | "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", 453 | "shasum": "" 454 | }, 455 | "require": { 456 | "php": "^7.2 || ^8.0" 457 | }, 458 | "type": "library", 459 | "extra": { 460 | "branch-alias": { 461 | "dev-master": "2.0.x-dev" 462 | } 463 | }, 464 | "autoload": { 465 | "psr-4": { 466 | "Psr\\Http\\Message\\": "src/" 467 | } 468 | }, 469 | "notification-url": "https://packagist.org/downloads/", 470 | "license": [ 471 | "MIT" 472 | ], 473 | "authors": [ 474 | { 475 | "name": "PHP-FIG", 476 | "homepage": "https://www.php-fig.org/" 477 | } 478 | ], 479 | "description": "Common interface for HTTP messages", 480 | "homepage": "https://github.com/php-fig/http-message", 481 | "keywords": [ 482 | "http", 483 | "http-message", 484 | "psr", 485 | "psr-7", 486 | "request", 487 | "response" 488 | ], 489 | "support": { 490 | "source": "https://github.com/php-fig/http-message/tree/2.0" 491 | }, 492 | "time": "2023-04-04T09:54:51+00:00" 493 | }, 494 | { 495 | "name": "ralouphie/getallheaders", 496 | "version": "3.0.3", 497 | "source": { 498 | "type": "git", 499 | "url": "https://github.com/ralouphie/getallheaders.git", 500 | "reference": "120b605dfeb996808c31b6477290a714d356e822" 501 | }, 502 | "dist": { 503 | "type": "zip", 504 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", 505 | "reference": "120b605dfeb996808c31b6477290a714d356e822", 506 | "shasum": "" 507 | }, 508 | "require": { 509 | "php": ">=5.6" 510 | }, 511 | "require-dev": { 512 | "php-coveralls/php-coveralls": "^2.1", 513 | "phpunit/phpunit": "^5 || ^6.5" 514 | }, 515 | "type": "library", 516 | "autoload": { 517 | "files": [ 518 | "src/getallheaders.php" 519 | ] 520 | }, 521 | "notification-url": "https://packagist.org/downloads/", 522 | "license": [ 523 | "MIT" 524 | ], 525 | "authors": [ 526 | { 527 | "name": "Ralph Khattar", 528 | "email": "ralph.khattar@gmail.com" 529 | } 530 | ], 531 | "description": "A polyfill for getallheaders.", 532 | "support": { 533 | "issues": "https://github.com/ralouphie/getallheaders/issues", 534 | "source": "https://github.com/ralouphie/getallheaders/tree/develop" 535 | }, 536 | "time": "2019-03-08T08:55:37+00:00" 537 | }, 538 | { 539 | "name": "symfony/deprecation-contracts", 540 | "version": "v3.6.0", 541 | "source": { 542 | "type": "git", 543 | "url": "https://github.com/symfony/deprecation-contracts.git", 544 | "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" 545 | }, 546 | "dist": { 547 | "type": "zip", 548 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", 549 | "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", 550 | "shasum": "" 551 | }, 552 | "require": { 553 | "php": ">=8.1" 554 | }, 555 | "type": "library", 556 | "extra": { 557 | "thanks": { 558 | "url": "https://github.com/symfony/contracts", 559 | "name": "symfony/contracts" 560 | }, 561 | "branch-alias": { 562 | "dev-main": "3.6-dev" 563 | } 564 | }, 565 | "autoload": { 566 | "files": [ 567 | "function.php" 568 | ] 569 | }, 570 | "notification-url": "https://packagist.org/downloads/", 571 | "license": [ 572 | "MIT" 573 | ], 574 | "authors": [ 575 | { 576 | "name": "Nicolas Grekas", 577 | "email": "p@tchwork.com" 578 | }, 579 | { 580 | "name": "Symfony Community", 581 | "homepage": "https://symfony.com/contributors" 582 | } 583 | ], 584 | "description": "A generic function and convention to trigger deprecation notices", 585 | "homepage": "https://symfony.com", 586 | "support": { 587 | "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" 588 | }, 589 | "funding": [ 590 | { 591 | "url": "https://symfony.com/sponsor", 592 | "type": "custom" 593 | }, 594 | { 595 | "url": "https://github.com/fabpot", 596 | "type": "github" 597 | }, 598 | { 599 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 600 | "type": "tidelift" 601 | } 602 | ], 603 | "time": "2024-09-25T14:21:43+00:00" 604 | } 605 | ], 606 | "packages-dev": [ 607 | { 608 | "name": "myclabs/deep-copy", 609 | "version": "1.13.4", 610 | "source": { 611 | "type": "git", 612 | "url": "https://github.com/myclabs/DeepCopy.git", 613 | "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" 614 | }, 615 | "dist": { 616 | "type": "zip", 617 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", 618 | "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", 619 | "shasum": "" 620 | }, 621 | "require": { 622 | "php": "^7.1 || ^8.0" 623 | }, 624 | "conflict": { 625 | "doctrine/collections": "<1.6.8", 626 | "doctrine/common": "<2.13.3 || >=3 <3.2.2" 627 | }, 628 | "require-dev": { 629 | "doctrine/collections": "^1.6.8", 630 | "doctrine/common": "^2.13.3 || ^3.2.2", 631 | "phpspec/prophecy": "^1.10", 632 | "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" 633 | }, 634 | "type": "library", 635 | "autoload": { 636 | "files": [ 637 | "src/DeepCopy/deep_copy.php" 638 | ], 639 | "psr-4": { 640 | "DeepCopy\\": "src/DeepCopy/" 641 | } 642 | }, 643 | "notification-url": "https://packagist.org/downloads/", 644 | "license": [ 645 | "MIT" 646 | ], 647 | "description": "Create deep copies (clones) of your objects", 648 | "keywords": [ 649 | "clone", 650 | "copy", 651 | "duplicate", 652 | "object", 653 | "object graph" 654 | ], 655 | "support": { 656 | "issues": "https://github.com/myclabs/DeepCopy/issues", 657 | "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" 658 | }, 659 | "funding": [ 660 | { 661 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", 662 | "type": "tidelift" 663 | } 664 | ], 665 | "time": "2025-08-01T08:46:24+00:00" 666 | }, 667 | { 668 | "name": "nikic/php-parser", 669 | "version": "v5.6.2", 670 | "source": { 671 | "type": "git", 672 | "url": "https://github.com/nikic/PHP-Parser.git", 673 | "reference": "3a454ca033b9e06b63282ce19562e892747449bb" 674 | }, 675 | "dist": { 676 | "type": "zip", 677 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3a454ca033b9e06b63282ce19562e892747449bb", 678 | "reference": "3a454ca033b9e06b63282ce19562e892747449bb", 679 | "shasum": "" 680 | }, 681 | "require": { 682 | "ext-ctype": "*", 683 | "ext-json": "*", 684 | "ext-tokenizer": "*", 685 | "php": ">=7.4" 686 | }, 687 | "require-dev": { 688 | "ircmaxell/php-yacc": "^0.0.7", 689 | "phpunit/phpunit": "^9.0" 690 | }, 691 | "bin": [ 692 | "bin/php-parse" 693 | ], 694 | "type": "library", 695 | "extra": { 696 | "branch-alias": { 697 | "dev-master": "5.x-dev" 698 | } 699 | }, 700 | "autoload": { 701 | "psr-4": { 702 | "PhpParser\\": "lib/PhpParser" 703 | } 704 | }, 705 | "notification-url": "https://packagist.org/downloads/", 706 | "license": [ 707 | "BSD-3-Clause" 708 | ], 709 | "authors": [ 710 | { 711 | "name": "Nikita Popov" 712 | } 713 | ], 714 | "description": "A PHP parser written in PHP", 715 | "keywords": [ 716 | "parser", 717 | "php" 718 | ], 719 | "support": { 720 | "issues": "https://github.com/nikic/PHP-Parser/issues", 721 | "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.2" 722 | }, 723 | "time": "2025-10-21T19:32:17+00:00" 724 | }, 725 | { 726 | "name": "phar-io/manifest", 727 | "version": "2.0.4", 728 | "source": { 729 | "type": "git", 730 | "url": "https://github.com/phar-io/manifest.git", 731 | "reference": "54750ef60c58e43759730615a392c31c80e23176" 732 | }, 733 | "dist": { 734 | "type": "zip", 735 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", 736 | "reference": "54750ef60c58e43759730615a392c31c80e23176", 737 | "shasum": "" 738 | }, 739 | "require": { 740 | "ext-dom": "*", 741 | "ext-libxml": "*", 742 | "ext-phar": "*", 743 | "ext-xmlwriter": "*", 744 | "phar-io/version": "^3.0.1", 745 | "php": "^7.2 || ^8.0" 746 | }, 747 | "type": "library", 748 | "extra": { 749 | "branch-alias": { 750 | "dev-master": "2.0.x-dev" 751 | } 752 | }, 753 | "autoload": { 754 | "classmap": [ 755 | "src/" 756 | ] 757 | }, 758 | "notification-url": "https://packagist.org/downloads/", 759 | "license": [ 760 | "BSD-3-Clause" 761 | ], 762 | "authors": [ 763 | { 764 | "name": "Arne Blankerts", 765 | "email": "arne@blankerts.de", 766 | "role": "Developer" 767 | }, 768 | { 769 | "name": "Sebastian Heuer", 770 | "email": "sebastian@phpeople.de", 771 | "role": "Developer" 772 | }, 773 | { 774 | "name": "Sebastian Bergmann", 775 | "email": "sebastian@phpunit.de", 776 | "role": "Developer" 777 | } 778 | ], 779 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 780 | "support": { 781 | "issues": "https://github.com/phar-io/manifest/issues", 782 | "source": "https://github.com/phar-io/manifest/tree/2.0.4" 783 | }, 784 | "funding": [ 785 | { 786 | "url": "https://github.com/theseer", 787 | "type": "github" 788 | } 789 | ], 790 | "time": "2024-03-03T12:33:53+00:00" 791 | }, 792 | { 793 | "name": "phar-io/version", 794 | "version": "3.2.1", 795 | "source": { 796 | "type": "git", 797 | "url": "https://github.com/phar-io/version.git", 798 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" 799 | }, 800 | "dist": { 801 | "type": "zip", 802 | "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 803 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 804 | "shasum": "" 805 | }, 806 | "require": { 807 | "php": "^7.2 || ^8.0" 808 | }, 809 | "type": "library", 810 | "autoload": { 811 | "classmap": [ 812 | "src/" 813 | ] 814 | }, 815 | "notification-url": "https://packagist.org/downloads/", 816 | "license": [ 817 | "BSD-3-Clause" 818 | ], 819 | "authors": [ 820 | { 821 | "name": "Arne Blankerts", 822 | "email": "arne@blankerts.de", 823 | "role": "Developer" 824 | }, 825 | { 826 | "name": "Sebastian Heuer", 827 | "email": "sebastian@phpeople.de", 828 | "role": "Developer" 829 | }, 830 | { 831 | "name": "Sebastian Bergmann", 832 | "email": "sebastian@phpunit.de", 833 | "role": "Developer" 834 | } 835 | ], 836 | "description": "Library for handling version information and constraints", 837 | "support": { 838 | "issues": "https://github.com/phar-io/version/issues", 839 | "source": "https://github.com/phar-io/version/tree/3.2.1" 840 | }, 841 | "time": "2022-02-21T01:04:05+00:00" 842 | }, 843 | { 844 | "name": "phpstan/phpstan", 845 | "version": "2.1.32", 846 | "dist": { 847 | "type": "zip", 848 | "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e126cad1e30a99b137b8ed75a85a676450ebb227", 849 | "reference": "e126cad1e30a99b137b8ed75a85a676450ebb227", 850 | "shasum": "" 851 | }, 852 | "require": { 853 | "php": "^7.4|^8.0" 854 | }, 855 | "conflict": { 856 | "phpstan/phpstan-shim": "*" 857 | }, 858 | "bin": [ 859 | "phpstan", 860 | "phpstan.phar" 861 | ], 862 | "type": "library", 863 | "autoload": { 864 | "files": [ 865 | "bootstrap.php" 866 | ] 867 | }, 868 | "notification-url": "https://packagist.org/downloads/", 869 | "license": [ 870 | "MIT" 871 | ], 872 | "description": "PHPStan - PHP Static Analysis Tool", 873 | "keywords": [ 874 | "dev", 875 | "static analysis" 876 | ], 877 | "support": { 878 | "docs": "https://phpstan.org/user-guide/getting-started", 879 | "forum": "https://github.com/phpstan/phpstan/discussions", 880 | "issues": "https://github.com/phpstan/phpstan/issues", 881 | "security": "https://github.com/phpstan/phpstan/security/policy", 882 | "source": "https://github.com/phpstan/phpstan-src" 883 | }, 884 | "funding": [ 885 | { 886 | "url": "https://github.com/ondrejmirtes", 887 | "type": "github" 888 | }, 889 | { 890 | "url": "https://github.com/phpstan", 891 | "type": "github" 892 | } 893 | ], 894 | "time": "2025-11-11T15:18:17+00:00" 895 | }, 896 | { 897 | "name": "phpstan/phpstan-deprecation-rules", 898 | "version": "2.0.3", 899 | "source": { 900 | "type": "git", 901 | "url": "https://github.com/phpstan/phpstan-deprecation-rules.git", 902 | "reference": "468e02c9176891cc901143da118f09dc9505fc2f" 903 | }, 904 | "dist": { 905 | "type": "zip", 906 | "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/468e02c9176891cc901143da118f09dc9505fc2f", 907 | "reference": "468e02c9176891cc901143da118f09dc9505fc2f", 908 | "shasum": "" 909 | }, 910 | "require": { 911 | "php": "^7.4 || ^8.0", 912 | "phpstan/phpstan": "^2.1.15" 913 | }, 914 | "require-dev": { 915 | "php-parallel-lint/php-parallel-lint": "^1.2", 916 | "phpstan/phpstan-phpunit": "^2.0", 917 | "phpunit/phpunit": "^9.6" 918 | }, 919 | "type": "phpstan-extension", 920 | "extra": { 921 | "phpstan": { 922 | "includes": [ 923 | "rules.neon" 924 | ] 925 | } 926 | }, 927 | "autoload": { 928 | "psr-4": { 929 | "PHPStan\\": "src/" 930 | } 931 | }, 932 | "notification-url": "https://packagist.org/downloads/", 933 | "license": [ 934 | "MIT" 935 | ], 936 | "description": "PHPStan rules for detecting usage of deprecated classes, methods, properties, constants and traits.", 937 | "support": { 938 | "issues": "https://github.com/phpstan/phpstan-deprecation-rules/issues", 939 | "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/2.0.3" 940 | }, 941 | "time": "2025-05-14T10:56:57+00:00" 942 | }, 943 | { 944 | "name": "phpstan/phpstan-phpunit", 945 | "version": "2.0.8", 946 | "source": { 947 | "type": "git", 948 | "url": "https://github.com/phpstan/phpstan-phpunit.git", 949 | "reference": "2fe9fbeceaf76dd1ebaa7bbbb25e2fb5e59db2fe" 950 | }, 951 | "dist": { 952 | "type": "zip", 953 | "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/2fe9fbeceaf76dd1ebaa7bbbb25e2fb5e59db2fe", 954 | "reference": "2fe9fbeceaf76dd1ebaa7bbbb25e2fb5e59db2fe", 955 | "shasum": "" 956 | }, 957 | "require": { 958 | "php": "^7.4 || ^8.0", 959 | "phpstan/phpstan": "^2.1.32" 960 | }, 961 | "conflict": { 962 | "phpunit/phpunit": "<7.0" 963 | }, 964 | "require-dev": { 965 | "nikic/php-parser": "^5", 966 | "php-parallel-lint/php-parallel-lint": "^1.2", 967 | "phpstan/phpstan-deprecation-rules": "^2.0", 968 | "phpstan/phpstan-strict-rules": "^2.0", 969 | "phpunit/phpunit": "^9.6" 970 | }, 971 | "type": "phpstan-extension", 972 | "extra": { 973 | "phpstan": { 974 | "includes": [ 975 | "extension.neon", 976 | "rules.neon" 977 | ] 978 | } 979 | }, 980 | "autoload": { 981 | "psr-4": { 982 | "PHPStan\\": "src/" 983 | } 984 | }, 985 | "notification-url": "https://packagist.org/downloads/", 986 | "license": [ 987 | "MIT" 988 | ], 989 | "description": "PHPUnit extensions and rules for PHPStan", 990 | "support": { 991 | "issues": "https://github.com/phpstan/phpstan-phpunit/issues", 992 | "source": "https://github.com/phpstan/phpstan-phpunit/tree/2.0.8" 993 | }, 994 | "time": "2025-11-11T07:55:22+00:00" 995 | }, 996 | { 997 | "name": "phpunit/php-code-coverage", 998 | "version": "11.0.11", 999 | "source": { 1000 | "type": "git", 1001 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 1002 | "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4" 1003 | }, 1004 | "dist": { 1005 | "type": "zip", 1006 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4", 1007 | "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4", 1008 | "shasum": "" 1009 | }, 1010 | "require": { 1011 | "ext-dom": "*", 1012 | "ext-libxml": "*", 1013 | "ext-xmlwriter": "*", 1014 | "nikic/php-parser": "^5.4.0", 1015 | "php": ">=8.2", 1016 | "phpunit/php-file-iterator": "^5.1.0", 1017 | "phpunit/php-text-template": "^4.0.1", 1018 | "sebastian/code-unit-reverse-lookup": "^4.0.1", 1019 | "sebastian/complexity": "^4.0.1", 1020 | "sebastian/environment": "^7.2.0", 1021 | "sebastian/lines-of-code": "^3.0.1", 1022 | "sebastian/version": "^5.0.2", 1023 | "theseer/tokenizer": "^1.2.3" 1024 | }, 1025 | "require-dev": { 1026 | "phpunit/phpunit": "^11.5.2" 1027 | }, 1028 | "suggest": { 1029 | "ext-pcov": "PHP extension that provides line coverage", 1030 | "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" 1031 | }, 1032 | "type": "library", 1033 | "extra": { 1034 | "branch-alias": { 1035 | "dev-main": "11.0.x-dev" 1036 | } 1037 | }, 1038 | "autoload": { 1039 | "classmap": [ 1040 | "src/" 1041 | ] 1042 | }, 1043 | "notification-url": "https://packagist.org/downloads/", 1044 | "license": [ 1045 | "BSD-3-Clause" 1046 | ], 1047 | "authors": [ 1048 | { 1049 | "name": "Sebastian Bergmann", 1050 | "email": "sebastian@phpunit.de", 1051 | "role": "lead" 1052 | } 1053 | ], 1054 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 1055 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 1056 | "keywords": [ 1057 | "coverage", 1058 | "testing", 1059 | "xunit" 1060 | ], 1061 | "support": { 1062 | "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", 1063 | "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", 1064 | "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.11" 1065 | }, 1066 | "funding": [ 1067 | { 1068 | "url": "https://github.com/sebastianbergmann", 1069 | "type": "github" 1070 | }, 1071 | { 1072 | "url": "https://liberapay.com/sebastianbergmann", 1073 | "type": "liberapay" 1074 | }, 1075 | { 1076 | "url": "https://thanks.dev/u/gh/sebastianbergmann", 1077 | "type": "thanks_dev" 1078 | }, 1079 | { 1080 | "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", 1081 | "type": "tidelift" 1082 | } 1083 | ], 1084 | "time": "2025-08-27T14:37:49+00:00" 1085 | }, 1086 | { 1087 | "name": "phpunit/php-file-iterator", 1088 | "version": "5.1.0", 1089 | "source": { 1090 | "type": "git", 1091 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 1092 | "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6" 1093 | }, 1094 | "dist": { 1095 | "type": "zip", 1096 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/118cfaaa8bc5aef3287bf315b6060b1174754af6", 1097 | "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6", 1098 | "shasum": "" 1099 | }, 1100 | "require": { 1101 | "php": ">=8.2" 1102 | }, 1103 | "require-dev": { 1104 | "phpunit/phpunit": "^11.0" 1105 | }, 1106 | "type": "library", 1107 | "extra": { 1108 | "branch-alias": { 1109 | "dev-main": "5.0-dev" 1110 | } 1111 | }, 1112 | "autoload": { 1113 | "classmap": [ 1114 | "src/" 1115 | ] 1116 | }, 1117 | "notification-url": "https://packagist.org/downloads/", 1118 | "license": [ 1119 | "BSD-3-Clause" 1120 | ], 1121 | "authors": [ 1122 | { 1123 | "name": "Sebastian Bergmann", 1124 | "email": "sebastian@phpunit.de", 1125 | "role": "lead" 1126 | } 1127 | ], 1128 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 1129 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 1130 | "keywords": [ 1131 | "filesystem", 1132 | "iterator" 1133 | ], 1134 | "support": { 1135 | "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", 1136 | "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", 1137 | "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.0" 1138 | }, 1139 | "funding": [ 1140 | { 1141 | "url": "https://github.com/sebastianbergmann", 1142 | "type": "github" 1143 | } 1144 | ], 1145 | "time": "2024-08-27T05:02:59+00:00" 1146 | }, 1147 | { 1148 | "name": "phpunit/php-invoker", 1149 | "version": "5.0.1", 1150 | "source": { 1151 | "type": "git", 1152 | "url": "https://github.com/sebastianbergmann/php-invoker.git", 1153 | "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" 1154 | }, 1155 | "dist": { 1156 | "type": "zip", 1157 | "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", 1158 | "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", 1159 | "shasum": "" 1160 | }, 1161 | "require": { 1162 | "php": ">=8.2" 1163 | }, 1164 | "require-dev": { 1165 | "ext-pcntl": "*", 1166 | "phpunit/phpunit": "^11.0" 1167 | }, 1168 | "suggest": { 1169 | "ext-pcntl": "*" 1170 | }, 1171 | "type": "library", 1172 | "extra": { 1173 | "branch-alias": { 1174 | "dev-main": "5.0-dev" 1175 | } 1176 | }, 1177 | "autoload": { 1178 | "classmap": [ 1179 | "src/" 1180 | ] 1181 | }, 1182 | "notification-url": "https://packagist.org/downloads/", 1183 | "license": [ 1184 | "BSD-3-Clause" 1185 | ], 1186 | "authors": [ 1187 | { 1188 | "name": "Sebastian Bergmann", 1189 | "email": "sebastian@phpunit.de", 1190 | "role": "lead" 1191 | } 1192 | ], 1193 | "description": "Invoke callables with a timeout", 1194 | "homepage": "https://github.com/sebastianbergmann/php-invoker/", 1195 | "keywords": [ 1196 | "process" 1197 | ], 1198 | "support": { 1199 | "issues": "https://github.com/sebastianbergmann/php-invoker/issues", 1200 | "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", 1201 | "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1" 1202 | }, 1203 | "funding": [ 1204 | { 1205 | "url": "https://github.com/sebastianbergmann", 1206 | "type": "github" 1207 | } 1208 | ], 1209 | "time": "2024-07-03T05:07:44+00:00" 1210 | }, 1211 | { 1212 | "name": "phpunit/php-text-template", 1213 | "version": "4.0.1", 1214 | "source": { 1215 | "type": "git", 1216 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 1217 | "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" 1218 | }, 1219 | "dist": { 1220 | "type": "zip", 1221 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", 1222 | "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", 1223 | "shasum": "" 1224 | }, 1225 | "require": { 1226 | "php": ">=8.2" 1227 | }, 1228 | "require-dev": { 1229 | "phpunit/phpunit": "^11.0" 1230 | }, 1231 | "type": "library", 1232 | "extra": { 1233 | "branch-alias": { 1234 | "dev-main": "4.0-dev" 1235 | } 1236 | }, 1237 | "autoload": { 1238 | "classmap": [ 1239 | "src/" 1240 | ] 1241 | }, 1242 | "notification-url": "https://packagist.org/downloads/", 1243 | "license": [ 1244 | "BSD-3-Clause" 1245 | ], 1246 | "authors": [ 1247 | { 1248 | "name": "Sebastian Bergmann", 1249 | "email": "sebastian@phpunit.de", 1250 | "role": "lead" 1251 | } 1252 | ], 1253 | "description": "Simple template engine.", 1254 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 1255 | "keywords": [ 1256 | "template" 1257 | ], 1258 | "support": { 1259 | "issues": "https://github.com/sebastianbergmann/php-text-template/issues", 1260 | "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", 1261 | "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1" 1262 | }, 1263 | "funding": [ 1264 | { 1265 | "url": "https://github.com/sebastianbergmann", 1266 | "type": "github" 1267 | } 1268 | ], 1269 | "time": "2024-07-03T05:08:43+00:00" 1270 | }, 1271 | { 1272 | "name": "phpunit/php-timer", 1273 | "version": "7.0.1", 1274 | "source": { 1275 | "type": "git", 1276 | "url": "https://github.com/sebastianbergmann/php-timer.git", 1277 | "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" 1278 | }, 1279 | "dist": { 1280 | "type": "zip", 1281 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", 1282 | "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", 1283 | "shasum": "" 1284 | }, 1285 | "require": { 1286 | "php": ">=8.2" 1287 | }, 1288 | "require-dev": { 1289 | "phpunit/phpunit": "^11.0" 1290 | }, 1291 | "type": "library", 1292 | "extra": { 1293 | "branch-alias": { 1294 | "dev-main": "7.0-dev" 1295 | } 1296 | }, 1297 | "autoload": { 1298 | "classmap": [ 1299 | "src/" 1300 | ] 1301 | }, 1302 | "notification-url": "https://packagist.org/downloads/", 1303 | "license": [ 1304 | "BSD-3-Clause" 1305 | ], 1306 | "authors": [ 1307 | { 1308 | "name": "Sebastian Bergmann", 1309 | "email": "sebastian@phpunit.de", 1310 | "role": "lead" 1311 | } 1312 | ], 1313 | "description": "Utility class for timing", 1314 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 1315 | "keywords": [ 1316 | "timer" 1317 | ], 1318 | "support": { 1319 | "issues": "https://github.com/sebastianbergmann/php-timer/issues", 1320 | "security": "https://github.com/sebastianbergmann/php-timer/security/policy", 1321 | "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1" 1322 | }, 1323 | "funding": [ 1324 | { 1325 | "url": "https://github.com/sebastianbergmann", 1326 | "type": "github" 1327 | } 1328 | ], 1329 | "time": "2024-07-03T05:09:35+00:00" 1330 | }, 1331 | { 1332 | "name": "phpunit/phpunit", 1333 | "version": "11.5.44", 1334 | "source": { 1335 | "type": "git", 1336 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1337 | "reference": "c346885c95423eda3f65d85a194aaa24873cda82" 1338 | }, 1339 | "dist": { 1340 | "type": "zip", 1341 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c346885c95423eda3f65d85a194aaa24873cda82", 1342 | "reference": "c346885c95423eda3f65d85a194aaa24873cda82", 1343 | "shasum": "" 1344 | }, 1345 | "require": { 1346 | "ext-dom": "*", 1347 | "ext-json": "*", 1348 | "ext-libxml": "*", 1349 | "ext-mbstring": "*", 1350 | "ext-xml": "*", 1351 | "ext-xmlwriter": "*", 1352 | "myclabs/deep-copy": "^1.13.4", 1353 | "phar-io/manifest": "^2.0.4", 1354 | "phar-io/version": "^3.2.1", 1355 | "php": ">=8.2", 1356 | "phpunit/php-code-coverage": "^11.0.11", 1357 | "phpunit/php-file-iterator": "^5.1.0", 1358 | "phpunit/php-invoker": "^5.0.1", 1359 | "phpunit/php-text-template": "^4.0.1", 1360 | "phpunit/php-timer": "^7.0.1", 1361 | "sebastian/cli-parser": "^3.0.2", 1362 | "sebastian/code-unit": "^3.0.3", 1363 | "sebastian/comparator": "^6.3.2", 1364 | "sebastian/diff": "^6.0.2", 1365 | "sebastian/environment": "^7.2.1", 1366 | "sebastian/exporter": "^6.3.2", 1367 | "sebastian/global-state": "^7.0.2", 1368 | "sebastian/object-enumerator": "^6.0.1", 1369 | "sebastian/type": "^5.1.3", 1370 | "sebastian/version": "^5.0.2", 1371 | "staabm/side-effects-detector": "^1.0.5" 1372 | }, 1373 | "suggest": { 1374 | "ext-soap": "To be able to generate mocks based on WSDL files" 1375 | }, 1376 | "bin": [ 1377 | "phpunit" 1378 | ], 1379 | "type": "library", 1380 | "extra": { 1381 | "branch-alias": { 1382 | "dev-main": "11.5-dev" 1383 | } 1384 | }, 1385 | "autoload": { 1386 | "files": [ 1387 | "src/Framework/Assert/Functions.php" 1388 | ], 1389 | "classmap": [ 1390 | "src/" 1391 | ] 1392 | }, 1393 | "notification-url": "https://packagist.org/downloads/", 1394 | "license": [ 1395 | "BSD-3-Clause" 1396 | ], 1397 | "authors": [ 1398 | { 1399 | "name": "Sebastian Bergmann", 1400 | "email": "sebastian@phpunit.de", 1401 | "role": "lead" 1402 | } 1403 | ], 1404 | "description": "The PHP Unit Testing framework.", 1405 | "homepage": "https://phpunit.de/", 1406 | "keywords": [ 1407 | "phpunit", 1408 | "testing", 1409 | "xunit" 1410 | ], 1411 | "support": { 1412 | "issues": "https://github.com/sebastianbergmann/phpunit/issues", 1413 | "security": "https://github.com/sebastianbergmann/phpunit/security/policy", 1414 | "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.44" 1415 | }, 1416 | "funding": [ 1417 | { 1418 | "url": "https://phpunit.de/sponsors.html", 1419 | "type": "custom" 1420 | }, 1421 | { 1422 | "url": "https://github.com/sebastianbergmann", 1423 | "type": "github" 1424 | }, 1425 | { 1426 | "url": "https://liberapay.com/sebastianbergmann", 1427 | "type": "liberapay" 1428 | }, 1429 | { 1430 | "url": "https://thanks.dev/u/gh/sebastianbergmann", 1431 | "type": "thanks_dev" 1432 | }, 1433 | { 1434 | "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", 1435 | "type": "tidelift" 1436 | } 1437 | ], 1438 | "time": "2025-11-13T07:17:35+00:00" 1439 | }, 1440 | { 1441 | "name": "sebastian/cli-parser", 1442 | "version": "3.0.2", 1443 | "source": { 1444 | "type": "git", 1445 | "url": "https://github.com/sebastianbergmann/cli-parser.git", 1446 | "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" 1447 | }, 1448 | "dist": { 1449 | "type": "zip", 1450 | "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", 1451 | "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", 1452 | "shasum": "" 1453 | }, 1454 | "require": { 1455 | "php": ">=8.2" 1456 | }, 1457 | "require-dev": { 1458 | "phpunit/phpunit": "^11.0" 1459 | }, 1460 | "type": "library", 1461 | "extra": { 1462 | "branch-alias": { 1463 | "dev-main": "3.0-dev" 1464 | } 1465 | }, 1466 | "autoload": { 1467 | "classmap": [ 1468 | "src/" 1469 | ] 1470 | }, 1471 | "notification-url": "https://packagist.org/downloads/", 1472 | "license": [ 1473 | "BSD-3-Clause" 1474 | ], 1475 | "authors": [ 1476 | { 1477 | "name": "Sebastian Bergmann", 1478 | "email": "sebastian@phpunit.de", 1479 | "role": "lead" 1480 | } 1481 | ], 1482 | "description": "Library for parsing CLI options", 1483 | "homepage": "https://github.com/sebastianbergmann/cli-parser", 1484 | "support": { 1485 | "issues": "https://github.com/sebastianbergmann/cli-parser/issues", 1486 | "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", 1487 | "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2" 1488 | }, 1489 | "funding": [ 1490 | { 1491 | "url": "https://github.com/sebastianbergmann", 1492 | "type": "github" 1493 | } 1494 | ], 1495 | "time": "2024-07-03T04:41:36+00:00" 1496 | }, 1497 | { 1498 | "name": "sebastian/code-unit", 1499 | "version": "3.0.3", 1500 | "source": { 1501 | "type": "git", 1502 | "url": "https://github.com/sebastianbergmann/code-unit.git", 1503 | "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64" 1504 | }, 1505 | "dist": { 1506 | "type": "zip", 1507 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64", 1508 | "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64", 1509 | "shasum": "" 1510 | }, 1511 | "require": { 1512 | "php": ">=8.2" 1513 | }, 1514 | "require-dev": { 1515 | "phpunit/phpunit": "^11.5" 1516 | }, 1517 | "type": "library", 1518 | "extra": { 1519 | "branch-alias": { 1520 | "dev-main": "3.0-dev" 1521 | } 1522 | }, 1523 | "autoload": { 1524 | "classmap": [ 1525 | "src/" 1526 | ] 1527 | }, 1528 | "notification-url": "https://packagist.org/downloads/", 1529 | "license": [ 1530 | "BSD-3-Clause" 1531 | ], 1532 | "authors": [ 1533 | { 1534 | "name": "Sebastian Bergmann", 1535 | "email": "sebastian@phpunit.de", 1536 | "role": "lead" 1537 | } 1538 | ], 1539 | "description": "Collection of value objects that represent the PHP code units", 1540 | "homepage": "https://github.com/sebastianbergmann/code-unit", 1541 | "support": { 1542 | "issues": "https://github.com/sebastianbergmann/code-unit/issues", 1543 | "security": "https://github.com/sebastianbergmann/code-unit/security/policy", 1544 | "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3" 1545 | }, 1546 | "funding": [ 1547 | { 1548 | "url": "https://github.com/sebastianbergmann", 1549 | "type": "github" 1550 | } 1551 | ], 1552 | "time": "2025-03-19T07:56:08+00:00" 1553 | }, 1554 | { 1555 | "name": "sebastian/code-unit-reverse-lookup", 1556 | "version": "4.0.1", 1557 | "source": { 1558 | "type": "git", 1559 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1560 | "reference": "183a9b2632194febd219bb9246eee421dad8d45e" 1561 | }, 1562 | "dist": { 1563 | "type": "zip", 1564 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", 1565 | "reference": "183a9b2632194febd219bb9246eee421dad8d45e", 1566 | "shasum": "" 1567 | }, 1568 | "require": { 1569 | "php": ">=8.2" 1570 | }, 1571 | "require-dev": { 1572 | "phpunit/phpunit": "^11.0" 1573 | }, 1574 | "type": "library", 1575 | "extra": { 1576 | "branch-alias": { 1577 | "dev-main": "4.0-dev" 1578 | } 1579 | }, 1580 | "autoload": { 1581 | "classmap": [ 1582 | "src/" 1583 | ] 1584 | }, 1585 | "notification-url": "https://packagist.org/downloads/", 1586 | "license": [ 1587 | "BSD-3-Clause" 1588 | ], 1589 | "authors": [ 1590 | { 1591 | "name": "Sebastian Bergmann", 1592 | "email": "sebastian@phpunit.de" 1593 | } 1594 | ], 1595 | "description": "Looks up which function or method a line of code belongs to", 1596 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1597 | "support": { 1598 | "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", 1599 | "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", 1600 | "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" 1601 | }, 1602 | "funding": [ 1603 | { 1604 | "url": "https://github.com/sebastianbergmann", 1605 | "type": "github" 1606 | } 1607 | ], 1608 | "time": "2024-07-03T04:45:54+00:00" 1609 | }, 1610 | { 1611 | "name": "sebastian/comparator", 1612 | "version": "6.3.2", 1613 | "source": { 1614 | "type": "git", 1615 | "url": "https://github.com/sebastianbergmann/comparator.git", 1616 | "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8" 1617 | }, 1618 | "dist": { 1619 | "type": "zip", 1620 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85c77556683e6eee4323e4c5468641ca0237e2e8", 1621 | "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8", 1622 | "shasum": "" 1623 | }, 1624 | "require": { 1625 | "ext-dom": "*", 1626 | "ext-mbstring": "*", 1627 | "php": ">=8.2", 1628 | "sebastian/diff": "^6.0", 1629 | "sebastian/exporter": "^6.0" 1630 | }, 1631 | "require-dev": { 1632 | "phpunit/phpunit": "^11.4" 1633 | }, 1634 | "suggest": { 1635 | "ext-bcmath": "For comparing BcMath\\Number objects" 1636 | }, 1637 | "type": "library", 1638 | "extra": { 1639 | "branch-alias": { 1640 | "dev-main": "6.3-dev" 1641 | } 1642 | }, 1643 | "autoload": { 1644 | "classmap": [ 1645 | "src/" 1646 | ] 1647 | }, 1648 | "notification-url": "https://packagist.org/downloads/", 1649 | "license": [ 1650 | "BSD-3-Clause" 1651 | ], 1652 | "authors": [ 1653 | { 1654 | "name": "Sebastian Bergmann", 1655 | "email": "sebastian@phpunit.de" 1656 | }, 1657 | { 1658 | "name": "Jeff Welch", 1659 | "email": "whatthejeff@gmail.com" 1660 | }, 1661 | { 1662 | "name": "Volker Dusch", 1663 | "email": "github@wallbash.com" 1664 | }, 1665 | { 1666 | "name": "Bernhard Schussek", 1667 | "email": "bschussek@2bepublished.at" 1668 | } 1669 | ], 1670 | "description": "Provides the functionality to compare PHP values for equality", 1671 | "homepage": "https://github.com/sebastianbergmann/comparator", 1672 | "keywords": [ 1673 | "comparator", 1674 | "compare", 1675 | "equality" 1676 | ], 1677 | "support": { 1678 | "issues": "https://github.com/sebastianbergmann/comparator/issues", 1679 | "security": "https://github.com/sebastianbergmann/comparator/security/policy", 1680 | "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.2" 1681 | }, 1682 | "funding": [ 1683 | { 1684 | "url": "https://github.com/sebastianbergmann", 1685 | "type": "github" 1686 | }, 1687 | { 1688 | "url": "https://liberapay.com/sebastianbergmann", 1689 | "type": "liberapay" 1690 | }, 1691 | { 1692 | "url": "https://thanks.dev/u/gh/sebastianbergmann", 1693 | "type": "thanks_dev" 1694 | }, 1695 | { 1696 | "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", 1697 | "type": "tidelift" 1698 | } 1699 | ], 1700 | "time": "2025-08-10T08:07:46+00:00" 1701 | }, 1702 | { 1703 | "name": "sebastian/complexity", 1704 | "version": "4.0.1", 1705 | "source": { 1706 | "type": "git", 1707 | "url": "https://github.com/sebastianbergmann/complexity.git", 1708 | "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" 1709 | }, 1710 | "dist": { 1711 | "type": "zip", 1712 | "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", 1713 | "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", 1714 | "shasum": "" 1715 | }, 1716 | "require": { 1717 | "nikic/php-parser": "^5.0", 1718 | "php": ">=8.2" 1719 | }, 1720 | "require-dev": { 1721 | "phpunit/phpunit": "^11.0" 1722 | }, 1723 | "type": "library", 1724 | "extra": { 1725 | "branch-alias": { 1726 | "dev-main": "4.0-dev" 1727 | } 1728 | }, 1729 | "autoload": { 1730 | "classmap": [ 1731 | "src/" 1732 | ] 1733 | }, 1734 | "notification-url": "https://packagist.org/downloads/", 1735 | "license": [ 1736 | "BSD-3-Clause" 1737 | ], 1738 | "authors": [ 1739 | { 1740 | "name": "Sebastian Bergmann", 1741 | "email": "sebastian@phpunit.de", 1742 | "role": "lead" 1743 | } 1744 | ], 1745 | "description": "Library for calculating the complexity of PHP code units", 1746 | "homepage": "https://github.com/sebastianbergmann/complexity", 1747 | "support": { 1748 | "issues": "https://github.com/sebastianbergmann/complexity/issues", 1749 | "security": "https://github.com/sebastianbergmann/complexity/security/policy", 1750 | "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" 1751 | }, 1752 | "funding": [ 1753 | { 1754 | "url": "https://github.com/sebastianbergmann", 1755 | "type": "github" 1756 | } 1757 | ], 1758 | "time": "2024-07-03T04:49:50+00:00" 1759 | }, 1760 | { 1761 | "name": "sebastian/diff", 1762 | "version": "6.0.2", 1763 | "source": { 1764 | "type": "git", 1765 | "url": "https://github.com/sebastianbergmann/diff.git", 1766 | "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" 1767 | }, 1768 | "dist": { 1769 | "type": "zip", 1770 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", 1771 | "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", 1772 | "shasum": "" 1773 | }, 1774 | "require": { 1775 | "php": ">=8.2" 1776 | }, 1777 | "require-dev": { 1778 | "phpunit/phpunit": "^11.0", 1779 | "symfony/process": "^4.2 || ^5" 1780 | }, 1781 | "type": "library", 1782 | "extra": { 1783 | "branch-alias": { 1784 | "dev-main": "6.0-dev" 1785 | } 1786 | }, 1787 | "autoload": { 1788 | "classmap": [ 1789 | "src/" 1790 | ] 1791 | }, 1792 | "notification-url": "https://packagist.org/downloads/", 1793 | "license": [ 1794 | "BSD-3-Clause" 1795 | ], 1796 | "authors": [ 1797 | { 1798 | "name": "Sebastian Bergmann", 1799 | "email": "sebastian@phpunit.de" 1800 | }, 1801 | { 1802 | "name": "Kore Nordmann", 1803 | "email": "mail@kore-nordmann.de" 1804 | } 1805 | ], 1806 | "description": "Diff implementation", 1807 | "homepage": "https://github.com/sebastianbergmann/diff", 1808 | "keywords": [ 1809 | "diff", 1810 | "udiff", 1811 | "unidiff", 1812 | "unified diff" 1813 | ], 1814 | "support": { 1815 | "issues": "https://github.com/sebastianbergmann/diff/issues", 1816 | "security": "https://github.com/sebastianbergmann/diff/security/policy", 1817 | "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" 1818 | }, 1819 | "funding": [ 1820 | { 1821 | "url": "https://github.com/sebastianbergmann", 1822 | "type": "github" 1823 | } 1824 | ], 1825 | "time": "2024-07-03T04:53:05+00:00" 1826 | }, 1827 | { 1828 | "name": "sebastian/environment", 1829 | "version": "7.2.1", 1830 | "source": { 1831 | "type": "git", 1832 | "url": "https://github.com/sebastianbergmann/environment.git", 1833 | "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4" 1834 | }, 1835 | "dist": { 1836 | "type": "zip", 1837 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4", 1838 | "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4", 1839 | "shasum": "" 1840 | }, 1841 | "require": { 1842 | "php": ">=8.2" 1843 | }, 1844 | "require-dev": { 1845 | "phpunit/phpunit": "^11.3" 1846 | }, 1847 | "suggest": { 1848 | "ext-posix": "*" 1849 | }, 1850 | "type": "library", 1851 | "extra": { 1852 | "branch-alias": { 1853 | "dev-main": "7.2-dev" 1854 | } 1855 | }, 1856 | "autoload": { 1857 | "classmap": [ 1858 | "src/" 1859 | ] 1860 | }, 1861 | "notification-url": "https://packagist.org/downloads/", 1862 | "license": [ 1863 | "BSD-3-Clause" 1864 | ], 1865 | "authors": [ 1866 | { 1867 | "name": "Sebastian Bergmann", 1868 | "email": "sebastian@phpunit.de" 1869 | } 1870 | ], 1871 | "description": "Provides functionality to handle HHVM/PHP environments", 1872 | "homepage": "https://github.com/sebastianbergmann/environment", 1873 | "keywords": [ 1874 | "Xdebug", 1875 | "environment", 1876 | "hhvm" 1877 | ], 1878 | "support": { 1879 | "issues": "https://github.com/sebastianbergmann/environment/issues", 1880 | "security": "https://github.com/sebastianbergmann/environment/security/policy", 1881 | "source": "https://github.com/sebastianbergmann/environment/tree/7.2.1" 1882 | }, 1883 | "funding": [ 1884 | { 1885 | "url": "https://github.com/sebastianbergmann", 1886 | "type": "github" 1887 | }, 1888 | { 1889 | "url": "https://liberapay.com/sebastianbergmann", 1890 | "type": "liberapay" 1891 | }, 1892 | { 1893 | "url": "https://thanks.dev/u/gh/sebastianbergmann", 1894 | "type": "thanks_dev" 1895 | }, 1896 | { 1897 | "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", 1898 | "type": "tidelift" 1899 | } 1900 | ], 1901 | "time": "2025-05-21T11:55:47+00:00" 1902 | }, 1903 | { 1904 | "name": "sebastian/exporter", 1905 | "version": "6.3.2", 1906 | "source": { 1907 | "type": "git", 1908 | "url": "https://github.com/sebastianbergmann/exporter.git", 1909 | "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" 1910 | }, 1911 | "dist": { 1912 | "type": "zip", 1913 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", 1914 | "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", 1915 | "shasum": "" 1916 | }, 1917 | "require": { 1918 | "ext-mbstring": "*", 1919 | "php": ">=8.2", 1920 | "sebastian/recursion-context": "^6.0" 1921 | }, 1922 | "require-dev": { 1923 | "phpunit/phpunit": "^11.3" 1924 | }, 1925 | "type": "library", 1926 | "extra": { 1927 | "branch-alias": { 1928 | "dev-main": "6.3-dev" 1929 | } 1930 | }, 1931 | "autoload": { 1932 | "classmap": [ 1933 | "src/" 1934 | ] 1935 | }, 1936 | "notification-url": "https://packagist.org/downloads/", 1937 | "license": [ 1938 | "BSD-3-Clause" 1939 | ], 1940 | "authors": [ 1941 | { 1942 | "name": "Sebastian Bergmann", 1943 | "email": "sebastian@phpunit.de" 1944 | }, 1945 | { 1946 | "name": "Jeff Welch", 1947 | "email": "whatthejeff@gmail.com" 1948 | }, 1949 | { 1950 | "name": "Volker Dusch", 1951 | "email": "github@wallbash.com" 1952 | }, 1953 | { 1954 | "name": "Adam Harvey", 1955 | "email": "aharvey@php.net" 1956 | }, 1957 | { 1958 | "name": "Bernhard Schussek", 1959 | "email": "bschussek@gmail.com" 1960 | } 1961 | ], 1962 | "description": "Provides the functionality to export PHP variables for visualization", 1963 | "homepage": "https://www.github.com/sebastianbergmann/exporter", 1964 | "keywords": [ 1965 | "export", 1966 | "exporter" 1967 | ], 1968 | "support": { 1969 | "issues": "https://github.com/sebastianbergmann/exporter/issues", 1970 | "security": "https://github.com/sebastianbergmann/exporter/security/policy", 1971 | "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2" 1972 | }, 1973 | "funding": [ 1974 | { 1975 | "url": "https://github.com/sebastianbergmann", 1976 | "type": "github" 1977 | }, 1978 | { 1979 | "url": "https://liberapay.com/sebastianbergmann", 1980 | "type": "liberapay" 1981 | }, 1982 | { 1983 | "url": "https://thanks.dev/u/gh/sebastianbergmann", 1984 | "type": "thanks_dev" 1985 | }, 1986 | { 1987 | "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", 1988 | "type": "tidelift" 1989 | } 1990 | ], 1991 | "time": "2025-09-24T06:12:51+00:00" 1992 | }, 1993 | { 1994 | "name": "sebastian/global-state", 1995 | "version": "7.0.2", 1996 | "source": { 1997 | "type": "git", 1998 | "url": "https://github.com/sebastianbergmann/global-state.git", 1999 | "reference": "3be331570a721f9a4b5917f4209773de17f747d7" 2000 | }, 2001 | "dist": { 2002 | "type": "zip", 2003 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", 2004 | "reference": "3be331570a721f9a4b5917f4209773de17f747d7", 2005 | "shasum": "" 2006 | }, 2007 | "require": { 2008 | "php": ">=8.2", 2009 | "sebastian/object-reflector": "^4.0", 2010 | "sebastian/recursion-context": "^6.0" 2011 | }, 2012 | "require-dev": { 2013 | "ext-dom": "*", 2014 | "phpunit/phpunit": "^11.0" 2015 | }, 2016 | "type": "library", 2017 | "extra": { 2018 | "branch-alias": { 2019 | "dev-main": "7.0-dev" 2020 | } 2021 | }, 2022 | "autoload": { 2023 | "classmap": [ 2024 | "src/" 2025 | ] 2026 | }, 2027 | "notification-url": "https://packagist.org/downloads/", 2028 | "license": [ 2029 | "BSD-3-Clause" 2030 | ], 2031 | "authors": [ 2032 | { 2033 | "name": "Sebastian Bergmann", 2034 | "email": "sebastian@phpunit.de" 2035 | } 2036 | ], 2037 | "description": "Snapshotting of global state", 2038 | "homepage": "https://www.github.com/sebastianbergmann/global-state", 2039 | "keywords": [ 2040 | "global state" 2041 | ], 2042 | "support": { 2043 | "issues": "https://github.com/sebastianbergmann/global-state/issues", 2044 | "security": "https://github.com/sebastianbergmann/global-state/security/policy", 2045 | "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2" 2046 | }, 2047 | "funding": [ 2048 | { 2049 | "url": "https://github.com/sebastianbergmann", 2050 | "type": "github" 2051 | } 2052 | ], 2053 | "time": "2024-07-03T04:57:36+00:00" 2054 | }, 2055 | { 2056 | "name": "sebastian/lines-of-code", 2057 | "version": "3.0.1", 2058 | "source": { 2059 | "type": "git", 2060 | "url": "https://github.com/sebastianbergmann/lines-of-code.git", 2061 | "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" 2062 | }, 2063 | "dist": { 2064 | "type": "zip", 2065 | "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", 2066 | "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", 2067 | "shasum": "" 2068 | }, 2069 | "require": { 2070 | "nikic/php-parser": "^5.0", 2071 | "php": ">=8.2" 2072 | }, 2073 | "require-dev": { 2074 | "phpunit/phpunit": "^11.0" 2075 | }, 2076 | "type": "library", 2077 | "extra": { 2078 | "branch-alias": { 2079 | "dev-main": "3.0-dev" 2080 | } 2081 | }, 2082 | "autoload": { 2083 | "classmap": [ 2084 | "src/" 2085 | ] 2086 | }, 2087 | "notification-url": "https://packagist.org/downloads/", 2088 | "license": [ 2089 | "BSD-3-Clause" 2090 | ], 2091 | "authors": [ 2092 | { 2093 | "name": "Sebastian Bergmann", 2094 | "email": "sebastian@phpunit.de", 2095 | "role": "lead" 2096 | } 2097 | ], 2098 | "description": "Library for counting the lines of code in PHP source code", 2099 | "homepage": "https://github.com/sebastianbergmann/lines-of-code", 2100 | "support": { 2101 | "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", 2102 | "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", 2103 | "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" 2104 | }, 2105 | "funding": [ 2106 | { 2107 | "url": "https://github.com/sebastianbergmann", 2108 | "type": "github" 2109 | } 2110 | ], 2111 | "time": "2024-07-03T04:58:38+00:00" 2112 | }, 2113 | { 2114 | "name": "sebastian/object-enumerator", 2115 | "version": "6.0.1", 2116 | "source": { 2117 | "type": "git", 2118 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 2119 | "reference": "f5b498e631a74204185071eb41f33f38d64608aa" 2120 | }, 2121 | "dist": { 2122 | "type": "zip", 2123 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", 2124 | "reference": "f5b498e631a74204185071eb41f33f38d64608aa", 2125 | "shasum": "" 2126 | }, 2127 | "require": { 2128 | "php": ">=8.2", 2129 | "sebastian/object-reflector": "^4.0", 2130 | "sebastian/recursion-context": "^6.0" 2131 | }, 2132 | "require-dev": { 2133 | "phpunit/phpunit": "^11.0" 2134 | }, 2135 | "type": "library", 2136 | "extra": { 2137 | "branch-alias": { 2138 | "dev-main": "6.0-dev" 2139 | } 2140 | }, 2141 | "autoload": { 2142 | "classmap": [ 2143 | "src/" 2144 | ] 2145 | }, 2146 | "notification-url": "https://packagist.org/downloads/", 2147 | "license": [ 2148 | "BSD-3-Clause" 2149 | ], 2150 | "authors": [ 2151 | { 2152 | "name": "Sebastian Bergmann", 2153 | "email": "sebastian@phpunit.de" 2154 | } 2155 | ], 2156 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 2157 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 2158 | "support": { 2159 | "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", 2160 | "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", 2161 | "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1" 2162 | }, 2163 | "funding": [ 2164 | { 2165 | "url": "https://github.com/sebastianbergmann", 2166 | "type": "github" 2167 | } 2168 | ], 2169 | "time": "2024-07-03T05:00:13+00:00" 2170 | }, 2171 | { 2172 | "name": "sebastian/object-reflector", 2173 | "version": "4.0.1", 2174 | "source": { 2175 | "type": "git", 2176 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 2177 | "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" 2178 | }, 2179 | "dist": { 2180 | "type": "zip", 2181 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", 2182 | "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", 2183 | "shasum": "" 2184 | }, 2185 | "require": { 2186 | "php": ">=8.2" 2187 | }, 2188 | "require-dev": { 2189 | "phpunit/phpunit": "^11.0" 2190 | }, 2191 | "type": "library", 2192 | "extra": { 2193 | "branch-alias": { 2194 | "dev-main": "4.0-dev" 2195 | } 2196 | }, 2197 | "autoload": { 2198 | "classmap": [ 2199 | "src/" 2200 | ] 2201 | }, 2202 | "notification-url": "https://packagist.org/downloads/", 2203 | "license": [ 2204 | "BSD-3-Clause" 2205 | ], 2206 | "authors": [ 2207 | { 2208 | "name": "Sebastian Bergmann", 2209 | "email": "sebastian@phpunit.de" 2210 | } 2211 | ], 2212 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 2213 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 2214 | "support": { 2215 | "issues": "https://github.com/sebastianbergmann/object-reflector/issues", 2216 | "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", 2217 | "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1" 2218 | }, 2219 | "funding": [ 2220 | { 2221 | "url": "https://github.com/sebastianbergmann", 2222 | "type": "github" 2223 | } 2224 | ], 2225 | "time": "2024-07-03T05:01:32+00:00" 2226 | }, 2227 | { 2228 | "name": "sebastian/recursion-context", 2229 | "version": "6.0.3", 2230 | "source": { 2231 | "type": "git", 2232 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 2233 | "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc" 2234 | }, 2235 | "dist": { 2236 | "type": "zip", 2237 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc", 2238 | "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc", 2239 | "shasum": "" 2240 | }, 2241 | "require": { 2242 | "php": ">=8.2" 2243 | }, 2244 | "require-dev": { 2245 | "phpunit/phpunit": "^11.3" 2246 | }, 2247 | "type": "library", 2248 | "extra": { 2249 | "branch-alias": { 2250 | "dev-main": "6.0-dev" 2251 | } 2252 | }, 2253 | "autoload": { 2254 | "classmap": [ 2255 | "src/" 2256 | ] 2257 | }, 2258 | "notification-url": "https://packagist.org/downloads/", 2259 | "license": [ 2260 | "BSD-3-Clause" 2261 | ], 2262 | "authors": [ 2263 | { 2264 | "name": "Sebastian Bergmann", 2265 | "email": "sebastian@phpunit.de" 2266 | }, 2267 | { 2268 | "name": "Jeff Welch", 2269 | "email": "whatthejeff@gmail.com" 2270 | }, 2271 | { 2272 | "name": "Adam Harvey", 2273 | "email": "aharvey@php.net" 2274 | } 2275 | ], 2276 | "description": "Provides functionality to recursively process PHP variables", 2277 | "homepage": "https://github.com/sebastianbergmann/recursion-context", 2278 | "support": { 2279 | "issues": "https://github.com/sebastianbergmann/recursion-context/issues", 2280 | "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", 2281 | "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3" 2282 | }, 2283 | "funding": [ 2284 | { 2285 | "url": "https://github.com/sebastianbergmann", 2286 | "type": "github" 2287 | }, 2288 | { 2289 | "url": "https://liberapay.com/sebastianbergmann", 2290 | "type": "liberapay" 2291 | }, 2292 | { 2293 | "url": "https://thanks.dev/u/gh/sebastianbergmann", 2294 | "type": "thanks_dev" 2295 | }, 2296 | { 2297 | "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", 2298 | "type": "tidelift" 2299 | } 2300 | ], 2301 | "time": "2025-08-13T04:42:22+00:00" 2302 | }, 2303 | { 2304 | "name": "sebastian/type", 2305 | "version": "5.1.3", 2306 | "source": { 2307 | "type": "git", 2308 | "url": "https://github.com/sebastianbergmann/type.git", 2309 | "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449" 2310 | }, 2311 | "dist": { 2312 | "type": "zip", 2313 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449", 2314 | "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449", 2315 | "shasum": "" 2316 | }, 2317 | "require": { 2318 | "php": ">=8.2" 2319 | }, 2320 | "require-dev": { 2321 | "phpunit/phpunit": "^11.3" 2322 | }, 2323 | "type": "library", 2324 | "extra": { 2325 | "branch-alias": { 2326 | "dev-main": "5.1-dev" 2327 | } 2328 | }, 2329 | "autoload": { 2330 | "classmap": [ 2331 | "src/" 2332 | ] 2333 | }, 2334 | "notification-url": "https://packagist.org/downloads/", 2335 | "license": [ 2336 | "BSD-3-Clause" 2337 | ], 2338 | "authors": [ 2339 | { 2340 | "name": "Sebastian Bergmann", 2341 | "email": "sebastian@phpunit.de", 2342 | "role": "lead" 2343 | } 2344 | ], 2345 | "description": "Collection of value objects that represent the types of the PHP type system", 2346 | "homepage": "https://github.com/sebastianbergmann/type", 2347 | "support": { 2348 | "issues": "https://github.com/sebastianbergmann/type/issues", 2349 | "security": "https://github.com/sebastianbergmann/type/security/policy", 2350 | "source": "https://github.com/sebastianbergmann/type/tree/5.1.3" 2351 | }, 2352 | "funding": [ 2353 | { 2354 | "url": "https://github.com/sebastianbergmann", 2355 | "type": "github" 2356 | }, 2357 | { 2358 | "url": "https://liberapay.com/sebastianbergmann", 2359 | "type": "liberapay" 2360 | }, 2361 | { 2362 | "url": "https://thanks.dev/u/gh/sebastianbergmann", 2363 | "type": "thanks_dev" 2364 | }, 2365 | { 2366 | "url": "https://tidelift.com/funding/github/packagist/sebastian/type", 2367 | "type": "tidelift" 2368 | } 2369 | ], 2370 | "time": "2025-08-09T06:55:48+00:00" 2371 | }, 2372 | { 2373 | "name": "sebastian/version", 2374 | "version": "5.0.2", 2375 | "source": { 2376 | "type": "git", 2377 | "url": "https://github.com/sebastianbergmann/version.git", 2378 | "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" 2379 | }, 2380 | "dist": { 2381 | "type": "zip", 2382 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", 2383 | "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", 2384 | "shasum": "" 2385 | }, 2386 | "require": { 2387 | "php": ">=8.2" 2388 | }, 2389 | "type": "library", 2390 | "extra": { 2391 | "branch-alias": { 2392 | "dev-main": "5.0-dev" 2393 | } 2394 | }, 2395 | "autoload": { 2396 | "classmap": [ 2397 | "src/" 2398 | ] 2399 | }, 2400 | "notification-url": "https://packagist.org/downloads/", 2401 | "license": [ 2402 | "BSD-3-Clause" 2403 | ], 2404 | "authors": [ 2405 | { 2406 | "name": "Sebastian Bergmann", 2407 | "email": "sebastian@phpunit.de", 2408 | "role": "lead" 2409 | } 2410 | ], 2411 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 2412 | "homepage": "https://github.com/sebastianbergmann/version", 2413 | "support": { 2414 | "issues": "https://github.com/sebastianbergmann/version/issues", 2415 | "security": "https://github.com/sebastianbergmann/version/security/policy", 2416 | "source": "https://github.com/sebastianbergmann/version/tree/5.0.2" 2417 | }, 2418 | "funding": [ 2419 | { 2420 | "url": "https://github.com/sebastianbergmann", 2421 | "type": "github" 2422 | } 2423 | ], 2424 | "time": "2024-10-09T05:16:32+00:00" 2425 | }, 2426 | { 2427 | "name": "squizlabs/php_codesniffer", 2428 | "version": "4.0.1", 2429 | "source": { 2430 | "type": "git", 2431 | "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", 2432 | "reference": "0525c73950de35ded110cffafb9892946d7771b5" 2433 | }, 2434 | "dist": { 2435 | "type": "zip", 2436 | "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/0525c73950de35ded110cffafb9892946d7771b5", 2437 | "reference": "0525c73950de35ded110cffafb9892946d7771b5", 2438 | "shasum": "" 2439 | }, 2440 | "require": { 2441 | "ext-simplexml": "*", 2442 | "ext-tokenizer": "*", 2443 | "ext-xmlwriter": "*", 2444 | "php": ">=7.2.0" 2445 | }, 2446 | "require-dev": { 2447 | "phpunit/phpunit": "^8.4.0 || ^9.3.4 || ^10.5.32 || 11.3.3 - 11.5.28 || ^11.5.31" 2448 | }, 2449 | "bin": [ 2450 | "bin/phpcbf", 2451 | "bin/phpcs" 2452 | ], 2453 | "type": "library", 2454 | "notification-url": "https://packagist.org/downloads/", 2455 | "license": [ 2456 | "BSD-3-Clause" 2457 | ], 2458 | "authors": [ 2459 | { 2460 | "name": "Greg Sherwood", 2461 | "role": "Former lead" 2462 | }, 2463 | { 2464 | "name": "Juliette Reinders Folmer", 2465 | "role": "Current lead" 2466 | }, 2467 | { 2468 | "name": "Contributors", 2469 | "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" 2470 | } 2471 | ], 2472 | "description": "PHP_CodeSniffer tokenizes PHP files and detects violations of a defined set of coding standards.", 2473 | "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", 2474 | "keywords": [ 2475 | "phpcs", 2476 | "standards", 2477 | "static analysis" 2478 | ], 2479 | "support": { 2480 | "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", 2481 | "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", 2482 | "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", 2483 | "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" 2484 | }, 2485 | "funding": [ 2486 | { 2487 | "url": "https://github.com/PHPCSStandards", 2488 | "type": "github" 2489 | }, 2490 | { 2491 | "url": "https://github.com/jrfnl", 2492 | "type": "github" 2493 | }, 2494 | { 2495 | "url": "https://opencollective.com/php_codesniffer", 2496 | "type": "open_collective" 2497 | }, 2498 | { 2499 | "url": "https://thanks.dev/u/gh/phpcsstandards", 2500 | "type": "thanks_dev" 2501 | } 2502 | ], 2503 | "time": "2025-11-10T16:43:36+00:00" 2504 | }, 2505 | { 2506 | "name": "staabm/side-effects-detector", 2507 | "version": "1.0.5", 2508 | "source": { 2509 | "type": "git", 2510 | "url": "https://github.com/staabm/side-effects-detector.git", 2511 | "reference": "d8334211a140ce329c13726d4a715adbddd0a163" 2512 | }, 2513 | "dist": { 2514 | "type": "zip", 2515 | "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", 2516 | "reference": "d8334211a140ce329c13726d4a715adbddd0a163", 2517 | "shasum": "" 2518 | }, 2519 | "require": { 2520 | "ext-tokenizer": "*", 2521 | "php": "^7.4 || ^8.0" 2522 | }, 2523 | "require-dev": { 2524 | "phpstan/extension-installer": "^1.4.3", 2525 | "phpstan/phpstan": "^1.12.6", 2526 | "phpunit/phpunit": "^9.6.21", 2527 | "symfony/var-dumper": "^5.4.43", 2528 | "tomasvotruba/type-coverage": "1.0.0", 2529 | "tomasvotruba/unused-public": "1.0.0" 2530 | }, 2531 | "type": "library", 2532 | "autoload": { 2533 | "classmap": [ 2534 | "lib/" 2535 | ] 2536 | }, 2537 | "notification-url": "https://packagist.org/downloads/", 2538 | "license": [ 2539 | "MIT" 2540 | ], 2541 | "description": "A static analysis tool to detect side effects in PHP code", 2542 | "keywords": [ 2543 | "static analysis" 2544 | ], 2545 | "support": { 2546 | "issues": "https://github.com/staabm/side-effects-detector/issues", 2547 | "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" 2548 | }, 2549 | "funding": [ 2550 | { 2551 | "url": "https://github.com/staabm", 2552 | "type": "github" 2553 | } 2554 | ], 2555 | "time": "2024-10-20T05:08:20+00:00" 2556 | }, 2557 | { 2558 | "name": "theseer/tokenizer", 2559 | "version": "1.3.1", 2560 | "source": { 2561 | "type": "git", 2562 | "url": "https://github.com/theseer/tokenizer.git", 2563 | "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" 2564 | }, 2565 | "dist": { 2566 | "type": "zip", 2567 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", 2568 | "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", 2569 | "shasum": "" 2570 | }, 2571 | "require": { 2572 | "ext-dom": "*", 2573 | "ext-tokenizer": "*", 2574 | "ext-xmlwriter": "*", 2575 | "php": "^7.2 || ^8.0" 2576 | }, 2577 | "type": "library", 2578 | "autoload": { 2579 | "classmap": [ 2580 | "src/" 2581 | ] 2582 | }, 2583 | "notification-url": "https://packagist.org/downloads/", 2584 | "license": [ 2585 | "BSD-3-Clause" 2586 | ], 2587 | "authors": [ 2588 | { 2589 | "name": "Arne Blankerts", 2590 | "email": "arne@blankerts.de", 2591 | "role": "Developer" 2592 | } 2593 | ], 2594 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 2595 | "support": { 2596 | "issues": "https://github.com/theseer/tokenizer/issues", 2597 | "source": "https://github.com/theseer/tokenizer/tree/1.3.1" 2598 | }, 2599 | "funding": [ 2600 | { 2601 | "url": "https://github.com/theseer", 2602 | "type": "github" 2603 | } 2604 | ], 2605 | "time": "2025-11-17T20:03:58+00:00" 2606 | } 2607 | ], 2608 | "aliases": [], 2609 | "minimum-stability": "stable", 2610 | "stability-flags": {}, 2611 | "prefer-stable": false, 2612 | "prefer-lowest": false, 2613 | "platform": { 2614 | "php": "^8.2", 2615 | "ext-curl": "*", 2616 | "ext-json": "*" 2617 | }, 2618 | "platform-dev": {}, 2619 | "platform-overrides": { 2620 | "php": "8.2" 2621 | }, 2622 | "plugin-api-version": "2.6.0" 2623 | } 2624 | --------------------------------------------------------------------------------