This commit is contained in:
2024-03-10 23:21:23 -04:00
parent 69a3c3f157
commit 562b740d68
4 changed files with 500 additions and 145 deletions

View File

@@ -16,9 +16,9 @@
}, },
"minimum-stability": "dev", "minimum-stability": "dev",
"require": { "require": {
"php": ">=7.0.0", "php": ">=8.3.0",
"psr/log": "^1.0", "psr/log": "^1.0",
"psr/simple-cache": "^1.0", "psr/simple-cache": "^1.0",
"guzzlehttp/guzzle": "^6.3" "guzzlehttp/guzzle": "^7.8"
} }
} }

506
composer.lock generated
View File

@@ -1,42 +1,54 @@
{ {
"_readme": [ "_readme": [
"This file locks the dependencies of your project to a known state", "This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "e6242594ada0bd472c34ec3bbac0645e", "content-hash": "8820aa0f3afb4adb8d82e3d78f65c487",
"packages": [ "packages": [
{ {
"name": "guzzlehttp/guzzle", "name": "guzzlehttp/guzzle",
"version": "6.3.0", "version": "7.8.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/guzzle.git", "url": "https://github.com/guzzle/guzzle.git",
"reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1110f66a6530a40fe7aea0378fe608ee2b2248f9",
"reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"guzzlehttp/promises": "^1.0", "ext-json": "*",
"guzzlehttp/psr7": "^1.4", "guzzlehttp/promises": "^1.5.3 || ^2.0.1",
"php": ">=5.5" "guzzlehttp/psr7": "^1.9.1 || ^2.5.1",
"php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0",
"symfony/deprecation-contracts": "^2.2 || ^3.0"
},
"provide": {
"psr/http-client-implementation": "1.0"
}, },
"require-dev": { "require-dev": {
"bamarni/composer-bin-plugin": "^1.8.1",
"ext-curl": "*", "ext-curl": "*",
"phpunit/phpunit": "^4.0 || ^5.0", "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999",
"psr/log": "^1.0" "php-http/message-factory": "^1.1",
"phpunit/phpunit": "^8.5.29 || ^9.5.23",
"psr/log": "^1.1 || ^2.0 || ^3.0"
}, },
"suggest": { "suggest": {
"ext-curl": "Required for CURL handler support",
"ext-intl": "Required for Internationalized Domain Name (IDN) support",
"psr/log": "Required for using the Log middleware" "psr/log": "Required for using the Log middleware"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "bamarni-bin": {
"dev-master": "6.2-dev" "bin-links": true,
"forward-command": false
} }
}, },
"autoload": { "autoload": {
@@ -52,158 +64,347 @@
"MIT" "MIT"
], ],
"authors": [ "authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{ {
"name": "Michael Dowling", "name": "Michael Dowling",
"email": "mtdowling@gmail.com", "email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling" "homepage": "https://github.com/mtdowling"
},
{
"name": "Jeremy Lindblom",
"email": "jeremeamia@gmail.com",
"homepage": "https://github.com/jeremeamia"
},
{
"name": "George Mponos",
"email": "gmponos@gmail.com",
"homepage": "https://github.com/gmponos"
},
{
"name": "Tobias Nyholm",
"email": "tobias.nyholm@gmail.com",
"homepage": "https://github.com/Nyholm"
},
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com",
"homepage": "https://github.com/sagikazarmark"
},
{
"name": "Tobias Schultze",
"email": "webmaster@tubo-world.de",
"homepage": "https://github.com/Tobion"
} }
], ],
"description": "Guzzle is a PHP HTTP client library", "description": "Guzzle is a PHP HTTP client library",
"homepage": "http://guzzlephp.org/",
"keywords": [ "keywords": [
"client", "client",
"curl", "curl",
"framework", "framework",
"http", "http",
"http client", "http client",
"psr-18",
"psr-7",
"rest", "rest",
"web service" "web service"
], ],
"time": "2017-06-22T18:50:49+00:00" "support": {
"issues": "https://github.com/guzzle/guzzle/issues",
"source": "https://github.com/guzzle/guzzle/tree/7.8.0"
},
"funding": [
{
"url": "https://github.com/GrahamCampbell",
"type": "github"
},
{
"url": "https://github.com/Nyholm",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
"type": "tidelift"
}
],
"time": "2023-08-27T10:20:53+00:00"
}, },
{ {
"name": "guzzlehttp/promises", "name": "guzzlehttp/promises",
"version": "dev-master", "version": "2.0.x-dev",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/promises.git", "url": "https://github.com/guzzle/promises.git",
"reference": "09e549f5534380c68761260a71f847644d8f65aa" "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/09e549f5534380c68761260a71f847644d8f65aa", "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223",
"reference": "09e549f5534380c68761260a71f847644d8f65aa", "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=5.5.0" "php": "^7.2.5 || ^8.0"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^4.0" "bamarni/composer-bin-plugin": "^1.8.2",
"phpunit/phpunit": "^8.5.36 || ^9.6.15"
}, },
"default-branch": true,
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "bamarni-bin": {
"dev-master": "1.4-dev" "bin-links": true,
"forward-command": false
} }
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"GuzzleHttp\\Promise\\": "src/" "GuzzleHttp\\Promise\\": "src/"
}, }
"files": [
"src/functions_include.php"
]
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
"MIT" "MIT"
], ],
"authors": [ "authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{ {
"name": "Michael Dowling", "name": "Michael Dowling",
"email": "mtdowling@gmail.com", "email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling" "homepage": "https://github.com/mtdowling"
},
{
"name": "Tobias Nyholm",
"email": "tobias.nyholm@gmail.com",
"homepage": "https://github.com/Nyholm"
},
{
"name": "Tobias Schultze",
"email": "webmaster@tubo-world.de",
"homepage": "https://github.com/Tobion"
} }
], ],
"description": "Guzzle promises library", "description": "Guzzle promises library",
"keywords": [ "keywords": [
"promise" "promise"
], ],
"time": "2017-05-20T23:14:18+00:00" "support": {
"issues": "https://github.com/guzzle/promises/issues",
"source": "https://github.com/guzzle/promises/tree/2.0.2"
},
"funding": [
{
"url": "https://github.com/GrahamCampbell",
"type": "github"
},
{
"url": "https://github.com/Nyholm",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
"type": "tidelift"
}
],
"time": "2023-12-03T20:19:20+00:00"
}, },
{ {
"name": "guzzlehttp/psr7", "name": "guzzlehttp/psr7",
"version": "dev-master", "version": "2.6.x-dev",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/guzzle/psr7.git", "url": "https://github.com/guzzle/psr7.git",
"reference": "811b676fbab9c99e359885032e5ebc70e442f5b8" "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/811b676fbab9c99e359885032e5ebc70e442f5b8", "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221",
"reference": "811b676fbab9c99e359885032e5ebc70e442f5b8", "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=5.4.0", "php": "^7.2.5 || ^8.0",
"psr/http-message": "~1.0" "psr/http-factory": "^1.0",
"psr/http-message": "^1.1 || ^2.0",
"ralouphie/getallheaders": "^3.0"
}, },
"provide": { "provide": {
"psr/http-factory-implementation": "1.0",
"psr/http-message-implementation": "1.0" "psr/http-message-implementation": "1.0"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "~4.0" "bamarni/composer-bin-plugin": "^1.8.2",
"http-interop/http-factory-tests": "^0.9",
"phpunit/phpunit": "^8.5.36 || ^9.6.15"
}, },
"suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
},
"default-branch": true,
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "bamarni-bin": {
"dev-master": "1.4-dev" "bin-links": true,
"forward-command": false
} }
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"GuzzleHttp\\Psr7\\": "src/" "GuzzleHttp\\Psr7\\": "src/"
}, }
"files": [
"src/functions_include.php"
]
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
"license": [ "license": [
"MIT" "MIT"
], ],
"authors": [ "authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{ {
"name": "Michael Dowling", "name": "Michael Dowling",
"email": "mtdowling@gmail.com", "email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling" "homepage": "https://github.com/mtdowling"
}, },
{
"name": "George Mponos",
"email": "gmponos@gmail.com",
"homepage": "https://github.com/gmponos"
},
{
"name": "Tobias Nyholm",
"email": "tobias.nyholm@gmail.com",
"homepage": "https://github.com/Nyholm"
},
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com",
"homepage": "https://github.com/sagikazarmark"
},
{ {
"name": "Tobias Schultze", "name": "Tobias Schultze",
"email": "webmaster@tubo-world.de",
"homepage": "https://github.com/Tobion" "homepage": "https://github.com/Tobion"
},
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com",
"homepage": "https://sagikazarmark.hu"
} }
], ],
"description": "PSR-7 message implementation that also provides common utility methods", "description": "PSR-7 message implementation that also provides common utility methods",
"keywords": [ "keywords": [
"http", "http",
"message", "message",
"psr-7",
"request", "request",
"response", "response",
"stream", "stream",
"uri", "uri",
"url" "url"
], ],
"time": "2017-07-17T09:11:21+00:00" "support": {
"issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/2.6.2"
},
"funding": [
{
"url": "https://github.com/GrahamCampbell",
"type": "github"
}, },
{ {
"name": "psr/http-message", "url": "https://github.com/Nyholm",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
"type": "tidelift"
}
],
"time": "2023-12-03T20:05:35+00:00"
},
{
"name": "psr/http-client",
"version": "dev-master", "version": "dev-master",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/php-fig/http-message.git", "url": "https://github.com/php-fig/http-client.git",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=5.3.0" "php": "^7.0 || ^8.0",
"psr/http-message": "^1.0 || ^2.0"
}, },
"default-branch": true,
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Http\\Client\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for HTTP clients",
"homepage": "https://github.com/php-fig/http-client",
"keywords": [
"http",
"http-client",
"psr",
"psr-18"
],
"support": {
"source": "https://github.com/php-fig/http-client"
},
"time": "2023-09-23T14:17:50+00:00"
},
{
"name": "psr/http-factory",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-factory.git",
"reference": "7037f4b0950474e9d1350e8df89b15f1842085f6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/7037f4b0950474e9d1350e8df89b15f1842085f6",
"reference": "7037f4b0950474e9d1350e8df89b15f1842085f6",
"shasum": ""
},
"require": {
"php": ">=7.0.0",
"psr/http-message": "^1.0 || ^2.0"
},
"default-branch": true,
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
@@ -222,7 +423,62 @@
"authors": [ "authors": [
{ {
"name": "PHP-FIG", "name": "PHP-FIG",
"homepage": "http://www.php-fig.org/" "homepage": "https://www.php-fig.org/"
}
],
"description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
"keywords": [
"factory",
"http",
"message",
"psr",
"psr-17",
"psr-7",
"request",
"response"
],
"support": {
"source": "https://github.com/php-fig/http-factory"
},
"time": "2023-09-22T11:16:44+00:00"
},
{
"name": "psr/http-message",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-message.git",
"reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
"reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"default-branch": true,
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Http\\Message\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "https://www.php-fig.org/"
} }
], ],
"description": "Common interface for HTTP messages", "description": "Common interface for HTTP messages",
@@ -235,20 +491,23 @@
"request", "request",
"response" "response"
], ],
"time": "2016-08-06T14:39:51+00:00" "support": {
"source": "https://github.com/php-fig/http-message/tree/2.0"
},
"time": "2023-04-04T09:54:51+00:00"
}, },
{ {
"name": "psr/log", "name": "psr/log",
"version": "dev-master", "version": "1.1.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/php-fig/log.git", "url": "https://github.com/php-fig/log.git",
"reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
"reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -257,7 +516,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.0.x-dev" "dev-master": "1.1.x-dev"
} }
}, },
"autoload": { "autoload": {
@@ -272,7 +531,7 @@
"authors": [ "authors": [
{ {
"name": "PHP-FIG", "name": "PHP-FIG",
"homepage": "http://www.php-fig.org/" "homepage": "https://www.php-fig.org/"
} }
], ],
"description": "Common interface for logging libraries", "description": "Common interface for logging libraries",
@@ -282,20 +541,23 @@
"psr", "psr",
"psr-3" "psr-3"
], ],
"time": "2016-10-10T12:19:37+00:00" "support": {
"source": "https://github.com/php-fig/log/tree/1.1.4"
},
"time": "2021-05-03T11:20:27+00:00"
}, },
{ {
"name": "psr/simple-cache", "name": "psr/simple-cache",
"version": "dev-master", "version": "1.0.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/php-fig/simple-cache.git", "url": "https://github.com/php-fig/simple-cache.git",
"reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24" "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/php-fig/simple-cache/zipball/753fa598e8f3b9966c886fe13f370baa45ef0e24", "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
"reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24", "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -330,7 +592,122 @@
"psr-16", "psr-16",
"simple-cache" "simple-cache"
], ],
"time": "2017-01-02T13:31:39+00:00" "support": {
"source": "https://github.com/php-fig/simple-cache/tree/master"
},
"time": "2017-10-23T01:57:42+00:00"
},
{
"name": "ralouphie/getallheaders",
"version": "3.0.3",
"source": {
"type": "git",
"url": "https://github.com/ralouphie/getallheaders.git",
"reference": "120b605dfeb996808c31b6477290a714d356e822"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
"reference": "120b605dfeb996808c31b6477290a714d356e822",
"shasum": ""
},
"require": {
"php": ">=5.6"
},
"require-dev": {
"php-coveralls/php-coveralls": "^2.1",
"phpunit/phpunit": "^5 || ^6.5"
},
"type": "library",
"autoload": {
"files": [
"src/getallheaders.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ralph Khattar",
"email": "ralph.khattar@gmail.com"
}
],
"description": "A polyfill for getallheaders.",
"support": {
"issues": "https://github.com/ralouphie/getallheaders/issues",
"source": "https://github.com/ralouphie/getallheaders/tree/develop"
},
"time": "2019-03-08T08:55:37+00:00"
},
{
"name": "symfony/deprecation-contracts",
"version": "dev-main",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "2c438b99bb2753c1628c1e6f523991edea5b03a4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/2c438b99bb2753c1628c1e6f523991edea5b03a4",
"reference": "2c438b99bb2753c1628c1e6f523991edea5b03a4",
"shasum": ""
},
"require": {
"php": ">=8.1"
},
"default-branch": true,
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "3.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"files": [
"function.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/main"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-01-02T14:07:37+00:00"
} }
], ],
"packages-dev": [], "packages-dev": [],
@@ -340,7 +717,8 @@
"prefer-stable": false, "prefer-stable": false,
"prefer-lowest": false, "prefer-lowest": false,
"platform": { "platform": {
"php": ">=7.0.0" "php": ">=8.3.0"
}, },
"platform-dev": [] "platform-dev": [],
"plugin-api-version": "2.6.0"
} }

