From 5c999eb7145e8a64334b8319182418e8e487d7e9 Mon Sep 17 00:00:00 2001 From: alijvhr Date: Fri, 12 Mar 2021 12:48:17 +0330 Subject: [PATCH 01/13] - new branch to use in composer --- .gitignore | 1 + composer.json | 24 +++++++----------- index.php | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 15 deletions(-) create mode 100644 index.php diff --git a/.gitignore b/.gitignore index b68d156..531265b 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ travis/ .php_cs .php_cs.cache +.idea \ No newline at end of file diff --git a/composer.json b/composer.json index 78947fe..580a85e 100644 --- a/composer.json +++ b/composer.json @@ -9,19 +9,20 @@ ], "description": "Instagram private API SDK", "require": { - "guzzlehttp/guzzle": "^6.2", - "psr/http-message": "^1.0", - "php": ">=7.2", - "webmozart/assert": "^1.0", + "guzzlehttp/guzzle": "*", + "psr/http-message": "*", + "php": "^7|^8", + "webmozart/assert": "*", "tebru/gson-php": "^0.7", "ext-curl": "*", "ext-json": "*" }, "require-dev": { - "phpunit/phpunit": "~6.0", - "squizlabs/php_codesniffer": "^3.0", - "phan/phan": "^3.0", - "drenso/phan-extensions": "^3.2" + "phpunit/phpunit": "*", + "squizlabs/php_codesniffer": "*", + "phan/phan": "*", + "drenso/phan-extensions": "*", + "larapack/dd": "*" }, "autoload": { "psr-4": { @@ -32,12 +33,5 @@ "src/Support/definitions.php", "src/Support/Promises/functions.php" ] - }, - "scripts": { - "test": "/vendor/bin/phpunit", - "lint": "vendor/bin/phpcs --standard=ruleset.xml ./src", - "lint-fix": "vendor/bin/phpcbf --standard=ruleset.xml ./src", - "code-analyze": "vendor/bin/phan --color", - "code-analyze-report": "vendor/bin/phan -m build/logs/checkstyle.cs" } } diff --git a/index.php b/index.php new file mode 100644 index 0000000..a1292d6 --- /dev/null +++ b/index.php @@ -0,0 +1,68 @@ +login('pouriyak7', 'h6364501'); + $session = $envelope->getSession(); + file_put_contents($session->getUser()->getUsername(), serialize($session)); +} +else { + $session = unserialize(file_get_contents('pouriyak7')); + $instagram->setSession($session); +} + + +$users = $instagram->searchByUser('braveputak'); +if (!$users->isSuccess()) { + die($users); +} +foreach ($users->getUsers() as $user){ + if('braveputak' == $user->getUsername()){ + $userID = $user->getId(); + $feed = $user->feed(); + } +} + + +if($feed->isSuccess()){ + $items = $feed->getItems(); + dd($feed); + foreach ($items as $item) { + dd($item); + } +} +try { + + $feed = $instagram->feedByHashtag('hello'); + var_dump($feed); +}catch (Exception $e){ + dd($e->getMessage()); +} + +// +if (!isset($userID)) + die('fuck mark zackerburg'); + +// Retrieve the inbox envelope + +//$instagram->sendThreadMessage('', ''); +// +//$envelope = $instagram->inbox(); + +// Retrieve the inbox +//$inbox = $envelope->getInbox(); +// +//$inbox->send +// +//// Retrieve the available threads +//$threads = $inbox->getThreads(); + + +//var_dump($feeds); \ No newline at end of file From 5b2fa0ef9ca25661c8fac9e6d8ee60a779a97d1f Mon Sep 17 00:00:00 2001 From: alijvhr Date: Sat, 13 Mar 2021 11:33:32 +0330 Subject: [PATCH 02/13] - New Function To Get User By Username --- .travis.yml | 30 - composer.json | 6 +- composer.lock | 2702 +++++++++++++++++ index.php | 63 +- phpunit.xml.dist | 28 - ruleset.xml | 5 - src/Client/Features/SearchFeaturesTrait.php | 6 +- src/Client/Features/UserFeaturesTrait.php | 36 +- .../Search/HashtagSearchResultMessage.php | 2 +- src/DTO/Messages/User/UserMessage.php | 28 + src/Http/Guzzle/Handlers/HandlerStack.php | 4 +- .../Traits/MakeSearchRequestsAccessible.php | 6 +- .../Traits/MakeUserRequestAccessible.php | 13 + .../Serializers/AbstractSerializer.php | 1 + 14 files changed, 2822 insertions(+), 108 deletions(-) delete mode 100644 .travis.yml create mode 100644 composer.lock delete mode 100644 phpunit.xml.dist delete mode 100644 ruleset.xml create mode 100644 src/DTO/Messages/User/UserMessage.php diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index a289aeb..0000000 --- a/.travis.yml +++ /dev/null @@ -1,30 +0,0 @@ -language: php - -php: - - 7.2 - -dist: xenial -sudo: required - -cache: - directories: - - $HOME/.composer/cache - -install: - - composer update -n --prefer-dist $COMPOSER_FLAGS - - wget https://github.com/satooshi/php-coveralls/releases/download/v1.0.0/coveralls.phar - -before_script: - - sudo apt-get update -y - - sudo apt-get install -y libzip4 - - mkdir -p build/logs - - .travis/setup.sh - - composer validate - -script: - - vendor/bin/phpunit --coverage-clover build/logs/clover.xml - - vendor/bin/phpcs --standard=ruleset.xml ./src - - vendor/bin/phan -m checkstyle -o build/logs/checkstyle.cs - -after_script: - - php coveralls.phar -v --exclude-no-stmt diff --git a/composer.json b/composer.json index 580a85e..9784e9c 100644 --- a/composer.json +++ b/composer.json @@ -5,6 +5,10 @@ { "name": "Nicklas Wallgren", "email": "nicklas.wallgren@gmail.com" + }, + { + "name": "Alijvhr", + "email": "eng.alijvhr@gmail.com" } ], "description": "Instagram private API SDK", @@ -18,8 +22,6 @@ "ext-json": "*" }, "require-dev": { - "phpunit/phpunit": "*", - "squizlabs/php_codesniffer": "*", "phan/phan": "*", "drenso/phan-extensions": "*", "larapack/dd": "*" diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..5227053 --- /dev/null +++ b/composer.lock @@ -0,0 +1,2702 @@ +{ + "_readme": [ + "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#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "9ed85816fbb2b82addd55745455db55a", + "packages": [ + { + "name": "doctrine/annotations", + "version": "1.12.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "b17c5014ef81d212ac539f07a1001832df1b6d3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/b17c5014ef81d212ac539f07a1001832df1b6d3b", + "reference": "b17c5014ef81d212ac539f07a1001832df1b6d3b", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/cache": "1.*", + "doctrine/coding-standard": "^6.0 || ^8.1", + "phpstan/phpstan": "^0.12.20", + "phpunit/phpunit": "^7.5 || ^9.1.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.12.1" + }, + "time": "2021-02-21T21:00:45+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.11.8", + "phpunit/phpunit": "^8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2020-05-25T17:44:05+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.2.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "0aa74dfb41ae110835923ef10a9d803a22d50e79" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/0aa74dfb41ae110835923ef10a9d803a22d50e79", + "reference": "0aa74dfb41ae110835923ef10a9d803a22d50e79", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.4", + "guzzlehttp/psr7": "^1.7", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "ext-curl": "*", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "psr/log": "^1.1" + }, + "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" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.1-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.2.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://github.com/alexeyshockov", + "type": "github" + }, + { + "url": "https://github.com/gmponos", + "type": "github" + } + ], + "time": "2020-10-10T11:47:56+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.4.1" + }, + "time": "2021-03-07T09:25:29+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3", + "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/1.7.0" + }, + "time": "2020-09-30T07:37:11+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.2.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + }, + "time": "2020-09-03T19:13:55+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + }, + "time": "2020-09-17T18:55:26+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/container", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.1" + }, + "time": "2021-03-05T17:36:06+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "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": "http://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/tree/master" + }, + "time": "2020-06-29T06:28:15+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.3" + }, + "time": "2020-03-23T09:12:05+00:00" + }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "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/cache", + "version": "v5.2.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "d15fb2576cdbe2c40d7c851e62f85b0faff3dd3d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/d15fb2576cdbe2c40d7c851e62f85b0faff3dd3d", + "reference": "d15fb2576cdbe2c40d7c851e62f85b0faff3dd3d", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0", + "psr/log": "^1.1", + "symfony/cache-contracts": "^1.1.7|^2", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" + }, + "conflict": { + "doctrine/dbal": "<2.10", + "symfony/dependency-injection": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/var-dumper": "<4.4" + }, + "provide": { + "psr/cache-implementation": "1.0|2.0", + "psr/simple-cache-implementation": "1.0", + "symfony/cache-implementation": "1.0|2.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/cache": "^1.6", + "doctrine/dbal": "^2.10|^3.0", + "predis/predis": "^1.1", + "psr/simple-cache": "^1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/filesystem": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/messenger": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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": "Provides an extended PSR-6, PSR-16 (and tags) implementation", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v5.2.4" + }, + "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": "2021-02-25T23:54:56+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "8034ca0b61d4dd967f3698aaa1da2507b631d0cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/8034ca0b61d4dd967f3698aaa1da2507b631d0cb", + "reference": "8034ca0b61d4dd967f3698aaa1da2507b631d0cb", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "^1.0" + }, + "suggest": { + "symfony/cache-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "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": "Generic abstractions related to caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v2.2.0" + }, + "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": "2020-09-07T11:33:47+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1" + }, + "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": "2021-01-07T16:49:33+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1" + }, + "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": "2021-01-07T16:49:33+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "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": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/master" + }, + "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": "2020-09-07T11:33:47+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v5.2.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "5aed4875ab514c8cb9b6ff4772baa25fa4c10307" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/5aed4875ab514c8cb9b6ff4772baa25fa4c10307", + "reference": "5aed4875ab514c8cb9b6ff4772baa25fa4c10307", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15" + }, + "require-dev": { + "symfony/var-dumper": "^4.4.9|^5.0.9" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v5.2.4" + }, + "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": "2021-01-27T10:01:46+00:00" + }, + { + "name": "tebru/doctrine-annotation-reader", + "version": "v0.3.7", + "source": { + "type": "git", + "url": "https://github.com/tebru/doctrine-annotation-reader.git", + "reference": "b75518495da2d57736911049900bc44a910ebaf2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tebru/doctrine-annotation-reader/zipball/b75518495da2d57736911049900bc44a910ebaf2", + "reference": "b75518495da2d57736911049900bc44a910ebaf2", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.2", + "php": ">=7.1", + "psr/simple-cache": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^7.0", + "symfony/cache": "^4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Tebru\\AnnotationReader\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nate Brunette", + "email": "n@tebru.net" + } + ], + "description": "Provides a cleaner API for reading Doctrine annotations", + "support": { + "issues": "https://github.com/tebru/doctrine-annotation-reader/issues", + "source": "https://github.com/tebru/doctrine-annotation-reader/tree/v0.3.7" + }, + "time": "2020-01-02T18:37:00+00:00" + }, + { + "name": "tebru/gson-php", + "version": "v0.7.4", + "source": { + "type": "git", + "url": "https://github.com/tebru/gson-php.git", + "reference": "1e0aa5e3e02196c1d57d5efe207b08119aae87eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tebru/gson-php/zipball/1e0aa5e3e02196c1d57d5efe207b08119aae87eb", + "reference": "1e0aa5e3e02196c1d57d5efe207b08119aae87eb", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "phpdocumentor/reflection-docblock": "^3.2.3|^4.0.1|^5", + "psr/simple-cache": "^1.0", + "symfony/cache": "^3.3|^4.0|^5.0", + "tebru/doctrine-annotation-reader": "^0.3.7", + "tebru/php-type": "^0.1.7" + }, + "require-dev": { + "phpunit/phpunit": "^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Tebru\\Gson\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nate Brunette", + "email": "n@tebru.net" + } + ], + "description": "Gson for PHP: Convert PHP objects to and from json", + "support": { + "issues": "https://github.com/tebru/gson-php/issues", + "source": "https://github.com/tebru/gson-php/tree/v0.7.4" + }, + "time": "2021-03-12T19:32:37+00:00" + }, + { + "name": "tebru/php-type", + "version": "v0.1.7", + "source": { + "type": "git", + "url": "https://github.com/tebru/php-type.git", + "reference": "e54fe230b124a4460b3c39acb68b589943c6c08c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tebru/php-type/zipball/e54fe230b124a4460b3c39acb68b589943c6c08c", + "reference": "e54fe230b124a4460b3c39acb68b589943c6c08c", + "shasum": "" + }, + "require": { + "php": ">= 7.1" + }, + "require-dev": { + "phpunit/phpunit": "^6.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Tebru\\PhpType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nate Brunette", + "email": "n@tebru.net" + } + ], + "description": "A type wrapper for PHP that support generic syntax", + "support": { + "issues": "https://github.com/tebru/php-type/issues", + "source": "https://github.com/tebru/php-type/tree/master" + }, + "time": "2019-10-17T17:58:32+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" + }, + "time": "2021-03-09T10:59:23+00:00" + } + ], + "packages-dev": [ + { + "name": "composer/semver", + "version": "3.2.4", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "a02fdf930a3c1c3ed3a49b5f63859c0c20e10464" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/a02fdf930a3c1c3ed3a49b5f63859c0c20e10464", + "reference": "a02fdf930a3c1c3ed3a49b5f63859c0c20e10464", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.54", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.2.4" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2020-11-13T08:59:24+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "1.4.5", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "f28d44c286812c714741478d968104c5e604a1d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/f28d44c286812c714741478d968104c5e604a1d4", + "reference": "f28d44c286812c714741478d968104c5e604a1d4", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0", + "psr/log": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/1.4.5" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2020-11-13T08:04:11+00:00" + }, + { + "name": "drenso/phan-extensions", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/Drenso/PhanExtensions.git", + "reference": "ac15701a0d8cb283f6e542a25e7175f2ca3a717f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Drenso/PhanExtensions/zipball/ac15701a0d8cb283f6e542a25e7175f2ca3a717f", + "reference": "ac15701a0d8cb283f6e542a25e7175f2ca3a717f", + "shasum": "" + }, + "require-dev": { + "phan/phan": "~2|~3" + }, + "type": "project", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bob van de Vijver", + "email": "bob@drenso.nl" + }, + { + "name": "Tobias Feijten", + "email": "tobias@drenso.nl" + } + ], + "description": "This project contains several extensions (stubs/plugins) to be used with Phan for static PHP analysis", + "homepage": "https://github.com/Drenso/PhanExtensions", + "keywords": [ + "phan", + "plugin", + "plugins", + "stub", + "stubs", + "symfony" + ], + "support": { + "issues": "https://github.com/Drenso/PhanExtensions/issues", + "source": "https://github.com/Drenso/PhanExtensions/tree/master" + }, + "time": "2020-07-03T11:47:46+00:00" + }, + { + "name": "felixfbecker/advanced-json-rpc", + "version": "v3.2.0", + "source": { + "type": "git", + "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", + "reference": "06f0b06043c7438959dbdeed8bb3f699a19be22e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/06f0b06043c7438959dbdeed8bb3f699a19be22e", + "reference": "06f0b06043c7438959dbdeed8bb3f699a19be22e", + "shasum": "" + }, + "require": { + "netresearch/jsonmapper": "^1.0 || ^2.0", + "php": "^7.1 || ^8.0", + "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "AdvancedJsonRpc\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Felix Becker", + "email": "felix.b@outlook.com" + } + ], + "description": "A more advanced JSONRPC implementation", + "support": { + "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", + "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.0" + }, + "time": "2021-01-10T17:48:47+00:00" + }, + { + "name": "larapack/dd", + "version": "1.1", + "source": { + "type": "git", + "url": "https://github.com/larapack/dd.git", + "reference": "561b5111a13d0094b59b5c81b1572489485fb948" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/larapack/dd/zipball/561b5111a13d0094b59b5c81b1572489485fb948", + "reference": "561b5111a13d0094b59b5c81b1572489485fb948", + "shasum": "" + }, + "require": { + "symfony/var-dumper": "*" + }, + "type": "package", + "autoload": { + "files": [ + "src/helper.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Topper", + "email": "hi@webman.io" + } + ], + "description": "`dd` is a helper method in Laravel. This package will add the `dd` to your application.", + "support": { + "issues": "https://github.com/larapack/dd/issues", + "source": "https://github.com/larapack/dd/tree/master" + }, + "time": "2016-12-15T09:34:34+00:00" + }, + { + "name": "microsoft/tolerant-php-parser", + "version": "v0.0.23", + "source": { + "type": "git", + "url": "https://github.com/microsoft/tolerant-php-parser.git", + "reference": "1d76657e3271754515ace52501d3e427eca42ad0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/microsoft/tolerant-php-parser/zipball/1d76657e3271754515ace52501d3e427eca42ad0", + "reference": "1d76657e3271754515ace52501d3e427eca42ad0", + "shasum": "" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Microsoft\\PhpParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Rob Lourens", + "email": "roblou@microsoft.com" + } + ], + "description": "Tolerant PHP-to-AST parser designed for IDE usage scenarios", + "support": { + "issues": "https://github.com/microsoft/tolerant-php-parser/issues", + "source": "https://github.com/microsoft/tolerant-php-parser/tree/v0.0.23" + }, + "time": "2020-09-13T17:29:12+00:00" + }, + { + "name": "netresearch/jsonmapper", + "version": "v2.1.0", + "source": { + "type": "git", + "url": "https://github.com/cweiske/jsonmapper.git", + "reference": "e0f1e33a71587aca81be5cffbb9746510e1fe04e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/e0f1e33a71587aca81be5cffbb9746510e1fe04e", + "reference": "e0f1e33a71587aca81be5cffbb9746510e1fe04e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.6" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.35 || ~5.7 || ~6.4 || ~7.0", + "squizlabs/php_codesniffer": "~3.5" + }, + "type": "library", + "autoload": { + "psr-0": { + "JsonMapper": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "OSL-3.0" + ], + "authors": [ + { + "name": "Christian Weiske", + "email": "cweiske@cweiske.de", + "homepage": "http://github.com/cweiske/jsonmapper/", + "role": "Developer" + } + ], + "description": "Map nested JSON structures onto PHP classes", + "support": { + "email": "cweiske@cweiske.de", + "issues": "https://github.com/cweiske/jsonmapper/issues", + "source": "https://github.com/cweiske/jsonmapper/tree/master" + }, + "time": "2020-04-16T18:48:43+00:00" + }, + { + "name": "phan/phan", + "version": "4.0.3", + "source": { + "type": "git", + "url": "https://github.com/phan/phan.git", + "reference": "95171b8a89ff2433e7ebc27d8a133743f7d78d3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phan/phan/zipball/95171b8a89ff2433e7ebc27d8a133743f7d78d3b", + "reference": "95171b8a89ff2433e7ebc27d8a133743f7d78d3b", + "shasum": "" + }, + "require": { + "composer/semver": "^1.4|^2.0|^3.0", + "composer/xdebug-handler": "^1.3.2", + "ext-filter": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "felixfbecker/advanced-json-rpc": "^3.0.4", + "microsoft/tolerant-php-parser": "0.0.23", + "netresearch/jsonmapper": "^1.6.0|^2.0|^3.0", + "php": "^7.2.0|^8.0.0", + "sabre/event": "^5.0.3", + "symfony/console": "^3.2|^4.0|^5.0", + "symfony/polyfill-mbstring": "^1.11.0", + "symfony/polyfill-php80": "^1.20.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.0" + }, + "suggest": { + "ext-ast": "Needed for parsing ASTs (unless --use-fallback-parser is used). 1.0.1+ is needed, 1.0.10+ is recommended.", + "ext-iconv": "Either iconv or mbstring is needed to ensure issue messages are valid utf-8", + "ext-igbinary": "Improves performance of polyfill when ext-ast is unavailable", + "ext-mbstring": "Either iconv or mbstring is needed to ensure issue messages are valid utf-8", + "ext-tokenizer": "Needed for fallback/polyfill parser support and file/line-based suppressions." + }, + "bin": [ + "phan", + "phan_client", + "tocheckstyle" + ], + "type": "project", + "autoload": { + "psr-4": { + "Phan\\": "src/Phan" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tyson Andre" + }, + { + "name": "Rasmus Lerdorf" + }, + { + "name": "Andrew S. Morrison" + } + ], + "description": "A static analyzer for PHP", + "keywords": [ + "analyzer", + "php", + "static" + ], + "support": { + "issues": "https://github.com/phan/phan/issues", + "source": "https://github.com/phan/phan/tree/4.0.3" + }, + "time": "2021-01-30T00:08:54+00:00" + }, + { + "name": "sabre/event", + "version": "5.1.2", + "source": { + "type": "git", + "url": "https://github.com/sabre-io/event.git", + "reference": "c120bec57c17b6251a496efc82b732418b49d50a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabre-io/event/zipball/c120bec57c17b6251a496efc82b732418b49d50a", + "reference": "c120bec57c17b6251a496efc82b732418b49d50a", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.16.1", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Sabre\\Event\\": "lib/" + }, + "files": [ + "lib/coroutine.php", + "lib/Loop/functions.php", + "lib/Promise/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Evert Pot", + "email": "me@evertpot.com", + "homepage": "http://evertpot.com/", + "role": "Developer" + } + ], + "description": "sabre/event is a library for lightweight event-based programming", + "homepage": "http://sabre.io/event/", + "keywords": [ + "EventEmitter", + "async", + "coroutine", + "eventloop", + "events", + "hooks", + "plugin", + "promise", + "reactor", + "signal" + ], + "support": { + "forum": "https://groups.google.com/group/sabredav-discuss", + "issues": "https://github.com/sabre-io/event/issues", + "source": "https://github.com/fruux/sabre-event" + }, + "time": "2020-10-03T11:02:22+00:00" + }, + { + "name": "symfony/console", + "version": "v5.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "938ebbadae1b0a9c9d1ec313f87f9708609f1b79" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/938ebbadae1b0a9c9d1ec313f87f9708609f1b79", + "reference": "938ebbadae1b0a9c9d1ec313f87f9708609f1b79", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2", + "symfony/string": "^5.1" + }, + "conflict": { + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.2.5" + }, + "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": "2021-03-06T13:42:15+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170", + "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + }, + "files": [ + "bootstrap.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": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.1" + }, + "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": "2021-01-22T09:19:47+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248", + "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "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": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.1" + }, + "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": "2021-01-22T09:19:47+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", + "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.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": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1" + }, + "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": "2021-01-22T09:19:47+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", + "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.22-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "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": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.22.1" + }, + "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": "2021-01-07T16:49:33+00:00" + }, + { + "name": "symfony/string", + "version": "v5.2.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "4e78d7d47061fa183639927ec40d607973699609" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/4e78d7d47061fa183639927ec40d607973699609", + "reference": "4e78d7d47061fa183639927ec40d607973699609", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.2.4" + }, + "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": "2021-02-16T10:20:28+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v5.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "002ab5a36702adf0c9a11e6d8836623253e9045e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/002ab5a36702adf0c9a11e6d8836623253e9045e", + "reference": "002ab5a36702adf0c9a11e6d8836623253e9045e", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<4.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v5.2.5" + }, + "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": "2021-03-06T07:59:01+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "^7|^8", + "ext-curl": "*", + "ext-json": "*" + }, + "platform-dev": [], + "plugin-api-version": "2.0.0" +} diff --git a/index.php b/index.php index a1292d6..9ae6450 100644 --- a/index.php +++ b/index.php @@ -1,4 +1,5 @@ login('pouriyak7', 'h6364501'); $session = $envelope->getSession(); file_put_contents($session->getUser()->getUsername(), serialize($session)); -} -else { +} else { $session = unserialize(file_get_contents('pouriyak7')); $instagram->setSession($session); } -$users = $instagram->searchByUser('braveputak'); -if (!$users->isSuccess()) { - die($users); -} -foreach ($users->getUsers() as $user){ - if('braveputak' == $user->getUsername()){ - $userID = $user->getId(); - $feed = $user->feed(); - } -} - - -if($feed->isSuccess()){ - $items = $feed->getItems(); - dd($feed); - foreach ($items as $item) { - dd($item); - } -} -try { - - $feed = $instagram->feedByHashtag('hello'); - var_dump($feed); -}catch (Exception $e){ - dd($e->getMessage()); -} - +$users = $instagram->getByUsername('braveputak'); +dd($users); +//if (!$users->isSuccess()) { +// die($users); +//} +//foreach ($users->getUsers() as $user){ +// if('braveputak' == $user->getUsername()){ +// $userID = $user->getId(); +// $feed = $user->feed(); +// } +//} +// +// +//if($feed->isSuccess()){ +// $items = $feed->getItems(); +// dd($feed); +// foreach ($items as $item) { +// dd($item); +// } +//} +//try { +// +// $feed = $instagram->feedByHashtag('hello'); +// var_dump($feed); +//}catch (Exception $e){ +// dd($e->getMessage()); +//} // -if (!isset($userID)) - die('fuck mark zackerburg'); +//// +//if (!isset($userID)) +// die('fuck mark zackerburg'); // Retrieve the inbox envelope diff --git a/phpunit.xml.dist b/phpunit.xml.dist deleted file mode 100644 index 7b93ea8..0000000 --- a/phpunit.xml.dist +++ /dev/null @@ -1,28 +0,0 @@ - - - - - ./tests - - - - - src - - ./build - ./tests - ./vendor - - - - \ No newline at end of file diff --git a/ruleset.xml b/ruleset.xml deleted file mode 100644 index e70cd25..0000000 --- a/ruleset.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - src/Support/Promise.php - \ No newline at end of file diff --git a/src/Client/Features/SearchFeaturesTrait.php b/src/Client/Features/SearchFeaturesTrait.php index 2335c02..95f82aa 100644 --- a/src/Client/Features/SearchFeaturesTrait.php +++ b/src/Client/Features/SearchFeaturesTrait.php @@ -4,9 +4,9 @@ use Exception; use GuzzleHttp\Promise\PromiseInterface; -use Instagram\SDK\DTO\Messages\Search\HashtagSearchResultMessage; -use Instagram\SDK\DTO\Messages\Search\SearchResultMessage; -use Instagram\SDK\DTO\Messages\Search\UserSearchResultMessage; +use Instagram\SDK\DTO\Messages\User\HashtagSearchResultMessage; +use Instagram\SDK\DTO\Messages\User\SearchResultMessage; +use Instagram\SDK\DTO\Messages\User\UserSearchResultMessage; use Instagram\SDK\Instagram; use Instagram\SDK\Requests\GenericRequest; use Instagram\SDK\Support\Promise; diff --git a/src/Client/Features/UserFeaturesTrait.php b/src/Client/Features/UserFeaturesTrait.php index 732b242..9014079 100644 --- a/src/Client/Features/UserFeaturesTrait.php +++ b/src/Client/Features/UserFeaturesTrait.php @@ -4,6 +4,8 @@ use Exception; use GuzzleHttp\Promise\PromiseInterface; +use Instagram\SDK\DTO\General\User; +use Instagram\SDK\DTO\Messages\User\UserMessage; use Instagram\SDK\DTO\Messages\User\LogoutMessage; use Instagram\SDK\DTO\Messages\User\SessionMessage; use Instagram\SDK\Instagram; @@ -37,6 +39,11 @@ trait UserFeaturesTrait */ private static $URI_LOGOUT = 'accounts/logout/'; + /** + * @var string The username info uri + */ + private static $URI_GET_USERNAME = 'users/%s/usernameinfo/'; + /** * Authenticates a user. * @@ -80,10 +87,10 @@ public function loginUsingNonce(string $nonce) // Prepare the payload $body = [ - 'device_id' => $this->session->getDevice()->deviceId(), - 'user_id' => $this->session->getUser()->getId(), + 'device_id' => $this->session->getDevice()->deviceId(), + 'user_id' => $this->session->getUser()->getId(), 'login_nonce' => $nonce, - 'adid' => SignatureSupport::uuid(), + 'adid' => SignatureSupport::uuid(), ]; $request->setPayload($body) @@ -121,6 +128,29 @@ public function logout() })($this->getMode()); } + /** + * Logout the authenticated user. + * + * @return UserMessage|Promise + */ + public function getByUsername($uname) + { + return task(function () use ($uname): Promise { + // @phan-suppress-next-line PhanThrowTypeAbsentForCall + $this->checkPrerequisites(); + + /** @var GenericRequest $request */ + $request = request(sprintf(self::$URI_GET_USERNAME, $uname), new UserMessage(), 'GET')( + $this, + $this->session, + $this->client + ); + + // Invoke the request + return $request->fire(); + })($this->getMode()); + } + /** * Chain multiple requests. * diff --git a/src/DTO/Messages/Search/HashtagSearchResultMessage.php b/src/DTO/Messages/Search/HashtagSearchResultMessage.php index 0d832bf..08d2b8b 100644 --- a/src/DTO/Messages/Search/HashtagSearchResultMessage.php +++ b/src/DTO/Messages/Search/HashtagSearchResultMessage.php @@ -1,6 +1,6 @@ user; + } +} diff --git a/src/Http/Guzzle/Handlers/HandlerStack.php b/src/Http/Guzzle/Handlers/HandlerStack.php index 7f59fe7..2c4c907 100644 --- a/src/Http/Guzzle/Handlers/HandlerStack.php +++ b/src/Http/Guzzle/Handlers/HandlerStack.php @@ -25,7 +25,7 @@ class HandlerStack extends \GuzzleHttp\HandlerStack * system will be utilized. * @return HandlerStack */ - public static function create(callable $handler = null) + public static function create(callable $handler = null): self { $stack = new self(static::createHandler()); $stack->push(Middleware::httpErrors(), 'http_errors'); @@ -41,8 +41,8 @@ public static function create(callable $handler = null) * * The returned handler is not wrapped by any default middlewares. * - * @throws RuntimeException if no viable Handler is available. * @return callable Returns the best handler for the given system. + * @throws RuntimeException if no viable Handler is available. */ protected static function createHandler() { diff --git a/src/Requests/Traits/MakeSearchRequestsAccessible.php b/src/Requests/Traits/MakeSearchRequestsAccessible.php index a578da7..c8d7dbb 100644 --- a/src/Requests/Traits/MakeSearchRequestsAccessible.php +++ b/src/Requests/Traits/MakeSearchRequestsAccessible.php @@ -3,9 +3,9 @@ namespace Instagram\SDK\Requests\Traits; use Instagram\SDK\Client\Client; -use Instagram\SDK\DTO\Messages\Search\HashtagSearchResultMessage; -use Instagram\SDK\DTO\Messages\Search\SearchResultMessage; -use Instagram\SDK\DTO\Messages\Search\UserSearchResultMessage; +use Instagram\SDK\DTO\Messages\User\HashtagSearchResultMessage; +use Instagram\SDK\DTO\Messages\User\SearchResultMessage; +use Instagram\SDK\DTO\Messages\User\UserSearchResultMessage; use Instagram\SDK\Support\Promise; /** diff --git a/src/Requests/Traits/MakeUserRequestAccessible.php b/src/Requests/Traits/MakeUserRequestAccessible.php index 27d2f12..307e7d7 100644 --- a/src/Requests/Traits/MakeUserRequestAccessible.php +++ b/src/Requests/Traits/MakeUserRequestAccessible.php @@ -4,6 +4,8 @@ use GuzzleHttp\Promise\Promise; use Instagram\SDK\Client\Client; +use Instagram\SDK\DTO\General\User; +use Instagram\SDK\DTO\Messages\User\UserMessage; use Instagram\SDK\DTO\Messages\User\LogoutMessage; use Instagram\SDK\DTO\Messages\User\SessionMessage; @@ -49,6 +51,17 @@ public function logout() return $this->getClient()->logout(); } + /** + * Logout the authenticated user. + * + * @param string $uname + * @return UserMessage|Promise + */ + public function getByUsername(string $uname) + { + return $this->getClient()->getByUsername($uname); + } + /** * Returns the client. * diff --git a/src/Responses/Serializers/AbstractSerializer.php b/src/Responses/Serializers/AbstractSerializer.php index 754b7a9..46da649 100644 --- a/src/Responses/Serializers/AbstractSerializer.php +++ b/src/Responses/Serializers/AbstractSerializer.php @@ -5,6 +5,7 @@ use Exception; use Instagram\SDK\DTO\Envelope; use Instagram\SDK\DTO\Interfaces\ResponseMessageInterface; +use Instagram\SDK\DTO\Messages\User\UserMessage; use Instagram\SDK\Responses\Exceptions\ApiResponseException; use Instagram\SDK\Responses\Exceptions\InvalidRequestException; use Instagram\SDK\Responses\Interfaces\SerializerInterface; From abc97e4a8e7b4eade79e3402af5ef88fdfb1fb9e Mon Sep 17 00:00:00 2001 From: alijvhr Date: Sat, 13 Mar 2021 11:39:31 +0330 Subject: [PATCH 03/13] - FolowerCount Added To user --- src/DTO/General/User.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/DTO/General/User.php b/src/DTO/General/User.php index 7e86e47..5ae17b2 100644 --- a/src/DTO/General/User.php +++ b/src/DTO/General/User.php @@ -60,6 +60,11 @@ class User implements UserInterface, OnItemDecodeInterface */ protected $isVerified; + /** + * @var int + */ + protected $followerCount; + /** * @var bool */ @@ -118,6 +123,14 @@ public function getFriendshipStatus() return $this->friendshipStatus; } + /** + * @return int + */ + public function followerCount(): bool + { + return $this->followerCount; + } + /** * @return bool */ From ad85b3002f533881470b9ecb815ac3f8c2c47c38 Mon Sep 17 00:00:00 2001 From: alijvhr Date: Sat, 13 Mar 2021 14:56:13 +0330 Subject: [PATCH 04/13] - Added: sendDirectMessage to userId without thread --- index.php | 6 ++-- src/Client/Features/DirectFeaturesTrait.php | 35 ++++++++++++++++++- .../Traits/MakeDirectRequestAccessible.php | 12 +++++++ 3 files changed, 49 insertions(+), 4 deletions(-) diff --git a/index.php b/index.php index 9ae6450..e29ebca 100644 --- a/index.php +++ b/index.php @@ -19,8 +19,8 @@ } -$users = $instagram->getByUsername('braveputak'); -dd($users); +$users = $instagram->getByUsername('alijvhr'); +//dd($users); //if (!$users->isSuccess()) { // die($users); //} @@ -53,7 +53,7 @@ // Retrieve the inbox envelope -//$instagram->sendThreadMessage('', ''); +dd($instagram->sendDirectMessage('salam', '1400882993')); // //$envelope = $instagram->inbox(); diff --git a/src/Client/Features/DirectFeaturesTrait.php b/src/Client/Features/DirectFeaturesTrait.php index b56ab5e..94accbb 100644 --- a/src/Client/Features/DirectFeaturesTrait.php +++ b/src/Client/Features/DirectFeaturesTrait.php @@ -54,7 +54,7 @@ public function inbox() /** * Retrieves a thread. * - * @param string $id The thread id + * @param string $id The thread id * @param string|null $cursor The cursor id * @return ThreadMessage|Promise */ @@ -100,6 +100,39 @@ public function sendThreadMessage(string $text, string $threadId) })($this->getMode()); } + /** + * Sends a direct message. + * + * @param string $text + * @param string $userId + * @return DirectSendItemMessage|Promise + */ + public function sendDirectMessage(string $text, string $UserId) + { + return task(function () use ($text, $UserId): Promise { + // @phan-suppress-next-line PhanThrowTypeAbsentForCall + $this->checkPrerequisites(); + + /** @var GenericRequest $request */ + $request = request(self::$URI_BROADCAST_MESSAGE, new DirectSendItemMessage())( + $this, + $this->session, + $this->client + ); + + // Prepare the request payload + $request->addPayloadParam('text', $text) + ->addPayloadParam('thread_ids', "[0]") + ->addPayloadParam('recipient_users', "[[$UserId]]") +// ->addPayloadParam('action', 'send_item') + ->addUniqueContext() + ->addCSRFTokenAndUserId(); + + // Invoke the request + return $request->fire(); + })($this->getMode()); + } + /** * Set thread id as seen. * diff --git a/src/Requests/Traits/MakeDirectRequestAccessible.php b/src/Requests/Traits/MakeDirectRequestAccessible.php index 4225c40..f1b52d8 100644 --- a/src/Requests/Traits/MakeDirectRequestAccessible.php +++ b/src/Requests/Traits/MakeDirectRequestAccessible.php @@ -52,6 +52,18 @@ public function sendThreadMessage(string $text, string $threadId) return $this->getClient()->sendThreadMessage($text, $threadId); } + /** + * Sends a message to a user. + * + * @param string $text + * @param string $userId + * @return DirectSendItemMessage|Promise + */ + public function sendDirectMessage(string $text, string $userId) + { + return $this->getClient()->sendDirectMessage($text, $userId); + } + /** * Sets thread item as seen. * From 502d77191e0f8c272f71379a5cfccc908026e790 Mon Sep 17 00:00:00 2001 From: alijvhr Date: Sat, 13 Mar 2021 16:47:46 +0330 Subject: [PATCH 05/13] - bugFix: Search namespace renamed to User by mistake reverted --- src/Client/Features/SearchFeaturesTrait.php | 6 +++--- src/DTO/Messages/Search/HashtagSearchResultMessage.php | 2 +- src/Requests/Traits/MakeSearchRequestsAccessible.php | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Client/Features/SearchFeaturesTrait.php b/src/Client/Features/SearchFeaturesTrait.php index 95f82aa..2335c02 100644 --- a/src/Client/Features/SearchFeaturesTrait.php +++ b/src/Client/Features/SearchFeaturesTrait.php @@ -4,9 +4,9 @@ use Exception; use GuzzleHttp\Promise\PromiseInterface; -use Instagram\SDK\DTO\Messages\User\HashtagSearchResultMessage; -use Instagram\SDK\DTO\Messages\User\SearchResultMessage; -use Instagram\SDK\DTO\Messages\User\UserSearchResultMessage; +use Instagram\SDK\DTO\Messages\Search\HashtagSearchResultMessage; +use Instagram\SDK\DTO\Messages\Search\SearchResultMessage; +use Instagram\SDK\DTO\Messages\Search\UserSearchResultMessage; use Instagram\SDK\Instagram; use Instagram\SDK\Requests\GenericRequest; use Instagram\SDK\Support\Promise; diff --git a/src/DTO/Messages/Search/HashtagSearchResultMessage.php b/src/DTO/Messages/Search/HashtagSearchResultMessage.php index 08d2b8b..0d832bf 100644 --- a/src/DTO/Messages/Search/HashtagSearchResultMessage.php +++ b/src/DTO/Messages/Search/HashtagSearchResultMessage.php @@ -1,6 +1,6 @@ Date: Sat, 13 Mar 2021 18:13:51 +0330 Subject: [PATCH 06/13] - bugFix: getFollowerCount return type was wrong --- src/DTO/General/User.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DTO/General/User.php b/src/DTO/General/User.php index 5ae17b2..ebb3059 100644 --- a/src/DTO/General/User.php +++ b/src/DTO/General/User.php @@ -126,7 +126,7 @@ public function getFriendshipStatus() /** * @return int */ - public function followerCount(): bool + public function getFollowerCount(): int { return $this->followerCount; } From 847967ebc681ac72b96d7f4a97b69a7fb1ba7a36 Mon Sep 17 00:00:00 2001 From: alijvhr Date: Sat, 13 Mar 2021 19:46:04 +0330 Subject: [PATCH 07/13] - User has more useful data --- index.php | 69 ---------------------------------------- src/DTO/General/User.php | 67 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 69 deletions(-) delete mode 100644 index.php diff --git a/index.php b/index.php deleted file mode 100644 index e29ebca..0000000 --- a/index.php +++ /dev/null @@ -1,69 +0,0 @@ -login('pouriyak7', 'h6364501'); - $session = $envelope->getSession(); - file_put_contents($session->getUser()->getUsername(), serialize($session)); -} else { - $session = unserialize(file_get_contents('pouriyak7')); - $instagram->setSession($session); -} - - -$users = $instagram->getByUsername('alijvhr'); -//dd($users); -//if (!$users->isSuccess()) { -// die($users); -//} -//foreach ($users->getUsers() as $user){ -// if('braveputak' == $user->getUsername()){ -// $userID = $user->getId(); -// $feed = $user->feed(); -// } -//} -// -// -//if($feed->isSuccess()){ -// $items = $feed->getItems(); -// dd($feed); -// foreach ($items as $item) { -// dd($item); -// } -//} -//try { -// -// $feed = $instagram->feedByHashtag('hello'); -// var_dump($feed); -//}catch (Exception $e){ -// dd($e->getMessage()); -//} -// -//// -//if (!isset($userID)) -// die('fuck mark zackerburg'); - -// Retrieve the inbox envelope - -dd($instagram->sendDirectMessage('salam', '1400882993')); -// -//$envelope = $instagram->inbox(); - -// Retrieve the inbox -//$inbox = $envelope->getInbox(); -// -//$inbox->send -// -//// Retrieve the available threads -//$threads = $inbox->getThreads(); - - -//var_dump($feeds); \ No newline at end of file diff --git a/src/DTO/General/User.php b/src/DTO/General/User.php index ebb3059..0eedf2b 100644 --- a/src/DTO/General/User.php +++ b/src/DTO/General/User.php @@ -39,6 +39,11 @@ class User implements UserInterface, OnItemDecodeInterface */ protected $fullName; + /** + * @var string + */ + protected $biography; + /** * @var bool */ @@ -60,11 +65,31 @@ class User implements UserInterface, OnItemDecodeInterface */ protected $isVerified; + /** + * @var bool + */ + protected $isBusiness; + /** * @var int */ protected $followerCount; + /** + * @var int + */ + protected $FollowingCount; + + /** + * @var int + */ + protected $mediaCount; + + /** + * @var int + */ + protected $TotalIgtvVideos; + /** * @var bool */ @@ -99,6 +124,15 @@ public function getFullName(): ?string return $this->fullName; } + + /** + * @return string|null + */ + public function getBiography(): ?string + { + return $this->biography; + } + /** * @return bool */ @@ -115,6 +149,7 @@ public function getProfilePictureUrl(): string return $this->profilePictureUrl; } + /** * @return FriendshipStatus */ @@ -131,6 +166,38 @@ public function getFollowerCount(): int return $this->followerCount; } + /** + * @return int + */ + public function getFollowingCount(): int + { + return $this->FollowingCount; + } + + /** + * @return int + */ + public function getMediaCount(): int + { + return $this->mediaCount; + } + + /** + * @return int + */ + public function getIgtvCount(): int + { + return $this->TotalIgtvVideos; + } + + /** + * @return bool + */ + public function isBusiness(): bool + { + return $this->isBusiness; + } + /** * @return bool */ From 1b22c157c9cb9d024d31bb14b8b18630700b78aa Mon Sep 17 00:00:00 2001 From: alijvhr Date: Sat, 13 Mar 2021 21:55:17 +0330 Subject: [PATCH 08/13] - bugFix: followers and Following method error and added to user --- composer.json | 2 +- .../Features/FriendshipsFeaturesTrait.php | 6 ++--- src/DTO/General/User.php | 22 +++++++++++++++---- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/composer.json b/composer.json index 9784e9c..e550aca 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,7 @@ "require": { "guzzlehttp/guzzle": "*", "psr/http-message": "*", - "php": "^7|^8", + "php": "^7.4|^8", "webmozart/assert": "*", "tebru/gson-php": "^0.7", "ext-curl": "*", diff --git a/src/Client/Features/FriendshipsFeaturesTrait.php b/src/Client/Features/FriendshipsFeaturesTrait.php index ac5f469..bce19a2 100644 --- a/src/Client/Features/FriendshipsFeaturesTrait.php +++ b/src/Client/Features/FriendshipsFeaturesTrait.php @@ -122,7 +122,7 @@ public function followers(string $userId, ?string $maxId = null) * @var GenericRequest $request */ // @phan-suppress-next-line PhanPluginPrintfVariableFormatString - $request = request(sprintf(self::$URI_FOLLOWERS, $userId), (new FollowersMessage())->setUserId($userId))( + $request = request(sprintf(self::$URI_FOLLOWERS, $userId), (new FollowersMessage())->setUserId($userId), 'GET')( $this, $this->session, $this->client @@ -145,14 +145,14 @@ public function followers(string $userId, ?string $maxId = null) * @param null|string $maxId * @return FollowingMessage|Promise */ - public function following(string $userId, ?string $maxId) + public function following(string $userId, ?string $maxId = null) { return task(function () use ($userId, $maxId): Promise { /** * @var GenericRequest $request */ // @phan-suppress-next-line PhanPluginPrintfVariableFormatString - $request = request(sprintf(self::$URI_FOLLOWING, $userId), (new FollowingMessage())->setUserId($userId))( + $request = request(sprintf(self::$URI_FOLLOWING, $userId), (new FollowingMessage())->setUserId($userId), 'GET')( $this, $this->session, $this->client diff --git a/src/DTO/General/User.php b/src/DTO/General/User.php index 0eedf2b..6fea05b 100644 --- a/src/DTO/General/User.php +++ b/src/DTO/General/User.php @@ -7,6 +7,7 @@ use Instagram\SDK\DTO\Interfaces\UserInterface; use Instagram\SDK\DTO\Messages\Feed\FeedMessage; use Instagram\SDK\DTO\Messages\Friendships\FollowersMessage; +use Instagram\SDK\DTO\Messages\Friendships\FollowingMessage; use Instagram\SDK\DTO\Messages\Friendships\FollowMessage; use Instagram\SDK\Responses\Serializers\Interfaces\OnItemDecodeInterface; use Instagram\SDK\Responses\Serializers\Traits\OnPropagateDecodeEventTrait; @@ -87,8 +88,9 @@ class User implements UserInterface, OnItemDecodeInterface /** * @var int + * @SerializedName("total_igtv_videos") */ - protected $TotalIgtvVideos; + protected $igtvCount; /** * @var bool @@ -187,7 +189,7 @@ public function getMediaCount(): int */ public function getIgtvCount(): int { - return $this->TotalIgtvVideos; + return $this->igtvCount; } /** @@ -262,10 +264,22 @@ public function unfollow() /** * Returns a list of followers. * + * @param int|null $max * @return FollowersMessage|Promise */ - public function followers() + public function followers(?int $max = null) { - return $this->client->followers($this->id); + return $this->client->followers($this->id, $max); + } + + /** + * Returns a list of followings. + * + * @param int|null $max + * @return FollowingMessage|Promise + */ + public function following(?int $max = null) + { + return $this->client->following($this->id, $max); } } From 56aa5ba01f7b7b8614d43fe41f1cd0110e24d2bb Mon Sep 17 00:00:00 2001 From: alijvhr Date: Sun, 14 Mar 2021 22:29:10 +0330 Subject: [PATCH 09/13] - bugFix: feedMessage ImageVersions2 problem fixed --- src/DTO/Hashtag/Item.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DTO/Hashtag/Item.php b/src/DTO/Hashtag/Item.php index e19199e..cd9397b 100644 --- a/src/DTO/Hashtag/Item.php +++ b/src/DTO/Hashtag/Item.php @@ -62,7 +62,7 @@ class Item implements OnItemDecodeInterface protected $filterType; /** - * @var \Instagram\SDK\DTO\General\Media\ImageVersions2[] + * @var object */ protected $imageVersions2; From b63e2ebedc04b0696f7444029f7b0cdf1fdd7452 Mon Sep 17 00:00:00 2001 From: alijvhr Date: Wed, 7 Apr 2021 00:52:43 +0430 Subject: [PATCH 10/13] - bugFix: feed method changed to GET - improvement: reels (story) added --- src/Client/Features/FeedFeaturesTrait.php | 49 ++++++++++++++++--- src/DTO/General/ItemType.php | 5 ++ src/DTO/General/User.php | 11 +++++ .../Traits/MakeFeedRequestsAccessible.php | 25 ++++++++++ 4 files changed, 82 insertions(+), 8 deletions(-) diff --git a/src/Client/Features/FeedFeaturesTrait.php b/src/Client/Features/FeedFeaturesTrait.php index a30de33..87765d1 100644 --- a/src/Client/Features/FeedFeaturesTrait.php +++ b/src/Client/Features/FeedFeaturesTrait.php @@ -37,6 +37,11 @@ trait FeedFeaturesTrait */ private static $URI_USER_FEED = 'feed/user/%s/'; + /** + * @var string The user reels uri + */ + private static $URI_USER_REELS = 'feed/user/%s/reel_media/'; + /** * @var string The timeline uri */ @@ -66,11 +71,23 @@ public function feedByUser(string $user) return $this->feed(TYPE_USER, $user); } + /** + * Retrieves story by user. + * + * @param string $user + * @return FeedMessage|Promise + * @throws Exception + */ + public function storyByUser(string $user) + { + return $this->story(TYPE_USER, $user); + } + /** * Retrieves the feed for a specified hashtag. * - * @param int $type - * @param string $query + * @param int $type + * @param string $query * @param string|null $maxId * @return FeedMessage|Promise * @throws Exception @@ -96,6 +113,22 @@ public function feed(int $type, string $query, ?string $maxId = null) return $result; } + /** + * Retrieves the story for a specified hashtag. + * + * @param int $type + * @param string $query + * @param string|null $maxId + * @return FeedMessage|Promise + * @throws Exception + */ + public function story(string $query, ?string $maxId = null) + { + $result = $this->queryFeed(TYPE_USER, self::$URI_USER_REELS, $query, FeedMessage::class, $maxId); + + return $result; + } + /** * Retrieves the timeline feed for the current user. * @@ -133,10 +166,10 @@ public function timeline(TimelineOptions $options) /** * Queries for the feed result. * - * @param int $type - * @param string $uri - * @param string $query - * @param string $result + * @param int $type + * @param string $uri + * @param string $query + * @param string $result * @param string|null $maxId * @return FeedMessage|Promise */ @@ -152,7 +185,7 @@ protected function queryFeed(int $type, string $uri, string $query, string $resu /** @var GenericRequest $request */ // @phan-suppress-next-line PhanPluginPrintfVariableFormatString - $request = request(sprintf($uri, $tag), $message)( + $request = request(sprintf($uri, $tag), $message, 'GET')( $this, $this->session, $this->client @@ -169,7 +202,7 @@ protected function queryFeed(int $type, string $uri, string $query, string $resu /** * Creates a generic request. * - * @param string $uri + * @param string $uri * @param Envelope $message * @return GenericRequest */ diff --git a/src/DTO/General/ItemType.php b/src/DTO/General/ItemType.php index 5c65fb3..fb5b530 100644 --- a/src/DTO/General/ItemType.php +++ b/src/DTO/General/ItemType.php @@ -70,6 +70,11 @@ class ItemType */ const REEL_SHARE = 'reel_share'; + /** + * @var string + */ + const REELS_MEDIA = 'reels_media'; + /** * @var string */ diff --git a/src/DTO/General/User.php b/src/DTO/General/User.php index 6fea05b..0b4b4ce 100644 --- a/src/DTO/General/User.php +++ b/src/DTO/General/User.php @@ -241,6 +241,17 @@ public function feed() return $this->client->feedByUser($this->id); } + /** + * Returns the user story. + * + * @return FeedMessage|Promise + * @throws Exception + */ + public function story() + { + return $this->client->storyByUser($this->id); + } + /** * Follow the user. * diff --git a/src/Requests/Traits/MakeFeedRequestsAccessible.php b/src/Requests/Traits/MakeFeedRequestsAccessible.php index 836eed9..aa1f222 100644 --- a/src/Requests/Traits/MakeFeedRequestsAccessible.php +++ b/src/Requests/Traits/MakeFeedRequestsAccessible.php @@ -50,6 +50,18 @@ public function feedByUser(string $userId) return $this->feed(self::$TYPE_FEED_USER, $userId); } + /** + * Retrieves story by user. + * + * @param string $userId + * @return FeedMessage|Promise + * @throws \Exception + */ + public function storyByUser(string $userId) + { + return $this->story($userId); + } + /** * Retrieves feed by type. * @@ -64,6 +76,19 @@ public function feed(int $type, string $query, ?string $maxId = null) return $this->getClient()->feed($type, $query, $maxId); } + /** + * Retrieves story by type. + * + * @param string $query + * @param string|null $maxId + * @return FeedMessage|Promise + * @throws \Exception + */ + public function story(string $query, ?string $maxId = null) + { + return $this->getClient()->story($query, $maxId); + } + /** * Retrieves the timeline feed for the current user. * From 2f5f31acb6d8a97dce27f236f948be5dc6afda8c Mon Sep 17 00:00:00 2001 From: alijvhr Date: Wed, 12 May 2021 23:06:37 +0430 Subject: [PATCH 11/13] - bugFix: feed method changed to GET - improvement: reels (story) added --- src/DTO/Hashtag/Item.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/DTO/Hashtag/Item.php b/src/DTO/Hashtag/Item.php index cd9397b..21bf03e 100644 --- a/src/DTO/Hashtag/Item.php +++ b/src/DTO/Hashtag/Item.php @@ -3,6 +3,7 @@ namespace Instagram\SDK\DTO\Hashtag; use Instagram\SDK\Client\Client; +use Instagram\SDK\DTO\Traits\PropertiesTrait; use Instagram\SDK\Responses\Serializers\Interfaces\OnItemDecodeInterface; use Instagram\SDK\Responses\Serializers\Traits\OnPropagateDecodeEventTrait; @@ -14,6 +15,7 @@ class Item implements OnItemDecodeInterface { + use PropertiesTrait; use OnPropagateDecodeEventTrait; /** From bf73863c4301d34ecda4d1e0996bdc2efdcf3f83 Mon Sep 17 00:00:00 2001 From: Alijvhr Date: Thu, 15 Jul 2021 00:25:30 +0430 Subject: [PATCH 12/13] - Getting Media By ID - Added Support For Albums --- src/Client/Features/FeedFeaturesTrait.php | 10 +++++ src/DTO/Hashtag/Item.php | 10 +++++ .../Traits/MakeFeedRequestsAccessible.php | 42 +++++++++++++++---- src/Support/definitions.php | 4 ++ 4 files changed, 57 insertions(+), 9 deletions(-) diff --git a/src/Client/Features/FeedFeaturesTrait.php b/src/Client/Features/FeedFeaturesTrait.php index 87765d1..33373a7 100644 --- a/src/Client/Features/FeedFeaturesTrait.php +++ b/src/Client/Features/FeedFeaturesTrait.php @@ -15,6 +15,7 @@ use function Instagram\SDK\Support\Promises\task; use function Instagram\SDK\Support\request; use const Instagram\SDK\TYPE_HASHTAG; +use const Instagram\SDK\TYPE_SINGLE; use const Instagram\SDK\TYPE_USER; /** @@ -37,6 +38,11 @@ trait FeedFeaturesTrait */ private static $URI_USER_FEED = 'feed/user/%s/'; + /** + * @var string The single feed uri + */ + private static $URI_SINGLE_FEED = 'media/%s/info/'; + /** * @var string The user reels uri */ @@ -102,6 +108,10 @@ public function feed(int $type, string $query, ?string $maxId = null) case TYPE_USER: $result = $this->queryFeed($type, self::$URI_USER_FEED, $query, FeedMessage::class, $maxId); + break; + case TYPE_SINGLE: + $result = $this->queryFeed($type, self::$URI_SINGLE_FEED, $query, FeedMessage::class, $maxId); + break; default: diff --git a/src/DTO/Hashtag/Item.php b/src/DTO/Hashtag/Item.php index 21bf03e..ea89d25 100644 --- a/src/DTO/Hashtag/Item.php +++ b/src/DTO/Hashtag/Item.php @@ -68,6 +68,16 @@ class Item implements OnItemDecodeInterface */ protected $imageVersions2; + /** + * @var int + */ + protected $carouselMediaCount; + + /** + * @var item[] + */ + protected $carouselMedia; + /** * @var float */ diff --git a/src/Requests/Traits/MakeFeedRequestsAccessible.php b/src/Requests/Traits/MakeFeedRequestsAccessible.php index aa1f222..335e932 100644 --- a/src/Requests/Traits/MakeFeedRequestsAccessible.php +++ b/src/Requests/Traits/MakeFeedRequestsAccessible.php @@ -26,10 +26,16 @@ trait MakeFeedRequestsAccessible */ public static $TYPE_FEED_USER = 2; + /** + * @var int The single feed type + */ + public static $TYPE_FEED_SINGLE = 3; + /** * Retrieves feed by hashtag. * - * @param string $tag + * @param string $tag + * * @return FeedMessage|Promise * @throws \Exception */ @@ -41,7 +47,8 @@ public function feedByHashtag(string $tag) /** * Retrieves feed by user. * - * @param string $userId + * @param string $userId + * * @return FeedMessage|Promise * @throws \Exception */ @@ -53,7 +60,8 @@ public function feedByUser(string $userId) /** * Retrieves story by user. * - * @param string $userId + * @param string $userId + * * @return FeedMessage|Promise * @throws \Exception */ @@ -62,12 +70,26 @@ public function storyByUser(string $userId) return $this->story($userId); } + /** + * Retrieves feed by ID. + * + * @param string $feedId + * + * @return FeedMessage|Promise + * @throws \Exception + */ + public function feedByID(string $feedId) + { + return $this->feed(self::$TYPE_FEED_SINGLE, $feedId); + } + /** * Retrieves feed by type. * - * @param int $type - * @param string $query - * @param string|null $maxId + * @param int $type + * @param string $query + * @param string|null $maxId + * * @return FeedMessage|Promise * @throws \Exception */ @@ -79,8 +101,9 @@ public function feed(int $type, string $query, ?string $maxId = null) /** * Retrieves story by type. * - * @param string $query - * @param string|null $maxId + * @param string $query + * @param string|null $maxId + * * @return FeedMessage|Promise * @throws \Exception */ @@ -92,7 +115,8 @@ public function story(string $query, ?string $maxId = null) /** * Retrieves the timeline feed for the current user. * - * @param TimelineOptions|null $options + * @param TimelineOptions|null $options + * * @return Timeline|Promise */ public function timeline(?TimelineOptions $options = null) diff --git a/src/Support/definitions.php b/src/Support/definitions.php index 8c39e39..83b8593 100644 --- a/src/Support/definitions.php +++ b/src/Support/definitions.php @@ -11,3 +11,7 @@ * @var int The user feed type */ const TYPE_USER = 2; +/** + * @var int The single feed type + */ +const TYPE_SINGLE = 3; From d3d7193752881894cebbfa4c3fefd895ee52cd73 Mon Sep 17 00:00:00 2001 From: Alijvhr Date: Thu, 15 Jul 2021 14:36:01 +0430 Subject: [PATCH 13/13] - Fixed Starting slash with new guzzle Error --- src/Requests/Http/Utils/RequestUtils.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Requests/Http/Utils/RequestUtils.php b/src/Requests/Http/Utils/RequestUtils.php index 562f68a..ccc3711 100644 --- a/src/Requests/Http/Utils/RequestUtils.php +++ b/src/Requests/Http/Utils/RequestUtils.php @@ -26,7 +26,7 @@ public static function createUri(string $host, string $path, array $queryParamet $uri = new Uri(); return $uri->withHost($host) - ->withPath('api/v1/' . $path) + ->withPath('/api/v1/' . $path) ->withScheme('https') ->withQuery(self::createQuery($queryParameters)); }