diff --git a/.gitignore b/.gitignore
index cfb65ee..c1e1fcd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -259,3 +259,4 @@ src/environment.txt
# PHP ignore files
src/vendor
+src/.env
diff --git a/src/Caddyfile b/src/Caddyfile
new file mode 100644
index 0000000..f91bcde
--- /dev/null
+++ b/src/Caddyfile
@@ -0,0 +1,9 @@
+{
+ frankenphp
+ order php_server before file_server
+}
+http://localhost:3000 {
+ root * ./public
+ try_files {path} {path}.php
+ php_server
+}
diff --git a/src/composer.json b/src/composer.json
index 52f0919..6aad2e7 100644
--- a/src/composer.json
+++ b/src/composer.json
@@ -1,16 +1,26 @@
{
"name": "bit-badger/my-prayer-journal",
- "minimum-stability": "dev",
+ "minimum-stability": "beta",
"require": {
"php": ">=8.2",
"ext-pdo": "*",
"ext-sqlite3": "*",
"bit-badger/pdo-document": "^1",
- "visus/cuid2": "^4"
+ "visus/cuid2": "^4",
+ "guzzlehttp/guzzle": "^7.8",
+ "guzzlehttp/psr7": "^2.6",
+ "http-interop/http-factory-guzzle": "^1.2",
+ "auth0/auth0-php": "^8.11",
+ "vlucas/phpdotenv": "^5.6"
},
"autoload": {
"psr-4": {
"MyPrayerJournal\\": "lib/"
}
+ },
+ "config": {
+ "allow-plugins": {
+ "php-http/discovery": true
+ }
}
}
diff --git a/src/composer.lock b/src/composer.lock
index 5e38365..b9e6d91 100644
--- a/src/composer.lock
+++ b/src/composer.lock
@@ -4,15 +4,114 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "aa94d32d1f21c70c88434971a9dba5a8",
+ "content-hash": "d19a824cbca9da75d5b5dafbc9fa1367",
"packages": [
+ {
+ "name": "auth0/auth0-php",
+ "version": "8.11.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/auth0/auth0-PHP.git",
+ "reference": "5d132ad4b3b95c5d5d342d09088d469568bfa627"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/auth0/auth0-PHP/zipball/5d132ad4b3b95c5d5d342d09088d469568bfa627",
+ "reference": "5d132ad4b3b95c5d5d342d09088d469568bfa627",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "ext-openssl": "*",
+ "php": "^8.1",
+ "php-http/multipart-stream-builder": "^1",
+ "psr-discovery/all": "^1",
+ "psr/http-client-implementation": "^1",
+ "psr/http-factory-implementation": "^1",
+ "psr/http-message-implementation": "^1"
+ },
+ "require-dev": {
+ "ergebnis/composer-normalize": "^2",
+ "friendsofphp/php-cs-fixer": "^3",
+ "mockery/mockery": "^1",
+ "pestphp/pest": "^2",
+ "phpstan/phpstan": "^1",
+ "phpstan/phpstan-strict-rules": "^1",
+ "psr-mock/http": "^1",
+ "rector/rector": "0.17.6",
+ "spatie/ray": "^1",
+ "symfony/cache": "^4 || ^5 || ^6",
+ "symfony/event-dispatcher": "^4 || ^5 || ^6",
+ "vimeo/psalm": "^5",
+ "wikimedia/composer-merge-plugin": "^2"
+ },
+ "suggest": {
+ "psr/cache-implementation": "(PSR-6 Cache) Improve performance by avoiding making redundant network requests.",
+ "psr/event-dispatcher-implementation": "(PSR-14 Event Dispatcher) Observe and react to events when they occur."
+ },
+ "type": "library",
+ "extra": {
+ "merge-plugin": {
+ "ignore-duplicates": false,
+ "include": [
+ "composer.local.json"
+ ],
+ "merge-dev": true,
+ "merge-extra": false,
+ "merge-extra-deep": false,
+ "merge-scripts": false,
+ "recurse": true,
+ "replace": true
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Auth0\\SDK\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Auth0",
+ "email": "support@auth0.com",
+ "homepage": "https://auth0.com/"
+ }
+ ],
+ "description": "PHP SDK for Auth0 Authentication and Management APIs.",
+ "homepage": "https://github.com/auth0/auth0-PHP",
+ "keywords": [
+ "Authentication",
+ "JSON Web Token",
+ "JWK",
+ "OpenId",
+ "api",
+ "auth",
+ "auth0",
+ "authorization",
+ "json web key",
+ "jwt",
+ "login",
+ "oauth",
+ "protect",
+ "secure"
+ ],
+ "support": {
+ "issues": "https://github.com/auth0/auth0-PHP/issues",
+ "source": "https://github.com/auth0/auth0-PHP/tree/8.11.1"
+ },
+ "time": "2024-01-11T15:28:10+00:00"
+ },
{
"name": "bit-badger/pdo-document",
- "version": "v1.0.0-alpha2",
+ "version": "v1.0.0-beta1",
"source": {
"type": "git",
"url": "https://git.bitbadger.solutions/bit-badger/pdo-document",
- "reference": "330e27218756df8b93081a17dead8aaec789b071"
+ "reference": "124426fa12069aa93e75f7e2946eb2c5ff83a591"
},
"require": {
"ext-pdo": "*",
@@ -54,7 +153,533 @@
"rss": "https://git.bitbadger.solutions/bit-badger/pdo-document.rss",
"source": "https://git.bitbadger.solutions/bit-badger/pdo-document"
},
- "time": "2024-06-11T11:07:56+00:00"
+ "time": "2024-06-21T13:46:41+00:00"
+ },
+ {
+ "name": "composer/semver",
+ "version": "3.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/semver.git",
+ "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32",
+ "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.2 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.4",
+ "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": "ircs://irc.libera.chat:6697/composer",
+ "issues": "https://github.com/composer/semver/issues",
+ "source": "https://github.com/composer/semver/tree/3.4.0"
+ },
+ "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": "2023-08-31T09:50:34+00:00"
+ },
+ {
+ "name": "graham-campbell/result-type",
+ "version": "v1.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/GrahamCampbell/Result-Type.git",
+ "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/fbd48bce38f73f8a4ec8583362e732e4095e5862",
+ "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0",
+ "phpoption/phpoption": "^1.9.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "GrahamCampbell\\ResultType\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ }
+ ],
+ "description": "An Implementation Of The Result Type",
+ "keywords": [
+ "Graham Campbell",
+ "GrahamCampbell",
+ "Result Type",
+ "Result-Type",
+ "result"
+ ],
+ "support": {
+ "issues": "https://github.com/GrahamCampbell/Result-Type/issues",
+ "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-11-12T22:16:48+00:00"
+ },
+ {
+ "name": "guzzlehttp/guzzle",
+ "version": "7.8.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/guzzle.git",
+ "reference": "41042bc7ab002487b876a0683fc8dce04ddce104"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104",
+ "reference": "41042bc7ab002487b876a0683fc8dce04ddce104",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "guzzlehttp/promises": "^1.5.3 || ^2.0.1",
+ "guzzlehttp/psr7": "^1.9.1 || ^2.5.1",
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-client": "^1.0",
+ "symfony/deprecation-contracts": "^2.2 || ^3.0"
+ },
+ "provide": {
+ "psr/http-client-implementation": "1.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "ext-curl": "*",
+ "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999",
+ "php-http/message-factory": "^1.1",
+ "phpunit/phpunit": "^8.5.36 || ^9.6.15",
+ "psr/log": "^1.1 || ^2.0 || ^3.0"
+ },
+ "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": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "GuzzleHttp\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Jeremy Lindblom",
+ "email": "jeremeamia@gmail.com",
+ "homepage": "https://github.com/jeremeamia"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ }
+ ],
+ "description": "Guzzle is a PHP HTTP client library",
+ "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.8.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-12-03T20:35:24+00:00"
+ },
+ {
+ "name": "guzzlehttp/promises",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/promises.git",
+ "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223",
+ "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^8.5.36 || ^9.6.15"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Promise\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ }
+ ],
+ "description": "Guzzle promises library",
+ "keywords": [
+ "promise"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/promises/issues",
+ "source": "https://github.com/guzzle/promises/tree/2.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-12-03T20:19:20+00:00"
+ },
+ {
+ "name": "guzzlehttp/psr7",
+ "version": "2.6.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/psr7.git",
+ "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221",
+ "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.1 || ^2.0",
+ "ralouphie/getallheaders": "^3.0"
+ },
+ "provide": {
+ "psr/http-factory-implementation": "1.0",
+ "psr/http-message-implementation": "1.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "http-interop/http-factory-tests": "^0.9",
+ "phpunit/phpunit": "^8.5.36 || ^9.6.15"
+ },
+ "suggest": {
+ "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Psr7\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://sagikazarmark.hu"
+ }
+ ],
+ "description": "PSR-7 message implementation that also provides common utility methods",
+ "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/2.6.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-12-03T20:05:35+00:00"
+ },
+ {
+ "name": "http-interop/http-factory-guzzle",
+ "version": "1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/http-interop/http-factory-guzzle.git",
+ "reference": "8f06e92b95405216b237521cc64c804dd44c4a81"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/8f06e92b95405216b237521cc64c804dd44c4a81",
+ "reference": "8f06e92b95405216b237521cc64c804dd44c4a81",
+ "shasum": ""
+ },
+ "require": {
+ "guzzlehttp/psr7": "^1.7||^2.0",
+ "php": ">=7.3",
+ "psr/http-factory": "^1.0"
+ },
+ "provide": {
+ "psr/http-factory-implementation": "^1.0"
+ },
+ "require-dev": {
+ "http-interop/http-factory-tests": "^0.9",
+ "phpunit/phpunit": "^9.5"
+ },
+ "suggest": {
+ "guzzlehttp/psr7": "Includes an HTTP factory starting in version 2.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Http\\Factory\\Guzzle\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "An HTTP Factory using Guzzle PSR7",
+ "keywords": [
+ "factory",
+ "http",
+ "psr-17",
+ "psr-7"
+ ],
+ "support": {
+ "issues": "https://github.com/http-interop/http-factory-guzzle/issues",
+ "source": "https://github.com/http-interop/http-factory-guzzle/tree/1.2.0"
+ },
+ "time": "2021-07-21T13:50:14+00:00"
},
{
"name": "netresearch/jsonmapper",
@@ -107,6 +732,1518 @@
},
"time": "2024-01-31T06:18:54+00:00"
},
+ {
+ "name": "php-http/discovery",
+ "version": "1.19.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-http/discovery.git",
+ "reference": "0700efda8d7526335132360167315fdab3aeb599"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-http/discovery/zipball/0700efda8d7526335132360167315fdab3aeb599",
+ "reference": "0700efda8d7526335132360167315fdab3aeb599",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "^1.0|^2.0",
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "nyholm/psr7": "<1.0",
+ "zendframework/zend-diactoros": "*"
+ },
+ "provide": {
+ "php-http/async-client-implementation": "*",
+ "php-http/client-implementation": "*",
+ "psr/http-client-implementation": "*",
+ "psr/http-factory-implementation": "*",
+ "psr/http-message-implementation": "*"
+ },
+ "require-dev": {
+ "composer/composer": "^1.0.2|^2.0",
+ "graham-campbell/phpspec-skip-example-extension": "^5.0",
+ "php-http/httplug": "^1.0 || ^2.0",
+ "php-http/message-factory": "^1.0",
+ "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3",
+ "sebastian/comparator": "^3.0.5 || ^4.0.8",
+ "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "Http\\Discovery\\Composer\\Plugin",
+ "plugin-optional": true
+ },
+ "autoload": {
+ "psr-4": {
+ "Http\\Discovery\\": "src/"
+ },
+ "exclude-from-classmap": [
+ "src/Composer/Plugin.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com"
+ }
+ ],
+ "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations",
+ "homepage": "http://php-http.org",
+ "keywords": [
+ "adapter",
+ "client",
+ "discovery",
+ "factory",
+ "http",
+ "message",
+ "psr17",
+ "psr7"
+ ],
+ "support": {
+ "issues": "https://github.com/php-http/discovery/issues",
+ "source": "https://github.com/php-http/discovery/tree/1.19.4"
+ },
+ "time": "2024-03-29T13:00:05+00:00"
+ },
+ {
+ "name": "php-http/multipart-stream-builder",
+ "version": "1.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-http/multipart-stream-builder.git",
+ "reference": "ed56da23b95949ae4747378bed8a5b61a2fdae24"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-http/multipart-stream-builder/zipball/ed56da23b95949ae4747378bed8a5b61a2fdae24",
+ "reference": "ed56da23b95949ae4747378bed8a5b61a2fdae24",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0",
+ "php-http/discovery": "^1.15",
+ "psr/http-factory-implementation": "^1.0"
+ },
+ "require-dev": {
+ "nyholm/psr7": "^1.0",
+ "php-http/message": "^1.5",
+ "php-http/message-factory": "^1.0.2",
+ "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Http\\Message\\MultipartStream\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com"
+ }
+ ],
+ "description": "A builder class that help you create a multipart stream",
+ "homepage": "http://php-http.org",
+ "keywords": [
+ "factory",
+ "http",
+ "message",
+ "multipart stream",
+ "stream"
+ ],
+ "support": {
+ "issues": "https://github.com/php-http/multipart-stream-builder/issues",
+ "source": "https://github.com/php-http/multipart-stream-builder/tree/1.3.1"
+ },
+ "time": "2024-06-10T14:51:55+00:00"
+ },
+ {
+ "name": "phpoption/phpoption",
+ "version": "1.9.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/schmittjoh/php-option.git",
+ "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820",
+ "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": true
+ },
+ "branch-alias": {
+ "dev-master": "1.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpOption\\": "src/PhpOption/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Johannes M. Schmitt",
+ "email": "schmittjoh@gmail.com",
+ "homepage": "https://github.com/schmittjoh"
+ },
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ }
+ ],
+ "description": "Option Type for PHP",
+ "keywords": [
+ "language",
+ "option",
+ "php",
+ "type"
+ ],
+ "support": {
+ "issues": "https://github.com/schmittjoh/php-option/issues",
+ "source": "https://github.com/schmittjoh/php-option/tree/1.9.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-11-12T21:59:55+00:00"
+ },
+ {
+ "name": "psr-discovery/all",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/psr-discovery/all.git",
+ "reference": "e353ca0cac46b2e954f4a3ee3a13f0de8be7b87b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/psr-discovery/all/zipball/e353ca0cac46b2e954f4a3ee3a13f0de8be7b87b",
+ "reference": "e353ca0cac46b2e954f4a3ee3a13f0de8be7b87b",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1",
+ "psr-discovery/cache-implementations": "^1.0",
+ "psr-discovery/container-implementations": "^1.0",
+ "psr-discovery/event-dispatcher-implementations": "^1.0",
+ "psr-discovery/http-client-implementations": "^1.0",
+ "psr-discovery/http-factory-implementations": "^1.0",
+ "psr-discovery/log-implementations": "^1.0"
+ },
+ "type": "metapackage",
+ "extra": {
+ "merge-plugin": {
+ "ignore-duplicates": false,
+ "include": [
+ "composer.local.json"
+ ],
+ "merge-dev": true,
+ "merge-extra": false,
+ "merge-extra-deep": false,
+ "merge-scripts": false,
+ "recurse": true,
+ "replace": true
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PsrDiscovery\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Evan Sims",
+ "email": "hello@evansims.com",
+ "homepage": "https://evansims.com/"
+ }
+ ],
+ "description": "Lightweight library that discovers available PSR implementations by searching for a list of well-known classes that implement the relevant interface, and returns an instance of the first one that is found.",
+ "homepage": "https://github.com/psr-discovery",
+ "keywords": [
+ "PSR-11",
+ "discovery",
+ "psr",
+ "psr-14",
+ "psr-17",
+ "psr-18",
+ "psr-3",
+ "psr-6"
+ ],
+ "support": {
+ "source": "https://github.com/psr-discovery/all/tree/1.0.1"
+ },
+ "time": "2024-03-04T21:20:17+00:00"
+ },
+ {
+ "name": "psr-discovery/cache-implementations",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/psr-discovery/cache-implementations.git",
+ "reference": "ebede0af34a7fd3c5564809e659ee69c0ab85ff6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/psr-discovery/cache-implementations/zipball/ebede0af34a7fd3c5564809e659ee69c0ab85ff6",
+ "reference": "ebede0af34a7fd3c5564809e659ee69c0ab85ff6",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1",
+ "psr-discovery/discovery": "^1.0",
+ "psr/cache": "^1.0 | ^2.0 | ^3.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.14",
+ "mockery/mockery": "^1.5",
+ "pestphp/pest": "^2.0",
+ "phpstan/phpstan": "^1.10",
+ "phpstan/phpstan-strict-rules": "^1.5",
+ "rector/rector": "^0.15",
+ "vimeo/psalm": "^5.8",
+ "wikimedia/composer-merge-plugin": "^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "merge-plugin": {
+ "ignore-duplicates": false,
+ "include": [
+ "composer.local.json"
+ ],
+ "merge-dev": true,
+ "merge-extra": false,
+ "merge-extra-deep": false,
+ "merge-scripts": false,
+ "recurse": true,
+ "replace": true
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PsrDiscovery\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Evan Sims",
+ "email": "hello@evansims.com",
+ "homepage": "https://evansims.com/"
+ }
+ ],
+ "description": "Lightweight library that discovers available PSR-6 Cache implementations by searching for a list of well-known classes that implement the relevant interface, and returns an instance of the first one that is found.",
+ "homepage": "https://github.com/psr-discovery",
+ "keywords": [
+ "cache",
+ "cache-implementation",
+ "discovery",
+ "psr",
+ "psr-6"
+ ],
+ "support": {
+ "issues": "https://github.com/psr-discovery/cache-implementations/issues",
+ "source": "https://github.com/psr-discovery/cache-implementations/tree/1.1.1"
+ },
+ "time": "2024-03-04T21:22:36+00:00"
+ },
+ {
+ "name": "psr-discovery/container-implementations",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/psr-discovery/container-implementations.git",
+ "reference": "728a452b32b0bb60c4bac43b18db2e3105bb8d7e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/psr-discovery/container-implementations/zipball/728a452b32b0bb60c4bac43b18db2e3105bb8d7e",
+ "reference": "728a452b32b0bb60c4bac43b18db2e3105bb8d7e",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1",
+ "psr-discovery/discovery": "^1.0",
+ "psr/container": "^1.0 | ^2.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.14",
+ "mockery/mockery": "^1.5",
+ "pestphp/pest": "^2.0",
+ "phpstan/phpstan": "^1.10",
+ "phpstan/phpstan-strict-rules": "^1.5",
+ "rector/rector": "^0.15",
+ "vimeo/psalm": "^5.8",
+ "wikimedia/composer-merge-plugin": "^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "merge-plugin": {
+ "ignore-duplicates": false,
+ "include": [
+ "composer.local.json"
+ ],
+ "merge-dev": true,
+ "merge-extra": false,
+ "merge-extra-deep": false,
+ "merge-scripts": false,
+ "recurse": true,
+ "replace": true
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PsrDiscovery\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Evan Sims",
+ "email": "hello@evansims.com",
+ "homepage": "https://evansims.com/"
+ }
+ ],
+ "description": "Lightweight library that discovers available PSR-11 Container implementations by searching for a list of well-known classes that implement the relevant interface, and returns an instance of the first one that is found.",
+ "homepage": "https://github.com/psr-discovery/http-client-implementations",
+ "keywords": [
+ "PSR-11",
+ "discovery",
+ "psr"
+ ],
+ "support": {
+ "issues": "https://github.com/psr-discovery/container-implementations/issues",
+ "source": "https://github.com/psr-discovery/container-implementations/tree/1.1.1"
+ },
+ "time": "2024-03-04T21:24:05+00:00"
+ },
+ {
+ "name": "psr-discovery/discovery",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/psr-discovery/discovery.git",
+ "reference": "9fb31dca2030accd9d3de21fb8806478e9df5b2b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/psr-discovery/discovery/zipball/9fb31dca2030accd9d3de21fb8806478e9df5b2b",
+ "reference": "9fb31dca2030accd9d3de21fb8806478e9df5b2b",
+ "shasum": ""
+ },
+ "require": {
+ "composer/semver": "^3.0",
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.14",
+ "mockery/mockery": "^1.5",
+ "pestphp/pest": "^2.0",
+ "phpstan/phpstan": "^1.10",
+ "phpstan/phpstan-strict-rules": "^1.5",
+ "rector/rector": "^0.15",
+ "vimeo/psalm": "^5.8",
+ "wikimedia/composer-merge-plugin": "^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "merge-plugin": {
+ "ignore-duplicates": false,
+ "include": [
+ "composer.local.json"
+ ],
+ "merge-dev": true,
+ "merge-extra": false,
+ "merge-extra-deep": false,
+ "merge-scripts": false,
+ "recurse": true,
+ "replace": true
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PsrDiscovery\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Evan Sims",
+ "email": "hello@evansims.com",
+ "homepage": "https://evansims.com/"
+ }
+ ],
+ "description": "Lightweight library that discovers available PSR implementations by searching for a list of well-known classes that implement the relevant interfaces, and returning an instance of the first one that is found.",
+ "homepage": "https://github.com/psr-discovery/discovery",
+ "keywords": [
+ "PSR-11",
+ "discovery",
+ "psr",
+ "psr-14",
+ "psr-17",
+ "psr-18",
+ "psr-3",
+ "psr-6"
+ ],
+ "support": {
+ "issues": "https://github.com/psr-discovery/discovery/issues",
+ "source": "https://github.com/psr-discovery/discovery/tree/1.1.1"
+ },
+ "time": "2024-03-04T21:26:05+00:00"
+ },
+ {
+ "name": "psr-discovery/event-dispatcher-implementations",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/psr-discovery/event-dispatcher-implementations.git",
+ "reference": "9033bb984613703e4c4f795ef0657184dc1c70eb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/psr-discovery/event-dispatcher-implementations/zipball/9033bb984613703e4c4f795ef0657184dc1c70eb",
+ "reference": "9033bb984613703e4c4f795ef0657184dc1c70eb",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1",
+ "psr-discovery/discovery": "^1.0",
+ "psr/event-dispatcher": "^1.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.14",
+ "mockery/mockery": "^1.5",
+ "pestphp/pest": "^2.0",
+ "phpstan/phpstan": "^1.10",
+ "phpstan/phpstan-strict-rules": "^1.5",
+ "rector/rector": "^0.15",
+ "vimeo/psalm": "^5.8",
+ "wikimedia/composer-merge-plugin": "^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "merge-plugin": {
+ "ignore-duplicates": false,
+ "include": [
+ "composer.local.json"
+ ],
+ "merge-dev": true,
+ "merge-extra": false,
+ "merge-extra-deep": false,
+ "merge-scripts": false,
+ "recurse": true,
+ "replace": true
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PsrDiscovery\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Evan Sims",
+ "email": "hello@evansims.com",
+ "homepage": "https://evansims.com/"
+ }
+ ],
+ "description": "Lightweight library that discovers available PSR-14 Event Dispatcher implementations by searching for a list of well-known classes that implement the relevant interface, and returns an instance of the first one that is found.",
+ "homepage": "https://github.com/psr-discovery/http-client-implementations",
+ "keywords": [
+ "discovery",
+ "psr",
+ "psr-18"
+ ],
+ "support": {
+ "issues": "https://github.com/psr-discovery/event-dispatcher-implementations/issues",
+ "source": "https://github.com/psr-discovery/event-dispatcher-implementations/tree/1.1.1"
+ },
+ "time": "2024-03-04T21:27:10+00:00"
+ },
+ {
+ "name": "psr-discovery/http-client-implementations",
+ "version": "1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/psr-discovery/http-client-implementations.git",
+ "reference": "a05c54087d13504d8e48c27395fbab638fb0a114"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/psr-discovery/http-client-implementations/zipball/a05c54087d13504d8e48c27395fbab638fb0a114",
+ "reference": "a05c54087d13504d8e48c27395fbab638fb0a114",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1",
+ "psr-discovery/discovery": "^1.0",
+ "psr/http-client": "^1.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.14",
+ "mockery/mockery": "^1.5",
+ "pestphp/pest": "^2.0",
+ "phpstan/phpstan": "^1.10",
+ "phpstan/phpstan-strict-rules": "^1.5",
+ "rector/rector": "^0.15",
+ "vimeo/psalm": "^5.8",
+ "wikimedia/composer-merge-plugin": "^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "merge-plugin": {
+ "ignore-duplicates": false,
+ "include": [
+ "composer.local.json"
+ ],
+ "merge-dev": true,
+ "merge-extra": false,
+ "merge-extra-deep": false,
+ "merge-scripts": false,
+ "recurse": true,
+ "replace": true
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PsrDiscovery\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Evan Sims",
+ "email": "hello@evansims.com",
+ "homepage": "https://evansims.com/"
+ }
+ ],
+ "description": "Lightweight library that discovers available PSR-18 HTTP Client implementations by searching for a list of well-known classes that implement the relevant interface, and returns an instance of the first one that is found.",
+ "homepage": "https://github.com/psr-discovery/http-client-implementations",
+ "keywords": [
+ "discovery",
+ "psr",
+ "psr-18"
+ ],
+ "support": {
+ "issues": "https://github.com/psr-discovery/http-client-implementations/issues",
+ "source": "https://github.com/psr-discovery/http-client-implementations/tree/1.2.0"
+ },
+ "time": "2024-03-16T05:29:47+00:00"
+ },
+ {
+ "name": "psr-discovery/http-factory-implementations",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/psr-discovery/http-factory-implementations.git",
+ "reference": "4ee07ae795b794e61578db32b5422a780b01b833"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/psr-discovery/http-factory-implementations/zipball/4ee07ae795b794e61578db32b5422a780b01b833",
+ "reference": "4ee07ae795b794e61578db32b5422a780b01b833",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1",
+ "psr-discovery/discovery": "^1.1",
+ "psr/http-factory": "^1.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.14",
+ "mockery/mockery": "^1.5",
+ "pestphp/pest": "^2.0",
+ "phpstan/phpstan": "^1.10",
+ "phpstan/phpstan-strict-rules": "^1.5",
+ "rector/rector": "^0.15",
+ "vimeo/psalm": "^5.8",
+ "wikimedia/composer-merge-plugin": "^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "merge-plugin": {
+ "ignore-duplicates": false,
+ "include": [
+ "composer.local.json"
+ ],
+ "merge-dev": true,
+ "merge-extra": false,
+ "merge-extra-deep": false,
+ "merge-scripts": false,
+ "recurse": true,
+ "replace": true
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PsrDiscovery\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Evan Sims",
+ "email": "hello@evansims.com",
+ "homepage": "https://evansims.com/"
+ }
+ ],
+ "description": "Lightweight library that discovers available PSR-17 HTTP Factory implementations by searching for a list of well-known classes that implement the relevant interface, and returns an instance of the first one that is found.",
+ "homepage": "https://github.com/psr-discovery/http-factory-implementations",
+ "keywords": [
+ "discovery",
+ "psr",
+ "psr-18"
+ ],
+ "support": {
+ "issues": "https://github.com/psr-discovery/http-factory-implementations/issues",
+ "source": "https://github.com/psr-discovery/http-factory-implementations/tree/1.1.1"
+ },
+ "time": "2024-03-04T21:31:16+00:00"
+ },
+ {
+ "name": "psr-discovery/log-implementations",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/psr-discovery/log-implementations.git",
+ "reference": "384894384663fa5e1b2186112fb8ffe3f81a0b22"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/psr-discovery/log-implementations/zipball/384894384663fa5e1b2186112fb8ffe3f81a0b22",
+ "reference": "384894384663fa5e1b2186112fb8ffe3f81a0b22",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1",
+ "psr-discovery/discovery": "^1.0",
+ "psr/log": "^1.0 | ^2.0 | ^3.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.14",
+ "mockery/mockery": "^1.5",
+ "pestphp/pest": "^2.0",
+ "phpstan/phpstan": "^1.10",
+ "phpstan/phpstan-strict-rules": "^1.5",
+ "rector/rector": "^0.15",
+ "vimeo/psalm": "^5.8",
+ "wikimedia/composer-merge-plugin": "^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "merge-plugin": {
+ "ignore-duplicates": false,
+ "include": [
+ "composer.local.json"
+ ],
+ "merge-dev": true,
+ "merge-extra": false,
+ "merge-extra-deep": false,
+ "merge-scripts": false,
+ "recurse": true,
+ "replace": true
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PsrDiscovery\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Evan Sims",
+ "email": "hello@evansims.com",
+ "homepage": "https://evansims.com/"
+ }
+ ],
+ "description": "Lightweight library that discovers available PSR-3 Log implementations by searching for a list of well-known classes that implement the relevant interface, and returns an instance of the first one that is found.",
+ "homepage": "https://github.com/psr-discovery",
+ "keywords": [
+ "discovery",
+ "log",
+ "log-implementation",
+ "psr",
+ "psr-3"
+ ],
+ "support": {
+ "issues": "https://github.com/psr-discovery/log-implementations/issues",
+ "source": "https://github.com/psr-discovery/log-implementations/tree/1.0.1"
+ },
+ "time": "2024-03-04T21:32:27+00:00"
+ },
+ {
+ "name": "psr/cache",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/cache.git",
+ "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
+ "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.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": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for caching libraries",
+ "keywords": [
+ "cache",
+ "psr",
+ "psr-6"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/cache/tree/3.0.0"
+ },
+ "time": "2021-02-03T23:26:27+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "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/2.0.2"
+ },
+ "time": "2021-11-05T16:47:00+00:00"
+ },
+ {
+ "name": "psr/event-dispatcher",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/event-dispatcher.git",
+ "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
+ "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\EventDispatcher\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Standard interfaces for event handling.",
+ "keywords": [
+ "events",
+ "psr",
+ "psr-14"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/event-dispatcher/issues",
+ "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
+ },
+ "time": "2019-01-08T18:20:26+00:00"
+ },
+ {
+ "name": "psr/http-client",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-client.git",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0",
+ "psr/http-message": "^1.0 || ^2.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": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP clients",
+ "homepage": "https://github.com/php-fig/http-client",
+ "keywords": [
+ "http",
+ "http-client",
+ "psr",
+ "psr-18"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-client"
+ },
+ "time": "2023-09-23T14:17:50+00:00"
+ },
+ {
+ "name": "psr/http-factory",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-factory.git",
+ "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
+ "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1",
+ "psr/http-message": "^1.0 || ^2.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": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
+ "keywords": [
+ "factory",
+ "http",
+ "message",
+ "psr",
+ "psr-17",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-factory"
+ },
+ "time": "2024-04-15T12:06:14+00:00"
+ },
+ {
+ "name": "psr/http-message",
+ "version": "2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-message.git",
+ "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+ "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP messages",
+ "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/2.0"
+ },
+ "time": "2023-04-04T09:54:51+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001",
+ "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://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/3.0.0"
+ },
+ "time": "2021-07-14T16:46:02+00:00"
+ },
+ {
+ "name": "ralouphie/getallheaders",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ralouphie/getallheaders.git",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.1",
+ "phpunit/phpunit": "^5 || ^6.5"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/getallheaders.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ralph Khattar",
+ "email": "ralph.khattar@gmail.com"
+ }
+ ],
+ "description": "A polyfill for getallheaders.",
+ "support": {
+ "issues": "https://github.com/ralouphie/getallheaders/issues",
+ "source": "https://github.com/ralouphie/getallheaders/tree/develop"
+ },
+ "time": "2019-03-08T08:55:37+00:00"
+ },
+ {
+ "name": "symfony/deprecation-contracts",
+ "version": "v3.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
+ "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.5-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "files": [
+ "function.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "A generic function and convention to trigger deprecation notices",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.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": "2024-04-18T09:32:20+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.30.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "0424dff1c58f028c451efff2045f5d92410bd540"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540",
+ "reference": "0424dff1c58f028c451efff2045f5d92410bd540",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-ctype": "*"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ }
+ },
+ "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.30.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": "2024-05-31T15:07:36+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.30.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c",
+ "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-mbstring": "*"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ }
+ },
+ "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.30.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": "2024-06-19T12:30:46+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "v1.30.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "77fa7995ac1b21ab60769b7323d600a991a90433"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433",
+ "reference": "77fa7995ac1b21ab60769b7323d600a991a90433",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "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.30.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": "2024-05-31T15:07:36+00:00"
+ },
{
"name": "visus/cuid2",
"version": "4.1.0",
@@ -164,11 +2301,95 @@
"source": "https://github.com/visus-io/php-cuid2/tree/4.1.0"
},
"time": "2024-05-14T13:23:35+00:00"
+ },
+ {
+ "name": "vlucas/phpdotenv",
+ "version": "v5.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/vlucas/phpdotenv.git",
+ "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4",
+ "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4",
+ "shasum": ""
+ },
+ "require": {
+ "ext-pcre": "*",
+ "graham-campbell/result-type": "^1.1.2",
+ "php": "^7.2.5 || ^8.0",
+ "phpoption/phpoption": "^1.9.2",
+ "symfony/polyfill-ctype": "^1.24",
+ "symfony/polyfill-mbstring": "^1.24",
+ "symfony/polyfill-php80": "^1.24"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "ext-filter": "*",
+ "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2"
+ },
+ "suggest": {
+ "ext-filter": "Required to use the boolean validator."
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": true
+ },
+ "branch-alias": {
+ "dev-master": "5.6-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Dotenv\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Vance Lucas",
+ "email": "vance@vancelucas.com",
+ "homepage": "https://github.com/vlucas"
+ }
+ ],
+ "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
+ "keywords": [
+ "dotenv",
+ "env",
+ "environment"
+ ],
+ "support": {
+ "issues": "https://github.com/vlucas/phpdotenv/issues",
+ "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-11-12T22:43:29+00:00"
}
],
"packages-dev": [],
"aliases": [],
- "minimum-stability": "dev",
+ "minimum-stability": "beta",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
diff --git a/src/convert-from-v3.php b/src/convert-from-v3.php
new file mode 100644
index 0000000..d499de7
--- /dev/null
+++ b/src/convert-from-v3.php
@@ -0,0 +1,3 @@
+ $_ENV['AUTH0_DOMAIN'],
+ 'clientId' => $_ENV['AUTH0_CLIENT_ID'],
+ 'clientSecret' => $_ENV['AUTH0_CLIENT_SECRET'],
+ 'cookieSecret' => $_ENV['AUTH0_COOKIE_SECRET']
+ ]);
+ }
+ return self::$auth0;
+ }
+
+ /**
+ * Initiate a log on with Auth0
+ *
+ * @throws ConfigurationException If the Auth0 client is not configured correctly
+ */
+ public static function logOn(): never
+ {
+ $params = match (true) {
+ $_SERVER['PHP_SELF'] <> '/user/log-on.php' => ['redirectUri' => $_SERVER['PHP_SELF']],
+ default => []
+ };
+
+ self::client()->clear();
+ header('Location: ' . self::client()->login($_ENV['AUTH0_BASE_URL'] . '/user/log-on/success', $params));
+ exit;
+ }
+
+ /**
+ * Log off from this application and Auth0
+ *
+ * @throws ConfigurationException If the Auth0 client is not configured correctly
+ */
+ public static function logOff(): never
+ {
+ session_destroy();
+ header('Location: ' . self::client()->logout($_ENV['AUTH0_BASE_URL']));
+ exit;
+ }
+}
diff --git a/src/lib/Layout.php b/src/lib/Layout.php
new file mode 100644
index 0000000..e5fdf96
--- /dev/null
+++ b/src/lib/Layout.php
@@ -0,0 +1,117 @@
+
$title « myPrayerJournal ";
+ } else {
+ echo <<
+
+
+
+
+ $title « myPrayerJournal
+
+
+
+
+ HEAD;
+ }
+ }
+
+ private static function navLink(string $url, string $text): void
+ {
+ $classAttr = match (true) {
+ str_starts_with($_SERVER['PHP_SELF'], $url) => ['class' => 'is-active-route'],
+ default => []
+ };
+ echo '';
+ page_link($url, $text, $classAttr);
+ }
+
+ /**
+ * The default navigation bar, which will load the items on page load, and whenever a refresh event occurs
+ */
+ public static function navBar(): void
+ { ?>
+
+ my
Prayer Journal ',
+ ['class' => 'navbar-brand']); ?>
+
+
+ '',
+ str_starts_with($rev, '0-') => substr($rev, 1),
+ default => ".$rev"
+ };
+ return "v$major$minor$rev";
+ }
+
+ /**
+ * Create the footer
+ */
+ public static function htmlFoot(): void
+ { ?>
+ notes : [];
+ }
}
diff --git a/src/lib/Request.php b/src/lib/Request.php
index 88b301a..58fe2ef 100644
--- a/src/lib/Request.php
+++ b/src/lib/Request.php
@@ -2,6 +2,7 @@
namespace MyPrayerJournal;
+use BitBadger\PDODocument\{DocumentException, Find};
use Exception;
use Visus\Cuid2\Cuid2;
@@ -30,4 +31,17 @@ class Request
$this->id = (new Cuid2())->toString();
}
}
+
+ /**
+ * Find a request by its ID
+ *
+ * @param string $id The ID of the request
+ * @return Request|false The request if it is found and belongs to the current user, false if not
+ * @throws DocumentException If any is encountered
+ */
+ public static function byId(string $id): Request|false
+ {
+ $req = Find::byId(Table::REQUEST, $id, self::class);
+ return ($req && $req->userId == $_SESSION['user_id']) ? $req : false;
+ }
}
diff --git a/src/lib/Table.php b/src/lib/Table.php
new file mode 100644
index 0000000..841cf7d
--- /dev/null
+++ b/src/lib/Table.php
@@ -0,0 +1,12 @@
+
+
+ Documentation
+
+ About myPrayerJournal
+ Journaling has a long history; it helps people remember what happened, and the act of writing helps people think
+ about what happened and process it. A prayer journal is not a new concept; it helps you keep track of the
+ requests for which you’ve prayed, you can use it to pray over things repeatedly, and you can write the
+ result when the answer comes (or it was “no”) .
+
myPrayerJournal was borne of out of a personal desire
+ Daniel had to have something that would
+ help him with his prayer life. When it’s time to pray, it’s not really time to use an app, so the
+ design goal here is to keep it simple and unobtrusive. It will also help eliminate some of the downsides to a
+ paper prayer journal, like not remembering whether you’ve prayed for a request, or running out of room to
+ write another update on one.
+
+
Signing Up
+ myPrayerJournal uses login services using Google or Microsoft accounts. The only information the application
+ stores in its database is your user ID token it receives from these services, so there are no permissions you
+ should have to accept from these provider other than establishing that you can log on with that account. Because
+ of this, you’ll want to pick the same one each time; the tokens between the two accounts are different,
+ even if you use the same e-mail address to log on to both.
+
+
Your Prayer Journal
+ Your current requests will be presented in columns (usually three, but it could be more or less, depending on the
+ size of your screen or device). Each request is in its own card, and the buttons at the top of each card apply
+ to that request. The last line of each request also tells you how long it has been since anything has been done
+ on that request. Any time you see something like “a few minutes ago,” you can hover over that to see
+ the actual date/time the action was taken.
+
+
Adding a Request
+ To add a request, click the “Add a New Request” button at the top of your journal. Then, enter the
+ text of the request as you see fit; there is no right or wrong way, and you are the only person who will see the
+ text you enter. When you save the request, it will go to the bottom of the list of requests.
+
+
Setting Request Recurrence
+ When you add or update a request, you can choose whether requests go to the bottom of the journal once they have
+ been marked “Prayed” or whether they will reappear after a delay. You can set recurrence in terms of
+ hours, days, or weeks, but it cannot be longer than 365 days. If you decide you want a request to reappear
+ sooner, you can skip the current delay; click the “Active” menu link, find the request in the list
+ (likely near the bottom), and click the “Show Now” button.
+
+
Praying for Requests
+ The first button for each request has a checkmark icon; clicking this button will mark the request as
+ “Prayed” and move it to the bottom of the list (or off, if you’ve set a recurrence period for
+ the request). This allows you, if you’re praying through your requests, to start at the top left (with the
+ request that it’s been the longest since you’ve prayed) and click the button as you pray; when the
+ request move below or away, the next-least-recently-prayed request will take the top spot.
+
+
Editing Requests
+ The second button for each request has a pencil icon. This allows you to edit the text of the request, pretty
+ much the same way you entered it; it starts with the current text, and you can add to it, modify it, or
+ completely replace it. By default, updates will go in with an “Updated” status; you have the option
+ to also mark this update as “Prayed” or “Answered”. Answered requests will drop off the
+ journal list.
+
+
Adding Notes
+ The third button for each request has an icon that looks like a speech bubble with lines on it; this lets you
+ record notes about the request. If there is something you want to record that doesn’t change the text of
+ the request, this is the place to do it. For example, you may be praying for a long-term health issue, and that
+ person tells you that their status is the same; or, you may want to record something God said to you while you
+ were praying for that request."
+
+
Snoozing Requests
+ There may be a time when a request does not need to appear. The fourth button, with the clock icon, allows you to
+ snooze requests until the day you specify. Additionally, if you have any snoozed requests, a
+ “Snoozed” menu item will appear next to the “Journal” one; this page allows you to see
+ what requests are snoozed, and return them to your journal by canceling the snooze.
+
+
Viewing a Request and Its History
+ myPrayerJournal tracks all actions related to a request; from the “Active” and “Answered”
+ menu links (and “Snoozed”, if it’s showing), there is a “View Full Request”
+ button. That page will show the current text of the request; how many times it has been marked as prayed; how
+ long it has been an active request; and a log of all updates, prayers, and notes you have recorded. That log is
+ listed from most recent to least recent; if you want to read it chronologically, press the “End” key
+ on your keyboard and read it from the bottom up.
+
The “Active” link will show all requests that have not yet been marked answered, including snoozed
+ and recurring requests. If requests are snoozed, or in a recurrence period off the journal, there will be a
+ button where you can return the request to the list (either “Cancel Snooze” or “Show
+ Now”). The “Answered” link shows all requests that have been marked answered. The
+ “Snoozed” link only shows snoozed requests.
+
+
Final Notes
+
+ If you encounter errors, please
+ file an
+ issue (or e-mail Daniel if
+ you do not have an account on that server) with as much detail as possible. You can also provide
+ suggestions, or browse the list of currently open issues.
+ Prayer requests and their history are securely backed up nightly along with other Bit Badger Solutions data.
+ Prayer changes things - most of all, the one doing the praying. I pray that this tool enables you to deepen
+ and strengthen your prayer life.
+
+
+page_head('Welcome'); ?>
myPrayerJournal is a place where individuals can record their prayer requests, record that they prayed for them,
@@ -12,4 +12,4 @@ html_head('Welcome'); ?>
On” link above, and log on with either a Microsoft or Google account. You can also learn more about the
site at the “Docs” link, also above.
+
+ Privacy Policy
+ as of May 21st , 2018
+ The nature of the service is one where privacy is a must. The items below will help you understand the data we
+ collect, access, and store on your behalf as you use this service.
+
+
+
+
Third Party Services
+
+ myPrayerJournal utilizes a third-party authentication and identity provider. You should familiarize
+ yourself with the privacy policy for
+ Auth0 , as well as your chosen
+ provider
+ (Microsoft
+ or Google ).
+
+
+
What We Collect
+
Identifying Data
+
+ The only identifying data myPrayerJournal stores is the subscriber (“sub”) field
+ from the token we receive from Auth0, once you have signed in through their hosted service. All
+ information is associated with you via this field.
+ While you are signed in, within your browser, the service has access to your first and last
+ names, along with a URL to the profile picture (provided by your selected identity provider).
+ This information is not transmitted to the server, and is removed when “Log Off” is
+ clicked.
+
+
User Provided Data
+
+ myPrayerJournal stores the information you provide, including the text of prayer requests,
+ updates, and notes; and the date/time when certain actions are taken.
+
+
+
+
How Your Data Is Accessed / Secured
+
+ Your provided data is returned to you, as required, to display your journal or your answered
+ requests. On the server, it is stored in a controlled-access database.
+ Your data is backed up, along with other Bit Badger Solutions hosted systems, in a rolling
+ manner; backups are preserved for the prior 7 days, and backups from the 1st and
+ 15th are preserved for 3 months. These backups are stored in a private cloud data
+ repository.
+ The data collected and stored is the absolute minimum necessary for the functionality of the
+ service. There are no plans to “monetize” this service, and storing the minimum
+ amount of information means that the data we have is not interesting to purchasers (or those who
+ may have more nefarious purposes).
+ Access to servers and backups is strictly controlled and monitored for unauthorized access
+ attempts.
+
+
+
+
Removing Your Data
+
+ At any time, you may choose to discontinue using this service. Both Microsoft and Google provide
+ ways to revoke access from this application. However, if you want your data removed from the
+ database, please contact daniel at bitbadger.solutions (via e-mail, replacing at with @) prior to
+ doing so, to ensure we can determine which subscriber ID belongs to you.
+
+
+
+
+
+ Terms of Service
+ as of May 21st , 2018
+
+
+
+
1. Acceptance of Terms
+
+ By accessing this web site, you are agreeing to be bound by these Terms and Conditions, and that you
+ are responsible to ensure that your use of this site complies with all applicable laws. Your
+ continued use of this site implies your acceptance of these terms.
+
+
+
2. Description of Service and Registration
+
+ myPrayerJournal is a service that allows individuals to enter and amend their prayer requests. It
+ requires no registration by itself, but access is granted based on a successful login with an
+ external identity provider. See
+ for details on how that information is accessed and stored.
+
+
+
3. Third Party Services
+
+ This service utilizes a third-party service provider for identity management. Review the terms of
+ service for Auth0 , as well as those
+ for the selected authorization provider
+ (Microsoft
+ or Google ).
+
+
+
4. Liability
+
+ This service is provided “as is”, and no warranty (express or implied) exists. The
+ service and its developers may not be held liable for any damages that may arise through the use of
+ this service.
+
+
+
5. Updates to Terms
+
+ These terms and conditions may be updated at any time, and this service does not have the capability
+ to notify users when these change. The date at the top of the page will be updated when any of the
+ text of these terms is updated."
+
+
+
+
+ You may also wish to review our to learn how we
+ handle your data.
+
exchange($_ENV['AUTH0_BASE_URL'] . '/user/log-on/success');
+
+// TODO: get the possible redirect URL
+header('Location: /');
+exit();
diff --git a/src/start.php b/src/start.php
index c115c0a..d3276b3 100644
--- a/src/start.php
+++ b/src/start.php
@@ -1,55 +1,53 @@
-
-
-
-
- =$title?> « myPrayerJournal
-
-
-
- load();
+session_start();
+
+$auth0_session = Auth::client()->getCredentials();
+if (!is_null($auth0_session)) {
+ $_SESSION['user_id'] = $auth0_session->user['sub'];
+}
+
+/**
+ * Is this an htmx request?
+ *
+ * @return bool True if this is an htmx request, false if not
+ */
+function is_htmx(): bool
+{
+ return key_exists('HTTP_HX_REQUEST', $_SERVER) && !key_exists('HTTP_HX_HISTORY_RESTORE_REQUEST', $_SERVER);
}
function page_link(string $href, string $text, array $attrs = []): void
-{ ?>
- $value) echo " $key=\"" . htmlspecialchars($value) . "\""; ?>>=$text?> $value) echo " $key=\"" . htmlspecialchars($value) . "\"";
+ echo ">$text";
}
-function html_foot(): void
+function page_head(string $title): void
{
- $version = MPJ_VERSION;
- while (!str_ends_with($version, '.0')) $version = substr($version, 0, strlen($version) - 2); ?>
- ';
+ if (!is_htmx()) echo '';
+ Layout::navBar();
+ echo '';
+}
+
+function page_foot(): void
+{
+ echo ' ';
+ if (!is_htmx()) {
+ echo ' ';
+ Layout::htmlFoot();
+ }
+ echo '';
+}