View File

@@ -15,57 +15,57 @@ class Client
/** /**
* @var TransportInterface * @var TransportInterface
*/ */
private $_transport; private TransportInterface $_transport;
/** /**
* @var array * @var array
*/ */
private $_to = []; private array $_to = [];
/** /**
* @var array * @var array
*/ */
private $_cc = []; private array $_cc = [];
/** /**
* @var array * @var array
*/ */
private $_bcc = []; private array $_bcc = [];
/** /**
* @var array * @var array
*/ */
private $_files = []; private array $_files = [];
/** /**
* @var string * @var string
*/ */
private $_from = ''; private string $_from = '';
/** /**
* @var string * @var string
*/ */
private $_subject = '(No Subject)'; private string $_subject = '(No Subject)';
/** /**
* @var string * @var string
*/ */
private $_body = ''; private string $_body = '';
/** /**
* @var bool * @var bool
*/ */
private $_isHtml = false; private bool $_isHtml = false;
/** /**
* @var bool * @var bool
*/ */
private $_catch = false; private bool $_catch = false;
/** /**
* @var bool|\DateTimeInterface * @var bool|\DateTimeInterface
*/ */
private $_sendTime = false; private bool|\DateTimeInterface $_sendTime = false;
/** /**
* Client constructor. * Client constructor.
@@ -81,7 +81,7 @@ class Client
* @param string $to * @param string $to
* @throws ValidationException * @throws ValidationException
*/ */
public function addTo(string $to) public function addTo(string $to): void
{ {
if (!Validator::validateEmailAddress($to)) { if (!Validator::validateEmailAddress($to)) {
throw new ValidationException('Email address is invalid'); throw new ValidationException('Email address is invalid');
@@ -95,7 +95,7 @@ class Client
* @param array $to * @param array $to
* @throws ValidationException * @throws ValidationException
*/ */
public function setAllTo(array $to) public function setAllTo(array $to): void
{ {
foreach ($to as $item) { foreach ($to as $item) {
if (!Validator::validateEmailAddress($item)) { if (!Validator::validateEmailAddress($item)) {
@@ -110,7 +110,7 @@ class Client
* @param string $cc * @param string $cc
* @throws ValidationException * @throws ValidationException
*/ */
public function addCc(string $cc) public function addCc(string $cc): void
{ {
if (!Validator::validateEmailAddress($cc)) { if (!Validator::validateEmailAddress($cc)) {
throw new ValidationException('Email address is invalid'); throw new ValidationException('Email address is invalid');
@@ -123,7 +123,7 @@ class Client
* @param string $bcc * @param string $bcc
* @throws ValidationException * @throws ValidationException
*/ */
public function addBcc(string $bcc) public function addBcc(string $bcc): void
{ {
if (!Validator::validateEmailAddress($bcc)) { if (!Validator::validateEmailAddress($bcc)) {
throw new ValidationException('Email address is invalid'); throw new ValidationException('Email address is invalid');
@@ -136,7 +136,7 @@ class Client
* @param string $body * @param string $body
* @param bool $isHtml * @param bool $isHtml
*/ */
public function setBody(string $body, bool $isHtml = false) public function setBody(string $body, bool $isHtml = false): void
{ {
$this->_body = $body; $this->_body = $body;
$this->_isHtml = $isHtml; $this->_isHtml = $isHtml;
@@ -145,7 +145,7 @@ class Client
/** /**
* @param string $subject * @param string $subject
*/ */
public function setSubject(string $subject) public function setSubject(string $subject): void
{ {
$this->_subject = $subject; $this->_subject = $subject;
} }
@@ -155,7 +155,7 @@ class Client
* *
* @throws ValidationException * @throws ValidationException
*/ */
public function setFrom(string $from) public function setFrom(string $from): void
{ {
if (!Validator::validateEmailAddress($from)) { if (!Validator::validateEmailAddress($from)) {
throw new ValidationException('Email address is invalid'); throw new ValidationException('Email address is invalid');
@@ -169,7 +169,7 @@ class Client
* @throws ValidationException * @throws ValidationException
* @return mixed * @return mixed
*/ */
public function send(bool $catch = false) public function send(bool $catch = false): mixed
{ {
$this->_catch = $catch; $this->_catch = $catch;
$payload = $this->_buildPayload(); $payload = $this->_buildPayload();
@@ -249,7 +249,7 @@ class Client
/** /**
* @throws ValidationException * @throws ValidationException
*/ */
private function _validateFields() private function _validateFields(): void
{ {
if (empty($this->_to)) { if (empty($this->_to)) {
throw new ValidationException('To Address is required'); throw new ValidationException('To Address is required');
@@ -265,7 +265,7 @@ class Client
* *
* @throws ValidationException * @throws ValidationException
*/ */
public function addAttachment(string $fileLocation) public function addAttachment(string $fileLocation): void
{ {
if (!file_exists($fileLocation)) { if (!file_exists($fileLocation)) {
throw new ValidationException('File does not exist.'); throw new ValidationException('File does not exist.');
@@ -276,7 +276,7 @@ class Client
/** /**
* @param \DateTimeInterface $sendTime * @param \DateTimeInterface $sendTime
*/ */
public function sendTime(\DateTimeInterface $sendTime) public function sendTime(\DateTimeInterface $sendTime): void
{ {
$this->_sendTime = $sendTime; $this->_sendTime = $sendTime;
} }

View File

@@ -3,6 +3,7 @@
namespace Siteworx\Mail\Transports; namespace Siteworx\Mail\Transports;
use GuzzleHttp\Client as Guzzle; use GuzzleHttp\Client as Guzzle;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Exception\ServerException; use GuzzleHttp\Exception\ServerException;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
@@ -14,37 +15,37 @@ class ApiTransport implements TransportInterface
/** /**
* @var string * @var string
*/ */
private $_apiEndpoint = 'https://email.siteworxpro.com'; private string $_apiEndpoint = 'https://email.siteworxpro.com';
/** /**
* @var string * @var string
*/ */
private $_clientId = ''; private string $_clientId = '';
/** /**
* @var string * @var string
*/ */
private $_clientSecret = ''; private string $_clientSecret = '';
/** /**
* @var string * @var string
*/ */
private $_accessToken = ''; private string $_accessToken = '';
/** /**
* @var Guzzle * @var Guzzle
*/ */
private $_client; private Guzzle $_client;
/** /**
* @var CacheInterface * @var CacheInterface | null
*/ */
private $_cache = null; private ?CacheInterface $_cache = null;
/** /**
* @var LoggerInterface * @var LoggerInterface | null
*/ */
private $_logger = null; private ?LoggerInterface $_logger = null;
/** /**
* Client constructor. * Client constructor.
@@ -71,17 +72,17 @@ class ApiTransport implements TransportInterface
} }
/** /**
* @param mixed $Cache * @param mixed $cache
*/ */
public function setCache(CacheInterface $Cache) public function setCache(CacheInterface $cache): void
{ {
$this->_cache = $Cache; $this->_cache = $cache;
} }
/** /**
* @param LoggerInterface $logger * @param LoggerInterface $logger
*/ */
public function setLogger(LoggerInterface $logger) public function setLogger(LoggerInterface $logger): void
{ {
$this->_logger = $logger; $this->_logger = $logger;
} }
@@ -97,7 +98,7 @@ class ApiTransport implements TransportInterface
/** /**
* @param string $clientId * @param string $clientId
*/ */
public function setClientId(string $clientId) public function setClientId(string $clientId): void
{ {
$this->_clientId = $clientId; $this->_clientId = $clientId;
} }
@@ -105,16 +106,12 @@ class ApiTransport implements TransportInterface
/** /**
* @param string $clientSecret * @param string $clientSecret
*/ */
public function setClientSecret(string $clientSecret) public function setClientSecret(string $clientSecret): void
{ {
$this->_clientSecret = $clientSecret; $this->_clientSecret = $clientSecret;
} }
/** public function sentMailPayload(array $payload): \stdClass
* @param array $payload
* @return \stdClass
*/
public function sentMailPayload(array $payload)
{ {
$this->setToken(); $this->setToken();
@@ -139,7 +136,7 @@ class ApiTransport implements TransportInterface
$this->_logger->debug(\json_encode($body)); $this->_logger->debug(\json_encode($body));
} }
} catch (ServerException $exception) { } catch (ServerException | RequestException | GuzzleException $exception) {
$result = $exception->getResponse(); $result = $exception->getResponse();
$body = $result->getBody()->getContents(); $body = $result->getBody()->getContents();
@@ -150,19 +147,6 @@ class ApiTransport implements TransportInterface
$this->_logger->warning('An error occurred sending the email! (' . $result->getStatusCode() . ')'); $this->_logger->warning('An error occurred sending the email! (' . $result->getStatusCode() . ')');
$this->_logger->debug(\json_encode($body)); $this->_logger->debug(\json_encode($body));
} }
} catch (RequestException $exception) {
$result = $exception->getResponse();
$body = $result->getBody()->getContents();
$data = json_decode($body);
if ($this->_logger !== null) {
$this->_logger->warning('An error occurred sending the email! (' . $result->getStatusCode() . ')');
$this->_logger->debug(\json_encode($body));
}
} }
return $data; return $data;
@@ -185,10 +169,7 @@ class ApiTransport implements TransportInterface
} }
/** private function refreshToken(): void
* @return \stdClass
*/
private function refreshToken()
{ {
$params = [ $params = [
'scope' => 'default', 'scope' => 'default',
@@ -198,35 +179,31 @@ class ApiTransport implements TransportInterface
]; ];
try { try {
$result = $this->_client->post($this->_apiEndpoint . '/access_token', [ $result = $this->_client->post($this->_apiEndpoint . '/access_token', [
'form_params' => $params 'json' => $params
]); ]);
$body = $result->getBody()->getContents(); $body = $result->getBody()->getContents();
$data = json_decode($body); $data = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
$this->_accessToken = $data->access_token; $this->_accessToken = $data->access_token;
if ($this->_cache !== null) { $this->_cache?->set('access_token', $this->_accessToken, $data->expires_in);
$this->_cache->set('access_token', $this->_accessToken, $data->expires_in);
}
} catch (ServerException $exception) { } catch (\JsonException | ServerException | RequestException | GuzzleException $exception) {
$result = $exception->getResponse(); $result = $exception->getResponse();
$body = $result->getBody()->getContents(); $body = $result?->getBody()->getContents();
$data = json_decode($body);
} catch (RequestException $exception) {
$result = $exception->getResponse();
$body = $result->getBody()->getContents();
$data = json_decode($body);
try {
$data = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
} catch (\JsonException $e) {
$this->_logger?->error($e->getMessage());
} }
return $data; $this->_logger?->error($exception->getMessage() . ' ' . $data['message'] ?? '');
throw new \RuntimeException($exception);
}
} }