From f1dd1d1e181c08db13b144c9ee23a2f88cdd6256 Mon Sep 17 00:00:00 2001
From: Akhil Anand
Date: Thu, 5 Oct 2023 16:22:40 +0530
Subject: [PATCH 001/138] feature-5232-Security-Scans-OSV-Scanner
---
.github/workflows/osv-scanner.yml | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
create mode 100644 .github/workflows/osv-scanner.yml
diff --git a/.github/workflows/osv-scanner.yml b/.github/workflows/osv-scanner.yml
new file mode 100644
index 0000000000..e4ee26c79b
--- /dev/null
+++ b/.github/workflows/osv-scanner.yml
@@ -0,0 +1,27 @@
+name: OSV Scanner
+
+on:
+ pull_request:
+ push:
+
+jobs:
+ OSV-Scanner:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+
+ - name: Install Golang
+ uses: actions/setup-go@v4
+ with:
+ go-version: '1.19'
+
+ - name: Install OSV Scanner
+ run: |
+ go install github.com/google/osv-scanner/cmd/osv-scanner@latest
+
+ - name: Scan for Vulnerabilities
+ run: |
+ osv-scanner -r .
From 62ee10493b66174584eea4a203102f86e5983313 Mon Sep 17 00:00:00 2001
From: shimon
Date: Thu, 15 Feb 2024 10:10:01 +0200
Subject: [PATCH 002/138] usage sms per country code count
---
app/init.php | 1 +
composer.json | 3 +-
composer.lock | 258 +++++++++++++-------
src/Appwrite/Event/Usage.php | 1 -
src/Appwrite/Platform/Workers/Messaging.php | 13 +
5 files changed, 186 insertions(+), 90 deletions(-)
diff --git a/app/init.php b/app/init.php
index 80c3670eec..8a407c6eda 100644
--- a/app/init.php
+++ b/app/init.php
@@ -196,6 +196,7 @@ const FUNCTION_ALLOWLIST_HEADERS_RESPONSE = ['content-type', 'content-length'];
const METRIC_TEAMS = 'teams';
const METRIC_USERS = 'users';
const METRIC_MESSAGES = 'messages';
+const METRIC_MESSAGES_COUNTRY_CODE = '{countryCode}.messages';
const METRIC_SESSIONS = 'sessions';
const METRIC_DATABASES = 'databases';
const METRIC_COLLECTIONS = 'collections';
diff --git a/composer.json b/composer.json
index 41baf29d9a..2722df51ad 100644
--- a/composer.json
+++ b/composer.json
@@ -74,7 +74,8 @@
"chillerlan/php-qrcode": "4.3.4",
"adhocore/jwt": "1.1.2",
"webonyx/graphql-php": "14.11.*",
- "league/csv": "9.7.1"
+ "league/csv": "9.7.1",
+ "giggsey/libphonenumber-for-php-lite": "8.13.30"
},
"repositories": [
{
diff --git a/composer.lock b/composer.lock
index ca39c7d084..450ecd42fb 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "fd03f97115d752d1a94b533ccf570109",
+ "content-hash": "e9c18e6bda4856800ed1fed582c5766e",
"packages": [
{
"name": "adhocore/jwt",
@@ -402,6 +402,88 @@
],
"time": "2022-09-10T18:51:20+00:00"
},
+ {
+ "name": "giggsey/libphonenumber-for-php-lite",
+ "version": "8.13.30",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/giggsey/libphonenumber-for-php-lite.git",
+ "reference": "7b205dac7d90a791f7bbae77f2ced2c90b0c5df1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php-lite/zipball/7b205dac7d90a791f7bbae77f2ced2c90b0c5df1",
+ "reference": "7b205dac7d90a791f7bbae77f2ced2c90b0c5df1",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.0",
+ "symfony/polyfill-mbstring": "^1.17"
+ },
+ "conflict": {
+ "giggsey/libphonenumber-for-php": "*"
+ },
+ "require-dev": {
+ "ext-dom": "*",
+ "friendsofphp/php-cs-fixer": "^3.12",
+ "infection/infection": "^0.26.16",
+ "pear/pear-core-minimal": "^1.10.11",
+ "pear/pear_exception": "^1.0.2",
+ "pear/versioncontrol_git": "^0.5",
+ "phing/phing": "^2.17.4",
+ "phpstan/extension-installer": "^1.2",
+ "phpstan/phpstan": "^1.8",
+ "phpstan/phpstan-phpunit": "^1.2",
+ "phpunit/phpunit": "^9.5.26",
+ "symfony/console": "^6.0"
+ },
+ "suggest": {
+ "giggsey/libphonenumber-for-php": "Use libphonenumber-for-php for geocoding, carriers, timezones and matching"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "libphonenumber\\": "src/"
+ },
+ "exclude-from-classmap": [
+ "/src/data/",
+ "/src/carrier/data/",
+ "/src/geocoding/data/",
+ "/src/timezone/data/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Joshua Gigg",
+ "email": "giggsey@gmail.com",
+ "homepage": "https://giggsey.com/"
+ }
+ ],
+ "description": "A lite version of giggsey/libphonenumber-for-php, which is a PHP Port of Google's libphonenumber",
+ "homepage": "https://github.com/giggsey/libphonenumber-for-php-lite",
+ "keywords": [
+ "geocoding",
+ "geolocation",
+ "libphonenumber",
+ "mobile",
+ "phonenumber",
+ "validation"
+ ],
+ "support": {
+ "issues": "https://github.com/giggsey/libphonenumber-for-php-lite/issues",
+ "source": "https://github.com/giggsey/libphonenumber-for-php-lite"
+ },
+ "time": "2024-02-09T12:16:33+00:00"
+ },
{
"name": "jean85/pretty-package-versions",
"version": "2.0.5",
@@ -813,6 +895,86 @@
],
"time": "2023-03-06T14:43:22+00:00"
},
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.29.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
+ "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
+ "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.29.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-01-29T20:11:03+00:00"
+ },
{
"name": "symfony/polyfill-php80",
"version": "v1.29.0",
@@ -2417,16 +2579,16 @@
"packages-dev": [
{
"name": "appwrite/sdk-generator",
- "version": "0.36.2",
+ "version": "0.36.3",
"source": {
"type": "git",
"url": "https://github.com/appwrite/sdk-generator.git",
- "reference": "0aa67479d75f0e0cb7b60454031534d7f0abaece"
+ "reference": "8d308f7f492545da3e51ea5b91c0778392c40b93"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/0aa67479d75f0e0cb7b60454031534d7f0abaece",
- "reference": "0aa67479d75f0e0cb7b60454031534d7f0abaece",
+ "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/8d308f7f492545da3e51ea5b91c0778392c40b93",
+ "reference": "8d308f7f492545da3e51ea5b91c0778392c40b93",
"shasum": ""
},
"require": {
@@ -2462,9 +2624,9 @@
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
"support": {
"issues": "https://github.com/appwrite/sdk-generator/issues",
- "source": "https://github.com/appwrite/sdk-generator/tree/0.36.2"
+ "source": "https://github.com/appwrite/sdk-generator/tree/0.36.3"
},
- "time": "2024-01-19T01:04:35+00:00"
+ "time": "2024-02-14T06:33:38+00:00"
},
{
"name": "doctrine/deprecations",
@@ -4846,86 +5008,6 @@
],
"time": "2024-01-29T20:11:03+00:00"
},
- {
- "name": "symfony/polyfill-mbstring",
- "version": "v1.29.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
- "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
- "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.29.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-01-29T20:11:03+00:00"
- },
{
"name": "textalk/websocket",
"version": "1.5.7",
@@ -5124,5 +5206,5 @@
"platform-overrides": {
"php": "8.0"
},
- "plugin-api-version": "2.6.0"
+ "plugin-api-version": "2.2.0"
}
diff --git a/src/Appwrite/Event/Usage.php b/src/Appwrite/Event/Usage.php
index ded276e166..5054a5f0eb 100644
--- a/src/Appwrite/Event/Usage.php
+++ b/src/Appwrite/Event/Usage.php
@@ -59,7 +59,6 @@ class Usage extends Event
public function trigger(): string|bool
{
$client = new Client($this->queue, $this->connection);
-
return $client->enqueue([
'project' => $this->getProject(),
'reduce' => $this->reduce,
diff --git a/src/Appwrite/Platform/Workers/Messaging.php b/src/Appwrite/Platform/Workers/Messaging.php
index 1f3e29c8d5..95c2b4b8de 100644
--- a/src/Appwrite/Platform/Workers/Messaging.php
+++ b/src/Appwrite/Platform/Workers/Messaging.php
@@ -17,6 +17,7 @@ use Utopia\Messaging\Adapters\SMS\Vonage;
use Utopia\Platform\Action;
use Utopia\Queue\Message;
use Appwrite\Event\Usage;
+use libphonenumber\PhoneNumberUtil;
class Messaging extends Action
{
@@ -119,6 +120,18 @@ class Messaging extends Action
try {
$sms->send($message);
+ $phoneUtil = PhoneNumberUtil::getInstance();
+
+ try {
+ $countryCode = $phoneUtil
+ ->parse($payload['recipient'])
+ ->getCountryCode();
+
+ $queueForUsage->addMetric(str_replace('{countryCode}', $countryCode, METRIC_MESSAGES_COUNTRY_CODE), 1);
+ } catch (\libphonenumber\NumberParseException $e) {
+ console::error("Error parsing number: " . $e->getMessage());
+ }
+
$queueForUsage
->setProject($project)
->addMetric(METRIC_MESSAGES, 1)
From 44ead217ac1c9b9bf6b0e91ed536f75071ea5ed0 Mon Sep 17 00:00:00 2001
From: Shimon Newman
Date: Thu, 15 Feb 2024 16:28:02 +0200
Subject: [PATCH 003/138] Update src/Appwrite/Platform/Workers/Messaging.php
Co-authored-by: Christy Jacob
---
src/Appwrite/Platform/Workers/Messaging.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Appwrite/Platform/Workers/Messaging.php b/src/Appwrite/Platform/Workers/Messaging.php
index 95c2b4b8de..cf11077f70 100644
--- a/src/Appwrite/Platform/Workers/Messaging.php
+++ b/src/Appwrite/Platform/Workers/Messaging.php
@@ -129,7 +129,7 @@ class Messaging extends Action
$queueForUsage->addMetric(str_replace('{countryCode}', $countryCode, METRIC_MESSAGES_COUNTRY_CODE), 1);
} catch (\libphonenumber\NumberParseException $e) {
- console::error("Error parsing number: " . $e->getMessage());
+ Console::error("Error parsing number: " . $e->getMessage());
}
$queueForUsage
From ad44c7a430c1dd2426b387cc891dac334ee16893 Mon Sep 17 00:00:00 2001
From: shimon
Date: Thu, 15 Feb 2024 16:43:58 +0200
Subject: [PATCH 004/138] Addressed comments
---
src/Appwrite/Platform/Workers/Messaging.php | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/Appwrite/Platform/Workers/Messaging.php b/src/Appwrite/Platform/Workers/Messaging.php
index cf11077f70..4810669cf4 100644
--- a/src/Appwrite/Platform/Workers/Messaging.php
+++ b/src/Appwrite/Platform/Workers/Messaging.php
@@ -3,6 +3,7 @@
namespace Appwrite\Platform\Workers;
use Exception;
+use libphonenumber\NumberParseException;
use Utopia\App;
use Utopia\CLI\Console;
use Utopia\Database\Document;
@@ -128,7 +129,7 @@ class Messaging extends Action
->getCountryCode();
$queueForUsage->addMetric(str_replace('{countryCode}', $countryCode, METRIC_MESSAGES_COUNTRY_CODE), 1);
- } catch (\libphonenumber\NumberParseException $e) {
+ } catch (NumberParseException $e) {
Console::error("Error parsing number: " . $e->getMessage());
}
From 050f50118668f43d0bf9c8d67aecc1f20339eb24 Mon Sep 17 00:00:00 2001
From: loks0n <22452787+loks0n@users.noreply.github.com>
Date: Mon, 19 Feb 2024 09:11:15 +0000
Subject: [PATCH 005/138] fix: templates copy hidden files
---
src/Appwrite/Platform/Workers/Builds.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Appwrite/Platform/Workers/Builds.php b/src/Appwrite/Platform/Workers/Builds.php
index d23cfbff94..b61331b4b4 100644
--- a/src/Appwrite/Platform/Workers/Builds.php
+++ b/src/Appwrite/Platform/Workers/Builds.php
@@ -252,7 +252,7 @@ class Builds extends Action
Console::execute('mkdir -p ' . $tmpDirectory . '/' . $rootDirectory, '', $stdout, $stderr);
// Merge template into user repo
- Console::execute('cp -rfn ' . $tmpTemplateDirectory . '/' . $templateRootDirectory . '/* ' . $tmpDirectory . '/' . $rootDirectory, '', $stdout, $stderr);
+ Console::execute('rsync -av --exclude \'.git\' ' . $tmpTemplateDirectory . '/' . $templateRootDirectory . '/ ' . $tmpDirectory . '/' . $rootDirectory, '', $stdout, $stderr);
// Commit and push
$exit = Console::execute('git config --global user.email "team@appwrite.io" && git config --global user.name "Appwrite" && cd ' . $tmpDirectory . ' && git add . && git commit -m "Create \'' . \escapeshellcmd($function->getAttribute('name', '')) . '\' function" && git push origin ' . \escapeshellcmd($branchName), '', $stdout, $stderr);
From 5b00737b55a81dd015b9a38c33ad4e5755281fc8 Mon Sep 17 00:00:00 2001
From: Shimon Newman
Date: Wed, 6 Mar 2024 18:09:13 +0100
Subject: [PATCH 006/138] Update app/init.php
Co-authored-by: Eldad A. Fux
---
app/init.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/init.php b/app/init.php
index 8a407c6eda..ebd790b065 100644
--- a/app/init.php
+++ b/app/init.php
@@ -196,7 +196,7 @@ const FUNCTION_ALLOWLIST_HEADERS_RESPONSE = ['content-type', 'content-length'];
const METRIC_TEAMS = 'teams';
const METRIC_USERS = 'users';
const METRIC_MESSAGES = 'messages';
-const METRIC_MESSAGES_COUNTRY_CODE = '{countryCode}.messages';
+const METRIC_MESSAGES_COUNTRY = '{countryCode}.messages';
const METRIC_SESSIONS = 'sessions';
const METRIC_DATABASES = 'databases';
const METRIC_COLLECTIONS = 'collections';
From 271db5ce69c5f57705fe2f7dbba513c7d1a32eae Mon Sep 17 00:00:00 2001
From: Damodar Lohani
Date: Sun, 10 Mar 2024 02:21:50 +0000
Subject: [PATCH 007/138] react native getting started
---
docs/sdks/react-native/CHANGELOG.md | 1 +
docs/sdks/react-native/GETTING_STARTED.md | 79 +++++++++++++++++++++++
2 files changed, 80 insertions(+)
create mode 100644 docs/sdks/react-native/CHANGELOG.md
create mode 100644 docs/sdks/react-native/GETTING_STARTED.md
diff --git a/docs/sdks/react-native/CHANGELOG.md b/docs/sdks/react-native/CHANGELOG.md
new file mode 100644
index 0000000000..21fbe5456c
--- /dev/null
+++ b/docs/sdks/react-native/CHANGELOG.md
@@ -0,0 +1 @@
+# Change log
\ No newline at end of file
diff --git a/docs/sdks/react-native/GETTING_STARTED.md b/docs/sdks/react-native/GETTING_STARTED.md
new file mode 100644
index 0000000000..4b0fb082da
--- /dev/null
+++ b/docs/sdks/react-native/GETTING_STARTED.md
@@ -0,0 +1,79 @@
+
+## Getting Started
+
+### Add your Platform
+For you to init your SDK and interact with Appwrite services you need to add a web platform to your project. To add a new platform, go to your Appwrite console, choose the project you created in the step before and click the 'Add Platform' button.
+
+From the options, choose to add a **Web** platform and add your client app hostname. By adding your hostname to your project platform you are allowing cross-domain communication between your project and the Appwrite API.
+
+## Setup
+
+On `index.js` add import for `react-native-url-polyfill`
+
+```
+import 'react-native-url-polyfill/auto'
+```
+
+> If you are building for iOS, don't forget to install pods
+> `cd ios && pod install && cd ..`
+
+### Init your SDK
+Initialize your SDK with your Appwrite server API endpoint and project ID which can be found in your project settings page.
+
+```js
+import { Client } from 'react-native-appwrite';
+// Init your Web SDK
+const client = new Client();
+
+client
+ .setEndpoint('http://localhost/v1') // Your Appwrite Endpoint
+ .setProject('455x34dfkj') // Your project ID
+ .setPlatform('com.example.myappwriteapp') // YOUR application ID
+;
+```
+
+### Make Your First Request
+Once your SDK object is set, access any of the Appwrite services and choose any request to send. Full documentation for any service method you would like to use can be found in your SDK documentation or in the [API References](https://appwrite.io/docs) section.
+
+```js
+const account = new Account(client);
+
+// Register User
+account.create(ID.unique(), 'me@example.com', 'password', 'Jane Doe')
+ .then(function (response) {
+ console.log(response);
+ }, function (error) {
+ console.log(error);
+ });
+
+```
+
+### Full Example
+```js
+import { Client, Account } from 'react-native-appwrite';
+// Init your Web SDK
+const client = new Client();
+
+client
+ .setEndpoint('http://localhost/v1') // Your Appwrite Endpoint
+ .setProject('455x34dfkj')
+ .setPlatform('com.example.myappwriteapp') // YOUR application ID
+;
+
+const account = new Account(client);
+
+// Register User
+account.create(ID.unique(), 'me@example.com', 'password', 'Jane Doe')
+ .then(function (response) {
+ console.log(response);
+ }, function (error) {
+ console.log(error);
+ });
+```
+
+### Learn more
+You can use the following resources to learn more and get help
+- 🚀 [Getting Started Tutorial](https://appwrite.io/docs/getting-started-for-react-native)
+- 📜 [Appwrite Docs](https://appwrite.io/docs)
+- 💬 [Discord Community](https://appwrite.io/discord)
+- 🚂 [Appwrite React Native Playground](https://github.com/appwrite/playground-for-react-native)
\ No newline at end of file
From c11a1af99ba9139be5a4d3bfb66b722ac9dcb712 Mon Sep 17 00:00:00 2001
From: Damodar Lohani
Date: Sun, 10 Mar 2024 02:49:45 +0000
Subject: [PATCH 008/138] react native SDK
---
app/config/platforms.php | 18 ++++++++++++++++++
composer.json | 2 +-
composer.lock | 18 ++++++++++--------
src/Appwrite/Platform/Tasks/SDKs.php | 5 +++++
4 files changed, 34 insertions(+), 9 deletions(-)
diff --git a/app/config/platforms.php b/app/config/platforms.php
index deb486ce1f..d54a4ae74f 100644
--- a/app/config/platforms.php
+++ b/app/config/platforms.php
@@ -135,6 +135,24 @@ return [
'Java' => 'java',
],
],
+ [
+ 'key' => 'react-native',
+ 'name' => 'React Native',
+ 'version' => '0.2.0',
+ 'url' => 'https://github.com/appwrite/sdk-for-react-native',
+ 'package' => 'https://npmjs.com/package/react-native-appwrite',
+ 'enabled' => true,
+ 'beta' => false,
+ 'dev' => false,
+ 'hidden' => false,
+ 'family' => APP_PLATFORM_CLIENT,
+ 'prism' => 'javascript',
+ 'source' => \realpath(__DIR__ . '/../sdks/client-react-native'),
+ 'gitUrl' => 'git@github.com:appwrite/sdk-for-react-native.git',
+ 'gitRepoName' => 'sdk-for-react-native',
+ 'gitUserName' => 'appwrite',
+ 'gitBranch' => 'dev',
+ ],
[
'key' => 'graphql',
'name' => 'GraphQL',
diff --git a/composer.json b/composer.json
index d2984b5802..111b769ce7 100644
--- a/composer.json
+++ b/composer.json
@@ -79,7 +79,7 @@
},
"require-dev": {
"ext-fileinfo": "*",
- "appwrite/sdk-generator": "0.37.*",
+ "appwrite/sdk-generator": "dev-feat-react-native-sdk",
"phpunit/phpunit": "9.5.20",
"swoole/ide-helper": "5.0.2",
"textalk/websocket": "1.5.7",
diff --git a/composer.lock b/composer.lock
index 046fc70983..6d223cb1b8 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "92244aad23e8d26c034633397692c1fc",
+ "content-hash": "d7086b9ec8459efdacade57e365f2a24",
"packages": [
{
"name": "adhocore/jwt",
@@ -2731,16 +2731,16 @@
"packages-dev": [
{
"name": "appwrite/sdk-generator",
- "version": "0.37.7",
+ "version": "dev-feat-react-native-sdk",
"source": {
"type": "git",
"url": "https://github.com/appwrite/sdk-generator.git",
- "reference": "c9c07e8d96b80f62507bbb5ef90fa0769e560621"
+ "reference": "9f5760babff345f2aa3fa97b3debfbf27f67b9a9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/c9c07e8d96b80f62507bbb5ef90fa0769e560621",
- "reference": "c9c07e8d96b80f62507bbb5ef90fa0769e560621",
+ "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/9f5760babff345f2aa3fa97b3debfbf27f67b9a9",
+ "reference": "9f5760babff345f2aa3fa97b3debfbf27f67b9a9",
"shasum": ""
},
"require": {
@@ -2776,9 +2776,9 @@
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
"support": {
"issues": "https://github.com/appwrite/sdk-generator/issues",
- "source": "https://github.com/appwrite/sdk-generator/tree/0.37.7"
+ "source": "https://github.com/appwrite/sdk-generator/tree/feat-react-native-sdk"
},
- "time": "2024-03-09T16:57:18+00:00"
+ "time": "2024-03-10T02:17:48+00:00"
},
{
"name": "doctrine/deprecations",
@@ -5446,7 +5446,9 @@
],
"aliases": [],
"minimum-stability": "stable",
- "stability-flags": [],
+ "stability-flags": {
+ "appwrite/sdk-generator": 20
+ },
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
diff --git a/src/Appwrite/Platform/Tasks/SDKs.php b/src/Appwrite/Platform/Tasks/SDKs.php
index d5168ea91c..396698af17 100644
--- a/src/Appwrite/Platform/Tasks/SDKs.php
+++ b/src/Appwrite/Platform/Tasks/SDKs.php
@@ -19,6 +19,7 @@ use Appwrite\SDK\Language\REST;
use Appwrite\SDK\Language\Ruby;
use Appwrite\SDK\Language\Swift;
use Appwrite\SDK\Language\Web;
+use Appwrite\SDK\Language\ReactNative;
use Appwrite\SDK\SDK;
use Appwrite\Spec\Swagger2;
use Utopia\CLI\Console;
@@ -159,6 +160,10 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
$config = new Flutter();
$config->setPackageName('appwrite');
break;
+ case 'react-native':
+ $config = new ReactNative();
+ $config->setNPMPackage('react-native-appwrite');
+ break;
case 'flutter-dev':
$config = new Flutter();
$config->setPackageName('appwrite_dev');
From f3927c3d201d1636825d53f0d1bfceec17a4511b Mon Sep 17 00:00:00 2001
From: Damodar Lohani
Date: Sun, 10 Mar 2024 03:57:54 +0000
Subject: [PATCH 009/138] fix linter
---
src/Appwrite/Platform/Tasks/SDKs.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Appwrite/Platform/Tasks/SDKs.php b/src/Appwrite/Platform/Tasks/SDKs.php
index 396698af17..9a82b48ff1 100644
--- a/src/Appwrite/Platform/Tasks/SDKs.php
+++ b/src/Appwrite/Platform/Tasks/SDKs.php
@@ -15,11 +15,11 @@ use Appwrite\SDK\Language\Kotlin;
use Appwrite\SDK\Language\Node;
use Appwrite\SDK\Language\PHP;
use Appwrite\SDK\Language\Python;
+use Appwrite\SDK\Language\ReactNative;
use Appwrite\SDK\Language\REST;
use Appwrite\SDK\Language\Ruby;
use Appwrite\SDK\Language\Swift;
use Appwrite\SDK\Language\Web;
-use Appwrite\SDK\Language\ReactNative;
use Appwrite\SDK\SDK;
use Appwrite\Spec\Swagger2;
use Utopia\CLI\Console;
From ef61879f5e10f43359f2606047f3d9357f23dece Mon Sep 17 00:00:00 2001
From: Damodar Lohani
Date: Sun, 10 Mar 2024 04:20:27 +0000
Subject: [PATCH 010/138] fix import
---
src/Appwrite/Platform/Tasks/SDKs.php | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/Appwrite/Platform/Tasks/SDKs.php b/src/Appwrite/Platform/Tasks/SDKs.php
index 9a82b48ff1..bc829bebfd 100644
--- a/src/Appwrite/Platform/Tasks/SDKs.php
+++ b/src/Appwrite/Platform/Tasks/SDKs.php
@@ -25,6 +25,7 @@ use Appwrite\Spec\Swagger2;
use Utopia\CLI\Console;
use Utopia\Config\Config;
use Utopia\Platform\Action;
+use Exception;
class SDKs extends Action
{
From e03102a112a3fb0c1b3cb146325f93e53398dcde Mon Sep 17 00:00:00 2001
From: Damodar Lohani
Date: Tue, 12 Mar 2024 08:34:54 +0545
Subject: [PATCH 011/138] Update docs/sdks/react-native/GETTING_STARTED.md
Co-authored-by: Vincent (Wen Yu) Ge
---
docs/sdks/react-native/GETTING_STARTED.md | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/docs/sdks/react-native/GETTING_STARTED.md b/docs/sdks/react-native/GETTING_STARTED.md
index 4b0fb082da..254beb0412 100644
--- a/docs/sdks/react-native/GETTING_STARTED.md
+++ b/docs/sdks/react-native/GETTING_STARTED.md
@@ -2,9 +2,15 @@
## Getting Started
### Add your Platform
-For you to init your SDK and interact with Appwrite services you need to add a web platform to your project. To add a new platform, go to your Appwrite console, choose the project you created in the step before and click the 'Add Platform' button.
+If this is your first time using Appwrite, create an account and create your first project.
-From the options, choose to add a **Web** platform and add your client app hostname. By adding your hostname to your project platform you are allowing cross-domain communication between your project and the Appwrite API.
+Then, under **Add a platform**, add a **Android app** or a **Apple app**. You can skip optional steps.
+
+#### iOS steps
+Add your app **name** and **Bundle ID**. You can find your **Bundle Identifier** in the **General** tab for your app's primary target in XCode.
+
+#### Android steps
+Add your app's **name** and **package name**, Your package name is generally the **applicationId** in your app-level [build.gradle](https://github.com/appwrite/playground-for-flutter/blob/master/android/app/build.gradle#L41) file.
## Setup
From cfd7534993247d7febc1663faceaa28d1fcc519c Mon Sep 17 00:00:00 2001
From: Damodar Lohani
Date: Tue, 12 Mar 2024 08:35:10 +0545
Subject: [PATCH 012/138] Update docs/sdks/react-native/GETTING_STARTED.md
Co-authored-by: Vincent (Wen Yu) Ge
---
docs/sdks/react-native/GETTING_STARTED.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/sdks/react-native/GETTING_STARTED.md b/docs/sdks/react-native/GETTING_STARTED.md
index 254beb0412..306f0952d3 100644
--- a/docs/sdks/react-native/GETTING_STARTED.md
+++ b/docs/sdks/react-native/GETTING_STARTED.md
@@ -79,7 +79,7 @@ account.create(ID.unique(), 'me@example.com', 'password', 'Jane Doe')
### Learn more
You can use the following resources to learn more and get help
-- 🚀 [Getting Started Tutorial](https://appwrite.io/docs/getting-started-for-react-native)
+- 🚀 [Getting Started Tutorial](https://appwrite.io/docs/quick-starts/react-native)```
- 📜 [Appwrite Docs](https://appwrite.io/docs)
- 💬 [Discord Community](https://appwrite.io/discord)
- 🚂 [Appwrite React Native Playground](https://github.com/appwrite/playground-for-react-native)
\ No newline at end of file
From 7c7d09514aa1f365a497094f5af8c3c9ceda186f Mon Sep 17 00:00:00 2001
From: Damodar Lohani
Date: Tue, 12 Mar 2024 08:35:17 +0545
Subject: [PATCH 013/138] Update docs/sdks/react-native/GETTING_STARTED.md
Co-authored-by: Vincent (Wen Yu) Ge
---
docs/sdks/react-native/GETTING_STARTED.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/sdks/react-native/GETTING_STARTED.md b/docs/sdks/react-native/GETTING_STARTED.md
index 306f0952d3..7e238bcf08 100644
--- a/docs/sdks/react-native/GETTING_STARTED.md
+++ b/docs/sdks/react-native/GETTING_STARTED.md
@@ -34,7 +34,7 @@ const client = new Client();
client
.setEndpoint('http://localhost/v1') // Your Appwrite Endpoint
.setProject('455x34dfkj') // Your project ID
- .setPlatform('com.example.myappwriteapp') // YOUR application ID
+ .setPlatform('com.example.myappwriteapp') // Your application ID or bundle ID.
;
```
From fcba25d004f5c4eef2fdf18866b9decbb16b4b7a Mon Sep 17 00:00:00 2001
From: shimon
Date: Sun, 7 Apr 2024 18:15:46 +0300
Subject: [PATCH 014/138] dummy commit
---
composer.json | 12 +-
composer.lock | 404 +++++++++++---------
src/Appwrite/Platform/Workers/Messaging.php | 27 +-
3 files changed, 247 insertions(+), 196 deletions(-)
diff --git a/composer.json b/composer.json
index 2722df51ad..1bc512f06c 100644
--- a/composer.json
+++ b/composer.json
@@ -49,14 +49,15 @@
"utopia-php/cache": "0.9.*",
"utopia-php/cli": "0.15.*",
"utopia-php/config": "0.2.*",
- "utopia-php/database": "0.45.*",
+ "utopia-php/database": "0.45.11",
"utopia-php/domains": "0.5.*",
"utopia-php/dsn": "0.1.*",
"utopia-php/framework": "0.33.*",
- "utopia-php/image": "0.5.*",
+ "utopia-php/fetch": "0.2.*",
+ "utopia-php/image": "0.6.*",
"utopia-php/locale": "0.4.*",
"utopia-php/logger": "0.3.*",
- "utopia-php/messaging": "0.2.*",
+ "utopia-php/messaging": "dev-get-country-code as 0.3.0",
"utopia-php/migration": "0.3.*",
"utopia-php/orchestration": "0.9.*",
"utopia-php/platform": "0.5.*",
@@ -70,12 +71,11 @@
"utopia-php/websocket": "0.1.*",
"matomo/device-detector": "6.1.*",
"dragonmantank/cron-expression": "3.3.2",
- "phpmailer/phpmailer": "6.8.0",
+ "phpmailer/phpmailer": "6.9.1",
"chillerlan/php-qrcode": "4.3.4",
"adhocore/jwt": "1.1.2",
"webonyx/graphql-php": "14.11.*",
- "league/csv": "9.7.1",
- "giggsey/libphonenumber-for-php-lite": "8.13.30"
+ "league/csv": "9.7.1"
},
"repositories": [
{
diff --git a/composer.lock b/composer.lock
index 450ecd42fb..be937113ae 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "e9c18e6bda4856800ed1fed582c5766e",
+ "content-hash": "a5ab7c998a333771c26055dab05a236c",
"packages": [
{
"name": "adhocore/jwt",
@@ -156,15 +156,15 @@
},
{
"name": "appwrite/php-runtimes",
- "version": "0.13.2",
+ "version": "0.13.5",
"source": {
"type": "git",
"url": "https://github.com/appwrite/runtimes.git",
- "reference": "214a37c2c66e0f2bc9c30fdfde66955d9fd084a1"
+ "reference": "ba24c3a163f1a1da6cd355db92def508d05e59f7"
},
"require": {
"php": ">=8.0",
- "utopia-php/system": "0.7.*"
+ "utopia-php/system": "0.8.*"
},
"require-dev": {
"phpunit/phpunit": "^9.3",
@@ -195,7 +195,7 @@
"php",
"runtimes"
],
- "time": "2023-11-22T15:36:00+00:00"
+ "time": "2024-04-01T10:35:02+00:00"
},
{
"name": "chillerlan/php-qrcode",
@@ -486,16 +486,16 @@
},
{
"name": "jean85/pretty-package-versions",
- "version": "2.0.5",
+ "version": "2.0.6",
"source": {
"type": "git",
"url": "https://github.com/Jean85/pretty-package-versions.git",
- "reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af"
+ "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/ae547e455a3d8babd07b96966b17d7fd21d9c6af",
- "reference": "ae547e455a3d8babd07b96966b17d7fd21d9c6af",
+ "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/f9fdd29ad8e6d024f52678b570e5593759b550b4",
+ "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4",
"shasum": ""
},
"require": {
@@ -503,9 +503,9 @@
"php": "^7.1|^8.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^2.17",
+ "friendsofphp/php-cs-fixer": "^3.2",
"jean85/composer-provided-replaced-stub-package": "^1.0",
- "phpstan/phpstan": "^0.12.66",
+ "phpstan/phpstan": "^1.4",
"phpunit/phpunit": "^7.5|^8.5|^9.4",
"vimeo/psalm": "^4.3"
},
@@ -539,9 +539,9 @@
],
"support": {
"issues": "https://github.com/Jean85/pretty-package-versions/issues",
- "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.5"
+ "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.6"
},
- "time": "2021-10-08T21:21:46+00:00"
+ "time": "2024-03-08T09:58:59+00:00"
},
{
"name": "league/csv",
@@ -770,7 +770,7 @@
"version": "0.6.3",
"source": {
"type": "git",
- "url": "git@github.com:mustangostang/spyc.git",
+ "url": "https://github.com/mustangostang/spyc.git",
"reference": "4627c838b16550b666d15aeae1e5289dd5b77da0"
},
"dist": {
@@ -813,20 +813,24 @@
"yaml",
"yml"
],
+ "support": {
+ "issues": "https://github.com/mustangostang/spyc/issues",
+ "source": "https://github.com/mustangostang/spyc/tree/0.6.3"
+ },
"time": "2019-09-10T13:16:29+00:00"
},
{
"name": "phpmailer/phpmailer",
- "version": "v6.8.0",
+ "version": "v6.9.1",
"source": {
"type": "git",
"url": "https://github.com/PHPMailer/PHPMailer.git",
- "reference": "df16b615e371d81fb79e506277faea67a1be18f1"
+ "reference": "039de174cd9c17a8389754d3b877a2ed22743e18"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/df16b615e371d81fb79e506277faea67a1be18f1",
- "reference": "df16b615e371d81fb79e506277faea67a1be18f1",
+ "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/039de174cd9c17a8389754d3b877a2ed22743e18",
+ "reference": "039de174cd9c17a8389754d3b877a2ed22743e18",
"shasum": ""
},
"require": {
@@ -836,16 +840,17 @@
"php": ">=5.5.0"
},
"require-dev": {
- "dealerdirect/phpcodesniffer-composer-installer": "^0.7.2",
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
"doctrine/annotations": "^1.2.6 || ^1.13.3",
"php-parallel-lint/php-console-highlighter": "^1.0.0",
"php-parallel-lint/php-parallel-lint": "^1.3.2",
"phpcompatibility/php-compatibility": "^9.3.5",
"roave/security-advisories": "dev-latest",
- "squizlabs/php_codesniffer": "^3.7.1",
+ "squizlabs/php_codesniffer": "^3.7.2",
"yoast/phpunit-polyfills": "^1.0.4"
},
"suggest": {
+ "decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication",
"ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
"ext-openssl": "Needed for secure SMTP sending and DKIM signing",
"greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication",
@@ -885,7 +890,7 @@
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
"support": {
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
- "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.8.0"
+ "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.1"
},
"funding": [
{
@@ -893,7 +898,7 @@
"type": "github"
}
],
- "time": "2023-03-06T14:43:22+00:00"
+ "time": "2023-11-25T22:23:28+00:00"
},
{
"name": "symfony/polyfill-mbstring",
@@ -1199,16 +1204,16 @@
},
{
"name": "utopia-php/cache",
- "version": "0.9.0",
+ "version": "0.9.1",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/cache.git",
- "reference": "4fc7b4789b5f0ce74835c1ecfec4f3afe6f0e34e"
+ "reference": "552b4c554bb14d0c529631ce304cdf4a2b9d06a6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/cache/zipball/4fc7b4789b5f0ce74835c1ecfec4f3afe6f0e34e",
- "reference": "4fc7b4789b5f0ce74835c1ecfec4f3afe6f0e34e",
+ "url": "https://api.github.com/repos/utopia-php/cache/zipball/552b4c554bb14d0c529631ce304cdf4a2b9d06a6",
+ "reference": "552b4c554bb14d0c529631ce304cdf4a2b9d06a6",
"shasum": ""
},
"require": {
@@ -1243,9 +1248,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/cache/issues",
- "source": "https://github.com/utopia-php/cache/tree/0.9.0"
+ "source": "https://github.com/utopia-php/cache/tree/0.9.1"
},
- "time": "2024-01-07T18:11:23+00:00"
+ "time": "2024-03-19T17:07:20+00:00"
},
{
"name": "utopia-php/cli",
@@ -1349,16 +1354,16 @@
},
{
"name": "utopia-php/database",
- "version": "0.45.6",
+ "version": "0.45.11",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/database.git",
- "reference": "c7cc6d57683a4c13d9772dbeea343adb72c443fd"
+ "reference": "262bebfdfb25a37961c218afac0e647f7f23dbac"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/database/zipball/c7cc6d57683a4c13d9772dbeea343adb72c443fd",
- "reference": "c7cc6d57683a4c13d9772dbeea343adb72c443fd",
+ "url": "https://api.github.com/repos/utopia-php/database/zipball/262bebfdfb25a37961c218afac0e647f7f23dbac",
+ "reference": "262bebfdfb25a37961c218afac0e647f7f23dbac",
"shasum": ""
},
"require": {
@@ -1366,7 +1371,7 @@
"ext-pdo": "*",
"php": ">=8.0",
"utopia-php/cache": "0.9.*",
- "utopia-php/framework": "0.*.*",
+ "utopia-php/framework": "0.33.*",
"utopia-php/mongo": "0.3.*"
},
"require-dev": {
@@ -1399,9 +1404,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/database/issues",
- "source": "https://github.com/utopia-php/database/tree/0.45.6"
+ "source": "https://github.com/utopia-php/database/tree/0.45.11"
},
- "time": "2024-02-01T02:33:43+00:00"
+ "time": "2024-04-04T02:23:02+00:00"
},
{
"name": "utopia-php/domains",
@@ -1511,17 +1516,56 @@
"time": "2022-10-26T10:06:20+00:00"
},
{
- "name": "utopia-php/framework",
- "version": "0.33.2",
+ "name": "utopia-php/fetch",
+ "version": "0.2.1",
"source": {
"type": "git",
- "url": "https://github.com/utopia-php/http.git",
- "reference": "b1423ca3e3b61c6c4c2e619d2cb80672809a19f3"
+ "url": "https://github.com/utopia-php/fetch.git",
+ "reference": "1423c0ee3eef944d816ca6e31706895b585aea82"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/http/zipball/b1423ca3e3b61c6c4c2e619d2cb80672809a19f3",
- "reference": "b1423ca3e3b61c6c4c2e619d2cb80672809a19f3",
+ "url": "https://api.github.com/repos/utopia-php/fetch/zipball/1423c0ee3eef944d816ca6e31706895b585aea82",
+ "reference": "1423c0ee3eef944d816ca6e31706895b585aea82",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "laravel/pint": "^1.5.0",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^9.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Fetch\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple library that provides an interface for making HTTP Requests.",
+ "support": {
+ "issues": "https://github.com/utopia-php/fetch/issues",
+ "source": "https://github.com/utopia-php/fetch/tree/0.2.1"
+ },
+ "time": "2024-03-18T11:50:59+00:00"
+ },
+ {
+ "name": "utopia-php/framework",
+ "version": "0.33.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/http.git",
+ "reference": "8fe57da0cecd57e3b17cd395b4a666a24f4c07a6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/http/zipball/8fe57da0cecd57e3b17cd395b4a666a24f4c07a6",
+ "reference": "8fe57da0cecd57e3b17cd395b4a666a24f4c07a6",
"shasum": ""
},
"require": {
@@ -1551,22 +1595,22 @@
],
"support": {
"issues": "https://github.com/utopia-php/http/issues",
- "source": "https://github.com/utopia-php/http/tree/0.33.2"
+ "source": "https://github.com/utopia-php/http/tree/0.33.6"
},
- "time": "2024-01-31T10:35:59+00:00"
+ "time": "2024-03-21T18:10:57+00:00"
},
{
"name": "utopia-php/image",
- "version": "0.5.4",
+ "version": "0.6.1",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/image.git",
- "reference": "ca5f436f9aa22dedaa6648f24f3687733808e336"
+ "reference": "2d74c27e69e65a93cf94a16586598a04fe435bf0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/image/zipball/ca5f436f9aa22dedaa6648f24f3687733808e336",
- "reference": "ca5f436f9aa22dedaa6648f24f3687733808e336",
+ "url": "https://api.github.com/repos/utopia-php/image/zipball/2d74c27e69e65a93cf94a16586598a04fe435bf0",
+ "reference": "2d74c27e69e65a93cf94a16586598a04fe435bf0",
"shasum": ""
},
"require": {
@@ -1574,6 +1618,8 @@
"php": ">=8.0"
},
"require-dev": {
+ "laravel/pint": "1.2.*",
+ "phpstan/phpstan": "1.9.x-dev",
"phpunit/phpunit": "^9.3",
"vimeo/psalm": "4.13.1"
},
@@ -1587,12 +1633,6 @@
"license": [
"MIT"
],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "eldad@appwrite.io"
- }
- ],
"description": "A simple Image manipulation library",
"keywords": [
"framework",
@@ -1603,9 +1643,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/image/issues",
- "source": "https://github.com/utopia-php/image/tree/0.5.4"
+ "source": "https://github.com/utopia-php/image/tree/0.6.1"
},
- "time": "2022-05-11T12:30:41+00:00"
+ "time": "2024-02-05T13:31:44+00:00"
},
{
"name": "utopia-php/locale",
@@ -1713,26 +1753,29 @@
},
{
"name": "utopia-php/messaging",
- "version": "0.2.0",
+ "version": "dev-get-country-code",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/messaging.git",
- "reference": "2d0f474a106bb1da285f85e105c29b46085d3a43"
+ "reference": "30ef3284c32f983d3a509c75804a34600391ca85"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/messaging/zipball/2d0f474a106bb1da285f85e105c29b46085d3a43",
- "reference": "2d0f474a106bb1da285f85e105c29b46085d3a43",
+ "url": "https://api.github.com/repos/utopia-php/messaging/zipball/30ef3284c32f983d3a509c75804a34600391ca85",
+ "reference": "30ef3284c32f983d3a509c75804a34600391ca85",
"shasum": ""
},
"require": {
"ext-curl": "*",
- "php": ">=8.0.0"
+ "ext-openssl": "*",
+ "giggsey/libphonenumber-for-php-lite": "8.13.30",
+ "php": ">=8.0.0",
+ "phpmailer/phpmailer": "6.9.1"
},
"require-dev": {
- "laravel/pint": "^1.2",
- "phpmailer/phpmailer": "6.8.*",
- "phpunit/phpunit": "9.6.*"
+ "laravel/pint": "1.13.11",
+ "phpstan/phpstan": "1.10.58",
+ "phpunit/phpunit": "10.5.10"
},
"type": "library",
"autoload": {
@@ -1755,9 +1798,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/messaging/issues",
- "source": "https://github.com/utopia-php/messaging/tree/0.2.0"
+ "source": "https://github.com/utopia-php/messaging/tree/get-country-code"
},
- "time": "2023-09-14T20:48:42+00:00"
+ "time": "2024-04-07T14:54:54+00:00"
},
{
"name": "utopia-php/migration",
@@ -2185,16 +2228,16 @@
},
{
"name": "utopia-php/storage",
- "version": "0.18.3",
+ "version": "0.18.4",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/storage.git",
- "reference": "faa0279519ac14f3501e8b138e0865ad9d12bff6"
+ "reference": "94ab8758fabcefee5c5fa723616e45719833f922"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/storage/zipball/faa0279519ac14f3501e8b138e0865ad9d12bff6",
- "reference": "faa0279519ac14f3501e8b138e0865ad9d12bff6",
+ "url": "https://api.github.com/repos/utopia-php/storage/zipball/94ab8758fabcefee5c5fa723616e45719833f922",
+ "reference": "94ab8758fabcefee5c5fa723616e45719833f922",
"shasum": ""
},
"require": {
@@ -2234,9 +2277,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/storage/issues",
- "source": "https://github.com/utopia-php/storage/tree/0.18.3"
+ "source": "https://github.com/utopia-php/storage/tree/0.18.4"
},
- "time": "2023-12-31T11:45:12+00:00"
+ "time": "2024-04-02T08:24:09+00:00"
},
{
"name": "utopia-php/swoole",
@@ -2291,16 +2334,16 @@
},
{
"name": "utopia-php/system",
- "version": "0.7.2",
+ "version": "0.8.0",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/system.git",
- "reference": "4593d4d334b0c15879c4744a826e0362924c5d66"
+ "reference": "a2cbfb3c69b9ecb8b6f06c5774f3cf279ea7665e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/system/zipball/4593d4d334b0c15879c4744a826e0362924c5d66",
- "reference": "4593d4d334b0c15879c4744a826e0362924c5d66",
+ "url": "https://api.github.com/repos/utopia-php/system/zipball/a2cbfb3c69b9ecb8b6f06c5774f3cf279ea7665e",
+ "reference": "a2cbfb3c69b9ecb8b6f06c5774f3cf279ea7665e",
"shasum": ""
},
"require": {
@@ -2341,9 +2384,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/system/issues",
- "source": "https://github.com/utopia-php/system/tree/0.7.2"
+ "source": "https://github.com/utopia-php/system/tree/0.8.0"
},
- "time": "2023-10-20T01:39:17+00:00"
+ "time": "2024-04-01T10:22:28+00:00"
},
{
"name": "utopia-php/vcs",
@@ -2579,16 +2622,16 @@
"packages-dev": [
{
"name": "appwrite/sdk-generator",
- "version": "0.36.3",
+ "version": "0.36.4",
"source": {
"type": "git",
"url": "https://github.com/appwrite/sdk-generator.git",
- "reference": "8d308f7f492545da3e51ea5b91c0778392c40b93"
+ "reference": "8d932098009d62d37dda73cfe4ebc11f83e21405"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/8d308f7f492545da3e51ea5b91c0778392c40b93",
- "reference": "8d308f7f492545da3e51ea5b91c0778392c40b93",
+ "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/8d932098009d62d37dda73cfe4ebc11f83e21405",
+ "reference": "8d932098009d62d37dda73cfe4ebc11f83e21405",
"shasum": ""
},
"require": {
@@ -2624,9 +2667,9 @@
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
"support": {
"issues": "https://github.com/appwrite/sdk-generator/issues",
- "source": "https://github.com/appwrite/sdk-generator/tree/0.36.3"
+ "source": "https://github.com/appwrite/sdk-generator/tree/0.36.4"
},
- "time": "2024-02-14T06:33:38+00:00"
+ "time": "2024-02-20T16:36:15+00:00"
},
{
"name": "doctrine/deprecations",
@@ -2747,16 +2790,16 @@
},
{
"name": "matthiasmullie/minify",
- "version": "1.3.71",
+ "version": "1.3.73",
"source": {
"type": "git",
"url": "https://github.com/matthiasmullie/minify.git",
- "reference": "ae42a47d7fecc1fbb7277b2f2d84c37a33edc3b1"
+ "reference": "cb7a9297b4ab070909cefade30ee95054d4ae87a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/matthiasmullie/minify/zipball/ae42a47d7fecc1fbb7277b2f2d84c37a33edc3b1",
- "reference": "ae42a47d7fecc1fbb7277b2f2d84c37a33edc3b1",
+ "url": "https://api.github.com/repos/matthiasmullie/minify/zipball/cb7a9297b4ab070909cefade30ee95054d4ae87a",
+ "reference": "cb7a9297b4ab070909cefade30ee95054d4ae87a",
"shasum": ""
},
"require": {
@@ -2806,7 +2849,7 @@
],
"support": {
"issues": "https://github.com/matthiasmullie/minify/issues",
- "source": "https://github.com/matthiasmullie/minify/tree/1.3.71"
+ "source": "https://github.com/matthiasmullie/minify/tree/1.3.73"
},
"funding": [
{
@@ -2814,7 +2857,7 @@
"type": "github"
}
],
- "time": "2023-04-25T20:33:03+00:00"
+ "time": "2024-03-15T10:27:10+00:00"
},
{
"name": "matthiasmullie/path-converter",
@@ -2930,16 +2973,16 @@
},
{
"name": "nikic/php-parser",
- "version": "v5.0.0",
+ "version": "v5.0.2",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc"
+ "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4a21235f7e56e713259a6f76bf4b5ea08502b9dc",
- "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13",
+ "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13",
"shasum": ""
},
"require": {
@@ -2982,26 +3025,27 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.0"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2"
},
- "time": "2024-01-07T17:17:35+00:00"
+ "time": "2024-03-05T20:51:40+00:00"
},
{
"name": "phar-io/manifest",
- "version": "2.0.3",
+ "version": "2.0.4",
"source": {
"type": "git",
"url": "https://github.com/phar-io/manifest.git",
- "reference": "97803eca37d319dfa7826cc2437fc020857acb53"
+ "reference": "54750ef60c58e43759730615a392c31c80e23176"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
- "reference": "97803eca37d319dfa7826cc2437fc020857acb53",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176",
"shasum": ""
},
"require": {
"ext-dom": "*",
+ "ext-libxml": "*",
"ext-phar": "*",
"ext-xmlwriter": "*",
"phar-io/version": "^3.0.1",
@@ -3042,9 +3086,15 @@
"description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
"support": {
"issues": "https://github.com/phar-io/manifest/issues",
- "source": "https://github.com/phar-io/manifest/tree/2.0.3"
+ "source": "https://github.com/phar-io/manifest/tree/2.0.4"
},
- "time": "2021-07-20T11:28:43+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-03T12:33:53+00:00"
},
{
"name": "phar-io/version",
@@ -3209,21 +3259,21 @@
},
{
"name": "phpdocumentor/type-resolver",
- "version": "1.8.0",
+ "version": "1.8.2",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "fad452781b3d774e3337b0c0b245dd8e5a4455fc"
+ "reference": "153ae662783729388a584b4361f2545e4d841e3c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/fad452781b3d774e3337b0c0b245dd8e5a4455fc",
- "reference": "fad452781b3d774e3337b0c0b245dd8e5a4455fc",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c",
+ "reference": "153ae662783729388a584b4361f2545e4d841e3c",
"shasum": ""
},
"require": {
"doctrine/deprecations": "^1.0",
- "php": "^7.4 || ^8.0",
+ "php": "^7.3 || ^8.0",
"phpdocumentor/reflection-common": "^2.0",
"phpstan/phpdoc-parser": "^1.13"
},
@@ -3261,30 +3311,30 @@
"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.8.0"
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2"
},
- "time": "2024-01-11T11:49:22+00:00"
+ "time": "2024-02-23T11:10:43+00:00"
},
{
"name": "phpspec/prophecy",
- "version": "v1.18.0",
+ "version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/phpspec/prophecy.git",
- "reference": "d4f454f7e1193933f04e6500de3e79191648ed0c"
+ "reference": "67a759e7d8746d501c41536ba40cd9c0a07d6a87"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d4f454f7e1193933f04e6500de3e79191648ed0c",
- "reference": "d4f454f7e1193933f04e6500de3e79191648ed0c",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/67a759e7d8746d501c41536ba40cd9c0a07d6a87",
+ "reference": "67a759e7d8746d501c41536ba40cd9c0a07d6a87",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.2 || ^2.0",
"php": "^7.2 || 8.0.* || 8.1.* || 8.2.* || 8.3.*",
"phpdocumentor/reflection-docblock": "^5.2",
- "sebastian/comparator": "^3.0 || ^4.0 || ^5.0",
- "sebastian/recursion-context": "^3.0 || ^4.0 || ^5.0"
+ "sebastian/comparator": "^3.0 || ^4.0 || ^5.0 || ^6.0",
+ "sebastian/recursion-context": "^3.0 || ^4.0 || ^5.0 || ^6.0"
},
"require-dev": {
"phpspec/phpspec": "^6.0 || ^7.0",
@@ -3330,22 +3380,22 @@
],
"support": {
"issues": "https://github.com/phpspec/prophecy/issues",
- "source": "https://github.com/phpspec/prophecy/tree/v1.18.0"
+ "source": "https://github.com/phpspec/prophecy/tree/v1.19.0"
},
- "time": "2023-12-07T16:22:33+00:00"
+ "time": "2024-02-29T11:52:51+00:00"
},
{
"name": "phpstan/phpdoc-parser",
- "version": "1.25.0",
+ "version": "1.28.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240"
+ "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bd84b629c8de41aa2ae82c067c955e06f1b00240",
- "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
+ "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
"shasum": ""
},
"require": {
@@ -3377,22 +3427,22 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/1.25.0"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0"
},
- "time": "2024-01-04T17:06:16+00:00"
+ "time": "2024-04-03T18:51:33+00:00"
},
{
"name": "phpunit/php-code-coverage",
- "version": "9.2.30",
+ "version": "9.2.31",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "ca2bd87d2f9215904682a9cb9bb37dda98e76089"
+ "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca2bd87d2f9215904682a9cb9bb37dda98e76089",
- "reference": "ca2bd87d2f9215904682a9cb9bb37dda98e76089",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965",
+ "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965",
"shasum": ""
},
"require": {
@@ -3449,7 +3499,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.30"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31"
},
"funding": [
{
@@ -3457,7 +3507,7 @@
"type": "github"
}
],
- "time": "2023-12-22T06:47:57+00:00"
+ "time": "2024-03-02T06:37:42+00:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -3855,16 +3905,16 @@
},
{
"name": "sebastian/cli-parser",
- "version": "1.0.1",
+ "version": "1.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/cli-parser.git",
- "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
+ "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
- "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
+ "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
"shasum": ""
},
"require": {
@@ -3899,7 +3949,7 @@
"homepage": "https://github.com/sebastianbergmann/cli-parser",
"support": {
"issues": "https://github.com/sebastianbergmann/cli-parser/issues",
- "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2"
},
"funding": [
{
@@ -3907,7 +3957,7 @@
"type": "github"
}
],
- "time": "2020-09-28T06:08:49+00:00"
+ "time": "2024-03-02T06:27:43+00:00"
},
{
"name": "sebastian/code-unit",
@@ -4153,16 +4203,16 @@
},
{
"name": "sebastian/diff",
- "version": "4.0.5",
+ "version": "4.0.6",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131"
+ "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131",
- "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc",
+ "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc",
"shasum": ""
},
"require": {
@@ -4207,7 +4257,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/diff/issues",
- "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5"
+ "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6"
},
"funding": [
{
@@ -4215,7 +4265,7 @@
"type": "github"
}
],
- "time": "2023-05-07T05:35:17+00:00"
+ "time": "2024-03-02T06:30:58+00:00"
},
{
"name": "sebastian/environment",
@@ -4282,16 +4332,16 @@
},
{
"name": "sebastian/exporter",
- "version": "4.0.5",
+ "version": "4.0.6",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d"
+ "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d",
- "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72",
+ "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72",
"shasum": ""
},
"require": {
@@ -4347,7 +4397,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/exporter/issues",
- "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5"
+ "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6"
},
"funding": [
{
@@ -4355,20 +4405,20 @@
"type": "github"
}
],
- "time": "2022-09-14T06:03:37+00:00"
+ "time": "2024-03-02T06:33:00+00:00"
},
{
"name": "sebastian/global-state",
- "version": "5.0.6",
+ "version": "5.0.7",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "bde739e7565280bda77be70044ac1047bc007e34"
+ "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34",
- "reference": "bde739e7565280bda77be70044ac1047bc007e34",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
+ "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
"shasum": ""
},
"require": {
@@ -4411,7 +4461,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/global-state/issues",
- "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6"
+ "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7"
},
"funding": [
{
@@ -4419,7 +4469,7 @@
"type": "github"
}
],
- "time": "2023-08-02T09:26:13+00:00"
+ "time": "2024-03-02T06:35:11+00:00"
},
{
"name": "sebastian/lines-of-code",
@@ -4655,16 +4705,16 @@
},
{
"name": "sebastian/resource-operations",
- "version": "3.0.3",
+ "version": "3.0.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/resource-operations.git",
- "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
+ "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
- "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
+ "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
"shasum": ""
},
"require": {
@@ -4676,7 +4726,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-main": "3.0-dev"
}
},
"autoload": {
@@ -4697,8 +4747,7 @@
"description": "Provides a list of PHP built-in functions that operate on resources",
"homepage": "https://www.github.com/sebastianbergmann/resource-operations",
"support": {
- "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
- "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
+ "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4"
},
"funding": [
{
@@ -4706,7 +4755,7 @@
"type": "github"
}
],
- "time": "2020-09-28T06:45:17+00:00"
+ "time": "2024-03-14T16:00:52+00:00"
},
{
"name": "sebastian/type",
@@ -4819,16 +4868,16 @@
},
{
"name": "squizlabs/php_codesniffer",
- "version": "3.8.1",
+ "version": "3.9.1",
"source": {
"type": "git",
"url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
- "reference": "14f5fff1e64118595db5408e946f3a22c75807f7"
+ "reference": "267a4405fff1d9c847134db3a3c92f1ab7f77909"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/14f5fff1e64118595db5408e946f3a22c75807f7",
- "reference": "14f5fff1e64118595db5408e946f3a22c75807f7",
+ "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/267a4405fff1d9c847134db3a3c92f1ab7f77909",
+ "reference": "267a4405fff1d9c847134db3a3c92f1ab7f77909",
"shasum": ""
},
"require": {
@@ -4895,7 +4944,7 @@
"type": "open_collective"
}
],
- "time": "2024-01-11T20:47:48+00:00"
+ "time": "2024-03-31T21:03:09+00:00"
},
{
"name": "swoole/ide-helper",
@@ -5059,16 +5108,16 @@
},
{
"name": "theseer/tokenizer",
- "version": "1.2.2",
+ "version": "1.2.3",
"source": {
"type": "git",
"url": "https://github.com/theseer/tokenizer.git",
- "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96"
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96",
- "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
"shasum": ""
},
"require": {
@@ -5097,7 +5146,7 @@
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
"support": {
"issues": "https://github.com/theseer/tokenizer/issues",
- "source": "https://github.com/theseer/tokenizer/tree/1.2.2"
+ "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
},
"funding": [
{
@@ -5105,7 +5154,7 @@
"type": "github"
}
],
- "time": "2023-11-20T00:12:19+00:00"
+ "time": "2024-03-03T12:36:25+00:00"
},
{
"name": "twig/twig",
@@ -5180,9 +5229,18 @@
"time": "2023-11-21T18:54:41+00:00"
}
],
- "aliases": [],
+ "aliases": [
+ {
+ "package": "utopia-php/messaging",
+ "version": "dev-get-country-code",
+ "alias": "0.3.0",
+ "alias_normalized": "0.3.0.0"
+ }
+ ],
"minimum-stability": "stable",
- "stability-flags": [],
+ "stability-flags": {
+ "utopia-php/messaging": 20
+ },
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
diff --git a/src/Appwrite/Platform/Workers/Messaging.php b/src/Appwrite/Platform/Workers/Messaging.php
index 4810669cf4..3c011bb37a 100644
--- a/src/Appwrite/Platform/Workers/Messaging.php
+++ b/src/Appwrite/Platform/Workers/Messaging.php
@@ -3,22 +3,20 @@
namespace Appwrite\Platform\Workers;
use Exception;
-use libphonenumber\NumberParseException;
use Utopia\App;
use Utopia\CLI\Console;
use Utopia\Database\Document;
use Utopia\DSN\DSN;
use Utopia\Messaging\Messages\SMS;
-use Utopia\Messaging\Adapters\SMS\Mock;
-use Utopia\Messaging\Adapters\SMS\Msg91;
-use Utopia\Messaging\Adapters\SMS\Telesign;
-use Utopia\Messaging\Adapters\SMS\TextMagic;
-use Utopia\Messaging\Adapters\SMS\Twilio;
-use Utopia\Messaging\Adapters\SMS\Vonage;
+use Utopia\Messaging\Adapter\SMS\Mock;
+use Utopia\Messaging\Adapter\SMS\Msg91;
+use Utopia\Messaging\Adapter\SMS\Telesign;
+use Utopia\Messaging\Adapter\SMS\TextMagic;
+use Utopia\Messaging\Adapter\SMS\Twilio;
+use Utopia\Messaging\Adapter\SMS\Vonage;
use Utopia\Platform\Action;
use Utopia\Queue\Message;
use Appwrite\Event\Usage;
-use libphonenumber\PhoneNumberUtil;
class Messaging extends Action
{
@@ -121,16 +119,11 @@ class Messaging extends Action
try {
$sms->send($message);
- $phoneUtil = PhoneNumberUtil::getInstance();
+ $countryCode = $sms->getCountryCode($payload['recipient']);
- try {
- $countryCode = $phoneUtil
- ->parse($payload['recipient'])
- ->getCountryCode();
-
- $queueForUsage->addMetric(str_replace('{countryCode}', $countryCode, METRIC_MESSAGES_COUNTRY_CODE), 1);
- } catch (NumberParseException $e) {
- Console::error("Error parsing number: " . $e->getMessage());
+ if (!empty($countryCode)) {
+ $queueForUsage
+ ->addMetric(str_replace('{countryCode}', $countryCode, METRIC_MESSAGES_COUNTRY_CODE), 1);
}
$queueForUsage
From 574035d638779b35fd9f458fb046efa4622d9f02 Mon Sep 17 00:00:00 2001
From: shimon
Date: Sun, 7 Apr 2024 18:20:42 +0300
Subject: [PATCH 015/138] sms country code
---
app/init.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/init.php b/app/init.php
index 29b16ba316..74908a57f6 100644
--- a/app/init.php
+++ b/app/init.php
@@ -196,7 +196,7 @@ const FUNCTION_ALLOWLIST_HEADERS_RESPONSE = ['content-type', 'content-length'];
const METRIC_TEAMS = 'teams';
const METRIC_USERS = 'users';
const METRIC_MESSAGES = 'messages';
-const METRIC_MESSAGES_COUNTRY = '{countryCode}.messages';
+const METRIC_MESSAGES_COUNTRY_CODE = '{countryCode}.messages';
const METRIC_SESSIONS = 'sessions';
const METRIC_DATABASES = 'databases';
const METRIC_COLLECTIONS = 'collections';
From d3bbcce302beb239e5dbccc572628fb11ea1e629 Mon Sep 17 00:00:00 2001
From: Damodar Lohani
Date: Mon, 8 Apr 2024 09:31:15 +0545
Subject: [PATCH 016/138] Prevent functions domain to be used as custom domain
---
app/controllers/api/proxy.php | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/app/controllers/api/proxy.php b/app/controllers/api/proxy.php
index 1dfbc0ba0f..329e392b42 100644
--- a/app/controllers/api/proxy.php
+++ b/app/controllers/api/proxy.php
@@ -49,6 +49,12 @@ App::post('/v1/proxy/rules')
if ($domain === $mainDomain) {
throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'You cannot assign your main domain to specific resource. Please use subdomain or a different domain.');
}
+
+ $functionsDomain = App::getEnv('_APP_DOMAIN_FUNCTIONS', '');
+ if (str_ends_with($domain, $functionsDomain)) {
+ throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'You cannot assign your functions domain or it\'s subdomain to specific resource. Please use different domain.');
+ }
+
if ($domain === 'localhost' || $domain === APP_HOSTNAME_INTERNAL) {
throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'This domain name is not allowed. Please pick another one.');
}
From 99cb38c674da93965fa978d59c79b5b30bdf5b80 Mon Sep 17 00:00:00 2001
From: Damodar Lohani
Date: Mon, 8 Apr 2024 03:57:08 +0000
Subject: [PATCH 017/138] fix linter issues
---
app/controllers/api/proxy.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/controllers/api/proxy.php b/app/controllers/api/proxy.php
index 329e392b42..0cd4c50662 100644
--- a/app/controllers/api/proxy.php
+++ b/app/controllers/api/proxy.php
@@ -49,12 +49,12 @@ App::post('/v1/proxy/rules')
if ($domain === $mainDomain) {
throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'You cannot assign your main domain to specific resource. Please use subdomain or a different domain.');
}
-
+
$functionsDomain = App::getEnv('_APP_DOMAIN_FUNCTIONS', '');
if (str_ends_with($domain, $functionsDomain)) {
throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'You cannot assign your functions domain or it\'s subdomain to specific resource. Please use different domain.');
}
-
+
if ($domain === 'localhost' || $domain === APP_HOSTNAME_INTERNAL) {
throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'This domain name is not allowed. Please pick another one.');
}
From 019408ebcdd69e666d87242957db464c1147596e Mon Sep 17 00:00:00 2001
From: Damodar Lohani
Date: Thu, 11 Apr 2024 05:05:39 +0000
Subject: [PATCH 018/138] composer update
---
composer.lock | 58 +++++++++++++++++++++++++--------------------------
1 file changed, 29 insertions(+), 29 deletions(-)
diff --git a/composer.lock b/composer.lock
index 294595cc2c..8bcb969159 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "78b9cd75952805a2347578f4fcb96add",
+ "content-hash": "48bd3130a271bca6ef61b90597a49d2b",
"packages": [
{
"name": "adhocore/jwt",
@@ -2337,16 +2337,16 @@
},
{
"name": "utopia-php/storage",
- "version": "0.18.3",
+ "version": "0.18.4",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/storage.git",
- "reference": "faa0279519ac14f3501e8b138e0865ad9d12bff6"
+ "reference": "94ab8758fabcefee5c5fa723616e45719833f922"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/storage/zipball/faa0279519ac14f3501e8b138e0865ad9d12bff6",
- "reference": "faa0279519ac14f3501e8b138e0865ad9d12bff6",
+ "url": "https://api.github.com/repos/utopia-php/storage/zipball/94ab8758fabcefee5c5fa723616e45719833f922",
+ "reference": "94ab8758fabcefee5c5fa723616e45719833f922",
"shasum": ""
},
"require": {
@@ -2386,9 +2386,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/storage/issues",
- "source": "https://github.com/utopia-php/storage/tree/0.18.3"
+ "source": "https://github.com/utopia-php/storage/tree/0.18.4"
},
- "time": "2023-12-31T11:45:12+00:00"
+ "time": "2024-04-02T08:24:09+00:00"
},
{
"name": "utopia-php/swoole",
@@ -2731,16 +2731,16 @@
"packages-dev": [
{
"name": "appwrite/sdk-generator",
- "version": "0.37.9",
+ "version": "dev-feat-react-native-sdk",
"source": {
"type": "git",
"url": "https://github.com/appwrite/sdk-generator.git",
- "reference": "ad80d80e18f0cda981e1bddbf0841a805632caa0"
+ "reference": "db41717ab00274333ce2ba82903d58156e193cd4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/ad80d80e18f0cda981e1bddbf0841a805632caa0",
- "reference": "ad80d80e18f0cda981e1bddbf0841a805632caa0",
+ "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/db41717ab00274333ce2ba82903d58156e193cd4",
+ "reference": "db41717ab00274333ce2ba82903d58156e193cd4",
"shasum": ""
},
"require": {
@@ -2776,9 +2776,9 @@
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
"support": {
"issues": "https://github.com/appwrite/sdk-generator/issues",
- "source": "https://github.com/appwrite/sdk-generator/tree/0.37.9"
+ "source": "https://github.com/appwrite/sdk-generator/tree/feat-react-native-sdk"
},
- "time": "2024-03-24T05:40:55+00:00"
+ "time": "2024-04-11T04:43:47+00:00"
},
{
"name": "doctrine/deprecations",
@@ -2899,16 +2899,16 @@
},
{
"name": "laravel/pint",
- "version": "v1.15.0",
+ "version": "v1.15.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/pint.git",
- "reference": "c52de679b3ac01207016c179d7ce173e4be128c4"
+ "reference": "5f288b5e79938cc72f5c298d384e639de87507c6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/pint/zipball/c52de679b3ac01207016c179d7ce173e4be128c4",
- "reference": "c52de679b3ac01207016c179d7ce173e4be128c4",
+ "url": "https://api.github.com/repos/laravel/pint/zipball/5f288b5e79938cc72f5c298d384e639de87507c6",
+ "reference": "5f288b5e79938cc72f5c298d384e639de87507c6",
"shasum": ""
},
"require": {
@@ -2919,13 +2919,13 @@
"php": "^8.1.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^3.49.0",
- "illuminate/view": "^10.43.0",
- "larastan/larastan": "^2.8.1",
+ "friendsofphp/php-cs-fixer": "^3.52.1",
+ "illuminate/view": "^10.48.4",
+ "larastan/larastan": "^2.9.2",
"laravel-zero/framework": "^10.3.0",
- "mockery/mockery": "^1.6.7",
+ "mockery/mockery": "^1.6.11",
"nunomaduro/termwind": "^1.15.1",
- "pestphp/pest": "^2.33.6"
+ "pestphp/pest": "^2.34.5"
},
"bin": [
"builds/pint"
@@ -2961,7 +2961,7 @@
"issues": "https://github.com/laravel/pint/issues",
"source": "https://github.com/laravel/pint"
},
- "time": "2024-03-26T16:40:24+00:00"
+ "time": "2024-04-02T14:28:47+00:00"
},
{
"name": "matthiasmullie/minify",
@@ -3561,16 +3561,16 @@
},
{
"name": "phpstan/phpdoc-parser",
- "version": "1.27.0",
+ "version": "1.28.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "86e4d5a4b036f8f0be1464522f4c6b584c452757"
+ "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/86e4d5a4b036f8f0be1464522f4c6b584c452757",
- "reference": "86e4d5a4b036f8f0be1464522f4c6b584c452757",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
+ "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
"shasum": ""
},
"require": {
@@ -3602,9 +3602,9 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/1.27.0"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0"
},
- "time": "2024-03-21T13:14:53+00:00"
+ "time": "2024-04-03T18:51:33+00:00"
},
{
"name": "phpunit/php-code-coverage",
From 3f43e239c0082db5ab6f504dd17a93eb52fe9f17 Mon Sep 17 00:00:00 2001
From: Damodar Lohani
Date: Thu, 11 Apr 2024 05:06:37 +0000
Subject: [PATCH 019/138] fixed
---
src/Appwrite/Platform/Tasks/SDKs.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Appwrite/Platform/Tasks/SDKs.php b/src/Appwrite/Platform/Tasks/SDKs.php
index bc829bebfd..4010410bd0 100644
--- a/src/Appwrite/Platform/Tasks/SDKs.php
+++ b/src/Appwrite/Platform/Tasks/SDKs.php
@@ -22,10 +22,10 @@ use Appwrite\SDK\Language\Swift;
use Appwrite\SDK\Language\Web;
use Appwrite\SDK\SDK;
use Appwrite\Spec\Swagger2;
+use Exception;
use Utopia\CLI\Console;
use Utopia\Config\Config;
use Utopia\Platform\Action;
-use Exception;
class SDKs extends Action
{
From f7249741954e2378249a29cc0d549443c24679e8 Mon Sep 17 00:00:00 2001
From: Damodar Lohani
Date: Thu, 11 Apr 2024 05:07:38 +0000
Subject: [PATCH 020/138] update version
---
app/config/platforms.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/config/platforms.php b/app/config/platforms.php
index d54a4ae74f..fe332bf9ed 100644
--- a/app/config/platforms.php
+++ b/app/config/platforms.php
@@ -138,7 +138,7 @@ return [
[
'key' => 'react-native',
'name' => 'React Native',
- 'version' => '0.2.0',
+ 'version' => '0.3.0',
'url' => 'https://github.com/appwrite/sdk-for-react-native',
'package' => 'https://npmjs.com/package/react-native-appwrite',
'enabled' => true,
From 5976295051101a235f2c948a8491b50e1579a96d Mon Sep 17 00:00:00 2001
From: Damodar Lohani
Date: Thu, 11 Apr 2024 05:15:10 +0000
Subject: [PATCH 021/138] sdk docs
---
app/config/platforms.php | 2 +-
.../account/create-anonymous-session.md | 11 ++++++++
.../account/create-email-password-session.md | 14 +++++++++++
.../examples/account/create-email-token.md | 15 +++++++++++
.../examples/account/create-j-w-t.md | 11 ++++++++
.../account/create-magic-u-r-l-token.md | 16 ++++++++++++
.../account/create-mfa-authenticator.md | 13 ++++++++++
.../examples/account/create-mfa-challenge.md | 13 ++++++++++
.../account/create-mfa-recovery-codes.md | 11 ++++++++
.../examples/account/create-o-auth2session.md | 15 +++++++++++
.../examples/account/create-o-auth2token.md | 15 +++++++++++
.../examples/account/create-phone-token.md | 14 +++++++++++
.../account/create-phone-verification.md | 11 ++++++++
.../examples/account/create-push-target.md | 15 +++++++++++
.../examples/account/create-recovery.md | 14 +++++++++++
.../examples/account/create-session.md | 14 +++++++++++
.../examples/account/create-verification.md | 13 ++++++++++
.../examples/account/create.md | 16 ++++++++++++
.../examples/account/delete-identity.md | 13 ++++++++++
.../account/delete-mfa-authenticator.md | 14 +++++++++++
.../examples/account/delete-push-target.md | 13 ++++++++++
.../examples/account/delete-session.md | 13 ++++++++++
.../examples/account/delete-sessions.md | 11 ++++++++
.../account/get-mfa-recovery-codes.md | 11 ++++++++
.../examples/account/get-prefs.md | 11 ++++++++
.../examples/account/get-session.md | 13 ++++++++++
.../examples/account/get.md | 11 ++++++++
.../examples/account/list-identities.md | 13 ++++++++++
.../examples/account/list-logs.md | 13 ++++++++++
.../examples/account/list-mfa-factors.md | 11 ++++++++
.../examples/account/list-sessions.md | 11 ++++++++
.../examples/account/update-email.md | 14 +++++++++++
.../examples/account/update-m-f-a.md | 13 ++++++++++
.../account/update-magic-u-r-l-session.md | 14 +++++++++++
.../account/update-mfa-authenticator.md | 14 +++++++++++
.../examples/account/update-mfa-challenge.md | 14 +++++++++++
.../account/update-mfa-recovery-codes.md | 11 ++++++++
.../examples/account/update-name.md | 13 ++++++++++
.../examples/account/update-password.md | 14 +++++++++++
.../examples/account/update-phone-session.md | 14 +++++++++++
.../account/update-phone-verification.md | 14 +++++++++++
.../examples/account/update-phone.md | 14 +++++++++++
.../examples/account/update-prefs.md | 13 ++++++++++
.../examples/account/update-push-target.md | 14 +++++++++++
.../examples/account/update-recovery.md | 15 +++++++++++
.../examples/account/update-session.md | 13 ++++++++++
.../examples/account/update-status.md | 11 ++++++++
.../examples/account/update-verification.md | 14 +++++++++++
.../examples/avatars/get-browser.md | 16 ++++++++++++
.../examples/avatars/get-credit-card.md | 16 ++++++++++++
.../examples/avatars/get-favicon.md | 13 ++++++++++
.../examples/avatars/get-flag.md | 16 ++++++++++++
.../examples/avatars/get-image.md | 15 +++++++++++
.../examples/avatars/get-initials.md | 16 ++++++++++++
.../examples/avatars/get-q-r.md | 16 ++++++++++++
.../examples/databases/create-document.md | 17 +++++++++++++
.../examples/databases/delete-document.md | 15 +++++++++++
.../examples/databases/get-document.md | 16 ++++++++++++
.../examples/databases/list-documents.md | 15 +++++++++++
.../examples/databases/update-document.md | 17 +++++++++++++
.../examples/functions/create-execution.md | 18 +++++++++++++
.../examples/functions/get-execution.md | 14 +++++++++++
.../examples/functions/list-executions.md | 15 +++++++++++
.../examples/graphql/mutation.md | 13 ++++++++++
.../examples/graphql/query.md | 13 ++++++++++
.../examples/locale/get.md | 11 ++++++++
.../examples/locale/list-codes.md | 11 ++++++++
.../examples/locale/list-continents.md | 11 ++++++++
.../examples/locale/list-countries-e-u.md | 11 ++++++++
.../examples/locale/list-countries-phones.md | 11 ++++++++
.../examples/locale/list-countries.md | 11 ++++++++
.../examples/locale/list-currencies.md | 11 ++++++++
.../examples/locale/list-languages.md | 11 ++++++++
.../examples/messaging/create-subscriber.md | 15 +++++++++++
.../examples/messaging/delete-subscriber.md | 14 +++++++++++
.../examples/storage/create-file.md | 16 ++++++++++++
.../examples/storage/delete-file.md | 14 +++++++++++
.../examples/storage/get-file-download.md | 14 +++++++++++
.../examples/storage/get-file-preview.md | 25 +++++++++++++++++++
.../examples/storage/get-file-view.md | 14 +++++++++++
.../examples/storage/get-file.md | 14 +++++++++++
.../examples/storage/list-files.md | 15 +++++++++++
.../examples/storage/update-file.md | 16 ++++++++++++
.../examples/teams/create-membership.md | 19 ++++++++++++++
.../examples/teams/create.md | 15 +++++++++++
.../examples/teams/delete-membership.md | 14 +++++++++++
.../examples/teams/delete.md | 13 ++++++++++
.../examples/teams/get-membership.md | 14 +++++++++++
.../examples/teams/get-prefs.md | 13 ++++++++++
.../client-react-native/examples/teams/get.md | 13 ++++++++++
.../examples/teams/list-memberships.md | 15 +++++++++++
.../examples/teams/list.md | 14 +++++++++++
.../teams/update-membership-status.md | 16 ++++++++++++
.../examples/teams/update-membership.md | 15 +++++++++++
.../examples/teams/update-name.md | 14 +++++++++++
.../examples/teams/update-prefs.md | 14 +++++++++++
96 files changed, 1314 insertions(+), 1 deletion(-)
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/create-anonymous-session.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/create-email-password-session.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/create-email-token.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/create-j-w-t.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/create-magic-u-r-l-token.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/create-mfa-authenticator.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/create-mfa-challenge.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/create-mfa-recovery-codes.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/create-o-auth2session.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/create-o-auth2token.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/create-phone-token.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/create-phone-verification.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/create-push-target.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/create-recovery.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/create-session.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/create-verification.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/create.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/delete-identity.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/delete-mfa-authenticator.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/delete-push-target.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/delete-session.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/delete-sessions.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/get-mfa-recovery-codes.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/get-prefs.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/get-session.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/get.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/list-identities.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/list-logs.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/list-mfa-factors.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/list-sessions.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/update-email.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/update-m-f-a.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/update-magic-u-r-l-session.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/update-mfa-authenticator.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/update-mfa-challenge.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/update-mfa-recovery-codes.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/update-name.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/update-password.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/update-phone-session.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/update-phone-verification.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/update-phone.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/update-prefs.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/update-push-target.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/update-recovery.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/update-session.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/update-status.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/account/update-verification.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/avatars/get-browser.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/avatars/get-credit-card.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/avatars/get-favicon.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/avatars/get-flag.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/avatars/get-image.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/avatars/get-initials.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/avatars/get-q-r.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/databases/create-document.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/databases/delete-document.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/databases/get-document.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/databases/list-documents.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/databases/update-document.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/functions/create-execution.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/functions/get-execution.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/functions/list-executions.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/graphql/mutation.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/graphql/query.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/locale/get.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/locale/list-codes.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/locale/list-continents.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/locale/list-countries-e-u.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/locale/list-countries-phones.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/locale/list-countries.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/locale/list-currencies.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/locale/list-languages.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/messaging/create-subscriber.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/messaging/delete-subscriber.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/storage/create-file.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/storage/delete-file.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/storage/get-file-download.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/storage/get-file-preview.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/storage/get-file-view.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/storage/get-file.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/storage/list-files.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/storage/update-file.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/teams/create-membership.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/teams/create.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/teams/delete-membership.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/teams/delete.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/teams/get-membership.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/teams/get-prefs.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/teams/get.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/teams/list-memberships.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/teams/list.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/teams/update-membership-status.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/teams/update-membership.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/teams/update-name.md
create mode 100644 docs/examples/1.5.x/client-react-native/examples/teams/update-prefs.md
diff --git a/app/config/platforms.php b/app/config/platforms.php
index fe332bf9ed..7db00e87ee 100644
--- a/app/config/platforms.php
+++ b/app/config/platforms.php
@@ -148,7 +148,7 @@ return [
'family' => APP_PLATFORM_CLIENT,
'prism' => 'javascript',
'source' => \realpath(__DIR__ . '/../sdks/client-react-native'),
- 'gitUrl' => 'git@github.com:appwrite/sdk-for-react-native.git',
+ 'gitUrl' => 'https://github.com/appwrite/sdk-for-react-native.git',
'gitRepoName' => 'sdk-for-react-native',
'gitUserName' => 'appwrite',
'gitBranch' => 'dev',
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/create-anonymous-session.md b/docs/examples/1.5.x/client-react-native/examples/account/create-anonymous-session.md
new file mode 100644
index 0000000000..1c807bdc96
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/create-anonymous-session.md
@@ -0,0 +1,11 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.createAnonymousSession();
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/create-email-password-session.md b/docs/examples/1.5.x/client-react-native/examples/account/create-email-password-session.md
new file mode 100644
index 0000000000..d338cbe233
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/create-email-password-session.md
@@ -0,0 +1,14 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.createEmailPasswordSession(
+ 'email@example.com', // email
+ 'password' // password
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/create-email-token.md b/docs/examples/1.5.x/client-react-native/examples/account/create-email-token.md
new file mode 100644
index 0000000000..cb2a31145b
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/create-email-token.md
@@ -0,0 +1,15 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.createEmailToken(
+ '', // userId
+ 'email@example.com', // email
+ false // phrase (optional)
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/create-j-w-t.md b/docs/examples/1.5.x/client-react-native/examples/account/create-j-w-t.md
new file mode 100644
index 0000000000..88ea31c5a3
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/create-j-w-t.md
@@ -0,0 +1,11 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.createJWT();
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/create-magic-u-r-l-token.md b/docs/examples/1.5.x/client-react-native/examples/account/create-magic-u-r-l-token.md
new file mode 100644
index 0000000000..f2e7e8faf6
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/create-magic-u-r-l-token.md
@@ -0,0 +1,16 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.createMagicURLToken(
+ '', // userId
+ 'email@example.com', // email
+ 'https://example.com', // url (optional)
+ false // phrase (optional)
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/create-mfa-authenticator.md b/docs/examples/1.5.x/client-react-native/examples/account/create-mfa-authenticator.md
new file mode 100644
index 0000000000..88bc313a88
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/create-mfa-authenticator.md
@@ -0,0 +1,13 @@
+import { Client, Account, AuthenticatorType } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.createMfaAuthenticator(
+ AuthenticatorType.Totp // type
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/create-mfa-challenge.md b/docs/examples/1.5.x/client-react-native/examples/account/create-mfa-challenge.md
new file mode 100644
index 0000000000..119a204f0b
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/create-mfa-challenge.md
@@ -0,0 +1,13 @@
+import { Client, Account, AuthenticationFactor } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.createMfaChallenge(
+ AuthenticationFactor.Email // factor
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/create-mfa-recovery-codes.md b/docs/examples/1.5.x/client-react-native/examples/account/create-mfa-recovery-codes.md
new file mode 100644
index 0000000000..4ffd8a39a1
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/create-mfa-recovery-codes.md
@@ -0,0 +1,11 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.createMfaRecoveryCodes();
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/create-o-auth2session.md b/docs/examples/1.5.x/client-react-native/examples/account/create-o-auth2session.md
new file mode 100644
index 0000000000..2302aaaa1e
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/create-o-auth2session.md
@@ -0,0 +1,15 @@
+import { Client, Account, OAuthProvider } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+account.createOAuth2Session(
+ OAuthProvider.Amazon, // provider
+ 'https://example.com', // success (optional)
+ 'https://example.com', // failure (optional)
+ [] // scopes (optional)
+);
+
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/create-o-auth2token.md b/docs/examples/1.5.x/client-react-native/examples/account/create-o-auth2token.md
new file mode 100644
index 0000000000..3479924e64
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/create-o-auth2token.md
@@ -0,0 +1,15 @@
+import { Client, Account, OAuthProvider } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+account.createOAuth2Token(
+ OAuthProvider.Amazon, // provider
+ 'https://example.com', // success (optional)
+ 'https://example.com', // failure (optional)
+ [] // scopes (optional)
+);
+
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/create-phone-token.md b/docs/examples/1.5.x/client-react-native/examples/account/create-phone-token.md
new file mode 100644
index 0000000000..93fc1b7f51
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/create-phone-token.md
@@ -0,0 +1,14 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.createPhoneToken(
+ '', // userId
+ '+12065550100' // phone
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/create-phone-verification.md b/docs/examples/1.5.x/client-react-native/examples/account/create-phone-verification.md
new file mode 100644
index 0000000000..28833c1806
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/create-phone-verification.md
@@ -0,0 +1,11 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.createPhoneVerification();
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/create-push-target.md b/docs/examples/1.5.x/client-react-native/examples/account/create-push-target.md
new file mode 100644
index 0000000000..dd15821eaa
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/create-push-target.md
@@ -0,0 +1,15 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.createPushTarget(
+ '', // targetId
+ '', // identifier
+ '' // providerId (optional)
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/create-recovery.md b/docs/examples/1.5.x/client-react-native/examples/account/create-recovery.md
new file mode 100644
index 0000000000..5d2855486b
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/create-recovery.md
@@ -0,0 +1,14 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.createRecovery(
+ 'email@example.com', // email
+ 'https://example.com' // url
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/create-session.md b/docs/examples/1.5.x/client-react-native/examples/account/create-session.md
new file mode 100644
index 0000000000..f8a9f109a7
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/create-session.md
@@ -0,0 +1,14 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.createSession(
+ '', // userId
+ '' // secret
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/create-verification.md b/docs/examples/1.5.x/client-react-native/examples/account/create-verification.md
new file mode 100644
index 0000000000..d072126c4e
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/create-verification.md
@@ -0,0 +1,13 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.createVerification(
+ 'https://example.com' // url
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/create.md b/docs/examples/1.5.x/client-react-native/examples/account/create.md
new file mode 100644
index 0000000000..300f59b219
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/create.md
@@ -0,0 +1,16 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.create(
+ '', // userId
+ 'email@example.com', // email
+ '', // password
+ '' // name (optional)
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/delete-identity.md b/docs/examples/1.5.x/client-react-native/examples/account/delete-identity.md
new file mode 100644
index 0000000000..9ff1bbd35d
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/delete-identity.md
@@ -0,0 +1,13 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.deleteIdentity(
+ '' // identityId
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/delete-mfa-authenticator.md b/docs/examples/1.5.x/client-react-native/examples/account/delete-mfa-authenticator.md
new file mode 100644
index 0000000000..c5f5695ddf
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/delete-mfa-authenticator.md
@@ -0,0 +1,14 @@
+import { Client, Account, AuthenticatorType } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.deleteMfaAuthenticator(
+ AuthenticatorType.Totp, // type
+ '' // otp
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/delete-push-target.md b/docs/examples/1.5.x/client-react-native/examples/account/delete-push-target.md
new file mode 100644
index 0000000000..351b933bd0
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/delete-push-target.md
@@ -0,0 +1,13 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.deletePushTarget(
+ '' // targetId
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/delete-session.md b/docs/examples/1.5.x/client-react-native/examples/account/delete-session.md
new file mode 100644
index 0000000000..22966495c1
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/delete-session.md
@@ -0,0 +1,13 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.deleteSession(
+ '' // sessionId
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/delete-sessions.md b/docs/examples/1.5.x/client-react-native/examples/account/delete-sessions.md
new file mode 100644
index 0000000000..b0967bf019
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/delete-sessions.md
@@ -0,0 +1,11 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.deleteSessions();
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/get-mfa-recovery-codes.md b/docs/examples/1.5.x/client-react-native/examples/account/get-mfa-recovery-codes.md
new file mode 100644
index 0000000000..d1c38fdde0
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/get-mfa-recovery-codes.md
@@ -0,0 +1,11 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.getMfaRecoveryCodes();
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/get-prefs.md b/docs/examples/1.5.x/client-react-native/examples/account/get-prefs.md
new file mode 100644
index 0000000000..b2502d7b19
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/get-prefs.md
@@ -0,0 +1,11 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.getPrefs();
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/get-session.md b/docs/examples/1.5.x/client-react-native/examples/account/get-session.md
new file mode 100644
index 0000000000..3ecb79feee
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/get-session.md
@@ -0,0 +1,13 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.getSession(
+ '' // sessionId
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/get.md b/docs/examples/1.5.x/client-react-native/examples/account/get.md
new file mode 100644
index 0000000000..94f0779d53
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/get.md
@@ -0,0 +1,11 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.get();
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/list-identities.md b/docs/examples/1.5.x/client-react-native/examples/account/list-identities.md
new file mode 100644
index 0000000000..e7ca637afe
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/list-identities.md
@@ -0,0 +1,13 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.listIdentities(
+ [] // queries (optional)
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/list-logs.md b/docs/examples/1.5.x/client-react-native/examples/account/list-logs.md
new file mode 100644
index 0000000000..424f8d76af
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/list-logs.md
@@ -0,0 +1,13 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.listLogs(
+ [] // queries (optional)
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/list-mfa-factors.md b/docs/examples/1.5.x/client-react-native/examples/account/list-mfa-factors.md
new file mode 100644
index 0000000000..c6343a732e
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/list-mfa-factors.md
@@ -0,0 +1,11 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.listMfaFactors();
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/list-sessions.md b/docs/examples/1.5.x/client-react-native/examples/account/list-sessions.md
new file mode 100644
index 0000000000..b0840c59e3
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/list-sessions.md
@@ -0,0 +1,11 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.listSessions();
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/update-email.md b/docs/examples/1.5.x/client-react-native/examples/account/update-email.md
new file mode 100644
index 0000000000..560581e63c
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/update-email.md
@@ -0,0 +1,14 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.updateEmail(
+ 'email@example.com', // email
+ 'password' // password
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/update-m-f-a.md b/docs/examples/1.5.x/client-react-native/examples/account/update-m-f-a.md
new file mode 100644
index 0000000000..38fd716c6a
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/update-m-f-a.md
@@ -0,0 +1,13 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.updateMFA(
+ false // mfa
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/update-magic-u-r-l-session.md b/docs/examples/1.5.x/client-react-native/examples/account/update-magic-u-r-l-session.md
new file mode 100644
index 0000000000..bb0c000126
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/update-magic-u-r-l-session.md
@@ -0,0 +1,14 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.updateMagicURLSession(
+ '', // userId
+ '' // secret
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/update-mfa-authenticator.md b/docs/examples/1.5.x/client-react-native/examples/account/update-mfa-authenticator.md
new file mode 100644
index 0000000000..d8ec7aed65
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/update-mfa-authenticator.md
@@ -0,0 +1,14 @@
+import { Client, Account, AuthenticatorType } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.updateMfaAuthenticator(
+ AuthenticatorType.Totp, // type
+ '' // otp
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/update-mfa-challenge.md b/docs/examples/1.5.x/client-react-native/examples/account/update-mfa-challenge.md
new file mode 100644
index 0000000000..7d87506457
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/update-mfa-challenge.md
@@ -0,0 +1,14 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.updateMfaChallenge(
+ '', // challengeId
+ '' // otp
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/update-mfa-recovery-codes.md b/docs/examples/1.5.x/client-react-native/examples/account/update-mfa-recovery-codes.md
new file mode 100644
index 0000000000..cfbbf6f3c8
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/update-mfa-recovery-codes.md
@@ -0,0 +1,11 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.updateMfaRecoveryCodes();
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/update-name.md b/docs/examples/1.5.x/client-react-native/examples/account/update-name.md
new file mode 100644
index 0000000000..8a403f2ab1
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/update-name.md
@@ -0,0 +1,13 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.updateName(
+ '' // name
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/update-password.md b/docs/examples/1.5.x/client-react-native/examples/account/update-password.md
new file mode 100644
index 0000000000..09edf09182
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/update-password.md
@@ -0,0 +1,14 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.updatePassword(
+ '', // password
+ 'password' // oldPassword (optional)
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/update-phone-session.md b/docs/examples/1.5.x/client-react-native/examples/account/update-phone-session.md
new file mode 100644
index 0000000000..cf026227fc
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/update-phone-session.md
@@ -0,0 +1,14 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.updatePhoneSession(
+ '', // userId
+ '' // secret
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/update-phone-verification.md b/docs/examples/1.5.x/client-react-native/examples/account/update-phone-verification.md
new file mode 100644
index 0000000000..8467309a06
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/update-phone-verification.md
@@ -0,0 +1,14 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.updatePhoneVerification(
+ '', // userId
+ '' // secret
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/update-phone.md b/docs/examples/1.5.x/client-react-native/examples/account/update-phone.md
new file mode 100644
index 0000000000..46efc14142
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/update-phone.md
@@ -0,0 +1,14 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.updatePhone(
+ '+12065550100', // phone
+ 'password' // password
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/update-prefs.md b/docs/examples/1.5.x/client-react-native/examples/account/update-prefs.md
new file mode 100644
index 0000000000..a3ff8c3408
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/update-prefs.md
@@ -0,0 +1,13 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.updatePrefs(
+ {} // prefs
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/update-push-target.md b/docs/examples/1.5.x/client-react-native/examples/account/update-push-target.md
new file mode 100644
index 0000000000..8096568d55
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/update-push-target.md
@@ -0,0 +1,14 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.updatePushTarget(
+ '', // targetId
+ '' // identifier
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/update-recovery.md b/docs/examples/1.5.x/client-react-native/examples/account/update-recovery.md
new file mode 100644
index 0000000000..1ee93d35f9
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/update-recovery.md
@@ -0,0 +1,15 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.updateRecovery(
+ '', // userId
+ '', // secret
+ '' // password
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/update-session.md b/docs/examples/1.5.x/client-react-native/examples/account/update-session.md
new file mode 100644
index 0000000000..397e07edc2
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/update-session.md
@@ -0,0 +1,13 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.updateSession(
+ '' // sessionId
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/update-status.md b/docs/examples/1.5.x/client-react-native/examples/account/update-status.md
new file mode 100644
index 0000000000..27ce518621
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/update-status.md
@@ -0,0 +1,11 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.updateStatus();
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/account/update-verification.md b/docs/examples/1.5.x/client-react-native/examples/account/update-verification.md
new file mode 100644
index 0000000000..0007335fa5
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/account/update-verification.md
@@ -0,0 +1,14 @@
+import { Client, Account } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const account = new Account(client);
+
+const result = await account.updateVerification(
+ '', // userId
+ '' // secret
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/avatars/get-browser.md b/docs/examples/1.5.x/client-react-native/examples/avatars/get-browser.md
new file mode 100644
index 0000000000..9ceb1a39cf
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/avatars/get-browser.md
@@ -0,0 +1,16 @@
+import { Client, Avatars, Browser } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const avatars = new Avatars(client);
+
+const result = avatars.getBrowser(
+ Browser.AvantBrowser, // code
+ 0, // width (optional)
+ 0, // height (optional)
+ 0 // quality (optional)
+);
+
+console.log(result);
diff --git a/docs/examples/1.5.x/client-react-native/examples/avatars/get-credit-card.md b/docs/examples/1.5.x/client-react-native/examples/avatars/get-credit-card.md
new file mode 100644
index 0000000000..0de631974a
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/avatars/get-credit-card.md
@@ -0,0 +1,16 @@
+import { Client, Avatars, CreditCard } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const avatars = new Avatars(client);
+
+const result = avatars.getCreditCard(
+ CreditCard.AmericanExpress, // code
+ 0, // width (optional)
+ 0, // height (optional)
+ 0 // quality (optional)
+);
+
+console.log(result);
diff --git a/docs/examples/1.5.x/client-react-native/examples/avatars/get-favicon.md b/docs/examples/1.5.x/client-react-native/examples/avatars/get-favicon.md
new file mode 100644
index 0000000000..6e23a774c0
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/avatars/get-favicon.md
@@ -0,0 +1,13 @@
+import { Client, Avatars } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const avatars = new Avatars(client);
+
+const result = avatars.getFavicon(
+ 'https://example.com' // url
+);
+
+console.log(result);
diff --git a/docs/examples/1.5.x/client-react-native/examples/avatars/get-flag.md b/docs/examples/1.5.x/client-react-native/examples/avatars/get-flag.md
new file mode 100644
index 0000000000..6761052394
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/avatars/get-flag.md
@@ -0,0 +1,16 @@
+import { Client, Avatars, Flag } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const avatars = new Avatars(client);
+
+const result = avatars.getFlag(
+ Flag.Afghanistan, // code
+ 0, // width (optional)
+ 0, // height (optional)
+ 0 // quality (optional)
+);
+
+console.log(result);
diff --git a/docs/examples/1.5.x/client-react-native/examples/avatars/get-image.md b/docs/examples/1.5.x/client-react-native/examples/avatars/get-image.md
new file mode 100644
index 0000000000..b4956df8f1
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/avatars/get-image.md
@@ -0,0 +1,15 @@
+import { Client, Avatars } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const avatars = new Avatars(client);
+
+const result = avatars.getImage(
+ 'https://example.com', // url
+ 0, // width (optional)
+ 0 // height (optional)
+);
+
+console.log(result);
diff --git a/docs/examples/1.5.x/client-react-native/examples/avatars/get-initials.md b/docs/examples/1.5.x/client-react-native/examples/avatars/get-initials.md
new file mode 100644
index 0000000000..ba70a9cb03
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/avatars/get-initials.md
@@ -0,0 +1,16 @@
+import { Client, Avatars } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const avatars = new Avatars(client);
+
+const result = avatars.getInitials(
+ '', // name (optional)
+ 0, // width (optional)
+ 0, // height (optional)
+ '' // background (optional)
+);
+
+console.log(result);
diff --git a/docs/examples/1.5.x/client-react-native/examples/avatars/get-q-r.md b/docs/examples/1.5.x/client-react-native/examples/avatars/get-q-r.md
new file mode 100644
index 0000000000..d4f2db2df8
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/avatars/get-q-r.md
@@ -0,0 +1,16 @@
+import { Client, Avatars } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const avatars = new Avatars(client);
+
+const result = avatars.getQR(
+ '', // text
+ 1, // size (optional)
+ 0, // margin (optional)
+ false // download (optional)
+);
+
+console.log(result);
diff --git a/docs/examples/1.5.x/client-react-native/examples/databases/create-document.md b/docs/examples/1.5.x/client-react-native/examples/databases/create-document.md
new file mode 100644
index 0000000000..15d1afcdc3
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/databases/create-document.md
@@ -0,0 +1,17 @@
+import { Client, Databases } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const databases = new Databases(client);
+
+const result = await databases.createDocument(
+ '', // databaseId
+ '', // collectionId
+ '', // documentId
+ {}, // data
+ ["read("any")"] // permissions (optional)
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/databases/delete-document.md b/docs/examples/1.5.x/client-react-native/examples/databases/delete-document.md
new file mode 100644
index 0000000000..f6fef3bcdf
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/databases/delete-document.md
@@ -0,0 +1,15 @@
+import { Client, Databases } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const databases = new Databases(client);
+
+const result = await databases.deleteDocument(
+ '', // databaseId
+ '', // collectionId
+ '' // documentId
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/databases/get-document.md b/docs/examples/1.5.x/client-react-native/examples/databases/get-document.md
new file mode 100644
index 0000000000..502f2f4640
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/databases/get-document.md
@@ -0,0 +1,16 @@
+import { Client, Databases } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const databases = new Databases(client);
+
+const result = await databases.getDocument(
+ '', // databaseId
+ '', // collectionId
+ '', // documentId
+ [] // queries (optional)
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/databases/list-documents.md b/docs/examples/1.5.x/client-react-native/examples/databases/list-documents.md
new file mode 100644
index 0000000000..90dcd6318c
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/databases/list-documents.md
@@ -0,0 +1,15 @@
+import { Client, Databases } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const databases = new Databases(client);
+
+const result = await databases.listDocuments(
+ '', // databaseId
+ '', // collectionId
+ [] // queries (optional)
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/databases/update-document.md b/docs/examples/1.5.x/client-react-native/examples/databases/update-document.md
new file mode 100644
index 0000000000..fa04f2134a
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/databases/update-document.md
@@ -0,0 +1,17 @@
+import { Client, Databases } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const databases = new Databases(client);
+
+const result = await databases.updateDocument(
+ '', // databaseId
+ '', // collectionId
+ '', // documentId
+ {}, // data (optional)
+ ["read("any")"] // permissions (optional)
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/functions/create-execution.md b/docs/examples/1.5.x/client-react-native/examples/functions/create-execution.md
new file mode 100644
index 0000000000..1b4bfaa609
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/functions/create-execution.md
@@ -0,0 +1,18 @@
+import { Client, Functions, ExecutionMethod } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const functions = new Functions(client);
+
+const result = await functions.createExecution(
+ '', // functionId
+ '', // body (optional)
+ false, // async (optional)
+ '', // path (optional)
+ ExecutionMethod.GET, // method (optional)
+ {} // headers (optional)
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/functions/get-execution.md b/docs/examples/1.5.x/client-react-native/examples/functions/get-execution.md
new file mode 100644
index 0000000000..adda043543
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/functions/get-execution.md
@@ -0,0 +1,14 @@
+import { Client, Functions } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const functions = new Functions(client);
+
+const result = await functions.getExecution(
+ '', // functionId
+ '' // executionId
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/functions/list-executions.md b/docs/examples/1.5.x/client-react-native/examples/functions/list-executions.md
new file mode 100644
index 0000000000..b1fdd6bd6f
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/functions/list-executions.md
@@ -0,0 +1,15 @@
+import { Client, Functions } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const functions = new Functions(client);
+
+const result = await functions.listExecutions(
+ '', // functionId
+ [], // queries (optional)
+ '' // search (optional)
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/graphql/mutation.md b/docs/examples/1.5.x/client-react-native/examples/graphql/mutation.md
new file mode 100644
index 0000000000..b3c3583804
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/graphql/mutation.md
@@ -0,0 +1,13 @@
+import { Client, Graphql } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const graphql = new Graphql(client);
+
+const result = await graphql.mutation(
+ {} // query
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/graphql/query.md b/docs/examples/1.5.x/client-react-native/examples/graphql/query.md
new file mode 100644
index 0000000000..e15400d05d
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/graphql/query.md
@@ -0,0 +1,13 @@
+import { Client, Graphql } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const graphql = new Graphql(client);
+
+const result = await graphql.query(
+ {} // query
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/locale/get.md b/docs/examples/1.5.x/client-react-native/examples/locale/get.md
new file mode 100644
index 0000000000..4af9df39bc
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/locale/get.md
@@ -0,0 +1,11 @@
+import { Client, Locale } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const locale = new Locale(client);
+
+const result = await locale.get();
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/locale/list-codes.md b/docs/examples/1.5.x/client-react-native/examples/locale/list-codes.md
new file mode 100644
index 0000000000..8737fde873
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/locale/list-codes.md
@@ -0,0 +1,11 @@
+import { Client, Locale } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const locale = new Locale(client);
+
+const result = await locale.listCodes();
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/locale/list-continents.md b/docs/examples/1.5.x/client-react-native/examples/locale/list-continents.md
new file mode 100644
index 0000000000..e8c3920a17
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/locale/list-continents.md
@@ -0,0 +1,11 @@
+import { Client, Locale } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const locale = new Locale(client);
+
+const result = await locale.listContinents();
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/locale/list-countries-e-u.md b/docs/examples/1.5.x/client-react-native/examples/locale/list-countries-e-u.md
new file mode 100644
index 0000000000..0a2abc53c7
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/locale/list-countries-e-u.md
@@ -0,0 +1,11 @@
+import { Client, Locale } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const locale = new Locale(client);
+
+const result = await locale.listCountriesEU();
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/locale/list-countries-phones.md b/docs/examples/1.5.x/client-react-native/examples/locale/list-countries-phones.md
new file mode 100644
index 0000000000..d4d00ae394
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/locale/list-countries-phones.md
@@ -0,0 +1,11 @@
+import { Client, Locale } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const locale = new Locale(client);
+
+const result = await locale.listCountriesPhones();
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/locale/list-countries.md b/docs/examples/1.5.x/client-react-native/examples/locale/list-countries.md
new file mode 100644
index 0000000000..8839b6f039
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/locale/list-countries.md
@@ -0,0 +1,11 @@
+import { Client, Locale } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const locale = new Locale(client);
+
+const result = await locale.listCountries();
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/locale/list-currencies.md b/docs/examples/1.5.x/client-react-native/examples/locale/list-currencies.md
new file mode 100644
index 0000000000..6700ef1292
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/locale/list-currencies.md
@@ -0,0 +1,11 @@
+import { Client, Locale } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const locale = new Locale(client);
+
+const result = await locale.listCurrencies();
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/locale/list-languages.md b/docs/examples/1.5.x/client-react-native/examples/locale/list-languages.md
new file mode 100644
index 0000000000..db9b17294e
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/locale/list-languages.md
@@ -0,0 +1,11 @@
+import { Client, Locale } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const locale = new Locale(client);
+
+const result = await locale.listLanguages();
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/messaging/create-subscriber.md b/docs/examples/1.5.x/client-react-native/examples/messaging/create-subscriber.md
new file mode 100644
index 0000000000..bf5a0cec1d
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/messaging/create-subscriber.md
@@ -0,0 +1,15 @@
+import { Client, Messaging } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const messaging = new Messaging(client);
+
+const result = await messaging.createSubscriber(
+ '', // topicId
+ '', // subscriberId
+ '' // targetId
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/messaging/delete-subscriber.md b/docs/examples/1.5.x/client-react-native/examples/messaging/delete-subscriber.md
new file mode 100644
index 0000000000..da995fc419
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/messaging/delete-subscriber.md
@@ -0,0 +1,14 @@
+import { Client, Messaging } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const messaging = new Messaging(client);
+
+const result = await messaging.deleteSubscriber(
+ '', // topicId
+ '' // subscriberId
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/storage/create-file.md b/docs/examples/1.5.x/client-react-native/examples/storage/create-file.md
new file mode 100644
index 0000000000..73908c6de0
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/storage/create-file.md
@@ -0,0 +1,16 @@
+import { Client, Storage } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const storage = new Storage(client);
+
+const result = await storage.createFile(
+ '', // bucketId
+ '', // fileId
+ await pickSingle(), // file
+ ["read("any")"] // permissions (optional)
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/storage/delete-file.md b/docs/examples/1.5.x/client-react-native/examples/storage/delete-file.md
new file mode 100644
index 0000000000..4373ebec04
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/storage/delete-file.md
@@ -0,0 +1,14 @@
+import { Client, Storage } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const storage = new Storage(client);
+
+const result = await storage.deleteFile(
+ '', // bucketId
+ '' // fileId
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/storage/get-file-download.md b/docs/examples/1.5.x/client-react-native/examples/storage/get-file-download.md
new file mode 100644
index 0000000000..943bf9dd76
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/storage/get-file-download.md
@@ -0,0 +1,14 @@
+import { Client, Storage } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const storage = new Storage(client);
+
+const result = storage.getFileDownload(
+ '', // bucketId
+ '' // fileId
+);
+
+console.log(result);
diff --git a/docs/examples/1.5.x/client-react-native/examples/storage/get-file-preview.md b/docs/examples/1.5.x/client-react-native/examples/storage/get-file-preview.md
new file mode 100644
index 0000000000..76713c8694
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/storage/get-file-preview.md
@@ -0,0 +1,25 @@
+import { Client, Storage, ImageGravity, ImageFormat } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const storage = new Storage(client);
+
+const result = storage.getFilePreview(
+ '', // bucketId
+ '', // fileId
+ 0, // width (optional)
+ 0, // height (optional)
+ ImageGravity.Center, // gravity (optional)
+ 0, // quality (optional)
+ 0, // borderWidth (optional)
+ '', // borderColor (optional)
+ 0, // borderRadius (optional)
+ 0, // opacity (optional)
+ -360, // rotation (optional)
+ '', // background (optional)
+ ImageFormat.Jpg // output (optional)
+);
+
+console.log(result);
diff --git a/docs/examples/1.5.x/client-react-native/examples/storage/get-file-view.md b/docs/examples/1.5.x/client-react-native/examples/storage/get-file-view.md
new file mode 100644
index 0000000000..b551e02405
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/storage/get-file-view.md
@@ -0,0 +1,14 @@
+import { Client, Storage } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const storage = new Storage(client);
+
+const result = storage.getFileView(
+ '', // bucketId
+ '' // fileId
+);
+
+console.log(result);
diff --git a/docs/examples/1.5.x/client-react-native/examples/storage/get-file.md b/docs/examples/1.5.x/client-react-native/examples/storage/get-file.md
new file mode 100644
index 0000000000..8731c8463d
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/storage/get-file.md
@@ -0,0 +1,14 @@
+import { Client, Storage } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const storage = new Storage(client);
+
+const result = await storage.getFile(
+ '', // bucketId
+ '' // fileId
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/storage/list-files.md b/docs/examples/1.5.x/client-react-native/examples/storage/list-files.md
new file mode 100644
index 0000000000..c72b9ba8a5
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/storage/list-files.md
@@ -0,0 +1,15 @@
+import { Client, Storage } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const storage = new Storage(client);
+
+const result = await storage.listFiles(
+ '', // bucketId
+ [], // queries (optional)
+ '' // search (optional)
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/storage/update-file.md b/docs/examples/1.5.x/client-react-native/examples/storage/update-file.md
new file mode 100644
index 0000000000..87f81ab038
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/storage/update-file.md
@@ -0,0 +1,16 @@
+import { Client, Storage } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const storage = new Storage(client);
+
+const result = await storage.updateFile(
+ '', // bucketId
+ '', // fileId
+ '', // name (optional)
+ ["read("any")"] // permissions (optional)
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/teams/create-membership.md b/docs/examples/1.5.x/client-react-native/examples/teams/create-membership.md
new file mode 100644
index 0000000000..a5d6fa043e
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/teams/create-membership.md
@@ -0,0 +1,19 @@
+import { Client, Teams } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const teams = new Teams(client);
+
+const result = await teams.createMembership(
+ '', // teamId
+ [], // roles
+ 'email@example.com', // email (optional)
+ '', // userId (optional)
+ '+12065550100', // phone (optional)
+ 'https://example.com', // url (optional)
+ '' // name (optional)
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/teams/create.md b/docs/examples/1.5.x/client-react-native/examples/teams/create.md
new file mode 100644
index 0000000000..f61df435a2
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/teams/create.md
@@ -0,0 +1,15 @@
+import { Client, Teams } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const teams = new Teams(client);
+
+const result = await teams.create(
+ '', // teamId
+ '', // name
+ [] // roles (optional)
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/teams/delete-membership.md b/docs/examples/1.5.x/client-react-native/examples/teams/delete-membership.md
new file mode 100644
index 0000000000..f5ed1bcf9c
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/teams/delete-membership.md
@@ -0,0 +1,14 @@
+import { Client, Teams } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const teams = new Teams(client);
+
+const result = await teams.deleteMembership(
+ '', // teamId
+ '' // membershipId
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/teams/delete.md b/docs/examples/1.5.x/client-react-native/examples/teams/delete.md
new file mode 100644
index 0000000000..77dac565b0
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/teams/delete.md
@@ -0,0 +1,13 @@
+import { Client, Teams } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const teams = new Teams(client);
+
+const result = await teams.delete(
+ '' // teamId
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/teams/get-membership.md b/docs/examples/1.5.x/client-react-native/examples/teams/get-membership.md
new file mode 100644
index 0000000000..44a664c5db
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/teams/get-membership.md
@@ -0,0 +1,14 @@
+import { Client, Teams } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const teams = new Teams(client);
+
+const result = await teams.getMembership(
+ '', // teamId
+ '' // membershipId
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/teams/get-prefs.md b/docs/examples/1.5.x/client-react-native/examples/teams/get-prefs.md
new file mode 100644
index 0000000000..5f7cf16921
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/teams/get-prefs.md
@@ -0,0 +1,13 @@
+import { Client, Teams } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const teams = new Teams(client);
+
+const result = await teams.getPrefs(
+ '' // teamId
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/teams/get.md b/docs/examples/1.5.x/client-react-native/examples/teams/get.md
new file mode 100644
index 0000000000..28d8895c9c
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/teams/get.md
@@ -0,0 +1,13 @@
+import { Client, Teams } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const teams = new Teams(client);
+
+const result = await teams.get(
+ '' // teamId
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/teams/list-memberships.md b/docs/examples/1.5.x/client-react-native/examples/teams/list-memberships.md
new file mode 100644
index 0000000000..afc2e39d20
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/teams/list-memberships.md
@@ -0,0 +1,15 @@
+import { Client, Teams } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const teams = new Teams(client);
+
+const result = await teams.listMemberships(
+ '', // teamId
+ [], // queries (optional)
+ '' // search (optional)
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/teams/list.md b/docs/examples/1.5.x/client-react-native/examples/teams/list.md
new file mode 100644
index 0000000000..cd97431d14
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/teams/list.md
@@ -0,0 +1,14 @@
+import { Client, Teams } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const teams = new Teams(client);
+
+const result = await teams.list(
+ [], // queries (optional)
+ '' // search (optional)
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/teams/update-membership-status.md b/docs/examples/1.5.x/client-react-native/examples/teams/update-membership-status.md
new file mode 100644
index 0000000000..85eecb9320
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/teams/update-membership-status.md
@@ -0,0 +1,16 @@
+import { Client, Teams } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const teams = new Teams(client);
+
+const result = await teams.updateMembershipStatus(
+ '', // teamId
+ '', // membershipId
+ '', // userId
+ '' // secret
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/teams/update-membership.md b/docs/examples/1.5.x/client-react-native/examples/teams/update-membership.md
new file mode 100644
index 0000000000..684c40a2d0
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/teams/update-membership.md
@@ -0,0 +1,15 @@
+import { Client, Teams } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const teams = new Teams(client);
+
+const result = await teams.updateMembership(
+ '', // teamId
+ '', // membershipId
+ [] // roles
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/teams/update-name.md b/docs/examples/1.5.x/client-react-native/examples/teams/update-name.md
new file mode 100644
index 0000000000..75f3fda4ef
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/teams/update-name.md
@@ -0,0 +1,14 @@
+import { Client, Teams } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const teams = new Teams(client);
+
+const result = await teams.updateName(
+ '', // teamId
+ '' // name
+);
+
+console.log(response);
diff --git a/docs/examples/1.5.x/client-react-native/examples/teams/update-prefs.md b/docs/examples/1.5.x/client-react-native/examples/teams/update-prefs.md
new file mode 100644
index 0000000000..f9c4c21623
--- /dev/null
+++ b/docs/examples/1.5.x/client-react-native/examples/teams/update-prefs.md
@@ -0,0 +1,14 @@
+import { Client, Teams } from "react-native-appwrite";
+
+const client = new Client()
+ .setEndpoint('https://cloud.appwrite.io/v1') // Your API Endpoint
+ .setProject('5df5acd0d48c2'); // Your project ID
+
+const teams = new Teams(client);
+
+const result = await teams.updatePrefs(
+ '', // teamId
+ {} // prefs
+);
+
+console.log(response);
From 2f5be1080f104383921c0654b9131716985352b9 Mon Sep 17 00:00:00 2001
From: fuyangpengqi <995764973@qq.com>
Date: Thu, 18 Apr 2024 21:40:03 +0800
Subject: [PATCH 022/138] chore: fix some typos in comments
Signed-off-by: fuyangpengqi <995764973@qq.com>
---
app/config/errors.php | 8 ++++----
app/init.php | 4 ++--
src/Appwrite/Platform/Tasks/CalcTierStats.php | 4 ++--
src/Appwrite/Platform/Tasks/CreateInfMetric.php | 4 ++--
.../Platform/Tasks/PatchRecreateRepositoriesDocuments.php | 4 ++--
5 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/app/config/errors.php b/app/config/errors.php
index c999ddba58..3cb16d4063 100644
--- a/app/config/errors.php
+++ b/app/config/errors.php
@@ -11,7 +11,7 @@ return [
/** General Errors */
Exception::GENERAL_UNKNOWN => [
'name' => Exception::GENERAL_UNKNOWN,
- 'description' => 'An unknown error has occured. Please check the logs for more information.',
+ 'description' => 'An unknown error has occurred. Please check the logs for more information.',
'code' => 500,
],
Exception::GENERAL_MOCK => [
@@ -279,7 +279,7 @@ return [
],
Exception::USER_CHALLENGE_REQUIRED => [
'name' => Exception::USER_CHALLENGE_REQUIRED,
- 'description' => 'A recently succeessful challenge is required to complete this action. A challenge is considered recent for 5 minutes.',
+ 'description' => 'A recently successful challenge is required to complete this action. A challenge is considered recent for 5 minutes.',
'code' => 401,
],
Exception::USER_OAUTH2_BAD_REQUEST => [
@@ -484,7 +484,7 @@ return [
],
Exception::REPOSITORY_NOT_FOUND => [
'name' => Exception::REPOSITORY_NOT_FOUND,
- 'description' => 'Repository with the requested ID could not be found. Check to see if the ID is correct, or create the respository.',
+ 'description' => 'Repository with the requested ID could not be found. Check to see if the ID is correct, or create the repository.',
'code' => 404,
],
Exception::PROVIDER_CONTRIBUTION_CONFLICT => [
@@ -494,7 +494,7 @@ return [
],
Exception::GENERAL_PROVIDER_FAILURE => [
'name' => Exception::GENERAL_PROVIDER_FAILURE,
- 'description' => 'VCS (Version Control System) provider failed to proccess the request. We believe this is an error with the VCS provider. Try again, or contact support for more information.',
+ 'description' => 'VCS (Version Control System) provider failed to process the request. We believe this is an error with the VCS provider. Try again, or contact support for more information.',
'code' => 400,
],
diff --git a/app/init.php b/app/init.php
index 5877327ab6..5d688fd1b5 100644
--- a/app/init.php
+++ b/app/init.php
@@ -837,7 +837,7 @@ $register->set('pools', function () {
/**
* Get Resource
*
- * Creation could be reused accross connection types like database, cache, queue, etc.
+ * Creation could be reused across connection types like database, cache, queue, etc.
*
* Resource assignment to an adapter will happen below.
*/
@@ -847,7 +847,7 @@ $register->set('pools', function () {
$resource = function () use ($dsnHost, $dsnPort, $dsnUser, $dsnPass, $dsnDatabase) {
return new PDOProxy(function () use ($dsnHost, $dsnPort, $dsnUser, $dsnPass, $dsnDatabase) {
return new PDO("mysql:host={$dsnHost};port={$dsnPort};dbname={$dsnDatabase};charset=utf8mb4", $dsnUser, $dsnPass, array(
- // No need to set PDO::ATTR_ERRMODE it is overwitten in PDOProxy
+ // No need to set PDO::ATTR_ERRMODE it is overwritten in PDOProxy
PDO::ATTR_TIMEOUT => 3, // Seconds
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
diff --git a/src/Appwrite/Platform/Tasks/CalcTierStats.php b/src/Appwrite/Platform/Tasks/CalcTierStats.php
index 2d7dd3403f..ae8bd27fe3 100644
--- a/src/Appwrite/Platform/Tasks/CalcTierStats.php
+++ b/src/Appwrite/Platform/Tasks/CalcTierStats.php
@@ -103,7 +103,7 @@ class CalcTierStats extends Action
return;
} catch (\Throwable $th) {
- Console::error("Unexpected error occured with Project ID {$projectId}");
+ Console::error("Unexpected error occurred with Project ID {$projectId}");
Console::error('[Error] Type: ' . get_class($th));
Console::error('[Error] Message: ' . $th->getMessage());
Console::error('[Error] File: ' . $th->getFile());
@@ -129,7 +129,7 @@ class CalcTierStats extends Action
$data = $this->getData($project, $dbForConsole, $dbForProject);
$csv->insertOne($data);
} catch (\Throwable $th) {
- Console::error("Unexpected error occured with Project ID {$projectId}");
+ Console::error("Unexpected error occurred with Project ID {$projectId}");
Console::error('[Error] Type: ' . get_class($th));
Console::error('[Error] Message: ' . $th->getMessage());
Console::error('[Error] File: ' . $th->getFile());
diff --git a/src/Appwrite/Platform/Tasks/CreateInfMetric.php b/src/Appwrite/Platform/Tasks/CreateInfMetric.php
index c50b6e09f9..ce3484edbf 100644
--- a/src/Appwrite/Platform/Tasks/CreateInfMetric.php
+++ b/src/Appwrite/Platform/Tasks/CreateInfMetric.php
@@ -50,7 +50,7 @@ class CreateInfMetric extends Action
$dbForProject = call_user_func($getProjectDB, $project);
$this->getUsageData($dbForProject, $project);
} catch (\Throwable $th) {
- Console::error("Unexpected error occured with Project ID {$projectId}");
+ Console::error("Unexpected error occurred with Project ID {$projectId}");
Console::error('[Error] Type: ' . get_class($th));
Console::error('[Error] Message: ' . $th->getMessage());
Console::error('[Error] File: ' . $th->getFile());
@@ -72,7 +72,7 @@ class CreateInfMetric extends Action
$dbForProject = call_user_func($getProjectDB, $project);
$this->getUsageData($dbForProject, $project);
} catch (\Throwable $th) {
- Console::error("Unexpected error occured with Project ID {$projectId}");
+ Console::error("Unexpected error occurred with Project ID {$projectId}");
Console::error('[Error] Type: ' . get_class($th));
Console::error('[Error] Message: ' . $th->getMessage());
Console::error('[Error] File: ' . $th->getFile());
diff --git a/src/Appwrite/Platform/Tasks/PatchRecreateRepositoriesDocuments.php b/src/Appwrite/Platform/Tasks/PatchRecreateRepositoriesDocuments.php
index 9cf65d05b6..a7e2367d59 100644
--- a/src/Appwrite/Platform/Tasks/PatchRecreateRepositoriesDocuments.php
+++ b/src/Appwrite/Platform/Tasks/PatchRecreateRepositoriesDocuments.php
@@ -42,7 +42,7 @@ class PatchRecreateRepositoriesDocuments extends Action
$dbForProject = call_user_func($getProjectDB, $project);
$this->recreateRepositories($dbForConsole, $dbForProject, $project);
} catch (\Throwable $th) {
- Console::error("Unexpected error occured with Project ID {$projectId}");
+ Console::error("Unexpected error occurred with Project ID {$projectId}");
Console::error('[Error] Type: ' . get_class($th));
Console::error('[Error] Message: ' . $th->getMessage());
Console::error('[Error] File: ' . $th->getFile());
@@ -64,7 +64,7 @@ class PatchRecreateRepositoriesDocuments extends Action
$dbForProject = call_user_func($getProjectDB, $project);
$this->recreateRepositories($dbForConsole, $dbForProject, $project);
} catch (\Throwable $th) {
- Console::error("Unexpected error occured with Project ID {$projectId}");
+ Console::error("Unexpected error occurred with Project ID {$projectId}");
Console::error('[Error] Type: ' . get_class($th));
Console::error('[Error] Message: ' . $th->getMessage());
Console::error('[Error] File: ' . $th->getFile());
From 8eb5b3467a5e47095214554bfb80d8280151012c Mon Sep 17 00:00:00 2001
From: Steven Nguyen <1477010+stnguyen90@users.noreply.github.com>
Date: Wed, 24 Apr 2024 23:00:23 +0000
Subject: [PATCH 023/138] feat(security): add github workflow to check
dependencies
This workflow action uses OSV Scanner, an open source vulnerability
scanner by Google. We're using OSV Scanner because it has:
* good usability - JSON output and multiple options
* good accuracy - OSV database from google and support
for multiple languages including PHP
---
.github/workflows/check-dependencies.yml | 19 +++++++++++++++++
.github/workflows/osv-scanner.yml | 27 ------------------------
2 files changed, 19 insertions(+), 27 deletions(-)
create mode 100644 .github/workflows/check-dependencies.yml
delete mode 100644 .github/workflows/osv-scanner.yml
diff --git a/.github/workflows/check-dependencies.yml b/.github/workflows/check-dependencies.yml
new file mode 100644
index 0000000000..17caf3aa6b
--- /dev/null
+++ b/.github/workflows/check-dependencies.yml
@@ -0,0 +1,19 @@
+name: Check dependencies
+
+# Adapted from https://google.github.io/osv-scanner/github-action/#scan-on-pull-request
+
+on:
+ pull_request:
+ branches: [main, 1.*.x]
+ merge_group:
+ branches: [main, 1.*.x]
+
+permissions:
+ # Require writing security events to upload SARIF file to security tab
+ security-events: write
+ # Only need to read contents
+ contents: read
+
+jobs:
+ scan-pr:
+ uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable.yml@v1.7.1"
\ No newline at end of file
diff --git a/.github/workflows/osv-scanner.yml b/.github/workflows/osv-scanner.yml
deleted file mode 100644
index e4ee26c79b..0000000000
--- a/.github/workflows/osv-scanner.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-name: OSV Scanner
-
-on:
- pull_request:
- push:
-
-jobs:
- OSV-Scanner:
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v3
- with:
- fetch-depth: 0
-
- - name: Install Golang
- uses: actions/setup-go@v4
- with:
- go-version: '1.19'
-
- - name: Install OSV Scanner
- run: |
- go install github.com/google/osv-scanner/cmd/osv-scanner@latest
-
- - name: Scan for Vulnerabilities
- run: |
- osv-scanner -r .
From b76f91218c191339349acb431f78fb18340a3541 Mon Sep 17 00:00:00 2001
From: Damodar Lohani
Date: Thu, 25 Apr 2024 08:56:17 +0000
Subject: [PATCH 024/138] fixes
---
app/config/platforms.php | 2 +-
src/Appwrite/Platform/Tasks/SDKs.php | 1 -
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/app/config/platforms.php b/app/config/platforms.php
index a62717744f..d839345056 100644
--- a/app/config/platforms.php
+++ b/app/config/platforms.php
@@ -148,7 +148,7 @@ return [
'family' => APP_PLATFORM_CLIENT,
'prism' => 'javascript',
'source' => \realpath(__DIR__ . '/../sdks/client-react-native'),
- 'gitUrl' => 'https://github.com/appwrite/sdk-for-react-native.git',
+ 'gitUrl' => 'git@github.com:appwrite/sdk-for-react-native.git',
'gitRepoName' => 'sdk-for-react-native',
'gitUserName' => 'appwrite',
'gitBranch' => 'dev',
diff --git a/src/Appwrite/Platform/Tasks/SDKs.php b/src/Appwrite/Platform/Tasks/SDKs.php
index d2d8642d84..22b3234027 100644
--- a/src/Appwrite/Platform/Tasks/SDKs.php
+++ b/src/Appwrite/Platform/Tasks/SDKs.php
@@ -22,7 +22,6 @@ use Appwrite\SDK\Language\Swift;
use Appwrite\SDK\Language\Web;
use Appwrite\SDK\SDK;
use Appwrite\Spec\Swagger2;
-use Exception;
use Utopia\CLI\Console;
use Utopia\Config\Config;
use Utopia\Platform\Action;
From 5bf9ed7877e10163f9533d83010f5b98731be192 Mon Sep 17 00:00:00 2001
From: bhc
Date: Sat, 27 Apr 2024 00:36:33 +0300
Subject: [PATCH 025/138] Add PS to list of countries in countries.php
---
app/config/locale/countries.php | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/config/locale/countries.php b/app/config/locale/countries.php
index 07a418da9c..bd2cbbbaaa 100644
--- a/app/config/locale/countries.php
+++ b/app/config/locale/countries.php
@@ -145,6 +145,7 @@ return [
'NZ',
'OM',
'PK',
+ 'PS',
'PA',
'PE',
'PH',
From a87b68cba8c8ac50fa02defaaf9241790465bef4 Mon Sep 17 00:00:00 2001
From: bhc
Date: Sat, 27 Apr 2024 01:08:43 +0300
Subject: [PATCH 026/138] Update translations for Palestine in multiple
languages
---
app/config/locale/translations/af.json | 1 +
app/config/locale/translations/ar.json | 1 +
app/config/locale/translations/as.json | 1 +
app/config/locale/translations/az.json | 1 +
app/config/locale/translations/be.json | 1 +
app/config/locale/translations/bg.json | 1 +
app/config/locale/translations/bh.json | 1 +
app/config/locale/translations/bn.json | 1 +
app/config/locale/translations/bs.json | 1 +
app/config/locale/translations/ca.json | 1 +
app/config/locale/translations/cs.json | 1 +
app/config/locale/translations/da.json | 1 +
app/config/locale/translations/de.json | 1 +
app/config/locale/translations/el.json | 1 +
app/config/locale/translations/en.json | 1 +
app/config/locale/translations/eo.json | 1 +
app/config/locale/translations/es.json | 1 +
app/config/locale/translations/fa.json | 1 +
app/config/locale/translations/fi.json | 1 +
app/config/locale/translations/fo.json | 1 +
app/config/locale/translations/fr.json | 1 +
app/config/locale/translations/ga.json | 1 +
app/config/locale/translations/gu.json | 1 +
app/config/locale/translations/he.json | 1 +
app/config/locale/translations/hi.json | 1 +
app/config/locale/translations/hr.json | 1 +
app/config/locale/translations/hu.json | 1 +
app/config/locale/translations/hy.json | 1 +
app/config/locale/translations/id.json | 1 +
app/config/locale/translations/is.json | 1 +
app/config/locale/translations/it.json | 1 +
app/config/locale/translations/ja.json | 1 +
app/config/locale/translations/jv.json | 1 +
app/config/locale/translations/km.json | 1 +
app/config/locale/translations/kn.json | 1 +
app/config/locale/translations/ko.json | 1 +
app/config/locale/translations/la.json | 1 +
app/config/locale/translations/lb.json | 1 +
app/config/locale/translations/lt.json | 1 +
app/config/locale/translations/lv.json | 1 +
app/config/locale/translations/ml.json | 1 +
app/config/locale/translations/mr.json | 1 +
app/config/locale/translations/ms.json | 1 +
app/config/locale/translations/nb.json | 1 +
app/config/locale/translations/ne.json | 1 +
app/config/locale/translations/nl.json | 1 +
app/config/locale/translations/nn.json | 1 +
app/config/locale/translations/or.json | 1 +
app/config/locale/translations/pa.json | 1 +
app/config/locale/translations/pl.json | 1 +
app/config/locale/translations/pt-br.json | 1 +
app/config/locale/translations/pt-pt.json | 1 +
app/config/locale/translations/ro.json | 1 +
app/config/locale/translations/ru.json | 1 +
app/config/locale/translations/sa.json | 1 +
app/config/locale/translations/sd.json | 1 +
app/config/locale/translations/si.json | 1 +
app/config/locale/translations/sk.json | 1 +
app/config/locale/translations/sl.json | 1 +
app/config/locale/translations/sn.json | 1 +
app/config/locale/translations/sq.json | 1 +
app/config/locale/translations/sv.json | 1 +
app/config/locale/translations/ta.json | 1 +
app/config/locale/translations/te.json | 1 +
app/config/locale/translations/th.json | 1 +
app/config/locale/translations/tl.json | 1 +
app/config/locale/translations/tr.json | 1 +
app/config/locale/translations/uk.json | 1 +
app/config/locale/translations/ur.json | 1 +
app/config/locale/translations/vi.json | 1 +
app/config/locale/translations/zh-cn.json | 1 +
app/config/locale/translations/zh-tw.json | 1 +
72 files changed, 72 insertions(+)
diff --git a/app/config/locale/translations/af.json b/app/config/locale/translations/af.json
index 8026b809da..f8c8123979 100644
--- a/app/config/locale/translations/af.json
+++ b/app/config/locale/translations/af.json
@@ -163,6 +163,7 @@
"countries.nz": "Nieu-Seeland",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestine",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filippyne",
diff --git a/app/config/locale/translations/ar.json b/app/config/locale/translations/ar.json
index a35ca43915..b2659a97be 100644
--- a/app/config/locale/translations/ar.json
+++ b/app/config/locale/translations/ar.json
@@ -163,6 +163,7 @@
"countries.nz": "نيوزيلندا",
"countries.om": "عمان",
"countries.pk": "باكستان",
+ "countries.ps": "فلسطين",
"countries.pa": "بنما",
"countries.pe": "بيرو",
"countries.ph": "الفلبين",
diff --git a/app/config/locale/translations/as.json b/app/config/locale/translations/as.json
index 0bfea1d651..81a3c9aaa0 100644
--- a/app/config/locale/translations/as.json
+++ b/app/config/locale/translations/as.json
@@ -163,6 +163,7 @@
"countries.nz": "নিউজিলেণ্ড",
"countries.om": "ওমান",
"countries.pk": "পাকিস্তান",
+ "countries.ps": "প্যালেস্টাইন",
"countries.pa": "পানামা",
"countries.pe": "পেৰু",
"countries.ph": "ফিলিপাইনচ",
diff --git a/app/config/locale/translations/az.json b/app/config/locale/translations/az.json
index d544d2692b..c6a5c1301c 100644
--- a/app/config/locale/translations/az.json
+++ b/app/config/locale/translations/az.json
@@ -163,6 +163,7 @@
"countries.nz": "Yeni Zelandiya",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Fələstin",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filippin",
diff --git a/app/config/locale/translations/be.json b/app/config/locale/translations/be.json
index 3cfec89689..a5c03d0e29 100644
--- a/app/config/locale/translations/be.json
+++ b/app/config/locale/translations/be.json
@@ -163,6 +163,7 @@
"countries.nz": "Новая Зеландыя",
"countries.om": "Аман",
"countries.pk": "Пакістан",
+ "countries.ps": "Палестина",
"countries.pa": "Панама",
"countries.pe": "Перу",
"countries.ph": "Філіпіны",
diff --git a/app/config/locale/translations/bg.json b/app/config/locale/translations/bg.json
index 942ac71b75..a3ed69f4c6 100644
--- a/app/config/locale/translations/bg.json
+++ b/app/config/locale/translations/bg.json
@@ -163,6 +163,7 @@
"countries.nz": "Нова Зеландия",
"countries.om": "Оман",
"countries.pk": "Пакистан",
+ "countries.ps": "Палестина",
"countries.pa": "Панама",
"countries.pe": "Перу",
"countries.ph": "Филипини",
diff --git a/app/config/locale/translations/bh.json b/app/config/locale/translations/bh.json
index 227d1a6fb8..eb6de0f12d 100644
--- a/app/config/locale/translations/bh.json
+++ b/app/config/locale/translations/bh.json
@@ -163,6 +163,7 @@
"countries.nz": "न्यूजीलैंड",
"countries.om": "ओमान",
"countries.pk": "पाकिस्तान",
+ "countries.ps": "पैलिस्टाइन",
"countries.pa": "पनामा",
"countries.pe": "पेरू",
"countries.ph": "फिलीपींस",
diff --git a/app/config/locale/translations/bn.json b/app/config/locale/translations/bn.json
index 4f98b41533..3e67c466d0 100644
--- a/app/config/locale/translations/bn.json
+++ b/app/config/locale/translations/bn.json
@@ -163,6 +163,7 @@
"countries.nz": "নিউজিল্যান্ড",
"countries.om": "ওমান",
"countries.pk": "পাকিস্তান",
+ "countries.ps": "প্যালেস্টাইন",
"countries.pa": "পানামা",
"countries.pe": "পেরু",
"countries.ph": "ফিলিপাইন",
diff --git a/app/config/locale/translations/bs.json b/app/config/locale/translations/bs.json
index 3bf0b5e060..bdf6fe5be4 100644
--- a/app/config/locale/translations/bs.json
+++ b/app/config/locale/translations/bs.json
@@ -163,6 +163,7 @@
"countries.nz": "Novi Zeland",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestina",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filipini",
diff --git a/app/config/locale/translations/ca.json b/app/config/locale/translations/ca.json
index cad17927d0..34c4b949cb 100644
--- a/app/config/locale/translations/ca.json
+++ b/app/config/locale/translations/ca.json
@@ -163,6 +163,7 @@
"countries.nz": "Nova Zelanda",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestina",
"countries.pa": "Panamà",
"countries.pe": "Perú",
"countries.ph": "Filipines",
diff --git a/app/config/locale/translations/cs.json b/app/config/locale/translations/cs.json
index 899e04d8fe..4156059080 100644
--- a/app/config/locale/translations/cs.json
+++ b/app/config/locale/translations/cs.json
@@ -163,6 +163,7 @@
"countries.nz": "Nový Zéland",
"countries.om": "Omán",
"countries.pk": "Pákistán",
+ "countries.ps": "Palestina",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filipíny",
diff --git a/app/config/locale/translations/da.json b/app/config/locale/translations/da.json
index 52e80d6def..b5a2bcaa9d 100644
--- a/app/config/locale/translations/da.json
+++ b/app/config/locale/translations/da.json
@@ -163,6 +163,7 @@
"countries.nz": "New Zealand",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palæstina",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filippinerne",
diff --git a/app/config/locale/translations/de.json b/app/config/locale/translations/de.json
index e6950a8835..61f4ad4d42 100644
--- a/app/config/locale/translations/de.json
+++ b/app/config/locale/translations/de.json
@@ -163,6 +163,7 @@
"countries.nz": "Neuseeland",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palästina",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Philippinen",
diff --git a/app/config/locale/translations/el.json b/app/config/locale/translations/el.json
index 8f30faa455..de64b5738a 100644
--- a/app/config/locale/translations/el.json
+++ b/app/config/locale/translations/el.json
@@ -163,6 +163,7 @@
"countries.nz": "Νέα Ζηλανδία",
"countries.om": "Ομάν",
"countries.pk": "Πακιστάν",
+ "countries.ps": "Παλαιστίνη",
"countries.pa": "Παναμάς",
"countries.pe": "Περού",
"countries.ph": "Φιλιππίνες",
diff --git a/app/config/locale/translations/en.json b/app/config/locale/translations/en.json
index 6c9eb5895d..f93dfcc0fd 100644
--- a/app/config/locale/translations/en.json
+++ b/app/config/locale/translations/en.json
@@ -180,6 +180,7 @@
"countries.nz": "New Zealand",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestine",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Philippines",
diff --git a/app/config/locale/translations/eo.json b/app/config/locale/translations/eo.json
index 30452e5c9c..ac54562128 100644
--- a/app/config/locale/translations/eo.json
+++ b/app/config/locale/translations/eo.json
@@ -162,6 +162,7 @@
"countries.nz": "New Zealand",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestinio",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Philippines",
diff --git a/app/config/locale/translations/es.json b/app/config/locale/translations/es.json
index a4fcc3371f..69abecfc52 100644
--- a/app/config/locale/translations/es.json
+++ b/app/config/locale/translations/es.json
@@ -163,6 +163,7 @@
"countries.nz": "Nueva Zelanda",
"countries.om": "Omán",
"countries.pk": "Pakistán",
+ "countries.ps": "Palestina",
"countries.pa": "Panamá",
"countries.pe": "Perú",
"countries.ph": "Filipinas",
diff --git a/app/config/locale/translations/fa.json b/app/config/locale/translations/fa.json
index ad5657be9b..8a82b51e8c 100644
--- a/app/config/locale/translations/fa.json
+++ b/app/config/locale/translations/fa.json
@@ -163,6 +163,7 @@
"countries.nz": "نیوزلند",
"countries.om": "عمان",
"countries.pk": "پاکستان",
+ "countries.ps": "فلسطین",
"countries.pa": "پاناما",
"countries.pe": "پرو",
"countries.ph": "فیلیپین",
diff --git a/app/config/locale/translations/fi.json b/app/config/locale/translations/fi.json
index b46e907c86..c7bea9a077 100644
--- a/app/config/locale/translations/fi.json
+++ b/app/config/locale/translations/fi.json
@@ -163,6 +163,7 @@
"countries.nz": "Uusi-Seelanti",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestiina",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filippiinit",
diff --git a/app/config/locale/translations/fo.json b/app/config/locale/translations/fo.json
index 8fe0fa06ff..2c6110f7f0 100644
--- a/app/config/locale/translations/fo.json
+++ b/app/config/locale/translations/fo.json
@@ -163,6 +163,7 @@
"countries.nz": "Nýsæland",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestina",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filipsoyggjar",
diff --git a/app/config/locale/translations/fr.json b/app/config/locale/translations/fr.json
index d89582299f..8ee459c9a9 100644
--- a/app/config/locale/translations/fr.json
+++ b/app/config/locale/translations/fr.json
@@ -163,6 +163,7 @@
"countries.nz": "Nouvelle-Zélande",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestine",
"countries.pa": "Panama",
"countries.pe": "Pérou",
"countries.ph": "Philippines",
diff --git a/app/config/locale/translations/ga.json b/app/config/locale/translations/ga.json
index 8847f378ef..8217dbe042 100644
--- a/app/config/locale/translations/ga.json
+++ b/app/config/locale/translations/ga.json
@@ -163,6 +163,7 @@
"countries.nz": "An Nua-Shéalainn",
"countries.om": "Óman",
"countries.pk": "An Phacastáin",
+ "countries.ps": "An Phalaistín",
"countries.pa": "Panama",
"countries.pe": "Peiriú",
"countries.ph": "Na hOileáin Fhilipíneacha",
diff --git a/app/config/locale/translations/gu.json b/app/config/locale/translations/gu.json
index e1350cfb3e..dc526cda61 100644
--- a/app/config/locale/translations/gu.json
+++ b/app/config/locale/translations/gu.json
@@ -163,6 +163,7 @@
"countries.nz": "ન્યુઝીલેન્ડ",
"countries.om": "ઓમાન",
"countries.pk": "પાકિસ્તાન",
+ "countries.ps": "પેલેસ્ટાઇન",
"countries.pa": "પનામા",
"countries.pe": "પેરુ",
"countries.ph": "ફિલિપાઇન્સ",
diff --git a/app/config/locale/translations/he.json b/app/config/locale/translations/he.json
index 1da44cc28e..96e8c32cc7 100644
--- a/app/config/locale/translations/he.json
+++ b/app/config/locale/translations/he.json
@@ -163,6 +163,7 @@
"countries.nz": "ניו זילנד",
"countries.om": "עומאן",
"countries.pk": "פקיסטן",
+ "countries.ps": "פלסטין",
"countries.pa": "פנמה",
"countries.pe": "פרו",
"countries.ph": "הפיליפינים",
diff --git a/app/config/locale/translations/hi.json b/app/config/locale/translations/hi.json
index 7a6df759cc..f3f1adf579 100644
--- a/app/config/locale/translations/hi.json
+++ b/app/config/locale/translations/hi.json
@@ -163,6 +163,7 @@
"countries.nz": "न्यूजीलैंड",
"countries.om": "ओमान",
"countries.pk": "पाकिस्तान",
+ "countries.ps": "पैलिस्टाइन",
"countries.pa": "पनामा",
"countries.pe": "पेरू",
"countries.ph": "फिलीपींस",
diff --git a/app/config/locale/translations/hr.json b/app/config/locale/translations/hr.json
index 7b5e649cab..12d7fe846c 100644
--- a/app/config/locale/translations/hr.json
+++ b/app/config/locale/translations/hr.json
@@ -163,6 +163,7 @@
"countries.nz": "Novi Zeland",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestina",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filipini",
diff --git a/app/config/locale/translations/hu.json b/app/config/locale/translations/hu.json
index c99280bfbc..d266c3ae1f 100644
--- a/app/config/locale/translations/hu.json
+++ b/app/config/locale/translations/hu.json
@@ -163,6 +163,7 @@
"countries.nz": "Új-Zéland",
"countries.om": "Omán",
"countries.pk": "Pakisztán",
+ "countries.ps": "Palesztina",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Fülöp-szigetek",
diff --git a/app/config/locale/translations/hy.json b/app/config/locale/translations/hy.json
index 0ac61a0d00..f951686961 100644
--- a/app/config/locale/translations/hy.json
+++ b/app/config/locale/translations/hy.json
@@ -163,6 +163,7 @@
"countries.nz": "Նոր Զելանդիա",
"countries.om": "Օման",
"countries.pk": "Պակիստան",
+ "countries.ps": "Պաղեստին",
"countries.pa": "Պանամա",
"countries.pe": "Պերու",
"countries.ph": "Ֆիլիպիններ",
diff --git a/app/config/locale/translations/id.json b/app/config/locale/translations/id.json
index 884c802471..fae0246ca0 100644
--- a/app/config/locale/translations/id.json
+++ b/app/config/locale/translations/id.json
@@ -163,6 +163,7 @@
"countries.nz": "Selandia Baru",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestina",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filipina",
diff --git a/app/config/locale/translations/is.json b/app/config/locale/translations/is.json
index bc69d03341..5b01dec76b 100644
--- a/app/config/locale/translations/is.json
+++ b/app/config/locale/translations/is.json
@@ -163,6 +163,7 @@
"countries.nz": "Nýja Sjáland",
"countries.om": "Óman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestína",
"countries.pa": "Panama",
"countries.pe": "Perú",
"countries.ph": "Filippseyjar",
diff --git a/app/config/locale/translations/it.json b/app/config/locale/translations/it.json
index b658f2d818..5adf410708 100644
--- a/app/config/locale/translations/it.json
+++ b/app/config/locale/translations/it.json
@@ -163,6 +163,7 @@
"countries.nz": "Nuova Zelanda",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestina",
"countries.pa": "Panama",
"countries.pe": "Perù",
"countries.ph": "Filippine",
diff --git a/app/config/locale/translations/ja.json b/app/config/locale/translations/ja.json
index 81e7e260ec..124f014bd6 100644
--- a/app/config/locale/translations/ja.json
+++ b/app/config/locale/translations/ja.json
@@ -163,6 +163,7 @@
"countries.nz": "ニュージーランド",
"countries.om": "オマーン",
"countries.pk": "パキスタン",
+ "countries.ps": "パレスチナ",
"countries.pa": "パナマ",
"countries.pe": "ペルー",
"countries.ph": "フィリピン",
diff --git a/app/config/locale/translations/jv.json b/app/config/locale/translations/jv.json
index 040184de15..9e21d766f6 100644
--- a/app/config/locale/translations/jv.json
+++ b/app/config/locale/translations/jv.json
@@ -163,6 +163,7 @@
"countries.nz": "Selandia Anyar",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestina",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filipina",
diff --git a/app/config/locale/translations/km.json b/app/config/locale/translations/km.json
index da0f40d914..9088c7328a 100644
--- a/app/config/locale/translations/km.json
+++ b/app/config/locale/translations/km.json
@@ -163,6 +163,7 @@
"countries.nz": "នូវែលសេឡង់",
"countries.om": "អូម៉ង់",
"countries.pk": "ប៉ាគីស្ថាន",
+ "countries.ps": "ប៉ាលេស្ទីន",
"countries.pa": "ប៉ាណាម៉ា",
"countries.pe": "ប៉េរូ",
"countries.ph": "ហ្វីលីពីន",
diff --git a/app/config/locale/translations/kn.json b/app/config/locale/translations/kn.json
index 60b30229f5..2b1424aba7 100644
--- a/app/config/locale/translations/kn.json
+++ b/app/config/locale/translations/kn.json
@@ -163,6 +163,7 @@
"countries.nz": "ನ್ಯೂಜಿಲ್ಯಾಂಡ್",
"countries.om": "ಓಮನ್",
"countries.pk": "ಪಾಕಿಸ್ತಾನ",
+ "countries.ps": "ಪ್ಯಾಲೇಸ್ಟೈನ್",
"countries.pa": "ಪನಾಮ",
"countries.pe": "ಪೆರು",
"countries.ph": "ಫಿಲಿಪೈನ್ಸ್",
diff --git a/app/config/locale/translations/ko.json b/app/config/locale/translations/ko.json
index 758bb8b4e1..efca39eb72 100644
--- a/app/config/locale/translations/ko.json
+++ b/app/config/locale/translations/ko.json
@@ -163,6 +163,7 @@
"countries.nz": "뉴질랜드",
"countries.om": "오만",
"countries.pk": "파키스탄",
+ "countries.ps": "팔레스타인",
"countries.pa": "파나마",
"countries.pe": "페루",
"countries.ph": "필리핀 제도",
diff --git a/app/config/locale/translations/la.json b/app/config/locale/translations/la.json
index ebf158f883..2fcfb92b49 100644
--- a/app/config/locale/translations/la.json
+++ b/app/config/locale/translations/la.json
@@ -163,6 +163,7 @@
"countries.nz": "New Zealand",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestina",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Philippines",
diff --git a/app/config/locale/translations/lb.json b/app/config/locale/translations/lb.json
index 7de41ccf9a..3f590d5323 100644
--- a/app/config/locale/translations/lb.json
+++ b/app/config/locale/translations/lb.json
@@ -163,6 +163,7 @@
"countries.nz": "Neiséiland",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestina",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Philippinnen",
diff --git a/app/config/locale/translations/lt.json b/app/config/locale/translations/lt.json
index 49ae9aa5b0..d026ee50e1 100644
--- a/app/config/locale/translations/lt.json
+++ b/app/config/locale/translations/lt.json
@@ -163,6 +163,7 @@
"countries.nz": "Naujoji Zelandija",
"countries.om": "Omanas",
"countries.pk": "Pakistanas",
+ "countries.ps": "Palestina",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filipinai",
diff --git a/app/config/locale/translations/lv.json b/app/config/locale/translations/lv.json
index 9e1d316576..d36e41f5b7 100644
--- a/app/config/locale/translations/lv.json
+++ b/app/config/locale/translations/lv.json
@@ -163,6 +163,7 @@
"countries.nz": "Jaunzēlande",
"countries.om": "Omāna",
"countries.pk": "Pakistāna",
+ "countries.ps": "Palestīna",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filipīnas",
diff --git a/app/config/locale/translations/ml.json b/app/config/locale/translations/ml.json
index a87eeebf22..8535aa9bb3 100644
--- a/app/config/locale/translations/ml.json
+++ b/app/config/locale/translations/ml.json
@@ -163,6 +163,7 @@
"countries.nz": "ന്യൂസിലൻഡ്",
"countries.om": "ഒമാൻ",
"countries.pk": "പാക്കിസ്ഥാൻ",
+ "countries.ps": "പാലസ്തീൻ",
"countries.pa": "പനാമ",
"countries.pe": "പെറു",
"countries.ph": "ഫിലിപ്പീൻസ്",
diff --git a/app/config/locale/translations/mr.json b/app/config/locale/translations/mr.json
index e91706b388..d504755c70 100644
--- a/app/config/locale/translations/mr.json
+++ b/app/config/locale/translations/mr.json
@@ -163,6 +163,7 @@
"countries.nz": "न्यूजीलैंड",
"countries.om": "ओमान",
"countries.pk": "पाकिस्तान",
+ "countries.ps": "पॅलेस्टाईन",
"countries.pa": "पनामा",
"countries.pe": "पेरू",
"countries.ph": "फिलीपींस",
diff --git a/app/config/locale/translations/ms.json b/app/config/locale/translations/ms.json
index 541d9cd3bf..1453a261a3 100644
--- a/app/config/locale/translations/ms.json
+++ b/app/config/locale/translations/ms.json
@@ -163,6 +163,7 @@
"countries.nz": "New Zealand",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestin",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filipina",
diff --git a/app/config/locale/translations/nb.json b/app/config/locale/translations/nb.json
index fc9ad7b903..3419d7842a 100644
--- a/app/config/locale/translations/nb.json
+++ b/app/config/locale/translations/nb.json
@@ -163,6 +163,7 @@
"countries.nz": "New Zealand",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestina",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filippinene",
diff --git a/app/config/locale/translations/ne.json b/app/config/locale/translations/ne.json
index 6aad5fee7f..99888c64d4 100644
--- a/app/config/locale/translations/ne.json
+++ b/app/config/locale/translations/ne.json
@@ -163,6 +163,7 @@
"countries.nz": "न्युजिल्याण्ड",
"countries.om": "ओमान",
"countries.pk": "पाकिस्तान",
+ "countries.ps": "प्यालेस्टाइन",
"countries.pa": "पनामा",
"countries.pe": "पेरू",
"countries.ph": "फिलिपिन्स",
diff --git a/app/config/locale/translations/nl.json b/app/config/locale/translations/nl.json
index 716d03c893..7ef9e776fd 100644
--- a/app/config/locale/translations/nl.json
+++ b/app/config/locale/translations/nl.json
@@ -163,6 +163,7 @@
"countries.nz": "Nieuw Zeeland",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestina",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filippijnen",
diff --git a/app/config/locale/translations/nn.json b/app/config/locale/translations/nn.json
index 59d7008280..a77ac1b173 100644
--- a/app/config/locale/translations/nn.json
+++ b/app/config/locale/translations/nn.json
@@ -163,6 +163,7 @@
"countries.nz": "New Zealand",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestina",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filippinene",
diff --git a/app/config/locale/translations/or.json b/app/config/locale/translations/or.json
index 42684f58fc..72c9888c4a 100644
--- a/app/config/locale/translations/or.json
+++ b/app/config/locale/translations/or.json
@@ -163,6 +163,7 @@
"countries.nz": "ନିଉଜିଲାଣ୍ଡ୍",
"countries.om": "ଓମାନ",
"countries.pk": "ପାକିସ୍ତାନ",
+ "countries.ps": "ପାଲେସ୍ତାଇନ",
"countries.pa": "ପାନାମା",
"countries.pe": "ପେରୁ",
"countries.ph": "ଫିଲିପାଇନ୍ସ",
diff --git a/app/config/locale/translations/pa.json b/app/config/locale/translations/pa.json
index 0ece18fae3..aaa260cbaa 100644
--- a/app/config/locale/translations/pa.json
+++ b/app/config/locale/translations/pa.json
@@ -163,6 +163,7 @@
"countries.nz": "ਨਿਊਜ਼ੀਲੈਂਡ",
"countries.om": "ਓਮਾਨ",
"countries.pk": "ਪਾਕਿਸਤਾਨ",
+ "countries.ps": "ਫਿਲਿਸਤੀਨ",
"countries.pa": "ਪਨਾਮਾ",
"countries.pe": "ਪੇਰੂ",
"countries.ph": "ਫਿਲਪੀਨਜ਼",
diff --git a/app/config/locale/translations/pl.json b/app/config/locale/translations/pl.json
index 85ac53a1be..05cad39be8 100644
--- a/app/config/locale/translations/pl.json
+++ b/app/config/locale/translations/pl.json
@@ -163,6 +163,7 @@
"countries.nz": "Nowa Zelandia",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestyna",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filipiny",
diff --git a/app/config/locale/translations/pt-br.json b/app/config/locale/translations/pt-br.json
index 58ccb88aa5..2094b053f0 100644
--- a/app/config/locale/translations/pt-br.json
+++ b/app/config/locale/translations/pt-br.json
@@ -163,6 +163,7 @@
"countries.nz": "Nova Zelândia",
"countries.om": "Omã",
"countries.pk": "Paquistão",
+ "countries.ps": "Palestina",
"countries.pa": "Panamá",
"countries.pe": "Peru",
"countries.ph": "Filipinas",
diff --git a/app/config/locale/translations/pt-pt.json b/app/config/locale/translations/pt-pt.json
index 7fd8144d15..173a7b3a3a 100644
--- a/app/config/locale/translations/pt-pt.json
+++ b/app/config/locale/translations/pt-pt.json
@@ -163,6 +163,7 @@
"countries.nz": "Nova Zelândia",
"countries.om": "Omã",
"countries.pk": "Paquistão",
+ "countries.ps": "Palestina",
"countries.pa": "Panamá",
"countries.pe": "Peru",
"countries.ph": "Filipinas",
diff --git a/app/config/locale/translations/ro.json b/app/config/locale/translations/ro.json
index 3f27b3b72a..e8cb94b2d6 100644
--- a/app/config/locale/translations/ro.json
+++ b/app/config/locale/translations/ro.json
@@ -163,6 +163,7 @@
"countries.nz": "Noua Zeelandă",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestina",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Philippines",
diff --git a/app/config/locale/translations/ru.json b/app/config/locale/translations/ru.json
index 609dd9fe50..fa60ff83c6 100644
--- a/app/config/locale/translations/ru.json
+++ b/app/config/locale/translations/ru.json
@@ -163,6 +163,7 @@
"countries.nz": "Новая Зеландия",
"countries.om": "Оман",
"countries.pk": "Пакистан",
+ "countries.ps": "Палестина",
"countries.pa": "Панама",
"countries.pe": "Перу",
"countries.ph": "Филлиппины",
diff --git a/app/config/locale/translations/sa.json b/app/config/locale/translations/sa.json
index 69ab76e01d..b05ff33e6a 100644
--- a/app/config/locale/translations/sa.json
+++ b/app/config/locale/translations/sa.json
@@ -163,6 +163,7 @@
"countries.nz": "न्यूजीलैंड",
"countries.om": "ओमान",
"countries.pk": "पाकिस्तान",
+ "countries.ps": "पैलिस्टाइन",
"countries.pa": "पनामा",
"countries.pe": "पेरू",
"countries.ph": "फिलीपींस",
diff --git a/app/config/locale/translations/sd.json b/app/config/locale/translations/sd.json
index 4bd5053f98..c6ba578f15 100644
--- a/app/config/locale/translations/sd.json
+++ b/app/config/locale/translations/sd.json
@@ -163,6 +163,7 @@
"countries.nz": "نيو زيلينڊ",
"countries.om": "عمان",
"countries.pk": "پاڪستان",
+ "countries.ps": "فلسطين",
"countries.pa": "پاناما",
"countries.pe": "پيرو",
"countries.ph": "فلپائن",
diff --git a/app/config/locale/translations/si.json b/app/config/locale/translations/si.json
index b2bc82f096..e95f993438 100644
--- a/app/config/locale/translations/si.json
+++ b/app/config/locale/translations/si.json
@@ -163,6 +163,7 @@
"countries.nz": "නිව්සීලන්තය",
"countries.om": "ඕමානය",
"countries.pk": "පාකිස්තානය",
+ "countries.ps": "පලස්තීනය",
"countries.pa": "පැනමාව",
"countries.pe": "පේරු",
"countries.ph": "පිලිපීනය",
diff --git a/app/config/locale/translations/sk.json b/app/config/locale/translations/sk.json
index 8cfd3e58fe..61405df84d 100644
--- a/app/config/locale/translations/sk.json
+++ b/app/config/locale/translations/sk.json
@@ -163,6 +163,7 @@
"countries.nz": "Nový Zéland",
"countries.om": "Omán",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestína",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filipíny",
diff --git a/app/config/locale/translations/sl.json b/app/config/locale/translations/sl.json
index 1eb492d375..ffd7ee8902 100644
--- a/app/config/locale/translations/sl.json
+++ b/app/config/locale/translations/sl.json
@@ -163,6 +163,7 @@
"countries.nz": "Nova Zelandija",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestina",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filipini",
diff --git a/app/config/locale/translations/sn.json b/app/config/locale/translations/sn.json
index f69f5dbb9b..62b97c4237 100644
--- a/app/config/locale/translations/sn.json
+++ b/app/config/locale/translations/sn.json
@@ -163,6 +163,7 @@
"countries.nz": "New Zealand",
"countries.om": "Oman",
"countries.pk": "Pakisitani",
+ "countries.ps": "Palestine",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Philippines",
diff --git a/app/config/locale/translations/sq.json b/app/config/locale/translations/sq.json
index 5deca8ecf9..9a54e45d25 100644
--- a/app/config/locale/translations/sq.json
+++ b/app/config/locale/translations/sq.json
@@ -163,6 +163,7 @@
"countries.nz": "Zelanda e Re",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestinë",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filipine",
diff --git a/app/config/locale/translations/sv.json b/app/config/locale/translations/sv.json
index fe9519cd6a..3ee4c1d0e3 100644
--- a/app/config/locale/translations/sv.json
+++ b/app/config/locale/translations/sv.json
@@ -163,6 +163,7 @@
"countries.nz": "Nya Zeeland",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestina",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filippinerna",
diff --git a/app/config/locale/translations/ta.json b/app/config/locale/translations/ta.json
index 28888c888b..252f91a579 100644
--- a/app/config/locale/translations/ta.json
+++ b/app/config/locale/translations/ta.json
@@ -163,6 +163,7 @@
"countries.nz": "நியூசிலாந்து",
"countries.om": "ஓமான்",
"countries.pk": "பாகிஸ்தான்",
+ "countries.ps": "பாலஸ்தீன்",
"countries.pa": "பனாமா",
"countries.pe": "பெரு",
"countries.ph": "பிலிப்பைன்ஸ்",
diff --git a/app/config/locale/translations/te.json b/app/config/locale/translations/te.json
index 1ca71581f5..86ffbeca43 100644
--- a/app/config/locale/translations/te.json
+++ b/app/config/locale/translations/te.json
@@ -163,6 +163,7 @@
"countries.nz": "న్యూజిలాండ్",
"countries.om": "ఒమన్",
"countries.pk": "పాకిస్తాన్",
+ "countries.ps": "పాలస్తీన్",
"countries.pa": "పనామా",
"countries.pe": "పెరూ",
"countries.ph": "ఫిలిప్పీన్స్",
diff --git a/app/config/locale/translations/th.json b/app/config/locale/translations/th.json
index 4be452aa9c..95552f624b 100644
--- a/app/config/locale/translations/th.json
+++ b/app/config/locale/translations/th.json
@@ -163,6 +163,7 @@
"countries.nz": "New Zealand",
"countries.om": "โอมาน",
"countries.pk": "ปากีสถาน",
+ "countries.ps": "ปาเลสไตน์",
"countries.pa": "ปานามา",
"countries.pe": "เปรู",
"countries.ph": "ฟิลิปปินส์",
diff --git a/app/config/locale/translations/tl.json b/app/config/locale/translations/tl.json
index ef55c34370..1da537230d 100644
--- a/app/config/locale/translations/tl.json
+++ b/app/config/locale/translations/tl.json
@@ -163,6 +163,7 @@
"countries.nz": "New Zealand",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestina",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Pilipinas",
diff --git a/app/config/locale/translations/tr.json b/app/config/locale/translations/tr.json
index 55b332b121..54007fc723 100644
--- a/app/config/locale/translations/tr.json
+++ b/app/config/locale/translations/tr.json
@@ -163,6 +163,7 @@
"countries.nz": "Yeni Zelanda",
"countries.om": "Umman",
"countries.pk": "Pakistan",
+ "countries.ps": "Filistin",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Filipinler",
diff --git a/app/config/locale/translations/uk.json b/app/config/locale/translations/uk.json
index e02d222e05..a7a0d7a78d 100644
--- a/app/config/locale/translations/uk.json
+++ b/app/config/locale/translations/uk.json
@@ -163,6 +163,7 @@
"countries.nz": "Нова Зеландія",
"countries.om": "Оман",
"countries.pk": "Пакістан",
+ "countries.ps": "Палестина",
"countries.pa": "Панама",
"countries.pe": "Перу",
"countries.ph": "Філіппіни",
diff --git a/app/config/locale/translations/ur.json b/app/config/locale/translations/ur.json
index 263b9ecaa4..de9a2768c3 100644
--- a/app/config/locale/translations/ur.json
+++ b/app/config/locale/translations/ur.json
@@ -163,6 +163,7 @@
"countries.nz": "نیوزی لینڈ",
"countries.om": "عمان",
"countries.pk": "پاکستان",
+ "countries.ps": "فلسطین",
"countries.pa": "پانامہ",
"countries.pe": "پیرو",
"countries.ph": "فلپائن",
diff --git a/app/config/locale/translations/vi.json b/app/config/locale/translations/vi.json
index 62bde69907..400c8c09d1 100644
--- a/app/config/locale/translations/vi.json
+++ b/app/config/locale/translations/vi.json
@@ -163,6 +163,7 @@
"countries.nz": "New Zealand",
"countries.om": "Oman",
"countries.pk": "Pakistan",
+ "countries.ps": "Palestine",
"countries.pa": "Panama",
"countries.pe": "Peru",
"countries.ph": "Philippines",
diff --git a/app/config/locale/translations/zh-cn.json b/app/config/locale/translations/zh-cn.json
index 82a6c9c16b..5b634d990f 100644
--- a/app/config/locale/translations/zh-cn.json
+++ b/app/config/locale/translations/zh-cn.json
@@ -163,6 +163,7 @@
"countries.nz": "新西兰",
"countries.om": "阿曼",
"countries.pk": "巴基斯坦",
+ "countries.ps": "巴勒斯坦",
"countries.pa": "巴拿马",
"countries.pe": "秘鲁",
"countries.ph": "菲律宾",
diff --git a/app/config/locale/translations/zh-tw.json b/app/config/locale/translations/zh-tw.json
index 55934edc8f..61600da08e 100644
--- a/app/config/locale/translations/zh-tw.json
+++ b/app/config/locale/translations/zh-tw.json
@@ -163,6 +163,7 @@
"countries.nz": "紐西蘭",
"countries.om": "阿曼",
"countries.pk": "巴基斯坦",
+ "countries.ps": "巴勒斯坦",
"countries.pa": "巴拿馬",
"countries.pe": "秘魯",
"countries.ph": "菲律賓",
From 36a1bd1d9091c76e49955b2a11b63b7ae209ea55 Mon Sep 17 00:00:00 2001
From: bhc
Date: Sat, 27 Apr 2024 01:16:10 +0300
Subject: [PATCH 027/138] Update total count of countries and languages in
LocaleBase tests
---
tests/e2e/Services/Locale/LocaleBase.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tests/e2e/Services/Locale/LocaleBase.php b/tests/e2e/Services/Locale/LocaleBase.php
index beffa87965..a970e78366 100644
--- a/tests/e2e/Services/Locale/LocaleBase.php
+++ b/tests/e2e/Services/Locale/LocaleBase.php
@@ -45,7 +45,7 @@ trait LocaleBase
$this->assertEquals($response['headers']['status-code'], 200);
$this->assertIsArray($response['body']);
- $this->assertEquals(196, $response['body']['total']);
+ $this->assertEquals(197, $response['body']['total']);
$this->assertEquals($response['body']['countries'][0]['name'], 'Afghanistan');
$this->assertEquals($response['body']['countries'][0]['code'], 'AF');
@@ -59,7 +59,7 @@ trait LocaleBase
$this->assertEquals($response['headers']['status-code'], 200);
$this->assertIsArray($response['body']);
- $this->assertEquals(196, $response['body']['total']);
+ $this->assertEquals(197, $response['body']['total']);
$this->assertEquals($response['body']['countries'][0]['name'], 'Afganistán');
$this->assertEquals($response['body']['countries'][0]['code'], 'AF');
From 6adc75d7b48d39a99688df92f3c30d29001a544f Mon Sep 17 00:00:00 2001
From: bhc
Date: Sat, 27 Apr 2024 01:17:22 +0300
Subject: [PATCH 028/138] Add PS to list of countries in phones.php
---
app/config/locale/phones.php | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/config/locale/phones.php b/app/config/locale/phones.php
index d3d3d31a7a..12a1c50a75 100644
--- a/app/config/locale/phones.php
+++ b/app/config/locale/phones.php
@@ -136,6 +136,7 @@ return [
'NZ' => '64',
'OM' => '968',
'PK' => '92',
+ 'PS' => '970',
'PA' => '507',
'PE' => '51',
'PH' => '63',
From 37097b09148105b34976fd0c9c6662659d84567b Mon Sep 17 00:00:00 2001
From: bhc
Date: Sat, 27 Apr 2024 01:18:11 +0300
Subject: [PATCH 029/138] Update total count of countries in LocaleBase tests
for testGetCountriesPhones
---
tests/e2e/Services/Locale/LocaleBase.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/e2e/Services/Locale/LocaleBase.php b/tests/e2e/Services/Locale/LocaleBase.php
index a970e78366..a06ede40be 100644
--- a/tests/e2e/Services/Locale/LocaleBase.php
+++ b/tests/e2e/Services/Locale/LocaleBase.php
@@ -120,7 +120,7 @@ trait LocaleBase
$this->assertEquals($response['headers']['status-code'], 200);
$this->assertIsArray($response['body']);
- $this->assertEquals(195, $response['body']['total']);
+ $this->assertEquals(196, $response['body']['total']);
$this->assertIsArray($response['body']['phones']);
$this->assertEquals($response['body']['phones'][0]['code'], '+1');
$this->assertEquals($response['body']['phones'][0]['countryName'], 'Canada');
From d6dbb02ffeb16a05ade74b30434a6d8cac6378c9 Mon Sep 17 00:00:00 2001
From: bhc
Date: Sat, 27 Apr 2024 01:20:49 +0300
Subject: [PATCH 030/138] Update total count in assertions in BatchTest
---
tests/e2e/Services/GraphQL/BatchTest.php | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/tests/e2e/Services/GraphQL/BatchTest.php b/tests/e2e/Services/GraphQL/BatchTest.php
index 6f5e945c3c..550568a896 100644
--- a/tests/e2e/Services/GraphQL/BatchTest.php
+++ b/tests/e2e/Services/GraphQL/BatchTest.php
@@ -33,7 +33,7 @@ class BatchTest extends Scope
$this->assertArrayNotHasKey('errors', $response['body'][1]);
$this->assertArrayHasKey('localeListCountries', $response['body'][0]['data']);
$this->assertArrayHasKey('localeListContinents', $response['body'][1]['data']);
- $this->assertEquals(196, $response['body'][0]['data']['localeListCountries']['total']);
+ $this->assertEquals(197, $response['body'][0]['data']['localeListCountries']['total']);
$this->assertEquals(7, $response['body'][1]['data']['localeListContinents']['total']);
}
@@ -56,8 +56,8 @@ class BatchTest extends Scope
$this->assertArrayNotHasKey('errors', $response['body'][1]);
$this->assertArrayHasKey('localeListCountries', $response['body'][0]['data']);
$this->assertArrayHasKey('localeListCountries', $response['body'][1]['data']);
- $this->assertEquals(196, $response['body'][0]['data']['localeListCountries']['total']);
- $this->assertEquals(196, $response['body'][1]['data']['localeListCountries']['total']);
+ $this->assertEquals(197, $response['body'][0]['data']['localeListCountries']['total']);
+ $this->assertEquals(197, $response['body'][1]['data']['localeListCountries']['total']);
}
public function testArrayBatchedMutations()
@@ -184,7 +184,7 @@ class BatchTest extends Scope
$this->assertArrayHasKey('localeListCountries', $response['body'][0]['data']);
$this->assertArrayHasKey('localeListContinents', $response['body'][1]['data']);
$this->assertArrayHasKey('accountCreate', $response['body'][2]['data']);
- $this->assertEquals(196, $response['body'][0]['data']['localeListCountries']['total']);
+ $this->assertEquals(197, $response['body'][0]['data']['localeListCountries']['total']);
$this->assertEquals(7, $response['body'][1]['data']['localeListContinents']['total']);
$this->assertEquals('Tester 1', $response['body'][2]['data']['accountCreate']['name']);
}
@@ -225,8 +225,8 @@ class BatchTest extends Scope
$this->assertArrayHasKey('localeListCountries', $response['body'][0]['data']);
$this->assertArrayHasKey('localeListCountries', $response['body'][1]['data']);
$this->assertArrayHasKey('accountCreate', $response['body'][2]['data']);
- $this->assertEquals(196, $response['body'][0]['data']['localeListCountries']['total']);
- $this->assertEquals(196, $response['body'][1]['data']['localeListCountries']['total']);
+ $this->assertEquals(197, $response['body'][0]['data']['localeListCountries']['total']);
+ $this->assertEquals(197, $response['body'][1]['data']['localeListCountries']['total']);
$this->assertArrayHasKey('_id', $response['body'][2]['data']['accountCreate']);
}
@@ -251,7 +251,7 @@ class BatchTest extends Scope
$this->assertArrayNotHasKey('errors', $response['body']);
$this->assertArrayHasKey('localeListCountries', $response['body']['data']);
$this->assertArrayHasKey('localeListContinents', $response['body']['data']);
- $this->assertEquals(196, $response['body']['data']['localeListCountries']['total']);
+ $this->assertEquals(197, $response['body']['data']['localeListCountries']['total']);
$this->assertEquals(7, $response['body']['data']['localeListContinents']['total']);
}
@@ -275,7 +275,7 @@ class BatchTest extends Scope
$this->assertIsArray($response['body']['data']);
$this->assertArrayNotHasKey('errors', $response['body']);
$this->assertArrayHasKey('localeListCountries', $response['body']['data']);
- $this->assertEquals(196, $response['body']['data']['localeListCountries']['total']);
+ $this->assertEquals(197, $response['body']['data']['localeListCountries']['total']);
}
public function testQueryBatchedMutations()
From 9cea7ea5265443508e191f9798c6cb71dcd7c567 Mon Sep 17 00:00:00 2001
From: bhc
Date: Sat, 27 Apr 2024 01:22:03 +0300
Subject: [PATCH 031/138] Update total count in assertions in ContentTypeTest
---
tests/e2e/Services/GraphQL/ContentTypeTest.php | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/tests/e2e/Services/GraphQL/ContentTypeTest.php b/tests/e2e/Services/GraphQL/ContentTypeTest.php
index 707dfbecf5..190f1d4fcd 100644
--- a/tests/e2e/Services/GraphQL/ContentTypeTest.php
+++ b/tests/e2e/Services/GraphQL/ContentTypeTest.php
@@ -30,7 +30,7 @@ class ContentTypeTest extends Scope
$this->assertIsArray($response['body']['data']);
$this->assertArrayNotHasKey('errors', $response['body']);
$response = $response['body']['data']['localeListCountries'];
- $this->assertEquals(196, $response['total']);
+ $this->assertEquals(197, $response['total']);
}
public function testSingleQueryJSONContentType()
@@ -46,7 +46,7 @@ class ContentTypeTest extends Scope
$this->assertIsArray($response['body']['data']);
$this->assertArrayNotHasKey('errors', $response['body']);
$response = $response['body']['data']['localeListCountries'];
- $this->assertEquals(196, $response['total']);
+ $this->assertEquals(197, $response['total']);
}
public function testArrayBatchedJSONContentType()
@@ -69,7 +69,7 @@ class ContentTypeTest extends Scope
$this->assertArrayNotHasKey('errors', $response['body'][1]);
$this->assertArrayHasKey('localeListCountries', $response['body'][0]['data']);
$this->assertArrayHasKey('localeListContinents', $response['body'][1]['data']);
- $this->assertEquals(196, $response['body'][0]['data']['localeListCountries']['total']);
+ $this->assertEquals(197, $response['body'][0]['data']['localeListCountries']['total']);
$this->assertEquals(7, $response['body'][1]['data']['localeListContinents']['total']);
}
@@ -94,7 +94,7 @@ class ContentTypeTest extends Scope
$this->assertArrayNotHasKey('errors', $response['body']);
$this->assertArrayHasKey('localeListCountries', $response['body']['data']);
$this->assertArrayHasKey('localeListContinents', $response['body']['data']);
- $this->assertEquals(196, $response['body']['data']['localeListCountries']['total']);
+ $this->assertEquals(197, $response['body']['data']['localeListCountries']['total']);
$this->assertEquals(7, $response['body']['data']['localeListContinents']['total']);
}
From 3451dd3f4b3d324af2b131371f8587db191a7149 Mon Sep 17 00:00:00 2001
From: Damodar Lohani
Date: Sun, 28 Apr 2024 01:38:21 +0000
Subject: [PATCH 032/138] fix typo
---
docs/sdks/react-native/GETTING_STARTED.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/docs/sdks/react-native/GETTING_STARTED.md b/docs/sdks/react-native/GETTING_STARTED.md
index 7e238bcf08..1cb971e9c2 100644
--- a/docs/sdks/react-native/GETTING_STARTED.md
+++ b/docs/sdks/react-native/GETTING_STARTED.md
@@ -28,7 +28,7 @@ Initialize your SDK with your Appwrite server API endpoint and project ID which
```js
import { Client } from 'react-native-appwrite';
-// Init your Web SDK
+// Init your React Native SDK
const client = new Client();
client
@@ -57,7 +57,7 @@ account.create(ID.unique(), 'me@example.com', 'password', 'Jane Doe')
### Full Example
```js
import { Client, Account } from 'react-native-appwrite';
-// Init your Web SDK
+// Init your React Native SDK
const client = new Client();
client
From 665812c28ba94db44fecb5bc2e71003e4c7ed1ac Mon Sep 17 00:00:00 2001
From: Damodar Lohani
Date: Sun, 28 Apr 2024 01:38:46 +0000
Subject: [PATCH 033/138] fix typo
---
docs/sdks/react-native/GETTING_STARTED.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/sdks/react-native/GETTING_STARTED.md b/docs/sdks/react-native/GETTING_STARTED.md
index 1cb971e9c2..0f3695040d 100644
--- a/docs/sdks/react-native/GETTING_STARTED.md
+++ b/docs/sdks/react-native/GETTING_STARTED.md
@@ -79,7 +79,7 @@ account.create(ID.unique(), 'me@example.com', 'password', 'Jane Doe')
### Learn more
You can use the following resources to learn more and get help
-- 🚀 [Getting Started Tutorial](https://appwrite.io/docs/quick-starts/react-native)```
+- 🚀 [Getting Started Tutorial](https://appwrite.io/docs/quick-starts/react-native)
- 📜 [Appwrite Docs](https://appwrite.io/docs)
- 💬 [Discord Community](https://appwrite.io/discord)
- 🚂 [Appwrite React Native Playground](https://github.com/appwrite/playground-for-react-native)
\ No newline at end of file
From 02ece2637ff8a0a863011ba6d743556ee12a48f3 Mon Sep 17 00:00:00 2001
From: ItzNotABug
Date: Mon, 29 Apr 2024 15:54:22 +0530
Subject: [PATCH 034/138] fix: use `resourceInternalId`.
---
app/controllers/api/functions.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/controllers/api/functions.php b/app/controllers/api/functions.php
index ed5af1d38a..4ff2b40241 100644
--- a/app/controllers/api/functions.php
+++ b/app/controllers/api/functions.php
@@ -1282,7 +1282,7 @@ App::get('/v1/functions/:functionId/deployments')
}
// Set resource queries
- $queries[] = Query::equal('resourceId', [$function->getId()]);
+ $queries[] = Query::equal('resourceInternalId', [$function->getInternalId()]);
$queries[] = Query::equal('resourceType', ['functions']);
/**
From f7f00fcf10be528f9ba84a3b19428a751dd92b12 Mon Sep 17 00:00:00 2001
From: Evan
Date: Mon, 29 Apr 2024 13:42:13 -0700
Subject: [PATCH 035/138] Close reason update
Due to failures, changing to not_planned
---
.github/workflows/stale.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
index 053f0191a2..5987eeeb0c 100644
--- a/.github/workflows/stale.yml
+++ b/.github/workflows/stale.yml
@@ -18,6 +18,6 @@ jobs:
days-before-close: 14
remove-stale-when-updated: true
close-issue-message: "This issue has been closed due to inactivity. If you still require assistance, please provide the requested information."
- close-issue-reason: "not-planned"
+ close-issue-reason: "not_planned"
operations-per-run: 100
only-labels: "question"
From bfb51328feeb5c017653edeb8cc626597428e3b1 Mon Sep 17 00:00:00 2001
From: Steven Nguyen <1477010+stnguyen90@users.noreply.github.com>
Date: Mon, 29 Apr 2024 22:50:20 +0000
Subject: [PATCH 036/138] fix: version in error response
The APP_VERSION_STABLE constant should be used for the version
in API errors so that developers see a version that makes more
sense (such as 1.5.5).
---
app/controllers/general.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/controllers/general.php b/app/controllers/general.php
index 71ecc80d54..cd7bd6e1b9 100644
--- a/app/controllers/general.php
+++ b/app/controllers/general.php
@@ -742,12 +742,12 @@ App::error()
'file' => $file,
'line' => $line,
'trace' => \json_encode($trace, JSON_UNESCAPED_UNICODE) === false ? [] : $trace, // check for failing encode
- 'version' => $version,
+ 'version' => APP_VERSION_STABLE,
'type' => $type,
] : [
'message' => $message,
'code' => $code,
- 'version' => $version,
+ 'version' => APP_VERSION_STABLE,
'type' => $type,
];
From 574ee319814172f302b2591d298d200b286eb288 Mon Sep 17 00:00:00 2001
From: Brendan Beltz
Date: Mon, 29 Apr 2024 20:09:33 -0400
Subject: [PATCH 037/138] Replace missing domain paths
---
README-CN.md | 112 ++++++++++++++++++++++++++-------------------------
README.md | 47 +++++++++++----------
2 files changed, 80 insertions(+), 79 deletions(-)
diff --git a/README-CN.md b/README-CN.md
index e526b5613d..ba800a3bd6 100644
--- a/README-CN.md
+++ b/README-CN.md
@@ -11,6 +11,7 @@
+
[](https://appwrite.io/company/careers)
[](https://hacktoberfest.appwrite.io)
[](https://appwrite.io/discord?r=Github)
@@ -25,7 +26,7 @@
[**Appwrite 云公开测试版!立即注册!**](https://cloud.appwrite.io)
-Appwrite是一个基于Docker的端到端开发者平台,其容器化的微服务库可应用于网页端,移动端,以及后端。Appwrite 通过视觉化界面简化了从零开始编写 API 的繁琐过程,在保证软件安全的前提下为开发者创造了一个高效的开发环境。
+Appwrite 是一个基于 Docker 的端到端开发者平台,其容器化的微服务库可应用于网页端,移动端,以及后端。Appwrite 通过视觉化界面简化了从零开始编写 API 的繁琐过程,在保证软件安全的前提下为开发者创造了一个高效的开发环境。
Appwrite 可以提供给开发者用户验证,外部授权,用户数据读写检索,文件储存,图像处理,云函数计算,[等多种服务](https://appwrite.io/docs).
@@ -93,7 +94,6 @@ docker run -it --rm `
运行后,可以在浏览器上访问 http://localhost 找到 Appwrite 控制台。在非 Linux 的本机主机上完成安装后,服务器可能需要几分钟才能启动。
-
需要自定义容器构架,请查看我们的 Docker [环境变量](https://appwrite.io/docs/environment-variables) 文档。您还可以参考我们的 [docker-compose.yml](https://appwrite.io/install/compose) 和 [.env](https://appwrite.io/install/env) 文件手动设置环境。
### 从旧版本升级
@@ -104,71 +104,73 @@ docker run -it --rm `
开始使用 Appwrite 只需要在控制台创建一个新项目,选择开发平台,然后抓取我们的开发套件。您可以从以下的教程中找到你喜欢的平台开始使用 Appwrite。
-| 类别 | 技术 |
-|---------------------|------|
-| **Web 应用** | [Web 快速开始](/docs/quick-starts/web) |
-| | [Next.js 快速开始](/docs/quick-starts/nextjs) |
-| | [React 快速开始](/docs/quick-starts/react) |
-| | [Vue.js 快速开始](/docs/quick-starts/vue) |
-| | [Nuxt 快速开始](/docs/quick-starts/nuxt) |
-| | [SvelteKit 快速开始](/docs/quick-starts/sveltekit) |
-| | [Refine 快速开始](/docs/quick-starts/refine) |
-| | [Angular 快速开始](/docs/quick-starts/angular) |
-| **苹果于安卓应用** | [React Native 快速开始](/docs/quick-starts/react-native) |
-| | [Flutter 快速开始](/docs/quick-starts/flutter) |
-| | [Apple 快速开始](/docs/quick-starts/apple) |
-| | [Android 快速开始](/docs/quick-starts/android) |
-| **服务器** | [Node.js 快速开始](/docs/quick-starts/node) |
-| | [Python 快速开始](/docs/quick-starts/python) |
-| | [.NET 快速开始](/docs/quick-starts/dotnet) |
-| | [Dart 快速开始](/docs/quick-starts/dart) |
-| | [Ruby 快速开始](/docs/quick-starts/ruby) |
-| | [Deno 快速开始](/docs/quick-starts/deno) |
-| | [PHP 快速开始](/docs/quick-starts/php) |
-| | [Kotlin 快速开始](/docs/quick-starts/kotlin) |
-| | [Swift 快速开始](/docs/quick-starts/swift) |
+| 类别 | 技术 |
+| ------------------ | --------------------------------------------------------------------------- |
+| **Web 应用** | [Web 快速开始](https://appwrite.io/docs/quick-starts/web) |
+| | [Next.js 快速开始](https://appwrite.io/docs/quick-starts/nextjs) |
+| | [React 快速开始](https://appwrite.io/docs/quick-starts/react) |
+| | [Vue.js 快速开始](https://appwrite.io/docs/quick-starts/vue) |
+| | [Nuxt 快速开始](https://appwrite.io/docs/quick-starts/nuxt) |
+| | [SvelteKit 快速开始](https://appwrite.io/docs/quick-starts/sveltekit) |
+| | [Refine 快速开始](https://appwrite.io/docs/quick-starts/refine) |
+| | [Angular 快速开始](https://appwrite.io/docs/quick-starts/angular) |
+| **苹果于安卓应用** | [React Native 快速开始](https://appwrite.io/docs/quick-starts/react-native) |
+| | [Flutter 快速开始](https://appwrite.io/docs/quick-starts/flutter) |
+| | [Apple 快速开始](https://appwrite.io/docs/quick-starts/apple) |
+| | [Android 快速开始](https://appwrite.io/docs/quick-starts/android) |
+| **服务器** | [Node.js 快速开始](https://appwrite.io/docs/quick-starts/node) |
+| | [Python 快速开始](https://appwrite.io/docs/quick-starts/python) |
+| | [.NET 快速开始](https://appwrite.io/docs/quick-starts/dotnet) |
+| | [Dart 快速开始](https://appwrite.io/docs/quick-starts/dart) |
+| | [Ruby 快速开始](https://appwrite.io/docs/quick-starts/ruby) |
+| | [Deno 快速开始](https://appwrite.io/docs/quick-starts/deno) |
+| | [PHP 快速开始](https://appwrite.io/docs/quick-starts/php) |
+| | [Kotlin 快速开始](https://appwrite.io/docs/quick-starts/kotlin) |
+| | [Swift 快速开始](https://appwrite.io/docs/quick-starts/swift) |
### 软件服务
-* [**帐户**](https://appwrite.io/docs/references/cloud/client-web/account) -管理当前用户的帐户和登录方式。跟踪和管理用户 Session,登录设备,登录方法和查看相关记录。
-* [**用户**](https://appwrite.io/docs/server/users) - 在以管理员模式登录时管理和列出所有用户。
-* [**团队**](https://appwrite.io/docs/references/cloud/client-web/teams) - 管理用户分组。邀请成员,管理团队中的用户权限和用户角色。
-* [**数据库**](https://appwrite.io/docs/references/cloud/client-web/databases) - 管理数据库文档和文档集。用检索界面来对文档和文档集进行读取,创建,更新,和删除。
-* [**贮存**](https://appwrite.io/docs/references/cloud/client-web/storage) - 管理文件的阅读、创建、删除和预览。设置文件的预览来满足程序的个性化需求。所有文件都由 ClamAV 扫描并安全存储和加密。
-* [**云函数**](https://appwrite.io/docs/server/functions) - 在安全,隔离的环境中运行自定义代码。这些代码可以被事件,CRON,或者手动操作触发。
-* [**消息传递**](https://appwrite.io/docs/references/cloud/client-web/messaging) - 使用 Appwrite 消息传递功能通过推送通知、电子邮件和短信与用户进行通信。
-* [**语言适配**](https://appwrite.io/docs/references/cloud/client-web/locale) - 根据用户所在的的国家和地区做出合适的语言适配。
-* [**头像**](https://appwrite.io/docs/references/cloud/client-web/avatars) -管理用户头像、国家旗帜、浏览器图标、信用卡符号,和生成二维码。
-如需完整的 API 界面文档,请访问 [https://appwrite.io/docs](https://appwrite.io/docs)。如需更多教程、新闻和公告,请订阅我们的 [博客](https://medium.com/appwrite-io) 和 加入我们的[Discord 社区](https://discord.gg/GSeTUeA)。
+- [**帐户**](https://appwrite.io/docs/references/cloud/client-web/account) -管理当前用户的帐户和登录方式。跟踪和管理用户 Session,登录设备,登录方法和查看相关记录。
+- [**用户**](https://appwrite.io/docs/server/users) - 在以管理员模式登录时管理和列出所有用户。
+- [**团队**](https://appwrite.io/docs/references/cloud/client-web/teams) - 管理用户分组。邀请成员,管理团队中的用户权限和用户角色。
+- [**数据库**](https://appwrite.io/docs/references/cloud/client-web/databases) - 管理数据库文档和文档集。用检索界面来对文档和文档集进行读取,创建,更新,和删除。
+- [**贮存**](https://appwrite.io/docs/references/cloud/client-web/storage) - 管理文件的阅读、创建、删除和预览。设置文件的预览来满足程序的个性化需求。所有文件都由 ClamAV 扫描并安全存储和加密。
+- [**云函数**](https://appwrite.io/docs/server/functions) - 在安全,隔离的环境中运行自定义代码。这些代码可以被事件,CRON,或者手动操作触发。
+- [**消息传递**](https://appwrite.io/docs/references/cloud/client-web/messaging) - 使用 Appwrite 消息传递功能通过推送通知、电子邮件和短信与用户进行通信。
+- [**语言适配**](https://appwrite.io/docs/references/cloud/client-web/locale) - 根据用户所在的的国家和地区做出合适的语言适配。
+- [**头像**](https://appwrite.io/docs/references/cloud/client-web/avatars) -管理用户头像、国家旗帜、浏览器图标、信用卡符号,和生成二维码。
+ 如需完整的 API 界面文档,请访问 [https://appwrite.io/docs](https://appwrite.io/docs)。如需更多教程、新闻和公告,请订阅我们的 [博客](https://medium.com/appwrite-io) 和 加入我们的[Discord 社区](https://discord.gg/GSeTUeA)。
### 开发套件
以下是当前支持的平台和语言列表。如果您想帮助我们为您选择的平台添加支持,您可以访问我们的 [SDK 生成器](https://github.com/appwrite/sdk-generator) 项目并查看我们的 [贡献指南](https://github.com/appwrite/sdk-generator/blob/master/CONTRIBUTING.md)。
#### 客户端
-* ✅ [Web](https://github.com/appwrite/sdk-for-web) (由 Appwrite 团队维护)
-* ✅ [Flutter](https://github.com/appwrite/sdk-for-flutter) (由 Appwrite 团队维护)
-* ✅ [Apple](https://github.com/appwrite/sdk-for-apple) (由 Appwrite 团队维护)
-* ✅ [Android](https://github.com/appwrite/sdk-for-android) (由 Appwrite 团队维护)
-* ✅ [React Native](https://github.com/appwrite/sdk-for-react-native) - **公测** (由 Appwrite 团队维护)
+
+- ✅ [Web](https://github.com/appwrite/sdk-for-web) (由 Appwrite 团队维护)
+- ✅ [Flutter](https://github.com/appwrite/sdk-for-flutter) (由 Appwrite 团队维护)
+- ✅ [Apple](https://github.com/appwrite/sdk-for-apple) (由 Appwrite 团队维护)
+- ✅ [Android](https://github.com/appwrite/sdk-for-android) (由 Appwrite 团队维护)
+- ✅ [React Native](https://github.com/appwrite/sdk-for-react-native) - **公测** (由 Appwrite 团队维护)
#### 服务器
-* ✅ [NodeJS](https://github.com/appwrite/sdk-for-node) (由 Appwrite 团队维护)
-* ✅ [PHP](https://github.com/appwrite/sdk-for-php) (由 Appwrite 团队维护)
-* ✅ [Dart](https://github.com/appwrite/sdk-for-dart) (由 Appwrite 团队维护)
-* ✅ [Deno](https://github.com/appwrite/sdk-for-deno) (由 Appwrite 团队维护)
-* ✅ [Ruby](https://github.com/appwrite/sdk-for-ruby) (由 Appwrite 团队维护)
-* ✅ [Python](https://github.com/appwrite/sdk-for-python) (由 Appwrite 团队维护)
-* ✅ [Kotlin](https://github.com/appwrite/sdk-for-kotlin) (由 Appwrite 团队维护)
-* ✅ [Swift](https://github.com/appwrite/sdk-for-swift) (由 Appwrite 团队维护)
-* ✅ [.NET](https://github.com/appwrite/sdk-for-dotnet) - **公测** (由 Appwrite 团队维护)
+
+- ✅ [NodeJS](https://github.com/appwrite/sdk-for-node) (由 Appwrite 团队维护)
+- ✅ [PHP](https://github.com/appwrite/sdk-for-php) (由 Appwrite 团队维护)
+- ✅ [Dart](https://github.com/appwrite/sdk-for-dart) (由 Appwrite 团队维护)
+- ✅ [Deno](https://github.com/appwrite/sdk-for-deno) (由 Appwrite 团队维护)
+- ✅ [Ruby](https://github.com/appwrite/sdk-for-ruby) (由 Appwrite 团队维护)
+- ✅ [Python](https://github.com/appwrite/sdk-for-python) (由 Appwrite 团队维护)
+- ✅ [Kotlin](https://github.com/appwrite/sdk-for-kotlin) (由 Appwrite 团队维护)
+- ✅ [Swift](https://github.com/appwrite/sdk-for-swift) (由 Appwrite 团队维护)
+- ✅ [.NET](https://github.com/appwrite/sdk-for-dotnet) - **公测** (由 Appwrite 团队维护)
#### 开发者社区
-* ✅ [Appcelerator Titanium](https://github.com/m1ga/ti.appwrite) (维护者 [Michael Gangolf](https://github.com/m1ga/))
-* ✅ [Godot Engine](https://github.com/GodotNuts/appwrite-sdk) (维护者 [fenix-hub @GodotNuts](https://github.com/fenix-hub))
-找不到需要的的 SDK? - 欢迎通过发起PR来帮助我们完善Appwrite的软件生态环境 [SDK 生成器](https://github.com/appwrite/sdk-generator)!
+- ✅ [Appcelerator Titanium](https://github.com/m1ga/ti.appwrite) (维护者 [Michael Gangolf](https://github.com/m1ga/))
+- ✅ [Godot Engine](https://github.com/GodotNuts/appwrite-sdk) (维护者 [fenix-hub @GodotNuts](https://github.com/fenix-hub))
+找不到需要的的 SDK? - 欢迎通过发起 PR 来帮助我们完善 Appwrite 的软件生态环境 [SDK 生成器](https://github.com/appwrite/sdk-generator)!
## 软件架构
@@ -180,13 +182,13 @@ Appwrite API 界面层利用后台缓存和任务委派来提供极速的响应
## 贡献代码
-为了确保正确审查,所有代码贡献 - 包括来自具有直接提交更改权限的贡献者 - 都必须提交PR请求并在合并分支之前得到核心开发人员的批准。
+为了确保正确审查,所有代码贡献 - 包括来自具有直接提交更改权限的贡献者 - 都必须提交 PR 请求并在合并分支之前得到核心开发人员的批准。
-我们欢迎所有人提交PR!如果您愿意提供帮助,可以在 [贡献指南](CONTRIBUTING.md) 中了解有关如何为项目做出贡献的更多信息。
+我们欢迎所有人提交 PR!如果您愿意提供帮助,可以在 [贡献指南](CONTRIBUTING.md) 中了解有关如何为项目做出贡献的更多信息。
## 安全
-为了保护您的隐私,请避免在GitHub 上发布安全问题。发送问题至 security@appwrite.io,我们将为您做更细致的解答。
+为了保护您的隐私,请避免在 GitHub 上发布安全问题。发送问题至 security@appwrite.io,我们将为您做更细致的解答。
## 订阅我们
diff --git a/README.md b/README.md
index eb4e963585..865df745b4 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,6 @@
-
[](https://appwrite.io/company/careers)
@@ -142,29 +141,29 @@ Choose from one of the providers below:
Getting started with Appwrite is as easy as creating a new project, choosing your platform, and integrating its SDK into your code. You can easily get started with your platform of choice by reading one of our Getting Started tutorials.
-| Platform | Technology |
-|--------------------|------------|
-| **Web app** | [Quick start for Web](/docs/quick-starts/web) |
-| | [Quick start for Next.js](/docs/quick-starts/nextjs) |
-| | [Quick start for React](/docs/quick-starts/react) |
-| | [Quick start for Vue.js](/docs/quick-starts/vue) |
-| | [Quick start for Nuxt](/docs/quick-starts/nuxt) |
-| | [Quick start for SvelteKit](/docs/quick-starts/sveltekit) |
-| | [Quick start for Refine](/docs/quick-starts/refine) |
-| | [Quick start for Angular](/docs/quick-starts/angular) |
-| **Mobile and Native** | [Quick start for React Native](/docs/quick-starts/react-native) |
-| | [Quick start for Flutter](/docs/quick-starts/flutter) |
-| | [Quick start for Apple](/docs/quick-starts/apple) |
-| | [Quick start for Android](/docs/quick-starts/android) |
-| **Server** | [Quick start for Node.js](/docs/quick-starts/node) |
-| | [Quick start for Python](/docs/quick-starts/python) |
-| | [Quick start for .NET](/docs/quick-starts/dotnet) |
-| | [Quick start for Dart](/docs/quick-starts/dart) |
-| | [Quick start for Ruby](/docs/quick-starts/ruby) |
-| | [Quick start for Deno](/docs/quick-starts/deno) |
-| | [Quick start for PHP](/docs/quick-starts/php) |
-| | [Quick start for Kotlin](/docs/quick-starts/kotlin) |
-| | [Quick start for Swift](/docs/quick-starts/swift) |
+| Platform | Technology |
+| --------------------- | ---------------------------------------------------------------------------------- |
+| **Web app** | [Quick start for Web](https://appwrite.io/docs/quick-starts/web) |
+| | [Quick start for Next.js](https://appwrite.io/docs/quick-starts/nextjs) |
+| | [Quick start for React](https://appwrite.io/docs/quick-starts/react) |
+| | [Quick start for Vue.js](https://appwrite.io/docs/quick-starts/vue) |
+| | [Quick start for Nuxt](https://appwrite.io/docs/quick-starts/nuxt) |
+| | [Quick start for SvelteKit](https://appwrite.io/docs/quick-starts/sveltekit) |
+| | [Quick start for Refine](https://appwrite.io/docs/quick-starts/refine) |
+| | [Quick start for Angular](https://appwrite.io/docs/quick-starts/angular) |
+| **Mobile and Native** | [Quick start for React Native](https://appwrite.io/docs/quick-starts/react-native) |
+| | [Quick start for Flutter](https://appwrite.io/docs/quick-starts/flutter) |
+| | [Quick start for Apple](https://appwrite.io/docs/quick-starts/apple) |
+| | [Quick start for Android](https://appwrite.io/docs/quick-starts/android) |
+| **Server** | [Quick start for Node.js](https://appwrite.io/docs/quick-starts/node) |
+| | [Quick start for Python](https://appwrite.io/docs/quick-starts/python) |
+| | [Quick start for .NET](https://appwrite.io/docs/quick-starts/dotnet) |
+| | [Quick start for Dart](https://appwrite.io/docs/quick-starts/dart) |
+| | [Quick start for Ruby](https://appwrite.io/docs/quick-starts/ruby) |
+| | [Quick start for Deno](https://appwrite.io/docs/quick-starts/deno) |
+| | [Quick start for PHP](https://appwrite.io/docs/quick-starts/php) |
+| | [Quick start for Kotlin](https://appwrite.io/docs/quick-starts/kotlin) |
+| | [Quick start for Swift](https://appwrite.io/docs/quick-starts/swift) |
### Products
From ef0b27840ccd8bd51a7349efe8802898e98dccaf Mon Sep 17 00:00:00 2001
From: Damodar Lohani
Date: Tue, 30 Apr 2024 11:51:36 +0000
Subject: [PATCH 038/138] update readme
---
docs/sdks/react-native/GETTING_STARTED.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/docs/sdks/react-native/GETTING_STARTED.md b/docs/sdks/react-native/GETTING_STARTED.md
index 0f3695040d..9d07eec54a 100644
--- a/docs/sdks/react-native/GETTING_STARTED.md
+++ b/docs/sdks/react-native/GETTING_STARTED.md
@@ -7,10 +7,10 @@ If this is your first time using Appwrite, create an account and create your fir
Then, under **Add a platform**, add a **Android app** or a **Apple app**. You can skip optional steps.
#### iOS steps
-Add your app **name** and **Bundle ID**. You can find your **Bundle Identifier** in the **General** tab for your app's primary target in XCode.
+Add your app **name** and **Bundle ID**. You can find your **Bundle Identifier** in the **General** tab for your app's primary target in XCode. For Expo projects you can set or find it on **app.json** file at your project's root directory.
#### Android steps
-Add your app's **name** and **package name**, Your package name is generally the **applicationId** in your app-level [build.gradle](https://github.com/appwrite/playground-for-flutter/blob/master/android/app/build.gradle#L41) file.
+Add your app's **name** and **package name**, Your package name is generally the **applicationId** in your app-level **build.gradle** file. For Expo projects you can set or find it on **app.json** file at your project's root directory.
## Setup
From 64d4ede05dc9433c1d368c4cc0bc88575cc14459 Mon Sep 17 00:00:00 2001
From: Damodar Lohani
Date: Wed, 1 May 2024 08:55:45 +0000
Subject: [PATCH 039/138] mark beta
---
app/config/platforms.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/config/platforms.php b/app/config/platforms.php
index d839345056..28ad9e2f37 100644
--- a/app/config/platforms.php
+++ b/app/config/platforms.php
@@ -142,7 +142,7 @@ return [
'url' => 'https://github.com/appwrite/sdk-for-react-native',
'package' => 'https://npmjs.com/package/react-native-appwrite',
'enabled' => true,
- 'beta' => false,
+ 'beta' => true,
'dev' => false,
'hidden' => false,
'family' => APP_PLATFORM_CLIENT,
From f81f2e04118f85e88df5d9987788ef62eed36832 Mon Sep 17 00:00:00 2001
From: Khushboo Verma <43381712+vermakhushboo@users.noreply.github.com>
Date: Fri, 3 May 2024 15:39:08 +0530
Subject: [PATCH 040/138] Add publish: false flag
---
app/config/errors.php | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/config/errors.php b/app/config/errors.php
index 9e742d3296..fa6c24ecde 100644
--- a/app/config/errors.php
+++ b/app/config/errors.php
@@ -135,6 +135,7 @@ return [
'name' => Exception::USER_COUNT_EXCEEDED,
'description' => 'The current project has exceeded the maximum number of users. Please check your user limit in the Appwrite console.',
'code' => 501,
+ 'publish' => false,
],
Exception::USER_CONSOLE_COUNT_EXCEEDED => [
'name' => Exception::USER_CONSOLE_COUNT_EXCEEDED,
From fc38b9473274e23e59e5e84a380cc2a58e22643e Mon Sep 17 00:00:00 2001
From: Sumanta
Date: Sat, 4 May 2024 17:08:44 +0530
Subject: [PATCH 041/138] fix: updated typo in credit-cards.php credit card
image filename
---
app/config/avatars/credit-cards.php | 2 +-
.../credit-cards/{censosud.png => cencosud.png} | Bin
2 files changed, 1 insertion(+), 1 deletion(-)
rename app/config/avatars/credit-cards/{censosud.png => cencosud.png} (100%)
diff --git a/app/config/avatars/credit-cards.php b/app/config/avatars/credit-cards.php
index 1aa22c4174..2bceee0d89 100644
--- a/app/config/avatars/credit-cards.php
+++ b/app/config/avatars/credit-cards.php
@@ -4,7 +4,7 @@ return [
'amex' => ['name' => 'American Express', 'path' => __DIR__ . '/credit-cards/amex.png'],
'argencard' => ['name' => 'Argencard', 'path' => __DIR__ . '/credit-cards/argencard.png'],
'cabal' => ['name' => 'Cabal', 'path' => __DIR__ . '/credit-cards/cabal.png'],
- 'censosud' => ['name' => 'Consosud', 'path' => __DIR__ . '/credit-cards/consosud.png'],
+ 'cencosud' => ['name' => 'Consosud', 'path' => __DIR__ . '/credit-cards/cencosud.png'],
'diners' => ['name' => 'Diners Club', 'path' => __DIR__ . '/credit-cards/diners.png'],
'discover' => ['name' => 'Discover', 'path' => __DIR__ . '/credit-cards/discover.png'],
'elo' => ['name' => 'Elo', 'path' => __DIR__ . '/credit-cards/elo.png'],
diff --git a/app/config/avatars/credit-cards/censosud.png b/app/config/avatars/credit-cards/cencosud.png
similarity index 100%
rename from app/config/avatars/credit-cards/censosud.png
rename to app/config/avatars/credit-cards/cencosud.png
From 7ca9e6923f921cacb372e62b7a57df6a9dae6ff3 Mon Sep 17 00:00:00 2001
From: Damodar Lohani
Date: Sun, 5 May 2024 10:47:54 +0545
Subject: [PATCH 042/138] add test
---
.../Projects/ProjectsCustomServerTest.php | 30 +++++++++++++++++--
1 file changed, 28 insertions(+), 2 deletions(-)
diff --git a/tests/e2e/Services/Projects/ProjectsCustomServerTest.php b/tests/e2e/Services/Projects/ProjectsCustomServerTest.php
index 436d1df611..bae0d8bda9 100644
--- a/tests/e2e/Services/Projects/ProjectsCustomServerTest.php
+++ b/tests/e2e/Services/Projects/ProjectsCustomServerTest.php
@@ -2,17 +2,43 @@
namespace Tests\E2E\Services\Projects;
+use Tests\E2E\Client;
use Tests\E2E\Scopes\ProjectCustom;
use Tests\E2E\Scopes\Scope;
use Tests\E2E\Scopes\SideServer;
+use Utopia\System\System;
class ProjectsCustomServerTest extends Scope
{
use ProjectCustom;
use SideServer;
- public function testMock()
+ // Domains
+
+ public function testCreateProjectRule()
{
- $this->assertEquals(true, true);
+ $headers = array_merge([
+ 'content-type' => 'application/json',
+ 'x-appwrite-project' => $this->getProject()['$id'],
+ 'x-appwrite-mode' => 'admin',
+ 'cookie' => 'a_session_console=' . $this->getRoot()['session'],
+ ]);
+
+ $response = $this->client->call(Client::METHOD_POST, '/proxy/rules', $headers, [
+ 'resourceType' => 'api',
+ 'domain' => 'api.appwrite.test',
+ ]);
+
+ $this->assertEquals(201, $response['headers']['status-code']);
+
+ // prevent functions domain
+ $functionsDomain = System::getEnv('_APP_DOMAIN_FUNCTIONS', '');
+
+ $response = $this->client->call(Client::METHOD_POST, '/proxy/rules', $headers, [
+ 'resourceType' => 'api',
+ 'domain' => $functionsDomain,
+ ]);
+
+ $this->assertEquals(400, $response['headers']['status-code']);
}
}
From 74264582cc31bc2cf32d30dfed10370b5aaf73ce Mon Sep 17 00:00:00 2001
From: Damodar Lohani
Date: Sun, 5 May 2024 11:07:59 +0545
Subject: [PATCH 043/138] Update proxy.php
---
app/controllers/api/proxy.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/controllers/api/proxy.php b/app/controllers/api/proxy.php
index 0cd4c50662..29f39c55af 100644
--- a/app/controllers/api/proxy.php
+++ b/app/controllers/api/proxy.php
@@ -50,7 +50,7 @@ App::post('/v1/proxy/rules')
throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'You cannot assign your main domain to specific resource. Please use subdomain or a different domain.');
}
- $functionsDomain = App::getEnv('_APP_DOMAIN_FUNCTIONS', '');
+ $functionsDomain = System::getEnv('_APP_DOMAIN_FUNCTIONS', '');
if (str_ends_with($domain, $functionsDomain)) {
throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'You cannot assign your functions domain or it\'s subdomain to specific resource. Please use different domain.');
}
From 3fab87a1cae146ed0645262c67a04472b6bfd680 Mon Sep 17 00:00:00 2001
From: bhc
Date: Sun, 5 May 2024 15:43:59 +0300
Subject: [PATCH 044/138] Update total count of countries in LocaleBase tests
for testGetCountriesPhones
---
tests/e2e/Services/Locale/LocaleBase.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/e2e/Services/Locale/LocaleBase.php b/tests/e2e/Services/Locale/LocaleBase.php
index a06ede40be..89a325d839 100644
--- a/tests/e2e/Services/Locale/LocaleBase.php
+++ b/tests/e2e/Services/Locale/LocaleBase.php
@@ -247,7 +247,7 @@ trait LocaleBase
}
$this->assertEquals($response['headers']['status-code'], 200);
- $this->assertEquals(196, $response['body']['total']);
+ $this->assertEquals(197, $response['body']['total']);
$response = $this->client->call(Client::METHOD_GET, '/locale/continents', [
'content-type' => 'application/json',
From df5b1287b8d6ac969e8849d9be954252f1f7d3ef Mon Sep 17 00:00:00 2001
From: shimon
Date: Mon, 6 May 2024 08:54:51 +0300
Subject: [PATCH 045/138] adding new usage metric
---
CONTRIBUTING.md | 51 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 51 insertions(+)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 529f6103d1..f934048d7a 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -301,6 +301,57 @@ This will allow the Appwrite community to sufficiently discuss the new feature v
This is also important for the Appwrite lead developers to be able to provide technical input and potentially a different emphasis regarding the feature design and architecture. Some bigger features might need to go through our [RFC process](https://github.com/appwrite/rfc).
+## Adding new usage metrics
+
+metrics are collected to 3 scopes :
+Daily, monthly, an infinity.
+Adding new usage metrics in order to aggregate usage stats is very simple but very much depends on where do you want to collect.
+the statistics( via API or via background worker)
+Here are the steps needs to be taken in both cases:
+
+For both cases you need to add a const variable in app/init.php under the usage metrics list.
+```php
+// Usage metrics
+const METRIC_FUNCTIONS = 'functions';
+const METRIC_DEPLOYMENTS = 'deployments';
+const METRIC_DEPLOYMENTS_STORAGE = 'deployments.storage';
+const METRIC_BUILDS = 'builds';
+const METRIC_BUILDS_STORAGE = 'builds.storage';
+const METRIC_BUILDS_COMPUTE = 'builds.compute';
+```
+
+**API**
+
+On database listener, Add to existing or create a new switch case.
+Add a call to the usage worker with your new metric const like so:
+
+```php
+ case $document->getCollection() === 'functions':
+ $queueForUsage
+ ->addMetric(METRIC_FUNCTIONS, $value);
+ if ($event === Database::EVENT_DOCUMENT_DELETE) {
+ $queueForUsage
+ ->addReduce($document);
+ }
+ break;
+```
+
+
+**Background worker**
+
+```php
+$queueForUsage
+ ->addMetric(METRIC_BUILDS, 1)
+ ->addMetric(METRIC_BUILDS_STORAGE, $build->getAttribute('size', 0))
+ ->addMetric(METRIC_BUILDS_COMPUTE, (int)$build->getAttribute('duration', 0) * 1000)
+ ->addMetric(str_replace('{functionInternalId}', $function->getInternalId(), METRIC_FUNCTION_ID_BUILDS), 1)
+ ->addMetric(str_replace('{functionInternalId}', $function->getInternalId(), METRIC_FUNCTION_ID_BUILDS_STORAGE), $build->getAttribute('size', 0))
+ ->addMetric(str_replace('{functionInternalId}', $function->getInternalId(), METRIC_FUNCTION_ID_BUILDS_COMPUTE), (int)$build->getAttribute('duration', 0) * 1000)
+ ->setProject($project)
+ ->trigger();
+```
+
+
## Build
To build a new version of the Appwrite server, all you need to do is run the build.sh file like this:
From 2f54446aee4bbf4ff91b92eaa4c9df19d67aa489 Mon Sep 17 00:00:00 2001
From: shimon
Date: Mon, 6 May 2024 17:31:36 +0300
Subject: [PATCH 046/138] adding new usage metric
---
CONTRIBUTING.md | 89 ++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 81 insertions(+), 8 deletions(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index f934048d7a..2cc4a7cd6a 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -301,12 +301,53 @@ This will allow the Appwrite community to sufficiently discuss the new feature v
This is also important for the Appwrite lead developers to be able to provide technical input and potentially a different emphasis regarding the feature design and architecture. Some bigger features might need to go through our [RFC process](https://github.com/appwrite/rfc).
-## Adding new usage metrics
+## Adding New Usage Metrics
+
+These are the current metrics we collect usage stats for:
+
+| Metric | Description |
+|--------|---------------------------------------------------|
+| teams | Total number of teams per project |
+| users | Total number of users per project |
+| executions | Total number of executions per project |
+| databases | Total number of databases per project |
+| collections | Total number of collections per project |
+| {databaseInternalId}.collections | Total number of collections per database |
+| documents | Total number of documents per project |
+| {databaseInternalId}.{collectionInternalId}.documents | Total number of documents per collection |
+| buckets | Total number of buckets per project |
+| files | Total number of files per project |
+| files.storage | Sum of files storage per project (in bytes) |
+| {bucketInternalId}.files.storage | Sum of files.storage per bucket |
+| functions | Total number of functions per project |
+| deployments | Total number of deployments per project |
+| deployments.storage | Sum of deployments storage per project (in bytes) |
+| builds | Total number of builds per project |
+| builds.storage | Sum of builds storage per project (in bytes) |
+| builds.compute | Sum of compute duration per project (in seconds) |
+| {functionInternalId}.builds.storage | Sum of builds storage per function |
+| {functionInternalId}.builds.compute | Sum of compute duration per function (in seconds) |
+| {resourceType}.{resourceInternalId}.deployments | Total number of deployments per function |
+| {resourceType}.{resourceInternalId}.deployments.storage | Sum of deployments storage per function |
+| executions | Total number of executions per project |
+| executions.compute | Sum of compute duration per project (in seconds) |
+| {functionInternalId}.executions | Total number of executions per function |
+| network.requests | Total number of network requests per project |
+| network.inbound | Sum of network inbound traffic per project |
+| network.outbound | Sum of network outbound traffic per project |
+
+* The curly brackets in the metric name act as placeholders and will be replaced with a value.
+
+Metrics are collected into 3 scopes: Daily, monthly, and infinity. Adding new usage metrics to aggregate usage stats is simple but depends on whether you want to collect the statistics via API or background worker. Here are the steps needed for both cases:
+
+For both cases, add a const variable in `app/init.php` under the usage metrics list:
+
+* The curly brackets in the metric name acts as a placeholder and will be replaced with a value.
metrics are collected to 3 scopes :
Daily, monthly, an infinity.
-Adding new usage metrics in order to aggregate usage stats is very simple but very much depends on where do you want to collect.
-the statistics( via API or via background worker)
+Adding new usage metrics in order to aggregate usage stats is very simple but very much depends on where do you want to collect
+the statistics(API or via background worker).
Here are the steps needs to be taken in both cases:
For both cases you need to add a const variable in app/init.php under the usage metrics list.
@@ -315,16 +356,22 @@ For both cases you need to add a const variable in app/init.php under the usage
const METRIC_FUNCTIONS = 'functions';
const METRIC_DEPLOYMENTS = 'deployments';
const METRIC_DEPLOYMENTS_STORAGE = 'deployments.storage';
-const METRIC_BUILDS = 'builds';
-const METRIC_BUILDS_STORAGE = 'builds.storage';
-const METRIC_BUILDS_COMPUTE = 'builds.compute';
```
**API**
-On database listener, Add to existing or create a new switch case.
-Add a call to the usage worker with your new metric const like so:
+In the database listener, add to an existing or create a new switch case. Add a call to the usage worker with your new metric const like so:
+```php
+ case $document->getCollection() === 'teams':
+ $queueForUsage
+ ->addMetric(METRIC_TEAMS, $value); // per project
+ break;
+```
+There are cases when you need to handle metric the is a parent entity, like buckets.
+Files are linked to a parent bucket, you should verify you remove the files stats when you delete a bucket.
+
+In that case you need also to handle children removal using addReduce() method call.
```php
case $document->getCollection() === 'functions':
$queueForUsage
@@ -336,9 +383,35 @@ Add a call to the usage worker with your new metric const like so:
break;
```
+On top of that also adding logic on the usage worker located in /src/Appwrite/Platform/Workers/Usage.php, on the reduce method.
+```php
+private function reduce(Document $project, Document $document, array &$metrics, callable $getProjectDB): void
+```
+
**Background worker**
+On that case you need to inject the usage queue to the desired worker
+```php
+/**
+* @throws Exception
+*/
+public function __construct()
+{
+$this
+->desc('Functions worker')
+->groups(['functions'])
+->inject('message')
+->inject('dbForProject')
+->inject('queueForFunctions')
+->inject('queueForEvents')
+->inject('queueForUsage')
+->inject('log')
+->callback(fn (Message $message, Database $dbForProject, Func $queueForFunctions, Event $queueForEvents, Usage $queueForUsage, Log $log) => $this->action($message, $dbForProject, $queueForFunctions, $queueForEvents, $queueForUsage, $log));
+```
+
+and then trigger the queue with the new metric like so:
+
```php
$queueForUsage
->addMetric(METRIC_BUILDS, 1)
From 6f3aefdf166e10b785697194898c039ebbbba5b8 Mon Sep 17 00:00:00 2001
From: Sumanta
Date: Tue, 7 May 2024 00:51:58 +0530
Subject: [PATCH 047/138] fix: updated typo in credit-cards.php from Consosud
to Cencosud
---
app/config/avatars/credit-cards.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/config/avatars/credit-cards.php b/app/config/avatars/credit-cards.php
index 2bceee0d89..eb76c576cf 100644
--- a/app/config/avatars/credit-cards.php
+++ b/app/config/avatars/credit-cards.php
@@ -4,7 +4,7 @@ return [
'amex' => ['name' => 'American Express', 'path' => __DIR__ . '/credit-cards/amex.png'],
'argencard' => ['name' => 'Argencard', 'path' => __DIR__ . '/credit-cards/argencard.png'],
'cabal' => ['name' => 'Cabal', 'path' => __DIR__ . '/credit-cards/cabal.png'],
- 'cencosud' => ['name' => 'Consosud', 'path' => __DIR__ . '/credit-cards/cencosud.png'],
+ 'cencosud' => ['name' => 'Cencosud', 'path' => __DIR__ . '/credit-cards/cencosud.png'],
'diners' => ['name' => 'Diners Club', 'path' => __DIR__ . '/credit-cards/diners.png'],
'discover' => ['name' => 'Discover', 'path' => __DIR__ . '/credit-cards/discover.png'],
'elo' => ['name' => 'Elo', 'path' => __DIR__ . '/credit-cards/elo.png'],
From b9e79dfd0c192ae928f86a87d2654238fcb34b76 Mon Sep 17 00:00:00 2001
From: Steven Nguyen
Date: Mon, 6 May 2024 13:34:15 -0700
Subject: [PATCH 048/138] chore: bump database and update dependencies
---
composer.json | 6 ++--
composer.lock | 76 +++++++++++++++++++++++++--------------------------
2 files changed, 41 insertions(+), 41 deletions(-)
diff --git a/composer.json b/composer.json
index 286594441f..d1665bd219 100644
--- a/composer.json
+++ b/composer.json
@@ -44,13 +44,13 @@
"ext-sockets": "*",
"appwrite/php-runtimes": "0.13.*",
"appwrite/php-clamav": "2.0.*",
- "utopia-php/abuse": "0.36.*",
+ "utopia-php/abuse": "0.37.*",
"utopia-php/analytics": "0.10.*",
- "utopia-php/audit": "0.38.*",
+ "utopia-php/audit": "0.39.*",
"utopia-php/cache": "0.9.*",
"utopia-php/cli": "0.15.*",
"utopia-php/config": "0.2.*",
- "utopia-php/database": "0.48.*",
+ "utopia-php/database": "0.49.*",
"utopia-php/domains": "0.5.*",
"utopia-php/dsn": "0.2.*",
"utopia-php/framework": "0.33.*",
diff --git a/composer.lock b/composer.lock
index 34a3cc143c..dae02059a5 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "3f703f77225d4022cd5823814ab7c3e7",
+ "content-hash": "ddce40668e20709ace22219623303e38",
"packages": [
{
"name": "adhocore/jwt",
@@ -1264,23 +1264,23 @@
},
{
"name": "utopia-php/abuse",
- "version": "0.36.0",
+ "version": "0.37.0",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/abuse.git",
- "reference": "d3d09b4fa0db75935110714ad4b2a87f3ace31ed"
+ "reference": "2de5c12886cbd516e511e559afdd9e615d871062"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/abuse/zipball/d3d09b4fa0db75935110714ad4b2a87f3ace31ed",
- "reference": "d3d09b4fa0db75935110714ad4b2a87f3ace31ed",
+ "url": "https://api.github.com/repos/utopia-php/abuse/zipball/2de5c12886cbd516e511e559afdd9e615d871062",
+ "reference": "2de5c12886cbd516e511e559afdd9e615d871062",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-pdo": "*",
"php": ">=8.0",
- "utopia-php/database": "0.48.*"
+ "utopia-php/database": "0.49.*"
},
"require-dev": {
"laravel/pint": "1.5.*",
@@ -1307,9 +1307,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/abuse/issues",
- "source": "https://github.com/utopia-php/abuse/tree/0.36.0"
+ "source": "https://github.com/utopia-php/abuse/tree/0.37.0"
},
- "time": "2024-01-19T09:32:56+00:00"
+ "time": "2024-03-06T21:20:27+00:00"
},
{
"name": "utopia-php/analytics",
@@ -1359,21 +1359,21 @@
},
{
"name": "utopia-php/audit",
- "version": "0.38.0",
+ "version": "0.39.0",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/audit.git",
- "reference": "a9067f4af76e8787f1d29850a8ec94fc32bb6539"
+ "reference": "f0bc15012e05cc0b9dde012ab27d25f193768a2c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/audit/zipball/a9067f4af76e8787f1d29850a8ec94fc32bb6539",
- "reference": "a9067f4af76e8787f1d29850a8ec94fc32bb6539",
+ "url": "https://api.github.com/repos/utopia-php/audit/zipball/f0bc15012e05cc0b9dde012ab27d25f193768a2c",
+ "reference": "f0bc15012e05cc0b9dde012ab27d25f193768a2c",
"shasum": ""
},
"require": {
"php": ">=8.0",
- "utopia-php/database": "0.48.*"
+ "utopia-php/database": "0.49.*"
},
"require-dev": {
"laravel/pint": "1.5.*",
@@ -1400,9 +1400,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/audit/issues",
- "source": "https://github.com/utopia-php/audit/tree/0.38.0"
+ "source": "https://github.com/utopia-php/audit/tree/0.39.0"
},
- "time": "2024-01-19T09:33:05+00:00"
+ "time": "2024-03-06T21:20:37+00:00"
},
{
"name": "utopia-php/cache",
@@ -1556,16 +1556,16 @@
},
{
"name": "utopia-php/database",
- "version": "0.48.4",
+ "version": "0.49.6",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/database.git",
- "reference": "02f20bd901b8fab26d7dc2c58f7da1d6a08d21c0"
+ "reference": "ebc2d3b9435ca56659ab58479a0f755329599f7c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/database/zipball/02f20bd901b8fab26d7dc2c58f7da1d6a08d21c0",
- "reference": "02f20bd901b8fab26d7dc2c58f7da1d6a08d21c0",
+ "url": "https://api.github.com/repos/utopia-php/database/zipball/ebc2d3b9435ca56659ab58479a0f755329599f7c",
+ "reference": "ebc2d3b9435ca56659ab58479a0f755329599f7c",
"shasum": ""
},
"require": {
@@ -1606,9 +1606,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/database/issues",
- "source": "https://github.com/utopia-php/database/tree/0.48.4"
+ "source": "https://github.com/utopia-php/database/tree/0.49.6"
},
- "time": "2024-02-23T03:22:55+00:00"
+ "time": "2024-04-30T01:33:56+00:00"
},
{
"name": "utopia-php/domains",
@@ -1966,16 +1966,16 @@
},
{
"name": "utopia-php/migration",
- "version": "0.4.0",
+ "version": "0.4.1",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/migration.git",
- "reference": "a72f27bd3dde68752fb185d306c4820e1b8d9657"
+ "reference": "ae3cfe93f6d313105d226aeb68806660c806a925"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/migration/zipball/a72f27bd3dde68752fb185d306c4820e1b8d9657",
- "reference": "a72f27bd3dde68752fb185d306c4820e1b8d9657",
+ "url": "https://api.github.com/repos/utopia-php/migration/zipball/ae3cfe93f6d313105d226aeb68806660c806a925",
+ "reference": "ae3cfe93f6d313105d226aeb68806660c806a925",
"shasum": ""
},
"require": {
@@ -2008,9 +2008,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/migration/issues",
- "source": "https://github.com/utopia-php/migration/tree/0.4.0"
+ "source": "https://github.com/utopia-php/migration/tree/0.4.1"
},
- "time": "2024-02-25T12:35:21+00:00"
+ "time": "2024-05-01T13:19:18+00:00"
},
{
"name": "utopia-php/mongo",
@@ -2899,16 +2899,16 @@
},
{
"name": "laravel/pint",
- "version": "v1.15.2",
+ "version": "v1.15.3",
"source": {
"type": "git",
"url": "https://github.com/laravel/pint.git",
- "reference": "2c9f8004899815f3f0ee3cb28ef7281e2b589134"
+ "reference": "3600b5d17aff52f6100ea4921849deacbbeb8656"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/pint/zipball/2c9f8004899815f3f0ee3cb28ef7281e2b589134",
- "reference": "2c9f8004899815f3f0ee3cb28ef7281e2b589134",
+ "url": "https://api.github.com/repos/laravel/pint/zipball/3600b5d17aff52f6100ea4921849deacbbeb8656",
+ "reference": "3600b5d17aff52f6100ea4921849deacbbeb8656",
"shasum": ""
},
"require": {
@@ -2961,7 +2961,7 @@
"issues": "https://github.com/laravel/pint/issues",
"source": "https://github.com/laravel/pint"
},
- "time": "2024-04-23T15:42:34+00:00"
+ "time": "2024-04-30T15:02:26+00:00"
},
{
"name": "matthiasmullie/minify",
@@ -3568,16 +3568,16 @@
},
{
"name": "phpstan/phpdoc-parser",
- "version": "1.28.0",
+ "version": "1.29.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb"
+ "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
- "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/536889f2b340489d328f5ffb7b02bb6b183ddedc",
+ "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc",
"shasum": ""
},
"require": {
@@ -3609,9 +3609,9 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.0"
},
- "time": "2024-04-03T18:51:33+00:00"
+ "time": "2024-05-06T12:04:23+00:00"
},
{
"name": "phpunit/php-code-coverage",
From 98d18ecc473d4a112e4935120f90ec57dcb9b585 Mon Sep 17 00:00:00 2001
From: Steven Nguyen
Date: Mon, 6 May 2024 17:16:56 -0700
Subject: [PATCH 049/138] refactor(auth): remove auth duration from
Auth::sessionVerify() calls
The paramter was removed from the method so we don't need to pass it
in anymore.
---
app/controllers/api/account.php | 6 ++----
app/init.php | 7 +++----
2 files changed, 5 insertions(+), 8 deletions(-)
diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php
index 90a35ede78..500b0842ab 100644
--- a/app/controllers/api/account.php
+++ b/app/controllers/api/account.php
@@ -3665,8 +3665,7 @@ App::put('/v1/account/mfa/authenticators/:type')
$dbForProject->updateDocument('authenticators', $authenticator->getId(), $authenticator);
$dbForProject->purgeCachedDocument('users', $user->getId());
- $authDuration = $project->getAttribute('auths', [])['duration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG;
- $sessionId = Auth::sessionVerify($user->getAttribute('sessions', []), Auth::$secret, $authDuration);
+ $sessionId = Auth::sessionVerify($user->getAttribute('sessions', []), Auth::$secret);
$session = $dbForProject->getDocument('sessions', $sessionId);
$dbForProject->updateDocument('sessions', $sessionId, $session->setAttribute('factors', $type, Document::SET_TYPE_APPEND));
@@ -4105,8 +4104,7 @@ App::put('/v1/account/mfa/challenge')
$dbForProject->deleteDocument('challenges', $challengeId);
$dbForProject->purgeCachedDocument('users', $user->getId());
- $authDuration = $project->getAttribute('auths', [])['duration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG;
- $sessionId = Auth::sessionVerify($user->getAttribute('sessions', []), Auth::$secret, $authDuration);
+ $sessionId = Auth::sessionVerify($user->getAttribute('sessions', []), Auth::$secret);
$session = $dbForProject->getDocument('sessions', $sessionId);
$session = $session
diff --git a/app/init.php b/app/init.php
index 5165f64d7f..8bf5d682cd 100644
--- a/app/init.php
+++ b/app/init.php
@@ -1239,14 +1239,13 @@ App::setResource('project', function ($dbForConsole, $request, $console) {
return $project;
}, ['dbForConsole', 'request', 'console']);
-App::setResource('session', function (Document $user, Document $project) {
+App::setResource('session', function (Document $user) {
if ($user->isEmpty()) {
return;
}
$sessions = $user->getAttribute('sessions', []);
- $authDuration = $project->getAttribute('auths', [])['duration'] ?? Auth::TOKEN_EXPIRATION_LOGIN_LONG;
- $sessionId = Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret, $authDuration);
+ $sessionId = Auth::sessionVerify($user->getAttribute('sessions'), Auth::$secret);
if (!$sessionId) {
return;
@@ -1259,7 +1258,7 @@ App::setResource('session', function (Document $user, Document $project) {
}
return;
-}, ['user', 'project']);
+}, ['user']);
App::setResource('console', function () {
return new Document([
From 7e07f6b95814f7a2b4356db541b71edafcaaf597 Mon Sep 17 00:00:00 2001
From: Steven Nguyen
Date: Mon, 6 May 2024 17:43:34 -0700
Subject: [PATCH 050/138] feat(auth): ensure user isn't kicked out after
enabling MFA
User's were kicked out and forced to verify their session after enabling
MFA if they already had factors enabled. This change ensures that they
are not kicked out of their current session after MFA is enabled by
adding all relevant factors to the session.
---
app/controllers/api/account.php | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php
index 500b0842ab..b57b7cb891 100644
--- a/app/controllers/api/account.php
+++ b/app/controllers/api/account.php
@@ -3495,14 +3495,33 @@ App::patch('/v1/account/mfa')
->inject('requestTimestamp')
->inject('response')
->inject('user')
+ ->inject('session')
->inject('dbForProject')
->inject('queueForEvents')
- ->action(function (bool $mfa, ?\DateTime $requestTimestamp, Response $response, Document $user, Database $dbForProject, Event $queueForEvents) {
+ ->action(function (bool $mfa, ?\DateTime $requestTimestamp, Response $response, Document $user, Document $session, Database $dbForProject, Event $queueForEvents) {
$user->setAttribute('mfa', $mfa);
$user = $dbForProject->withRequestTimestamp($requestTimestamp, fn () => $dbForProject->updateDocument('users', $user->getId(), $user));
+ if ($mfa) {
+ $factors = $session->getAttribute('factors', []);
+ $totp = TOTP::getAuthenticatorFromUser($user);
+ if ($totp !== null && $totp->getAttribute('verified', false)) {
+ $factors[] = Type::TOTP;
+ }
+ if ($user->getAttribute('email', false) && $user->getAttribute('emailVerification', false)) {
+ $factors[] = Type::EMAIL;
+ }
+ if ($user->getAttribute('phone', false) && $user->getAttribute('phoneVerification', false)) {
+ $factors[] = Type::PHONE;
+ }
+ $factors = \array_unique($factors);
+
+ $session->setAttribute('factors', $factors);
+ $dbForProject->updateDocument('sessions', $session->getId(), $session);
+ }
+
$queueForEvents->setParam('userId', $user->getId());
$response->dynamic($user, Response::MODEL_ACCOUNT);
From 5b5505cf97fe12cc35df38962724245d7e86068a Mon Sep 17 00:00:00 2001
From: Steven Nguyen
Date: Mon, 6 May 2024 17:48:44 -0700
Subject: [PATCH 051/138] fix(auth): ensure session factors don't contain
duplicates
---
app/controllers/api/account.php | 27 ++++++++++++++++-----------
1 file changed, 16 insertions(+), 11 deletions(-)
diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php
index b57b7cb891..8c0f25be09 100644
--- a/app/controllers/api/account.php
+++ b/app/controllers/api/account.php
@@ -3652,10 +3652,10 @@ App::put('/v1/account/mfa/authenticators/:type')
->param('otp', '', new Text(256), 'Valid verification token.')
->inject('response')
->inject('user')
- ->inject('project')
+ ->inject('session')
->inject('dbForProject')
->inject('queueForEvents')
- ->action(function (string $type, string $otp, Response $response, Document $user, Document $project, Database $dbForProject, Event $queueForEvents) {
+ ->action(function (string $type, string $otp, Response $response, Document $user, Document $session, Database $dbForProject, Event $queueForEvents) {
$authenticator = (match ($type) {
Type::TOTP => TOTP::getAuthenticatorFromUser($user),
@@ -3684,9 +3684,12 @@ App::put('/v1/account/mfa/authenticators/:type')
$dbForProject->updateDocument('authenticators', $authenticator->getId(), $authenticator);
$dbForProject->purgeCachedDocument('users', $user->getId());
- $sessionId = Auth::sessionVerify($user->getAttribute('sessions', []), Auth::$secret);
- $session = $dbForProject->getDocument('sessions', $sessionId);
- $dbForProject->updateDocument('sessions', $sessionId, $session->setAttribute('factors', $type, Document::SET_TYPE_APPEND));
+ $factors = $session->getAttribute('factors', []);
+ $factors[] = $type;
+ $factors = \array_unique($factors);
+
+ $session->setAttribute('factors', $factors);
+ $dbForProject->updateDocument('sessions', $session->getId(), $session);
$queueForEvents->setParam('userId', $user->getId());
@@ -4075,9 +4078,10 @@ App::put('/v1/account/mfa/challenge')
->inject('project')
->inject('response')
->inject('user')
+ ->inject('session')
->inject('dbForProject')
->inject('queueForEvents')
- ->action(function (string $challengeId, string $otp, Document $project, Response $response, Document $user, Database $dbForProject, Event $queueForEvents) {
+ ->action(function (string $challengeId, string $otp, Document $project, Response $response, Document $user, Document $session, Database $dbForProject, Event $queueForEvents) {
$challenge = $dbForProject->getDocument('challenges', $challengeId);
@@ -4123,14 +4127,15 @@ App::put('/v1/account/mfa/challenge')
$dbForProject->deleteDocument('challenges', $challengeId);
$dbForProject->purgeCachedDocument('users', $user->getId());
- $sessionId = Auth::sessionVerify($user->getAttribute('sessions', []), Auth::$secret);
- $session = $dbForProject->getDocument('sessions', $sessionId);
+ $factors = $session->getAttribute('factors', []);
+ $factors[] = $type;
+ $factors = \array_unique($factors);
- $session = $session
- ->setAttribute('factors', $type, Document::SET_TYPE_APPEND)
+ $session
+ ->setAttribute('factors', $factors)
->setAttribute('mfaUpdatedAt', DateTime::now());
- $dbForProject->updateDocument('sessions', $sessionId, $session);
+ $dbForProject->updateDocument('sessions', $session->getId(), $session);
$queueForEvents
->setParam('userId', $user->getId())
From fabe6921b49e6b21287ea21d2601585aa320c77d Mon Sep 17 00:00:00 2001
From: Steven Nguyen
Date: Mon, 6 May 2024 18:25:38 -0700
Subject: [PATCH 052/138] fix(auth): Fix MFA email verification code font
The font family was set to Inter without any fallback and since the
Inter isn't available in emails, the font rendered the default font,
Times New Roman. This commit adds a fallback font to the font-family
ensuring an sans-serif font like Inter is used.
---
app/config/locale/templates/email-mfa-challenge.tpl | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/config/locale/templates/email-mfa-challenge.tpl b/app/config/locale/templates/email-mfa-challenge.tpl
index cf09448ca5..e3cb6b444d 100644
--- a/app/config/locale/templates/email-mfa-challenge.tpl
+++ b/app/config/locale/templates/email-mfa-challenge.tpl
@@ -5,7 +5,7 @@
From 20bf989dcae974608a95b7dc83d3145abb8b7116 Mon Sep 17 00:00:00 2001
From: Bradley Schofield
Date: Tue, 7 May 2024 10:46:15 +0900
Subject: [PATCH 053/138] Improve container naming conventions
---
CONTRIBUTING.md | 12 ++++++++++--
docker-compose.yml | 10 +++++-----
2 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 529f6103d1..ca284ad26d 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -148,6 +148,14 @@ Learn more at our [Technology Stack](#technology-stack) section.
- [Microservices vs Monolithic](https://www.mulesoft.com/resources/api/microservices-vs-monolithic#:~:text=Microservices%20architecture%20vs%20monolithic%20architecture&text=A%20monolithic%20application%20is%20built%20as%20a%20single%20unit.&text=To%20make%20any%20alterations%20to,formally%20with%20business%2Doriented%20APIs.)
- [MVVM](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel) - Appwrite console architecture
+##### Container Namespace Conventions
+To keep our services easy to understand within Docker we follow a naming convention for all our containers depending on it's intended use.
+
+`appwrite-worker-X` - Workers (`src/Appwrite/Platform/Workers/*`)
+`appwrite-task-X` - Tasks (`src/Appwrite/Platform/Tasks/*`)
+
+Other containes should be named the same as their service, for example `redis` should just be called `redis`.
+
##### Security
- [Appwrite Auth and ACL](https://github.com/appwrite/appwrite/blob/master/docs/specs/authentication.drawio.svg)
@@ -344,9 +352,9 @@ Things to remember when releasing SDKs:
## Debug
-Appwrite uses [XDebug](https://github.com/xdebug/xdebug) debugger, which can be made available during build of Appwrite. You can connect to the debugger using VS Code's [PHP Debug](https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-debug) extension.
+Appwrite uses [XDebug](https://github.com/xdebug/xdebug) debugger, which can be made available during build of Appwrite. You can connect to the debugger using VS Code's [PHP Debug](https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-debug) extension.
-If you are in PHP Storm you don't need any plugin. Below are the settings required for remote debugger connection:
+If you are in PHP Storm you don't need any plugin. Below are the settings required for remote debugger connection:
1. Set **DEBUG** build arg in **appwrite** service in **docker-compose.yml** file.
2. If needed edit the **dev/xdebug.ini** file to your needs.
diff --git a/docker-compose.yml b/docker-compose.yml
index d270074412..b98152c288 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -189,7 +189,7 @@ services:
- _APP_MESSAGE_PUSH_TEST_DSN
- _APP_CONSOLE_COUNTRIES_DENYLIST
- appwrite-realtime:
+ appwrite-task-realtime:
entrypoint: realtime
<<: *x-logging
container_name: appwrite-realtime
@@ -627,7 +627,7 @@ services:
- _APP_MIGRATIONS_FIREBASE_CLIENT_ID
- _APP_MIGRATIONS_FIREBASE_CLIENT_SECRET
- appwrite-maintenance:
+ appwrite-task-maintenance:
entrypoint: maintenance
<<: *x-logging
container_name: appwrite-maintenance
@@ -726,7 +726,7 @@ services:
- _APP_LOGGING_CONFIG
- _APP_USAGE_AGGREGATION_INTERVAL
- appwrite-scheduler-functions:
+ appwrite-task-scheduler-functions:
entrypoint: schedule-functions
<<: *x-logging
container_name: appwrite-scheduler-functions
@@ -753,7 +753,7 @@ services:
- _APP_DB_USER
- _APP_DB_PASS
- appwrite-scheduler-messages:
+ appwrite-task-scheduler-messages:
entrypoint: schedule-messages
<<: *x-logging
container_name: appwrite-scheduler-messages
@@ -780,7 +780,7 @@ services:
- _APP_DB_USER
- _APP_DB_PASS
- appwrite-assistant:
+ appwrite-task-assistant:
container_name: appwrite-assistant
image: appwrite/assistant:0.4.0
networks:
From 08bf5aace4de6d3a9d2c2920b6e19b119ff52ac3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matej=20Ba=C4=8Do?=
Date: Tue, 7 May 2024 09:01:57 +0000
Subject: [PATCH 054/138] Mark email verified after email OTP
---
app/controllers/api/account.php | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php
index 90a35ede78..6190cec905 100644
--- a/app/controllers/api/account.php
+++ b/app/controllers/api/account.php
@@ -123,7 +123,8 @@ $createSession = function (string $userId, string $secret, Request $request, Res
Authorization::skip(fn () => $dbForProject->deleteDocument('tokens', $verifiedToken->getId()));
$dbForProject->purgeCachedDocument('users', $user->getId());
- if ($verifiedToken->getAttribute('type') === Auth::TOKEN_TYPE_MAGIC_URL) {
+ // Magic URL + Email OTP
+ if ($verifiedToken->getAttribute('type') === Auth::TOKEN_TYPE_MAGIC_URL || $verifiedToken->getAttribute('type') === Auth::TOKEN_TYPE_EMAIL) {
$user->setAttribute('emailVerification', true);
}
From 4c6f01ad6835e675236e5ef98502e5ba626506cc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matej=20Ba=C4=8Do?=
Date: Tue, 7 May 2024 09:05:54 +0000
Subject: [PATCH 055/138] Update tests
---
tests/e2e/Services/Account/AccountBase.php | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tests/e2e/Services/Account/AccountBase.php b/tests/e2e/Services/Account/AccountBase.php
index d61f44ca1b..2d72625121 100644
--- a/tests/e2e/Services/Account/AccountBase.php
+++ b/tests/e2e/Services/Account/AccountBase.php
@@ -202,6 +202,8 @@ trait AccountBase
$this->assertEquals(200, $response['headers']['status-code']);
$this->assertEquals($userId, $response['body']['$id']);
+ $this->assertEquals($userId, $response['body']['$id']);
+ $this->assertTrue($response['body']['emailVerification']);
$response = $this->client->call(Client::METHOD_POST, '/account/sessions/token', array_merge([
'origin' => 'http://localhost',
From 2962fbf7d791f24fd4ac66b8f3a93ffc2bcfd4d9 Mon Sep 17 00:00:00 2001
From: shimon
Date: Tue, 7 May 2024 20:12:58 +0300
Subject: [PATCH 056/138] adding new usage metric
---
CONTRIBUTING.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 2cc4a7cd6a..438d0da2c3 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -360,7 +360,7 @@ const METRIC_DEPLOYMENTS_STORAGE = 'deployments.storage';
**API**
-In the database listener, add to an existing or create a new switch case. Add a call to the usage worker with your new metric const like so:
+On file app/controllers/shared/api.php in database listener, add to an existing or create a new switch case. Add a call to the usage worker with your new metric const like so:
```php
case $document->getCollection() === 'teams':
From b8a2de84daebb9fe2cf94856abc0658550238743 Mon Sep 17 00:00:00 2001
From: Shimon Newman
Date: Tue, 7 May 2024 20:57:42 +0300
Subject: [PATCH 057/138] Update CONTRIBUTING.md
Co-authored-by: Christy Jacob
---
CONTRIBUTING.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 438d0da2c3..b4b1f32e64 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -336,7 +336,7 @@ These are the current metrics we collect usage stats for:
| network.inbound | Sum of network inbound traffic per project |
| network.outbound | Sum of network outbound traffic per project |
-* The curly brackets in the metric name act as placeholders and will be replaced with a value.
+> Note: The curly brackets in the metric name represents a template and is replaced with a value when the metric is processed.
Metrics are collected into 3 scopes: Daily, monthly, and infinity. Adding new usage metrics to aggregate usage stats is simple but depends on whether you want to collect the statistics via API or background worker. Here are the steps needed for both cases:
From d87df007075e6774e710792d49c0211230f563fb Mon Sep 17 00:00:00 2001
From: Shimon Newman
Date: Tue, 7 May 2024 20:57:54 +0300
Subject: [PATCH 058/138] Update CONTRIBUTING.md
Co-authored-by: Christy Jacob
---
CONTRIBUTING.md | 1 -
1 file changed, 1 deletion(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index b4b1f32e64..f2fb6b0683 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -342,7 +342,6 @@ Metrics are collected into 3 scopes: Daily, monthly, and infinity. Adding new us
For both cases, add a const variable in `app/init.php` under the usage metrics list:
-* The curly brackets in the metric name acts as a placeholder and will be replaced with a value.
metrics are collected to 3 scopes :
Daily, monthly, an infinity.
From 7430cb48d052070efe249f678b84a90d7fe12938 Mon Sep 17 00:00:00 2001
From: Shimon Newman
Date: Tue, 7 May 2024 20:58:04 +0300
Subject: [PATCH 059/138] Update CONTRIBUTING.md
Co-authored-by: Christy Jacob
---
CONTRIBUTING.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index f2fb6b0683..84fb340463 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -356,6 +356,7 @@ const METRIC_FUNCTIONS = 'functions';
const METRIC_DEPLOYMENTS = 'deployments';
const METRIC_DEPLOYMENTS_STORAGE = 'deployments.storage';
```
+Next follow the appropriate steps below depending on whether you're adding the metric to the API or the worker.
**API**
From ad5c526ca0853e9c872494cfe8556bf4b7a96364 Mon Sep 17 00:00:00 2001
From: Shimon Newman
Date: Tue, 7 May 2024 20:58:11 +0300
Subject: [PATCH 060/138] Update CONTRIBUTING.md
Co-authored-by: Christy Jacob
---
CONTRIBUTING.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 84fb340463..dee13c4049 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -360,7 +360,7 @@ Next follow the appropriate steps below depending on whether you're adding the m
**API**
-On file app/controllers/shared/api.php in database listener, add to an existing or create a new switch case. Add a call to the usage worker with your new metric const like so:
+On file `app/controllers/shared/api.php` in database listener, add to an existing or create a new switch case. Add a call to the usage worker with your new metric const like so:
```php
case $document->getCollection() === 'teams':
From ddda24e34d03620b86c389890fe64abc3d5106c4 Mon Sep 17 00:00:00 2001
From: Shimon Newman
Date: Tue, 7 May 2024 20:59:12 +0300
Subject: [PATCH 061/138] Update CONTRIBUTING.md
Co-authored-by: Christy Jacob
---
CONTRIBUTING.md | 1 -
1 file changed, 1 deletion(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index dee13c4049..c895a6c666 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -349,7 +349,6 @@ Adding new usage metrics in order to aggregate usage stats is very simple but v
the statistics(API or via background worker).
Here are the steps needs to be taken in both cases:
-For both cases you need to add a const variable in app/init.php under the usage metrics list.
```php
// Usage metrics
const METRIC_FUNCTIONS = 'functions';
From 243bdeb29c9c6f57e60840e5d48d06d73b13b972 Mon Sep 17 00:00:00 2001
From: Shimon Newman
Date: Tue, 7 May 2024 20:59:19 +0300
Subject: [PATCH 062/138] Update CONTRIBUTING.md
Co-authored-by: Christy Jacob
---
CONTRIBUTING.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index c895a6c666..bb828b1583 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -367,7 +367,7 @@ On file `app/controllers/shared/api.php` in database listener, add to an exist
->addMetric(METRIC_TEAMS, $value); // per project
break;
```
-There are cases when you need to handle metric the is a parent entity, like buckets.
+There are cases when you need to handle metric that has a parent entity, like buckets.
Files are linked to a parent bucket, you should verify you remove the files stats when you delete a bucket.
In that case you need also to handle children removal using addReduce() method call.
From 508691a9a6ab1e3669266a190fd7d13325151e8d Mon Sep 17 00:00:00 2001
From: Shimon Newman
Date: Tue, 7 May 2024 20:59:31 +0300
Subject: [PATCH 063/138] Update CONTRIBUTING.md
Co-authored-by: Christy Jacob
---
CONTRIBUTING.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index bb828b1583..f764cc49c5 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -382,7 +382,7 @@ In that case you need also to handle children removal using addReduce() method c
break;
```
-On top of that also adding logic on the usage worker located in /src/Appwrite/Platform/Workers/Usage.php, on the reduce method.
+In addition, you also need to add some logic to the `reduce()` method of the Usage worker located in `/src/Appwrite/Platform/Workers/Usage.php`.
```php
private function reduce(Document $project, Document $document, array &$metrics, callable $getProjectDB): void
```
From 8559753978bdb720a1eb250bd8f7888961cf4c86 Mon Sep 17 00:00:00 2001
From: shimon
Date: Tue, 7 May 2024 21:16:18 +0300
Subject: [PATCH 064/138] adding new usage metric
---
CONTRIBUTING.md | 100 ++++++++++++++++++++++++++----------------------
1 file changed, 54 insertions(+), 46 deletions(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index f764cc49c5..7a642bc2db 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -306,48 +306,42 @@ This is also important for the Appwrite lead developers to be able to provide te
These are the current metrics we collect usage stats for:
| Metric | Description |
-|--------|---------------------------------------------------|
-| teams | Total number of teams per project |
-| users | Total number of users per project |
+|--------|-------------------------------------------------|
+| teams | Total number of teams per project |
+| users | Total number of users per project|
| executions | Total number of executions per project |
| databases | Total number of databases per project |
-| collections | Total number of collections per project |
-| {databaseInternalId}.collections | Total number of collections per database |
+| collections | Total number of collections per project |
+| {databaseInternalId}.collections | Total number of collections per database|
| documents | Total number of documents per project |
-| {databaseInternalId}.{collectionInternalId}.documents | Total number of documents per collection |
+| {databaseInternalId}.{collectionInternalId}.documents | Total number of documents per collection |
| buckets | Total number of buckets per project |
-| files | Total number of files per project |
-| files.storage | Sum of files storage per project (in bytes) |
-| {bucketInternalId}.files.storage | Sum of files.storage per bucket |
+| files | Total number of files per project |
+| {bucketInternalId}.files.storage | Sum of files.storage per bucket (in bytes) |
| functions | Total number of functions per project |
| deployments | Total number of deployments per project |
-| deployments.storage | Sum of deployments storage per project (in bytes) |
| builds | Total number of builds per project |
+| {resourceType}.{resourceInternalId}.deployments | Total number of deployments per function |
+| executions | Total number of executions per project |
+| {functionInternalId}.executions | Total number of executions per function |
+| files.storage | Sum of files storage per project (in bytes) |
+| deployments.storage | Sum of deployments storage per project (in bytes) |
+| {resourceType}.{resourceInternalId}.deployments.storage | Sum of deployments storage per function (in bytes) |
| builds.storage | Sum of builds storage per project (in bytes) |
| builds.compute | Sum of compute duration per project (in seconds) |
-| {functionInternalId}.builds.storage | Sum of builds storage per function |
+| {functionInternalId}.builds.storage | Sum of builds storage per function (in bytes) |
| {functionInternalId}.builds.compute | Sum of compute duration per function (in seconds) |
-| {resourceType}.{resourceInternalId}.deployments | Total number of deployments per function |
-| {resourceType}.{resourceInternalId}.deployments.storage | Sum of deployments storage per function |
-| executions | Total number of executions per project |
-| executions.compute | Sum of compute duration per project (in seconds) |
-| {functionInternalId}.executions | Total number of executions per function |
| network.requests | Total number of network requests per project |
+| executions.compute | Sum of compute duration per project (in seconds) |
| network.inbound | Sum of network inbound traffic per project |
| network.outbound | Sum of network outbound traffic per project |
> Note: The curly brackets in the metric name represents a template and is replaced with a value when the metric is processed.
-Metrics are collected into 3 scopes: Daily, monthly, and infinity. Adding new usage metrics to aggregate usage stats is simple but depends on whether you want to collect the statistics via API or background worker. Here are the steps needed for both cases:
-
-For both cases, add a const variable in `app/init.php` under the usage metrics list:
-
-
-metrics are collected to 3 scopes :
-Daily, monthly, an infinity.
-Adding new usage metrics in order to aggregate usage stats is very simple but very much depends on where do you want to collect
-the statistics(API or via background worker).
-Here are the steps needs to be taken in both cases:
+Metrics are collected within 3 scopes Daily, monthly, an infinity.
+Adding new usage metric in order to aggregate usage stats is very simple, but very much dependent on where do you want to collect
+statistics ,via API or via background worker.
+For both cases you will need to add a const variable in `app/init.php` under the usage metrics list.
```php
// Usage metrics
@@ -355,6 +349,7 @@ const METRIC_FUNCTIONS = 'functions';
const METRIC_DEPLOYMENTS = 'deployments';
const METRIC_DEPLOYMENTS_STORAGE = 'deployments.storage';
```
+
Next follow the appropriate steps below depending on whether you're adding the metric to the API or the worker.
**API**
@@ -372,21 +367,33 @@ Files are linked to a parent bucket, you should verify you remove the files stat
In that case you need also to handle children removal using addReduce() method call.
```php
- case $document->getCollection() === 'functions':
- $queueForUsage
- ->addMetric(METRIC_FUNCTIONS, $value);
- if ($event === Database::EVENT_DOCUMENT_DELETE) {
- $queueForUsage
- ->addReduce($document);
- }
- break;
+ case $document->getCollection() === 'buckets':
+ $files = $dbForProject->getDocument('stats', md5(self::INFINITY_PERIOD . str_replace('{bucketInternalId}', $document->getInternalId(), METRIC_BUCKET_ID_FILES)));
+ $storage = $dbForProject->getDocument('stats', md5(self::INFINITY_PERIOD . str_replace('{bucketInternalId}', $document->getInternalId(), METRIC_BUCKET_ID_FILES_STORAGE)));
+
+ if (!empty($files['value'])) {
+ $metrics[] = [
+ 'key' => METRIC_FILES,
+ 'value' => ($files['value'] * -1),
+ ];
+ }
+
+ if (!empty($storage['value'])) {
+ $metrics[] = [
+ 'key' => METRIC_FILES_STORAGE,
+ 'value' => ($storage['value'] * -1),
+ ];
+ }
+ break;
```
In addition, you also need to add some logic to the `reduce()` method of the Usage worker located in `/src/Appwrite/Platform/Workers/Usage.php`.
```php
-private function reduce(Document $project, Document $document, array &$metrics, callable $getProjectDB): void
-```
+private function reduce(Document $project, Document $document, array &$metrics, callable $getProjectDB): void
+{
+}
+```
**Background worker**
@@ -397,16 +404,17 @@ On that case you need to inject the usage queue to the desired worker
*/
public function __construct()
{
-$this
-->desc('Functions worker')
-->groups(['functions'])
-->inject('message')
-->inject('dbForProject')
-->inject('queueForFunctions')
-->inject('queueForEvents')
-->inject('queueForUsage')
-->inject('log')
-->callback(fn (Message $message, Database $dbForProject, Func $queueForFunctions, Event $queueForEvents, Usage $queueForUsage, Log $log) => $this->action($message, $dbForProject, $queueForFunctions, $queueForEvents, $queueForUsage, $log));
+ $this
+ ->desc('Functions worker')
+ ->groups(['functions'])
+ ->inject('message')
+ ->inject('dbForProject')
+ ->inject('queueForFunctions')
+ ->inject('queueForEvents')
+ ->inject('queueForUsage')
+ ->inject('log')
+ ->callback(fn (Message $message, Database $dbForProject, Func $queueForFunctions, Event $queueForEvents, Usage $queueForUsage, Log $log) => $this->action($message, $dbForProject, $queueForFunctions, $queueForEvents, $queueForUsage, $log));
+}
```
and then trigger the queue with the new metric like so:
From b0912889c88870114c557011e62642d97005881b Mon Sep 17 00:00:00 2001
From: shimon
Date: Tue, 7 May 2024 21:22:17 +0300
Subject: [PATCH 065/138] adding new usage metric
---
CONTRIBUTING.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 7a642bc2db..118f5a83d5 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -333,8 +333,8 @@ These are the current metrics we collect usage stats for:
| {functionInternalId}.builds.compute | Sum of compute duration per function (in seconds) |
| network.requests | Total number of network requests per project |
| executions.compute | Sum of compute duration per project (in seconds) |
-| network.inbound | Sum of network inbound traffic per project |
-| network.outbound | Sum of network outbound traffic per project |
+| network.inbound | Sum of network inbound traffic per project (in bytes)|
+| network.outbound | Sum of network outbound traffic per project (in bytes)|
> Note: The curly brackets in the metric name represents a template and is replaced with a value when the metric is processed.
@@ -354,7 +354,7 @@ Next follow the appropriate steps below depending on whether you're adding the m
**API**
-On file `app/controllers/shared/api.php` in database listener, add to an existing or create a new switch case. Add a call to the usage worker with your new metric const like so:
+In file `app/controllers/shared/api.php` On the database listener, add to an existing or create a new switch case. Add a call to the usage worker with your new metric const like so:
```php
case $document->getCollection() === 'teams':
@@ -397,7 +397,7 @@ private function reduce(Document $project, Document $document, array &$metrics,
**Background worker**
-On that case you need to inject the usage queue to the desired worker
+You need to inject the usage queue in the desired worker on the constructor method
```php
/**
* @throws Exception
From 415b70585a3a458dc935306b0613da3c34ff18e3 Mon Sep 17 00:00:00 2001
From: shimon
Date: Wed, 8 May 2024 10:01:24 +0300
Subject: [PATCH 066/138] adding new usage metric
---
CONTRIBUTING.md | 26 +++++++++++++++++---------
1 file changed, 17 insertions(+), 9 deletions(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 118f5a83d5..709d01ac52 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -366,8 +366,24 @@ There are cases when you need to handle metric that has a parent entity, like bu
Files are linked to a parent bucket, you should verify you remove the files stats when you delete a bucket.
In that case you need also to handle children removal using addReduce() method call.
+
```php
- case $document->getCollection() === 'buckets':
+
+ case $document->getCollection() === 'buckets': //buckets
+ $queueForUsage
+ ->addMetric(METRIC_BUCKETS, $value); // per project
+ if ($event === Database::EVENT_DOCUMENT_DELETE) {
+ $queueForUsage
+ ->addReduce($document);
+ }
+ break;
+
+```
+
+In addition, you will also need to add some logic to the `reduce()` method of the Usage worker located in `/src/Appwrite/Platform/Workers/Usage.php`, like so:
+
+```php
+case $document->getCollection() === 'buckets':
$files = $dbForProject->getDocument('stats', md5(self::INFINITY_PERIOD . str_replace('{bucketInternalId}', $document->getInternalId(), METRIC_BUCKET_ID_FILES)));
$storage = $dbForProject->getDocument('stats', md5(self::INFINITY_PERIOD . str_replace('{bucketInternalId}', $document->getInternalId(), METRIC_BUCKET_ID_FILES_STORAGE)));
@@ -387,14 +403,6 @@ In that case you need also to handle children removal using addReduce() method c
break;
```
-In addition, you also need to add some logic to the `reduce()` method of the Usage worker located in `/src/Appwrite/Platform/Workers/Usage.php`.
-```php
-private function reduce(Document $project, Document $document, array &$metrics, callable $getProjectDB): void
-{
-
-}
-```
-
**Background worker**
You need to inject the usage queue in the desired worker on the constructor method
From 88e67c8d583fd68104f8fb31a2889d813a52e66f Mon Sep 17 00:00:00 2001
From: shimon
Date: Wed, 8 May 2024 14:23:11 +0300
Subject: [PATCH 067/138] getCountryCode
---
composer.lock | 734 +++++++++++++++-----
src/Appwrite/Platform/Workers/Messaging.php | 25 +-
2 files changed, 555 insertions(+), 204 deletions(-)
diff --git a/composer.lock b/composer.lock
index be937113ae..50244e04e0 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "a5ab7c998a333771c26055dab05a236c",
+ "content-hash": "5d6ebed245c1b7f21f1367155180ad27",
"packages": [
{
"name": "adhocore/jwt",
@@ -162,6 +162,12 @@
"url": "https://github.com/appwrite/runtimes.git",
"reference": "ba24c3a163f1a1da6cd355db92def508d05e59f7"
},
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/appwrite/runtimes/zipball/ba24c3a163f1a1da6cd355db92def508d05e59f7",
+ "reference": "ba24c3a163f1a1da6cd355db92def508d05e59f7",
+ "shasum": ""
+ },
"require": {
"php": ">=8.0",
"utopia-php/system": "0.8.*"
@@ -176,6 +182,7 @@
"Appwrite\\Runtimes\\": "src/Runtimes"
}
},
+ "notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
@@ -195,8 +202,79 @@
"php",
"runtimes"
],
+ "support": {
+ "issues": "https://github.com/appwrite/runtimes/issues",
+ "source": "https://github.com/appwrite/runtimes/tree/0.13.5"
+ },
"time": "2024-04-01T10:35:02+00:00"
},
+ {
+ "name": "beberlei/assert",
+ "version": "v3.3.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/beberlei/assert.git",
+ "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/beberlei/assert/zipball/cb70015c04be1baee6f5f5c953703347c0ac1655",
+ "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "ext-simplexml": "*",
+ "php": "^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "*",
+ "phpstan/phpstan": "*",
+ "phpunit/phpunit": ">=6.0.0",
+ "yoast/phpunit-polyfills": "^0.1.0"
+ },
+ "suggest": {
+ "ext-intl": "Needed to allow Assertion::count(), Assertion::isCountable(), Assertion::minCount(), and Assertion::maxCount() to operate on ResourceBundles"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "lib/Assert/functions.php"
+ ],
+ "psr-4": {
+ "Assert\\": "lib/Assert"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de",
+ "role": "Lead Developer"
+ },
+ {
+ "name": "Richard Quadling",
+ "email": "rquadling@gmail.com",
+ "role": "Collaborator"
+ }
+ ],
+ "description": "Thin assertion library for input validation in business models.",
+ "keywords": [
+ "assert",
+ "assertion",
+ "validation"
+ ],
+ "support": {
+ "issues": "https://github.com/beberlei/assert/issues",
+ "source": "https://github.com/beberlei/assert/tree/v3.3.2"
+ },
+ "time": "2021-12-16T21:41:27+00:00"
+ },
{
"name": "chillerlan/php-qrcode",
"version": "4.3.4",
@@ -404,20 +482,20 @@
},
{
"name": "giggsey/libphonenumber-for-php-lite",
- "version": "8.13.30",
+ "version": "8.13.36",
"source": {
"type": "git",
"url": "https://github.com/giggsey/libphonenumber-for-php-lite.git",
- "reference": "7b205dac7d90a791f7bbae77f2ced2c90b0c5df1"
+ "reference": "144bbe70d67664b5245910a475c7190ff140ab4b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php-lite/zipball/7b205dac7d90a791f7bbae77f2ced2c90b0c5df1",
- "reference": "7b205dac7d90a791f7bbae77f2ced2c90b0c5df1",
+ "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php-lite/zipball/144bbe70d67664b5245910a475c7190ff140ab4b",
+ "reference": "144bbe70d67664b5245910a475c7190ff140ab4b",
"shasum": ""
},
"require": {
- "php": "^8.0",
+ "php": "^8.1",
"symfony/polyfill-mbstring": "^1.17"
},
"conflict": {
@@ -426,16 +504,17 @@
"require-dev": {
"ext-dom": "*",
"friendsofphp/php-cs-fixer": "^3.12",
- "infection/infection": "^0.26.16",
+ "infection/infection": "^0.28",
"pear/pear-core-minimal": "^1.10.11",
"pear/pear_exception": "^1.0.2",
- "pear/versioncontrol_git": "^0.5",
+ "pear/versioncontrol_git": "^0.7",
"phing/phing": "^2.17.4",
"phpstan/extension-installer": "^1.2",
"phpstan/phpstan": "^1.8",
"phpstan/phpstan-phpunit": "^1.2",
- "phpunit/phpunit": "^9.5.26",
- "symfony/console": "^6.0"
+ "phpunit/phpunit": "^10.5",
+ "symfony/console": "^6.0",
+ "symfony/var-exporter": "^6.0"
},
"suggest": {
"giggsey/libphonenumber-for-php": "Use libphonenumber-for-php for geocoding, carriers, timezones and matching"
@@ -482,7 +561,7 @@
"issues": "https://github.com/giggsey/libphonenumber-for-php-lite/issues",
"source": "https://github.com/giggsey/libphonenumber-for-php-lite"
},
- "time": "2024-02-09T12:16:33+00:00"
+ "time": "2024-05-03T06:31:11+00:00"
},
{
"name": "jean85/pretty-package-versions",
@@ -545,34 +624,39 @@
},
{
"name": "league/csv",
- "version": "9.7.1",
+ "version": "9.14.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/csv.git",
- "reference": "0ec57e8264ec92565974ead0d1724cf1026e10c1"
+ "reference": "34bf0df7340b60824b9449b5c526fcc3325070d5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/csv/zipball/0ec57e8264ec92565974ead0d1724cf1026e10c1",
- "reference": "0ec57e8264ec92565974ead0d1724cf1026e10c1",
+ "url": "https://api.github.com/repos/thephpleague/csv/zipball/34bf0df7340b60824b9449b5c526fcc3325070d5",
+ "reference": "34bf0df7340b60824b9449b5c526fcc3325070d5",
"shasum": ""
},
"require": {
+ "ext-filter": "*",
"ext-json": "*",
"ext-mbstring": "*",
- "php": "^7.3 || ^8.0"
+ "php": "^8.1.2"
},
"require-dev": {
- "ext-curl": "*",
+ "doctrine/collections": "^2.1.4",
"ext-dom": "*",
- "friendsofphp/php-cs-fixer": "^2.16",
- "phpstan/phpstan": "^0.12.0",
- "phpstan/phpstan-phpunit": "^0.12.0",
- "phpstan/phpstan-strict-rules": "^0.12.0",
- "phpunit/phpunit": "^9.5"
+ "ext-xdebug": "*",
+ "friendsofphp/php-cs-fixer": "^v3.22.0",
+ "phpbench/phpbench": "^1.2.15",
+ "phpstan/phpstan": "^1.10.50",
+ "phpstan/phpstan-deprecation-rules": "^1.1.4",
+ "phpstan/phpstan-phpunit": "^1.3.15",
+ "phpstan/phpstan-strict-rules": "^1.5.2",
+ "phpunit/phpunit": "^10.5.3",
+ "symfony/var-dumper": "^6.4.0"
},
"suggest": {
- "ext-dom": "Required to use the XMLConverter and or the HTMLConverter classes",
+ "ext-dom": "Required to use the XMLConverter and the HTMLConverter classes",
"ext-iconv": "Needed to ease transcoding CSV using iconv stream filters"
},
"type": "library",
@@ -602,7 +686,7 @@
}
],
"description": "CSV data manipulation made easy in PHP",
- "homepage": "http://csv.thephpleague.com",
+ "homepage": "https://csv.thephpleague.com",
"keywords": [
"convert",
"csv",
@@ -625,7 +709,7 @@
"type": "github"
}
],
- "time": "2021-04-17T16:32:08+00:00"
+ "time": "2023-12-29T07:34:53+00:00"
},
{
"name": "matomo/device-detector",
@@ -819,6 +903,73 @@
},
"time": "2019-09-10T13:16:29+00:00"
},
+ {
+ "name": "paragonie/constant_time_encoding",
+ "version": "v2.6.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/paragonie/constant_time_encoding.git",
+ "reference": "58c3f47f650c94ec05a151692652a868995d2938"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938",
+ "reference": "58c3f47f650c94ec05a151692652a868995d2938",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7|^8"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6|^7|^8|^9",
+ "vimeo/psalm": "^1|^2|^3|^4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "ParagonIE\\ConstantTime\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com",
+ "role": "Maintainer"
+ },
+ {
+ "name": "Steve 'Sc00bz' Thomas",
+ "email": "steve@tobtu.com",
+ "homepage": "https://www.tobtu.com",
+ "role": "Original Developer"
+ }
+ ],
+ "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
+ "keywords": [
+ "base16",
+ "base32",
+ "base32_decode",
+ "base32_encode",
+ "base64",
+ "base64_decode",
+ "base64_encode",
+ "bin2hex",
+ "encoding",
+ "hex",
+ "hex2bin",
+ "rfc4648"
+ ],
+ "support": {
+ "email": "info@paragonie.com",
+ "issues": "https://github.com/paragonie/constant_time_encoding/issues",
+ "source": "https://github.com/paragonie/constant_time_encoding"
+ },
+ "time": "2022-06-14T06:56:20+00:00"
+ },
{
"name": "phpmailer/phpmailer",
"version": "v6.9.1",
@@ -900,6 +1051,81 @@
],
"time": "2023-11-25T22:23:28+00:00"
},
+ {
+ "name": "spomky-labs/otphp",
+ "version": "v10.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Spomky-Labs/otphp.git",
+ "reference": "9784d9f7c790eed26e102d6c78f12c754036c366"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/9784d9f7c790eed26e102d6c78f12c754036c366",
+ "reference": "9784d9f7c790eed26e102d6c78f12c754036c366",
+ "shasum": ""
+ },
+ "require": {
+ "beberlei/assert": "^3.0",
+ "ext-mbstring": "*",
+ "paragonie/constant_time_encoding": "^2.0",
+ "php": "^7.2|^8.0",
+ "thecodingmachine/safe": "^0.1.14|^1.0|^2.0"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.0",
+ "phpstan/phpstan": "^0.12",
+ "phpstan/phpstan-beberlei-assert": "^0.12",
+ "phpstan/phpstan-deprecation-rules": "^0.12",
+ "phpstan/phpstan-phpunit": "^0.12",
+ "phpstan/phpstan-strict-rules": "^0.12",
+ "phpunit/phpunit": "^8.0",
+ "thecodingmachine/phpstan-safe-rule": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "v10.0": "10.0.x-dev",
+ "v9.0": "9.0.x-dev",
+ "v8.3": "8.3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "OTPHP\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Florent Morselli",
+ "homepage": "https://github.com/Spomky"
+ },
+ {
+ "name": "All contributors",
+ "homepage": "https://github.com/Spomky-Labs/otphp/contributors"
+ }
+ ],
+ "description": "A PHP library for generating one time passwords according to RFC 4226 (HOTP Algorithm) and the RFC 6238 (TOTP Algorithm) and compatible with Google Authenticator",
+ "homepage": "https://github.com/Spomky-Labs/otphp",
+ "keywords": [
+ "FreeOTP",
+ "RFC 4226",
+ "RFC 6238",
+ "google authenticator",
+ "hotp",
+ "otp",
+ "totp"
+ ],
+ "support": {
+ "issues": "https://github.com/Spomky-Labs/otphp/issues",
+ "source": "https://github.com/Spomky-Labs/otphp/tree/v10.0.3"
+ },
+ "time": "2022-03-17T08:00:35+00:00"
+ },
{
"name": "symfony/polyfill-mbstring",
"version": "v1.29.0",
@@ -1061,24 +1287,163 @@
"time": "2024-01-29T20:11:03+00:00"
},
{
- "name": "utopia-php/abuse",
- "version": "0.33.0",
+ "name": "thecodingmachine/safe",
+ "version": "v2.5.0",
"source": {
"type": "git",
- "url": "https://github.com/utopia-php/abuse.git",
- "reference": "1ba8d5f2793885cbf779e3b5b9d886968af43d2c"
+ "url": "https://github.com/thecodingmachine/safe.git",
+ "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/abuse/zipball/1ba8d5f2793885cbf779e3b5b9d886968af43d2c",
- "reference": "1ba8d5f2793885cbf779e3b5b9d886968af43d2c",
+ "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/3115ecd6b4391662b4931daac4eba6b07a2ac1f0",
+ "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.5",
+ "phpunit/phpunit": "^9.5",
+ "squizlabs/php_codesniffer": "^3.2",
+ "thecodingmachine/phpstan-strict-rules": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "deprecated/apc.php",
+ "deprecated/array.php",
+ "deprecated/datetime.php",
+ "deprecated/libevent.php",
+ "deprecated/misc.php",
+ "deprecated/password.php",
+ "deprecated/mssql.php",
+ "deprecated/stats.php",
+ "deprecated/strings.php",
+ "lib/special_cases.php",
+ "deprecated/mysqli.php",
+ "generated/apache.php",
+ "generated/apcu.php",
+ "generated/array.php",
+ "generated/bzip2.php",
+ "generated/calendar.php",
+ "generated/classobj.php",
+ "generated/com.php",
+ "generated/cubrid.php",
+ "generated/curl.php",
+ "generated/datetime.php",
+ "generated/dir.php",
+ "generated/eio.php",
+ "generated/errorfunc.php",
+ "generated/exec.php",
+ "generated/fileinfo.php",
+ "generated/filesystem.php",
+ "generated/filter.php",
+ "generated/fpm.php",
+ "generated/ftp.php",
+ "generated/funchand.php",
+ "generated/gettext.php",
+ "generated/gmp.php",
+ "generated/gnupg.php",
+ "generated/hash.php",
+ "generated/ibase.php",
+ "generated/ibmDb2.php",
+ "generated/iconv.php",
+ "generated/image.php",
+ "generated/imap.php",
+ "generated/info.php",
+ "generated/inotify.php",
+ "generated/json.php",
+ "generated/ldap.php",
+ "generated/libxml.php",
+ "generated/lzf.php",
+ "generated/mailparse.php",
+ "generated/mbstring.php",
+ "generated/misc.php",
+ "generated/mysql.php",
+ "generated/network.php",
+ "generated/oci8.php",
+ "generated/opcache.php",
+ "generated/openssl.php",
+ "generated/outcontrol.php",
+ "generated/pcntl.php",
+ "generated/pcre.php",
+ "generated/pgsql.php",
+ "generated/posix.php",
+ "generated/ps.php",
+ "generated/pspell.php",
+ "generated/readline.php",
+ "generated/rpminfo.php",
+ "generated/rrd.php",
+ "generated/sem.php",
+ "generated/session.php",
+ "generated/shmop.php",
+ "generated/sockets.php",
+ "generated/sodium.php",
+ "generated/solr.php",
+ "generated/spl.php",
+ "generated/sqlsrv.php",
+ "generated/ssdeep.php",
+ "generated/ssh2.php",
+ "generated/stream.php",
+ "generated/strings.php",
+ "generated/swoole.php",
+ "generated/uodbc.php",
+ "generated/uopz.php",
+ "generated/url.php",
+ "generated/var.php",
+ "generated/xdiff.php",
+ "generated/xml.php",
+ "generated/xmlrpc.php",
+ "generated/yaml.php",
+ "generated/yaz.php",
+ "generated/zip.php",
+ "generated/zlib.php"
+ ],
+ "classmap": [
+ "lib/DateTime.php",
+ "lib/DateTimeImmutable.php",
+ "lib/Exceptions/",
+ "deprecated/Exceptions/",
+ "generated/Exceptions/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PHP core functions that throw exceptions instead of returning FALSE on error",
+ "support": {
+ "issues": "https://github.com/thecodingmachine/safe/issues",
+ "source": "https://github.com/thecodingmachine/safe/tree/v2.5.0"
+ },
+ "time": "2023-04-05T11:54:14+00:00"
+ },
+ {
+ "name": "utopia-php/abuse",
+ "version": "0.37.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/abuse.git",
+ "reference": "2de5c12886cbd516e511e559afdd9e615d871062"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/abuse/zipball/2de5c12886cbd516e511e559afdd9e615d871062",
+ "reference": "2de5c12886cbd516e511e559afdd9e615d871062",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-pdo": "*",
"php": ">=8.0",
- "utopia-php/database": "0.45.*"
+ "utopia-php/database": "0.49.*"
},
"require-dev": {
"laravel/pint": "1.5.*",
@@ -1105,9 +1470,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/abuse/issues",
- "source": "https://github.com/utopia-php/abuse/tree/0.33.0"
+ "source": "https://github.com/utopia-php/abuse/tree/0.37.0"
},
- "time": "2023-11-01T08:51:33+00:00"
+ "time": "2024-03-06T21:20:27+00:00"
},
{
"name": "utopia-php/analytics",
@@ -1157,21 +1522,21 @@
},
{
"name": "utopia-php/audit",
- "version": "0.35.0",
+ "version": "0.39.0",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/audit.git",
- "reference": "ed9366ef05556da040de7a8b570f4160c7d8ea4a"
+ "reference": "f0bc15012e05cc0b9dde012ab27d25f193768a2c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/audit/zipball/ed9366ef05556da040de7a8b570f4160c7d8ea4a",
- "reference": "ed9366ef05556da040de7a8b570f4160c7d8ea4a",
+ "url": "https://api.github.com/repos/utopia-php/audit/zipball/f0bc15012e05cc0b9dde012ab27d25f193768a2c",
+ "reference": "f0bc15012e05cc0b9dde012ab27d25f193768a2c",
"shasum": ""
},
"require": {
"php": ">=8.0",
- "utopia-php/database": "0.45.*"
+ "utopia-php/database": "0.49.*"
},
"require-dev": {
"laravel/pint": "1.5.*",
@@ -1198,9 +1563,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/audit/issues",
- "source": "https://github.com/utopia-php/audit/tree/0.35.0"
+ "source": "https://github.com/utopia-php/audit/tree/0.39.0"
},
- "time": "2023-11-01T08:51:29+00:00"
+ "time": "2024-03-06T21:20:37+00:00"
},
{
"name": "utopia-php/cache",
@@ -1354,16 +1719,16 @@
},
{
"name": "utopia-php/database",
- "version": "0.45.11",
+ "version": "0.49.7",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/database.git",
- "reference": "262bebfdfb25a37961c218afac0e647f7f23dbac"
+ "reference": "69b9cb52cc81a7f606ea7586f6c0af3394cc3601"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/database/zipball/262bebfdfb25a37961c218afac0e647f7f23dbac",
- "reference": "262bebfdfb25a37961c218afac0e647f7f23dbac",
+ "url": "https://api.github.com/repos/utopia-php/database/zipball/69b9cb52cc81a7f606ea7586f6c0af3394cc3601",
+ "reference": "69b9cb52cc81a7f606ea7586f6c0af3394cc3601",
"shasum": ""
},
"require": {
@@ -1404,9 +1769,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/database/issues",
- "source": "https://github.com/utopia-php/database/tree/0.45.11"
+ "source": "https://github.com/utopia-php/database/tree/0.49.7"
},
- "time": "2024-04-04T02:23:02+00:00"
+ "time": "2024-05-08T09:04:08+00:00"
},
{
"name": "utopia-php/domains",
@@ -1470,16 +1835,16 @@
},
{
"name": "utopia-php/dsn",
- "version": "0.1.0",
+ "version": "0.2.1",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/dsn.git",
- "reference": "17a5935eab1b89fb4b95600db50a1b6d5faa6cea"
+ "reference": "42ee37a3d1785100b2f69091c9d4affadb6846eb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/dsn/zipball/17a5935eab1b89fb4b95600db50a1b6d5faa6cea",
- "reference": "17a5935eab1b89fb4b95600db50a1b6d5faa6cea",
+ "url": "https://api.github.com/repos/utopia-php/dsn/zipball/42ee37a3d1785100b2f69091c9d4affadb6846eb",
+ "reference": "42ee37a3d1785100b2f69091c9d4affadb6846eb",
"shasum": ""
},
"require": {
@@ -1511,9 +1876,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/dsn/issues",
- "source": "https://github.com/utopia-php/dsn/tree/0.1.0"
+ "source": "https://github.com/utopia-php/dsn/tree/0.2.1"
},
- "time": "2022-10-26T10:06:20+00:00"
+ "time": "2024-05-07T02:01:25+00:00"
},
{
"name": "utopia-php/fetch",
@@ -1757,18 +2122,18 @@
"source": {
"type": "git",
"url": "https://github.com/utopia-php/messaging.git",
- "reference": "30ef3284c32f983d3a509c75804a34600391ca85"
+ "reference": "37108ef5aa8a242de32eda046c9fb8c067d0719e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/messaging/zipball/30ef3284c32f983d3a509c75804a34600391ca85",
- "reference": "30ef3284c32f983d3a509c75804a34600391ca85",
+ "url": "https://api.github.com/repos/utopia-php/messaging/zipball/37108ef5aa8a242de32eda046c9fb8c067d0719e",
+ "reference": "37108ef5aa8a242de32eda046c9fb8c067d0719e",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-openssl": "*",
- "giggsey/libphonenumber-for-php-lite": "8.13.30",
+ "giggsey/libphonenumber-for-php-lite": "8.13.36",
"php": ">=8.0.0",
"phpmailer/phpmailer": "6.9.1"
},
@@ -1800,7 +2165,7 @@
"issues": "https://github.com/utopia-php/messaging/issues",
"source": "https://github.com/utopia-php/messaging/tree/get-country-code"
},
- "time": "2024-04-07T14:54:54+00:00"
+ "time": "2024-05-08T10:17:54+00:00"
},
{
"name": "utopia-php/migration",
@@ -2011,16 +2376,16 @@
},
{
"name": "utopia-php/pools",
- "version": "0.4.2",
+ "version": "0.5.0",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/pools.git",
- "reference": "d2870ab74b31b7f4027799f082e85122154f8bed"
+ "reference": "6f716a213a08db95eda1b5dddfa90983c1834817"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/pools/zipball/d2870ab74b31b7f4027799f082e85122154f8bed",
- "reference": "d2870ab74b31b7f4027799f082e85122154f8bed",
+ "url": "https://api.github.com/repos/utopia-php/pools/zipball/6f716a213a08db95eda1b5dddfa90983c1834817",
+ "reference": "6f716a213a08db95eda1b5dddfa90983c1834817",
"shasum": ""
},
"require": {
@@ -2056,9 +2421,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/pools/issues",
- "source": "https://github.com/utopia-php/pools/tree/0.4.2"
+ "source": "https://github.com/utopia-php/pools/tree/0.5.0"
},
- "time": "2022-11-22T07:55:45+00:00"
+ "time": "2024-04-19T11:11:54+00:00"
},
{
"name": "utopia-php/preloader",
@@ -2283,28 +2648,28 @@
},
{
"name": "utopia-php/swoole",
- "version": "0.5.0",
+ "version": "0.8.2",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/swoole.git",
- "reference": "c2a3a4f944a2f22945af3cbcb95b13f0769628b1"
+ "reference": "5fa9d42c608ad46a4ce42a6d2b2eae00592fccd4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/swoole/zipball/c2a3a4f944a2f22945af3cbcb95b13f0769628b1",
- "reference": "c2a3a4f944a2f22945af3cbcb95b13f0769628b1",
+ "url": "https://api.github.com/repos/utopia-php/swoole/zipball/5fa9d42c608ad46a4ce42a6d2b2eae00592fccd4",
+ "reference": "5fa9d42c608ad46a4ce42a6d2b2eae00592fccd4",
"shasum": ""
},
"require": {
"ext-swoole": "*",
"php": ">=8.0",
- "utopia-php/framework": "0.*.*"
+ "utopia-php/framework": "0.33.*"
},
"require-dev": {
"laravel/pint": "1.2.*",
+ "phpstan/phpstan": "^1.10",
"phpunit/phpunit": "^9.3",
- "swoole/ide-helper": "4.8.3",
- "vimeo/psalm": "4.15.0"
+ "swoole/ide-helper": "5.0.2"
},
"type": "library",
"autoload": {
@@ -2328,9 +2693,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/swoole/issues",
- "source": "https://github.com/utopia-php/swoole/tree/0.5.0"
+ "source": "https://github.com/utopia-php/swoole/tree/0.8.2"
},
- "time": "2022-10-19T22:19:07+00:00"
+ "time": "2024-02-01T14:54:12+00:00"
},
{
"name": "utopia-php/system",
@@ -2622,30 +2987,30 @@
"packages-dev": [
{
"name": "appwrite/sdk-generator",
- "version": "0.36.4",
+ "version": "0.38.2",
"source": {
"type": "git",
"url": "https://github.com/appwrite/sdk-generator.git",
- "reference": "8d932098009d62d37dda73cfe4ebc11f83e21405"
+ "reference": "51284668529e2b10ed933412a42b603c76cded23"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/8d932098009d62d37dda73cfe4ebc11f83e21405",
- "reference": "8d932098009d62d37dda73cfe4ebc11f83e21405",
+ "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/51284668529e2b10ed933412a42b603c76cded23",
+ "reference": "51284668529e2b10ed933412a42b603c76cded23",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-json": "*",
"ext-mbstring": "*",
- "matthiasmullie/minify": "^1.3.68",
+ "matthiasmullie/minify": "1.3.*",
"php": ">=8.0",
- "twig/twig": "^3.4.1"
+ "twig/twig": "v3.8.*"
},
"require-dev": {
- "brianium/paratest": "^6.4",
- "phpunit/phpunit": "^9.5.21",
- "squizlabs/php_codesniffer": "^3.6"
+ "brianium/paratest": "v7.4.*",
+ "phpunit/phpunit": "10.5.*",
+ "squizlabs/php_codesniffer": "3.9.*"
},
"type": "library",
"autoload": {
@@ -2667,9 +3032,9 @@
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
"support": {
"issues": "https://github.com/appwrite/sdk-generator/issues",
- "source": "https://github.com/appwrite/sdk-generator/tree/0.36.4"
+ "source": "https://github.com/appwrite/sdk-generator/tree/0.38.2"
},
- "time": "2024-02-20T16:36:15+00:00"
+ "time": "2024-04-25T07:49:29+00:00"
},
{
"name": "doctrine/deprecations",
@@ -2788,6 +3153,72 @@
],
"time": "2022-12-30T00:15:36+00:00"
},
+ {
+ "name": "laravel/pint",
+ "version": "v1.15.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/pint.git",
+ "reference": "3600b5d17aff52f6100ea4921849deacbbeb8656"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/pint/zipball/3600b5d17aff52f6100ea4921849deacbbeb8656",
+ "reference": "3600b5d17aff52f6100ea4921849deacbbeb8656",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "ext-tokenizer": "*",
+ "ext-xml": "*",
+ "php": "^8.1.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.54.0",
+ "illuminate/view": "^10.48.8",
+ "larastan/larastan": "^2.9.5",
+ "laravel-zero/framework": "^10.3.0",
+ "mockery/mockery": "^1.6.11",
+ "nunomaduro/termwind": "^1.15.1",
+ "pestphp/pest": "^2.34.7"
+ },
+ "bin": [
+ "builds/pint"
+ ],
+ "type": "project",
+ "autoload": {
+ "psr-4": {
+ "App\\": "app/",
+ "Database\\Seeders\\": "database/seeders/",
+ "Database\\Factories\\": "database/factories/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nuno Maduro",
+ "email": "enunomaduro@gmail.com"
+ }
+ ],
+ "description": "An opinionated code formatter for PHP.",
+ "homepage": "https://laravel.com",
+ "keywords": [
+ "format",
+ "formatter",
+ "lint",
+ "linter",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/pint/issues",
+ "source": "https://github.com/laravel/pint"
+ },
+ "time": "2024-04-30T15:02:26+00:00"
+ },
{
"name": "matthiasmullie/minify",
"version": "1.3.73",
@@ -3202,28 +3633,35 @@
},
{
"name": "phpdocumentor/reflection-docblock",
- "version": "5.3.0",
+ "version": "5.4.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
+ "reference": "298d2febfe79d03fe714eb871d5538da55205b1a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
- "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/298d2febfe79d03fe714eb871d5538da55205b1a",
+ "reference": "298d2febfe79d03fe714eb871d5538da55205b1a",
"shasum": ""
},
"require": {
+ "doctrine/deprecations": "^1.1",
"ext-filter": "*",
- "php": "^7.2 || ^8.0",
+ "php": "^7.4 || ^8.0",
"phpdocumentor/reflection-common": "^2.2",
- "phpdocumentor/type-resolver": "^1.3",
+ "phpdocumentor/type-resolver": "^1.7",
+ "phpstan/phpdoc-parser": "^1.7",
"webmozart/assert": "^1.9.1"
},
"require-dev": {
- "mockery/mockery": "~1.3.2",
- "psalm/phar": "^4.8"
+ "mockery/mockery": "~1.3.5",
+ "phpstan/extension-installer": "^1.1",
+ "phpstan/phpstan": "^1.8",
+ "phpstan/phpstan-mockery": "^1.1",
+ "phpstan/phpstan-webmozart-assert": "^1.2",
+ "phpunit/phpunit": "^9.5",
+ "vimeo/psalm": "^5.13"
},
"type": "library",
"extra": {
@@ -3247,15 +3685,15 @@
},
{
"name": "Jaap van Otterdijk",
- "email": "account@ijaap.nl"
+ "email": "opensource@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/5.3.0"
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.0"
},
- "time": "2021-10-19T17:43:47+00:00"
+ "time": "2024-04-09T21:13:58+00:00"
},
{
"name": "phpdocumentor/type-resolver",
@@ -3386,16 +3824,16 @@
},
{
"name": "phpstan/phpdoc-parser",
- "version": "1.28.0",
+ "version": "1.29.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb"
+ "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
- "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/536889f2b340489d328f5ffb7b02bb6b183ddedc",
+ "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc",
"shasum": ""
},
"require": {
@@ -3427,9 +3865,9 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.0"
},
- "time": "2024-04-03T18:51:33+00:00"
+ "time": "2024-05-06T12:04:23+00:00"
},
{
"name": "phpunit/php-code-coverage",
@@ -4866,98 +5304,18 @@
],
"time": "2020-09-28T06:39:44+00:00"
},
- {
- "name": "squizlabs/php_codesniffer",
- "version": "3.9.1",
- "source": {
- "type": "git",
- "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
- "reference": "267a4405fff1d9c847134db3a3c92f1ab7f77909"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/267a4405fff1d9c847134db3a3c92f1ab7f77909",
- "reference": "267a4405fff1d9c847134db3a3c92f1ab7f77909",
- "shasum": ""
- },
- "require": {
- "ext-simplexml": "*",
- "ext-tokenizer": "*",
- "ext-xmlwriter": "*",
- "php": ">=5.4.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4"
- },
- "bin": [
- "bin/phpcbf",
- "bin/phpcs"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.x-dev"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Greg Sherwood",
- "role": "Former lead"
- },
- {
- "name": "Juliette Reinders Folmer",
- "role": "Current lead"
- },
- {
- "name": "Contributors",
- "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors"
- }
- ],
- "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
- "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
- "keywords": [
- "phpcs",
- "standards",
- "static analysis"
- ],
- "support": {
- "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues",
- "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy",
- "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
- "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki"
- },
- "funding": [
- {
- "url": "https://github.com/PHPCSStandards",
- "type": "github"
- },
- {
- "url": "https://github.com/jrfnl",
- "type": "github"
- },
- {
- "url": "https://opencollective.com/php_codesniffer",
- "type": "open_collective"
- }
- ],
- "time": "2024-03-31T21:03:09+00:00"
- },
{
"name": "swoole/ide-helper",
- "version": "5.0.2",
+ "version": "5.1.2",
"source": {
"type": "git",
"url": "https://github.com/swoole/ide-helper.git",
- "reference": "16cfee44a6ec92254228c39bcab2fb8ae74cc2ea"
+ "reference": "33ec7af9111b76d06a70dd31191cc74793551112"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/swoole/ide-helper/zipball/16cfee44a6ec92254228c39bcab2fb8ae74cc2ea",
- "reference": "16cfee44a6ec92254228c39bcab2fb8ae74cc2ea",
+ "url": "https://api.github.com/repos/swoole/ide-helper/zipball/33ec7af9111b76d06a70dd31191cc74793551112",
+ "reference": "33ec7af9111b76d06a70dd31191cc74793551112",
"shasum": ""
},
"type": "library",
@@ -4974,9 +5332,9 @@
"description": "IDE help files for Swoole.",
"support": {
"issues": "https://github.com/swoole/ide-helper/issues",
- "source": "https://github.com/swoole/ide-helper/tree/5.0.2"
+ "source": "https://github.com/swoole/ide-helper/tree/5.1.2"
},
- "time": "2023-03-20T06:05:55+00:00"
+ "time": "2024-02-01T22:28:11+00:00"
},
{
"name": "symfony/polyfill-ctype",
@@ -5262,7 +5620,7 @@
"ext-fileinfo": "*"
},
"platform-overrides": {
- "php": "8.0"
+ "php": "8.3"
},
"plugin-api-version": "2.2.0"
}
diff --git a/src/Appwrite/Platform/Workers/Messaging.php b/src/Appwrite/Platform/Workers/Messaging.php
index 1f6ca941ea..bbef094cb7 100644
--- a/src/Appwrite/Platform/Workers/Messaging.php
+++ b/src/Appwrite/Platform/Workers/Messaging.php
@@ -441,31 +441,24 @@ class Messaging extends Action
try {
$adapter->send($data);
- $countryCode = $sms->getCountryCode($payload['recipient']);
-
- if (!empty($countryCode)) {
- $queueForUsage
- ->addMetric(str_replace('{countryCode}', $countryCode, METRIC_MESSAGES_COUNTRY_CODE), 1);
- }
-
- $queueForUsage
- ->setProject($project)
- ->addMetric(METRIC_MESSAGES, 1)
- ->trigger();
- } catch (\Exception $error) {
- throw new Exception('Error sending message: ' . $error->getMessage(), 500);
- }
+ $countryCode = $adapter->getCountryCode($message['to']);
+ if (!empty($countryCode)) {
+ $queueForUsage
+ ->addMetric(str_replace('{countryCode}', $countryCode, METRIC_MESSAGES_COUNTRY_CODE), 1);
+ }
$queueForUsage
->addMetric(METRIC_MESSAGES, 1)
->setProject($project)
->trigger();
- } catch (\Throwable $e) {
- throw new \Exception('Failed sending to targets with error: ' . $e->getMessage());
+ } catch (\Throwable $th) {
+ throw new \Exception('Failed sending to targets with error: ' . $th->getMessage());
}
};
}, $batches));
}
+
+
private function getSmsAdapter(Document $provider): ?SMSAdapter
{
$credentials = $provider->getAttribute('credentials');
From 499236833da5d5ec03a7a120ea2ace09fd14aae6 Mon Sep 17 00:00:00 2001
From: shimon
Date: Wed, 8 May 2024 19:47:55 +0300
Subject: [PATCH 068/138] getCountryCode
---
CONTRIBUTING.md | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 709d01ac52..8326164c48 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -338,10 +338,8 @@ These are the current metrics we collect usage stats for:
> Note: The curly brackets in the metric name represents a template and is replaced with a value when the metric is processed.
-Metrics are collected within 3 scopes Daily, monthly, an infinity.
-Adding new usage metric in order to aggregate usage stats is very simple, but very much dependent on where do you want to collect
-statistics ,via API or via background worker.
-For both cases you will need to add a const variable in `app/init.php` under the usage metrics list.
+Metrics are collected within 3 scopes Daily, monthly, an infinity. Adding new usage metric in order to aggregate usage stats is very simple, but very much dependent on where do you want to collect
+statistics ,via API or via background worker. For both cases you will need to add a `const` variable in `app/init.php` under the usage metrics list using the naming convention `METRIC_` as shown below.
```php
// Usage metrics
From 9609ae3549e2f80f7d7686c33a573832f4c2d1fe Mon Sep 17 00:00:00 2001
From: shimon
Date: Wed, 8 May 2024 20:08:50 +0300
Subject: [PATCH 069/138] getCountryCode
---
composer.json | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/composer.json b/composer.json
index 3ae855471d..8865a32d91 100644
--- a/composer.json
+++ b/composer.json
@@ -58,8 +58,8 @@
"utopia-php/image": "0.6.*",
"utopia-php/locale": "0.4.*",
"utopia-php/logger": "0.3.*",
- "utopia-php/messaging": "dev-get-country-code as 0.3.0",
- "utopia-php/migration": "0.3.*",
+ "utopia-php/messaging": "0.10.*",
+ "utopia-php/migration": "0.4.*",
"utopia-php/orchestration": "0.9.*",
"utopia-php/platform": "0.5.*",
"utopia-php/pools": "0.5.*",
From df064adce3f2819881172e36882e990c1888c6fd Mon Sep 17 00:00:00 2001
From: Steven Nguyen <1477010+stnguyen90@users.noreply.github.com>
Date: Wed, 8 May 2024 17:36:46 +0000
Subject: [PATCH 070/138] feat(auth): forward OAuth2 callback params
The only place Apple includes the user's name is in the params so we
need to forward the params to the redirect endpoint so they can be used
when creating the user.
---
app/controllers/api/account.php | 24 ++++++++++--------------
1 file changed, 10 insertions(+), 14 deletions(-)
diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php
index 8c0f25be09..11af53008e 100644
--- a/app/controllers/api/account.php
+++ b/app/controllers/api/account.php
@@ -1069,17 +1069,15 @@ App::get('/v1/account/sessions/oauth2/callback/:provider/:projectId')
$domain = $request->getHostname();
$protocol = $request->getProtocol();
+ $params = $request->getParams();
+ $params['project'] = $projectId;
+ unset($params['projectId']);
+
$response
->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0')
->addHeader('Pragma', 'no-cache')
->redirect($protocol . '://' . $domain . '/v1/account/sessions/oauth2/' . $provider . '/redirect?'
- . \http_build_query([
- 'project' => $projectId,
- 'code' => $code,
- 'state' => $state,
- 'error' => $error,
- 'error_description' => $error_description
- ]));
+ . \http_build_query($params));
});
App::post('/v1/account/sessions/oauth2/callback/:provider/:projectId')
@@ -1102,17 +1100,15 @@ App::post('/v1/account/sessions/oauth2/callback/:provider/:projectId')
$domain = $request->getHostname();
$protocol = $request->getProtocol();
+ $params = $request->getParams();
+ $params['project'] = $projectId;
+ unset($params['projectId']);
+
$response
->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0')
->addHeader('Pragma', 'no-cache')
->redirect($protocol . '://' . $domain . '/v1/account/sessions/oauth2/' . $provider . '/redirect?'
- . \http_build_query([
- 'project' => $projectId,
- 'code' => $code,
- 'state' => $state,
- 'error' => $error,
- 'error_description' => $error_description
- ]));
+ . \http_build_query($params));
});
App::get('/v1/account/sessions/oauth2/:provider/redirect')
From b04b7c5f455fd2755e148bfa11d5b299ec3571fd Mon Sep 17 00:00:00 2001
From: bhc
Date: Thu, 9 May 2024 00:56:56 +0300
Subject: [PATCH 071/138] chore: Improve sleep duration in Doctor.php
---
src/Appwrite/Platform/Tasks/Doctor.php | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/Appwrite/Platform/Tasks/Doctor.php b/src/Appwrite/Platform/Tasks/Doctor.php
index a79763cf42..91554c73be 100644
--- a/src/Appwrite/Platform/Tasks/Doctor.php
+++ b/src/Appwrite/Platform/Tasks/Doctor.php
@@ -109,7 +109,7 @@ class Doctor extends Action
Console::log('🟢 Logging adapter is enabled (' . $providerName . ')');
}
- \sleep(0.2);
+ \usleep(200 * 1000); // Sleep for 0.2 seconds
try {
Console::log("\n" . '[Connectivity]');
@@ -194,7 +194,7 @@ class Doctor extends Action
Console::error('🔴 ' . str_pad("SMTP", 47, '.') . 'disconnected');
}
- \sleep(0.2);
+ \usleep(200 * 1000); // Sleep for 0.2 seconds
Console::log('');
Console::log('[Volumes]');
@@ -222,7 +222,7 @@ class Doctor extends Action
}
}
- \sleep(0.2);
+ \usleep(200 * 1000); // Sleep for 0.2 seconds
Console::log('');
Console::log('[Disk Space]');
From c76e29077cac774100bcbd150b151bc144c054ea Mon Sep 17 00:00:00 2001
From: Steven Nguyen <1477010+stnguyen90@users.noreply.github.com>
Date: Wed, 8 May 2024 17:51:45 +0000
Subject: [PATCH 072/138] feat(auth): try to get user name from request param
if not from oauth2
This is only applicable for Apple OAuth2 because this is the only
provider that does not return user name from an API call and only
returns the name in the callback URL.
Reference:
* https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_js/incorporating_sign_in_with_apple_into_other_platforms#3332115
---
app/controllers/api/account.php | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php
index 11af53008e..f379dd3023 100644
--- a/app/controllers/api/account.php
+++ b/app/controllers/api/account.php
@@ -1235,7 +1235,17 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect')
$failureRedirect(Exception::USER_MISSING_ID);
}
- $name = $oauth2->getUserName($accessToken);
+ $name = '';
+ $nameOAuth = $oauth2->getUserName($accessToken);
+ $userParam = \json_decode($request->getParam('user'), true);
+ if (!empty($nameOAuth)) {
+ $name = $nameOAuth;
+ } elseif (is_array($userParam)) {
+ $nameParam = $userParam['name'];
+ if (is_array($nameParam) && isset($nameParam['firstName']) && isset($nameParam['lastName'])) {
+ $name = $nameParam['firstName'] . ' ' . $nameParam['lastName'];
+ }
+ }
$email = $oauth2->getUserEmail($accessToken);
// Check if this identity is connected to a different user
From c52bf2a0a125f5fb658a00ede709f56e217b4de5 Mon Sep 17 00:00:00 2001
From: Steven Nguyen <1477010+stnguyen90@users.noreply.github.com>
Date: Wed, 8 May 2024 17:57:10 +0000
Subject: [PATCH 073/138] fix(auth): Don't use email in place for name for
Apple OAuth2
Apple OAuth2 does not return the user's name in the claims and so we
used email instead, but this can look broken to users and developers to
see an email where the name should be.
---
src/Appwrite/Auth/OAuth2/Apple.php | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/src/Appwrite/Auth/OAuth2/Apple.php b/src/Appwrite/Auth/OAuth2/Apple.php
index 2abf61c947..0b4ec50881 100644
--- a/src/Appwrite/Auth/OAuth2/Apple.php
+++ b/src/Appwrite/Auth/OAuth2/Apple.php
@@ -160,15 +160,6 @@ class Apple extends OAuth2
*/
public function getUserName(string $accessToken): string
{
- if (
- isset($this->claims['email']) &&
- !empty($this->claims['email']) &&
- isset($this->claims['email_verified']) &&
- $this->claims['email_verified'] === 'true'
- ) {
- return $this->claims['email'];
- }
-
return '';
}
From 15b8aa5b16e5e918fd0e037716aba3a419ed0db5 Mon Sep 17 00:00:00 2001
From: shimon
Date: Sun, 12 May 2024 18:12:40 +0300
Subject: [PATCH 074/138] composer format
---
composer.json | 2 +-
composer.lock | 46 ++++++++++-----------
src/Appwrite/Platform/Workers/Messaging.php | 2 +-
3 files changed, 25 insertions(+), 25 deletions(-)
diff --git a/composer.json b/composer.json
index 8865a32d91..f7831c1df4 100644
--- a/composer.json
+++ b/composer.json
@@ -58,7 +58,7 @@
"utopia-php/image": "0.6.*",
"utopia-php/locale": "0.4.*",
"utopia-php/logger": "0.3.*",
- "utopia-php/messaging": "0.10.*",
+ "utopia-php/messaging": "dev-get-country-code as 0.3.0",
"utopia-php/migration": "0.4.*",
"utopia-php/orchestration": "0.9.*",
"utopia-php/platform": "0.5.*",
diff --git a/composer.lock b/composer.lock
index 057e55b2d5..1800c8f30d 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "5d6ebed245c1b7f21f1367155180ad27",
+ "content-hash": "e2c9a279b3293361f94fb7de6530c6f2",
"packages": [
{
"name": "adhocore/jwt",
@@ -65,16 +65,16 @@
},
{
"name": "appwrite/appwrite",
- "version": "10.0.0",
+ "version": "10.1.0",
"source": {
"type": "git",
"url": "https://github.com/appwrite/sdk-for-php.git",
- "reference": "461eedf4efd502dc905c3055f36f0e3583f67390"
+ "reference": "da579af70723cfc117b5af84375bdef117e27312"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/appwrite/sdk-for-php/zipball/461eedf4efd502dc905c3055f36f0e3583f67390",
- "reference": "461eedf4efd502dc905c3055f36f0e3583f67390",
+ "url": "https://api.github.com/repos/appwrite/sdk-for-php/zipball/da579af70723cfc117b5af84375bdef117e27312",
+ "reference": "da579af70723cfc117b5af84375bdef117e27312",
"shasum": ""
},
"require": {
@@ -99,10 +99,10 @@
"support": {
"email": "team@appwrite.io",
"issues": "https://github.com/appwrite/sdk-for-php/issues",
- "source": "https://github.com/appwrite/sdk-for-php/tree/10.0.0",
+ "source": "https://github.com/appwrite/sdk-for-php/tree/10.1.0",
"url": "https://appwrite.io/support"
},
- "time": "2023-09-07T23:28:31+00:00"
+ "time": "2023-11-20T09:56:12+00:00"
},
{
"name": "appwrite/php-clamav",
@@ -905,16 +905,16 @@
},
{
"name": "paragonie/constant_time_encoding",
- "version": "v2.6.3",
+ "version": "v2.7.0",
"source": {
"type": "git",
"url": "https://github.com/paragonie/constant_time_encoding.git",
- "reference": "58c3f47f650c94ec05a151692652a868995d2938"
+ "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938",
- "reference": "58c3f47f650c94ec05a151692652a868995d2938",
+ "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/52a0d99e69f56b9ec27ace92ba56897fe6993105",
+ "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105",
"shasum": ""
},
"require": {
@@ -968,7 +968,7 @@
"issues": "https://github.com/paragonie/constant_time_encoding/issues",
"source": "https://github.com/paragonie/constant_time_encoding"
},
- "time": "2022-06-14T06:56:20+00:00"
+ "time": "2024-05-08T12:18:48+00:00"
},
{
"name": "phpmailer/phpmailer",
@@ -2122,12 +2122,12 @@
"source": {
"type": "git",
"url": "https://github.com/utopia-php/messaging.git",
- "reference": "37108ef5aa8a242de32eda046c9fb8c067d0719e"
+ "reference": "724ba39fd7d5f701f54370201050e423b9de005f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/messaging/zipball/37108ef5aa8a242de32eda046c9fb8c067d0719e",
- "reference": "37108ef5aa8a242de32eda046c9fb8c067d0719e",
+ "url": "https://api.github.com/repos/utopia-php/messaging/zipball/724ba39fd7d5f701f54370201050e423b9de005f",
+ "reference": "724ba39fd7d5f701f54370201050e423b9de005f",
"shasum": ""
},
"require": {
@@ -2165,24 +2165,24 @@
"issues": "https://github.com/utopia-php/messaging/issues",
"source": "https://github.com/utopia-php/messaging/tree/get-country-code"
},
- "time": "2024-05-08T10:17:54+00:00"
+ "time": "2024-05-08T17:06:19+00:00"
},
{
"name": "utopia-php/migration",
- "version": "0.3.6",
+ "version": "0.4.1",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/migration.git",
- "reference": "f78273b38bade23db5866e5c7cb5f55427ba82af"
+ "reference": "ae3cfe93f6d313105d226aeb68806660c806a925"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/migration/zipball/f78273b38bade23db5866e5c7cb5f55427ba82af",
- "reference": "f78273b38bade23db5866e5c7cb5f55427ba82af",
+ "url": "https://api.github.com/repos/utopia-php/migration/zipball/ae3cfe93f6d313105d226aeb68806660c806a925",
+ "reference": "ae3cfe93f6d313105d226aeb68806660c806a925",
"shasum": ""
},
"require": {
- "appwrite/appwrite": "10.0.*",
+ "appwrite/appwrite": "10.1.0",
"php": "8.*",
"utopia-php/cli": "0.*"
},
@@ -2211,9 +2211,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/migration/issues",
- "source": "https://github.com/utopia-php/migration/tree/0.3.6"
+ "source": "https://github.com/utopia-php/migration/tree/0.4.1"
},
- "time": "2023-11-02T15:13:03+00:00"
+ "time": "2024-05-01T13:19:18+00:00"
},
{
"name": "utopia-php/mongo",
diff --git a/src/Appwrite/Platform/Workers/Messaging.php b/src/Appwrite/Platform/Workers/Messaging.php
index bbef094cb7..281ac21946 100644
--- a/src/Appwrite/Platform/Workers/Messaging.php
+++ b/src/Appwrite/Platform/Workers/Messaging.php
@@ -440,7 +440,7 @@ class Messaging extends Action
try {
$adapter->send($data);
-
+ var_dump($message['to']);
$countryCode = $adapter->getCountryCode($message['to']);
if (!empty($countryCode)) {
$queueForUsage
From 62a35216574b4d7edea7b0b2e46f39b653ac9961 Mon Sep 17 00:00:00 2001
From: shimon
Date: Sun, 12 May 2024 18:15:04 +0300
Subject: [PATCH 075/138] composer format
---
composer.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/composer.json b/composer.json
index f7831c1df4..b77728aa30 100644
--- a/composer.json
+++ b/composer.json
@@ -58,7 +58,7 @@
"utopia-php/image": "0.6.*",
"utopia-php/locale": "0.4.*",
"utopia-php/logger": "0.3.*",
- "utopia-php/messaging": "dev-get-country-code as 0.3.0",
+ "utopia-php/messaging": "dev-get-country-code as 0.11.0",
"utopia-php/migration": "0.4.*",
"utopia-php/orchestration": "0.9.*",
"utopia-php/platform": "0.5.*",
From 122b8e201e01afeb5a659e94ef383051bf2a3530 Mon Sep 17 00:00:00 2001
From: shimon
Date: Sun, 12 May 2024 18:21:26 +0300
Subject: [PATCH 076/138] composer format
---
composer.json | 2 +-
composer.lock | 5626 -------------------------------------------------
2 files changed, 1 insertion(+), 5627 deletions(-)
delete mode 100644 composer.lock
diff --git a/composer.json b/composer.json
index b77728aa30..280eb07630 100644
--- a/composer.json
+++ b/composer.json
@@ -58,7 +58,7 @@
"utopia-php/image": "0.6.*",
"utopia-php/locale": "0.4.*",
"utopia-php/logger": "0.3.*",
- "utopia-php/messaging": "dev-get-country-code as 0.11.0",
+ "utopia-php/messaging": "dev-get-country-code as 0.10.0",
"utopia-php/migration": "0.4.*",
"utopia-php/orchestration": "0.9.*",
"utopia-php/platform": "0.5.*",
diff --git a/composer.lock b/composer.lock
deleted file mode 100644
index 1800c8f30d..0000000000
--- a/composer.lock
+++ /dev/null
@@ -1,5626 +0,0 @@
-{
- "_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": "e2c9a279b3293361f94fb7de6530c6f2",
- "packages": [
- {
- "name": "adhocore/jwt",
- "version": "1.1.2",
- "source": {
- "type": "git",
- "url": "https://github.com/adhocore/php-jwt.git",
- "reference": "6c434af7170090bb7a8880d2bc220a2254ba7899"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/adhocore/php-jwt/zipball/6c434af7170090bb7a8880d2bc220a2254ba7899",
- "reference": "6c434af7170090bb7a8880d2bc220a2254ba7899",
- "shasum": ""
- },
- "require": {
- "php": "^7.0 || ^8.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.5 || ^7.5"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Ahc\\Jwt\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jitendra Adhikari",
- "email": "jiten.adhikary@gmail.com"
- }
- ],
- "description": "Ultra lightweight JSON web token (JWT) library for PHP5.5+.",
- "keywords": [
- "auth",
- "json-web-token",
- "jwt",
- "jwt-auth",
- "jwt-php",
- "token"
- ],
- "support": {
- "issues": "https://github.com/adhocore/php-jwt/issues",
- "source": "https://github.com/adhocore/php-jwt/tree/1.1.2"
- },
- "funding": [
- {
- "url": "https://paypal.me/ji10",
- "type": "custom"
- }
- ],
- "time": "2021-02-20T09:56:44+00:00"
- },
- {
- "name": "appwrite/appwrite",
- "version": "10.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/appwrite/sdk-for-php.git",
- "reference": "da579af70723cfc117b5af84375bdef117e27312"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/appwrite/sdk-for-php/zipball/da579af70723cfc117b5af84375bdef117e27312",
- "reference": "da579af70723cfc117b5af84375bdef117e27312",
- "shasum": ""
- },
- "require": {
- "ext-curl": "*",
- "ext-json": "*",
- "php": ">=7.1.0"
- },
- "require-dev": {
- "phpunit/phpunit": "3.7.35"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Appwrite\\": "src/Appwrite"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "description": "Appwrite is an open-source self-hosted backend server that abstract and simplify complex and repetitive development tasks behind a very simple REST API",
- "support": {
- "email": "team@appwrite.io",
- "issues": "https://github.com/appwrite/sdk-for-php/issues",
- "source": "https://github.com/appwrite/sdk-for-php/tree/10.1.0",
- "url": "https://appwrite.io/support"
- },
- "time": "2023-11-20T09:56:12+00:00"
- },
- {
- "name": "appwrite/php-clamav",
- "version": "2.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/appwrite/php-clamav.git",
- "reference": "f3897169f5c1f365312238a516ae9465f804634f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/appwrite/php-clamav/zipball/f3897169f5c1f365312238a516ae9465f804634f",
- "reference": "f3897169f5c1f365312238a516ae9465f804634f",
- "shasum": ""
- },
- "require": {
- "ext-sockets": "*",
- "php": ">=8.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Appwrite\\ClamAV\\": "src/ClamAV"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "eldad@appwrite.io"
- }
- ],
- "description": "ClamAV network and pipe client for PHP",
- "keywords": [
- "anti virus",
- "appwrite",
- "clamav",
- "php"
- ],
- "support": {
- "issues": "https://github.com/appwrite/php-clamav/issues",
- "source": "https://github.com/appwrite/php-clamav/tree/2.0.0"
- },
- "time": "2023-02-24T09:50:42+00:00"
- },
- {
- "name": "appwrite/php-runtimes",
- "version": "0.13.5",
- "source": {
- "type": "git",
- "url": "https://github.com/appwrite/runtimes.git",
- "reference": "ba24c3a163f1a1da6cd355db92def508d05e59f7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/appwrite/runtimes/zipball/ba24c3a163f1a1da6cd355db92def508d05e59f7",
- "reference": "ba24c3a163f1a1da6cd355db92def508d05e59f7",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0",
- "utopia-php/system": "0.8.*"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3",
- "vimeo/psalm": "4.0.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Appwrite\\Runtimes\\": "src/Runtimes"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "eldad@appwrite.io"
- },
- {
- "name": "Torsten Dittmann",
- "email": "torsten@appwrite.io"
- }
- ],
- "description": "Appwrite repository for Cloud Function runtimes that contains the configurations and tests for all of the Appwrite runtime environments.",
- "keywords": [
- "appwrite",
- "php",
- "runtimes"
- ],
- "support": {
- "issues": "https://github.com/appwrite/runtimes/issues",
- "source": "https://github.com/appwrite/runtimes/tree/0.13.5"
- },
- "time": "2024-04-01T10:35:02+00:00"
- },
- {
- "name": "beberlei/assert",
- "version": "v3.3.2",
- "source": {
- "type": "git",
- "url": "https://github.com/beberlei/assert.git",
- "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/beberlei/assert/zipball/cb70015c04be1baee6f5f5c953703347c0ac1655",
- "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655",
- "shasum": ""
- },
- "require": {
- "ext-ctype": "*",
- "ext-json": "*",
- "ext-mbstring": "*",
- "ext-simplexml": "*",
- "php": "^7.0 || ^8.0"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "*",
- "phpstan/phpstan": "*",
- "phpunit/phpunit": ">=6.0.0",
- "yoast/phpunit-polyfills": "^0.1.0"
- },
- "suggest": {
- "ext-intl": "Needed to allow Assertion::count(), Assertion::isCountable(), Assertion::minCount(), and Assertion::maxCount() to operate on ResourceBundles"
- },
- "type": "library",
- "autoload": {
- "files": [
- "lib/Assert/functions.php"
- ],
- "psr-4": {
- "Assert\\": "lib/Assert"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-2-Clause"
- ],
- "authors": [
- {
- "name": "Benjamin Eberlei",
- "email": "kontakt@beberlei.de",
- "role": "Lead Developer"
- },
- {
- "name": "Richard Quadling",
- "email": "rquadling@gmail.com",
- "role": "Collaborator"
- }
- ],
- "description": "Thin assertion library for input validation in business models.",
- "keywords": [
- "assert",
- "assertion",
- "validation"
- ],
- "support": {
- "issues": "https://github.com/beberlei/assert/issues",
- "source": "https://github.com/beberlei/assert/tree/v3.3.2"
- },
- "time": "2021-12-16T21:41:27+00:00"
- },
- {
- "name": "chillerlan/php-qrcode",
- "version": "4.3.4",
- "source": {
- "type": "git",
- "url": "https://github.com/chillerlan/php-qrcode.git",
- "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
- "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
- "shasum": ""
- },
- "require": {
- "chillerlan/php-settings-container": "^2.1.4",
- "ext-mbstring": "*",
- "php": "^7.4 || ^8.0"
- },
- "require-dev": {
- "phan/phan": "^5.3",
- "phpunit/phpunit": "^9.5",
- "setasign/fpdf": "^1.8.2"
- },
- "suggest": {
- "chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.",
- "setasign/fpdf": "Required to use the QR FPDF output."
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "chillerlan\\QRCode\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Kazuhiko Arase",
- "homepage": "https://github.com/kazuhikoarase"
- },
- {
- "name": "Smiley",
- "email": "smiley@chillerlan.net",
- "homepage": "https://github.com/codemasher"
- },
- {
- "name": "Contributors",
- "homepage": "https://github.com/chillerlan/php-qrcode/graphs/contributors"
- }
- ],
- "description": "A QR code generator. PHP 7.4+",
- "homepage": "https://github.com/chillerlan/php-qrcode",
- "keywords": [
- "phpqrcode",
- "qr",
- "qr code",
- "qrcode",
- "qrcode-generator"
- ],
- "support": {
- "issues": "https://github.com/chillerlan/php-qrcode/issues",
- "source": "https://github.com/chillerlan/php-qrcode/tree/4.3.4"
- },
- "funding": [
- {
- "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4",
- "type": "custom"
- },
- {
- "url": "https://ko-fi.com/codemasher",
- "type": "ko_fi"
- }
- ],
- "time": "2022-07-25T09:12:45+00:00"
- },
- {
- "name": "chillerlan/php-settings-container",
- "version": "2.1.5",
- "source": {
- "type": "git",
- "url": "https://github.com/chillerlan/php-settings-container.git",
- "reference": "f705310389264c3578fdd9ffb15aa2cd6d91772e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/f705310389264c3578fdd9ffb15aa2cd6d91772e",
- "reference": "f705310389264c3578fdd9ffb15aa2cd6d91772e",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "php": "^7.4 || ^8.0"
- },
- "require-dev": {
- "phan/phan": "^5.4",
- "phpcsstandards/php_codesniffer": "^3.8",
- "phpmd/phpmd": "^2.13",
- "phpunit/phpunit": "^9.6"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "chillerlan\\Settings\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Smiley",
- "email": "smiley@chillerlan.net",
- "homepage": "https://github.com/codemasher"
- }
- ],
- "description": "A container class for immutable settings objects. Not a DI container. PHP 7.4+",
- "homepage": "https://github.com/chillerlan/php-settings-container",
- "keywords": [
- "PHP7",
- "Settings",
- "configuration",
- "container",
- "helper"
- ],
- "support": {
- "issues": "https://github.com/chillerlan/php-settings-container/issues",
- "source": "https://github.com/chillerlan/php-settings-container"
- },
- "funding": [
- {
- "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4",
- "type": "custom"
- },
- {
- "url": "https://ko-fi.com/codemasher",
- "type": "ko_fi"
- }
- ],
- "time": "2024-01-05T23:20:55+00:00"
- },
- {
- "name": "dragonmantank/cron-expression",
- "version": "v3.3.2",
- "source": {
- "type": "git",
- "url": "https://github.com/dragonmantank/cron-expression.git",
- "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/782ca5968ab8b954773518e9e49a6f892a34b2a8",
- "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8",
- "shasum": ""
- },
- "require": {
- "php": "^7.2|^8.0",
- "webmozart/assert": "^1.0"
- },
- "replace": {
- "mtdowling/cron-expression": "^1.0"
- },
- "require-dev": {
- "phpstan/extension-installer": "^1.0",
- "phpstan/phpstan": "^1.0",
- "phpstan/phpstan-webmozart-assert": "^1.0",
- "phpunit/phpunit": "^7.0|^8.0|^9.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Cron\\": "src/Cron/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Chris Tankersley",
- "email": "chris@ctankersley.com",
- "homepage": "https://github.com/dragonmantank"
- }
- ],
- "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due",
- "keywords": [
- "cron",
- "schedule"
- ],
- "support": {
- "issues": "https://github.com/dragonmantank/cron-expression/issues",
- "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.2"
- },
- "funding": [
- {
- "url": "https://github.com/dragonmantank",
- "type": "github"
- }
- ],
- "time": "2022-09-10T18:51:20+00:00"
- },
- {
- "name": "giggsey/libphonenumber-for-php-lite",
- "version": "8.13.36",
- "source": {
- "type": "git",
- "url": "https://github.com/giggsey/libphonenumber-for-php-lite.git",
- "reference": "144bbe70d67664b5245910a475c7190ff140ab4b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php-lite/zipball/144bbe70d67664b5245910a475c7190ff140ab4b",
- "reference": "144bbe70d67664b5245910a475c7190ff140ab4b",
- "shasum": ""
- },
- "require": {
- "php": "^8.1",
- "symfony/polyfill-mbstring": "^1.17"
- },
- "conflict": {
- "giggsey/libphonenumber-for-php": "*"
- },
- "require-dev": {
- "ext-dom": "*",
- "friendsofphp/php-cs-fixer": "^3.12",
- "infection/infection": "^0.28",
- "pear/pear-core-minimal": "^1.10.11",
- "pear/pear_exception": "^1.0.2",
- "pear/versioncontrol_git": "^0.7",
- "phing/phing": "^2.17.4",
- "phpstan/extension-installer": "^1.2",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-phpunit": "^1.2",
- "phpunit/phpunit": "^10.5",
- "symfony/console": "^6.0",
- "symfony/var-exporter": "^6.0"
- },
- "suggest": {
- "giggsey/libphonenumber-for-php": "Use libphonenumber-for-php for geocoding, carriers, timezones and matching"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "libphonenumber\\": "src/"
- },
- "exclude-from-classmap": [
- "/src/data/",
- "/src/carrier/data/",
- "/src/geocoding/data/",
- "/src/timezone/data/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "Joshua Gigg",
- "email": "giggsey@gmail.com",
- "homepage": "https://giggsey.com/"
- }
- ],
- "description": "A lite version of giggsey/libphonenumber-for-php, which is a PHP Port of Google's libphonenumber",
- "homepage": "https://github.com/giggsey/libphonenumber-for-php-lite",
- "keywords": [
- "geocoding",
- "geolocation",
- "libphonenumber",
- "mobile",
- "phonenumber",
- "validation"
- ],
- "support": {
- "issues": "https://github.com/giggsey/libphonenumber-for-php-lite/issues",
- "source": "https://github.com/giggsey/libphonenumber-for-php-lite"
- },
- "time": "2024-05-03T06:31:11+00:00"
- },
- {
- "name": "jean85/pretty-package-versions",
- "version": "2.0.6",
- "source": {
- "type": "git",
- "url": "https://github.com/Jean85/pretty-package-versions.git",
- "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/f9fdd29ad8e6d024f52678b570e5593759b550b4",
- "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4",
- "shasum": ""
- },
- "require": {
- "composer-runtime-api": "^2.0.0",
- "php": "^7.1|^8.0"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "^3.2",
- "jean85/composer-provided-replaced-stub-package": "^1.0",
- "phpstan/phpstan": "^1.4",
- "phpunit/phpunit": "^7.5|^8.5|^9.4",
- "vimeo/psalm": "^4.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Jean85\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Alessandro Lai",
- "email": "alessandro.lai85@gmail.com"
- }
- ],
- "description": "A library to get pretty versions strings of installed dependencies",
- "keywords": [
- "composer",
- "package",
- "release",
- "versions"
- ],
- "support": {
- "issues": "https://github.com/Jean85/pretty-package-versions/issues",
- "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.6"
- },
- "time": "2024-03-08T09:58:59+00:00"
- },
- {
- "name": "league/csv",
- "version": "9.14.0",
- "source": {
- "type": "git",
- "url": "https://github.com/thephpleague/csv.git",
- "reference": "34bf0df7340b60824b9449b5c526fcc3325070d5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/thephpleague/csv/zipball/34bf0df7340b60824b9449b5c526fcc3325070d5",
- "reference": "34bf0df7340b60824b9449b5c526fcc3325070d5",
- "shasum": ""
- },
- "require": {
- "ext-filter": "*",
- "ext-json": "*",
- "ext-mbstring": "*",
- "php": "^8.1.2"
- },
- "require-dev": {
- "doctrine/collections": "^2.1.4",
- "ext-dom": "*",
- "ext-xdebug": "*",
- "friendsofphp/php-cs-fixer": "^v3.22.0",
- "phpbench/phpbench": "^1.2.15",
- "phpstan/phpstan": "^1.10.50",
- "phpstan/phpstan-deprecation-rules": "^1.1.4",
- "phpstan/phpstan-phpunit": "^1.3.15",
- "phpstan/phpstan-strict-rules": "^1.5.2",
- "phpunit/phpunit": "^10.5.3",
- "symfony/var-dumper": "^6.4.0"
- },
- "suggest": {
- "ext-dom": "Required to use the XMLConverter and the HTMLConverter classes",
- "ext-iconv": "Needed to ease transcoding CSV using iconv stream filters"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "9.x-dev"
- }
- },
- "autoload": {
- "files": [
- "src/functions_include.php"
- ],
- "psr-4": {
- "League\\Csv\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Ignace Nyamagana Butera",
- "email": "nyamsprod@gmail.com",
- "homepage": "https://github.com/nyamsprod/",
- "role": "Developer"
- }
- ],
- "description": "CSV data manipulation made easy in PHP",
- "homepage": "https://csv.thephpleague.com",
- "keywords": [
- "convert",
- "csv",
- "export",
- "filter",
- "import",
- "read",
- "transform",
- "write"
- ],
- "support": {
- "docs": "https://csv.thephpleague.com",
- "issues": "https://github.com/thephpleague/csv/issues",
- "rss": "https://github.com/thephpleague/csv/releases.atom",
- "source": "https://github.com/thephpleague/csv"
- },
- "funding": [
- {
- "url": "https://github.com/sponsors/nyamsprod",
- "type": "github"
- }
- ],
- "time": "2023-12-29T07:34:53+00:00"
- },
- {
- "name": "matomo/device-detector",
- "version": "6.1.6",
- "source": {
- "type": "git",
- "url": "https://github.com/matomo-org/device-detector.git",
- "reference": "5cbea85106e561c7138d03603eb6e05128480409"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/matomo-org/device-detector/zipball/5cbea85106e561c7138d03603eb6e05128480409",
- "reference": "5cbea85106e561c7138d03603eb6e05128480409",
- "shasum": ""
- },
- "require": {
- "mustangostang/spyc": "*",
- "php": "^7.2|^8.0"
- },
- "replace": {
- "piwik/device-detector": "self.version"
- },
- "require-dev": {
- "matthiasmullie/scrapbook": "^1.4.7",
- "mayflower/mo4-coding-standard": "^v8.0.0",
- "phpstan/phpstan": "^0.12.52",
- "phpunit/phpunit": "^8.5.8",
- "psr/cache": "^1.0.1",
- "psr/simple-cache": "^1.0.1",
- "symfony/yaml": "^5.1.7"
- },
- "suggest": {
- "doctrine/cache": "Can directly be used for caching purpose",
- "ext-yaml": "Necessary for using the Pecl YAML parser"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "DeviceDetector\\": ""
- },
- "exclude-from-classmap": [
- "Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "LGPL-3.0-or-later"
- ],
- "authors": [
- {
- "name": "The Matomo Team",
- "email": "hello@matomo.org",
- "homepage": "https://matomo.org/team/"
- }
- ],
- "description": "The Universal Device Detection library, that parses User Agents and detects devices (desktop, tablet, mobile, tv, cars, console, etc.), clients (browsers, media players, mobile apps, feed readers, libraries, etc), operating systems, devices, brands and models.",
- "homepage": "https://matomo.org",
- "keywords": [
- "devicedetection",
- "parser",
- "useragent"
- ],
- "support": {
- "forum": "https://forum.matomo.org/",
- "issues": "https://github.com/matomo-org/device-detector/issues",
- "source": "https://github.com/matomo-org/matomo",
- "wiki": "https://dev.matomo.org/"
- },
- "time": "2023-10-02T10:01:54+00:00"
- },
- {
- "name": "mongodb/mongodb",
- "version": "1.10.0",
- "source": {
- "type": "git",
- "url": "https://github.com/mongodb/mongo-php-library.git",
- "reference": "b0bbd657f84219212487d01a8ffe93a789e1e488"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/mongodb/mongo-php-library/zipball/b0bbd657f84219212487d01a8ffe93a789e1e488",
- "reference": "b0bbd657f84219212487d01a8ffe93a789e1e488",
- "shasum": ""
- },
- "require": {
- "ext-hash": "*",
- "ext-json": "*",
- "ext-mongodb": "^1.11.0",
- "jean85/pretty-package-versions": "^1.2 || ^2.0.1",
- "php": "^7.1 || ^8.0",
- "symfony/polyfill-php80": "^1.19"
- },
- "require-dev": {
- "doctrine/coding-standard": "^9.0",
- "squizlabs/php_codesniffer": "^3.6",
- "symfony/phpunit-bridge": "^5.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.10.x-dev"
- }
- },
- "autoload": {
- "files": [
- "src/functions.php"
- ],
- "psr-4": {
- "MongoDB\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "Andreas Braun",
- "email": "andreas.braun@mongodb.com"
- },
- {
- "name": "Jeremy Mikola",
- "email": "jmikola@gmail.com"
- }
- ],
- "description": "MongoDB driver library",
- "homepage": "https://jira.mongodb.org/browse/PHPLIB",
- "keywords": [
- "database",
- "driver",
- "mongodb",
- "persistence"
- ],
- "support": {
- "issues": "https://github.com/mongodb/mongo-php-library/issues",
- "source": "https://github.com/mongodb/mongo-php-library/tree/1.10.0"
- },
- "time": "2021-10-20T22:22:37+00:00"
- },
- {
- "name": "mustangostang/spyc",
- "version": "0.6.3",
- "source": {
- "type": "git",
- "url": "https://github.com/mustangostang/spyc.git",
- "reference": "4627c838b16550b666d15aeae1e5289dd5b77da0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/mustangostang/spyc/zipball/4627c838b16550b666d15aeae1e5289dd5b77da0",
- "reference": "4627c838b16550b666d15aeae1e5289dd5b77da0",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.1"
- },
- "require-dev": {
- "phpunit/phpunit": "4.3.*@dev"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "0.5.x-dev"
- }
- },
- "autoload": {
- "files": [
- "Spyc.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "mustangostang",
- "email": "vlad.andersen@gmail.com"
- }
- ],
- "description": "A simple YAML loader/dumper class for PHP",
- "homepage": "https://github.com/mustangostang/spyc/",
- "keywords": [
- "spyc",
- "yaml",
- "yml"
- ],
- "support": {
- "issues": "https://github.com/mustangostang/spyc/issues",
- "source": "https://github.com/mustangostang/spyc/tree/0.6.3"
- },
- "time": "2019-09-10T13:16:29+00:00"
- },
- {
- "name": "paragonie/constant_time_encoding",
- "version": "v2.7.0",
- "source": {
- "type": "git",
- "url": "https://github.com/paragonie/constant_time_encoding.git",
- "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/52a0d99e69f56b9ec27ace92ba56897fe6993105",
- "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105",
- "shasum": ""
- },
- "require": {
- "php": "^7|^8"
- },
- "require-dev": {
- "phpunit/phpunit": "^6|^7|^8|^9",
- "vimeo/psalm": "^1|^2|^3|^4"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "ParagonIE\\ConstantTime\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Paragon Initiative Enterprises",
- "email": "security@paragonie.com",
- "homepage": "https://paragonie.com",
- "role": "Maintainer"
- },
- {
- "name": "Steve 'Sc00bz' Thomas",
- "email": "steve@tobtu.com",
- "homepage": "https://www.tobtu.com",
- "role": "Original Developer"
- }
- ],
- "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
- "keywords": [
- "base16",
- "base32",
- "base32_decode",
- "base32_encode",
- "base64",
- "base64_decode",
- "base64_encode",
- "bin2hex",
- "encoding",
- "hex",
- "hex2bin",
- "rfc4648"
- ],
- "support": {
- "email": "info@paragonie.com",
- "issues": "https://github.com/paragonie/constant_time_encoding/issues",
- "source": "https://github.com/paragonie/constant_time_encoding"
- },
- "time": "2024-05-08T12:18:48+00:00"
- },
- {
- "name": "phpmailer/phpmailer",
- "version": "v6.9.1",
- "source": {
- "type": "git",
- "url": "https://github.com/PHPMailer/PHPMailer.git",
- "reference": "039de174cd9c17a8389754d3b877a2ed22743e18"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/039de174cd9c17a8389754d3b877a2ed22743e18",
- "reference": "039de174cd9c17a8389754d3b877a2ed22743e18",
- "shasum": ""
- },
- "require": {
- "ext-ctype": "*",
- "ext-filter": "*",
- "ext-hash": "*",
- "php": ">=5.5.0"
- },
- "require-dev": {
- "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
- "doctrine/annotations": "^1.2.6 || ^1.13.3",
- "php-parallel-lint/php-console-highlighter": "^1.0.0",
- "php-parallel-lint/php-parallel-lint": "^1.3.2",
- "phpcompatibility/php-compatibility": "^9.3.5",
- "roave/security-advisories": "dev-latest",
- "squizlabs/php_codesniffer": "^3.7.2",
- "yoast/phpunit-polyfills": "^1.0.4"
- },
- "suggest": {
- "decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication",
- "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
- "ext-openssl": "Needed for secure SMTP sending and DKIM signing",
- "greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication",
- "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
- "league/oauth2-google": "Needed for Google XOAUTH2 authentication",
- "psr/log": "For optional PSR-3 debug logging",
- "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)",
- "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "PHPMailer\\PHPMailer\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "LGPL-2.1-only"
- ],
- "authors": [
- {
- "name": "Marcus Bointon",
- "email": "phpmailer@synchromedia.co.uk"
- },
- {
- "name": "Jim Jagielski",
- "email": "jimjag@gmail.com"
- },
- {
- "name": "Andy Prevost",
- "email": "codeworxtech@users.sourceforge.net"
- },
- {
- "name": "Brent R. Matzelle"
- }
- ],
- "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
- "support": {
- "issues": "https://github.com/PHPMailer/PHPMailer/issues",
- "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.1"
- },
- "funding": [
- {
- "url": "https://github.com/Synchro",
- "type": "github"
- }
- ],
- "time": "2023-11-25T22:23:28+00:00"
- },
- {
- "name": "spomky-labs/otphp",
- "version": "v10.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/Spomky-Labs/otphp.git",
- "reference": "9784d9f7c790eed26e102d6c78f12c754036c366"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/9784d9f7c790eed26e102d6c78f12c754036c366",
- "reference": "9784d9f7c790eed26e102d6c78f12c754036c366",
- "shasum": ""
- },
- "require": {
- "beberlei/assert": "^3.0",
- "ext-mbstring": "*",
- "paragonie/constant_time_encoding": "^2.0",
- "php": "^7.2|^8.0",
- "thecodingmachine/safe": "^0.1.14|^1.0|^2.0"
- },
- "require-dev": {
- "php-coveralls/php-coveralls": "^2.0",
- "phpstan/phpstan": "^0.12",
- "phpstan/phpstan-beberlei-assert": "^0.12",
- "phpstan/phpstan-deprecation-rules": "^0.12",
- "phpstan/phpstan-phpunit": "^0.12",
- "phpstan/phpstan-strict-rules": "^0.12",
- "phpunit/phpunit": "^8.0",
- "thecodingmachine/phpstan-safe-rule": "^1.0 || ^2.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "v10.0": "10.0.x-dev",
- "v9.0": "9.0.x-dev",
- "v8.3": "8.3.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "OTPHP\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Florent Morselli",
- "homepage": "https://github.com/Spomky"
- },
- {
- "name": "All contributors",
- "homepage": "https://github.com/Spomky-Labs/otphp/contributors"
- }
- ],
- "description": "A PHP library for generating one time passwords according to RFC 4226 (HOTP Algorithm) and the RFC 6238 (TOTP Algorithm) and compatible with Google Authenticator",
- "homepage": "https://github.com/Spomky-Labs/otphp",
- "keywords": [
- "FreeOTP",
- "RFC 4226",
- "RFC 6238",
- "google authenticator",
- "hotp",
- "otp",
- "totp"
- ],
- "support": {
- "issues": "https://github.com/Spomky-Labs/otphp/issues",
- "source": "https://github.com/Spomky-Labs/otphp/tree/v10.0.3"
- },
- "time": "2022-03-17T08:00:35+00:00"
- },
- {
- "name": "symfony/polyfill-mbstring",
- "version": "v1.29.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
- "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
- "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.29.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-01-29T20:11:03+00:00"
- },
- {
- "name": "symfony/polyfill-php80",
- "version": "v1.29.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
- "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
- "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.29.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-01-29T20:11:03+00:00"
- },
- {
- "name": "thecodingmachine/safe",
- "version": "v2.5.0",
- "source": {
- "type": "git",
- "url": "https://github.com/thecodingmachine/safe.git",
- "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/3115ecd6b4391662b4931daac4eba6b07a2ac1f0",
- "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0",
- "shasum": ""
- },
- "require": {
- "php": "^8.0"
- },
- "require-dev": {
- "phpstan/phpstan": "^1.5",
- "phpunit/phpunit": "^9.5",
- "squizlabs/php_codesniffer": "^3.2",
- "thecodingmachine/phpstan-strict-rules": "^1.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.2.x-dev"
- }
- },
- "autoload": {
- "files": [
- "deprecated/apc.php",
- "deprecated/array.php",
- "deprecated/datetime.php",
- "deprecated/libevent.php",
- "deprecated/misc.php",
- "deprecated/password.php",
- "deprecated/mssql.php",
- "deprecated/stats.php",
- "deprecated/strings.php",
- "lib/special_cases.php",
- "deprecated/mysqli.php",
- "generated/apache.php",
- "generated/apcu.php",
- "generated/array.php",
- "generated/bzip2.php",
- "generated/calendar.php",
- "generated/classobj.php",
- "generated/com.php",
- "generated/cubrid.php",
- "generated/curl.php",
- "generated/datetime.php",
- "generated/dir.php",
- "generated/eio.php",
- "generated/errorfunc.php",
- "generated/exec.php",
- "generated/fileinfo.php",
- "generated/filesystem.php",
- "generated/filter.php",
- "generated/fpm.php",
- "generated/ftp.php",
- "generated/funchand.php",
- "generated/gettext.php",
- "generated/gmp.php",
- "generated/gnupg.php",
- "generated/hash.php",
- "generated/ibase.php",
- "generated/ibmDb2.php",
- "generated/iconv.php",
- "generated/image.php",
- "generated/imap.php",
- "generated/info.php",
- "generated/inotify.php",
- "generated/json.php",
- "generated/ldap.php",
- "generated/libxml.php",
- "generated/lzf.php",
- "generated/mailparse.php",
- "generated/mbstring.php",
- "generated/misc.php",
- "generated/mysql.php",
- "generated/network.php",
- "generated/oci8.php",
- "generated/opcache.php",
- "generated/openssl.php",
- "generated/outcontrol.php",
- "generated/pcntl.php",
- "generated/pcre.php",
- "generated/pgsql.php",
- "generated/posix.php",
- "generated/ps.php",
- "generated/pspell.php",
- "generated/readline.php",
- "generated/rpminfo.php",
- "generated/rrd.php",
- "generated/sem.php",
- "generated/session.php",
- "generated/shmop.php",
- "generated/sockets.php",
- "generated/sodium.php",
- "generated/solr.php",
- "generated/spl.php",
- "generated/sqlsrv.php",
- "generated/ssdeep.php",
- "generated/ssh2.php",
- "generated/stream.php",
- "generated/strings.php",
- "generated/swoole.php",
- "generated/uodbc.php",
- "generated/uopz.php",
- "generated/url.php",
- "generated/var.php",
- "generated/xdiff.php",
- "generated/xml.php",
- "generated/xmlrpc.php",
- "generated/yaml.php",
- "generated/yaz.php",
- "generated/zip.php",
- "generated/zlib.php"
- ],
- "classmap": [
- "lib/DateTime.php",
- "lib/DateTimeImmutable.php",
- "lib/Exceptions/",
- "deprecated/Exceptions/",
- "generated/Exceptions/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "PHP core functions that throw exceptions instead of returning FALSE on error",
- "support": {
- "issues": "https://github.com/thecodingmachine/safe/issues",
- "source": "https://github.com/thecodingmachine/safe/tree/v2.5.0"
- },
- "time": "2023-04-05T11:54:14+00:00"
- },
- {
- "name": "utopia-php/abuse",
- "version": "0.37.0",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/abuse.git",
- "reference": "2de5c12886cbd516e511e559afdd9e615d871062"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/abuse/zipball/2de5c12886cbd516e511e559afdd9e615d871062",
- "reference": "2de5c12886cbd516e511e559afdd9e615d871062",
- "shasum": ""
- },
- "require": {
- "ext-curl": "*",
- "ext-pdo": "*",
- "php": ">=8.0",
- "utopia-php/database": "0.49.*"
- },
- "require-dev": {
- "laravel/pint": "1.5.*",
- "phpstan/phpstan": "^1.9",
- "phpunit/phpunit": "^9.4"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Abuse\\": "src/Abuse"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple abuse library to manage application usage limits",
- "keywords": [
- "Abuse",
- "framework",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/abuse/issues",
- "source": "https://github.com/utopia-php/abuse/tree/0.37.0"
- },
- "time": "2024-03-06T21:20:27+00:00"
- },
- {
- "name": "utopia-php/analytics",
- "version": "0.10.2",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/analytics.git",
- "reference": "14c805114736f44c26d6d24b176a2f8b93d86a1f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/analytics/zipball/14c805114736f44c26d6d24b176a2f8b93d86a1f",
- "reference": "14c805114736f44c26d6d24b176a2f8b93d86a1f",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0",
- "utopia-php/cli": "^0.15.0"
- },
- "require-dev": {
- "laravel/pint": "dev-main",
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Analytics\\": "src/Analytics"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple library to track events & users.",
- "keywords": [
- "analytics",
- "framework",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/analytics/issues",
- "source": "https://github.com/utopia-php/analytics/tree/0.10.2"
- },
- "time": "2023-03-22T12:01:09+00:00"
- },
- {
- "name": "utopia-php/audit",
- "version": "0.39.0",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/audit.git",
- "reference": "f0bc15012e05cc0b9dde012ab27d25f193768a2c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/audit/zipball/f0bc15012e05cc0b9dde012ab27d25f193768a2c",
- "reference": "f0bc15012e05cc0b9dde012ab27d25f193768a2c",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0",
- "utopia-php/database": "0.49.*"
- },
- "require-dev": {
- "laravel/pint": "1.5.*",
- "phpstan/phpstan": "^1.8",
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Audit\\": "src/Audit"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple audit library to manage application users logs",
- "keywords": [
- "Audit",
- "framework",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/audit/issues",
- "source": "https://github.com/utopia-php/audit/tree/0.39.0"
- },
- "time": "2024-03-06T21:20:37+00:00"
- },
- {
- "name": "utopia-php/cache",
- "version": "0.9.1",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/cache.git",
- "reference": "552b4c554bb14d0c529631ce304cdf4a2b9d06a6"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/cache/zipball/552b4c554bb14d0c529631ce304cdf4a2b9d06a6",
- "reference": "552b4c554bb14d0c529631ce304cdf4a2b9d06a6",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "ext-memcached": "*",
- "ext-redis": "*",
- "php": ">=8.0"
- },
- "require-dev": {
- "laravel/pint": "1.2.*",
- "phpstan/phpstan": "1.9.x-dev",
- "phpunit/phpunit": "^9.3",
- "vimeo/psalm": "4.13.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Cache\\": "src/Cache"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple cache library to manage application cache storing, loading and purging",
- "keywords": [
- "cache",
- "framework",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/cache/issues",
- "source": "https://github.com/utopia-php/cache/tree/0.9.1"
- },
- "time": "2024-03-19T17:07:20+00:00"
- },
- {
- "name": "utopia-php/cli",
- "version": "0.15.0",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/cli.git",
- "reference": "ccb7c8125ffe0254fef8f25744bfa376eb7bd0ea"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/cli/zipball/ccb7c8125ffe0254fef8f25744bfa376eb7bd0ea",
- "reference": "ccb7c8125ffe0254fef8f25744bfa376eb7bd0ea",
- "shasum": ""
- },
- "require": {
- "php": ">=7.4",
- "utopia-php/framework": "0.*.*"
- },
- "require-dev": {
- "laravel/pint": "1.2.*",
- "phpunit/phpunit": "^9.3",
- "squizlabs/php_codesniffer": "^3.6",
- "vimeo/psalm": "4.0.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\CLI\\": "src/CLI"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple CLI library to manage command line applications",
- "keywords": [
- "cli",
- "command line",
- "framework",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/cli/issues",
- "source": "https://github.com/utopia-php/cli/tree/0.15.0"
- },
- "time": "2023-03-01T05:55:14+00:00"
- },
- {
- "name": "utopia-php/config",
- "version": "0.2.2",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/config.git",
- "reference": "a3d7bc0312d7150d5e04b1362dc34b2b136908cc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/config/zipball/a3d7bc0312d7150d5e04b1362dc34b2b136908cc",
- "reference": "a3d7bc0312d7150d5e04b1362dc34b2b136908cc",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3",
- "vimeo/psalm": "4.0.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Config\\": "src/Config"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "eldad@appwrite.io"
- }
- ],
- "description": "A simple Config library to managing application config variables",
- "keywords": [
- "config",
- "framework",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/config/issues",
- "source": "https://github.com/utopia-php/config/tree/0.2.2"
- },
- "time": "2020-10-24T09:49:09+00:00"
- },
- {
- "name": "utopia-php/database",
- "version": "0.49.8",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/database.git",
- "reference": "4fb1f6d216f6f628dd5b013e1f539ae2191228b1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/database/zipball/4fb1f6d216f6f628dd5b013e1f539ae2191228b1",
- "reference": "4fb1f6d216f6f628dd5b013e1f539ae2191228b1",
- "shasum": ""
- },
- "require": {
- "ext-mbstring": "*",
- "ext-pdo": "*",
- "php": ">=8.0",
- "utopia-php/cache": "0.9.*",
- "utopia-php/framework": "0.33.*",
- "utopia-php/mongo": "0.3.*"
- },
- "require-dev": {
- "fakerphp/faker": "^1.14",
- "laravel/pint": "1.13.*",
- "pcov/clobber": "^2.0",
- "phpstan/phpstan": "1.10.*",
- "phpunit/phpunit": "^9.4",
- "rregeer/phpunit-coverage-check": "^0.3.1",
- "swoole/ide-helper": "4.8.0",
- "utopia-php/cli": "^0.14.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Database\\": "src/Database"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple library to manage application persistence using multiple database adapters",
- "keywords": [
- "database",
- "framework",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/database/issues",
- "source": "https://github.com/utopia-php/database/tree/0.49.8"
- },
- "time": "2024-05-09T04:43:05+00:00"
- },
- {
- "name": "utopia-php/domains",
- "version": "0.5.0",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/domains.git",
- "reference": "bf07f60326f8389f378ddf6fcde86217e5cfe18c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/domains/zipball/bf07f60326f8389f378ddf6fcde86217e5cfe18c",
- "reference": "bf07f60326f8389f378ddf6fcde86217e5cfe18c",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0",
- "utopia-php/framework": "0.*.*"
- },
- "require-dev": {
- "laravel/pint": "1.2.*",
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Domains\\": "src/Domains"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "eldad@appwrite.io"
- },
- {
- "name": "Wess Cope",
- "email": "wess@appwrite.io"
- }
- ],
- "description": "Utopia Domains library is simple and lite library for parsing web domains. This library is aiming to be as simple and easy to learn and use.",
- "keywords": [
- "domains",
- "framework",
- "icann",
- "php",
- "public suffix",
- "tld",
- "tld extract",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/domains/issues",
- "source": "https://github.com/utopia-php/domains/tree/0.5.0"
- },
- "time": "2024-01-03T22:04:27+00:00"
- },
- {
- "name": "utopia-php/dsn",
- "version": "0.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/dsn.git",
- "reference": "42ee37a3d1785100b2f69091c9d4affadb6846eb"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/dsn/zipball/42ee37a3d1785100b2f69091c9d4affadb6846eb",
- "reference": "42ee37a3d1785100b2f69091c9d4affadb6846eb",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0"
- },
- "require-dev": {
- "laravel/pint": "1.2.*",
- "phpunit/phpunit": "^9.3",
- "squizlabs/php_codesniffer": "^3.6",
- "vimeo/psalm": "4.0.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\DSN\\": "src/DSN"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple library for parsing and managing Data Source Names ( DSNs )",
- "keywords": [
- "dsn",
- "framework",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/dsn/issues",
- "source": "https://github.com/utopia-php/dsn/tree/0.2.1"
- },
- "time": "2024-05-07T02:01:25+00:00"
- },
- {
- "name": "utopia-php/fetch",
- "version": "0.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/fetch.git",
- "reference": "1423c0ee3eef944d816ca6e31706895b585aea82"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/fetch/zipball/1423c0ee3eef944d816ca6e31706895b585aea82",
- "reference": "1423c0ee3eef944d816ca6e31706895b585aea82",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0"
- },
- "require-dev": {
- "laravel/pint": "^1.5.0",
- "phpstan/phpstan": "^1.10",
- "phpunit/phpunit": "^9.5"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Fetch\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple library that provides an interface for making HTTP Requests.",
- "support": {
- "issues": "https://github.com/utopia-php/fetch/issues",
- "source": "https://github.com/utopia-php/fetch/tree/0.2.1"
- },
- "time": "2024-03-18T11:50:59+00:00"
- },
- {
- "name": "utopia-php/framework",
- "version": "0.33.6",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/http.git",
- "reference": "8fe57da0cecd57e3b17cd395b4a666a24f4c07a6"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/http/zipball/8fe57da0cecd57e3b17cd395b4a666a24f4c07a6",
- "reference": "8fe57da0cecd57e3b17cd395b4a666a24f4c07a6",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0"
- },
- "require-dev": {
- "laravel/pint": "^1.2",
- "phpbench/phpbench": "^1.2",
- "phpstan/phpstan": "^1.10",
- "phpunit/phpunit": "^9.5.25"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple, light and advanced PHP framework",
- "keywords": [
- "framework",
- "php",
- "upf"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/http/issues",
- "source": "https://github.com/utopia-php/http/tree/0.33.6"
- },
- "time": "2024-03-21T18:10:57+00:00"
- },
- {
- "name": "utopia-php/image",
- "version": "0.6.1",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/image.git",
- "reference": "2d74c27e69e65a93cf94a16586598a04fe435bf0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/image/zipball/2d74c27e69e65a93cf94a16586598a04fe435bf0",
- "reference": "2d74c27e69e65a93cf94a16586598a04fe435bf0",
- "shasum": ""
- },
- "require": {
- "ext-imagick": "*",
- "php": ">=8.0"
- },
- "require-dev": {
- "laravel/pint": "1.2.*",
- "phpstan/phpstan": "1.9.x-dev",
- "phpunit/phpunit": "^9.3",
- "vimeo/psalm": "4.13.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Image\\": "src/Image"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple Image manipulation library",
- "keywords": [
- "framework",
- "image",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/image/issues",
- "source": "https://github.com/utopia-php/image/tree/0.6.1"
- },
- "time": "2024-02-05T13:31:44+00:00"
- },
- {
- "name": "utopia-php/locale",
- "version": "0.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/locale.git",
- "reference": "c2d9358d0fe2f6b6ed5448369f9d1e430c615447"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/locale/zipball/c2d9358d0fe2f6b6ed5448369f9d1e430c615447",
- "reference": "c2d9358d0fe2f6b6ed5448369f9d1e430c615447",
- "shasum": ""
- },
- "require": {
- "php": ">=7.4"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3",
- "vimeo/psalm": "4.0.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Locale\\": "src/Locale"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "eldad@appwrite.io"
- }
- ],
- "description": "A simple locale library to manage application translations",
- "keywords": [
- "framework",
- "locale",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/locale/issues",
- "source": "https://github.com/utopia-php/locale/tree/0.4.0"
- },
- "time": "2021-07-24T11:35:55+00:00"
- },
- {
- "name": "utopia-php/logger",
- "version": "0.3.2",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/logger.git",
- "reference": "ba763c10688fe2ed715ad2bed3f13d18dfec6253"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/logger/zipball/ba763c10688fe2ed715ad2bed3f13d18dfec6253",
- "reference": "ba763c10688fe2ed715ad2bed3f13d18dfec6253",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0"
- },
- "require-dev": {
- "phpstan/phpstan": "1.9.x-dev",
- "phpunit/phpunit": "^9.3",
- "vimeo/psalm": "4.0.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Logger\\": "src/Logger"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Utopia Logger library is simple and lite library for logging information, such as errors or warnings. This library is aiming to be as simple and easy to learn and use.",
- "keywords": [
- "appsignal",
- "errors",
- "framework",
- "logger",
- "logging",
- "logs",
- "php",
- "raygun",
- "sentry",
- "upf",
- "utopia",
- "warnings"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/logger/issues",
- "source": "https://github.com/utopia-php/logger/tree/0.3.2"
- },
- "time": "2023-11-22T14:45:43+00:00"
- },
- {
- "name": "utopia-php/messaging",
- "version": "dev-get-country-code",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/messaging.git",
- "reference": "724ba39fd7d5f701f54370201050e423b9de005f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/messaging/zipball/724ba39fd7d5f701f54370201050e423b9de005f",
- "reference": "724ba39fd7d5f701f54370201050e423b9de005f",
- "shasum": ""
- },
- "require": {
- "ext-curl": "*",
- "ext-openssl": "*",
- "giggsey/libphonenumber-for-php-lite": "8.13.36",
- "php": ">=8.0.0",
- "phpmailer/phpmailer": "6.9.1"
- },
- "require-dev": {
- "laravel/pint": "1.13.11",
- "phpstan/phpstan": "1.10.58",
- "phpunit/phpunit": "10.5.10"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Messaging\\": "src/Utopia/Messaging"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple, light and advanced PHP messaging library",
- "keywords": [
- "library",
- "messaging",
- "php",
- "upf",
- "utopia",
- "utopia-php"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/messaging/issues",
- "source": "https://github.com/utopia-php/messaging/tree/get-country-code"
- },
- "time": "2024-05-08T17:06:19+00:00"
- },
- {
- "name": "utopia-php/migration",
- "version": "0.4.1",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/migration.git",
- "reference": "ae3cfe93f6d313105d226aeb68806660c806a925"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/migration/zipball/ae3cfe93f6d313105d226aeb68806660c806a925",
- "reference": "ae3cfe93f6d313105d226aeb68806660c806a925",
- "shasum": ""
- },
- "require": {
- "appwrite/appwrite": "10.1.0",
- "php": "8.*",
- "utopia-php/cli": "0.*"
- },
- "require-dev": {
- "laravel/pint": "1.*",
- "phpunit/phpunit": "9.*",
- "vlucas/phpdotenv": "5.*"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Migration\\": "src/Migration"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple library to migrate resources between services.",
- "keywords": [
- "framework",
- "migration",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/migration/issues",
- "source": "https://github.com/utopia-php/migration/tree/0.4.1"
- },
- "time": "2024-05-01T13:19:18+00:00"
- },
- {
- "name": "utopia-php/mongo",
- "version": "0.3.1",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/mongo.git",
- "reference": "52326a9a43e2d27ff0c15c48ba746dacbe9a7aee"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/mongo/zipball/52326a9a43e2d27ff0c15c48ba746dacbe9a7aee",
- "reference": "52326a9a43e2d27ff0c15c48ba746dacbe9a7aee",
- "shasum": ""
- },
- "require": {
- "ext-mongodb": "*",
- "mongodb/mongodb": "1.10.0",
- "php": ">=8.0"
- },
- "require-dev": {
- "fakerphp/faker": "^1.14",
- "laravel/pint": "1.2.*",
- "phpstan/phpstan": "1.8.*",
- "phpunit/phpunit": "^9.4",
- "swoole/ide-helper": "4.8.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Mongo\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "eldad@appwrite.io"
- },
- {
- "name": "Wess",
- "email": "wess@appwrite.io"
- }
- ],
- "description": "A simple library to manage Mongo database",
- "keywords": [
- "database",
- "mongo",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/mongo/issues",
- "source": "https://github.com/utopia-php/mongo/tree/0.3.1"
- },
- "time": "2023-09-01T17:25:28+00:00"
- },
- {
- "name": "utopia-php/orchestration",
- "version": "0.9.1",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/orchestration.git",
- "reference": "55f43513b3f940a3f4f9c2cde7682d0c2581beb0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/orchestration/zipball/55f43513b3f940a3f4f9c2cde7682d0c2581beb0",
- "reference": "55f43513b3f940a3f4f9c2cde7682d0c2581beb0",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0",
- "utopia-php/cli": "0.15.*"
- },
- "require-dev": {
- "laravel/pint": "^1.2",
- "phpunit/phpunit": "^9.3",
- "vimeo/psalm": "4.0.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Orchestration\\": "src/Orchestration"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Lite & fast micro PHP abstraction library for container orchestration",
- "keywords": [
- "docker",
- "framework",
- "kubernetes",
- "orchestration",
- "php",
- "swarm",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/orchestration/issues",
- "source": "https://github.com/utopia-php/orchestration/tree/0.9.1"
- },
- "time": "2023-03-17T15:05:06+00:00"
- },
- {
- "name": "utopia-php/platform",
- "version": "0.5.1",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/platform.git",
- "reference": "3eceef0b6593fe0f7d2efd36d40402a395a4c285"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/platform/zipball/3eceef0b6593fe0f7d2efd36d40402a395a4c285",
- "reference": "3eceef0b6593fe0f7d2efd36d40402a395a4c285",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "ext-redis": "*",
- "php": ">=8.0",
- "utopia-php/cli": "0.15.*",
- "utopia-php/framework": "0.*.*"
- },
- "require-dev": {
- "laravel/pint": "1.2.*",
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Platform\\": "src/Platform"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Light and Fast Platform Library",
- "keywords": [
- "framework",
- "php",
- "platform",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/platform/issues",
- "source": "https://github.com/utopia-php/platform/tree/0.5.1"
- },
- "time": "2023-12-26T16:14:41+00:00"
- },
- {
- "name": "utopia-php/pools",
- "version": "0.5.0",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/pools.git",
- "reference": "6f716a213a08db95eda1b5dddfa90983c1834817"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/pools/zipball/6f716a213a08db95eda1b5dddfa90983c1834817",
- "reference": "6f716a213a08db95eda1b5dddfa90983c1834817",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0"
- },
- "require-dev": {
- "laravel/pint": "1.2.*",
- "phpstan/phpstan": "1.8.*",
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Pools\\": "src/Pools"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Team Appwrite",
- "email": "team@appwrite.io"
- }
- ],
- "description": "A simple library to manage connection pools",
- "keywords": [
- "framework",
- "php",
- "pools",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/pools/issues",
- "source": "https://github.com/utopia-php/pools/tree/0.5.0"
- },
- "time": "2024-04-19T11:11:54+00:00"
- },
- {
- "name": "utopia-php/preloader",
- "version": "0.2.4",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/preloader.git",
- "reference": "65ef48392e72172f584b0baa2e224f9a1cebcce0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/preloader/zipball/65ef48392e72172f584b0baa2e224f9a1cebcce0",
- "reference": "65ef48392e72172f584b0baa2e224f9a1cebcce0",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3",
- "vimeo/psalm": "4.0.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Preloader\\": "src/Preloader"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "team@appwrite.io"
- }
- ],
- "description": "Utopia Preloader library is simple and lite library for managing PHP preloading configuration",
- "keywords": [
- "framework",
- "php",
- "preload",
- "preloader",
- "preloading",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/preloader/issues",
- "source": "https://github.com/utopia-php/preloader/tree/0.2.4"
- },
- "time": "2020-10-24T07:04:59+00:00"
- },
- {
- "name": "utopia-php/queue",
- "version": "0.7.0",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/queue.git",
- "reference": "917565256eb94bcab7246f7a746b1a486813761b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/queue/zipball/917565256eb94bcab7246f7a746b1a486813761b",
- "reference": "917565256eb94bcab7246f7a746b1a486813761b",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0",
- "utopia-php/cli": "0.15.*",
- "utopia-php/framework": "0.*.*"
- },
- "require-dev": {
- "laravel/pint": "^0.2.3",
- "phpstan/phpstan": "^1.8",
- "phpunit/phpunit": "^9.5.5",
- "swoole/ide-helper": "4.8.8",
- "workerman/workerman": "^4.0"
- },
- "suggest": {
- "ext-swoole": "Needed to support Swoole.",
- "workerman/workerman": "Needed to support Workerman."
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Queue\\": "src/Queue"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Torsten Dittmann",
- "email": "torsten@appwrite.io"
- }
- ],
- "description": "A powerful task queue.",
- "keywords": [
- "Tasks",
- "framework",
- "php",
- "queue",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/queue/issues",
- "source": "https://github.com/utopia-php/queue/tree/0.7.0"
- },
- "time": "2024-01-17T19:00:43+00:00"
- },
- {
- "name": "utopia-php/registry",
- "version": "0.5.0",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/registry.git",
- "reference": "bedc4ed54527b2803e6dfdccc39449f98522b70d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/registry/zipball/bedc4ed54527b2803e6dfdccc39449f98522b70d",
- "reference": "bedc4ed54527b2803e6dfdccc39449f98522b70d",
- "shasum": ""
- },
- "require": {
- "php": ">=7.4"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3",
- "vimeo/psalm": "4.0.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Registry\\": "src/Registry"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "eldad@appwrite.io"
- }
- ],
- "description": "A simple dependency management library for PHP",
- "keywords": [
- "dependency management",
- "di",
- "framework",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/registry/issues",
- "source": "https://github.com/utopia-php/registry/tree/0.5.0"
- },
- "time": "2021-03-10T10:45:22+00:00"
- },
- {
- "name": "utopia-php/storage",
- "version": "0.18.4",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/storage.git",
- "reference": "94ab8758fabcefee5c5fa723616e45719833f922"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/storage/zipball/94ab8758fabcefee5c5fa723616e45719833f922",
- "reference": "94ab8758fabcefee5c5fa723616e45719833f922",
- "shasum": ""
- },
- "require": {
- "ext-brotli": "*",
- "ext-fileinfo": "*",
- "ext-lz4": "*",
- "ext-snappy": "*",
- "ext-xz": "*",
- "ext-zlib": "*",
- "ext-zstd": "*",
- "php": ">=8.0",
- "utopia-php/framework": "0.*.*",
- "utopia-php/system": "0.*.*"
- },
- "require-dev": {
- "laravel/pint": "1.2.*",
- "phpunit/phpunit": "^9.3",
- "vimeo/psalm": "4.0.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Storage\\": "src/Storage"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple Storage library to manage application storage",
- "keywords": [
- "framework",
- "php",
- "storage",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/storage/issues",
- "source": "https://github.com/utopia-php/storage/tree/0.18.4"
- },
- "time": "2024-04-02T08:24:09+00:00"
- },
- {
- "name": "utopia-php/swoole",
- "version": "0.8.2",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/swoole.git",
- "reference": "5fa9d42c608ad46a4ce42a6d2b2eae00592fccd4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/swoole/zipball/5fa9d42c608ad46a4ce42a6d2b2eae00592fccd4",
- "reference": "5fa9d42c608ad46a4ce42a6d2b2eae00592fccd4",
- "shasum": ""
- },
- "require": {
- "ext-swoole": "*",
- "php": ">=8.0",
- "utopia-php/framework": "0.33.*"
- },
- "require-dev": {
- "laravel/pint": "1.2.*",
- "phpstan/phpstan": "^1.10",
- "phpunit/phpunit": "^9.3",
- "swoole/ide-helper": "5.0.2"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Swoole\\": "src/Swoole"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "An extension for Utopia Framework to work with PHP Swoole as a PHP FPM alternative",
- "keywords": [
- "framework",
- "http",
- "php",
- "server",
- "swoole",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/swoole/issues",
- "source": "https://github.com/utopia-php/swoole/tree/0.8.2"
- },
- "time": "2024-02-01T14:54:12+00:00"
- },
- {
- "name": "utopia-php/system",
- "version": "0.8.0",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/system.git",
- "reference": "a2cbfb3c69b9ecb8b6f06c5774f3cf279ea7665e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/system/zipball/a2cbfb3c69b9ecb8b6f06c5774f3cf279ea7665e",
- "reference": "a2cbfb3c69b9ecb8b6f06c5774f3cf279ea7665e",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0.0"
- },
- "require-dev": {
- "laravel/pint": "1.13.*",
- "phpstan/phpstan": "1.10.*",
- "phpunit/phpunit": "9.6.*"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\System\\": "src/System"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "eldad@appwrite.io"
- },
- {
- "name": "Torsten Dittmann",
- "email": "torsten@appwrite.io"
- }
- ],
- "description": "A simple library for obtaining information about the host's system.",
- "keywords": [
- "framework",
- "php",
- "system",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/system/issues",
- "source": "https://github.com/utopia-php/system/tree/0.8.0"
- },
- "time": "2024-04-01T10:22:28+00:00"
- },
- {
- "name": "utopia-php/vcs",
- "version": "0.6.5",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/vcs.git",
- "reference": "104e47ea8e38c156ec0e0bd415caa3dcd5046fe2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/vcs/zipball/104e47ea8e38c156ec0e0bd415caa3dcd5046fe2",
- "reference": "104e47ea8e38c156ec0e0bd415caa3dcd5046fe2",
- "shasum": ""
- },
- "require": {
- "adhocore/jwt": "^1.1",
- "php": ">=8.0",
- "utopia-php/cache": "^0.9.0",
- "utopia-php/framework": "0.*.*"
- },
- "require-dev": {
- "laravel/pint": "1.2.*",
- "phpstan/phpstan": "1.8.*",
- "phpunit/phpunit": "^9.4"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\VCS\\": "src/VCS",
- "Utopia\\Detector\\": "src/Detector"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple library to integrate version control systems like GitHub, GitLab etc. to receive webhook events",
- "keywords": [
- "framework",
- "php",
- "utopia",
- "vcs"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/vcs/issues",
- "source": "https://github.com/utopia-php/vcs/tree/0.6.5"
- },
- "time": "2024-01-08T17:11:12+00:00"
- },
- {
- "name": "utopia-php/websocket",
- "version": "0.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/websocket.git",
- "reference": "51fcb86171400d8aa40d76c54593481fd273dab5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/websocket/zipball/51fcb86171400d8aa40d76c54593481fd273dab5",
- "reference": "51fcb86171400d8aa40d76c54593481fd273dab5",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.5.5",
- "swoole/ide-helper": "4.6.6",
- "textalk/websocket": "1.5.2",
- "vimeo/psalm": "^4.8.1",
- "workerman/workerman": "^4.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\WebSocket\\": "src/WebSocket"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "eldad@appwrite.io"
- },
- {
- "name": "Torsten Dittmann",
- "email": "torsten@appwrite.io"
- }
- ],
- "description": "A simple abstraction for WebSocket servers.",
- "keywords": [
- "framework",
- "php",
- "upf",
- "utopia",
- "websocket"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/websocket/issues",
- "source": "https://github.com/utopia-php/websocket/tree/0.1.0"
- },
- "time": "2021-12-20T10:50:09+00:00"
- },
- {
- "name": "webmozart/assert",
- "version": "1.11.0",
- "source": {
- "type": "git",
- "url": "https://github.com/webmozarts/assert.git",
- "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991",
- "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991",
- "shasum": ""
- },
- "require": {
- "ext-ctype": "*",
- "php": "^7.2 || ^8.0"
- },
- "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.11.0"
- },
- "time": "2022-06-03T18:03:27+00:00"
- },
- {
- "name": "webonyx/graphql-php",
- "version": "v14.11.10",
- "source": {
- "type": "git",
- "url": "https://github.com/webonyx/graphql-php.git",
- "reference": "d9c2fdebc6aa01d831bc2969da00e8588cffef19"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/d9c2fdebc6aa01d831bc2969da00e8588cffef19",
- "reference": "d9c2fdebc6aa01d831bc2969da00e8588cffef19",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "ext-mbstring": "*",
- "php": "^7.1 || ^8"
- },
- "require-dev": {
- "amphp/amp": "^2.3",
- "doctrine/coding-standard": "^6.0",
- "nyholm/psr7": "^1.2",
- "phpbench/phpbench": "^1.2",
- "phpstan/extension-installer": "^1.0",
- "phpstan/phpstan": "0.12.82",
- "phpstan/phpstan-phpunit": "0.12.18",
- "phpstan/phpstan-strict-rules": "0.12.9",
- "phpunit/phpunit": "^7.2 || ^8.5",
- "psr/http-message": "^1.0",
- "react/promise": "2.*",
- "simpod/php-coveralls-mirror": "^3.0"
- },
- "suggest": {
- "psr/http-message": "To use standard GraphQL server",
- "react/promise": "To leverage async resolving on React PHP platform"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "GraphQL\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A PHP port of GraphQL reference implementation",
- "homepage": "https://github.com/webonyx/graphql-php",
- "keywords": [
- "api",
- "graphql"
- ],
- "support": {
- "issues": "https://github.com/webonyx/graphql-php/issues",
- "source": "https://github.com/webonyx/graphql-php/tree/v14.11.10"
- },
- "funding": [
- {
- "url": "https://opencollective.com/webonyx-graphql-php",
- "type": "open_collective"
- }
- ],
- "time": "2023-07-05T14:23:37+00:00"
- }
- ],
- "packages-dev": [
- {
- "name": "appwrite/sdk-generator",
- "version": "0.38.2",
- "source": {
- "type": "git",
- "url": "https://github.com/appwrite/sdk-generator.git",
- "reference": "51284668529e2b10ed933412a42b603c76cded23"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/51284668529e2b10ed933412a42b603c76cded23",
- "reference": "51284668529e2b10ed933412a42b603c76cded23",
- "shasum": ""
- },
- "require": {
- "ext-curl": "*",
- "ext-json": "*",
- "ext-mbstring": "*",
- "matthiasmullie/minify": "1.3.*",
- "php": ">=8.0",
- "twig/twig": "v3.8.*"
- },
- "require-dev": {
- "brianium/paratest": "v7.4.*",
- "phpunit/phpunit": "10.5.*",
- "squizlabs/php_codesniffer": "3.9.*"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Appwrite\\SDK\\": "src/SDK",
- "Appwrite\\Spec\\": "src/Spec"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "eldad@appwrite.io"
- }
- ],
- "description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
- "support": {
- "issues": "https://github.com/appwrite/sdk-generator/issues",
- "source": "https://github.com/appwrite/sdk-generator/tree/0.38.2"
- },
- "time": "2024-04-25T07:49:29+00:00"
- },
- {
- "name": "doctrine/deprecations",
- "version": "1.1.3",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/deprecations.git",
- "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
- "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "doctrine/coding-standard": "^9",
- "phpstan/phpstan": "1.4.10 || 1.10.15",
- "phpstan/phpstan-phpunit": "^1.0",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
- "psalm/plugin-phpunit": "0.18.4",
- "psr/log": "^1 || ^2 || ^3",
- "vimeo/psalm": "4.30.0 || 5.12.0"
- },
- "suggest": {
- "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
- "homepage": "https://www.doctrine-project.org/",
- "support": {
- "issues": "https://github.com/doctrine/deprecations/issues",
- "source": "https://github.com/doctrine/deprecations/tree/1.1.3"
- },
- "time": "2024-01-30T19:34:25+00:00"
- },
- {
- "name": "doctrine/instantiator",
- "version": "1.5.0",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/instantiator.git",
- "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b",
- "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "doctrine/coding-standard": "^9 || ^11",
- "ext-pdo": "*",
- "ext-phar": "*",
- "phpbench/phpbench": "^0.16 || ^1",
- "phpstan/phpstan": "^1.4",
- "phpstan/phpstan-phpunit": "^1",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
- "vimeo/psalm": "^4.30 || ^5.4"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com",
- "homepage": "https://ocramius.github.io/"
- }
- ],
- "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
- "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
- "keywords": [
- "constructor",
- "instantiate"
- ],
- "support": {
- "issues": "https://github.com/doctrine/instantiator/issues",
- "source": "https://github.com/doctrine/instantiator/tree/1.5.0"
- },
- "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%2Finstantiator",
- "type": "tidelift"
- }
- ],
- "time": "2022-12-30T00:15:36+00:00"
- },
- {
- "name": "laravel/pint",
- "version": "v1.15.3",
- "source": {
- "type": "git",
- "url": "https://github.com/laravel/pint.git",
- "reference": "3600b5d17aff52f6100ea4921849deacbbeb8656"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/laravel/pint/zipball/3600b5d17aff52f6100ea4921849deacbbeb8656",
- "reference": "3600b5d17aff52f6100ea4921849deacbbeb8656",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "ext-mbstring": "*",
- "ext-tokenizer": "*",
- "ext-xml": "*",
- "php": "^8.1.0"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "^3.54.0",
- "illuminate/view": "^10.48.8",
- "larastan/larastan": "^2.9.5",
- "laravel-zero/framework": "^10.3.0",
- "mockery/mockery": "^1.6.11",
- "nunomaduro/termwind": "^1.15.1",
- "pestphp/pest": "^2.34.7"
- },
- "bin": [
- "builds/pint"
- ],
- "type": "project",
- "autoload": {
- "psr-4": {
- "App\\": "app/",
- "Database\\Seeders\\": "database/seeders/",
- "Database\\Factories\\": "database/factories/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nuno Maduro",
- "email": "enunomaduro@gmail.com"
- }
- ],
- "description": "An opinionated code formatter for PHP.",
- "homepage": "https://laravel.com",
- "keywords": [
- "format",
- "formatter",
- "lint",
- "linter",
- "php"
- ],
- "support": {
- "issues": "https://github.com/laravel/pint/issues",
- "source": "https://github.com/laravel/pint"
- },
- "time": "2024-04-30T15:02:26+00:00"
- },
- {
- "name": "matthiasmullie/minify",
- "version": "1.3.73",
- "source": {
- "type": "git",
- "url": "https://github.com/matthiasmullie/minify.git",
- "reference": "cb7a9297b4ab070909cefade30ee95054d4ae87a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/matthiasmullie/minify/zipball/cb7a9297b4ab070909cefade30ee95054d4ae87a",
- "reference": "cb7a9297b4ab070909cefade30ee95054d4ae87a",
- "shasum": ""
- },
- "require": {
- "ext-pcre": "*",
- "matthiasmullie/path-converter": "~1.1",
- "php": ">=5.3.0"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": ">=2.0",
- "matthiasmullie/scrapbook": ">=1.3",
- "phpunit/phpunit": ">=4.8",
- "squizlabs/php_codesniffer": ">=3.0"
- },
- "suggest": {
- "psr/cache-implementation": "Cache implementation to use with Minify::cache"
- },
- "bin": [
- "bin/minifycss",
- "bin/minifyjs"
- ],
- "type": "library",
- "autoload": {
- "psr-4": {
- "MatthiasMullie\\Minify\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Matthias Mullie",
- "email": "minify@mullie.eu",
- "homepage": "https://www.mullie.eu",
- "role": "Developer"
- }
- ],
- "description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.",
- "homepage": "https://github.com/matthiasmullie/minify",
- "keywords": [
- "JS",
- "css",
- "javascript",
- "minifier",
- "minify"
- ],
- "support": {
- "issues": "https://github.com/matthiasmullie/minify/issues",
- "source": "https://github.com/matthiasmullie/minify/tree/1.3.73"
- },
- "funding": [
- {
- "url": "https://github.com/matthiasmullie",
- "type": "github"
- }
- ],
- "time": "2024-03-15T10:27:10+00:00"
- },
- {
- "name": "matthiasmullie/path-converter",
- "version": "1.1.3",
- "source": {
- "type": "git",
- "url": "https://github.com/matthiasmullie/path-converter.git",
- "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/matthiasmullie/path-converter/zipball/e7d13b2c7e2f2268e1424aaed02085518afa02d9",
- "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9",
- "shasum": ""
- },
- "require": {
- "ext-pcre": "*",
- "php": ">=5.3.0"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.8"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "MatthiasMullie\\PathConverter\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Matthias Mullie",
- "email": "pathconverter@mullie.eu",
- "homepage": "http://www.mullie.eu",
- "role": "Developer"
- }
- ],
- "description": "Relative path converter",
- "homepage": "http://github.com/matthiasmullie/path-converter",
- "keywords": [
- "converter",
- "path",
- "paths",
- "relative"
- ],
- "support": {
- "issues": "https://github.com/matthiasmullie/path-converter/issues",
- "source": "https://github.com/matthiasmullie/path-converter/tree/1.1.3"
- },
- "time": "2019-02-05T23:41:09+00:00"
- },
- {
- "name": "myclabs/deep-copy",
- "version": "1.11.1",
- "source": {
- "type": "git",
- "url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
- "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "conflict": {
- "doctrine/collections": "<1.6.8",
- "doctrine/common": "<2.13.3 || >=3,<3.2.2"
- },
- "require-dev": {
- "doctrine/collections": "^1.6.8",
- "doctrine/common": "^2.13.3 || ^3.2.2",
- "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
- },
- "type": "library",
- "autoload": {
- "files": [
- "src/DeepCopy/deep_copy.php"
- ],
- "psr-4": {
- "DeepCopy\\": "src/DeepCopy/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Create deep copies (clones) of your objects",
- "keywords": [
- "clone",
- "copy",
- "duplicate",
- "object",
- "object graph"
- ],
- "support": {
- "issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1"
- },
- "funding": [
- {
- "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
- "type": "tidelift"
- }
- ],
- "time": "2023-03-08T13:26:56+00:00"
- },
- {
- "name": "nikic/php-parser",
- "version": "v5.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13",
- "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13",
- "shasum": ""
- },
- "require": {
- "ext-ctype": "*",
- "ext-json": "*",
- "ext-tokenizer": "*",
- "php": ">=7.4"
- },
- "require-dev": {
- "ircmaxell/php-yacc": "^0.0.7",
- "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
- },
- "bin": [
- "bin/php-parse"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "PhpParser\\": "lib/PhpParser"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Nikita Popov"
- }
- ],
- "description": "A PHP parser written in PHP",
- "keywords": [
- "parser",
- "php"
- ],
- "support": {
- "issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2"
- },
- "time": "2024-03-05T20:51:40+00:00"
- },
- {
- "name": "phar-io/manifest",
- "version": "2.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/phar-io/manifest.git",
- "reference": "54750ef60c58e43759730615a392c31c80e23176"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
- "reference": "54750ef60c58e43759730615a392c31c80e23176",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-libxml": "*",
- "ext-phar": "*",
- "ext-xmlwriter": "*",
- "phar-io/version": "^3.0.1",
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Heuer",
- "email": "sebastian@phpeople.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "Developer"
- }
- ],
- "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
- "support": {
- "issues": "https://github.com/phar-io/manifest/issues",
- "source": "https://github.com/phar-io/manifest/tree/2.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/theseer",
- "type": "github"
- }
- ],
- "time": "2024-03-03T12:33:53+00:00"
- },
- {
- "name": "phar-io/version",
- "version": "3.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/phar-io/version.git",
- "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
- "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Heuer",
- "email": "sebastian@phpeople.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "Developer"
- }
- ],
- "description": "Library for handling version information and constraints",
- "support": {
- "issues": "https://github.com/phar-io/version/issues",
- "source": "https://github.com/phar-io/version/tree/3.2.1"
- },
- "time": "2022-02-21T01:04:05+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.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "298d2febfe79d03fe714eb871d5538da55205b1a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/298d2febfe79d03fe714eb871d5538da55205b1a",
- "reference": "298d2febfe79d03fe714eb871d5538da55205b1a",
- "shasum": ""
- },
- "require": {
- "doctrine/deprecations": "^1.1",
- "ext-filter": "*",
- "php": "^7.4 || ^8.0",
- "phpdocumentor/reflection-common": "^2.2",
- "phpdocumentor/type-resolver": "^1.7",
- "phpstan/phpdoc-parser": "^1.7",
- "webmozart/assert": "^1.9.1"
- },
- "require-dev": {
- "mockery/mockery": "~1.3.5",
- "phpstan/extension-installer": "^1.1",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-mockery": "^1.1",
- "phpstan/phpstan-webmozart-assert": "^1.2",
- "phpunit/phpunit": "^9.5",
- "vimeo/psalm": "^5.13"
- },
- "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": "opensource@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/5.4.0"
- },
- "time": "2024-04-09T21:13:58+00:00"
- },
- {
- "name": "phpdocumentor/type-resolver",
- "version": "1.8.2",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "153ae662783729388a584b4361f2545e4d841e3c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c",
- "reference": "153ae662783729388a584b4361f2545e4d841e3c",
- "shasum": ""
- },
- "require": {
- "doctrine/deprecations": "^1.0",
- "php": "^7.3 || ^8.0",
- "phpdocumentor/reflection-common": "^2.0",
- "phpstan/phpdoc-parser": "^1.13"
- },
- "require-dev": {
- "ext-tokenizer": "*",
- "phpbench/phpbench": "^1.2",
- "phpstan/extension-installer": "^1.1",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-phpunit": "^1.1",
- "phpunit/phpunit": "^9.5",
- "rector/rector": "^0.13.9",
- "vimeo/psalm": "^4.25"
- },
- "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.8.2"
- },
- "time": "2024-02-23T11:10:43+00:00"
- },
- {
- "name": "phpspec/prophecy",
- "version": "v1.19.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpspec/prophecy.git",
- "reference": "67a759e7d8746d501c41536ba40cd9c0a07d6a87"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/67a759e7d8746d501c41536ba40cd9c0a07d6a87",
- "reference": "67a759e7d8746d501c41536ba40cd9c0a07d6a87",
- "shasum": ""
- },
- "require": {
- "doctrine/instantiator": "^1.2 || ^2.0",
- "php": "^7.2 || 8.0.* || 8.1.* || 8.2.* || 8.3.*",
- "phpdocumentor/reflection-docblock": "^5.2",
- "sebastian/comparator": "^3.0 || ^4.0 || ^5.0 || ^6.0",
- "sebastian/recursion-context": "^3.0 || ^4.0 || ^5.0 || ^6.0"
- },
- "require-dev": {
- "phpspec/phpspec": "^6.0 || ^7.0",
- "phpstan/phpstan": "^1.9",
- "phpunit/phpunit": "^8.0 || ^9.0 || ^10.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Prophecy\\": "src/Prophecy"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Konstantin Kudryashov",
- "email": "ever.zet@gmail.com",
- "homepage": "http://everzet.com"
- },
- {
- "name": "Marcello Duarte",
- "email": "marcello.duarte@gmail.com"
- }
- ],
- "description": "Highly opinionated mocking framework for PHP 5.3+",
- "homepage": "https://github.com/phpspec/prophecy",
- "keywords": [
- "Double",
- "Dummy",
- "dev",
- "fake",
- "mock",
- "spy",
- "stub"
- ],
- "support": {
- "issues": "https://github.com/phpspec/prophecy/issues",
- "source": "https://github.com/phpspec/prophecy/tree/v1.19.0"
- },
- "time": "2024-02-29T11:52:51+00:00"
- },
- {
- "name": "phpstan/phpdoc-parser",
- "version": "1.29.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/536889f2b340489d328f5ffb7b02bb6b183ddedc",
- "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "require-dev": {
- "doctrine/annotations": "^2.0",
- "nikic/php-parser": "^4.15",
- "php-parallel-lint/php-parallel-lint": "^1.2",
- "phpstan/extension-installer": "^1.0",
- "phpstan/phpstan": "^1.5",
- "phpstan/phpstan-phpunit": "^1.1",
- "phpstan/phpstan-strict-rules": "^1.0",
- "phpunit/phpunit": "^9.5",
- "symfony/process": "^5.2"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "PHPStan\\PhpDocParser\\": [
- "src/"
- ]
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "PHPDoc parser with support for nullable, intersection and generic types",
- "support": {
- "issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.0"
- },
- "time": "2024-05-06T12:04:23+00:00"
- },
- {
- "name": "phpunit/php-code-coverage",
- "version": "9.2.31",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965",
- "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-libxml": "*",
- "ext-xmlwriter": "*",
- "nikic/php-parser": "^4.18 || ^5.0",
- "php": ">=7.3",
- "phpunit/php-file-iterator": "^3.0.3",
- "phpunit/php-text-template": "^2.0.2",
- "sebastian/code-unit-reverse-lookup": "^2.0.2",
- "sebastian/complexity": "^2.0",
- "sebastian/environment": "^5.1.2",
- "sebastian/lines-of-code": "^1.0.3",
- "sebastian/version": "^3.0.1",
- "theseer/tokenizer": "^1.2.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-pcov": "PHP extension that provides line coverage",
- "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "9.2-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
- "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
- "keywords": [
- "coverage",
- "testing",
- "xunit"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
- "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2024-03-02T06:37:42+00:00"
- },
- {
- "name": "phpunit/php-file-iterator",
- "version": "3.0.6",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
- "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "FilterIterator implementation that filters files based on a list of suffixes.",
- "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
- "keywords": [
- "filesystem",
- "iterator"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
- "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2021-12-02T12:48:52+00:00"
- },
- {
- "name": "phpunit/php-invoker",
- "version": "3.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-invoker.git",
- "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
- "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "ext-pcntl": "*",
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-pcntl": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.1-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Invoke callables with a timeout",
- "homepage": "https://github.com/sebastianbergmann/php-invoker/",
- "keywords": [
- "process"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
- "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T05:58:55+00:00"
- },
- {
- "name": "phpunit/php-text-template",
- "version": "2.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-text-template.git",
- "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
- "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Simple template engine.",
- "homepage": "https://github.com/sebastianbergmann/php-text-template/",
- "keywords": [
- "template"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
- "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T05:33:50+00:00"
- },
- {
- "name": "phpunit/php-timer",
- "version": "5.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
- "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Utility class for timing",
- "homepage": "https://github.com/sebastianbergmann/php-timer/",
- "keywords": [
- "timer"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-timer/issues",
- "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:16:10+00:00"
- },
- {
- "name": "phpunit/phpunit",
- "version": "9.5.20",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba",
- "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba",
- "shasum": ""
- },
- "require": {
- "doctrine/instantiator": "^1.3.1",
- "ext-dom": "*",
- "ext-json": "*",
- "ext-libxml": "*",
- "ext-mbstring": "*",
- "ext-xml": "*",
- "ext-xmlwriter": "*",
- "myclabs/deep-copy": "^1.10.1",
- "phar-io/manifest": "^2.0.3",
- "phar-io/version": "^3.0.2",
- "php": ">=7.3",
- "phpspec/prophecy": "^1.12.1",
- "phpunit/php-code-coverage": "^9.2.13",
- "phpunit/php-file-iterator": "^3.0.5",
- "phpunit/php-invoker": "^3.1.1",
- "phpunit/php-text-template": "^2.0.3",
- "phpunit/php-timer": "^5.0.2",
- "sebastian/cli-parser": "^1.0.1",
- "sebastian/code-unit": "^1.0.6",
- "sebastian/comparator": "^4.0.5",
- "sebastian/diff": "^4.0.3",
- "sebastian/environment": "^5.1.3",
- "sebastian/exporter": "^4.0.3",
- "sebastian/global-state": "^5.0.1",
- "sebastian/object-enumerator": "^4.0.3",
- "sebastian/resource-operations": "^3.0.3",
- "sebastian/type": "^3.0",
- "sebastian/version": "^3.0.2"
- },
- "require-dev": {
- "ext-pdo": "*",
- "phpspec/prophecy-phpunit": "^2.0.1"
- },
- "suggest": {
- "ext-soap": "*",
- "ext-xdebug": "*"
- },
- "bin": [
- "phpunit"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "9.5-dev"
- }
- },
- "autoload": {
- "files": [
- "src/Framework/Assert/Functions.php"
- ],
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "The PHP Unit Testing framework.",
- "homepage": "https://phpunit.de/",
- "keywords": [
- "phpunit",
- "testing",
- "xunit"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/phpunit/issues",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20"
- },
- "funding": [
- {
- "url": "https://phpunit.de/sponsors.html",
- "type": "custom"
- },
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2022-04-01T12:37:26+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": "sebastian/cli-parser",
- "version": "1.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/cli-parser.git",
- "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
- "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library for parsing CLI options",
- "homepage": "https://github.com/sebastianbergmann/cli-parser",
- "support": {
- "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
- "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2024-03-02T06:27:43+00:00"
- },
- {
- "name": "sebastian/code-unit",
- "version": "1.0.8",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit.git",
- "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
- "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Collection of value objects that represent the PHP code units",
- "homepage": "https://github.com/sebastianbergmann/code-unit",
- "support": {
- "issues": "https://github.com/sebastianbergmann/code-unit/issues",
- "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:08:54+00:00"
- },
- {
- "name": "sebastian/code-unit-reverse-lookup",
- "version": "2.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
- "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
- "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Looks up which function or method a line of code belongs to",
- "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
- "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T05:30:19+00:00"
- },
- {
- "name": "sebastian/comparator",
- "version": "4.0.8",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "fa0f136dd2334583309d32b62544682ee972b51a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a",
- "reference": "fa0f136dd2334583309d32b62544682ee972b51a",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3",
- "sebastian/diff": "^4.0",
- "sebastian/exporter": "^4.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Volker Dusch",
- "email": "github@wallbash.com"
- },
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@2bepublished.at"
- }
- ],
- "description": "Provides the functionality to compare PHP values for equality",
- "homepage": "https://github.com/sebastianbergmann/comparator",
- "keywords": [
- "comparator",
- "compare",
- "equality"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/comparator/issues",
- "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2022-09-14T12:41:17+00:00"
- },
- {
- "name": "sebastian/complexity",
- "version": "2.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/complexity.git",
- "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a",
- "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a",
- "shasum": ""
- },
- "require": {
- "nikic/php-parser": "^4.18 || ^5.0",
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library for calculating the complexity of PHP code units",
- "homepage": "https://github.com/sebastianbergmann/complexity",
- "support": {
- "issues": "https://github.com/sebastianbergmann/complexity/issues",
- "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-12-22T06:19:30+00:00"
- },
- {
- "name": "sebastian/diff",
- "version": "4.0.6",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc",
- "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3",
- "symfony/process": "^4.2 || ^5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Kore Nordmann",
- "email": "mail@kore-nordmann.de"
- }
- ],
- "description": "Diff implementation",
- "homepage": "https://github.com/sebastianbergmann/diff",
- "keywords": [
- "diff",
- "udiff",
- "unidiff",
- "unified diff"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/diff/issues",
- "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2024-03-02T06:30:58+00:00"
- },
- {
- "name": "sebastian/environment",
- "version": "5.1.5",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
- "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-posix": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.1-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Provides functionality to handle HHVM/PHP environments",
- "homepage": "http://www.github.com/sebastianbergmann/environment",
- "keywords": [
- "Xdebug",
- "environment",
- "hhvm"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/environment/issues",
- "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-02-03T06:03:51+00:00"
- },
- {
- "name": "sebastian/exporter",
- "version": "4.0.6",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72",
- "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3",
- "sebastian/recursion-context": "^4.0"
- },
- "require-dev": {
- "ext-mbstring": "*",
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Volker Dusch",
- "email": "github@wallbash.com"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
- },
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "Provides the functionality to export PHP variables for visualization",
- "homepage": "https://www.github.com/sebastianbergmann/exporter",
- "keywords": [
- "export",
- "exporter"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/exporter/issues",
- "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2024-03-02T06:33:00+00:00"
- },
- {
- "name": "sebastian/global-state",
- "version": "5.0.7",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
- "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3",
- "sebastian/object-reflector": "^2.0",
- "sebastian/recursion-context": "^4.0"
- },
- "require-dev": {
- "ext-dom": "*",
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-uopz": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Snapshotting of global state",
- "homepage": "http://www.github.com/sebastianbergmann/global-state",
- "keywords": [
- "global state"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/global-state/issues",
- "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2024-03-02T06:35:11+00:00"
- },
- {
- "name": "sebastian/lines-of-code",
- "version": "1.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/lines-of-code.git",
- "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5",
- "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5",
- "shasum": ""
- },
- "require": {
- "nikic/php-parser": "^4.18 || ^5.0",
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library for counting the lines of code in PHP source code",
- "homepage": "https://github.com/sebastianbergmann/lines-of-code",
- "support": {
- "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
- "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-12-22T06:20:34+00:00"
- },
- {
- "name": "sebastian/object-enumerator",
- "version": "4.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/object-enumerator.git",
- "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
- "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3",
- "sebastian/object-reflector": "^2.0",
- "sebastian/recursion-context": "^4.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Traverses array structures and object graphs to enumerate all referenced objects",
- "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
- "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:12:34+00:00"
- },
- {
- "name": "sebastian/object-reflector",
- "version": "2.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/object-reflector.git",
- "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
- "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Allows reflection of object attributes, including inherited and non-public ones",
- "homepage": "https://github.com/sebastianbergmann/object-reflector/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
- "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:14:26+00:00"
- },
- {
- "name": "sebastian/recursion-context",
- "version": "4.0.5",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
- "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
- }
- ],
- "description": "Provides functionality to recursively process PHP variables",
- "homepage": "https://github.com/sebastianbergmann/recursion-context",
- "support": {
- "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
- "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-02-03T06:07:39+00:00"
- },
- {
- "name": "sebastian/resource-operations",
- "version": "3.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/resource-operations.git",
- "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
- "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Provides a list of PHP built-in functions that operate on resources",
- "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
- "support": {
- "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2024-03-14T16:00:52+00:00"
- },
- {
- "name": "sebastian/type",
- "version": "3.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/type.git",
- "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
- "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.2-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Collection of value objects that represent the types of the PHP type system",
- "homepage": "https://github.com/sebastianbergmann/type",
- "support": {
- "issues": "https://github.com/sebastianbergmann/type/issues",
- "source": "https://github.com/sebastianbergmann/type/tree/3.2.1"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-02-03T06:13:03+00:00"
- },
- {
- "name": "sebastian/version",
- "version": "3.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/version.git",
- "reference": "c6c1022351a901512170118436c764e473f6de8c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
- "reference": "c6c1022351a901512170118436c764e473f6de8c",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library that helps with managing the version number of Git-hosted PHP projects",
- "homepage": "https://github.com/sebastianbergmann/version",
- "support": {
- "issues": "https://github.com/sebastianbergmann/version/issues",
- "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T06:39:44+00:00"
- },
- {
- "name": "swoole/ide-helper",
- "version": "5.1.2",
- "source": {
- "type": "git",
- "url": "https://github.com/swoole/ide-helper.git",
- "reference": "33ec7af9111b76d06a70dd31191cc74793551112"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/swoole/ide-helper/zipball/33ec7af9111b76d06a70dd31191cc74793551112",
- "reference": "33ec7af9111b76d06a70dd31191cc74793551112",
- "shasum": ""
- },
- "type": "library",
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "Team Swoole",
- "email": "team@swoole.com"
- }
- ],
- "description": "IDE help files for Swoole.",
- "support": {
- "issues": "https://github.com/swoole/ide-helper/issues",
- "source": "https://github.com/swoole/ide-helper/tree/5.1.2"
- },
- "time": "2024-02-01T22:28:11+00:00"
- },
- {
- "name": "symfony/polyfill-ctype",
- "version": "v1.29.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4",
- "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4",
- "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.29.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-01-29T20:11:03+00:00"
- },
- {
- "name": "textalk/websocket",
- "version": "1.5.7",
- "source": {
- "type": "git",
- "url": "https://github.com/Textalk/websocket-php.git",
- "reference": "1712325e99b6bf869ccbf9bf41ab749e7328ea46"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Textalk/websocket-php/zipball/1712325e99b6bf869ccbf9bf41ab749e7328ea46",
- "reference": "1712325e99b6bf869ccbf9bf41ab749e7328ea46",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 | ^8.0",
- "psr/log": "^1 | ^2 | ^3"
- },
- "require-dev": {
- "php-coveralls/php-coveralls": "^2.0",
- "phpunit/phpunit": "^8.0|^9.0",
- "squizlabs/php_codesniffer": "^3.5"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "WebSocket\\": "lib"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "ISC"
- ],
- "authors": [
- {
- "name": "Fredrik Liljegren"
- },
- {
- "name": "Sören Jensen",
- "email": "soren@abicart.se"
- }
- ],
- "description": "WebSocket client and server",
- "support": {
- "issues": "https://github.com/Textalk/websocket-php/issues",
- "source": "https://github.com/Textalk/websocket-php/tree/1.5.7"
- },
- "time": "2022-03-29T09:46:59+00:00"
- },
- {
- "name": "theseer/tokenizer",
- "version": "1.2.3",
- "source": {
- "type": "git",
- "url": "https://github.com/theseer/tokenizer.git",
- "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
- "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-tokenizer": "*",
- "ext-xmlwriter": "*",
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- }
- ],
- "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
- "support": {
- "issues": "https://github.com/theseer/tokenizer/issues",
- "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
- },
- "funding": [
- {
- "url": "https://github.com/theseer",
- "type": "github"
- }
- ],
- "time": "2024-03-03T12:36:25+00:00"
- },
- {
- "name": "twig/twig",
- "version": "v3.8.0",
- "source": {
- "type": "git",
- "url": "https://github.com/twigphp/Twig.git",
- "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/twigphp/Twig/zipball/9d15f0ac07f44dc4217883ec6ae02fd555c6f71d",
- "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/polyfill-ctype": "^1.8",
- "symfony/polyfill-mbstring": "^1.3",
- "symfony/polyfill-php80": "^1.22"
- },
- "require-dev": {
- "psr/container": "^1.0|^2.0",
- "symfony/phpunit-bridge": "^5.4.9|^6.3|^7.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Twig\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com",
- "homepage": "http://fabien.potencier.org",
- "role": "Lead Developer"
- },
- {
- "name": "Twig Team",
- "role": "Contributors"
- },
- {
- "name": "Armin Ronacher",
- "email": "armin.ronacher@active-4.com",
- "role": "Project Founder"
- }
- ],
- "description": "Twig, the flexible, fast, and secure template language for PHP",
- "homepage": "https://twig.symfony.com",
- "keywords": [
- "templating"
- ],
- "support": {
- "issues": "https://github.com/twigphp/Twig/issues",
- "source": "https://github.com/twigphp/Twig/tree/v3.8.0"
- },
- "funding": [
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/twig/twig",
- "type": "tidelift"
- }
- ],
- "time": "2023-11-21T18:54:41+00:00"
- }
- ],
- "aliases": [
- {
- "package": "utopia-php/messaging",
- "version": "dev-get-country-code",
- "alias": "0.3.0",
- "alias_normalized": "0.3.0.0"
- }
- ],
- "minimum-stability": "stable",
- "stability-flags": {
- "utopia-php/messaging": 20
- },
- "prefer-stable": false,
- "prefer-lowest": false,
- "platform": {
- "php": ">=8.0.0",
- "ext-curl": "*",
- "ext-imagick": "*",
- "ext-mbstring": "*",
- "ext-json": "*",
- "ext-yaml": "*",
- "ext-dom": "*",
- "ext-redis": "*",
- "ext-swoole": "*",
- "ext-pdo": "*",
- "ext-openssl": "*",
- "ext-zlib": "*",
- "ext-sockets": "*"
- },
- "platform-dev": {
- "ext-fileinfo": "*"
- },
- "platform-overrides": {
- "php": "8.3"
- },
- "plugin-api-version": "2.2.0"
-}
From d185002d0c6c12ae55de97b40739f537e060fd68 Mon Sep 17 00:00:00 2001
From: shimon
Date: Sun, 12 May 2024 18:23:45 +0300
Subject: [PATCH 077/138] composer format
---
composer.lock | 5626 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 5626 insertions(+)
create mode 100644 composer.lock
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 0000000000..9bcd30d3d8
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,5626 @@
+{
+ "_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": "f84bed324e62bcce0704288ac759e477",
+ "packages": [
+ {
+ "name": "adhocore/jwt",
+ "version": "1.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/adhocore/php-jwt.git",
+ "reference": "6c434af7170090bb7a8880d2bc220a2254ba7899"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/adhocore/php-jwt/zipball/6c434af7170090bb7a8880d2bc220a2254ba7899",
+ "reference": "6c434af7170090bb7a8880d2bc220a2254ba7899",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.5 || ^7.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Ahc\\Jwt\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jitendra Adhikari",
+ "email": "jiten.adhikary@gmail.com"
+ }
+ ],
+ "description": "Ultra lightweight JSON web token (JWT) library for PHP5.5+.",
+ "keywords": [
+ "auth",
+ "json-web-token",
+ "jwt",
+ "jwt-auth",
+ "jwt-php",
+ "token"
+ ],
+ "support": {
+ "issues": "https://github.com/adhocore/php-jwt/issues",
+ "source": "https://github.com/adhocore/php-jwt/tree/1.1.2"
+ },
+ "funding": [
+ {
+ "url": "https://paypal.me/ji10",
+ "type": "custom"
+ }
+ ],
+ "time": "2021-02-20T09:56:44+00:00"
+ },
+ {
+ "name": "appwrite/appwrite",
+ "version": "10.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/appwrite/sdk-for-php.git",
+ "reference": "da579af70723cfc117b5af84375bdef117e27312"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/appwrite/sdk-for-php/zipball/da579af70723cfc117b5af84375bdef117e27312",
+ "reference": "da579af70723cfc117b5af84375bdef117e27312",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "ext-json": "*",
+ "php": ">=7.1.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "3.7.35"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Appwrite\\": "src/Appwrite"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "description": "Appwrite is an open-source self-hosted backend server that abstract and simplify complex and repetitive development tasks behind a very simple REST API",
+ "support": {
+ "email": "team@appwrite.io",
+ "issues": "https://github.com/appwrite/sdk-for-php/issues",
+ "source": "https://github.com/appwrite/sdk-for-php/tree/10.1.0",
+ "url": "https://appwrite.io/support"
+ },
+ "time": "2023-11-20T09:56:12+00:00"
+ },
+ {
+ "name": "appwrite/php-clamav",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/appwrite/php-clamav.git",
+ "reference": "f3897169f5c1f365312238a516ae9465f804634f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/appwrite/php-clamav/zipball/f3897169f5c1f365312238a516ae9465f804634f",
+ "reference": "f3897169f5c1f365312238a516ae9465f804634f",
+ "shasum": ""
+ },
+ "require": {
+ "ext-sockets": "*",
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Appwrite\\ClamAV\\": "src/ClamAV"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "eldad@appwrite.io"
+ }
+ ],
+ "description": "ClamAV network and pipe client for PHP",
+ "keywords": [
+ "anti virus",
+ "appwrite",
+ "clamav",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/appwrite/php-clamav/issues",
+ "source": "https://github.com/appwrite/php-clamav/tree/2.0.0"
+ },
+ "time": "2023-02-24T09:50:42+00:00"
+ },
+ {
+ "name": "appwrite/php-runtimes",
+ "version": "0.13.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/appwrite/runtimes.git",
+ "reference": "ba24c3a163f1a1da6cd355db92def508d05e59f7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/appwrite/runtimes/zipball/ba24c3a163f1a1da6cd355db92def508d05e59f7",
+ "reference": "ba24c3a163f1a1da6cd355db92def508d05e59f7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0",
+ "utopia-php/system": "0.8.*"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3",
+ "vimeo/psalm": "4.0.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Appwrite\\Runtimes\\": "src/Runtimes"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "eldad@appwrite.io"
+ },
+ {
+ "name": "Torsten Dittmann",
+ "email": "torsten@appwrite.io"
+ }
+ ],
+ "description": "Appwrite repository for Cloud Function runtimes that contains the configurations and tests for all of the Appwrite runtime environments.",
+ "keywords": [
+ "appwrite",
+ "php",
+ "runtimes"
+ ],
+ "support": {
+ "issues": "https://github.com/appwrite/runtimes/issues",
+ "source": "https://github.com/appwrite/runtimes/tree/0.13.5"
+ },
+ "time": "2024-04-01T10:35:02+00:00"
+ },
+ {
+ "name": "beberlei/assert",
+ "version": "v3.3.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/beberlei/assert.git",
+ "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/beberlei/assert/zipball/cb70015c04be1baee6f5f5c953703347c0ac1655",
+ "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "ext-simplexml": "*",
+ "php": "^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "*",
+ "phpstan/phpstan": "*",
+ "phpunit/phpunit": ">=6.0.0",
+ "yoast/phpunit-polyfills": "^0.1.0"
+ },
+ "suggest": {
+ "ext-intl": "Needed to allow Assertion::count(), Assertion::isCountable(), Assertion::minCount(), and Assertion::maxCount() to operate on ResourceBundles"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "lib/Assert/functions.php"
+ ],
+ "psr-4": {
+ "Assert\\": "lib/Assert"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de",
+ "role": "Lead Developer"
+ },
+ {
+ "name": "Richard Quadling",
+ "email": "rquadling@gmail.com",
+ "role": "Collaborator"
+ }
+ ],
+ "description": "Thin assertion library for input validation in business models.",
+ "keywords": [
+ "assert",
+ "assertion",
+ "validation"
+ ],
+ "support": {
+ "issues": "https://github.com/beberlei/assert/issues",
+ "source": "https://github.com/beberlei/assert/tree/v3.3.2"
+ },
+ "time": "2021-12-16T21:41:27+00:00"
+ },
+ {
+ "name": "chillerlan/php-qrcode",
+ "version": "4.3.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/chillerlan/php-qrcode.git",
+ "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
+ "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
+ "shasum": ""
+ },
+ "require": {
+ "chillerlan/php-settings-container": "^2.1.4",
+ "ext-mbstring": "*",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "phan/phan": "^5.3",
+ "phpunit/phpunit": "^9.5",
+ "setasign/fpdf": "^1.8.2"
+ },
+ "suggest": {
+ "chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.",
+ "setasign/fpdf": "Required to use the QR FPDF output."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "chillerlan\\QRCode\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kazuhiko Arase",
+ "homepage": "https://github.com/kazuhikoarase"
+ },
+ {
+ "name": "Smiley",
+ "email": "smiley@chillerlan.net",
+ "homepage": "https://github.com/codemasher"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/chillerlan/php-qrcode/graphs/contributors"
+ }
+ ],
+ "description": "A QR code generator. PHP 7.4+",
+ "homepage": "https://github.com/chillerlan/php-qrcode",
+ "keywords": [
+ "phpqrcode",
+ "qr",
+ "qr code",
+ "qrcode",
+ "qrcode-generator"
+ ],
+ "support": {
+ "issues": "https://github.com/chillerlan/php-qrcode/issues",
+ "source": "https://github.com/chillerlan/php-qrcode/tree/4.3.4"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4",
+ "type": "custom"
+ },
+ {
+ "url": "https://ko-fi.com/codemasher",
+ "type": "ko_fi"
+ }
+ ],
+ "time": "2022-07-25T09:12:45+00:00"
+ },
+ {
+ "name": "chillerlan/php-settings-container",
+ "version": "2.1.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/chillerlan/php-settings-container.git",
+ "reference": "f705310389264c3578fdd9ffb15aa2cd6d91772e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/f705310389264c3578fdd9ffb15aa2cd6d91772e",
+ "reference": "f705310389264c3578fdd9ffb15aa2cd6d91772e",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "phan/phan": "^5.4",
+ "phpcsstandards/php_codesniffer": "^3.8",
+ "phpmd/phpmd": "^2.13",
+ "phpunit/phpunit": "^9.6"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "chillerlan\\Settings\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Smiley",
+ "email": "smiley@chillerlan.net",
+ "homepage": "https://github.com/codemasher"
+ }
+ ],
+ "description": "A container class for immutable settings objects. Not a DI container. PHP 7.4+",
+ "homepage": "https://github.com/chillerlan/php-settings-container",
+ "keywords": [
+ "PHP7",
+ "Settings",
+ "configuration",
+ "container",
+ "helper"
+ ],
+ "support": {
+ "issues": "https://github.com/chillerlan/php-settings-container/issues",
+ "source": "https://github.com/chillerlan/php-settings-container"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4",
+ "type": "custom"
+ },
+ {
+ "url": "https://ko-fi.com/codemasher",
+ "type": "ko_fi"
+ }
+ ],
+ "time": "2024-01-05T23:20:55+00:00"
+ },
+ {
+ "name": "dragonmantank/cron-expression",
+ "version": "v3.3.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dragonmantank/cron-expression.git",
+ "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/782ca5968ab8b954773518e9e49a6f892a34b2a8",
+ "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2|^8.0",
+ "webmozart/assert": "^1.0"
+ },
+ "replace": {
+ "mtdowling/cron-expression": "^1.0"
+ },
+ "require-dev": {
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^1.0",
+ "phpstan/phpstan-webmozart-assert": "^1.0",
+ "phpunit/phpunit": "^7.0|^8.0|^9.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Cron\\": "src/Cron/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Chris Tankersley",
+ "email": "chris@ctankersley.com",
+ "homepage": "https://github.com/dragonmantank"
+ }
+ ],
+ "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due",
+ "keywords": [
+ "cron",
+ "schedule"
+ ],
+ "support": {
+ "issues": "https://github.com/dragonmantank/cron-expression/issues",
+ "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/dragonmantank",
+ "type": "github"
+ }
+ ],
+ "time": "2022-09-10T18:51:20+00:00"
+ },
+ {
+ "name": "giggsey/libphonenumber-for-php-lite",
+ "version": "8.13.36",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/giggsey/libphonenumber-for-php-lite.git",
+ "reference": "144bbe70d67664b5245910a475c7190ff140ab4b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php-lite/zipball/144bbe70d67664b5245910a475c7190ff140ab4b",
+ "reference": "144bbe70d67664b5245910a475c7190ff140ab4b",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1",
+ "symfony/polyfill-mbstring": "^1.17"
+ },
+ "conflict": {
+ "giggsey/libphonenumber-for-php": "*"
+ },
+ "require-dev": {
+ "ext-dom": "*",
+ "friendsofphp/php-cs-fixer": "^3.12",
+ "infection/infection": "^0.28",
+ "pear/pear-core-minimal": "^1.10.11",
+ "pear/pear_exception": "^1.0.2",
+ "pear/versioncontrol_git": "^0.7",
+ "phing/phing": "^2.17.4",
+ "phpstan/extension-installer": "^1.2",
+ "phpstan/phpstan": "^1.8",
+ "phpstan/phpstan-phpunit": "^1.2",
+ "phpunit/phpunit": "^10.5",
+ "symfony/console": "^6.0",
+ "symfony/var-exporter": "^6.0"
+ },
+ "suggest": {
+ "giggsey/libphonenumber-for-php": "Use libphonenumber-for-php for geocoding, carriers, timezones and matching"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "libphonenumber\\": "src/"
+ },
+ "exclude-from-classmap": [
+ "/src/data/",
+ "/src/carrier/data/",
+ "/src/geocoding/data/",
+ "/src/timezone/data/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Joshua Gigg",
+ "email": "giggsey@gmail.com",
+ "homepage": "https://giggsey.com/"
+ }
+ ],
+ "description": "A lite version of giggsey/libphonenumber-for-php, which is a PHP Port of Google's libphonenumber",
+ "homepage": "https://github.com/giggsey/libphonenumber-for-php-lite",
+ "keywords": [
+ "geocoding",
+ "geolocation",
+ "libphonenumber",
+ "mobile",
+ "phonenumber",
+ "validation"
+ ],
+ "support": {
+ "issues": "https://github.com/giggsey/libphonenumber-for-php-lite/issues",
+ "source": "https://github.com/giggsey/libphonenumber-for-php-lite"
+ },
+ "time": "2024-05-03T06:31:11+00:00"
+ },
+ {
+ "name": "jean85/pretty-package-versions",
+ "version": "2.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Jean85/pretty-package-versions.git",
+ "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/f9fdd29ad8e6d024f52678b570e5593759b550b4",
+ "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4",
+ "shasum": ""
+ },
+ "require": {
+ "composer-runtime-api": "^2.0.0",
+ "php": "^7.1|^8.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.2",
+ "jean85/composer-provided-replaced-stub-package": "^1.0",
+ "phpstan/phpstan": "^1.4",
+ "phpunit/phpunit": "^7.5|^8.5|^9.4",
+ "vimeo/psalm": "^4.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Jean85\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Alessandro Lai",
+ "email": "alessandro.lai85@gmail.com"
+ }
+ ],
+ "description": "A library to get pretty versions strings of installed dependencies",
+ "keywords": [
+ "composer",
+ "package",
+ "release",
+ "versions"
+ ],
+ "support": {
+ "issues": "https://github.com/Jean85/pretty-package-versions/issues",
+ "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.6"
+ },
+ "time": "2024-03-08T09:58:59+00:00"
+ },
+ {
+ "name": "league/csv",
+ "version": "9.14.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/csv.git",
+ "reference": "34bf0df7340b60824b9449b5c526fcc3325070d5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/csv/zipball/34bf0df7340b60824b9449b5c526fcc3325070d5",
+ "reference": "34bf0df7340b60824b9449b5c526fcc3325070d5",
+ "shasum": ""
+ },
+ "require": {
+ "ext-filter": "*",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "php": "^8.1.2"
+ },
+ "require-dev": {
+ "doctrine/collections": "^2.1.4",
+ "ext-dom": "*",
+ "ext-xdebug": "*",
+ "friendsofphp/php-cs-fixer": "^v3.22.0",
+ "phpbench/phpbench": "^1.2.15",
+ "phpstan/phpstan": "^1.10.50",
+ "phpstan/phpstan-deprecation-rules": "^1.1.4",
+ "phpstan/phpstan-phpunit": "^1.3.15",
+ "phpstan/phpstan-strict-rules": "^1.5.2",
+ "phpunit/phpunit": "^10.5.3",
+ "symfony/var-dumper": "^6.4.0"
+ },
+ "suggest": {
+ "ext-dom": "Required to use the XMLConverter and the HTMLConverter classes",
+ "ext-iconv": "Needed to ease transcoding CSV using iconv stream filters"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "League\\Csv\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ignace Nyamagana Butera",
+ "email": "nyamsprod@gmail.com",
+ "homepage": "https://github.com/nyamsprod/",
+ "role": "Developer"
+ }
+ ],
+ "description": "CSV data manipulation made easy in PHP",
+ "homepage": "https://csv.thephpleague.com",
+ "keywords": [
+ "convert",
+ "csv",
+ "export",
+ "filter",
+ "import",
+ "read",
+ "transform",
+ "write"
+ ],
+ "support": {
+ "docs": "https://csv.thephpleague.com",
+ "issues": "https://github.com/thephpleague/csv/issues",
+ "rss": "https://github.com/thephpleague/csv/releases.atom",
+ "source": "https://github.com/thephpleague/csv"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/nyamsprod",
+ "type": "github"
+ }
+ ],
+ "time": "2023-12-29T07:34:53+00:00"
+ },
+ {
+ "name": "matomo/device-detector",
+ "version": "6.1.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/matomo-org/device-detector.git",
+ "reference": "5cbea85106e561c7138d03603eb6e05128480409"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/matomo-org/device-detector/zipball/5cbea85106e561c7138d03603eb6e05128480409",
+ "reference": "5cbea85106e561c7138d03603eb6e05128480409",
+ "shasum": ""
+ },
+ "require": {
+ "mustangostang/spyc": "*",
+ "php": "^7.2|^8.0"
+ },
+ "replace": {
+ "piwik/device-detector": "self.version"
+ },
+ "require-dev": {
+ "matthiasmullie/scrapbook": "^1.4.7",
+ "mayflower/mo4-coding-standard": "^v8.0.0",
+ "phpstan/phpstan": "^0.12.52",
+ "phpunit/phpunit": "^8.5.8",
+ "psr/cache": "^1.0.1",
+ "psr/simple-cache": "^1.0.1",
+ "symfony/yaml": "^5.1.7"
+ },
+ "suggest": {
+ "doctrine/cache": "Can directly be used for caching purpose",
+ "ext-yaml": "Necessary for using the Pecl YAML parser"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "DeviceDetector\\": ""
+ },
+ "exclude-from-classmap": [
+ "Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "The Matomo Team",
+ "email": "hello@matomo.org",
+ "homepage": "https://matomo.org/team/"
+ }
+ ],
+ "description": "The Universal Device Detection library, that parses User Agents and detects devices (desktop, tablet, mobile, tv, cars, console, etc.), clients (browsers, media players, mobile apps, feed readers, libraries, etc), operating systems, devices, brands and models.",
+ "homepage": "https://matomo.org",
+ "keywords": [
+ "devicedetection",
+ "parser",
+ "useragent"
+ ],
+ "support": {
+ "forum": "https://forum.matomo.org/",
+ "issues": "https://github.com/matomo-org/device-detector/issues",
+ "source": "https://github.com/matomo-org/matomo",
+ "wiki": "https://dev.matomo.org/"
+ },
+ "time": "2023-10-02T10:01:54+00:00"
+ },
+ {
+ "name": "mongodb/mongodb",
+ "version": "1.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mongodb/mongo-php-library.git",
+ "reference": "b0bbd657f84219212487d01a8ffe93a789e1e488"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mongodb/mongo-php-library/zipball/b0bbd657f84219212487d01a8ffe93a789e1e488",
+ "reference": "b0bbd657f84219212487d01a8ffe93a789e1e488",
+ "shasum": ""
+ },
+ "require": {
+ "ext-hash": "*",
+ "ext-json": "*",
+ "ext-mongodb": "^1.11.0",
+ "jean85/pretty-package-versions": "^1.2 || ^2.0.1",
+ "php": "^7.1 || ^8.0",
+ "symfony/polyfill-php80": "^1.19"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9.0",
+ "squizlabs/php_codesniffer": "^3.6",
+ "symfony/phpunit-bridge": "^5.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.10.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "MongoDB\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Andreas Braun",
+ "email": "andreas.braun@mongodb.com"
+ },
+ {
+ "name": "Jeremy Mikola",
+ "email": "jmikola@gmail.com"
+ }
+ ],
+ "description": "MongoDB driver library",
+ "homepage": "https://jira.mongodb.org/browse/PHPLIB",
+ "keywords": [
+ "database",
+ "driver",
+ "mongodb",
+ "persistence"
+ ],
+ "support": {
+ "issues": "https://github.com/mongodb/mongo-php-library/issues",
+ "source": "https://github.com/mongodb/mongo-php-library/tree/1.10.0"
+ },
+ "time": "2021-10-20T22:22:37+00:00"
+ },
+ {
+ "name": "mustangostang/spyc",
+ "version": "0.6.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mustangostang/spyc.git",
+ "reference": "4627c838b16550b666d15aeae1e5289dd5b77da0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mustangostang/spyc/zipball/4627c838b16550b666d15aeae1e5289dd5b77da0",
+ "reference": "4627c838b16550b666d15aeae1e5289dd5b77da0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.3.*@dev"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "0.5.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "Spyc.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "mustangostang",
+ "email": "vlad.andersen@gmail.com"
+ }
+ ],
+ "description": "A simple YAML loader/dumper class for PHP",
+ "homepage": "https://github.com/mustangostang/spyc/",
+ "keywords": [
+ "spyc",
+ "yaml",
+ "yml"
+ ],
+ "support": {
+ "issues": "https://github.com/mustangostang/spyc/issues",
+ "source": "https://github.com/mustangostang/spyc/tree/0.6.3"
+ },
+ "time": "2019-09-10T13:16:29+00:00"
+ },
+ {
+ "name": "paragonie/constant_time_encoding",
+ "version": "v2.7.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/paragonie/constant_time_encoding.git",
+ "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/52a0d99e69f56b9ec27ace92ba56897fe6993105",
+ "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7|^8"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6|^7|^8|^9",
+ "vimeo/psalm": "^1|^2|^3|^4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "ParagonIE\\ConstantTime\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com",
+ "role": "Maintainer"
+ },
+ {
+ "name": "Steve 'Sc00bz' Thomas",
+ "email": "steve@tobtu.com",
+ "homepage": "https://www.tobtu.com",
+ "role": "Original Developer"
+ }
+ ],
+ "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
+ "keywords": [
+ "base16",
+ "base32",
+ "base32_decode",
+ "base32_encode",
+ "base64",
+ "base64_decode",
+ "base64_encode",
+ "bin2hex",
+ "encoding",
+ "hex",
+ "hex2bin",
+ "rfc4648"
+ ],
+ "support": {
+ "email": "info@paragonie.com",
+ "issues": "https://github.com/paragonie/constant_time_encoding/issues",
+ "source": "https://github.com/paragonie/constant_time_encoding"
+ },
+ "time": "2024-05-08T12:18:48+00:00"
+ },
+ {
+ "name": "phpmailer/phpmailer",
+ "version": "v6.9.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPMailer/PHPMailer.git",
+ "reference": "039de174cd9c17a8389754d3b877a2ed22743e18"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/039de174cd9c17a8389754d3b877a2ed22743e18",
+ "reference": "039de174cd9c17a8389754d3b877a2ed22743e18",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-filter": "*",
+ "ext-hash": "*",
+ "php": ">=5.5.0"
+ },
+ "require-dev": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
+ "doctrine/annotations": "^1.2.6 || ^1.13.3",
+ "php-parallel-lint/php-console-highlighter": "^1.0.0",
+ "php-parallel-lint/php-parallel-lint": "^1.3.2",
+ "phpcompatibility/php-compatibility": "^9.3.5",
+ "roave/security-advisories": "dev-latest",
+ "squizlabs/php_codesniffer": "^3.7.2",
+ "yoast/phpunit-polyfills": "^1.0.4"
+ },
+ "suggest": {
+ "decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication",
+ "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
+ "ext-openssl": "Needed for secure SMTP sending and DKIM signing",
+ "greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication",
+ "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
+ "league/oauth2-google": "Needed for Google XOAUTH2 authentication",
+ "psr/log": "For optional PSR-3 debug logging",
+ "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)",
+ "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "PHPMailer\\PHPMailer\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1-only"
+ ],
+ "authors": [
+ {
+ "name": "Marcus Bointon",
+ "email": "phpmailer@synchromedia.co.uk"
+ },
+ {
+ "name": "Jim Jagielski",
+ "email": "jimjag@gmail.com"
+ },
+ {
+ "name": "Andy Prevost",
+ "email": "codeworxtech@users.sourceforge.net"
+ },
+ {
+ "name": "Brent R. Matzelle"
+ }
+ ],
+ "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
+ "support": {
+ "issues": "https://github.com/PHPMailer/PHPMailer/issues",
+ "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/Synchro",
+ "type": "github"
+ }
+ ],
+ "time": "2023-11-25T22:23:28+00:00"
+ },
+ {
+ "name": "spomky-labs/otphp",
+ "version": "v10.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Spomky-Labs/otphp.git",
+ "reference": "9784d9f7c790eed26e102d6c78f12c754036c366"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/9784d9f7c790eed26e102d6c78f12c754036c366",
+ "reference": "9784d9f7c790eed26e102d6c78f12c754036c366",
+ "shasum": ""
+ },
+ "require": {
+ "beberlei/assert": "^3.0",
+ "ext-mbstring": "*",
+ "paragonie/constant_time_encoding": "^2.0",
+ "php": "^7.2|^8.0",
+ "thecodingmachine/safe": "^0.1.14|^1.0|^2.0"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.0",
+ "phpstan/phpstan": "^0.12",
+ "phpstan/phpstan-beberlei-assert": "^0.12",
+ "phpstan/phpstan-deprecation-rules": "^0.12",
+ "phpstan/phpstan-phpunit": "^0.12",
+ "phpstan/phpstan-strict-rules": "^0.12",
+ "phpunit/phpunit": "^8.0",
+ "thecodingmachine/phpstan-safe-rule": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "v10.0": "10.0.x-dev",
+ "v9.0": "9.0.x-dev",
+ "v8.3": "8.3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "OTPHP\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Florent Morselli",
+ "homepage": "https://github.com/Spomky"
+ },
+ {
+ "name": "All contributors",
+ "homepage": "https://github.com/Spomky-Labs/otphp/contributors"
+ }
+ ],
+ "description": "A PHP library for generating one time passwords according to RFC 4226 (HOTP Algorithm) and the RFC 6238 (TOTP Algorithm) and compatible with Google Authenticator",
+ "homepage": "https://github.com/Spomky-Labs/otphp",
+ "keywords": [
+ "FreeOTP",
+ "RFC 4226",
+ "RFC 6238",
+ "google authenticator",
+ "hotp",
+ "otp",
+ "totp"
+ ],
+ "support": {
+ "issues": "https://github.com/Spomky-Labs/otphp/issues",
+ "source": "https://github.com/Spomky-Labs/otphp/tree/v10.0.3"
+ },
+ "time": "2022-03-17T08:00:35+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.29.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
+ "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
+ "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.29.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-01-29T20:11:03+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "v1.29.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
+ "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
+ "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.29.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-01-29T20:11:03+00:00"
+ },
+ {
+ "name": "thecodingmachine/safe",
+ "version": "v2.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thecodingmachine/safe.git",
+ "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/3115ecd6b4391662b4931daac4eba6b07a2ac1f0",
+ "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.5",
+ "phpunit/phpunit": "^9.5",
+ "squizlabs/php_codesniffer": "^3.2",
+ "thecodingmachine/phpstan-strict-rules": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "deprecated/apc.php",
+ "deprecated/array.php",
+ "deprecated/datetime.php",
+ "deprecated/libevent.php",
+ "deprecated/misc.php",
+ "deprecated/password.php",
+ "deprecated/mssql.php",
+ "deprecated/stats.php",
+ "deprecated/strings.php",
+ "lib/special_cases.php",
+ "deprecated/mysqli.php",
+ "generated/apache.php",
+ "generated/apcu.php",
+ "generated/array.php",
+ "generated/bzip2.php",
+ "generated/calendar.php",
+ "generated/classobj.php",
+ "generated/com.php",
+ "generated/cubrid.php",
+ "generated/curl.php",
+ "generated/datetime.php",
+ "generated/dir.php",
+ "generated/eio.php",
+ "generated/errorfunc.php",
+ "generated/exec.php",
+ "generated/fileinfo.php",
+ "generated/filesystem.php",
+ "generated/filter.php",
+ "generated/fpm.php",
+ "generated/ftp.php",
+ "generated/funchand.php",
+ "generated/gettext.php",
+ "generated/gmp.php",
+ "generated/gnupg.php",
+ "generated/hash.php",
+ "generated/ibase.php",
+ "generated/ibmDb2.php",
+ "generated/iconv.php",
+ "generated/image.php",
+ "generated/imap.php",
+ "generated/info.php",
+ "generated/inotify.php",
+ "generated/json.php",
+ "generated/ldap.php",
+ "generated/libxml.php",
+ "generated/lzf.php",
+ "generated/mailparse.php",
+ "generated/mbstring.php",
+ "generated/misc.php",
+ "generated/mysql.php",
+ "generated/network.php",
+ "generated/oci8.php",
+ "generated/opcache.php",
+ "generated/openssl.php",
+ "generated/outcontrol.php",
+ "generated/pcntl.php",
+ "generated/pcre.php",
+ "generated/pgsql.php",
+ "generated/posix.php",
+ "generated/ps.php",
+ "generated/pspell.php",
+ "generated/readline.php",
+ "generated/rpminfo.php",
+ "generated/rrd.php",
+ "generated/sem.php",
+ "generated/session.php",
+ "generated/shmop.php",
+ "generated/sockets.php",
+ "generated/sodium.php",
+ "generated/solr.php",
+ "generated/spl.php",
+ "generated/sqlsrv.php",
+ "generated/ssdeep.php",
+ "generated/ssh2.php",
+ "generated/stream.php",
+ "generated/strings.php",
+ "generated/swoole.php",
+ "generated/uodbc.php",
+ "generated/uopz.php",
+ "generated/url.php",
+ "generated/var.php",
+ "generated/xdiff.php",
+ "generated/xml.php",
+ "generated/xmlrpc.php",
+ "generated/yaml.php",
+ "generated/yaz.php",
+ "generated/zip.php",
+ "generated/zlib.php"
+ ],
+ "classmap": [
+ "lib/DateTime.php",
+ "lib/DateTimeImmutable.php",
+ "lib/Exceptions/",
+ "deprecated/Exceptions/",
+ "generated/Exceptions/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PHP core functions that throw exceptions instead of returning FALSE on error",
+ "support": {
+ "issues": "https://github.com/thecodingmachine/safe/issues",
+ "source": "https://github.com/thecodingmachine/safe/tree/v2.5.0"
+ },
+ "time": "2023-04-05T11:54:14+00:00"
+ },
+ {
+ "name": "utopia-php/abuse",
+ "version": "0.37.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/abuse.git",
+ "reference": "2de5c12886cbd516e511e559afdd9e615d871062"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/abuse/zipball/2de5c12886cbd516e511e559afdd9e615d871062",
+ "reference": "2de5c12886cbd516e511e559afdd9e615d871062",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "ext-pdo": "*",
+ "php": ">=8.0",
+ "utopia-php/database": "0.49.*"
+ },
+ "require-dev": {
+ "laravel/pint": "1.5.*",
+ "phpstan/phpstan": "^1.9",
+ "phpunit/phpunit": "^9.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Abuse\\": "src/Abuse"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple abuse library to manage application usage limits",
+ "keywords": [
+ "Abuse",
+ "framework",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/abuse/issues",
+ "source": "https://github.com/utopia-php/abuse/tree/0.37.0"
+ },
+ "time": "2024-03-06T21:20:27+00:00"
+ },
+ {
+ "name": "utopia-php/analytics",
+ "version": "0.10.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/analytics.git",
+ "reference": "14c805114736f44c26d6d24b176a2f8b93d86a1f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/analytics/zipball/14c805114736f44c26d6d24b176a2f8b93d86a1f",
+ "reference": "14c805114736f44c26d6d24b176a2f8b93d86a1f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0",
+ "utopia-php/cli": "^0.15.0"
+ },
+ "require-dev": {
+ "laravel/pint": "dev-main",
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Analytics\\": "src/Analytics"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple library to track events & users.",
+ "keywords": [
+ "analytics",
+ "framework",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/analytics/issues",
+ "source": "https://github.com/utopia-php/analytics/tree/0.10.2"
+ },
+ "time": "2023-03-22T12:01:09+00:00"
+ },
+ {
+ "name": "utopia-php/audit",
+ "version": "0.39.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/audit.git",
+ "reference": "f0bc15012e05cc0b9dde012ab27d25f193768a2c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/audit/zipball/f0bc15012e05cc0b9dde012ab27d25f193768a2c",
+ "reference": "f0bc15012e05cc0b9dde012ab27d25f193768a2c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0",
+ "utopia-php/database": "0.49.*"
+ },
+ "require-dev": {
+ "laravel/pint": "1.5.*",
+ "phpstan/phpstan": "^1.8",
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Audit\\": "src/Audit"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple audit library to manage application users logs",
+ "keywords": [
+ "Audit",
+ "framework",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/audit/issues",
+ "source": "https://github.com/utopia-php/audit/tree/0.39.0"
+ },
+ "time": "2024-03-06T21:20:37+00:00"
+ },
+ {
+ "name": "utopia-php/cache",
+ "version": "0.9.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/cache.git",
+ "reference": "552b4c554bb14d0c529631ce304cdf4a2b9d06a6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/cache/zipball/552b4c554bb14d0c529631ce304cdf4a2b9d06a6",
+ "reference": "552b4c554bb14d0c529631ce304cdf4a2b9d06a6",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-memcached": "*",
+ "ext-redis": "*",
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "laravel/pint": "1.2.*",
+ "phpstan/phpstan": "1.9.x-dev",
+ "phpunit/phpunit": "^9.3",
+ "vimeo/psalm": "4.13.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Cache\\": "src/Cache"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple cache library to manage application cache storing, loading and purging",
+ "keywords": [
+ "cache",
+ "framework",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/cache/issues",
+ "source": "https://github.com/utopia-php/cache/tree/0.9.1"
+ },
+ "time": "2024-03-19T17:07:20+00:00"
+ },
+ {
+ "name": "utopia-php/cli",
+ "version": "0.15.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/cli.git",
+ "reference": "ccb7c8125ffe0254fef8f25744bfa376eb7bd0ea"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/cli/zipball/ccb7c8125ffe0254fef8f25744bfa376eb7bd0ea",
+ "reference": "ccb7c8125ffe0254fef8f25744bfa376eb7bd0ea",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.4",
+ "utopia-php/framework": "0.*.*"
+ },
+ "require-dev": {
+ "laravel/pint": "1.2.*",
+ "phpunit/phpunit": "^9.3",
+ "squizlabs/php_codesniffer": "^3.6",
+ "vimeo/psalm": "4.0.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\CLI\\": "src/CLI"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple CLI library to manage command line applications",
+ "keywords": [
+ "cli",
+ "command line",
+ "framework",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/cli/issues",
+ "source": "https://github.com/utopia-php/cli/tree/0.15.0"
+ },
+ "time": "2023-03-01T05:55:14+00:00"
+ },
+ {
+ "name": "utopia-php/config",
+ "version": "0.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/config.git",
+ "reference": "a3d7bc0312d7150d5e04b1362dc34b2b136908cc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/config/zipball/a3d7bc0312d7150d5e04b1362dc34b2b136908cc",
+ "reference": "a3d7bc0312d7150d5e04b1362dc34b2b136908cc",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3",
+ "vimeo/psalm": "4.0.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Config\\": "src/Config"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "eldad@appwrite.io"
+ }
+ ],
+ "description": "A simple Config library to managing application config variables",
+ "keywords": [
+ "config",
+ "framework",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/config/issues",
+ "source": "https://github.com/utopia-php/config/tree/0.2.2"
+ },
+ "time": "2020-10-24T09:49:09+00:00"
+ },
+ {
+ "name": "utopia-php/database",
+ "version": "0.49.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/database.git",
+ "reference": "4fb1f6d216f6f628dd5b013e1f539ae2191228b1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/database/zipball/4fb1f6d216f6f628dd5b013e1f539ae2191228b1",
+ "reference": "4fb1f6d216f6f628dd5b013e1f539ae2191228b1",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "ext-pdo": "*",
+ "php": ">=8.0",
+ "utopia-php/cache": "0.9.*",
+ "utopia-php/framework": "0.33.*",
+ "utopia-php/mongo": "0.3.*"
+ },
+ "require-dev": {
+ "fakerphp/faker": "^1.14",
+ "laravel/pint": "1.13.*",
+ "pcov/clobber": "^2.0",
+ "phpstan/phpstan": "1.10.*",
+ "phpunit/phpunit": "^9.4",
+ "rregeer/phpunit-coverage-check": "^0.3.1",
+ "swoole/ide-helper": "4.8.0",
+ "utopia-php/cli": "^0.14.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Database\\": "src/Database"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple library to manage application persistence using multiple database adapters",
+ "keywords": [
+ "database",
+ "framework",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/database/issues",
+ "source": "https://github.com/utopia-php/database/tree/0.49.8"
+ },
+ "time": "2024-05-09T04:43:05+00:00"
+ },
+ {
+ "name": "utopia-php/domains",
+ "version": "0.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/domains.git",
+ "reference": "bf07f60326f8389f378ddf6fcde86217e5cfe18c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/domains/zipball/bf07f60326f8389f378ddf6fcde86217e5cfe18c",
+ "reference": "bf07f60326f8389f378ddf6fcde86217e5cfe18c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0",
+ "utopia-php/framework": "0.*.*"
+ },
+ "require-dev": {
+ "laravel/pint": "1.2.*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Domains\\": "src/Domains"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "eldad@appwrite.io"
+ },
+ {
+ "name": "Wess Cope",
+ "email": "wess@appwrite.io"
+ }
+ ],
+ "description": "Utopia Domains library is simple and lite library for parsing web domains. This library is aiming to be as simple and easy to learn and use.",
+ "keywords": [
+ "domains",
+ "framework",
+ "icann",
+ "php",
+ "public suffix",
+ "tld",
+ "tld extract",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/domains/issues",
+ "source": "https://github.com/utopia-php/domains/tree/0.5.0"
+ },
+ "time": "2024-01-03T22:04:27+00:00"
+ },
+ {
+ "name": "utopia-php/dsn",
+ "version": "0.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/dsn.git",
+ "reference": "42ee37a3d1785100b2f69091c9d4affadb6846eb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/dsn/zipball/42ee37a3d1785100b2f69091c9d4affadb6846eb",
+ "reference": "42ee37a3d1785100b2f69091c9d4affadb6846eb",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "laravel/pint": "1.2.*",
+ "phpunit/phpunit": "^9.3",
+ "squizlabs/php_codesniffer": "^3.6",
+ "vimeo/psalm": "4.0.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\DSN\\": "src/DSN"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple library for parsing and managing Data Source Names ( DSNs )",
+ "keywords": [
+ "dsn",
+ "framework",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/dsn/issues",
+ "source": "https://github.com/utopia-php/dsn/tree/0.2.1"
+ },
+ "time": "2024-05-07T02:01:25+00:00"
+ },
+ {
+ "name": "utopia-php/fetch",
+ "version": "0.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/fetch.git",
+ "reference": "1423c0ee3eef944d816ca6e31706895b585aea82"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/fetch/zipball/1423c0ee3eef944d816ca6e31706895b585aea82",
+ "reference": "1423c0ee3eef944d816ca6e31706895b585aea82",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "laravel/pint": "^1.5.0",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^9.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Fetch\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple library that provides an interface for making HTTP Requests.",
+ "support": {
+ "issues": "https://github.com/utopia-php/fetch/issues",
+ "source": "https://github.com/utopia-php/fetch/tree/0.2.1"
+ },
+ "time": "2024-03-18T11:50:59+00:00"
+ },
+ {
+ "name": "utopia-php/framework",
+ "version": "0.33.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/http.git",
+ "reference": "8fe57da0cecd57e3b17cd395b4a666a24f4c07a6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/http/zipball/8fe57da0cecd57e3b17cd395b4a666a24f4c07a6",
+ "reference": "8fe57da0cecd57e3b17cd395b4a666a24f4c07a6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "laravel/pint": "^1.2",
+ "phpbench/phpbench": "^1.2",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^9.5.25"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple, light and advanced PHP framework",
+ "keywords": [
+ "framework",
+ "php",
+ "upf"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/http/issues",
+ "source": "https://github.com/utopia-php/http/tree/0.33.6"
+ },
+ "time": "2024-03-21T18:10:57+00:00"
+ },
+ {
+ "name": "utopia-php/image",
+ "version": "0.6.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/image.git",
+ "reference": "2d74c27e69e65a93cf94a16586598a04fe435bf0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/image/zipball/2d74c27e69e65a93cf94a16586598a04fe435bf0",
+ "reference": "2d74c27e69e65a93cf94a16586598a04fe435bf0",
+ "shasum": ""
+ },
+ "require": {
+ "ext-imagick": "*",
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "laravel/pint": "1.2.*",
+ "phpstan/phpstan": "1.9.x-dev",
+ "phpunit/phpunit": "^9.3",
+ "vimeo/psalm": "4.13.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Image\\": "src/Image"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple Image manipulation library",
+ "keywords": [
+ "framework",
+ "image",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/image/issues",
+ "source": "https://github.com/utopia-php/image/tree/0.6.1"
+ },
+ "time": "2024-02-05T13:31:44+00:00"
+ },
+ {
+ "name": "utopia-php/locale",
+ "version": "0.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/locale.git",
+ "reference": "c2d9358d0fe2f6b6ed5448369f9d1e430c615447"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/locale/zipball/c2d9358d0fe2f6b6ed5448369f9d1e430c615447",
+ "reference": "c2d9358d0fe2f6b6ed5448369f9d1e430c615447",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.4"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3",
+ "vimeo/psalm": "4.0.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Locale\\": "src/Locale"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "eldad@appwrite.io"
+ }
+ ],
+ "description": "A simple locale library to manage application translations",
+ "keywords": [
+ "framework",
+ "locale",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/locale/issues",
+ "source": "https://github.com/utopia-php/locale/tree/0.4.0"
+ },
+ "time": "2021-07-24T11:35:55+00:00"
+ },
+ {
+ "name": "utopia-php/logger",
+ "version": "0.3.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/logger.git",
+ "reference": "ba763c10688fe2ed715ad2bed3f13d18dfec6253"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/logger/zipball/ba763c10688fe2ed715ad2bed3f13d18dfec6253",
+ "reference": "ba763c10688fe2ed715ad2bed3f13d18dfec6253",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "1.9.x-dev",
+ "phpunit/phpunit": "^9.3",
+ "vimeo/psalm": "4.0.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Logger\\": "src/Logger"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Utopia Logger library is simple and lite library for logging information, such as errors or warnings. This library is aiming to be as simple and easy to learn and use.",
+ "keywords": [
+ "appsignal",
+ "errors",
+ "framework",
+ "logger",
+ "logging",
+ "logs",
+ "php",
+ "raygun",
+ "sentry",
+ "upf",
+ "utopia",
+ "warnings"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/logger/issues",
+ "source": "https://github.com/utopia-php/logger/tree/0.3.2"
+ },
+ "time": "2023-11-22T14:45:43+00:00"
+ },
+ {
+ "name": "utopia-php/messaging",
+ "version": "dev-get-country-code",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/messaging.git",
+ "reference": "724ba39fd7d5f701f54370201050e423b9de005f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/messaging/zipball/724ba39fd7d5f701f54370201050e423b9de005f",
+ "reference": "724ba39fd7d5f701f54370201050e423b9de005f",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "ext-openssl": "*",
+ "giggsey/libphonenumber-for-php-lite": "8.13.36",
+ "php": ">=8.0.0",
+ "phpmailer/phpmailer": "6.9.1"
+ },
+ "require-dev": {
+ "laravel/pint": "1.13.11",
+ "phpstan/phpstan": "1.10.58",
+ "phpunit/phpunit": "10.5.10"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Messaging\\": "src/Utopia/Messaging"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple, light and advanced PHP messaging library",
+ "keywords": [
+ "library",
+ "messaging",
+ "php",
+ "upf",
+ "utopia",
+ "utopia-php"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/messaging/issues",
+ "source": "https://github.com/utopia-php/messaging/tree/get-country-code"
+ },
+ "time": "2024-05-08T17:06:19+00:00"
+ },
+ {
+ "name": "utopia-php/migration",
+ "version": "0.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/migration.git",
+ "reference": "ae3cfe93f6d313105d226aeb68806660c806a925"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/migration/zipball/ae3cfe93f6d313105d226aeb68806660c806a925",
+ "reference": "ae3cfe93f6d313105d226aeb68806660c806a925",
+ "shasum": ""
+ },
+ "require": {
+ "appwrite/appwrite": "10.1.0",
+ "php": "8.*",
+ "utopia-php/cli": "0.*"
+ },
+ "require-dev": {
+ "laravel/pint": "1.*",
+ "phpunit/phpunit": "9.*",
+ "vlucas/phpdotenv": "5.*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Migration\\": "src/Migration"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple library to migrate resources between services.",
+ "keywords": [
+ "framework",
+ "migration",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/migration/issues",
+ "source": "https://github.com/utopia-php/migration/tree/0.4.1"
+ },
+ "time": "2024-05-01T13:19:18+00:00"
+ },
+ {
+ "name": "utopia-php/mongo",
+ "version": "0.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/mongo.git",
+ "reference": "52326a9a43e2d27ff0c15c48ba746dacbe9a7aee"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/mongo/zipball/52326a9a43e2d27ff0c15c48ba746dacbe9a7aee",
+ "reference": "52326a9a43e2d27ff0c15c48ba746dacbe9a7aee",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mongodb": "*",
+ "mongodb/mongodb": "1.10.0",
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "fakerphp/faker": "^1.14",
+ "laravel/pint": "1.2.*",
+ "phpstan/phpstan": "1.8.*",
+ "phpunit/phpunit": "^9.4",
+ "swoole/ide-helper": "4.8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Mongo\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "eldad@appwrite.io"
+ },
+ {
+ "name": "Wess",
+ "email": "wess@appwrite.io"
+ }
+ ],
+ "description": "A simple library to manage Mongo database",
+ "keywords": [
+ "database",
+ "mongo",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/mongo/issues",
+ "source": "https://github.com/utopia-php/mongo/tree/0.3.1"
+ },
+ "time": "2023-09-01T17:25:28+00:00"
+ },
+ {
+ "name": "utopia-php/orchestration",
+ "version": "0.9.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/orchestration.git",
+ "reference": "55f43513b3f940a3f4f9c2cde7682d0c2581beb0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/orchestration/zipball/55f43513b3f940a3f4f9c2cde7682d0c2581beb0",
+ "reference": "55f43513b3f940a3f4f9c2cde7682d0c2581beb0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0",
+ "utopia-php/cli": "0.15.*"
+ },
+ "require-dev": {
+ "laravel/pint": "^1.2",
+ "phpunit/phpunit": "^9.3",
+ "vimeo/psalm": "4.0.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Orchestration\\": "src/Orchestration"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Lite & fast micro PHP abstraction library for container orchestration",
+ "keywords": [
+ "docker",
+ "framework",
+ "kubernetes",
+ "orchestration",
+ "php",
+ "swarm",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/orchestration/issues",
+ "source": "https://github.com/utopia-php/orchestration/tree/0.9.1"
+ },
+ "time": "2023-03-17T15:05:06+00:00"
+ },
+ {
+ "name": "utopia-php/platform",
+ "version": "0.5.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/platform.git",
+ "reference": "3eceef0b6593fe0f7d2efd36d40402a395a4c285"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/platform/zipball/3eceef0b6593fe0f7d2efd36d40402a395a4c285",
+ "reference": "3eceef0b6593fe0f7d2efd36d40402a395a4c285",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-redis": "*",
+ "php": ">=8.0",
+ "utopia-php/cli": "0.15.*",
+ "utopia-php/framework": "0.*.*"
+ },
+ "require-dev": {
+ "laravel/pint": "1.2.*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Platform\\": "src/Platform"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Light and Fast Platform Library",
+ "keywords": [
+ "framework",
+ "php",
+ "platform",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/platform/issues",
+ "source": "https://github.com/utopia-php/platform/tree/0.5.1"
+ },
+ "time": "2023-12-26T16:14:41+00:00"
+ },
+ {
+ "name": "utopia-php/pools",
+ "version": "0.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/pools.git",
+ "reference": "6f716a213a08db95eda1b5dddfa90983c1834817"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/pools/zipball/6f716a213a08db95eda1b5dddfa90983c1834817",
+ "reference": "6f716a213a08db95eda1b5dddfa90983c1834817",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "laravel/pint": "1.2.*",
+ "phpstan/phpstan": "1.8.*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Pools\\": "src/Pools"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Team Appwrite",
+ "email": "team@appwrite.io"
+ }
+ ],
+ "description": "A simple library to manage connection pools",
+ "keywords": [
+ "framework",
+ "php",
+ "pools",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/pools/issues",
+ "source": "https://github.com/utopia-php/pools/tree/0.5.0"
+ },
+ "time": "2024-04-19T11:11:54+00:00"
+ },
+ {
+ "name": "utopia-php/preloader",
+ "version": "0.2.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/preloader.git",
+ "reference": "65ef48392e72172f584b0baa2e224f9a1cebcce0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/preloader/zipball/65ef48392e72172f584b0baa2e224f9a1cebcce0",
+ "reference": "65ef48392e72172f584b0baa2e224f9a1cebcce0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3",
+ "vimeo/psalm": "4.0.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Preloader\\": "src/Preloader"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "team@appwrite.io"
+ }
+ ],
+ "description": "Utopia Preloader library is simple and lite library for managing PHP preloading configuration",
+ "keywords": [
+ "framework",
+ "php",
+ "preload",
+ "preloader",
+ "preloading",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/preloader/issues",
+ "source": "https://github.com/utopia-php/preloader/tree/0.2.4"
+ },
+ "time": "2020-10-24T07:04:59+00:00"
+ },
+ {
+ "name": "utopia-php/queue",
+ "version": "0.7.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/queue.git",
+ "reference": "917565256eb94bcab7246f7a746b1a486813761b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/queue/zipball/917565256eb94bcab7246f7a746b1a486813761b",
+ "reference": "917565256eb94bcab7246f7a746b1a486813761b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0",
+ "utopia-php/cli": "0.15.*",
+ "utopia-php/framework": "0.*.*"
+ },
+ "require-dev": {
+ "laravel/pint": "^0.2.3",
+ "phpstan/phpstan": "^1.8",
+ "phpunit/phpunit": "^9.5.5",
+ "swoole/ide-helper": "4.8.8",
+ "workerman/workerman": "^4.0"
+ },
+ "suggest": {
+ "ext-swoole": "Needed to support Swoole.",
+ "workerman/workerman": "Needed to support Workerman."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Queue\\": "src/Queue"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Torsten Dittmann",
+ "email": "torsten@appwrite.io"
+ }
+ ],
+ "description": "A powerful task queue.",
+ "keywords": [
+ "Tasks",
+ "framework",
+ "php",
+ "queue",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/queue/issues",
+ "source": "https://github.com/utopia-php/queue/tree/0.7.0"
+ },
+ "time": "2024-01-17T19:00:43+00:00"
+ },
+ {
+ "name": "utopia-php/registry",
+ "version": "0.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/registry.git",
+ "reference": "bedc4ed54527b2803e6dfdccc39449f98522b70d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/registry/zipball/bedc4ed54527b2803e6dfdccc39449f98522b70d",
+ "reference": "bedc4ed54527b2803e6dfdccc39449f98522b70d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.4"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3",
+ "vimeo/psalm": "4.0.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Registry\\": "src/Registry"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "eldad@appwrite.io"
+ }
+ ],
+ "description": "A simple dependency management library for PHP",
+ "keywords": [
+ "dependency management",
+ "di",
+ "framework",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/registry/issues",
+ "source": "https://github.com/utopia-php/registry/tree/0.5.0"
+ },
+ "time": "2021-03-10T10:45:22+00:00"
+ },
+ {
+ "name": "utopia-php/storage",
+ "version": "0.18.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/storage.git",
+ "reference": "94ab8758fabcefee5c5fa723616e45719833f922"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/storage/zipball/94ab8758fabcefee5c5fa723616e45719833f922",
+ "reference": "94ab8758fabcefee5c5fa723616e45719833f922",
+ "shasum": ""
+ },
+ "require": {
+ "ext-brotli": "*",
+ "ext-fileinfo": "*",
+ "ext-lz4": "*",
+ "ext-snappy": "*",
+ "ext-xz": "*",
+ "ext-zlib": "*",
+ "ext-zstd": "*",
+ "php": ">=8.0",
+ "utopia-php/framework": "0.*.*",
+ "utopia-php/system": "0.*.*"
+ },
+ "require-dev": {
+ "laravel/pint": "1.2.*",
+ "phpunit/phpunit": "^9.3",
+ "vimeo/psalm": "4.0.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Storage\\": "src/Storage"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple Storage library to manage application storage",
+ "keywords": [
+ "framework",
+ "php",
+ "storage",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/storage/issues",
+ "source": "https://github.com/utopia-php/storage/tree/0.18.4"
+ },
+ "time": "2024-04-02T08:24:09+00:00"
+ },
+ {
+ "name": "utopia-php/swoole",
+ "version": "0.8.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/swoole.git",
+ "reference": "5fa9d42c608ad46a4ce42a6d2b2eae00592fccd4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/swoole/zipball/5fa9d42c608ad46a4ce42a6d2b2eae00592fccd4",
+ "reference": "5fa9d42c608ad46a4ce42a6d2b2eae00592fccd4",
+ "shasum": ""
+ },
+ "require": {
+ "ext-swoole": "*",
+ "php": ">=8.0",
+ "utopia-php/framework": "0.33.*"
+ },
+ "require-dev": {
+ "laravel/pint": "1.2.*",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^9.3",
+ "swoole/ide-helper": "5.0.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Swoole\\": "src/Swoole"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "An extension for Utopia Framework to work with PHP Swoole as a PHP FPM alternative",
+ "keywords": [
+ "framework",
+ "http",
+ "php",
+ "server",
+ "swoole",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/swoole/issues",
+ "source": "https://github.com/utopia-php/swoole/tree/0.8.2"
+ },
+ "time": "2024-02-01T14:54:12+00:00"
+ },
+ {
+ "name": "utopia-php/system",
+ "version": "0.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/system.git",
+ "reference": "a2cbfb3c69b9ecb8b6f06c5774f3cf279ea7665e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/system/zipball/a2cbfb3c69b9ecb8b6f06c5774f3cf279ea7665e",
+ "reference": "a2cbfb3c69b9ecb8b6f06c5774f3cf279ea7665e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.0"
+ },
+ "require-dev": {
+ "laravel/pint": "1.13.*",
+ "phpstan/phpstan": "1.10.*",
+ "phpunit/phpunit": "9.6.*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\System\\": "src/System"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "eldad@appwrite.io"
+ },
+ {
+ "name": "Torsten Dittmann",
+ "email": "torsten@appwrite.io"
+ }
+ ],
+ "description": "A simple library for obtaining information about the host's system.",
+ "keywords": [
+ "framework",
+ "php",
+ "system",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/system/issues",
+ "source": "https://github.com/utopia-php/system/tree/0.8.0"
+ },
+ "time": "2024-04-01T10:22:28+00:00"
+ },
+ {
+ "name": "utopia-php/vcs",
+ "version": "0.6.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/vcs.git",
+ "reference": "104e47ea8e38c156ec0e0bd415caa3dcd5046fe2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/vcs/zipball/104e47ea8e38c156ec0e0bd415caa3dcd5046fe2",
+ "reference": "104e47ea8e38c156ec0e0bd415caa3dcd5046fe2",
+ "shasum": ""
+ },
+ "require": {
+ "adhocore/jwt": "^1.1",
+ "php": ">=8.0",
+ "utopia-php/cache": "^0.9.0",
+ "utopia-php/framework": "0.*.*"
+ },
+ "require-dev": {
+ "laravel/pint": "1.2.*",
+ "phpstan/phpstan": "1.8.*",
+ "phpunit/phpunit": "^9.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\VCS\\": "src/VCS",
+ "Utopia\\Detector\\": "src/Detector"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple library to integrate version control systems like GitHub, GitLab etc. to receive webhook events",
+ "keywords": [
+ "framework",
+ "php",
+ "utopia",
+ "vcs"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/vcs/issues",
+ "source": "https://github.com/utopia-php/vcs/tree/0.6.5"
+ },
+ "time": "2024-01-08T17:11:12+00:00"
+ },
+ {
+ "name": "utopia-php/websocket",
+ "version": "0.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/websocket.git",
+ "reference": "51fcb86171400d8aa40d76c54593481fd273dab5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/websocket/zipball/51fcb86171400d8aa40d76c54593481fd273dab5",
+ "reference": "51fcb86171400d8aa40d76c54593481fd273dab5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.5.5",
+ "swoole/ide-helper": "4.6.6",
+ "textalk/websocket": "1.5.2",
+ "vimeo/psalm": "^4.8.1",
+ "workerman/workerman": "^4.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\WebSocket\\": "src/WebSocket"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "eldad@appwrite.io"
+ },
+ {
+ "name": "Torsten Dittmann",
+ "email": "torsten@appwrite.io"
+ }
+ ],
+ "description": "A simple abstraction for WebSocket servers.",
+ "keywords": [
+ "framework",
+ "php",
+ "upf",
+ "utopia",
+ "websocket"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/websocket/issues",
+ "source": "https://github.com/utopia-php/websocket/tree/0.1.0"
+ },
+ "time": "2021-12-20T10:50:09+00:00"
+ },
+ {
+ "name": "webmozart/assert",
+ "version": "1.11.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webmozarts/assert.git",
+ "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991",
+ "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "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.11.0"
+ },
+ "time": "2022-06-03T18:03:27+00:00"
+ },
+ {
+ "name": "webonyx/graphql-php",
+ "version": "v14.11.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webonyx/graphql-php.git",
+ "reference": "d9c2fdebc6aa01d831bc2969da00e8588cffef19"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/d9c2fdebc6aa01d831bc2969da00e8588cffef19",
+ "reference": "d9c2fdebc6aa01d831bc2969da00e8588cffef19",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "php": "^7.1 || ^8"
+ },
+ "require-dev": {
+ "amphp/amp": "^2.3",
+ "doctrine/coding-standard": "^6.0",
+ "nyholm/psr7": "^1.2",
+ "phpbench/phpbench": "^1.2",
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "0.12.82",
+ "phpstan/phpstan-phpunit": "0.12.18",
+ "phpstan/phpstan-strict-rules": "0.12.9",
+ "phpunit/phpunit": "^7.2 || ^8.5",
+ "psr/http-message": "^1.0",
+ "react/promise": "2.*",
+ "simpod/php-coveralls-mirror": "^3.0"
+ },
+ "suggest": {
+ "psr/http-message": "To use standard GraphQL server",
+ "react/promise": "To leverage async resolving on React PHP platform"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "GraphQL\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A PHP port of GraphQL reference implementation",
+ "homepage": "https://github.com/webonyx/graphql-php",
+ "keywords": [
+ "api",
+ "graphql"
+ ],
+ "support": {
+ "issues": "https://github.com/webonyx/graphql-php/issues",
+ "source": "https://github.com/webonyx/graphql-php/tree/v14.11.10"
+ },
+ "funding": [
+ {
+ "url": "https://opencollective.com/webonyx-graphql-php",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2023-07-05T14:23:37+00:00"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "appwrite/sdk-generator",
+ "version": "0.38.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/appwrite/sdk-generator.git",
+ "reference": "51284668529e2b10ed933412a42b603c76cded23"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/51284668529e2b10ed933412a42b603c76cded23",
+ "reference": "51284668529e2b10ed933412a42b603c76cded23",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "matthiasmullie/minify": "1.3.*",
+ "php": ">=8.0",
+ "twig/twig": "v3.8.*"
+ },
+ "require-dev": {
+ "brianium/paratest": "v7.4.*",
+ "phpunit/phpunit": "10.5.*",
+ "squizlabs/php_codesniffer": "3.9.*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Appwrite\\SDK\\": "src/SDK",
+ "Appwrite\\Spec\\": "src/Spec"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "eldad@appwrite.io"
+ }
+ ],
+ "description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
+ "support": {
+ "issues": "https://github.com/appwrite/sdk-generator/issues",
+ "source": "https://github.com/appwrite/sdk-generator/tree/0.38.2"
+ },
+ "time": "2024-04-25T07:49:29+00:00"
+ },
+ {
+ "name": "doctrine/deprecations",
+ "version": "1.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/deprecations.git",
+ "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
+ "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9",
+ "phpstan/phpstan": "1.4.10 || 1.10.15",
+ "phpstan/phpstan-phpunit": "^1.0",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "psalm/plugin-phpunit": "0.18.4",
+ "psr/log": "^1 || ^2 || ^3",
+ "vimeo/psalm": "4.30.0 || 5.12.0"
+ },
+ "suggest": {
+ "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
+ "homepage": "https://www.doctrine-project.org/",
+ "support": {
+ "issues": "https://github.com/doctrine/deprecations/issues",
+ "source": "https://github.com/doctrine/deprecations/tree/1.1.3"
+ },
+ "time": "2024-01-30T19:34:25+00:00"
+ },
+ {
+ "name": "doctrine/instantiator",
+ "version": "1.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b",
+ "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9 || ^11",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpbench/phpbench": "^0.16 || ^1",
+ "phpstan/phpstan": "^1.4",
+ "phpstan/phpstan-phpunit": "^1",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "vimeo/psalm": "^4.30 || ^5.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "https://ocramius.github.io/"
+ }
+ ],
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+ "keywords": [
+ "constructor",
+ "instantiate"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/instantiator/issues",
+ "source": "https://github.com/doctrine/instantiator/tree/1.5.0"
+ },
+ "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%2Finstantiator",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-12-30T00:15:36+00:00"
+ },
+ {
+ "name": "laravel/pint",
+ "version": "v1.15.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/pint.git",
+ "reference": "3600b5d17aff52f6100ea4921849deacbbeb8656"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/pint/zipball/3600b5d17aff52f6100ea4921849deacbbeb8656",
+ "reference": "3600b5d17aff52f6100ea4921849deacbbeb8656",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "ext-tokenizer": "*",
+ "ext-xml": "*",
+ "php": "^8.1.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.54.0",
+ "illuminate/view": "^10.48.8",
+ "larastan/larastan": "^2.9.5",
+ "laravel-zero/framework": "^10.3.0",
+ "mockery/mockery": "^1.6.11",
+ "nunomaduro/termwind": "^1.15.1",
+ "pestphp/pest": "^2.34.7"
+ },
+ "bin": [
+ "builds/pint"
+ ],
+ "type": "project",
+ "autoload": {
+ "psr-4": {
+ "App\\": "app/",
+ "Database\\Seeders\\": "database/seeders/",
+ "Database\\Factories\\": "database/factories/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nuno Maduro",
+ "email": "enunomaduro@gmail.com"
+ }
+ ],
+ "description": "An opinionated code formatter for PHP.",
+ "homepage": "https://laravel.com",
+ "keywords": [
+ "format",
+ "formatter",
+ "lint",
+ "linter",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/pint/issues",
+ "source": "https://github.com/laravel/pint"
+ },
+ "time": "2024-04-30T15:02:26+00:00"
+ },
+ {
+ "name": "matthiasmullie/minify",
+ "version": "1.3.73",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/matthiasmullie/minify.git",
+ "reference": "cb7a9297b4ab070909cefade30ee95054d4ae87a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/matthiasmullie/minify/zipball/cb7a9297b4ab070909cefade30ee95054d4ae87a",
+ "reference": "cb7a9297b4ab070909cefade30ee95054d4ae87a",
+ "shasum": ""
+ },
+ "require": {
+ "ext-pcre": "*",
+ "matthiasmullie/path-converter": "~1.1",
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": ">=2.0",
+ "matthiasmullie/scrapbook": ">=1.3",
+ "phpunit/phpunit": ">=4.8",
+ "squizlabs/php_codesniffer": ">=3.0"
+ },
+ "suggest": {
+ "psr/cache-implementation": "Cache implementation to use with Minify::cache"
+ },
+ "bin": [
+ "bin/minifycss",
+ "bin/minifyjs"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "MatthiasMullie\\Minify\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Matthias Mullie",
+ "email": "minify@mullie.eu",
+ "homepage": "https://www.mullie.eu",
+ "role": "Developer"
+ }
+ ],
+ "description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.",
+ "homepage": "https://github.com/matthiasmullie/minify",
+ "keywords": [
+ "JS",
+ "css",
+ "javascript",
+ "minifier",
+ "minify"
+ ],
+ "support": {
+ "issues": "https://github.com/matthiasmullie/minify/issues",
+ "source": "https://github.com/matthiasmullie/minify/tree/1.3.73"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/matthiasmullie",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-15T10:27:10+00:00"
+ },
+ {
+ "name": "matthiasmullie/path-converter",
+ "version": "1.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/matthiasmullie/path-converter.git",
+ "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/matthiasmullie/path-converter/zipball/e7d13b2c7e2f2268e1424aaed02085518afa02d9",
+ "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9",
+ "shasum": ""
+ },
+ "require": {
+ "ext-pcre": "*",
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.8"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "MatthiasMullie\\PathConverter\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Matthias Mullie",
+ "email": "pathconverter@mullie.eu",
+ "homepage": "http://www.mullie.eu",
+ "role": "Developer"
+ }
+ ],
+ "description": "Relative path converter",
+ "homepage": "http://github.com/matthiasmullie/path-converter",
+ "keywords": [
+ "converter",
+ "path",
+ "paths",
+ "relative"
+ ],
+ "support": {
+ "issues": "https://github.com/matthiasmullie/path-converter/issues",
+ "source": "https://github.com/matthiasmullie/path-converter/tree/1.1.3"
+ },
+ "time": "2019-02-05T23:41:09+00:00"
+ },
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.11.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
+ "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/collections": "<1.6.8",
+ "doctrine/common": "<2.13.3 || >=3,<3.2.2"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.6.8",
+ "doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ],
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "support": {
+ "issues": "https://github.com/myclabs/DeepCopy/issues",
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1"
+ },
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-03-08T13:26:56+00:00"
+ },
+ {
+ "name": "nikic/php-parser",
+ "version": "v5.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13",
+ "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "php": ">=7.4"
+ },
+ "require-dev": {
+ "ircmaxell/php-yacc": "^0.0.7",
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
+ },
+ "bin": [
+ "bin/php-parse"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpParser\\": "lib/PhpParser"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov"
+ }
+ ],
+ "description": "A PHP parser written in PHP",
+ "keywords": [
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2"
+ },
+ "time": "2024-03-05T20:51:40+00:00"
+ },
+ {
+ "name": "phar-io/manifest",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-phar": "*",
+ "ext-xmlwriter": "*",
+ "phar-io/version": "^3.0.1",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+ "support": {
+ "issues": "https://github.com/phar-io/manifest/issues",
+ "source": "https://github.com/phar-io/manifest/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-03T12:33:53+00:00"
+ },
+ {
+ "name": "phar-io/version",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Library for handling version information and constraints",
+ "support": {
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/3.2.1"
+ },
+ "time": "2022-02-21T01:04:05+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.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+ "reference": "298d2febfe79d03fe714eb871d5538da55205b1a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/298d2febfe79d03fe714eb871d5538da55205b1a",
+ "reference": "298d2febfe79d03fe714eb871d5538da55205b1a",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/deprecations": "^1.1",
+ "ext-filter": "*",
+ "php": "^7.4 || ^8.0",
+ "phpdocumentor/reflection-common": "^2.2",
+ "phpdocumentor/type-resolver": "^1.7",
+ "phpstan/phpdoc-parser": "^1.7",
+ "webmozart/assert": "^1.9.1"
+ },
+ "require-dev": {
+ "mockery/mockery": "~1.3.5",
+ "phpstan/extension-installer": "^1.1",
+ "phpstan/phpstan": "^1.8",
+ "phpstan/phpstan-mockery": "^1.1",
+ "phpstan/phpstan-webmozart-assert": "^1.2",
+ "phpunit/phpunit": "^9.5",
+ "vimeo/psalm": "^5.13"
+ },
+ "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": "opensource@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/5.4.0"
+ },
+ "time": "2024-04-09T21:13:58+00:00"
+ },
+ {
+ "name": "phpdocumentor/type-resolver",
+ "version": "1.8.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/TypeResolver.git",
+ "reference": "153ae662783729388a584b4361f2545e4d841e3c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c",
+ "reference": "153ae662783729388a584b4361f2545e4d841e3c",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/deprecations": "^1.0",
+ "php": "^7.3 || ^8.0",
+ "phpdocumentor/reflection-common": "^2.0",
+ "phpstan/phpdoc-parser": "^1.13"
+ },
+ "require-dev": {
+ "ext-tokenizer": "*",
+ "phpbench/phpbench": "^1.2",
+ "phpstan/extension-installer": "^1.1",
+ "phpstan/phpstan": "^1.8",
+ "phpstan/phpstan-phpunit": "^1.1",
+ "phpunit/phpunit": "^9.5",
+ "rector/rector": "^0.13.9",
+ "vimeo/psalm": "^4.25"
+ },
+ "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.8.2"
+ },
+ "time": "2024-02-23T11:10:43+00:00"
+ },
+ {
+ "name": "phpspec/prophecy",
+ "version": "v1.19.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpspec/prophecy.git",
+ "reference": "67a759e7d8746d501c41536ba40cd9c0a07d6a87"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/67a759e7d8746d501c41536ba40cd9c0a07d6a87",
+ "reference": "67a759e7d8746d501c41536ba40cd9c0a07d6a87",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.2 || ^2.0",
+ "php": "^7.2 || 8.0.* || 8.1.* || 8.2.* || 8.3.*",
+ "phpdocumentor/reflection-docblock": "^5.2",
+ "sebastian/comparator": "^3.0 || ^4.0 || ^5.0 || ^6.0",
+ "sebastian/recursion-context": "^3.0 || ^4.0 || ^5.0 || ^6.0"
+ },
+ "require-dev": {
+ "phpspec/phpspec": "^6.0 || ^7.0",
+ "phpstan/phpstan": "^1.9",
+ "phpunit/phpunit": "^8.0 || ^9.0 || ^10.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Prophecy\\": "src/Prophecy"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Konstantin Kudryashov",
+ "email": "ever.zet@gmail.com",
+ "homepage": "http://everzet.com"
+ },
+ {
+ "name": "Marcello Duarte",
+ "email": "marcello.duarte@gmail.com"
+ }
+ ],
+ "description": "Highly opinionated mocking framework for PHP 5.3+",
+ "homepage": "https://github.com/phpspec/prophecy",
+ "keywords": [
+ "Double",
+ "Dummy",
+ "dev",
+ "fake",
+ "mock",
+ "spy",
+ "stub"
+ ],
+ "support": {
+ "issues": "https://github.com/phpspec/prophecy/issues",
+ "source": "https://github.com/phpspec/prophecy/tree/v1.19.0"
+ },
+ "time": "2024-02-29T11:52:51+00:00"
+ },
+ {
+ "name": "phpstan/phpdoc-parser",
+ "version": "1.29.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpstan/phpdoc-parser.git",
+ "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/536889f2b340489d328f5ffb7b02bb6b183ddedc",
+ "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/annotations": "^2.0",
+ "nikic/php-parser": "^4.15",
+ "php-parallel-lint/php-parallel-lint": "^1.2",
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^1.5",
+ "phpstan/phpstan-phpunit": "^1.1",
+ "phpstan/phpstan-strict-rules": "^1.0",
+ "phpunit/phpunit": "^9.5",
+ "symfony/process": "^5.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "PHPStan\\PhpDocParser\\": [
+ "src/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PHPDoc parser with support for nullable, intersection and generic types",
+ "support": {
+ "issues": "https://github.com/phpstan/phpdoc-parser/issues",
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.0"
+ },
+ "time": "2024-05-06T12:04:23+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "9.2.31",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965",
+ "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-xmlwriter": "*",
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=7.3",
+ "phpunit/php-file-iterator": "^3.0.3",
+ "phpunit/php-text-template": "^2.0.2",
+ "sebastian/code-unit-reverse-lookup": "^2.0.2",
+ "sebastian/complexity": "^2.0",
+ "sebastian/environment": "^5.1.2",
+ "sebastian/lines-of-code": "^1.0.3",
+ "sebastian/version": "^3.0.1",
+ "theseer/tokenizer": "^1.2.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-pcov": "PHP extension that provides line coverage",
+ "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+ "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T06:37:42+00:00"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "3.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2021-12-02T12:48:52+00:00"
+ },
+ {
+ "name": "phpunit/php-invoker",
+ "version": "3.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-invoker.git",
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "ext-pcntl": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-pcntl": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Invoke callables with a timeout",
+ "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+ "keywords": [
+ "process"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:58:55+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T05:33:50+00:00"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "5.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:16:10+00:00"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "9.5.20",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba",
+ "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.3.1",
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "ext-xmlwriter": "*",
+ "myclabs/deep-copy": "^1.10.1",
+ "phar-io/manifest": "^2.0.3",
+ "phar-io/version": "^3.0.2",
+ "php": ">=7.3",
+ "phpspec/prophecy": "^1.12.1",
+ "phpunit/php-code-coverage": "^9.2.13",
+ "phpunit/php-file-iterator": "^3.0.5",
+ "phpunit/php-invoker": "^3.1.1",
+ "phpunit/php-text-template": "^2.0.3",
+ "phpunit/php-timer": "^5.0.2",
+ "sebastian/cli-parser": "^1.0.1",
+ "sebastian/code-unit": "^1.0.6",
+ "sebastian/comparator": "^4.0.5",
+ "sebastian/diff": "^4.0.3",
+ "sebastian/environment": "^5.1.3",
+ "sebastian/exporter": "^4.0.3",
+ "sebastian/global-state": "^5.0.1",
+ "sebastian/object-enumerator": "^4.0.3",
+ "sebastian/resource-operations": "^3.0.3",
+ "sebastian/type": "^3.0",
+ "sebastian/version": "^3.0.2"
+ },
+ "require-dev": {
+ "ext-pdo": "*",
+ "phpspec/prophecy-phpunit": "^2.0.1"
+ },
+ "suggest": {
+ "ext-soap": "*",
+ "ext-xdebug": "*"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.5-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Framework/Assert/Functions.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20"
+ },
+ "funding": [
+ {
+ "url": "https://phpunit.de/sponsors.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-04-01T12:37:26+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": "sebastian/cli-parser",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/cli-parser.git",
+ "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
+ "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for parsing CLI options",
+ "homepage": "https://github.com/sebastianbergmann/cli-parser",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T06:27:43+00:00"
+ },
+ {
+ "name": "sebastian/code-unit",
+ "version": "1.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit.git",
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/code-unit",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:08:54+00:00"
+ },
+ {
+ "name": "sebastian/code-unit-reverse-lookup",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Looks up which function or method a line of code belongs to",
+ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:30:19+00:00"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "4.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "fa0f136dd2334583309d32b62544682ee972b51a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a",
+ "reference": "fa0f136dd2334583309d32b62544682ee972b51a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/diff": "^4.0",
+ "sebastian/exporter": "^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-09-14T12:41:17+00:00"
+ },
+ {
+ "name": "sebastian/complexity",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/complexity.git",
+ "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a",
+ "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for calculating the complexity of PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/complexity",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/complexity/issues",
+ "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-12-22T06:19:30+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "4.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc",
+ "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3",
+ "symfony/process": "^4.2 || ^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T06:30:58+00:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "5.1.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
+ "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-posix": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T06:03:51+00:00"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "4.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72",
+ "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "ext-mbstring": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "https://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T06:33:00+00:00"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "5.0.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
+ "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "ext-dom": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-uopz": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T06:35:11+00:00"
+ },
+ {
+ "name": "sebastian/lines-of-code",
+ "version": "1.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+ "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5",
+ "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for counting the lines of code in PHP source code",
+ "homepage": "https://github.com/sebastianbergmann/lines-of-code",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-12-22T06:20:34+00:00"
+ },
+ {
+ "name": "sebastian/object-enumerator",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:12:34+00:00"
+ },
+ {
+ "name": "sebastian/object-reflector",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:14:26+00:00"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "4.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
+ "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "https://github.com/sebastianbergmann/recursion-context",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T06:07:39+00:00"
+ },
+ {
+ "name": "sebastian/resource-operations",
+ "version": "3.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
+ "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
+ "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides a list of PHP built-in functions that operate on resources",
+ "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+ "support": {
+ "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-14T16:00:52+00:00"
+ },
+ {
+ "name": "sebastian/type",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/type.git",
+ "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
+ "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the types of the PHP type system",
+ "homepage": "https://github.com/sebastianbergmann/type",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/type/issues",
+ "source": "https://github.com/sebastianbergmann/type/tree/3.2.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T06:13:03+00:00"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "c6c1022351a901512170118436c764e473f6de8c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
+ "reference": "c6c1022351a901512170118436c764e473f6de8c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T06:39:44+00:00"
+ },
+ {
+ "name": "swoole/ide-helper",
+ "version": "5.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/swoole/ide-helper.git",
+ "reference": "33ec7af9111b76d06a70dd31191cc74793551112"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/swoole/ide-helper/zipball/33ec7af9111b76d06a70dd31191cc74793551112",
+ "reference": "33ec7af9111b76d06a70dd31191cc74793551112",
+ "shasum": ""
+ },
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Team Swoole",
+ "email": "team@swoole.com"
+ }
+ ],
+ "description": "IDE help files for Swoole.",
+ "support": {
+ "issues": "https://github.com/swoole/ide-helper/issues",
+ "source": "https://github.com/swoole/ide-helper/tree/5.1.2"
+ },
+ "time": "2024-02-01T22:28:11+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.29.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4",
+ "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4",
+ "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.29.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-01-29T20:11:03+00:00"
+ },
+ {
+ "name": "textalk/websocket",
+ "version": "1.5.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Textalk/websocket-php.git",
+ "reference": "1712325e99b6bf869ccbf9bf41ab749e7328ea46"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Textalk/websocket-php/zipball/1712325e99b6bf869ccbf9bf41ab749e7328ea46",
+ "reference": "1712325e99b6bf869ccbf9bf41ab749e7328ea46",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 | ^8.0",
+ "psr/log": "^1 | ^2 | ^3"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.0",
+ "phpunit/phpunit": "^8.0|^9.0",
+ "squizlabs/php_codesniffer": "^3.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "WebSocket\\": "lib"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "ISC"
+ ],
+ "authors": [
+ {
+ "name": "Fredrik Liljegren"
+ },
+ {
+ "name": "Sören Jensen",
+ "email": "soren@abicart.se"
+ }
+ ],
+ "description": "WebSocket client and server",
+ "support": {
+ "issues": "https://github.com/Textalk/websocket-php/issues",
+ "source": "https://github.com/Textalk/websocket-php/tree/1.5.7"
+ },
+ "time": "2022-03-29T09:46:59+00:00"
+ },
+ {
+ "name": "theseer/tokenizer",
+ "version": "1.2.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+ "support": {
+ "issues": "https://github.com/theseer/tokenizer/issues",
+ "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-03T12:36:25+00:00"
+ },
+ {
+ "name": "twig/twig",
+ "version": "v3.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/twigphp/Twig.git",
+ "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/twigphp/Twig/zipball/9d15f0ac07f44dc4217883ec6ae02fd555c6f71d",
+ "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-ctype": "^1.8",
+ "symfony/polyfill-mbstring": "^1.3",
+ "symfony/polyfill-php80": "^1.22"
+ },
+ "require-dev": {
+ "psr/container": "^1.0|^2.0",
+ "symfony/phpunit-bridge": "^5.4.9|^6.3|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Twig\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com",
+ "homepage": "http://fabien.potencier.org",
+ "role": "Lead Developer"
+ },
+ {
+ "name": "Twig Team",
+ "role": "Contributors"
+ },
+ {
+ "name": "Armin Ronacher",
+ "email": "armin.ronacher@active-4.com",
+ "role": "Project Founder"
+ }
+ ],
+ "description": "Twig, the flexible, fast, and secure template language for PHP",
+ "homepage": "https://twig.symfony.com",
+ "keywords": [
+ "templating"
+ ],
+ "support": {
+ "issues": "https://github.com/twigphp/Twig/issues",
+ "source": "https://github.com/twigphp/Twig/tree/v3.8.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/twig/twig",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-11-21T18:54:41+00:00"
+ }
+ ],
+ "aliases": [
+ {
+ "package": "utopia-php/messaging",
+ "version": "dev-get-country-code",
+ "alias": "0.10.0",
+ "alias_normalized": "0.10.0.0"
+ }
+ ],
+ "minimum-stability": "stable",
+ "stability-flags": {
+ "utopia-php/messaging": 20
+ },
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">=8.0.0",
+ "ext-curl": "*",
+ "ext-imagick": "*",
+ "ext-mbstring": "*",
+ "ext-json": "*",
+ "ext-yaml": "*",
+ "ext-dom": "*",
+ "ext-redis": "*",
+ "ext-swoole": "*",
+ "ext-pdo": "*",
+ "ext-openssl": "*",
+ "ext-zlib": "*",
+ "ext-sockets": "*"
+ },
+ "platform-dev": {
+ "ext-fileinfo": "*"
+ },
+ "platform-overrides": {
+ "php": "8.3"
+ },
+ "plugin-api-version": "2.2.0"
+}
From 510f864b06db1bf72dcf0ad1488395ae5209e236 Mon Sep 17 00:00:00 2001
From: shimon
Date: Sun, 12 May 2024 19:51:16 +0300
Subject: [PATCH 078/138] adding null safety
---
composer.json | 3 +-
composer.lock | 5626 -------------------
src/Appwrite/Platform/Workers/Messaging.php | 4 +-
3 files changed, 4 insertions(+), 5629 deletions(-)
delete mode 100644 composer.lock
diff --git a/composer.json b/composer.json
index 280eb07630..8a6ca5edbe 100644
--- a/composer.json
+++ b/composer.json
@@ -28,6 +28,7 @@
"Appwrite\\Tests\\": "tests/extensions"
}
},
+ "minimum-stability": "dev",
"require": {
"php": ">=8.0.0",
"ext-curl": "*",
@@ -58,7 +59,7 @@
"utopia-php/image": "0.6.*",
"utopia-php/locale": "0.4.*",
"utopia-php/logger": "0.3.*",
- "utopia-php/messaging": "dev-get-country-code as 0.10.0",
+ "utopia-php/messaging": "dev-get-country-code",
"utopia-php/migration": "0.4.*",
"utopia-php/orchestration": "0.9.*",
"utopia-php/platform": "0.5.*",
diff --git a/composer.lock b/composer.lock
deleted file mode 100644
index 9bcd30d3d8..0000000000
--- a/composer.lock
+++ /dev/null
@@ -1,5626 +0,0 @@
-{
- "_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": "f84bed324e62bcce0704288ac759e477",
- "packages": [
- {
- "name": "adhocore/jwt",
- "version": "1.1.2",
- "source": {
- "type": "git",
- "url": "https://github.com/adhocore/php-jwt.git",
- "reference": "6c434af7170090bb7a8880d2bc220a2254ba7899"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/adhocore/php-jwt/zipball/6c434af7170090bb7a8880d2bc220a2254ba7899",
- "reference": "6c434af7170090bb7a8880d2bc220a2254ba7899",
- "shasum": ""
- },
- "require": {
- "php": "^7.0 || ^8.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.5 || ^7.5"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Ahc\\Jwt\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jitendra Adhikari",
- "email": "jiten.adhikary@gmail.com"
- }
- ],
- "description": "Ultra lightweight JSON web token (JWT) library for PHP5.5+.",
- "keywords": [
- "auth",
- "json-web-token",
- "jwt",
- "jwt-auth",
- "jwt-php",
- "token"
- ],
- "support": {
- "issues": "https://github.com/adhocore/php-jwt/issues",
- "source": "https://github.com/adhocore/php-jwt/tree/1.1.2"
- },
- "funding": [
- {
- "url": "https://paypal.me/ji10",
- "type": "custom"
- }
- ],
- "time": "2021-02-20T09:56:44+00:00"
- },
- {
- "name": "appwrite/appwrite",
- "version": "10.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/appwrite/sdk-for-php.git",
- "reference": "da579af70723cfc117b5af84375bdef117e27312"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/appwrite/sdk-for-php/zipball/da579af70723cfc117b5af84375bdef117e27312",
- "reference": "da579af70723cfc117b5af84375bdef117e27312",
- "shasum": ""
- },
- "require": {
- "ext-curl": "*",
- "ext-json": "*",
- "php": ">=7.1.0"
- },
- "require-dev": {
- "phpunit/phpunit": "3.7.35"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Appwrite\\": "src/Appwrite"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "description": "Appwrite is an open-source self-hosted backend server that abstract and simplify complex and repetitive development tasks behind a very simple REST API",
- "support": {
- "email": "team@appwrite.io",
- "issues": "https://github.com/appwrite/sdk-for-php/issues",
- "source": "https://github.com/appwrite/sdk-for-php/tree/10.1.0",
- "url": "https://appwrite.io/support"
- },
- "time": "2023-11-20T09:56:12+00:00"
- },
- {
- "name": "appwrite/php-clamav",
- "version": "2.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/appwrite/php-clamav.git",
- "reference": "f3897169f5c1f365312238a516ae9465f804634f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/appwrite/php-clamav/zipball/f3897169f5c1f365312238a516ae9465f804634f",
- "reference": "f3897169f5c1f365312238a516ae9465f804634f",
- "shasum": ""
- },
- "require": {
- "ext-sockets": "*",
- "php": ">=8.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Appwrite\\ClamAV\\": "src/ClamAV"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "eldad@appwrite.io"
- }
- ],
- "description": "ClamAV network and pipe client for PHP",
- "keywords": [
- "anti virus",
- "appwrite",
- "clamav",
- "php"
- ],
- "support": {
- "issues": "https://github.com/appwrite/php-clamav/issues",
- "source": "https://github.com/appwrite/php-clamav/tree/2.0.0"
- },
- "time": "2023-02-24T09:50:42+00:00"
- },
- {
- "name": "appwrite/php-runtimes",
- "version": "0.13.5",
- "source": {
- "type": "git",
- "url": "https://github.com/appwrite/runtimes.git",
- "reference": "ba24c3a163f1a1da6cd355db92def508d05e59f7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/appwrite/runtimes/zipball/ba24c3a163f1a1da6cd355db92def508d05e59f7",
- "reference": "ba24c3a163f1a1da6cd355db92def508d05e59f7",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0",
- "utopia-php/system": "0.8.*"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3",
- "vimeo/psalm": "4.0.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Appwrite\\Runtimes\\": "src/Runtimes"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "eldad@appwrite.io"
- },
- {
- "name": "Torsten Dittmann",
- "email": "torsten@appwrite.io"
- }
- ],
- "description": "Appwrite repository for Cloud Function runtimes that contains the configurations and tests for all of the Appwrite runtime environments.",
- "keywords": [
- "appwrite",
- "php",
- "runtimes"
- ],
- "support": {
- "issues": "https://github.com/appwrite/runtimes/issues",
- "source": "https://github.com/appwrite/runtimes/tree/0.13.5"
- },
- "time": "2024-04-01T10:35:02+00:00"
- },
- {
- "name": "beberlei/assert",
- "version": "v3.3.2",
- "source": {
- "type": "git",
- "url": "https://github.com/beberlei/assert.git",
- "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/beberlei/assert/zipball/cb70015c04be1baee6f5f5c953703347c0ac1655",
- "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655",
- "shasum": ""
- },
- "require": {
- "ext-ctype": "*",
- "ext-json": "*",
- "ext-mbstring": "*",
- "ext-simplexml": "*",
- "php": "^7.0 || ^8.0"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "*",
- "phpstan/phpstan": "*",
- "phpunit/phpunit": ">=6.0.0",
- "yoast/phpunit-polyfills": "^0.1.0"
- },
- "suggest": {
- "ext-intl": "Needed to allow Assertion::count(), Assertion::isCountable(), Assertion::minCount(), and Assertion::maxCount() to operate on ResourceBundles"
- },
- "type": "library",
- "autoload": {
- "files": [
- "lib/Assert/functions.php"
- ],
- "psr-4": {
- "Assert\\": "lib/Assert"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-2-Clause"
- ],
- "authors": [
- {
- "name": "Benjamin Eberlei",
- "email": "kontakt@beberlei.de",
- "role": "Lead Developer"
- },
- {
- "name": "Richard Quadling",
- "email": "rquadling@gmail.com",
- "role": "Collaborator"
- }
- ],
- "description": "Thin assertion library for input validation in business models.",
- "keywords": [
- "assert",
- "assertion",
- "validation"
- ],
- "support": {
- "issues": "https://github.com/beberlei/assert/issues",
- "source": "https://github.com/beberlei/assert/tree/v3.3.2"
- },
- "time": "2021-12-16T21:41:27+00:00"
- },
- {
- "name": "chillerlan/php-qrcode",
- "version": "4.3.4",
- "source": {
- "type": "git",
- "url": "https://github.com/chillerlan/php-qrcode.git",
- "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
- "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
- "shasum": ""
- },
- "require": {
- "chillerlan/php-settings-container": "^2.1.4",
- "ext-mbstring": "*",
- "php": "^7.4 || ^8.0"
- },
- "require-dev": {
- "phan/phan": "^5.3",
- "phpunit/phpunit": "^9.5",
- "setasign/fpdf": "^1.8.2"
- },
- "suggest": {
- "chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.",
- "setasign/fpdf": "Required to use the QR FPDF output."
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "chillerlan\\QRCode\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Kazuhiko Arase",
- "homepage": "https://github.com/kazuhikoarase"
- },
- {
- "name": "Smiley",
- "email": "smiley@chillerlan.net",
- "homepage": "https://github.com/codemasher"
- },
- {
- "name": "Contributors",
- "homepage": "https://github.com/chillerlan/php-qrcode/graphs/contributors"
- }
- ],
- "description": "A QR code generator. PHP 7.4+",
- "homepage": "https://github.com/chillerlan/php-qrcode",
- "keywords": [
- "phpqrcode",
- "qr",
- "qr code",
- "qrcode",
- "qrcode-generator"
- ],
- "support": {
- "issues": "https://github.com/chillerlan/php-qrcode/issues",
- "source": "https://github.com/chillerlan/php-qrcode/tree/4.3.4"
- },
- "funding": [
- {
- "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4",
- "type": "custom"
- },
- {
- "url": "https://ko-fi.com/codemasher",
- "type": "ko_fi"
- }
- ],
- "time": "2022-07-25T09:12:45+00:00"
- },
- {
- "name": "chillerlan/php-settings-container",
- "version": "2.1.5",
- "source": {
- "type": "git",
- "url": "https://github.com/chillerlan/php-settings-container.git",
- "reference": "f705310389264c3578fdd9ffb15aa2cd6d91772e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/f705310389264c3578fdd9ffb15aa2cd6d91772e",
- "reference": "f705310389264c3578fdd9ffb15aa2cd6d91772e",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "php": "^7.4 || ^8.0"
- },
- "require-dev": {
- "phan/phan": "^5.4",
- "phpcsstandards/php_codesniffer": "^3.8",
- "phpmd/phpmd": "^2.13",
- "phpunit/phpunit": "^9.6"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "chillerlan\\Settings\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Smiley",
- "email": "smiley@chillerlan.net",
- "homepage": "https://github.com/codemasher"
- }
- ],
- "description": "A container class for immutable settings objects. Not a DI container. PHP 7.4+",
- "homepage": "https://github.com/chillerlan/php-settings-container",
- "keywords": [
- "PHP7",
- "Settings",
- "configuration",
- "container",
- "helper"
- ],
- "support": {
- "issues": "https://github.com/chillerlan/php-settings-container/issues",
- "source": "https://github.com/chillerlan/php-settings-container"
- },
- "funding": [
- {
- "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4",
- "type": "custom"
- },
- {
- "url": "https://ko-fi.com/codemasher",
- "type": "ko_fi"
- }
- ],
- "time": "2024-01-05T23:20:55+00:00"
- },
- {
- "name": "dragonmantank/cron-expression",
- "version": "v3.3.2",
- "source": {
- "type": "git",
- "url": "https://github.com/dragonmantank/cron-expression.git",
- "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/782ca5968ab8b954773518e9e49a6f892a34b2a8",
- "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8",
- "shasum": ""
- },
- "require": {
- "php": "^7.2|^8.0",
- "webmozart/assert": "^1.0"
- },
- "replace": {
- "mtdowling/cron-expression": "^1.0"
- },
- "require-dev": {
- "phpstan/extension-installer": "^1.0",
- "phpstan/phpstan": "^1.0",
- "phpstan/phpstan-webmozart-assert": "^1.0",
- "phpunit/phpunit": "^7.0|^8.0|^9.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Cron\\": "src/Cron/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Chris Tankersley",
- "email": "chris@ctankersley.com",
- "homepage": "https://github.com/dragonmantank"
- }
- ],
- "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due",
- "keywords": [
- "cron",
- "schedule"
- ],
- "support": {
- "issues": "https://github.com/dragonmantank/cron-expression/issues",
- "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.2"
- },
- "funding": [
- {
- "url": "https://github.com/dragonmantank",
- "type": "github"
- }
- ],
- "time": "2022-09-10T18:51:20+00:00"
- },
- {
- "name": "giggsey/libphonenumber-for-php-lite",
- "version": "8.13.36",
- "source": {
- "type": "git",
- "url": "https://github.com/giggsey/libphonenumber-for-php-lite.git",
- "reference": "144bbe70d67664b5245910a475c7190ff140ab4b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php-lite/zipball/144bbe70d67664b5245910a475c7190ff140ab4b",
- "reference": "144bbe70d67664b5245910a475c7190ff140ab4b",
- "shasum": ""
- },
- "require": {
- "php": "^8.1",
- "symfony/polyfill-mbstring": "^1.17"
- },
- "conflict": {
- "giggsey/libphonenumber-for-php": "*"
- },
- "require-dev": {
- "ext-dom": "*",
- "friendsofphp/php-cs-fixer": "^3.12",
- "infection/infection": "^0.28",
- "pear/pear-core-minimal": "^1.10.11",
- "pear/pear_exception": "^1.0.2",
- "pear/versioncontrol_git": "^0.7",
- "phing/phing": "^2.17.4",
- "phpstan/extension-installer": "^1.2",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-phpunit": "^1.2",
- "phpunit/phpunit": "^10.5",
- "symfony/console": "^6.0",
- "symfony/var-exporter": "^6.0"
- },
- "suggest": {
- "giggsey/libphonenumber-for-php": "Use libphonenumber-for-php for geocoding, carriers, timezones and matching"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "libphonenumber\\": "src/"
- },
- "exclude-from-classmap": [
- "/src/data/",
- "/src/carrier/data/",
- "/src/geocoding/data/",
- "/src/timezone/data/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "Joshua Gigg",
- "email": "giggsey@gmail.com",
- "homepage": "https://giggsey.com/"
- }
- ],
- "description": "A lite version of giggsey/libphonenumber-for-php, which is a PHP Port of Google's libphonenumber",
- "homepage": "https://github.com/giggsey/libphonenumber-for-php-lite",
- "keywords": [
- "geocoding",
- "geolocation",
- "libphonenumber",
- "mobile",
- "phonenumber",
- "validation"
- ],
- "support": {
- "issues": "https://github.com/giggsey/libphonenumber-for-php-lite/issues",
- "source": "https://github.com/giggsey/libphonenumber-for-php-lite"
- },
- "time": "2024-05-03T06:31:11+00:00"
- },
- {
- "name": "jean85/pretty-package-versions",
- "version": "2.0.6",
- "source": {
- "type": "git",
- "url": "https://github.com/Jean85/pretty-package-versions.git",
- "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/f9fdd29ad8e6d024f52678b570e5593759b550b4",
- "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4",
- "shasum": ""
- },
- "require": {
- "composer-runtime-api": "^2.0.0",
- "php": "^7.1|^8.0"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "^3.2",
- "jean85/composer-provided-replaced-stub-package": "^1.0",
- "phpstan/phpstan": "^1.4",
- "phpunit/phpunit": "^7.5|^8.5|^9.4",
- "vimeo/psalm": "^4.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Jean85\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Alessandro Lai",
- "email": "alessandro.lai85@gmail.com"
- }
- ],
- "description": "A library to get pretty versions strings of installed dependencies",
- "keywords": [
- "composer",
- "package",
- "release",
- "versions"
- ],
- "support": {
- "issues": "https://github.com/Jean85/pretty-package-versions/issues",
- "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.6"
- },
- "time": "2024-03-08T09:58:59+00:00"
- },
- {
- "name": "league/csv",
- "version": "9.14.0",
- "source": {
- "type": "git",
- "url": "https://github.com/thephpleague/csv.git",
- "reference": "34bf0df7340b60824b9449b5c526fcc3325070d5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/thephpleague/csv/zipball/34bf0df7340b60824b9449b5c526fcc3325070d5",
- "reference": "34bf0df7340b60824b9449b5c526fcc3325070d5",
- "shasum": ""
- },
- "require": {
- "ext-filter": "*",
- "ext-json": "*",
- "ext-mbstring": "*",
- "php": "^8.1.2"
- },
- "require-dev": {
- "doctrine/collections": "^2.1.4",
- "ext-dom": "*",
- "ext-xdebug": "*",
- "friendsofphp/php-cs-fixer": "^v3.22.0",
- "phpbench/phpbench": "^1.2.15",
- "phpstan/phpstan": "^1.10.50",
- "phpstan/phpstan-deprecation-rules": "^1.1.4",
- "phpstan/phpstan-phpunit": "^1.3.15",
- "phpstan/phpstan-strict-rules": "^1.5.2",
- "phpunit/phpunit": "^10.5.3",
- "symfony/var-dumper": "^6.4.0"
- },
- "suggest": {
- "ext-dom": "Required to use the XMLConverter and the HTMLConverter classes",
- "ext-iconv": "Needed to ease transcoding CSV using iconv stream filters"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "9.x-dev"
- }
- },
- "autoload": {
- "files": [
- "src/functions_include.php"
- ],
- "psr-4": {
- "League\\Csv\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Ignace Nyamagana Butera",
- "email": "nyamsprod@gmail.com",
- "homepage": "https://github.com/nyamsprod/",
- "role": "Developer"
- }
- ],
- "description": "CSV data manipulation made easy in PHP",
- "homepage": "https://csv.thephpleague.com",
- "keywords": [
- "convert",
- "csv",
- "export",
- "filter",
- "import",
- "read",
- "transform",
- "write"
- ],
- "support": {
- "docs": "https://csv.thephpleague.com",
- "issues": "https://github.com/thephpleague/csv/issues",
- "rss": "https://github.com/thephpleague/csv/releases.atom",
- "source": "https://github.com/thephpleague/csv"
- },
- "funding": [
- {
- "url": "https://github.com/sponsors/nyamsprod",
- "type": "github"
- }
- ],
- "time": "2023-12-29T07:34:53+00:00"
- },
- {
- "name": "matomo/device-detector",
- "version": "6.1.6",
- "source": {
- "type": "git",
- "url": "https://github.com/matomo-org/device-detector.git",
- "reference": "5cbea85106e561c7138d03603eb6e05128480409"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/matomo-org/device-detector/zipball/5cbea85106e561c7138d03603eb6e05128480409",
- "reference": "5cbea85106e561c7138d03603eb6e05128480409",
- "shasum": ""
- },
- "require": {
- "mustangostang/spyc": "*",
- "php": "^7.2|^8.0"
- },
- "replace": {
- "piwik/device-detector": "self.version"
- },
- "require-dev": {
- "matthiasmullie/scrapbook": "^1.4.7",
- "mayflower/mo4-coding-standard": "^v8.0.0",
- "phpstan/phpstan": "^0.12.52",
- "phpunit/phpunit": "^8.5.8",
- "psr/cache": "^1.0.1",
- "psr/simple-cache": "^1.0.1",
- "symfony/yaml": "^5.1.7"
- },
- "suggest": {
- "doctrine/cache": "Can directly be used for caching purpose",
- "ext-yaml": "Necessary for using the Pecl YAML parser"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "DeviceDetector\\": ""
- },
- "exclude-from-classmap": [
- "Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "LGPL-3.0-or-later"
- ],
- "authors": [
- {
- "name": "The Matomo Team",
- "email": "hello@matomo.org",
- "homepage": "https://matomo.org/team/"
- }
- ],
- "description": "The Universal Device Detection library, that parses User Agents and detects devices (desktop, tablet, mobile, tv, cars, console, etc.), clients (browsers, media players, mobile apps, feed readers, libraries, etc), operating systems, devices, brands and models.",
- "homepage": "https://matomo.org",
- "keywords": [
- "devicedetection",
- "parser",
- "useragent"
- ],
- "support": {
- "forum": "https://forum.matomo.org/",
- "issues": "https://github.com/matomo-org/device-detector/issues",
- "source": "https://github.com/matomo-org/matomo",
- "wiki": "https://dev.matomo.org/"
- },
- "time": "2023-10-02T10:01:54+00:00"
- },
- {
- "name": "mongodb/mongodb",
- "version": "1.10.0",
- "source": {
- "type": "git",
- "url": "https://github.com/mongodb/mongo-php-library.git",
- "reference": "b0bbd657f84219212487d01a8ffe93a789e1e488"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/mongodb/mongo-php-library/zipball/b0bbd657f84219212487d01a8ffe93a789e1e488",
- "reference": "b0bbd657f84219212487d01a8ffe93a789e1e488",
- "shasum": ""
- },
- "require": {
- "ext-hash": "*",
- "ext-json": "*",
- "ext-mongodb": "^1.11.0",
- "jean85/pretty-package-versions": "^1.2 || ^2.0.1",
- "php": "^7.1 || ^8.0",
- "symfony/polyfill-php80": "^1.19"
- },
- "require-dev": {
- "doctrine/coding-standard": "^9.0",
- "squizlabs/php_codesniffer": "^3.6",
- "symfony/phpunit-bridge": "^5.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.10.x-dev"
- }
- },
- "autoload": {
- "files": [
- "src/functions.php"
- ],
- "psr-4": {
- "MongoDB\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "Andreas Braun",
- "email": "andreas.braun@mongodb.com"
- },
- {
- "name": "Jeremy Mikola",
- "email": "jmikola@gmail.com"
- }
- ],
- "description": "MongoDB driver library",
- "homepage": "https://jira.mongodb.org/browse/PHPLIB",
- "keywords": [
- "database",
- "driver",
- "mongodb",
- "persistence"
- ],
- "support": {
- "issues": "https://github.com/mongodb/mongo-php-library/issues",
- "source": "https://github.com/mongodb/mongo-php-library/tree/1.10.0"
- },
- "time": "2021-10-20T22:22:37+00:00"
- },
- {
- "name": "mustangostang/spyc",
- "version": "0.6.3",
- "source": {
- "type": "git",
- "url": "https://github.com/mustangostang/spyc.git",
- "reference": "4627c838b16550b666d15aeae1e5289dd5b77da0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/mustangostang/spyc/zipball/4627c838b16550b666d15aeae1e5289dd5b77da0",
- "reference": "4627c838b16550b666d15aeae1e5289dd5b77da0",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.1"
- },
- "require-dev": {
- "phpunit/phpunit": "4.3.*@dev"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "0.5.x-dev"
- }
- },
- "autoload": {
- "files": [
- "Spyc.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "mustangostang",
- "email": "vlad.andersen@gmail.com"
- }
- ],
- "description": "A simple YAML loader/dumper class for PHP",
- "homepage": "https://github.com/mustangostang/spyc/",
- "keywords": [
- "spyc",
- "yaml",
- "yml"
- ],
- "support": {
- "issues": "https://github.com/mustangostang/spyc/issues",
- "source": "https://github.com/mustangostang/spyc/tree/0.6.3"
- },
- "time": "2019-09-10T13:16:29+00:00"
- },
- {
- "name": "paragonie/constant_time_encoding",
- "version": "v2.7.0",
- "source": {
- "type": "git",
- "url": "https://github.com/paragonie/constant_time_encoding.git",
- "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/52a0d99e69f56b9ec27ace92ba56897fe6993105",
- "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105",
- "shasum": ""
- },
- "require": {
- "php": "^7|^8"
- },
- "require-dev": {
- "phpunit/phpunit": "^6|^7|^8|^9",
- "vimeo/psalm": "^1|^2|^3|^4"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "ParagonIE\\ConstantTime\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Paragon Initiative Enterprises",
- "email": "security@paragonie.com",
- "homepage": "https://paragonie.com",
- "role": "Maintainer"
- },
- {
- "name": "Steve 'Sc00bz' Thomas",
- "email": "steve@tobtu.com",
- "homepage": "https://www.tobtu.com",
- "role": "Original Developer"
- }
- ],
- "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
- "keywords": [
- "base16",
- "base32",
- "base32_decode",
- "base32_encode",
- "base64",
- "base64_decode",
- "base64_encode",
- "bin2hex",
- "encoding",
- "hex",
- "hex2bin",
- "rfc4648"
- ],
- "support": {
- "email": "info@paragonie.com",
- "issues": "https://github.com/paragonie/constant_time_encoding/issues",
- "source": "https://github.com/paragonie/constant_time_encoding"
- },
- "time": "2024-05-08T12:18:48+00:00"
- },
- {
- "name": "phpmailer/phpmailer",
- "version": "v6.9.1",
- "source": {
- "type": "git",
- "url": "https://github.com/PHPMailer/PHPMailer.git",
- "reference": "039de174cd9c17a8389754d3b877a2ed22743e18"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/039de174cd9c17a8389754d3b877a2ed22743e18",
- "reference": "039de174cd9c17a8389754d3b877a2ed22743e18",
- "shasum": ""
- },
- "require": {
- "ext-ctype": "*",
- "ext-filter": "*",
- "ext-hash": "*",
- "php": ">=5.5.0"
- },
- "require-dev": {
- "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
- "doctrine/annotations": "^1.2.6 || ^1.13.3",
- "php-parallel-lint/php-console-highlighter": "^1.0.0",
- "php-parallel-lint/php-parallel-lint": "^1.3.2",
- "phpcompatibility/php-compatibility": "^9.3.5",
- "roave/security-advisories": "dev-latest",
- "squizlabs/php_codesniffer": "^3.7.2",
- "yoast/phpunit-polyfills": "^1.0.4"
- },
- "suggest": {
- "decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication",
- "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
- "ext-openssl": "Needed for secure SMTP sending and DKIM signing",
- "greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication",
- "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
- "league/oauth2-google": "Needed for Google XOAUTH2 authentication",
- "psr/log": "For optional PSR-3 debug logging",
- "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)",
- "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "PHPMailer\\PHPMailer\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "LGPL-2.1-only"
- ],
- "authors": [
- {
- "name": "Marcus Bointon",
- "email": "phpmailer@synchromedia.co.uk"
- },
- {
- "name": "Jim Jagielski",
- "email": "jimjag@gmail.com"
- },
- {
- "name": "Andy Prevost",
- "email": "codeworxtech@users.sourceforge.net"
- },
- {
- "name": "Brent R. Matzelle"
- }
- ],
- "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
- "support": {
- "issues": "https://github.com/PHPMailer/PHPMailer/issues",
- "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.1"
- },
- "funding": [
- {
- "url": "https://github.com/Synchro",
- "type": "github"
- }
- ],
- "time": "2023-11-25T22:23:28+00:00"
- },
- {
- "name": "spomky-labs/otphp",
- "version": "v10.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/Spomky-Labs/otphp.git",
- "reference": "9784d9f7c790eed26e102d6c78f12c754036c366"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/9784d9f7c790eed26e102d6c78f12c754036c366",
- "reference": "9784d9f7c790eed26e102d6c78f12c754036c366",
- "shasum": ""
- },
- "require": {
- "beberlei/assert": "^3.0",
- "ext-mbstring": "*",
- "paragonie/constant_time_encoding": "^2.0",
- "php": "^7.2|^8.0",
- "thecodingmachine/safe": "^0.1.14|^1.0|^2.0"
- },
- "require-dev": {
- "php-coveralls/php-coveralls": "^2.0",
- "phpstan/phpstan": "^0.12",
- "phpstan/phpstan-beberlei-assert": "^0.12",
- "phpstan/phpstan-deprecation-rules": "^0.12",
- "phpstan/phpstan-phpunit": "^0.12",
- "phpstan/phpstan-strict-rules": "^0.12",
- "phpunit/phpunit": "^8.0",
- "thecodingmachine/phpstan-safe-rule": "^1.0 || ^2.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "v10.0": "10.0.x-dev",
- "v9.0": "9.0.x-dev",
- "v8.3": "8.3.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "OTPHP\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Florent Morselli",
- "homepage": "https://github.com/Spomky"
- },
- {
- "name": "All contributors",
- "homepage": "https://github.com/Spomky-Labs/otphp/contributors"
- }
- ],
- "description": "A PHP library for generating one time passwords according to RFC 4226 (HOTP Algorithm) and the RFC 6238 (TOTP Algorithm) and compatible with Google Authenticator",
- "homepage": "https://github.com/Spomky-Labs/otphp",
- "keywords": [
- "FreeOTP",
- "RFC 4226",
- "RFC 6238",
- "google authenticator",
- "hotp",
- "otp",
- "totp"
- ],
- "support": {
- "issues": "https://github.com/Spomky-Labs/otphp/issues",
- "source": "https://github.com/Spomky-Labs/otphp/tree/v10.0.3"
- },
- "time": "2022-03-17T08:00:35+00:00"
- },
- {
- "name": "symfony/polyfill-mbstring",
- "version": "v1.29.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
- "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
- "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.29.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-01-29T20:11:03+00:00"
- },
- {
- "name": "symfony/polyfill-php80",
- "version": "v1.29.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
- "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
- "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.29.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-01-29T20:11:03+00:00"
- },
- {
- "name": "thecodingmachine/safe",
- "version": "v2.5.0",
- "source": {
- "type": "git",
- "url": "https://github.com/thecodingmachine/safe.git",
- "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/3115ecd6b4391662b4931daac4eba6b07a2ac1f0",
- "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0",
- "shasum": ""
- },
- "require": {
- "php": "^8.0"
- },
- "require-dev": {
- "phpstan/phpstan": "^1.5",
- "phpunit/phpunit": "^9.5",
- "squizlabs/php_codesniffer": "^3.2",
- "thecodingmachine/phpstan-strict-rules": "^1.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.2.x-dev"
- }
- },
- "autoload": {
- "files": [
- "deprecated/apc.php",
- "deprecated/array.php",
- "deprecated/datetime.php",
- "deprecated/libevent.php",
- "deprecated/misc.php",
- "deprecated/password.php",
- "deprecated/mssql.php",
- "deprecated/stats.php",
- "deprecated/strings.php",
- "lib/special_cases.php",
- "deprecated/mysqli.php",
- "generated/apache.php",
- "generated/apcu.php",
- "generated/array.php",
- "generated/bzip2.php",
- "generated/calendar.php",
- "generated/classobj.php",
- "generated/com.php",
- "generated/cubrid.php",
- "generated/curl.php",
- "generated/datetime.php",
- "generated/dir.php",
- "generated/eio.php",
- "generated/errorfunc.php",
- "generated/exec.php",
- "generated/fileinfo.php",
- "generated/filesystem.php",
- "generated/filter.php",
- "generated/fpm.php",
- "generated/ftp.php",
- "generated/funchand.php",
- "generated/gettext.php",
- "generated/gmp.php",
- "generated/gnupg.php",
- "generated/hash.php",
- "generated/ibase.php",
- "generated/ibmDb2.php",
- "generated/iconv.php",
- "generated/image.php",
- "generated/imap.php",
- "generated/info.php",
- "generated/inotify.php",
- "generated/json.php",
- "generated/ldap.php",
- "generated/libxml.php",
- "generated/lzf.php",
- "generated/mailparse.php",
- "generated/mbstring.php",
- "generated/misc.php",
- "generated/mysql.php",
- "generated/network.php",
- "generated/oci8.php",
- "generated/opcache.php",
- "generated/openssl.php",
- "generated/outcontrol.php",
- "generated/pcntl.php",
- "generated/pcre.php",
- "generated/pgsql.php",
- "generated/posix.php",
- "generated/ps.php",
- "generated/pspell.php",
- "generated/readline.php",
- "generated/rpminfo.php",
- "generated/rrd.php",
- "generated/sem.php",
- "generated/session.php",
- "generated/shmop.php",
- "generated/sockets.php",
- "generated/sodium.php",
- "generated/solr.php",
- "generated/spl.php",
- "generated/sqlsrv.php",
- "generated/ssdeep.php",
- "generated/ssh2.php",
- "generated/stream.php",
- "generated/strings.php",
- "generated/swoole.php",
- "generated/uodbc.php",
- "generated/uopz.php",
- "generated/url.php",
- "generated/var.php",
- "generated/xdiff.php",
- "generated/xml.php",
- "generated/xmlrpc.php",
- "generated/yaml.php",
- "generated/yaz.php",
- "generated/zip.php",
- "generated/zlib.php"
- ],
- "classmap": [
- "lib/DateTime.php",
- "lib/DateTimeImmutable.php",
- "lib/Exceptions/",
- "deprecated/Exceptions/",
- "generated/Exceptions/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "PHP core functions that throw exceptions instead of returning FALSE on error",
- "support": {
- "issues": "https://github.com/thecodingmachine/safe/issues",
- "source": "https://github.com/thecodingmachine/safe/tree/v2.5.0"
- },
- "time": "2023-04-05T11:54:14+00:00"
- },
- {
- "name": "utopia-php/abuse",
- "version": "0.37.0",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/abuse.git",
- "reference": "2de5c12886cbd516e511e559afdd9e615d871062"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/abuse/zipball/2de5c12886cbd516e511e559afdd9e615d871062",
- "reference": "2de5c12886cbd516e511e559afdd9e615d871062",
- "shasum": ""
- },
- "require": {
- "ext-curl": "*",
- "ext-pdo": "*",
- "php": ">=8.0",
- "utopia-php/database": "0.49.*"
- },
- "require-dev": {
- "laravel/pint": "1.5.*",
- "phpstan/phpstan": "^1.9",
- "phpunit/phpunit": "^9.4"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Abuse\\": "src/Abuse"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple abuse library to manage application usage limits",
- "keywords": [
- "Abuse",
- "framework",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/abuse/issues",
- "source": "https://github.com/utopia-php/abuse/tree/0.37.0"
- },
- "time": "2024-03-06T21:20:27+00:00"
- },
- {
- "name": "utopia-php/analytics",
- "version": "0.10.2",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/analytics.git",
- "reference": "14c805114736f44c26d6d24b176a2f8b93d86a1f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/analytics/zipball/14c805114736f44c26d6d24b176a2f8b93d86a1f",
- "reference": "14c805114736f44c26d6d24b176a2f8b93d86a1f",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0",
- "utopia-php/cli": "^0.15.0"
- },
- "require-dev": {
- "laravel/pint": "dev-main",
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Analytics\\": "src/Analytics"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple library to track events & users.",
- "keywords": [
- "analytics",
- "framework",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/analytics/issues",
- "source": "https://github.com/utopia-php/analytics/tree/0.10.2"
- },
- "time": "2023-03-22T12:01:09+00:00"
- },
- {
- "name": "utopia-php/audit",
- "version": "0.39.0",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/audit.git",
- "reference": "f0bc15012e05cc0b9dde012ab27d25f193768a2c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/audit/zipball/f0bc15012e05cc0b9dde012ab27d25f193768a2c",
- "reference": "f0bc15012e05cc0b9dde012ab27d25f193768a2c",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0",
- "utopia-php/database": "0.49.*"
- },
- "require-dev": {
- "laravel/pint": "1.5.*",
- "phpstan/phpstan": "^1.8",
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Audit\\": "src/Audit"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple audit library to manage application users logs",
- "keywords": [
- "Audit",
- "framework",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/audit/issues",
- "source": "https://github.com/utopia-php/audit/tree/0.39.0"
- },
- "time": "2024-03-06T21:20:37+00:00"
- },
- {
- "name": "utopia-php/cache",
- "version": "0.9.1",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/cache.git",
- "reference": "552b4c554bb14d0c529631ce304cdf4a2b9d06a6"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/cache/zipball/552b4c554bb14d0c529631ce304cdf4a2b9d06a6",
- "reference": "552b4c554bb14d0c529631ce304cdf4a2b9d06a6",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "ext-memcached": "*",
- "ext-redis": "*",
- "php": ">=8.0"
- },
- "require-dev": {
- "laravel/pint": "1.2.*",
- "phpstan/phpstan": "1.9.x-dev",
- "phpunit/phpunit": "^9.3",
- "vimeo/psalm": "4.13.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Cache\\": "src/Cache"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple cache library to manage application cache storing, loading and purging",
- "keywords": [
- "cache",
- "framework",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/cache/issues",
- "source": "https://github.com/utopia-php/cache/tree/0.9.1"
- },
- "time": "2024-03-19T17:07:20+00:00"
- },
- {
- "name": "utopia-php/cli",
- "version": "0.15.0",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/cli.git",
- "reference": "ccb7c8125ffe0254fef8f25744bfa376eb7bd0ea"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/cli/zipball/ccb7c8125ffe0254fef8f25744bfa376eb7bd0ea",
- "reference": "ccb7c8125ffe0254fef8f25744bfa376eb7bd0ea",
- "shasum": ""
- },
- "require": {
- "php": ">=7.4",
- "utopia-php/framework": "0.*.*"
- },
- "require-dev": {
- "laravel/pint": "1.2.*",
- "phpunit/phpunit": "^9.3",
- "squizlabs/php_codesniffer": "^3.6",
- "vimeo/psalm": "4.0.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\CLI\\": "src/CLI"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple CLI library to manage command line applications",
- "keywords": [
- "cli",
- "command line",
- "framework",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/cli/issues",
- "source": "https://github.com/utopia-php/cli/tree/0.15.0"
- },
- "time": "2023-03-01T05:55:14+00:00"
- },
- {
- "name": "utopia-php/config",
- "version": "0.2.2",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/config.git",
- "reference": "a3d7bc0312d7150d5e04b1362dc34b2b136908cc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/config/zipball/a3d7bc0312d7150d5e04b1362dc34b2b136908cc",
- "reference": "a3d7bc0312d7150d5e04b1362dc34b2b136908cc",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3",
- "vimeo/psalm": "4.0.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Config\\": "src/Config"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "eldad@appwrite.io"
- }
- ],
- "description": "A simple Config library to managing application config variables",
- "keywords": [
- "config",
- "framework",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/config/issues",
- "source": "https://github.com/utopia-php/config/tree/0.2.2"
- },
- "time": "2020-10-24T09:49:09+00:00"
- },
- {
- "name": "utopia-php/database",
- "version": "0.49.8",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/database.git",
- "reference": "4fb1f6d216f6f628dd5b013e1f539ae2191228b1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/database/zipball/4fb1f6d216f6f628dd5b013e1f539ae2191228b1",
- "reference": "4fb1f6d216f6f628dd5b013e1f539ae2191228b1",
- "shasum": ""
- },
- "require": {
- "ext-mbstring": "*",
- "ext-pdo": "*",
- "php": ">=8.0",
- "utopia-php/cache": "0.9.*",
- "utopia-php/framework": "0.33.*",
- "utopia-php/mongo": "0.3.*"
- },
- "require-dev": {
- "fakerphp/faker": "^1.14",
- "laravel/pint": "1.13.*",
- "pcov/clobber": "^2.0",
- "phpstan/phpstan": "1.10.*",
- "phpunit/phpunit": "^9.4",
- "rregeer/phpunit-coverage-check": "^0.3.1",
- "swoole/ide-helper": "4.8.0",
- "utopia-php/cli": "^0.14.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Database\\": "src/Database"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple library to manage application persistence using multiple database adapters",
- "keywords": [
- "database",
- "framework",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/database/issues",
- "source": "https://github.com/utopia-php/database/tree/0.49.8"
- },
- "time": "2024-05-09T04:43:05+00:00"
- },
- {
- "name": "utopia-php/domains",
- "version": "0.5.0",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/domains.git",
- "reference": "bf07f60326f8389f378ddf6fcde86217e5cfe18c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/domains/zipball/bf07f60326f8389f378ddf6fcde86217e5cfe18c",
- "reference": "bf07f60326f8389f378ddf6fcde86217e5cfe18c",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0",
- "utopia-php/framework": "0.*.*"
- },
- "require-dev": {
- "laravel/pint": "1.2.*",
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Domains\\": "src/Domains"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "eldad@appwrite.io"
- },
- {
- "name": "Wess Cope",
- "email": "wess@appwrite.io"
- }
- ],
- "description": "Utopia Domains library is simple and lite library for parsing web domains. This library is aiming to be as simple and easy to learn and use.",
- "keywords": [
- "domains",
- "framework",
- "icann",
- "php",
- "public suffix",
- "tld",
- "tld extract",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/domains/issues",
- "source": "https://github.com/utopia-php/domains/tree/0.5.0"
- },
- "time": "2024-01-03T22:04:27+00:00"
- },
- {
- "name": "utopia-php/dsn",
- "version": "0.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/dsn.git",
- "reference": "42ee37a3d1785100b2f69091c9d4affadb6846eb"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/dsn/zipball/42ee37a3d1785100b2f69091c9d4affadb6846eb",
- "reference": "42ee37a3d1785100b2f69091c9d4affadb6846eb",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0"
- },
- "require-dev": {
- "laravel/pint": "1.2.*",
- "phpunit/phpunit": "^9.3",
- "squizlabs/php_codesniffer": "^3.6",
- "vimeo/psalm": "4.0.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\DSN\\": "src/DSN"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple library for parsing and managing Data Source Names ( DSNs )",
- "keywords": [
- "dsn",
- "framework",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/dsn/issues",
- "source": "https://github.com/utopia-php/dsn/tree/0.2.1"
- },
- "time": "2024-05-07T02:01:25+00:00"
- },
- {
- "name": "utopia-php/fetch",
- "version": "0.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/fetch.git",
- "reference": "1423c0ee3eef944d816ca6e31706895b585aea82"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/fetch/zipball/1423c0ee3eef944d816ca6e31706895b585aea82",
- "reference": "1423c0ee3eef944d816ca6e31706895b585aea82",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0"
- },
- "require-dev": {
- "laravel/pint": "^1.5.0",
- "phpstan/phpstan": "^1.10",
- "phpunit/phpunit": "^9.5"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Fetch\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple library that provides an interface for making HTTP Requests.",
- "support": {
- "issues": "https://github.com/utopia-php/fetch/issues",
- "source": "https://github.com/utopia-php/fetch/tree/0.2.1"
- },
- "time": "2024-03-18T11:50:59+00:00"
- },
- {
- "name": "utopia-php/framework",
- "version": "0.33.6",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/http.git",
- "reference": "8fe57da0cecd57e3b17cd395b4a666a24f4c07a6"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/http/zipball/8fe57da0cecd57e3b17cd395b4a666a24f4c07a6",
- "reference": "8fe57da0cecd57e3b17cd395b4a666a24f4c07a6",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0"
- },
- "require-dev": {
- "laravel/pint": "^1.2",
- "phpbench/phpbench": "^1.2",
- "phpstan/phpstan": "^1.10",
- "phpunit/phpunit": "^9.5.25"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple, light and advanced PHP framework",
- "keywords": [
- "framework",
- "php",
- "upf"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/http/issues",
- "source": "https://github.com/utopia-php/http/tree/0.33.6"
- },
- "time": "2024-03-21T18:10:57+00:00"
- },
- {
- "name": "utopia-php/image",
- "version": "0.6.1",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/image.git",
- "reference": "2d74c27e69e65a93cf94a16586598a04fe435bf0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/image/zipball/2d74c27e69e65a93cf94a16586598a04fe435bf0",
- "reference": "2d74c27e69e65a93cf94a16586598a04fe435bf0",
- "shasum": ""
- },
- "require": {
- "ext-imagick": "*",
- "php": ">=8.0"
- },
- "require-dev": {
- "laravel/pint": "1.2.*",
- "phpstan/phpstan": "1.9.x-dev",
- "phpunit/phpunit": "^9.3",
- "vimeo/psalm": "4.13.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Image\\": "src/Image"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple Image manipulation library",
- "keywords": [
- "framework",
- "image",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/image/issues",
- "source": "https://github.com/utopia-php/image/tree/0.6.1"
- },
- "time": "2024-02-05T13:31:44+00:00"
- },
- {
- "name": "utopia-php/locale",
- "version": "0.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/locale.git",
- "reference": "c2d9358d0fe2f6b6ed5448369f9d1e430c615447"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/locale/zipball/c2d9358d0fe2f6b6ed5448369f9d1e430c615447",
- "reference": "c2d9358d0fe2f6b6ed5448369f9d1e430c615447",
- "shasum": ""
- },
- "require": {
- "php": ">=7.4"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3",
- "vimeo/psalm": "4.0.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Locale\\": "src/Locale"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "eldad@appwrite.io"
- }
- ],
- "description": "A simple locale library to manage application translations",
- "keywords": [
- "framework",
- "locale",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/locale/issues",
- "source": "https://github.com/utopia-php/locale/tree/0.4.0"
- },
- "time": "2021-07-24T11:35:55+00:00"
- },
- {
- "name": "utopia-php/logger",
- "version": "0.3.2",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/logger.git",
- "reference": "ba763c10688fe2ed715ad2bed3f13d18dfec6253"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/logger/zipball/ba763c10688fe2ed715ad2bed3f13d18dfec6253",
- "reference": "ba763c10688fe2ed715ad2bed3f13d18dfec6253",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0"
- },
- "require-dev": {
- "phpstan/phpstan": "1.9.x-dev",
- "phpunit/phpunit": "^9.3",
- "vimeo/psalm": "4.0.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Logger\\": "src/Logger"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Utopia Logger library is simple and lite library for logging information, such as errors or warnings. This library is aiming to be as simple and easy to learn and use.",
- "keywords": [
- "appsignal",
- "errors",
- "framework",
- "logger",
- "logging",
- "logs",
- "php",
- "raygun",
- "sentry",
- "upf",
- "utopia",
- "warnings"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/logger/issues",
- "source": "https://github.com/utopia-php/logger/tree/0.3.2"
- },
- "time": "2023-11-22T14:45:43+00:00"
- },
- {
- "name": "utopia-php/messaging",
- "version": "dev-get-country-code",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/messaging.git",
- "reference": "724ba39fd7d5f701f54370201050e423b9de005f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/messaging/zipball/724ba39fd7d5f701f54370201050e423b9de005f",
- "reference": "724ba39fd7d5f701f54370201050e423b9de005f",
- "shasum": ""
- },
- "require": {
- "ext-curl": "*",
- "ext-openssl": "*",
- "giggsey/libphonenumber-for-php-lite": "8.13.36",
- "php": ">=8.0.0",
- "phpmailer/phpmailer": "6.9.1"
- },
- "require-dev": {
- "laravel/pint": "1.13.11",
- "phpstan/phpstan": "1.10.58",
- "phpunit/phpunit": "10.5.10"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Messaging\\": "src/Utopia/Messaging"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple, light and advanced PHP messaging library",
- "keywords": [
- "library",
- "messaging",
- "php",
- "upf",
- "utopia",
- "utopia-php"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/messaging/issues",
- "source": "https://github.com/utopia-php/messaging/tree/get-country-code"
- },
- "time": "2024-05-08T17:06:19+00:00"
- },
- {
- "name": "utopia-php/migration",
- "version": "0.4.1",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/migration.git",
- "reference": "ae3cfe93f6d313105d226aeb68806660c806a925"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/migration/zipball/ae3cfe93f6d313105d226aeb68806660c806a925",
- "reference": "ae3cfe93f6d313105d226aeb68806660c806a925",
- "shasum": ""
- },
- "require": {
- "appwrite/appwrite": "10.1.0",
- "php": "8.*",
- "utopia-php/cli": "0.*"
- },
- "require-dev": {
- "laravel/pint": "1.*",
- "phpunit/phpunit": "9.*",
- "vlucas/phpdotenv": "5.*"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Migration\\": "src/Migration"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple library to migrate resources between services.",
- "keywords": [
- "framework",
- "migration",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/migration/issues",
- "source": "https://github.com/utopia-php/migration/tree/0.4.1"
- },
- "time": "2024-05-01T13:19:18+00:00"
- },
- {
- "name": "utopia-php/mongo",
- "version": "0.3.1",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/mongo.git",
- "reference": "52326a9a43e2d27ff0c15c48ba746dacbe9a7aee"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/mongo/zipball/52326a9a43e2d27ff0c15c48ba746dacbe9a7aee",
- "reference": "52326a9a43e2d27ff0c15c48ba746dacbe9a7aee",
- "shasum": ""
- },
- "require": {
- "ext-mongodb": "*",
- "mongodb/mongodb": "1.10.0",
- "php": ">=8.0"
- },
- "require-dev": {
- "fakerphp/faker": "^1.14",
- "laravel/pint": "1.2.*",
- "phpstan/phpstan": "1.8.*",
- "phpunit/phpunit": "^9.4",
- "swoole/ide-helper": "4.8.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Mongo\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "eldad@appwrite.io"
- },
- {
- "name": "Wess",
- "email": "wess@appwrite.io"
- }
- ],
- "description": "A simple library to manage Mongo database",
- "keywords": [
- "database",
- "mongo",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/mongo/issues",
- "source": "https://github.com/utopia-php/mongo/tree/0.3.1"
- },
- "time": "2023-09-01T17:25:28+00:00"
- },
- {
- "name": "utopia-php/orchestration",
- "version": "0.9.1",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/orchestration.git",
- "reference": "55f43513b3f940a3f4f9c2cde7682d0c2581beb0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/orchestration/zipball/55f43513b3f940a3f4f9c2cde7682d0c2581beb0",
- "reference": "55f43513b3f940a3f4f9c2cde7682d0c2581beb0",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0",
- "utopia-php/cli": "0.15.*"
- },
- "require-dev": {
- "laravel/pint": "^1.2",
- "phpunit/phpunit": "^9.3",
- "vimeo/psalm": "4.0.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Orchestration\\": "src/Orchestration"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Lite & fast micro PHP abstraction library for container orchestration",
- "keywords": [
- "docker",
- "framework",
- "kubernetes",
- "orchestration",
- "php",
- "swarm",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/orchestration/issues",
- "source": "https://github.com/utopia-php/orchestration/tree/0.9.1"
- },
- "time": "2023-03-17T15:05:06+00:00"
- },
- {
- "name": "utopia-php/platform",
- "version": "0.5.1",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/platform.git",
- "reference": "3eceef0b6593fe0f7d2efd36d40402a395a4c285"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/platform/zipball/3eceef0b6593fe0f7d2efd36d40402a395a4c285",
- "reference": "3eceef0b6593fe0f7d2efd36d40402a395a4c285",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "ext-redis": "*",
- "php": ">=8.0",
- "utopia-php/cli": "0.15.*",
- "utopia-php/framework": "0.*.*"
- },
- "require-dev": {
- "laravel/pint": "1.2.*",
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Platform\\": "src/Platform"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Light and Fast Platform Library",
- "keywords": [
- "framework",
- "php",
- "platform",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/platform/issues",
- "source": "https://github.com/utopia-php/platform/tree/0.5.1"
- },
- "time": "2023-12-26T16:14:41+00:00"
- },
- {
- "name": "utopia-php/pools",
- "version": "0.5.0",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/pools.git",
- "reference": "6f716a213a08db95eda1b5dddfa90983c1834817"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/pools/zipball/6f716a213a08db95eda1b5dddfa90983c1834817",
- "reference": "6f716a213a08db95eda1b5dddfa90983c1834817",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0"
- },
- "require-dev": {
- "laravel/pint": "1.2.*",
- "phpstan/phpstan": "1.8.*",
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Pools\\": "src/Pools"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Team Appwrite",
- "email": "team@appwrite.io"
- }
- ],
- "description": "A simple library to manage connection pools",
- "keywords": [
- "framework",
- "php",
- "pools",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/pools/issues",
- "source": "https://github.com/utopia-php/pools/tree/0.5.0"
- },
- "time": "2024-04-19T11:11:54+00:00"
- },
- {
- "name": "utopia-php/preloader",
- "version": "0.2.4",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/preloader.git",
- "reference": "65ef48392e72172f584b0baa2e224f9a1cebcce0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/preloader/zipball/65ef48392e72172f584b0baa2e224f9a1cebcce0",
- "reference": "65ef48392e72172f584b0baa2e224f9a1cebcce0",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3",
- "vimeo/psalm": "4.0.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Preloader\\": "src/Preloader"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "team@appwrite.io"
- }
- ],
- "description": "Utopia Preloader library is simple and lite library for managing PHP preloading configuration",
- "keywords": [
- "framework",
- "php",
- "preload",
- "preloader",
- "preloading",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/preloader/issues",
- "source": "https://github.com/utopia-php/preloader/tree/0.2.4"
- },
- "time": "2020-10-24T07:04:59+00:00"
- },
- {
- "name": "utopia-php/queue",
- "version": "0.7.0",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/queue.git",
- "reference": "917565256eb94bcab7246f7a746b1a486813761b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/queue/zipball/917565256eb94bcab7246f7a746b1a486813761b",
- "reference": "917565256eb94bcab7246f7a746b1a486813761b",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0",
- "utopia-php/cli": "0.15.*",
- "utopia-php/framework": "0.*.*"
- },
- "require-dev": {
- "laravel/pint": "^0.2.3",
- "phpstan/phpstan": "^1.8",
- "phpunit/phpunit": "^9.5.5",
- "swoole/ide-helper": "4.8.8",
- "workerman/workerman": "^4.0"
- },
- "suggest": {
- "ext-swoole": "Needed to support Swoole.",
- "workerman/workerman": "Needed to support Workerman."
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Queue\\": "src/Queue"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Torsten Dittmann",
- "email": "torsten@appwrite.io"
- }
- ],
- "description": "A powerful task queue.",
- "keywords": [
- "Tasks",
- "framework",
- "php",
- "queue",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/queue/issues",
- "source": "https://github.com/utopia-php/queue/tree/0.7.0"
- },
- "time": "2024-01-17T19:00:43+00:00"
- },
- {
- "name": "utopia-php/registry",
- "version": "0.5.0",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/registry.git",
- "reference": "bedc4ed54527b2803e6dfdccc39449f98522b70d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/registry/zipball/bedc4ed54527b2803e6dfdccc39449f98522b70d",
- "reference": "bedc4ed54527b2803e6dfdccc39449f98522b70d",
- "shasum": ""
- },
- "require": {
- "php": ">=7.4"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3",
- "vimeo/psalm": "4.0.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Registry\\": "src/Registry"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "eldad@appwrite.io"
- }
- ],
- "description": "A simple dependency management library for PHP",
- "keywords": [
- "dependency management",
- "di",
- "framework",
- "php",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/registry/issues",
- "source": "https://github.com/utopia-php/registry/tree/0.5.0"
- },
- "time": "2021-03-10T10:45:22+00:00"
- },
- {
- "name": "utopia-php/storage",
- "version": "0.18.4",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/storage.git",
- "reference": "94ab8758fabcefee5c5fa723616e45719833f922"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/storage/zipball/94ab8758fabcefee5c5fa723616e45719833f922",
- "reference": "94ab8758fabcefee5c5fa723616e45719833f922",
- "shasum": ""
- },
- "require": {
- "ext-brotli": "*",
- "ext-fileinfo": "*",
- "ext-lz4": "*",
- "ext-snappy": "*",
- "ext-xz": "*",
- "ext-zlib": "*",
- "ext-zstd": "*",
- "php": ">=8.0",
- "utopia-php/framework": "0.*.*",
- "utopia-php/system": "0.*.*"
- },
- "require-dev": {
- "laravel/pint": "1.2.*",
- "phpunit/phpunit": "^9.3",
- "vimeo/psalm": "4.0.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Storage\\": "src/Storage"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple Storage library to manage application storage",
- "keywords": [
- "framework",
- "php",
- "storage",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/storage/issues",
- "source": "https://github.com/utopia-php/storage/tree/0.18.4"
- },
- "time": "2024-04-02T08:24:09+00:00"
- },
- {
- "name": "utopia-php/swoole",
- "version": "0.8.2",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/swoole.git",
- "reference": "5fa9d42c608ad46a4ce42a6d2b2eae00592fccd4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/swoole/zipball/5fa9d42c608ad46a4ce42a6d2b2eae00592fccd4",
- "reference": "5fa9d42c608ad46a4ce42a6d2b2eae00592fccd4",
- "shasum": ""
- },
- "require": {
- "ext-swoole": "*",
- "php": ">=8.0",
- "utopia-php/framework": "0.33.*"
- },
- "require-dev": {
- "laravel/pint": "1.2.*",
- "phpstan/phpstan": "^1.10",
- "phpunit/phpunit": "^9.3",
- "swoole/ide-helper": "5.0.2"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\Swoole\\": "src/Swoole"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "An extension for Utopia Framework to work with PHP Swoole as a PHP FPM alternative",
- "keywords": [
- "framework",
- "http",
- "php",
- "server",
- "swoole",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/swoole/issues",
- "source": "https://github.com/utopia-php/swoole/tree/0.8.2"
- },
- "time": "2024-02-01T14:54:12+00:00"
- },
- {
- "name": "utopia-php/system",
- "version": "0.8.0",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/system.git",
- "reference": "a2cbfb3c69b9ecb8b6f06c5774f3cf279ea7665e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/system/zipball/a2cbfb3c69b9ecb8b6f06c5774f3cf279ea7665e",
- "reference": "a2cbfb3c69b9ecb8b6f06c5774f3cf279ea7665e",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0.0"
- },
- "require-dev": {
- "laravel/pint": "1.13.*",
- "phpstan/phpstan": "1.10.*",
- "phpunit/phpunit": "9.6.*"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\System\\": "src/System"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "eldad@appwrite.io"
- },
- {
- "name": "Torsten Dittmann",
- "email": "torsten@appwrite.io"
- }
- ],
- "description": "A simple library for obtaining information about the host's system.",
- "keywords": [
- "framework",
- "php",
- "system",
- "upf",
- "utopia"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/system/issues",
- "source": "https://github.com/utopia-php/system/tree/0.8.0"
- },
- "time": "2024-04-01T10:22:28+00:00"
- },
- {
- "name": "utopia-php/vcs",
- "version": "0.6.5",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/vcs.git",
- "reference": "104e47ea8e38c156ec0e0bd415caa3dcd5046fe2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/vcs/zipball/104e47ea8e38c156ec0e0bd415caa3dcd5046fe2",
- "reference": "104e47ea8e38c156ec0e0bd415caa3dcd5046fe2",
- "shasum": ""
- },
- "require": {
- "adhocore/jwt": "^1.1",
- "php": ">=8.0",
- "utopia-php/cache": "^0.9.0",
- "utopia-php/framework": "0.*.*"
- },
- "require-dev": {
- "laravel/pint": "1.2.*",
- "phpstan/phpstan": "1.8.*",
- "phpunit/phpunit": "^9.4"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\VCS\\": "src/VCS",
- "Utopia\\Detector\\": "src/Detector"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A simple library to integrate version control systems like GitHub, GitLab etc. to receive webhook events",
- "keywords": [
- "framework",
- "php",
- "utopia",
- "vcs"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/vcs/issues",
- "source": "https://github.com/utopia-php/vcs/tree/0.6.5"
- },
- "time": "2024-01-08T17:11:12+00:00"
- },
- {
- "name": "utopia-php/websocket",
- "version": "0.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/utopia-php/websocket.git",
- "reference": "51fcb86171400d8aa40d76c54593481fd273dab5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/utopia-php/websocket/zipball/51fcb86171400d8aa40d76c54593481fd273dab5",
- "reference": "51fcb86171400d8aa40d76c54593481fd273dab5",
- "shasum": ""
- },
- "require": {
- "php": ">=8.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.5.5",
- "swoole/ide-helper": "4.6.6",
- "textalk/websocket": "1.5.2",
- "vimeo/psalm": "^4.8.1",
- "workerman/workerman": "^4.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Utopia\\WebSocket\\": "src/WebSocket"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "eldad@appwrite.io"
- },
- {
- "name": "Torsten Dittmann",
- "email": "torsten@appwrite.io"
- }
- ],
- "description": "A simple abstraction for WebSocket servers.",
- "keywords": [
- "framework",
- "php",
- "upf",
- "utopia",
- "websocket"
- ],
- "support": {
- "issues": "https://github.com/utopia-php/websocket/issues",
- "source": "https://github.com/utopia-php/websocket/tree/0.1.0"
- },
- "time": "2021-12-20T10:50:09+00:00"
- },
- {
- "name": "webmozart/assert",
- "version": "1.11.0",
- "source": {
- "type": "git",
- "url": "https://github.com/webmozarts/assert.git",
- "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991",
- "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991",
- "shasum": ""
- },
- "require": {
- "ext-ctype": "*",
- "php": "^7.2 || ^8.0"
- },
- "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.11.0"
- },
- "time": "2022-06-03T18:03:27+00:00"
- },
- {
- "name": "webonyx/graphql-php",
- "version": "v14.11.10",
- "source": {
- "type": "git",
- "url": "https://github.com/webonyx/graphql-php.git",
- "reference": "d9c2fdebc6aa01d831bc2969da00e8588cffef19"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/d9c2fdebc6aa01d831bc2969da00e8588cffef19",
- "reference": "d9c2fdebc6aa01d831bc2969da00e8588cffef19",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "ext-mbstring": "*",
- "php": "^7.1 || ^8"
- },
- "require-dev": {
- "amphp/amp": "^2.3",
- "doctrine/coding-standard": "^6.0",
- "nyholm/psr7": "^1.2",
- "phpbench/phpbench": "^1.2",
- "phpstan/extension-installer": "^1.0",
- "phpstan/phpstan": "0.12.82",
- "phpstan/phpstan-phpunit": "0.12.18",
- "phpstan/phpstan-strict-rules": "0.12.9",
- "phpunit/phpunit": "^7.2 || ^8.5",
- "psr/http-message": "^1.0",
- "react/promise": "2.*",
- "simpod/php-coveralls-mirror": "^3.0"
- },
- "suggest": {
- "psr/http-message": "To use standard GraphQL server",
- "react/promise": "To leverage async resolving on React PHP platform"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "GraphQL\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A PHP port of GraphQL reference implementation",
- "homepage": "https://github.com/webonyx/graphql-php",
- "keywords": [
- "api",
- "graphql"
- ],
- "support": {
- "issues": "https://github.com/webonyx/graphql-php/issues",
- "source": "https://github.com/webonyx/graphql-php/tree/v14.11.10"
- },
- "funding": [
- {
- "url": "https://opencollective.com/webonyx-graphql-php",
- "type": "open_collective"
- }
- ],
- "time": "2023-07-05T14:23:37+00:00"
- }
- ],
- "packages-dev": [
- {
- "name": "appwrite/sdk-generator",
- "version": "0.38.2",
- "source": {
- "type": "git",
- "url": "https://github.com/appwrite/sdk-generator.git",
- "reference": "51284668529e2b10ed933412a42b603c76cded23"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/51284668529e2b10ed933412a42b603c76cded23",
- "reference": "51284668529e2b10ed933412a42b603c76cded23",
- "shasum": ""
- },
- "require": {
- "ext-curl": "*",
- "ext-json": "*",
- "ext-mbstring": "*",
- "matthiasmullie/minify": "1.3.*",
- "php": ">=8.0",
- "twig/twig": "v3.8.*"
- },
- "require-dev": {
- "brianium/paratest": "v7.4.*",
- "phpunit/phpunit": "10.5.*",
- "squizlabs/php_codesniffer": "3.9.*"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Appwrite\\SDK\\": "src/SDK",
- "Appwrite\\Spec\\": "src/Spec"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Eldad Fux",
- "email": "eldad@appwrite.io"
- }
- ],
- "description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
- "support": {
- "issues": "https://github.com/appwrite/sdk-generator/issues",
- "source": "https://github.com/appwrite/sdk-generator/tree/0.38.2"
- },
- "time": "2024-04-25T07:49:29+00:00"
- },
- {
- "name": "doctrine/deprecations",
- "version": "1.1.3",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/deprecations.git",
- "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
- "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "doctrine/coding-standard": "^9",
- "phpstan/phpstan": "1.4.10 || 1.10.15",
- "phpstan/phpstan-phpunit": "^1.0",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
- "psalm/plugin-phpunit": "0.18.4",
- "psr/log": "^1 || ^2 || ^3",
- "vimeo/psalm": "4.30.0 || 5.12.0"
- },
- "suggest": {
- "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
- "homepage": "https://www.doctrine-project.org/",
- "support": {
- "issues": "https://github.com/doctrine/deprecations/issues",
- "source": "https://github.com/doctrine/deprecations/tree/1.1.3"
- },
- "time": "2024-01-30T19:34:25+00:00"
- },
- {
- "name": "doctrine/instantiator",
- "version": "1.5.0",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/instantiator.git",
- "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b",
- "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "doctrine/coding-standard": "^9 || ^11",
- "ext-pdo": "*",
- "ext-phar": "*",
- "phpbench/phpbench": "^0.16 || ^1",
- "phpstan/phpstan": "^1.4",
- "phpstan/phpstan-phpunit": "^1",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
- "vimeo/psalm": "^4.30 || ^5.4"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com",
- "homepage": "https://ocramius.github.io/"
- }
- ],
- "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
- "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
- "keywords": [
- "constructor",
- "instantiate"
- ],
- "support": {
- "issues": "https://github.com/doctrine/instantiator/issues",
- "source": "https://github.com/doctrine/instantiator/tree/1.5.0"
- },
- "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%2Finstantiator",
- "type": "tidelift"
- }
- ],
- "time": "2022-12-30T00:15:36+00:00"
- },
- {
- "name": "laravel/pint",
- "version": "v1.15.3",
- "source": {
- "type": "git",
- "url": "https://github.com/laravel/pint.git",
- "reference": "3600b5d17aff52f6100ea4921849deacbbeb8656"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/laravel/pint/zipball/3600b5d17aff52f6100ea4921849deacbbeb8656",
- "reference": "3600b5d17aff52f6100ea4921849deacbbeb8656",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "ext-mbstring": "*",
- "ext-tokenizer": "*",
- "ext-xml": "*",
- "php": "^8.1.0"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "^3.54.0",
- "illuminate/view": "^10.48.8",
- "larastan/larastan": "^2.9.5",
- "laravel-zero/framework": "^10.3.0",
- "mockery/mockery": "^1.6.11",
- "nunomaduro/termwind": "^1.15.1",
- "pestphp/pest": "^2.34.7"
- },
- "bin": [
- "builds/pint"
- ],
- "type": "project",
- "autoload": {
- "psr-4": {
- "App\\": "app/",
- "Database\\Seeders\\": "database/seeders/",
- "Database\\Factories\\": "database/factories/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nuno Maduro",
- "email": "enunomaduro@gmail.com"
- }
- ],
- "description": "An opinionated code formatter for PHP.",
- "homepage": "https://laravel.com",
- "keywords": [
- "format",
- "formatter",
- "lint",
- "linter",
- "php"
- ],
- "support": {
- "issues": "https://github.com/laravel/pint/issues",
- "source": "https://github.com/laravel/pint"
- },
- "time": "2024-04-30T15:02:26+00:00"
- },
- {
- "name": "matthiasmullie/minify",
- "version": "1.3.73",
- "source": {
- "type": "git",
- "url": "https://github.com/matthiasmullie/minify.git",
- "reference": "cb7a9297b4ab070909cefade30ee95054d4ae87a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/matthiasmullie/minify/zipball/cb7a9297b4ab070909cefade30ee95054d4ae87a",
- "reference": "cb7a9297b4ab070909cefade30ee95054d4ae87a",
- "shasum": ""
- },
- "require": {
- "ext-pcre": "*",
- "matthiasmullie/path-converter": "~1.1",
- "php": ">=5.3.0"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": ">=2.0",
- "matthiasmullie/scrapbook": ">=1.3",
- "phpunit/phpunit": ">=4.8",
- "squizlabs/php_codesniffer": ">=3.0"
- },
- "suggest": {
- "psr/cache-implementation": "Cache implementation to use with Minify::cache"
- },
- "bin": [
- "bin/minifycss",
- "bin/minifyjs"
- ],
- "type": "library",
- "autoload": {
- "psr-4": {
- "MatthiasMullie\\Minify\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Matthias Mullie",
- "email": "minify@mullie.eu",
- "homepage": "https://www.mullie.eu",
- "role": "Developer"
- }
- ],
- "description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.",
- "homepage": "https://github.com/matthiasmullie/minify",
- "keywords": [
- "JS",
- "css",
- "javascript",
- "minifier",
- "minify"
- ],
- "support": {
- "issues": "https://github.com/matthiasmullie/minify/issues",
- "source": "https://github.com/matthiasmullie/minify/tree/1.3.73"
- },
- "funding": [
- {
- "url": "https://github.com/matthiasmullie",
- "type": "github"
- }
- ],
- "time": "2024-03-15T10:27:10+00:00"
- },
- {
- "name": "matthiasmullie/path-converter",
- "version": "1.1.3",
- "source": {
- "type": "git",
- "url": "https://github.com/matthiasmullie/path-converter.git",
- "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/matthiasmullie/path-converter/zipball/e7d13b2c7e2f2268e1424aaed02085518afa02d9",
- "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9",
- "shasum": ""
- },
- "require": {
- "ext-pcre": "*",
- "php": ">=5.3.0"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.8"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "MatthiasMullie\\PathConverter\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Matthias Mullie",
- "email": "pathconverter@mullie.eu",
- "homepage": "http://www.mullie.eu",
- "role": "Developer"
- }
- ],
- "description": "Relative path converter",
- "homepage": "http://github.com/matthiasmullie/path-converter",
- "keywords": [
- "converter",
- "path",
- "paths",
- "relative"
- ],
- "support": {
- "issues": "https://github.com/matthiasmullie/path-converter/issues",
- "source": "https://github.com/matthiasmullie/path-converter/tree/1.1.3"
- },
- "time": "2019-02-05T23:41:09+00:00"
- },
- {
- "name": "myclabs/deep-copy",
- "version": "1.11.1",
- "source": {
- "type": "git",
- "url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
- "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "conflict": {
- "doctrine/collections": "<1.6.8",
- "doctrine/common": "<2.13.3 || >=3,<3.2.2"
- },
- "require-dev": {
- "doctrine/collections": "^1.6.8",
- "doctrine/common": "^2.13.3 || ^3.2.2",
- "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
- },
- "type": "library",
- "autoload": {
- "files": [
- "src/DeepCopy/deep_copy.php"
- ],
- "psr-4": {
- "DeepCopy\\": "src/DeepCopy/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Create deep copies (clones) of your objects",
- "keywords": [
- "clone",
- "copy",
- "duplicate",
- "object",
- "object graph"
- ],
- "support": {
- "issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1"
- },
- "funding": [
- {
- "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
- "type": "tidelift"
- }
- ],
- "time": "2023-03-08T13:26:56+00:00"
- },
- {
- "name": "nikic/php-parser",
- "version": "v5.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13",
- "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13",
- "shasum": ""
- },
- "require": {
- "ext-ctype": "*",
- "ext-json": "*",
- "ext-tokenizer": "*",
- "php": ">=7.4"
- },
- "require-dev": {
- "ircmaxell/php-yacc": "^0.0.7",
- "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
- },
- "bin": [
- "bin/php-parse"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "PhpParser\\": "lib/PhpParser"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Nikita Popov"
- }
- ],
- "description": "A PHP parser written in PHP",
- "keywords": [
- "parser",
- "php"
- ],
- "support": {
- "issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2"
- },
- "time": "2024-03-05T20:51:40+00:00"
- },
- {
- "name": "phar-io/manifest",
- "version": "2.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/phar-io/manifest.git",
- "reference": "54750ef60c58e43759730615a392c31c80e23176"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
- "reference": "54750ef60c58e43759730615a392c31c80e23176",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-libxml": "*",
- "ext-phar": "*",
- "ext-xmlwriter": "*",
- "phar-io/version": "^3.0.1",
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Heuer",
- "email": "sebastian@phpeople.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "Developer"
- }
- ],
- "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
- "support": {
- "issues": "https://github.com/phar-io/manifest/issues",
- "source": "https://github.com/phar-io/manifest/tree/2.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/theseer",
- "type": "github"
- }
- ],
- "time": "2024-03-03T12:33:53+00:00"
- },
- {
- "name": "phar-io/version",
- "version": "3.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/phar-io/version.git",
- "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
- "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Heuer",
- "email": "sebastian@phpeople.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "Developer"
- }
- ],
- "description": "Library for handling version information and constraints",
- "support": {
- "issues": "https://github.com/phar-io/version/issues",
- "source": "https://github.com/phar-io/version/tree/3.2.1"
- },
- "time": "2022-02-21T01:04:05+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.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "298d2febfe79d03fe714eb871d5538da55205b1a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/298d2febfe79d03fe714eb871d5538da55205b1a",
- "reference": "298d2febfe79d03fe714eb871d5538da55205b1a",
- "shasum": ""
- },
- "require": {
- "doctrine/deprecations": "^1.1",
- "ext-filter": "*",
- "php": "^7.4 || ^8.0",
- "phpdocumentor/reflection-common": "^2.2",
- "phpdocumentor/type-resolver": "^1.7",
- "phpstan/phpdoc-parser": "^1.7",
- "webmozart/assert": "^1.9.1"
- },
- "require-dev": {
- "mockery/mockery": "~1.3.5",
- "phpstan/extension-installer": "^1.1",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-mockery": "^1.1",
- "phpstan/phpstan-webmozart-assert": "^1.2",
- "phpunit/phpunit": "^9.5",
- "vimeo/psalm": "^5.13"
- },
- "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": "opensource@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/5.4.0"
- },
- "time": "2024-04-09T21:13:58+00:00"
- },
- {
- "name": "phpdocumentor/type-resolver",
- "version": "1.8.2",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "153ae662783729388a584b4361f2545e4d841e3c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c",
- "reference": "153ae662783729388a584b4361f2545e4d841e3c",
- "shasum": ""
- },
- "require": {
- "doctrine/deprecations": "^1.0",
- "php": "^7.3 || ^8.0",
- "phpdocumentor/reflection-common": "^2.0",
- "phpstan/phpdoc-parser": "^1.13"
- },
- "require-dev": {
- "ext-tokenizer": "*",
- "phpbench/phpbench": "^1.2",
- "phpstan/extension-installer": "^1.1",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-phpunit": "^1.1",
- "phpunit/phpunit": "^9.5",
- "rector/rector": "^0.13.9",
- "vimeo/psalm": "^4.25"
- },
- "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.8.2"
- },
- "time": "2024-02-23T11:10:43+00:00"
- },
- {
- "name": "phpspec/prophecy",
- "version": "v1.19.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpspec/prophecy.git",
- "reference": "67a759e7d8746d501c41536ba40cd9c0a07d6a87"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/67a759e7d8746d501c41536ba40cd9c0a07d6a87",
- "reference": "67a759e7d8746d501c41536ba40cd9c0a07d6a87",
- "shasum": ""
- },
- "require": {
- "doctrine/instantiator": "^1.2 || ^2.0",
- "php": "^7.2 || 8.0.* || 8.1.* || 8.2.* || 8.3.*",
- "phpdocumentor/reflection-docblock": "^5.2",
- "sebastian/comparator": "^3.0 || ^4.0 || ^5.0 || ^6.0",
- "sebastian/recursion-context": "^3.0 || ^4.0 || ^5.0 || ^6.0"
- },
- "require-dev": {
- "phpspec/phpspec": "^6.0 || ^7.0",
- "phpstan/phpstan": "^1.9",
- "phpunit/phpunit": "^8.0 || ^9.0 || ^10.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Prophecy\\": "src/Prophecy"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Konstantin Kudryashov",
- "email": "ever.zet@gmail.com",
- "homepage": "http://everzet.com"
- },
- {
- "name": "Marcello Duarte",
- "email": "marcello.duarte@gmail.com"
- }
- ],
- "description": "Highly opinionated mocking framework for PHP 5.3+",
- "homepage": "https://github.com/phpspec/prophecy",
- "keywords": [
- "Double",
- "Dummy",
- "dev",
- "fake",
- "mock",
- "spy",
- "stub"
- ],
- "support": {
- "issues": "https://github.com/phpspec/prophecy/issues",
- "source": "https://github.com/phpspec/prophecy/tree/v1.19.0"
- },
- "time": "2024-02-29T11:52:51+00:00"
- },
- {
- "name": "phpstan/phpdoc-parser",
- "version": "1.29.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/536889f2b340489d328f5ffb7b02bb6b183ddedc",
- "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "require-dev": {
- "doctrine/annotations": "^2.0",
- "nikic/php-parser": "^4.15",
- "php-parallel-lint/php-parallel-lint": "^1.2",
- "phpstan/extension-installer": "^1.0",
- "phpstan/phpstan": "^1.5",
- "phpstan/phpstan-phpunit": "^1.1",
- "phpstan/phpstan-strict-rules": "^1.0",
- "phpunit/phpunit": "^9.5",
- "symfony/process": "^5.2"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "PHPStan\\PhpDocParser\\": [
- "src/"
- ]
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "PHPDoc parser with support for nullable, intersection and generic types",
- "support": {
- "issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.0"
- },
- "time": "2024-05-06T12:04:23+00:00"
- },
- {
- "name": "phpunit/php-code-coverage",
- "version": "9.2.31",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965",
- "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-libxml": "*",
- "ext-xmlwriter": "*",
- "nikic/php-parser": "^4.18 || ^5.0",
- "php": ">=7.3",
- "phpunit/php-file-iterator": "^3.0.3",
- "phpunit/php-text-template": "^2.0.2",
- "sebastian/code-unit-reverse-lookup": "^2.0.2",
- "sebastian/complexity": "^2.0",
- "sebastian/environment": "^5.1.2",
- "sebastian/lines-of-code": "^1.0.3",
- "sebastian/version": "^3.0.1",
- "theseer/tokenizer": "^1.2.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-pcov": "PHP extension that provides line coverage",
- "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "9.2-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
- "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
- "keywords": [
- "coverage",
- "testing",
- "xunit"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
- "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2024-03-02T06:37:42+00:00"
- },
- {
- "name": "phpunit/php-file-iterator",
- "version": "3.0.6",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
- "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "FilterIterator implementation that filters files based on a list of suffixes.",
- "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
- "keywords": [
- "filesystem",
- "iterator"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
- "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2021-12-02T12:48:52+00:00"
- },
- {
- "name": "phpunit/php-invoker",
- "version": "3.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-invoker.git",
- "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
- "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "ext-pcntl": "*",
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-pcntl": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.1-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Invoke callables with a timeout",
- "homepage": "https://github.com/sebastianbergmann/php-invoker/",
- "keywords": [
- "process"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
- "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T05:58:55+00:00"
- },
- {
- "name": "phpunit/php-text-template",
- "version": "2.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-text-template.git",
- "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
- "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Simple template engine.",
- "homepage": "https://github.com/sebastianbergmann/php-text-template/",
- "keywords": [
- "template"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
- "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T05:33:50+00:00"
- },
- {
- "name": "phpunit/php-timer",
- "version": "5.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
- "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Utility class for timing",
- "homepage": "https://github.com/sebastianbergmann/php-timer/",
- "keywords": [
- "timer"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-timer/issues",
- "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:16:10+00:00"
- },
- {
- "name": "phpunit/phpunit",
- "version": "9.5.20",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba",
- "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba",
- "shasum": ""
- },
- "require": {
- "doctrine/instantiator": "^1.3.1",
- "ext-dom": "*",
- "ext-json": "*",
- "ext-libxml": "*",
- "ext-mbstring": "*",
- "ext-xml": "*",
- "ext-xmlwriter": "*",
- "myclabs/deep-copy": "^1.10.1",
- "phar-io/manifest": "^2.0.3",
- "phar-io/version": "^3.0.2",
- "php": ">=7.3",
- "phpspec/prophecy": "^1.12.1",
- "phpunit/php-code-coverage": "^9.2.13",
- "phpunit/php-file-iterator": "^3.0.5",
- "phpunit/php-invoker": "^3.1.1",
- "phpunit/php-text-template": "^2.0.3",
- "phpunit/php-timer": "^5.0.2",
- "sebastian/cli-parser": "^1.0.1",
- "sebastian/code-unit": "^1.0.6",
- "sebastian/comparator": "^4.0.5",
- "sebastian/diff": "^4.0.3",
- "sebastian/environment": "^5.1.3",
- "sebastian/exporter": "^4.0.3",
- "sebastian/global-state": "^5.0.1",
- "sebastian/object-enumerator": "^4.0.3",
- "sebastian/resource-operations": "^3.0.3",
- "sebastian/type": "^3.0",
- "sebastian/version": "^3.0.2"
- },
- "require-dev": {
- "ext-pdo": "*",
- "phpspec/prophecy-phpunit": "^2.0.1"
- },
- "suggest": {
- "ext-soap": "*",
- "ext-xdebug": "*"
- },
- "bin": [
- "phpunit"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "9.5-dev"
- }
- },
- "autoload": {
- "files": [
- "src/Framework/Assert/Functions.php"
- ],
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "The PHP Unit Testing framework.",
- "homepage": "https://phpunit.de/",
- "keywords": [
- "phpunit",
- "testing",
- "xunit"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/phpunit/issues",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20"
- },
- "funding": [
- {
- "url": "https://phpunit.de/sponsors.html",
- "type": "custom"
- },
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2022-04-01T12:37:26+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": "sebastian/cli-parser",
- "version": "1.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/cli-parser.git",
- "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
- "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library for parsing CLI options",
- "homepage": "https://github.com/sebastianbergmann/cli-parser",
- "support": {
- "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
- "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2024-03-02T06:27:43+00:00"
- },
- {
- "name": "sebastian/code-unit",
- "version": "1.0.8",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit.git",
- "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
- "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Collection of value objects that represent the PHP code units",
- "homepage": "https://github.com/sebastianbergmann/code-unit",
- "support": {
- "issues": "https://github.com/sebastianbergmann/code-unit/issues",
- "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:08:54+00:00"
- },
- {
- "name": "sebastian/code-unit-reverse-lookup",
- "version": "2.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
- "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
- "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Looks up which function or method a line of code belongs to",
- "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
- "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T05:30:19+00:00"
- },
- {
- "name": "sebastian/comparator",
- "version": "4.0.8",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "fa0f136dd2334583309d32b62544682ee972b51a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a",
- "reference": "fa0f136dd2334583309d32b62544682ee972b51a",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3",
- "sebastian/diff": "^4.0",
- "sebastian/exporter": "^4.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Volker Dusch",
- "email": "github@wallbash.com"
- },
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@2bepublished.at"
- }
- ],
- "description": "Provides the functionality to compare PHP values for equality",
- "homepage": "https://github.com/sebastianbergmann/comparator",
- "keywords": [
- "comparator",
- "compare",
- "equality"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/comparator/issues",
- "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2022-09-14T12:41:17+00:00"
- },
- {
- "name": "sebastian/complexity",
- "version": "2.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/complexity.git",
- "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a",
- "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a",
- "shasum": ""
- },
- "require": {
- "nikic/php-parser": "^4.18 || ^5.0",
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library for calculating the complexity of PHP code units",
- "homepage": "https://github.com/sebastianbergmann/complexity",
- "support": {
- "issues": "https://github.com/sebastianbergmann/complexity/issues",
- "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-12-22T06:19:30+00:00"
- },
- {
- "name": "sebastian/diff",
- "version": "4.0.6",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc",
- "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3",
- "symfony/process": "^4.2 || ^5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Kore Nordmann",
- "email": "mail@kore-nordmann.de"
- }
- ],
- "description": "Diff implementation",
- "homepage": "https://github.com/sebastianbergmann/diff",
- "keywords": [
- "diff",
- "udiff",
- "unidiff",
- "unified diff"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/diff/issues",
- "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2024-03-02T06:30:58+00:00"
- },
- {
- "name": "sebastian/environment",
- "version": "5.1.5",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
- "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-posix": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.1-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Provides functionality to handle HHVM/PHP environments",
- "homepage": "http://www.github.com/sebastianbergmann/environment",
- "keywords": [
- "Xdebug",
- "environment",
- "hhvm"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/environment/issues",
- "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-02-03T06:03:51+00:00"
- },
- {
- "name": "sebastian/exporter",
- "version": "4.0.6",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72",
- "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3",
- "sebastian/recursion-context": "^4.0"
- },
- "require-dev": {
- "ext-mbstring": "*",
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Volker Dusch",
- "email": "github@wallbash.com"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
- },
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "Provides the functionality to export PHP variables for visualization",
- "homepage": "https://www.github.com/sebastianbergmann/exporter",
- "keywords": [
- "export",
- "exporter"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/exporter/issues",
- "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2024-03-02T06:33:00+00:00"
- },
- {
- "name": "sebastian/global-state",
- "version": "5.0.7",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
- "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3",
- "sebastian/object-reflector": "^2.0",
- "sebastian/recursion-context": "^4.0"
- },
- "require-dev": {
- "ext-dom": "*",
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-uopz": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Snapshotting of global state",
- "homepage": "http://www.github.com/sebastianbergmann/global-state",
- "keywords": [
- "global state"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/global-state/issues",
- "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2024-03-02T06:35:11+00:00"
- },
- {
- "name": "sebastian/lines-of-code",
- "version": "1.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/lines-of-code.git",
- "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5",
- "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5",
- "shasum": ""
- },
- "require": {
- "nikic/php-parser": "^4.18 || ^5.0",
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library for counting the lines of code in PHP source code",
- "homepage": "https://github.com/sebastianbergmann/lines-of-code",
- "support": {
- "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
- "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-12-22T06:20:34+00:00"
- },
- {
- "name": "sebastian/object-enumerator",
- "version": "4.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/object-enumerator.git",
- "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
- "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3",
- "sebastian/object-reflector": "^2.0",
- "sebastian/recursion-context": "^4.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Traverses array structures and object graphs to enumerate all referenced objects",
- "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
- "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:12:34+00:00"
- },
- {
- "name": "sebastian/object-reflector",
- "version": "2.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/object-reflector.git",
- "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
- "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Allows reflection of object attributes, including inherited and non-public ones",
- "homepage": "https://github.com/sebastianbergmann/object-reflector/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
- "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:14:26+00:00"
- },
- {
- "name": "sebastian/recursion-context",
- "version": "4.0.5",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
- "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
- }
- ],
- "description": "Provides functionality to recursively process PHP variables",
- "homepage": "https://github.com/sebastianbergmann/recursion-context",
- "support": {
- "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
- "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-02-03T06:07:39+00:00"
- },
- {
- "name": "sebastian/resource-operations",
- "version": "3.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/resource-operations.git",
- "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
- "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Provides a list of PHP built-in functions that operate on resources",
- "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
- "support": {
- "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2024-03-14T16:00:52+00:00"
- },
- {
- "name": "sebastian/type",
- "version": "3.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/type.git",
- "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
- "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.2-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Collection of value objects that represent the types of the PHP type system",
- "homepage": "https://github.com/sebastianbergmann/type",
- "support": {
- "issues": "https://github.com/sebastianbergmann/type/issues",
- "source": "https://github.com/sebastianbergmann/type/tree/3.2.1"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2023-02-03T06:13:03+00:00"
- },
- {
- "name": "sebastian/version",
- "version": "3.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/version.git",
- "reference": "c6c1022351a901512170118436c764e473f6de8c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
- "reference": "c6c1022351a901512170118436c764e473f6de8c",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library that helps with managing the version number of Git-hosted PHP projects",
- "homepage": "https://github.com/sebastianbergmann/version",
- "support": {
- "issues": "https://github.com/sebastianbergmann/version/issues",
- "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T06:39:44+00:00"
- },
- {
- "name": "swoole/ide-helper",
- "version": "5.1.2",
- "source": {
- "type": "git",
- "url": "https://github.com/swoole/ide-helper.git",
- "reference": "33ec7af9111b76d06a70dd31191cc74793551112"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/swoole/ide-helper/zipball/33ec7af9111b76d06a70dd31191cc74793551112",
- "reference": "33ec7af9111b76d06a70dd31191cc74793551112",
- "shasum": ""
- },
- "type": "library",
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "Team Swoole",
- "email": "team@swoole.com"
- }
- ],
- "description": "IDE help files for Swoole.",
- "support": {
- "issues": "https://github.com/swoole/ide-helper/issues",
- "source": "https://github.com/swoole/ide-helper/tree/5.1.2"
- },
- "time": "2024-02-01T22:28:11+00:00"
- },
- {
- "name": "symfony/polyfill-ctype",
- "version": "v1.29.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4",
- "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4",
- "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.29.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-01-29T20:11:03+00:00"
- },
- {
- "name": "textalk/websocket",
- "version": "1.5.7",
- "source": {
- "type": "git",
- "url": "https://github.com/Textalk/websocket-php.git",
- "reference": "1712325e99b6bf869ccbf9bf41ab749e7328ea46"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Textalk/websocket-php/zipball/1712325e99b6bf869ccbf9bf41ab749e7328ea46",
- "reference": "1712325e99b6bf869ccbf9bf41ab749e7328ea46",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 | ^8.0",
- "psr/log": "^1 | ^2 | ^3"
- },
- "require-dev": {
- "php-coveralls/php-coveralls": "^2.0",
- "phpunit/phpunit": "^8.0|^9.0",
- "squizlabs/php_codesniffer": "^3.5"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "WebSocket\\": "lib"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "ISC"
- ],
- "authors": [
- {
- "name": "Fredrik Liljegren"
- },
- {
- "name": "Sören Jensen",
- "email": "soren@abicart.se"
- }
- ],
- "description": "WebSocket client and server",
- "support": {
- "issues": "https://github.com/Textalk/websocket-php/issues",
- "source": "https://github.com/Textalk/websocket-php/tree/1.5.7"
- },
- "time": "2022-03-29T09:46:59+00:00"
- },
- {
- "name": "theseer/tokenizer",
- "version": "1.2.3",
- "source": {
- "type": "git",
- "url": "https://github.com/theseer/tokenizer.git",
- "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
- "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-tokenizer": "*",
- "ext-xmlwriter": "*",
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- }
- ],
- "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
- "support": {
- "issues": "https://github.com/theseer/tokenizer/issues",
- "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
- },
- "funding": [
- {
- "url": "https://github.com/theseer",
- "type": "github"
- }
- ],
- "time": "2024-03-03T12:36:25+00:00"
- },
- {
- "name": "twig/twig",
- "version": "v3.8.0",
- "source": {
- "type": "git",
- "url": "https://github.com/twigphp/Twig.git",
- "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/twigphp/Twig/zipball/9d15f0ac07f44dc4217883ec6ae02fd555c6f71d",
- "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/polyfill-ctype": "^1.8",
- "symfony/polyfill-mbstring": "^1.3",
- "symfony/polyfill-php80": "^1.22"
- },
- "require-dev": {
- "psr/container": "^1.0|^2.0",
- "symfony/phpunit-bridge": "^5.4.9|^6.3|^7.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Twig\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com",
- "homepage": "http://fabien.potencier.org",
- "role": "Lead Developer"
- },
- {
- "name": "Twig Team",
- "role": "Contributors"
- },
- {
- "name": "Armin Ronacher",
- "email": "armin.ronacher@active-4.com",
- "role": "Project Founder"
- }
- ],
- "description": "Twig, the flexible, fast, and secure template language for PHP",
- "homepage": "https://twig.symfony.com",
- "keywords": [
- "templating"
- ],
- "support": {
- "issues": "https://github.com/twigphp/Twig/issues",
- "source": "https://github.com/twigphp/Twig/tree/v3.8.0"
- },
- "funding": [
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/twig/twig",
- "type": "tidelift"
- }
- ],
- "time": "2023-11-21T18:54:41+00:00"
- }
- ],
- "aliases": [
- {
- "package": "utopia-php/messaging",
- "version": "dev-get-country-code",
- "alias": "0.10.0",
- "alias_normalized": "0.10.0.0"
- }
- ],
- "minimum-stability": "stable",
- "stability-flags": {
- "utopia-php/messaging": 20
- },
- "prefer-stable": false,
- "prefer-lowest": false,
- "platform": {
- "php": ">=8.0.0",
- "ext-curl": "*",
- "ext-imagick": "*",
- "ext-mbstring": "*",
- "ext-json": "*",
- "ext-yaml": "*",
- "ext-dom": "*",
- "ext-redis": "*",
- "ext-swoole": "*",
- "ext-pdo": "*",
- "ext-openssl": "*",
- "ext-zlib": "*",
- "ext-sockets": "*"
- },
- "platform-dev": {
- "ext-fileinfo": "*"
- },
- "platform-overrides": {
- "php": "8.3"
- },
- "plugin-api-version": "2.2.0"
-}
diff --git a/src/Appwrite/Platform/Workers/Messaging.php b/src/Appwrite/Platform/Workers/Messaging.php
index 281ac21946..929a5fd249 100644
--- a/src/Appwrite/Platform/Workers/Messaging.php
+++ b/src/Appwrite/Platform/Workers/Messaging.php
@@ -440,8 +440,8 @@ class Messaging extends Action
try {
$adapter->send($data);
- var_dump($message['to']);
- $countryCode = $adapter->getCountryCode($message['to']);
+
+ $countryCode = $adapter->getCountryCode($message['to'][0] ?? '');
if (!empty($countryCode)) {
$queueForUsage
->addMetric(str_replace('{countryCode}', $countryCode, METRIC_MESSAGES_COUNTRY_CODE), 1);
From 02eacf67bf068f0a73d7b2b692e5f8c3efa9506c Mon Sep 17 00:00:00 2001
From: shimon
Date: Sun, 12 May 2024 20:08:33 +0300
Subject: [PATCH 079/138] composer update
---
composer.json | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/composer.json b/composer.json
index 8a6ca5edbe..df004e6b44 100644
--- a/composer.json
+++ b/composer.json
@@ -28,7 +28,6 @@
"Appwrite\\Tests\\": "tests/extensions"
}
},
- "minimum-stability": "dev",
"require": {
"php": ">=8.0.0",
"ext-curl": "*",
@@ -53,13 +52,13 @@
"utopia-php/config": "0.2.*",
"utopia-php/database": "0.49.*",
"utopia-php/domains": "0.5.*",
- "utopia-php/dsn": "0.2.1",
+ "utopia-php/dsn": "0.2.*",
"utopia-php/framework": "0.33.*",
"utopia-php/fetch": "0.2.*",
"utopia-php/image": "0.6.*",
"utopia-php/locale": "0.4.*",
"utopia-php/logger": "0.3.*",
- "utopia-php/messaging": "dev-get-country-code",
+ "utopia-php/messaging": "0.10.*",
"utopia-php/migration": "0.4.*",
"utopia-php/orchestration": "0.9.*",
"utopia-php/platform": "0.5.*",
@@ -85,7 +84,7 @@
"ext-fileinfo": "*",
"appwrite/sdk-generator": "0.38.*",
"phpunit/phpunit": "9.5.20",
- "swoole/ide-helper": "5.1.2",
+ "swoole/ide-helper": "5.0.2",
"textalk/websocket": "1.5.7",
"laravel/pint": "^1.14"
},
From c26f09ddf3b94b32c08e4c7ca5f4959d442ba6fb Mon Sep 17 00:00:00 2001
From: shimon
Date: Sun, 12 May 2024 20:11:11 +0300
Subject: [PATCH 080/138] composer update
---
composer.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/composer.json b/composer.json
index df004e6b44..cc0746ae3f 100644
--- a/composer.json
+++ b/composer.json
@@ -58,7 +58,7 @@
"utopia-php/image": "0.6.*",
"utopia-php/locale": "0.4.*",
"utopia-php/logger": "0.3.*",
- "utopia-php/messaging": "0.10.*",
+ "utopia-php/messaging": "0.11.*",
"utopia-php/migration": "0.4.*",
"utopia-php/orchestration": "0.9.*",
"utopia-php/platform": "0.5.*",
From 3a46ac237c879fbd7c95a40df63d492694411423 Mon Sep 17 00:00:00 2001
From: shimon
Date: Sun, 12 May 2024 20:15:37 +0300
Subject: [PATCH 081/138] composer update
---
composer.lock | 5633 +++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 5633 insertions(+)
create mode 100644 composer.lock
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 0000000000..889c16c324
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,5633 @@
+{
+ "_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": "6a7cd54036740ed7162feb2d3f9ac04b",
+ "packages": [
+ {
+ "name": "adhocore/jwt",
+ "version": "1.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/adhocore/php-jwt.git",
+ "reference": "6c434af7170090bb7a8880d2bc220a2254ba7899"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/adhocore/php-jwt/zipball/6c434af7170090bb7a8880d2bc220a2254ba7899",
+ "reference": "6c434af7170090bb7a8880d2bc220a2254ba7899",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.5 || ^7.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Ahc\\Jwt\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jitendra Adhikari",
+ "email": "jiten.adhikary@gmail.com"
+ }
+ ],
+ "description": "Ultra lightweight JSON web token (JWT) library for PHP5.5+.",
+ "keywords": [
+ "auth",
+ "json-web-token",
+ "jwt",
+ "jwt-auth",
+ "jwt-php",
+ "token"
+ ],
+ "support": {
+ "issues": "https://github.com/adhocore/php-jwt/issues",
+ "source": "https://github.com/adhocore/php-jwt/tree/1.1.2"
+ },
+ "funding": [
+ {
+ "url": "https://paypal.me/ji10",
+ "type": "custom"
+ }
+ ],
+ "time": "2021-02-20T09:56:44+00:00"
+ },
+ {
+ "name": "appwrite/appwrite",
+ "version": "10.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/appwrite/sdk-for-php.git",
+ "reference": "da579af70723cfc117b5af84375bdef117e27312"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/appwrite/sdk-for-php/zipball/da579af70723cfc117b5af84375bdef117e27312",
+ "reference": "da579af70723cfc117b5af84375bdef117e27312",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "ext-json": "*",
+ "php": ">=7.1.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "3.7.35"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Appwrite\\": "src/Appwrite"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "description": "Appwrite is an open-source self-hosted backend server that abstract and simplify complex and repetitive development tasks behind a very simple REST API",
+ "support": {
+ "email": "team@appwrite.io",
+ "issues": "https://github.com/appwrite/sdk-for-php/issues",
+ "source": "https://github.com/appwrite/sdk-for-php/tree/10.1.0",
+ "url": "https://appwrite.io/support"
+ },
+ "time": "2023-11-20T09:56:12+00:00"
+ },
+ {
+ "name": "appwrite/php-clamav",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/appwrite/php-clamav.git",
+ "reference": "f3897169f5c1f365312238a516ae9465f804634f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/appwrite/php-clamav/zipball/f3897169f5c1f365312238a516ae9465f804634f",
+ "reference": "f3897169f5c1f365312238a516ae9465f804634f",
+ "shasum": ""
+ },
+ "require": {
+ "ext-sockets": "*",
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Appwrite\\ClamAV\\": "src/ClamAV"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "eldad@appwrite.io"
+ }
+ ],
+ "description": "ClamAV network and pipe client for PHP",
+ "keywords": [
+ "anti virus",
+ "appwrite",
+ "clamav",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/appwrite/php-clamav/issues",
+ "source": "https://github.com/appwrite/php-clamav/tree/2.0.0"
+ },
+ "time": "2023-02-24T09:50:42+00:00"
+ },
+ {
+ "name": "appwrite/php-runtimes",
+ "version": "0.13.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/appwrite/runtimes.git",
+ "reference": "ba24c3a163f1a1da6cd355db92def508d05e59f7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/appwrite/runtimes/zipball/ba24c3a163f1a1da6cd355db92def508d05e59f7",
+ "reference": "ba24c3a163f1a1da6cd355db92def508d05e59f7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0",
+ "utopia-php/system": "0.8.*"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3",
+ "vimeo/psalm": "4.0.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Appwrite\\Runtimes\\": "src/Runtimes"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "eldad@appwrite.io"
+ },
+ {
+ "name": "Torsten Dittmann",
+ "email": "torsten@appwrite.io"
+ }
+ ],
+ "description": "Appwrite repository for Cloud Function runtimes that contains the configurations and tests for all of the Appwrite runtime environments.",
+ "keywords": [
+ "appwrite",
+ "php",
+ "runtimes"
+ ],
+ "support": {
+ "issues": "https://github.com/appwrite/runtimes/issues",
+ "source": "https://github.com/appwrite/runtimes/tree/0.13.5"
+ },
+ "time": "2024-04-01T10:35:02+00:00"
+ },
+ {
+ "name": "beberlei/assert",
+ "version": "v3.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/beberlei/assert.git",
+ "reference": "d63a6943fc4fd1a2aedb65994e3548715105abcf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/beberlei/assert/zipball/d63a6943fc4fd1a2aedb65994e3548715105abcf",
+ "reference": "d63a6943fc4fd1a2aedb65994e3548715105abcf",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "ext-simplexml": "*",
+ "php": "^7"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "*",
+ "phpstan/phpstan-shim": "*",
+ "phpunit/phpunit": ">=6.0.0 <8"
+ },
+ "suggest": {
+ "ext-intl": "Needed to allow Assertion::count(), Assertion::isCountable(), Assertion::minCount(), and Assertion::maxCount() to operate on ResourceBundles"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "lib/Assert/functions.php"
+ ],
+ "psr-4": {
+ "Assert\\": "lib/Assert"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de",
+ "role": "Lead Developer"
+ },
+ {
+ "name": "Richard Quadling",
+ "email": "rquadling@gmail.com",
+ "role": "Collaborator"
+ }
+ ],
+ "description": "Thin assertion library for input validation in business models.",
+ "keywords": [
+ "assert",
+ "assertion",
+ "validation"
+ ],
+ "support": {
+ "issues": "https://github.com/beberlei/assert/issues",
+ "source": "https://github.com/beberlei/assert/tree/v3"
+ },
+ "time": "2019-12-19T17:51:41+00:00"
+ },
+ {
+ "name": "chillerlan/php-qrcode",
+ "version": "4.3.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/chillerlan/php-qrcode.git",
+ "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
+ "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
+ "shasum": ""
+ },
+ "require": {
+ "chillerlan/php-settings-container": "^2.1.4",
+ "ext-mbstring": "*",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "phan/phan": "^5.3",
+ "phpunit/phpunit": "^9.5",
+ "setasign/fpdf": "^1.8.2"
+ },
+ "suggest": {
+ "chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.",
+ "setasign/fpdf": "Required to use the QR FPDF output."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "chillerlan\\QRCode\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kazuhiko Arase",
+ "homepage": "https://github.com/kazuhikoarase"
+ },
+ {
+ "name": "Smiley",
+ "email": "smiley@chillerlan.net",
+ "homepage": "https://github.com/codemasher"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/chillerlan/php-qrcode/graphs/contributors"
+ }
+ ],
+ "description": "A QR code generator. PHP 7.4+",
+ "homepage": "https://github.com/chillerlan/php-qrcode",
+ "keywords": [
+ "phpqrcode",
+ "qr",
+ "qr code",
+ "qrcode",
+ "qrcode-generator"
+ ],
+ "support": {
+ "issues": "https://github.com/chillerlan/php-qrcode/issues",
+ "source": "https://github.com/chillerlan/php-qrcode/tree/4.3.4"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4",
+ "type": "custom"
+ },
+ {
+ "url": "https://ko-fi.com/codemasher",
+ "type": "ko_fi"
+ }
+ ],
+ "time": "2022-07-25T09:12:45+00:00"
+ },
+ {
+ "name": "chillerlan/php-settings-container",
+ "version": "2.1.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/chillerlan/php-settings-container.git",
+ "reference": "f705310389264c3578fdd9ffb15aa2cd6d91772e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/f705310389264c3578fdd9ffb15aa2cd6d91772e",
+ "reference": "f705310389264c3578fdd9ffb15aa2cd6d91772e",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "phan/phan": "^5.4",
+ "phpcsstandards/php_codesniffer": "^3.8",
+ "phpmd/phpmd": "^2.13",
+ "phpunit/phpunit": "^9.6"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "chillerlan\\Settings\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Smiley",
+ "email": "smiley@chillerlan.net",
+ "homepage": "https://github.com/codemasher"
+ }
+ ],
+ "description": "A container class for immutable settings objects. Not a DI container. PHP 7.4+",
+ "homepage": "https://github.com/chillerlan/php-settings-container",
+ "keywords": [
+ "PHP7",
+ "Settings",
+ "configuration",
+ "container",
+ "helper"
+ ],
+ "support": {
+ "issues": "https://github.com/chillerlan/php-settings-container/issues",
+ "source": "https://github.com/chillerlan/php-settings-container"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4",
+ "type": "custom"
+ },
+ {
+ "url": "https://ko-fi.com/codemasher",
+ "type": "ko_fi"
+ }
+ ],
+ "time": "2024-01-05T23:20:55+00:00"
+ },
+ {
+ "name": "dragonmantank/cron-expression",
+ "version": "v3.3.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dragonmantank/cron-expression.git",
+ "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/782ca5968ab8b954773518e9e49a6f892a34b2a8",
+ "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2|^8.0",
+ "webmozart/assert": "^1.0"
+ },
+ "replace": {
+ "mtdowling/cron-expression": "^1.0"
+ },
+ "require-dev": {
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^1.0",
+ "phpstan/phpstan-webmozart-assert": "^1.0",
+ "phpunit/phpunit": "^7.0|^8.0|^9.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Cron\\": "src/Cron/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Chris Tankersley",
+ "email": "chris@ctankersley.com",
+ "homepage": "https://github.com/dragonmantank"
+ }
+ ],
+ "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due",
+ "keywords": [
+ "cron",
+ "schedule"
+ ],
+ "support": {
+ "issues": "https://github.com/dragonmantank/cron-expression/issues",
+ "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/dragonmantank",
+ "type": "github"
+ }
+ ],
+ "time": "2022-09-10T18:51:20+00:00"
+ },
+ {
+ "name": "giggsey/libphonenumber-for-php-lite",
+ "version": "8.13.36",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/giggsey/libphonenumber-for-php-lite.git",
+ "reference": "144bbe70d67664b5245910a475c7190ff140ab4b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php-lite/zipball/144bbe70d67664b5245910a475c7190ff140ab4b",
+ "reference": "144bbe70d67664b5245910a475c7190ff140ab4b",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1",
+ "symfony/polyfill-mbstring": "^1.17"
+ },
+ "conflict": {
+ "giggsey/libphonenumber-for-php": "*"
+ },
+ "require-dev": {
+ "ext-dom": "*",
+ "friendsofphp/php-cs-fixer": "^3.12",
+ "infection/infection": "^0.28",
+ "pear/pear-core-minimal": "^1.10.11",
+ "pear/pear_exception": "^1.0.2",
+ "pear/versioncontrol_git": "^0.7",
+ "phing/phing": "^2.17.4",
+ "phpstan/extension-installer": "^1.2",
+ "phpstan/phpstan": "^1.8",
+ "phpstan/phpstan-phpunit": "^1.2",
+ "phpunit/phpunit": "^10.5",
+ "symfony/console": "^6.0",
+ "symfony/var-exporter": "^6.0"
+ },
+ "suggest": {
+ "giggsey/libphonenumber-for-php": "Use libphonenumber-for-php for geocoding, carriers, timezones and matching"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "libphonenumber\\": "src/"
+ },
+ "exclude-from-classmap": [
+ "/src/data/",
+ "/src/carrier/data/",
+ "/src/geocoding/data/",
+ "/src/timezone/data/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Joshua Gigg",
+ "email": "giggsey@gmail.com",
+ "homepage": "https://giggsey.com/"
+ }
+ ],
+ "description": "A lite version of giggsey/libphonenumber-for-php, which is a PHP Port of Google's libphonenumber",
+ "homepage": "https://github.com/giggsey/libphonenumber-for-php-lite",
+ "keywords": [
+ "geocoding",
+ "geolocation",
+ "libphonenumber",
+ "mobile",
+ "phonenumber",
+ "validation"
+ ],
+ "support": {
+ "issues": "https://github.com/giggsey/libphonenumber-for-php-lite/issues",
+ "source": "https://github.com/giggsey/libphonenumber-for-php-lite"
+ },
+ "time": "2024-05-03T06:31:11+00:00"
+ },
+ {
+ "name": "jean85/pretty-package-versions",
+ "version": "2.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Jean85/pretty-package-versions.git",
+ "reference": "4ea62fbb39a29d65ef6cda413158baa7f1d98550"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/4ea62fbb39a29d65ef6cda413158baa7f1d98550",
+ "reference": "4ea62fbb39a29d65ef6cda413158baa7f1d98550",
+ "shasum": ""
+ },
+ "require": {
+ "composer-runtime-api": "^2.0.0",
+ "php": "^7.1|^8.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.2",
+ "jean85/composer-provided-replaced-stub-package": "^1.0",
+ "phpstan/phpstan": "^1.4",
+ "phpunit/phpunit": "^7.5|^8.5|^9.4",
+ "vimeo/psalm": "^4.3 || ^5.0"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Jean85\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Alessandro Lai",
+ "email": "alessandro.lai85@gmail.com"
+ }
+ ],
+ "description": "A library to get pretty versions strings of installed dependencies",
+ "keywords": [
+ "composer",
+ "package",
+ "release",
+ "versions"
+ ],
+ "support": {
+ "issues": "https://github.com/Jean85/pretty-package-versions/issues",
+ "source": "https://github.com/Jean85/pretty-package-versions/tree/2.x"
+ },
+ "time": "2024-04-08T08:58:14+00:00"
+ },
+ {
+ "name": "league/csv",
+ "version": "9.14.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/csv.git",
+ "reference": "34bf0df7340b60824b9449b5c526fcc3325070d5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/csv/zipball/34bf0df7340b60824b9449b5c526fcc3325070d5",
+ "reference": "34bf0df7340b60824b9449b5c526fcc3325070d5",
+ "shasum": ""
+ },
+ "require": {
+ "ext-filter": "*",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "php": "^8.1.2"
+ },
+ "require-dev": {
+ "doctrine/collections": "^2.1.4",
+ "ext-dom": "*",
+ "ext-xdebug": "*",
+ "friendsofphp/php-cs-fixer": "^v3.22.0",
+ "phpbench/phpbench": "^1.2.15",
+ "phpstan/phpstan": "^1.10.50",
+ "phpstan/phpstan-deprecation-rules": "^1.1.4",
+ "phpstan/phpstan-phpunit": "^1.3.15",
+ "phpstan/phpstan-strict-rules": "^1.5.2",
+ "phpunit/phpunit": "^10.5.3",
+ "symfony/var-dumper": "^6.4.0"
+ },
+ "suggest": {
+ "ext-dom": "Required to use the XMLConverter and the HTMLConverter classes",
+ "ext-iconv": "Needed to ease transcoding CSV using iconv stream filters"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "League\\Csv\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ignace Nyamagana Butera",
+ "email": "nyamsprod@gmail.com",
+ "homepage": "https://github.com/nyamsprod/",
+ "role": "Developer"
+ }
+ ],
+ "description": "CSV data manipulation made easy in PHP",
+ "homepage": "https://csv.thephpleague.com",
+ "keywords": [
+ "convert",
+ "csv",
+ "export",
+ "filter",
+ "import",
+ "read",
+ "transform",
+ "write"
+ ],
+ "support": {
+ "docs": "https://csv.thephpleague.com",
+ "issues": "https://github.com/thephpleague/csv/issues",
+ "rss": "https://github.com/thephpleague/csv/releases.atom",
+ "source": "https://github.com/thephpleague/csv"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sponsors/nyamsprod",
+ "type": "github"
+ }
+ ],
+ "time": "2023-12-29T07:34:53+00:00"
+ },
+ {
+ "name": "matomo/device-detector",
+ "version": "6.1.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/matomo-org/device-detector.git",
+ "reference": "5cbea85106e561c7138d03603eb6e05128480409"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/matomo-org/device-detector/zipball/5cbea85106e561c7138d03603eb6e05128480409",
+ "reference": "5cbea85106e561c7138d03603eb6e05128480409",
+ "shasum": ""
+ },
+ "require": {
+ "mustangostang/spyc": "*",
+ "php": "^7.2|^8.0"
+ },
+ "replace": {
+ "piwik/device-detector": "self.version"
+ },
+ "require-dev": {
+ "matthiasmullie/scrapbook": "^1.4.7",
+ "mayflower/mo4-coding-standard": "^v8.0.0",
+ "phpstan/phpstan": "^0.12.52",
+ "phpunit/phpunit": "^8.5.8",
+ "psr/cache": "^1.0.1",
+ "psr/simple-cache": "^1.0.1",
+ "symfony/yaml": "^5.1.7"
+ },
+ "suggest": {
+ "doctrine/cache": "Can directly be used for caching purpose",
+ "ext-yaml": "Necessary for using the Pecl YAML parser"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "DeviceDetector\\": ""
+ },
+ "exclude-from-classmap": [
+ "Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "The Matomo Team",
+ "email": "hello@matomo.org",
+ "homepage": "https://matomo.org/team/"
+ }
+ ],
+ "description": "The Universal Device Detection library, that parses User Agents and detects devices (desktop, tablet, mobile, tv, cars, console, etc.), clients (browsers, media players, mobile apps, feed readers, libraries, etc), operating systems, devices, brands and models.",
+ "homepage": "https://matomo.org",
+ "keywords": [
+ "devicedetection",
+ "parser",
+ "useragent"
+ ],
+ "support": {
+ "forum": "https://forum.matomo.org/",
+ "issues": "https://github.com/matomo-org/device-detector/issues",
+ "source": "https://github.com/matomo-org/matomo",
+ "wiki": "https://dev.matomo.org/"
+ },
+ "time": "2023-10-02T10:01:54+00:00"
+ },
+ {
+ "name": "mongodb/mongodb",
+ "version": "1.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mongodb/mongo-php-library.git",
+ "reference": "b0bbd657f84219212487d01a8ffe93a789e1e488"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mongodb/mongo-php-library/zipball/b0bbd657f84219212487d01a8ffe93a789e1e488",
+ "reference": "b0bbd657f84219212487d01a8ffe93a789e1e488",
+ "shasum": ""
+ },
+ "require": {
+ "ext-hash": "*",
+ "ext-json": "*",
+ "ext-mongodb": "^1.11.0",
+ "jean85/pretty-package-versions": "^1.2 || ^2.0.1",
+ "php": "^7.1 || ^8.0",
+ "symfony/polyfill-php80": "^1.19"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9.0",
+ "squizlabs/php_codesniffer": "^3.6",
+ "symfony/phpunit-bridge": "^5.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.10.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "MongoDB\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Andreas Braun",
+ "email": "andreas.braun@mongodb.com"
+ },
+ {
+ "name": "Jeremy Mikola",
+ "email": "jmikola@gmail.com"
+ }
+ ],
+ "description": "MongoDB driver library",
+ "homepage": "https://jira.mongodb.org/browse/PHPLIB",
+ "keywords": [
+ "database",
+ "driver",
+ "mongodb",
+ "persistence"
+ ],
+ "support": {
+ "issues": "https://github.com/mongodb/mongo-php-library/issues",
+ "source": "https://github.com/mongodb/mongo-php-library/tree/1.10.0"
+ },
+ "time": "2021-10-20T22:22:37+00:00"
+ },
+ {
+ "name": "mustangostang/spyc",
+ "version": "0.6.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mustangostang/spyc.git",
+ "reference": "4627c838b16550b666d15aeae1e5289dd5b77da0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mustangostang/spyc/zipball/4627c838b16550b666d15aeae1e5289dd5b77da0",
+ "reference": "4627c838b16550b666d15aeae1e5289dd5b77da0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.3.*@dev"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "0.5.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "Spyc.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "mustangostang",
+ "email": "vlad.andersen@gmail.com"
+ }
+ ],
+ "description": "A simple YAML loader/dumper class for PHP",
+ "homepage": "https://github.com/mustangostang/spyc/",
+ "keywords": [
+ "spyc",
+ "yaml",
+ "yml"
+ ],
+ "support": {
+ "issues": "https://github.com/mustangostang/spyc/issues",
+ "source": "https://github.com/mustangostang/spyc/tree/0.6.3"
+ },
+ "time": "2019-09-10T13:16:29+00:00"
+ },
+ {
+ "name": "paragonie/constant_time_encoding",
+ "version": "v2.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/paragonie/constant_time_encoding.git",
+ "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/52a0d99e69f56b9ec27ace92ba56897fe6993105",
+ "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7|^8"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6|^7|^8|^9",
+ "vimeo/psalm": "^1|^2|^3|^4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "ParagonIE\\ConstantTime\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com",
+ "role": "Maintainer"
+ },
+ {
+ "name": "Steve 'Sc00bz' Thomas",
+ "email": "steve@tobtu.com",
+ "homepage": "https://www.tobtu.com",
+ "role": "Original Developer"
+ }
+ ],
+ "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
+ "keywords": [
+ "base16",
+ "base32",
+ "base32_decode",
+ "base32_encode",
+ "base64",
+ "base64_decode",
+ "base64_encode",
+ "bin2hex",
+ "encoding",
+ "hex",
+ "hex2bin",
+ "rfc4648"
+ ],
+ "support": {
+ "email": "info@paragonie.com",
+ "issues": "https://github.com/paragonie/constant_time_encoding/issues",
+ "source": "https://github.com/paragonie/constant_time_encoding"
+ },
+ "time": "2024-05-08T12:18:48+00:00"
+ },
+ {
+ "name": "phpmailer/phpmailer",
+ "version": "v6.9.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPMailer/PHPMailer.git",
+ "reference": "039de174cd9c17a8389754d3b877a2ed22743e18"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/039de174cd9c17a8389754d3b877a2ed22743e18",
+ "reference": "039de174cd9c17a8389754d3b877a2ed22743e18",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-filter": "*",
+ "ext-hash": "*",
+ "php": ">=5.5.0"
+ },
+ "require-dev": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
+ "doctrine/annotations": "^1.2.6 || ^1.13.3",
+ "php-parallel-lint/php-console-highlighter": "^1.0.0",
+ "php-parallel-lint/php-parallel-lint": "^1.3.2",
+ "phpcompatibility/php-compatibility": "^9.3.5",
+ "roave/security-advisories": "dev-latest",
+ "squizlabs/php_codesniffer": "^3.7.2",
+ "yoast/phpunit-polyfills": "^1.0.4"
+ },
+ "suggest": {
+ "decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication",
+ "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
+ "ext-openssl": "Needed for secure SMTP sending and DKIM signing",
+ "greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication",
+ "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
+ "league/oauth2-google": "Needed for Google XOAUTH2 authentication",
+ "psr/log": "For optional PSR-3 debug logging",
+ "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)",
+ "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "PHPMailer\\PHPMailer\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1-only"
+ ],
+ "authors": [
+ {
+ "name": "Marcus Bointon",
+ "email": "phpmailer@synchromedia.co.uk"
+ },
+ {
+ "name": "Jim Jagielski",
+ "email": "jimjag@gmail.com"
+ },
+ {
+ "name": "Andy Prevost",
+ "email": "codeworxtech@users.sourceforge.net"
+ },
+ {
+ "name": "Brent R. Matzelle"
+ }
+ ],
+ "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
+ "support": {
+ "issues": "https://github.com/PHPMailer/PHPMailer/issues",
+ "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/Synchro",
+ "type": "github"
+ }
+ ],
+ "time": "2023-11-25T22:23:28+00:00"
+ },
+ {
+ "name": "spomky-labs/otphp",
+ "version": "v10.0.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Spomky-Labs/otphp.git",
+ "reference": "9784d9f7c790eed26e102d6c78f12c754036c366"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/9784d9f7c790eed26e102d6c78f12c754036c366",
+ "reference": "9784d9f7c790eed26e102d6c78f12c754036c366",
+ "shasum": ""
+ },
+ "require": {
+ "beberlei/assert": "^3.0",
+ "ext-mbstring": "*",
+ "paragonie/constant_time_encoding": "^2.0",
+ "php": "^7.2|^8.0",
+ "thecodingmachine/safe": "^0.1.14|^1.0|^2.0"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.0",
+ "phpstan/phpstan": "^0.12",
+ "phpstan/phpstan-beberlei-assert": "^0.12",
+ "phpstan/phpstan-deprecation-rules": "^0.12",
+ "phpstan/phpstan-phpunit": "^0.12",
+ "phpstan/phpstan-strict-rules": "^0.12",
+ "phpunit/phpunit": "^8.0",
+ "thecodingmachine/phpstan-safe-rule": "^1.0 || ^2.0"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "v10.0": "10.0.x-dev",
+ "v9.0": "9.0.x-dev",
+ "v8.3": "8.3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "OTPHP\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Florent Morselli",
+ "homepage": "https://github.com/Spomky"
+ },
+ {
+ "name": "All contributors",
+ "homepage": "https://github.com/Spomky-Labs/otphp/contributors"
+ }
+ ],
+ "description": "A PHP library for generating one time passwords according to RFC 4226 (HOTP Algorithm) and the RFC 6238 (TOTP Algorithm) and compatible with Google Authenticator",
+ "homepage": "https://github.com/Spomky-Labs/otphp",
+ "keywords": [
+ "FreeOTP",
+ "RFC 4226",
+ "RFC 6238",
+ "google authenticator",
+ "hotp",
+ "otp",
+ "totp"
+ ],
+ "support": {
+ "issues": "https://github.com/Spomky-Labs/otphp/issues",
+ "source": "https://github.com/Spomky-Labs/otphp/tree/v10.0.3"
+ },
+ "time": "2022-03-17T08:00:35+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "1.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "e642fbe7a7b73cdb05460555289a9057bfd6ead6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e642fbe7a7b73cdb05460555289a9057bfd6ead6",
+ "reference": "e642fbe7a7b73cdb05460555289a9057bfd6ead6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-mbstring": "*"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "default-branch": true,
+ "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/1.x"
+ },
+ "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-19T06:31:17+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "1.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "7d191eb4022901cd3d91a816ec5464ca3a08a8aa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7d191eb4022901cd3d91a816ec5464ca3a08a8aa",
+ "reference": "7d191eb4022901cd3d91a816ec5464ca3a08a8aa",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "default-branch": true,
+ "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/1.x"
+ },
+ "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-19T06:31:17+00:00"
+ },
+ {
+ "name": "thecodingmachine/safe",
+ "version": "v2.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thecodingmachine/safe.git",
+ "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/3115ecd6b4391662b4931daac4eba6b07a2ac1f0",
+ "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.5",
+ "phpunit/phpunit": "^9.5",
+ "squizlabs/php_codesniffer": "^3.2",
+ "thecodingmachine/phpstan-strict-rules": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "deprecated/apc.php",
+ "deprecated/array.php",
+ "deprecated/datetime.php",
+ "deprecated/libevent.php",
+ "deprecated/misc.php",
+ "deprecated/password.php",
+ "deprecated/mssql.php",
+ "deprecated/stats.php",
+ "deprecated/strings.php",
+ "lib/special_cases.php",
+ "deprecated/mysqli.php",
+ "generated/apache.php",
+ "generated/apcu.php",
+ "generated/array.php",
+ "generated/bzip2.php",
+ "generated/calendar.php",
+ "generated/classobj.php",
+ "generated/com.php",
+ "generated/cubrid.php",
+ "generated/curl.php",
+ "generated/datetime.php",
+ "generated/dir.php",
+ "generated/eio.php",
+ "generated/errorfunc.php",
+ "generated/exec.php",
+ "generated/fileinfo.php",
+ "generated/filesystem.php",
+ "generated/filter.php",
+ "generated/fpm.php",
+ "generated/ftp.php",
+ "generated/funchand.php",
+ "generated/gettext.php",
+ "generated/gmp.php",
+ "generated/gnupg.php",
+ "generated/hash.php",
+ "generated/ibase.php",
+ "generated/ibmDb2.php",
+ "generated/iconv.php",
+ "generated/image.php",
+ "generated/imap.php",
+ "generated/info.php",
+ "generated/inotify.php",
+ "generated/json.php",
+ "generated/ldap.php",
+ "generated/libxml.php",
+ "generated/lzf.php",
+ "generated/mailparse.php",
+ "generated/mbstring.php",
+ "generated/misc.php",
+ "generated/mysql.php",
+ "generated/network.php",
+ "generated/oci8.php",
+ "generated/opcache.php",
+ "generated/openssl.php",
+ "generated/outcontrol.php",
+ "generated/pcntl.php",
+ "generated/pcre.php",
+ "generated/pgsql.php",
+ "generated/posix.php",
+ "generated/ps.php",
+ "generated/pspell.php",
+ "generated/readline.php",
+ "generated/rpminfo.php",
+ "generated/rrd.php",
+ "generated/sem.php",
+ "generated/session.php",
+ "generated/shmop.php",
+ "generated/sockets.php",
+ "generated/sodium.php",
+ "generated/solr.php",
+ "generated/spl.php",
+ "generated/sqlsrv.php",
+ "generated/ssdeep.php",
+ "generated/ssh2.php",
+ "generated/stream.php",
+ "generated/strings.php",
+ "generated/swoole.php",
+ "generated/uodbc.php",
+ "generated/uopz.php",
+ "generated/url.php",
+ "generated/var.php",
+ "generated/xdiff.php",
+ "generated/xml.php",
+ "generated/xmlrpc.php",
+ "generated/yaml.php",
+ "generated/yaz.php",
+ "generated/zip.php",
+ "generated/zlib.php"
+ ],
+ "classmap": [
+ "lib/DateTime.php",
+ "lib/DateTimeImmutable.php",
+ "lib/Exceptions/",
+ "deprecated/Exceptions/",
+ "generated/Exceptions/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PHP core functions that throw exceptions instead of returning FALSE on error",
+ "support": {
+ "issues": "https://github.com/thecodingmachine/safe/issues",
+ "source": "https://github.com/thecodingmachine/safe/tree/v2.5.0"
+ },
+ "time": "2023-04-05T11:54:14+00:00"
+ },
+ {
+ "name": "utopia-php/abuse",
+ "version": "0.37.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/abuse.git",
+ "reference": "2de5c12886cbd516e511e559afdd9e615d871062"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/abuse/zipball/2de5c12886cbd516e511e559afdd9e615d871062",
+ "reference": "2de5c12886cbd516e511e559afdd9e615d871062",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "ext-pdo": "*",
+ "php": ">=8.0",
+ "utopia-php/database": "0.49.*"
+ },
+ "require-dev": {
+ "laravel/pint": "1.5.*",
+ "phpstan/phpstan": "^1.9",
+ "phpunit/phpunit": "^9.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Abuse\\": "src/Abuse"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple abuse library to manage application usage limits",
+ "keywords": [
+ "Abuse",
+ "framework",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/abuse/issues",
+ "source": "https://github.com/utopia-php/abuse/tree/0.37.0"
+ },
+ "time": "2024-03-06T21:20:27+00:00"
+ },
+ {
+ "name": "utopia-php/analytics",
+ "version": "0.10.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/analytics.git",
+ "reference": "14c805114736f44c26d6d24b176a2f8b93d86a1f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/analytics/zipball/14c805114736f44c26d6d24b176a2f8b93d86a1f",
+ "reference": "14c805114736f44c26d6d24b176a2f8b93d86a1f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0",
+ "utopia-php/cli": "^0.15.0"
+ },
+ "require-dev": {
+ "laravel/pint": "dev-main",
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Analytics\\": "src/Analytics"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple library to track events & users.",
+ "keywords": [
+ "analytics",
+ "framework",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/analytics/issues",
+ "source": "https://github.com/utopia-php/analytics/tree/0.10.2"
+ },
+ "time": "2023-03-22T12:01:09+00:00"
+ },
+ {
+ "name": "utopia-php/audit",
+ "version": "0.39.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/audit.git",
+ "reference": "f0bc15012e05cc0b9dde012ab27d25f193768a2c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/audit/zipball/f0bc15012e05cc0b9dde012ab27d25f193768a2c",
+ "reference": "f0bc15012e05cc0b9dde012ab27d25f193768a2c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0",
+ "utopia-php/database": "0.49.*"
+ },
+ "require-dev": {
+ "laravel/pint": "1.5.*",
+ "phpstan/phpstan": "^1.8",
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Audit\\": "src/Audit"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple audit library to manage application users logs",
+ "keywords": [
+ "Audit",
+ "framework",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/audit/issues",
+ "source": "https://github.com/utopia-php/audit/tree/0.39.0"
+ },
+ "time": "2024-03-06T21:20:37+00:00"
+ },
+ {
+ "name": "utopia-php/cache",
+ "version": "0.9.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/cache.git",
+ "reference": "552b4c554bb14d0c529631ce304cdf4a2b9d06a6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/cache/zipball/552b4c554bb14d0c529631ce304cdf4a2b9d06a6",
+ "reference": "552b4c554bb14d0c529631ce304cdf4a2b9d06a6",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-memcached": "*",
+ "ext-redis": "*",
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "laravel/pint": "1.2.*",
+ "phpstan/phpstan": "1.9.x-dev",
+ "phpunit/phpunit": "^9.3",
+ "vimeo/psalm": "4.13.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Cache\\": "src/Cache"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple cache library to manage application cache storing, loading and purging",
+ "keywords": [
+ "cache",
+ "framework",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/cache/issues",
+ "source": "https://github.com/utopia-php/cache/tree/0.9.1"
+ },
+ "time": "2024-03-19T17:07:20+00:00"
+ },
+ {
+ "name": "utopia-php/cli",
+ "version": "0.15.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/cli.git",
+ "reference": "ccb7c8125ffe0254fef8f25744bfa376eb7bd0ea"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/cli/zipball/ccb7c8125ffe0254fef8f25744bfa376eb7bd0ea",
+ "reference": "ccb7c8125ffe0254fef8f25744bfa376eb7bd0ea",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.4",
+ "utopia-php/framework": "0.*.*"
+ },
+ "require-dev": {
+ "laravel/pint": "1.2.*",
+ "phpunit/phpunit": "^9.3",
+ "squizlabs/php_codesniffer": "^3.6",
+ "vimeo/psalm": "4.0.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\CLI\\": "src/CLI"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple CLI library to manage command line applications",
+ "keywords": [
+ "cli",
+ "command line",
+ "framework",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/cli/issues",
+ "source": "https://github.com/utopia-php/cli/tree/0.15.0"
+ },
+ "time": "2023-03-01T05:55:14+00:00"
+ },
+ {
+ "name": "utopia-php/config",
+ "version": "0.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/config.git",
+ "reference": "a3d7bc0312d7150d5e04b1362dc34b2b136908cc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/config/zipball/a3d7bc0312d7150d5e04b1362dc34b2b136908cc",
+ "reference": "a3d7bc0312d7150d5e04b1362dc34b2b136908cc",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3",
+ "vimeo/psalm": "4.0.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Config\\": "src/Config"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "eldad@appwrite.io"
+ }
+ ],
+ "description": "A simple Config library to managing application config variables",
+ "keywords": [
+ "config",
+ "framework",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/config/issues",
+ "source": "https://github.com/utopia-php/config/tree/0.2.2"
+ },
+ "time": "2020-10-24T09:49:09+00:00"
+ },
+ {
+ "name": "utopia-php/database",
+ "version": "0.49.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/database.git",
+ "reference": "4fb1f6d216f6f628dd5b013e1f539ae2191228b1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/database/zipball/4fb1f6d216f6f628dd5b013e1f539ae2191228b1",
+ "reference": "4fb1f6d216f6f628dd5b013e1f539ae2191228b1",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "ext-pdo": "*",
+ "php": ">=8.0",
+ "utopia-php/cache": "0.9.*",
+ "utopia-php/framework": "0.33.*",
+ "utopia-php/mongo": "0.3.*"
+ },
+ "require-dev": {
+ "fakerphp/faker": "^1.14",
+ "laravel/pint": "1.13.*",
+ "pcov/clobber": "^2.0",
+ "phpstan/phpstan": "1.10.*",
+ "phpunit/phpunit": "^9.4",
+ "rregeer/phpunit-coverage-check": "^0.3.1",
+ "swoole/ide-helper": "4.8.0",
+ "utopia-php/cli": "^0.14.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Database\\": "src/Database"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple library to manage application persistence using multiple database adapters",
+ "keywords": [
+ "database",
+ "framework",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/database/issues",
+ "source": "https://github.com/utopia-php/database/tree/0.49.8"
+ },
+ "time": "2024-05-09T04:43:05+00:00"
+ },
+ {
+ "name": "utopia-php/domains",
+ "version": "0.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/domains.git",
+ "reference": "bf07f60326f8389f378ddf6fcde86217e5cfe18c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/domains/zipball/bf07f60326f8389f378ddf6fcde86217e5cfe18c",
+ "reference": "bf07f60326f8389f378ddf6fcde86217e5cfe18c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0",
+ "utopia-php/framework": "0.*.*"
+ },
+ "require-dev": {
+ "laravel/pint": "1.2.*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Domains\\": "src/Domains"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "eldad@appwrite.io"
+ },
+ {
+ "name": "Wess Cope",
+ "email": "wess@appwrite.io"
+ }
+ ],
+ "description": "Utopia Domains library is simple and lite library for parsing web domains. This library is aiming to be as simple and easy to learn and use.",
+ "keywords": [
+ "domains",
+ "framework",
+ "icann",
+ "php",
+ "public suffix",
+ "tld",
+ "tld extract",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/domains/issues",
+ "source": "https://github.com/utopia-php/domains/tree/0.5.0"
+ },
+ "time": "2024-01-03T22:04:27+00:00"
+ },
+ {
+ "name": "utopia-php/dsn",
+ "version": "0.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/dsn.git",
+ "reference": "42ee37a3d1785100b2f69091c9d4affadb6846eb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/dsn/zipball/42ee37a3d1785100b2f69091c9d4affadb6846eb",
+ "reference": "42ee37a3d1785100b2f69091c9d4affadb6846eb",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "laravel/pint": "1.2.*",
+ "phpunit/phpunit": "^9.3",
+ "squizlabs/php_codesniffer": "^3.6",
+ "vimeo/psalm": "4.0.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\DSN\\": "src/DSN"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple library for parsing and managing Data Source Names ( DSNs )",
+ "keywords": [
+ "dsn",
+ "framework",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/dsn/issues",
+ "source": "https://github.com/utopia-php/dsn/tree/0.2.1"
+ },
+ "time": "2024-05-07T02:01:25+00:00"
+ },
+ {
+ "name": "utopia-php/fetch",
+ "version": "0.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/fetch.git",
+ "reference": "1423c0ee3eef944d816ca6e31706895b585aea82"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/fetch/zipball/1423c0ee3eef944d816ca6e31706895b585aea82",
+ "reference": "1423c0ee3eef944d816ca6e31706895b585aea82",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "laravel/pint": "^1.5.0",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^9.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Fetch\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple library that provides an interface for making HTTP Requests.",
+ "support": {
+ "issues": "https://github.com/utopia-php/fetch/issues",
+ "source": "https://github.com/utopia-php/fetch/tree/0.2.1"
+ },
+ "time": "2024-03-18T11:50:59+00:00"
+ },
+ {
+ "name": "utopia-php/framework",
+ "version": "0.33.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/http.git",
+ "reference": "8fe57da0cecd57e3b17cd395b4a666a24f4c07a6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/http/zipball/8fe57da0cecd57e3b17cd395b4a666a24f4c07a6",
+ "reference": "8fe57da0cecd57e3b17cd395b4a666a24f4c07a6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "laravel/pint": "^1.2",
+ "phpbench/phpbench": "^1.2",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^9.5.25"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple, light and advanced PHP framework",
+ "keywords": [
+ "framework",
+ "php",
+ "upf"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/http/issues",
+ "source": "https://github.com/utopia-php/http/tree/0.33.x"
+ },
+ "time": "2024-03-21T18:10:57+00:00"
+ },
+ {
+ "name": "utopia-php/image",
+ "version": "0.6.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/image.git",
+ "reference": "2d74c27e69e65a93cf94a16586598a04fe435bf0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/image/zipball/2d74c27e69e65a93cf94a16586598a04fe435bf0",
+ "reference": "2d74c27e69e65a93cf94a16586598a04fe435bf0",
+ "shasum": ""
+ },
+ "require": {
+ "ext-imagick": "*",
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "laravel/pint": "1.2.*",
+ "phpstan/phpstan": "1.9.x-dev",
+ "phpunit/phpunit": "^9.3",
+ "vimeo/psalm": "4.13.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Image\\": "src/Image"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple Image manipulation library",
+ "keywords": [
+ "framework",
+ "image",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/image/issues",
+ "source": "https://github.com/utopia-php/image/tree/0.6.1"
+ },
+ "time": "2024-02-05T13:31:44+00:00"
+ },
+ {
+ "name": "utopia-php/locale",
+ "version": "0.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/locale.git",
+ "reference": "c2d9358d0fe2f6b6ed5448369f9d1e430c615447"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/locale/zipball/c2d9358d0fe2f6b6ed5448369f9d1e430c615447",
+ "reference": "c2d9358d0fe2f6b6ed5448369f9d1e430c615447",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.4"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3",
+ "vimeo/psalm": "4.0.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Locale\\": "src/Locale"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "eldad@appwrite.io"
+ }
+ ],
+ "description": "A simple locale library to manage application translations",
+ "keywords": [
+ "framework",
+ "locale",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/locale/issues",
+ "source": "https://github.com/utopia-php/locale/tree/0.4.0"
+ },
+ "time": "2021-07-24T11:35:55+00:00"
+ },
+ {
+ "name": "utopia-php/logger",
+ "version": "0.3.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/logger.git",
+ "reference": "ba763c10688fe2ed715ad2bed3f13d18dfec6253"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/logger/zipball/ba763c10688fe2ed715ad2bed3f13d18dfec6253",
+ "reference": "ba763c10688fe2ed715ad2bed3f13d18dfec6253",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "1.9.x-dev",
+ "phpunit/phpunit": "^9.3",
+ "vimeo/psalm": "4.0.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Logger\\": "src/Logger"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Utopia Logger library is simple and lite library for logging information, such as errors or warnings. This library is aiming to be as simple and easy to learn and use.",
+ "keywords": [
+ "appsignal",
+ "errors",
+ "framework",
+ "logger",
+ "logging",
+ "logs",
+ "php",
+ "raygun",
+ "sentry",
+ "upf",
+ "utopia",
+ "warnings"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/logger/issues",
+ "source": "https://github.com/utopia-php/logger/tree/0.3.x"
+ },
+ "time": "2023-11-22T14:45:43+00:00"
+ },
+ {
+ "name": "utopia-php/messaging",
+ "version": "dev-get-country-code",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/messaging.git",
+ "reference": "724ba39fd7d5f701f54370201050e423b9de005f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/messaging/zipball/724ba39fd7d5f701f54370201050e423b9de005f",
+ "reference": "724ba39fd7d5f701f54370201050e423b9de005f",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "ext-openssl": "*",
+ "giggsey/libphonenumber-for-php-lite": "8.13.36",
+ "php": ">=8.0.0",
+ "phpmailer/phpmailer": "6.9.1"
+ },
+ "require-dev": {
+ "laravel/pint": "1.13.11",
+ "phpstan/phpstan": "1.10.58",
+ "phpunit/phpunit": "10.5.10"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Messaging\\": "src/Utopia/Messaging"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple, light and advanced PHP messaging library",
+ "keywords": [
+ "library",
+ "messaging",
+ "php",
+ "upf",
+ "utopia",
+ "utopia-php"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/messaging/issues",
+ "source": "https://github.com/utopia-php/messaging/tree/get-country-code"
+ },
+ "time": "2024-05-08T17:06:19+00:00"
+ },
+ {
+ "name": "utopia-php/migration",
+ "version": "0.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/migration.git",
+ "reference": "ae3cfe93f6d313105d226aeb68806660c806a925"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/migration/zipball/ae3cfe93f6d313105d226aeb68806660c806a925",
+ "reference": "ae3cfe93f6d313105d226aeb68806660c806a925",
+ "shasum": ""
+ },
+ "require": {
+ "appwrite/appwrite": "10.1.0",
+ "php": "8.*",
+ "utopia-php/cli": "0.*"
+ },
+ "require-dev": {
+ "laravel/pint": "1.*",
+ "phpunit/phpunit": "9.*",
+ "vlucas/phpdotenv": "5.*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Migration\\": "src/Migration"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple library to migrate resources between services.",
+ "keywords": [
+ "framework",
+ "migration",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/migration/issues",
+ "source": "https://github.com/utopia-php/migration/tree/0.4.1"
+ },
+ "time": "2024-05-01T13:19:18+00:00"
+ },
+ {
+ "name": "utopia-php/mongo",
+ "version": "0.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/mongo.git",
+ "reference": "52326a9a43e2d27ff0c15c48ba746dacbe9a7aee"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/mongo/zipball/52326a9a43e2d27ff0c15c48ba746dacbe9a7aee",
+ "reference": "52326a9a43e2d27ff0c15c48ba746dacbe9a7aee",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mongodb": "*",
+ "mongodb/mongodb": "1.10.0",
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "fakerphp/faker": "^1.14",
+ "laravel/pint": "1.2.*",
+ "phpstan/phpstan": "1.8.*",
+ "phpunit/phpunit": "^9.4",
+ "swoole/ide-helper": "4.8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Mongo\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "eldad@appwrite.io"
+ },
+ {
+ "name": "Wess",
+ "email": "wess@appwrite.io"
+ }
+ ],
+ "description": "A simple library to manage Mongo database",
+ "keywords": [
+ "database",
+ "mongo",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/mongo/issues",
+ "source": "https://github.com/utopia-php/mongo/tree/0.3.1"
+ },
+ "time": "2023-09-01T17:25:28+00:00"
+ },
+ {
+ "name": "utopia-php/orchestration",
+ "version": "0.9.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/orchestration.git",
+ "reference": "55f43513b3f940a3f4f9c2cde7682d0c2581beb0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/orchestration/zipball/55f43513b3f940a3f4f9c2cde7682d0c2581beb0",
+ "reference": "55f43513b3f940a3f4f9c2cde7682d0c2581beb0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0",
+ "utopia-php/cli": "0.15.*"
+ },
+ "require-dev": {
+ "laravel/pint": "^1.2",
+ "phpunit/phpunit": "^9.3",
+ "vimeo/psalm": "4.0.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Orchestration\\": "src/Orchestration"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Lite & fast micro PHP abstraction library for container orchestration",
+ "keywords": [
+ "docker",
+ "framework",
+ "kubernetes",
+ "orchestration",
+ "php",
+ "swarm",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/orchestration/issues",
+ "source": "https://github.com/utopia-php/orchestration/tree/0.9.1"
+ },
+ "time": "2023-03-17T15:05:06+00:00"
+ },
+ {
+ "name": "utopia-php/platform",
+ "version": "0.5.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/platform.git",
+ "reference": "3eceef0b6593fe0f7d2efd36d40402a395a4c285"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/platform/zipball/3eceef0b6593fe0f7d2efd36d40402a395a4c285",
+ "reference": "3eceef0b6593fe0f7d2efd36d40402a395a4c285",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-redis": "*",
+ "php": ">=8.0",
+ "utopia-php/cli": "0.15.*",
+ "utopia-php/framework": "0.*.*"
+ },
+ "require-dev": {
+ "laravel/pint": "1.2.*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Platform\\": "src/Platform"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Light and Fast Platform Library",
+ "keywords": [
+ "framework",
+ "php",
+ "platform",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/platform/issues",
+ "source": "https://github.com/utopia-php/platform/tree/0.5.1"
+ },
+ "time": "2023-12-26T16:14:41+00:00"
+ },
+ {
+ "name": "utopia-php/pools",
+ "version": "0.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/pools.git",
+ "reference": "6f716a213a08db95eda1b5dddfa90983c1834817"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/pools/zipball/6f716a213a08db95eda1b5dddfa90983c1834817",
+ "reference": "6f716a213a08db95eda1b5dddfa90983c1834817",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "laravel/pint": "1.2.*",
+ "phpstan/phpstan": "1.8.*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Pools\\": "src/Pools"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Team Appwrite",
+ "email": "team@appwrite.io"
+ }
+ ],
+ "description": "A simple library to manage connection pools",
+ "keywords": [
+ "framework",
+ "php",
+ "pools",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/pools/issues",
+ "source": "https://github.com/utopia-php/pools/tree/0.5.0"
+ },
+ "time": "2024-04-19T11:11:54+00:00"
+ },
+ {
+ "name": "utopia-php/preloader",
+ "version": "0.2.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/preloader.git",
+ "reference": "65ef48392e72172f584b0baa2e224f9a1cebcce0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/preloader/zipball/65ef48392e72172f584b0baa2e224f9a1cebcce0",
+ "reference": "65ef48392e72172f584b0baa2e224f9a1cebcce0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3",
+ "vimeo/psalm": "4.0.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Preloader\\": "src/Preloader"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "team@appwrite.io"
+ }
+ ],
+ "description": "Utopia Preloader library is simple and lite library for managing PHP preloading configuration",
+ "keywords": [
+ "framework",
+ "php",
+ "preload",
+ "preloader",
+ "preloading",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/preloader/issues",
+ "source": "https://github.com/utopia-php/preloader/tree/0.2.4"
+ },
+ "time": "2020-10-24T07:04:59+00:00"
+ },
+ {
+ "name": "utopia-php/queue",
+ "version": "0.7.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/queue.git",
+ "reference": "917565256eb94bcab7246f7a746b1a486813761b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/queue/zipball/917565256eb94bcab7246f7a746b1a486813761b",
+ "reference": "917565256eb94bcab7246f7a746b1a486813761b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0",
+ "utopia-php/cli": "0.15.*",
+ "utopia-php/framework": "0.*.*"
+ },
+ "require-dev": {
+ "laravel/pint": "^0.2.3",
+ "phpstan/phpstan": "^1.8",
+ "phpunit/phpunit": "^9.5.5",
+ "swoole/ide-helper": "4.8.8",
+ "workerman/workerman": "^4.0"
+ },
+ "suggest": {
+ "ext-swoole": "Needed to support Swoole.",
+ "workerman/workerman": "Needed to support Workerman."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Queue\\": "src/Queue"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Torsten Dittmann",
+ "email": "torsten@appwrite.io"
+ }
+ ],
+ "description": "A powerful task queue.",
+ "keywords": [
+ "Tasks",
+ "framework",
+ "php",
+ "queue",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/queue/issues",
+ "source": "https://github.com/utopia-php/queue/tree/0.7.0"
+ },
+ "time": "2024-01-17T19:00:43+00:00"
+ },
+ {
+ "name": "utopia-php/registry",
+ "version": "0.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/registry.git",
+ "reference": "bedc4ed54527b2803e6dfdccc39449f98522b70d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/registry/zipball/bedc4ed54527b2803e6dfdccc39449f98522b70d",
+ "reference": "bedc4ed54527b2803e6dfdccc39449f98522b70d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.4"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3",
+ "vimeo/psalm": "4.0.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Registry\\": "src/Registry"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "eldad@appwrite.io"
+ }
+ ],
+ "description": "A simple dependency management library for PHP",
+ "keywords": [
+ "dependency management",
+ "di",
+ "framework",
+ "php",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/registry/issues",
+ "source": "https://github.com/utopia-php/registry/tree/0.5.0"
+ },
+ "time": "2021-03-10T10:45:22+00:00"
+ },
+ {
+ "name": "utopia-php/storage",
+ "version": "0.18.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/storage.git",
+ "reference": "94ab8758fabcefee5c5fa723616e45719833f922"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/storage/zipball/94ab8758fabcefee5c5fa723616e45719833f922",
+ "reference": "94ab8758fabcefee5c5fa723616e45719833f922",
+ "shasum": ""
+ },
+ "require": {
+ "ext-brotli": "*",
+ "ext-fileinfo": "*",
+ "ext-lz4": "*",
+ "ext-snappy": "*",
+ "ext-xz": "*",
+ "ext-zlib": "*",
+ "ext-zstd": "*",
+ "php": ">=8.0",
+ "utopia-php/framework": "0.*.*",
+ "utopia-php/system": "0.*.*"
+ },
+ "require-dev": {
+ "laravel/pint": "1.2.*",
+ "phpunit/phpunit": "^9.3",
+ "vimeo/psalm": "4.0.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Storage\\": "src/Storage"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple Storage library to manage application storage",
+ "keywords": [
+ "framework",
+ "php",
+ "storage",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/storage/issues",
+ "source": "https://github.com/utopia-php/storage/tree/0.18.4"
+ },
+ "time": "2024-04-02T08:24:09+00:00"
+ },
+ {
+ "name": "utopia-php/swoole",
+ "version": "0.8.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/swoole.git",
+ "reference": "5fa9d42c608ad46a4ce42a6d2b2eae00592fccd4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/swoole/zipball/5fa9d42c608ad46a4ce42a6d2b2eae00592fccd4",
+ "reference": "5fa9d42c608ad46a4ce42a6d2b2eae00592fccd4",
+ "shasum": ""
+ },
+ "require": {
+ "ext-swoole": "*",
+ "php": ">=8.0",
+ "utopia-php/framework": "0.33.*"
+ },
+ "require-dev": {
+ "laravel/pint": "1.2.*",
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^9.3",
+ "swoole/ide-helper": "5.0.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\Swoole\\": "src/Swoole"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "An extension for Utopia Framework to work with PHP Swoole as a PHP FPM alternative",
+ "keywords": [
+ "framework",
+ "http",
+ "php",
+ "server",
+ "swoole",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/swoole/issues",
+ "source": "https://github.com/utopia-php/swoole/tree/0.8.2"
+ },
+ "time": "2024-02-01T14:54:12+00:00"
+ },
+ {
+ "name": "utopia-php/system",
+ "version": "0.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/system.git",
+ "reference": "a2cbfb3c69b9ecb8b6f06c5774f3cf279ea7665e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/system/zipball/a2cbfb3c69b9ecb8b6f06c5774f3cf279ea7665e",
+ "reference": "a2cbfb3c69b9ecb8b6f06c5774f3cf279ea7665e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.0"
+ },
+ "require-dev": {
+ "laravel/pint": "1.13.*",
+ "phpstan/phpstan": "1.10.*",
+ "phpunit/phpunit": "9.6.*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\System\\": "src/System"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "eldad@appwrite.io"
+ },
+ {
+ "name": "Torsten Dittmann",
+ "email": "torsten@appwrite.io"
+ }
+ ],
+ "description": "A simple library for obtaining information about the host's system.",
+ "keywords": [
+ "framework",
+ "php",
+ "system",
+ "upf",
+ "utopia"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/system/issues",
+ "source": "https://github.com/utopia-php/system/tree/0.8.0"
+ },
+ "time": "2024-04-01T10:22:28+00:00"
+ },
+ {
+ "name": "utopia-php/vcs",
+ "version": "0.6.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/vcs.git",
+ "reference": "104e47ea8e38c156ec0e0bd415caa3dcd5046fe2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/vcs/zipball/104e47ea8e38c156ec0e0bd415caa3dcd5046fe2",
+ "reference": "104e47ea8e38c156ec0e0bd415caa3dcd5046fe2",
+ "shasum": ""
+ },
+ "require": {
+ "adhocore/jwt": "^1.1",
+ "php": ">=8.0",
+ "utopia-php/cache": "^0.9.0",
+ "utopia-php/framework": "0.*.*"
+ },
+ "require-dev": {
+ "laravel/pint": "1.2.*",
+ "phpstan/phpstan": "1.8.*",
+ "phpunit/phpunit": "^9.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\VCS\\": "src/VCS",
+ "Utopia\\Detector\\": "src/Detector"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A simple library to integrate version control systems like GitHub, GitLab etc. to receive webhook events",
+ "keywords": [
+ "framework",
+ "php",
+ "utopia",
+ "vcs"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/vcs/issues",
+ "source": "https://github.com/utopia-php/vcs/tree/0.6.5"
+ },
+ "time": "2024-01-08T17:11:12+00:00"
+ },
+ {
+ "name": "utopia-php/websocket",
+ "version": "0.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/utopia-php/websocket.git",
+ "reference": "51fcb86171400d8aa40d76c54593481fd273dab5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/utopia-php/websocket/zipball/51fcb86171400d8aa40d76c54593481fd273dab5",
+ "reference": "51fcb86171400d8aa40d76c54593481fd273dab5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.5.5",
+ "swoole/ide-helper": "4.6.6",
+ "textalk/websocket": "1.5.2",
+ "vimeo/psalm": "^4.8.1",
+ "workerman/workerman": "^4.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Utopia\\WebSocket\\": "src/WebSocket"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "eldad@appwrite.io"
+ },
+ {
+ "name": "Torsten Dittmann",
+ "email": "torsten@appwrite.io"
+ }
+ ],
+ "description": "A simple abstraction for WebSocket servers.",
+ "keywords": [
+ "framework",
+ "php",
+ "upf",
+ "utopia",
+ "websocket"
+ ],
+ "support": {
+ "issues": "https://github.com/utopia-php/websocket/issues",
+ "source": "https://github.com/utopia-php/websocket/tree/0.1.0"
+ },
+ "time": "2021-12-20T10:50:09+00:00"
+ },
+ {
+ "name": "webmozart/assert",
+ "version": "1.11.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webmozarts/assert.git",
+ "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991",
+ "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "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.11.0"
+ },
+ "time": "2022-06-03T18:03:27+00:00"
+ },
+ {
+ "name": "webonyx/graphql-php",
+ "version": "v14.11.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webonyx/graphql-php.git",
+ "reference": "d9c2fdebc6aa01d831bc2969da00e8588cffef19"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/d9c2fdebc6aa01d831bc2969da00e8588cffef19",
+ "reference": "d9c2fdebc6aa01d831bc2969da00e8588cffef19",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "php": "^7.1 || ^8"
+ },
+ "require-dev": {
+ "amphp/amp": "^2.3",
+ "doctrine/coding-standard": "^6.0",
+ "nyholm/psr7": "^1.2",
+ "phpbench/phpbench": "^1.2",
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "0.12.82",
+ "phpstan/phpstan-phpunit": "0.12.18",
+ "phpstan/phpstan-strict-rules": "0.12.9",
+ "phpunit/phpunit": "^7.2 || ^8.5",
+ "psr/http-message": "^1.0",
+ "react/promise": "2.*",
+ "simpod/php-coveralls-mirror": "^3.0"
+ },
+ "suggest": {
+ "psr/http-message": "To use standard GraphQL server",
+ "react/promise": "To leverage async resolving on React PHP platform"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "GraphQL\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A PHP port of GraphQL reference implementation",
+ "homepage": "https://github.com/webonyx/graphql-php",
+ "keywords": [
+ "api",
+ "graphql"
+ ],
+ "support": {
+ "issues": "https://github.com/webonyx/graphql-php/issues",
+ "source": "https://github.com/webonyx/graphql-php/tree/v14.11.10"
+ },
+ "funding": [
+ {
+ "url": "https://opencollective.com/webonyx-graphql-php",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2023-07-05T14:23:37+00:00"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "appwrite/sdk-generator",
+ "version": "0.38.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/appwrite/sdk-generator.git",
+ "reference": "51284668529e2b10ed933412a42b603c76cded23"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/51284668529e2b10ed933412a42b603c76cded23",
+ "reference": "51284668529e2b10ed933412a42b603c76cded23",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "matthiasmullie/minify": "1.3.*",
+ "php": ">=8.0",
+ "twig/twig": "v3.8.*"
+ },
+ "require-dev": {
+ "brianium/paratest": "v7.4.*",
+ "phpunit/phpunit": "10.5.*",
+ "squizlabs/php_codesniffer": "3.9.*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Appwrite\\SDK\\": "src/SDK",
+ "Appwrite\\Spec\\": "src/Spec"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eldad Fux",
+ "email": "eldad@appwrite.io"
+ }
+ ],
+ "description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
+ "support": {
+ "issues": "https://github.com/appwrite/sdk-generator/issues",
+ "source": "https://github.com/appwrite/sdk-generator/tree/0.38.2"
+ },
+ "time": "2024-04-25T07:49:29+00:00"
+ },
+ {
+ "name": "doctrine/deprecations",
+ "version": "1.1.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/deprecations.git",
+ "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
+ "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9",
+ "phpstan/phpstan": "1.4.10 || 1.10.15",
+ "phpstan/phpstan-phpunit": "^1.0",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "psalm/plugin-phpunit": "0.18.4",
+ "psr/log": "^1 || ^2 || ^3",
+ "vimeo/psalm": "4.30.0 || 5.12.0"
+ },
+ "suggest": {
+ "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
+ },
+ "default-branch": true,
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
+ "homepage": "https://www.doctrine-project.org/",
+ "support": {
+ "issues": "https://github.com/doctrine/deprecations/issues",
+ "source": "https://github.com/doctrine/deprecations/tree/1.1.3"
+ },
+ "time": "2024-01-30T19:34:25+00:00"
+ },
+ {
+ "name": "doctrine/instantiator",
+ "version": "1.5.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "12be2483e1f0e850b353e26869e4e6c038459501"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/12be2483e1f0e850b353e26869e4e6c038459501",
+ "reference": "12be2483e1f0e850b353e26869e4e6c038459501",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9 || ^12",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpbench/phpbench": "^0.16 || ^1",
+ "phpstan/phpstan": "^1.4",
+ "phpstan/phpstan-phpunit": "^1",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6",
+ "vimeo/psalm": "^4.30 || ^5.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "https://ocramius.github.io/"
+ }
+ ],
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+ "keywords": [
+ "constructor",
+ "instantiate"
+ ],
+ "support": {
+ "issues": "https://github.com/doctrine/instantiator/issues",
+ "source": "https://github.com/doctrine/instantiator/tree/1.5.x"
+ },
+ "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%2Finstantiator",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-12-09T14:16:53+00:00"
+ },
+ {
+ "name": "laravel/pint",
+ "version": "v1.15.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/pint.git",
+ "reference": "3600b5d17aff52f6100ea4921849deacbbeb8656"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/pint/zipball/3600b5d17aff52f6100ea4921849deacbbeb8656",
+ "reference": "3600b5d17aff52f6100ea4921849deacbbeb8656",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "ext-tokenizer": "*",
+ "ext-xml": "*",
+ "php": "^8.1.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.54.0",
+ "illuminate/view": "^10.48.8",
+ "larastan/larastan": "^2.9.5",
+ "laravel-zero/framework": "^10.3.0",
+ "mockery/mockery": "^1.6.11",
+ "nunomaduro/termwind": "^1.15.1",
+ "pestphp/pest": "^2.34.7"
+ },
+ "bin": [
+ "builds/pint"
+ ],
+ "type": "project",
+ "autoload": {
+ "psr-4": {
+ "App\\": "app/",
+ "Database\\Seeders\\": "database/seeders/",
+ "Database\\Factories\\": "database/factories/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nuno Maduro",
+ "email": "enunomaduro@gmail.com"
+ }
+ ],
+ "description": "An opinionated code formatter for PHP.",
+ "homepage": "https://laravel.com",
+ "keywords": [
+ "format",
+ "formatter",
+ "lint",
+ "linter",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/pint/issues",
+ "source": "https://github.com/laravel/pint"
+ },
+ "time": "2024-04-30T15:02:26+00:00"
+ },
+ {
+ "name": "matthiasmullie/minify",
+ "version": "1.3.73",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/matthiasmullie/minify.git",
+ "reference": "cb7a9297b4ab070909cefade30ee95054d4ae87a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/matthiasmullie/minify/zipball/cb7a9297b4ab070909cefade30ee95054d4ae87a",
+ "reference": "cb7a9297b4ab070909cefade30ee95054d4ae87a",
+ "shasum": ""
+ },
+ "require": {
+ "ext-pcre": "*",
+ "matthiasmullie/path-converter": "~1.1",
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": ">=2.0",
+ "matthiasmullie/scrapbook": ">=1.3",
+ "phpunit/phpunit": ">=4.8",
+ "squizlabs/php_codesniffer": ">=3.0"
+ },
+ "suggest": {
+ "psr/cache-implementation": "Cache implementation to use with Minify::cache"
+ },
+ "bin": [
+ "bin/minifycss",
+ "bin/minifyjs"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "MatthiasMullie\\Minify\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Matthias Mullie",
+ "email": "minify@mullie.eu",
+ "homepage": "https://www.mullie.eu",
+ "role": "Developer"
+ }
+ ],
+ "description": "CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.",
+ "homepage": "https://github.com/matthiasmullie/minify",
+ "keywords": [
+ "JS",
+ "css",
+ "javascript",
+ "minifier",
+ "minify"
+ ],
+ "support": {
+ "issues": "https://github.com/matthiasmullie/minify/issues",
+ "source": "https://github.com/matthiasmullie/minify/tree/1.3.73"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/matthiasmullie",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-15T10:27:10+00:00"
+ },
+ {
+ "name": "matthiasmullie/path-converter",
+ "version": "1.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/matthiasmullie/path-converter.git",
+ "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/matthiasmullie/path-converter/zipball/e7d13b2c7e2f2268e1424aaed02085518afa02d9",
+ "reference": "e7d13b2c7e2f2268e1424aaed02085518afa02d9",
+ "shasum": ""
+ },
+ "require": {
+ "ext-pcre": "*",
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.8"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "MatthiasMullie\\PathConverter\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Matthias Mullie",
+ "email": "pathconverter@mullie.eu",
+ "homepage": "http://www.mullie.eu",
+ "role": "Developer"
+ }
+ ],
+ "description": "Relative path converter",
+ "homepage": "http://github.com/matthiasmullie/path-converter",
+ "keywords": [
+ "converter",
+ "path",
+ "paths",
+ "relative"
+ ],
+ "support": {
+ "issues": "https://github.com/matthiasmullie/path-converter/issues",
+ "source": "https://github.com/matthiasmullie/path-converter/tree/1.1.3"
+ },
+ "time": "2019-02-05T23:41:09+00:00"
+ },
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "2f5294676c802a62b0549f6bc8983f14294ce369"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/2f5294676c802a62b0549f6bc8983f14294ce369",
+ "reference": "2f5294676c802a62b0549f6bc8983f14294ce369",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/collections": "<1.6.8",
+ "doctrine/common": "<2.13.3 || >=3 <3.2.2"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.6.8",
+ "doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpspec/prophecy": "^1.10",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
+ },
+ "default-branch": true,
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ],
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "support": {
+ "issues": "https://github.com/myclabs/DeepCopy/issues",
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.x"
+ },
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-02-10T11:10:03+00:00"
+ },
+ {
+ "name": "nikic/php-parser",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "c5ee33df86c06b3278c670f64273b1ba768a0744"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c5ee33df86c06b3278c670f64273b1ba768a0744",
+ "reference": "c5ee33df86c06b3278c670f64273b1ba768a0744",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "php": ">=7.4"
+ },
+ "require-dev": {
+ "ircmaxell/php-yacc": "^0.0.7",
+ "phpunit/phpunit": "^9.0"
+ },
+ "default-branch": true,
+ "bin": [
+ "bin/php-parse"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpParser\\": "lib/PhpParser"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov"
+ }
+ ],
+ "description": "A PHP parser written in PHP",
+ "keywords": [
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
+ "source": "https://github.com/nikic/PHP-Parser/tree/master"
+ },
+ "time": "2024-04-19T12:04:10+00:00"
+ },
+ {
+ "name": "phar-io/manifest",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-phar": "*",
+ "ext-xmlwriter": "*",
+ "phar-io/version": "^3.0.1",
+ "php": "^7.2 || ^8.0"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+ "support": {
+ "issues": "https://github.com/phar-io/manifest/issues",
+ "source": "https://github.com/phar-io/manifest/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-03T12:33:53+00:00"
+ },
+ {
+ "name": "phar-io/version",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Library for handling version information and constraints",
+ "support": {
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/3.2.1"
+ },
+ "time": "2022-02-21T01:04:05+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-common",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
+ "reference": "a0eeab580cbdf4414fef6978732510a36ed0a9d6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/a0eeab580cbdf4414fef6978732510a36ed0a9d6",
+ "reference": "a0eeab580cbdf4414fef6978732510a36ed0a9d6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "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/master"
+ },
+ "time": "2021-06-25T13:47:51+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-docblock",
+ "version": "5.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+ "reference": "88a07d262854c827db22f2eac8b072138e492f65"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/88a07d262854c827db22f2eac8b072138e492f65",
+ "reference": "88a07d262854c827db22f2eac8b072138e492f65",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/deprecations": "^1.1",
+ "ext-filter": "*",
+ "php": "^7.4 || ^8.0",
+ "phpdocumentor/reflection-common": "^2.2",
+ "phpdocumentor/type-resolver": "^1.7",
+ "phpstan/phpdoc-parser": "^1.7",
+ "webmozart/assert": "^1.9.1"
+ },
+ "require-dev": {
+ "mockery/mockery": "~1.3.5",
+ "phpstan/extension-installer": "^1.1",
+ "phpstan/phpstan": "^1.8",
+ "phpstan/phpstan-mockery": "^1.1",
+ "phpstan/phpstan-webmozart-assert": "^1.2",
+ "phpunit/phpunit": "^9.5",
+ "vimeo/psalm": "^5.13"
+ },
+ "default-branch": true,
+ "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": "opensource@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/5.x"
+ },
+ "time": "2024-05-08T18:52:15+00:00"
+ },
+ {
+ "name": "phpdocumentor/type-resolver",
+ "version": "1.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/TypeResolver.git",
+ "reference": "483fb7fe262607b0a5ec32f99bdc42e2212b22fe"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/483fb7fe262607b0a5ec32f99bdc42e2212b22fe",
+ "reference": "483fb7fe262607b0a5ec32f99bdc42e2212b22fe",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/deprecations": "^1.0",
+ "php": "^7.3 || ^8.0",
+ "phpdocumentor/reflection-common": "^2.0",
+ "phpstan/phpdoc-parser": "^1.18"
+ },
+ "require-dev": {
+ "ext-tokenizer": "*",
+ "phpbench/phpbench": "^1.2",
+ "phpstan/extension-installer": "^1.1",
+ "phpstan/phpstan": "^1.8",
+ "phpstan/phpstan-phpunit": "^1.1",
+ "phpunit/phpunit": "^9.5",
+ "rector/rector": "^0.13.9",
+ "vimeo/psalm": "^4.25"
+ },
+ "default-branch": true,
+ "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.x"
+ },
+ "time": "2024-03-29T20:21:22+00:00"
+ },
+ {
+ "name": "phpspec/prophecy",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpspec/prophecy.git",
+ "reference": "f9e07be0992e7bf1cad210829055b99318df142f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/f9e07be0992e7bf1cad210829055b99318df142f",
+ "reference": "f9e07be0992e7bf1cad210829055b99318df142f",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.2 || ^2.0",
+ "php": "^7.2 || 8.0.* || 8.1.* || 8.2.* || 8.3.*",
+ "phpdocumentor/reflection-docblock": "^5.2",
+ "sebastian/comparator": "^3.0 || ^4.0 || ^5.0 || ^6.0",
+ "sebastian/recursion-context": "^3.0 || ^4.0 || ^5.0 || ^6.0"
+ },
+ "require-dev": {
+ "phpspec/phpspec": "^6.0 || ^7.0",
+ "phpstan/phpstan": "^1.9",
+ "phpunit/phpunit": "^8.0 || ^9.0 || ^10.0"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Prophecy\\": "src/Prophecy"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Konstantin Kudryashov",
+ "email": "ever.zet@gmail.com",
+ "homepage": "http://everzet.com"
+ },
+ {
+ "name": "Marcello Duarte",
+ "email": "marcello.duarte@gmail.com"
+ }
+ ],
+ "description": "Highly opinionated mocking framework for PHP 5.3+",
+ "homepage": "https://github.com/phpspec/prophecy",
+ "keywords": [
+ "Double",
+ "Dummy",
+ "dev",
+ "fake",
+ "mock",
+ "spy",
+ "stub"
+ ],
+ "support": {
+ "issues": "https://github.com/phpspec/prophecy/issues",
+ "source": "https://github.com/phpspec/prophecy/tree/master"
+ },
+ "time": "2024-03-29T09:25:04+00:00"
+ },
+ {
+ "name": "phpstan/phpdoc-parser",
+ "version": "1.29.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpstan/phpdoc-parser.git",
+ "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/536889f2b340489d328f5ffb7b02bb6b183ddedc",
+ "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/annotations": "^2.0",
+ "nikic/php-parser": "^4.15",
+ "php-parallel-lint/php-parallel-lint": "^1.2",
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^1.5",
+ "phpstan/phpstan-phpunit": "^1.1",
+ "phpstan/phpstan-strict-rules": "^1.0",
+ "phpunit/phpunit": "^9.5",
+ "symfony/process": "^5.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "PHPStan\\PhpDocParser\\": [
+ "src/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PHPDoc parser with support for nullable, intersection and generic types",
+ "support": {
+ "issues": "https://github.com/phpstan/phpdoc-parser/issues",
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.0"
+ },
+ "time": "2024-05-06T12:04:23+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "9.2.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "3352293d9e91513d5508c415835014881b420218"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/3352293d9e91513d5508c415835014881b420218",
+ "reference": "3352293d9e91513d5508c415835014881b420218",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-xmlwriter": "*",
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=7.3",
+ "phpunit/php-file-iterator": "^3.0.3",
+ "phpunit/php-text-template": "^2.0.2",
+ "sebastian/code-unit-reverse-lookup": "^2.0.2",
+ "sebastian/complexity": "^2.0",
+ "sebastian/environment": "^5.1.2",
+ "sebastian/lines-of-code": "^1.0.3",
+ "sebastian/version": "^3.0.1",
+ "theseer/tokenizer": "^1.2.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-pcov": "PHP extension that provides line coverage",
+ "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+ "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-22T05:16:32+00:00"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "3.0.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "38b24367e1b340aa78b96d7cab042942d917bb84"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/38b24367e1b340aa78b96d7cab042942d917bb84",
+ "reference": "38b24367e1b340aa78b96d7cab042942d917bb84",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-02-11T16:23:04+00:00"
+ },
+ {
+ "name": "phpunit/php-invoker",
+ "version": "3.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-invoker.git",
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "ext-pcntl": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-pcntl": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Invoke callables with a timeout",
+ "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+ "keywords": [
+ "process"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:58:55+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T05:33:50+00:00"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "5.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:16:10+00:00"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "9.5.20",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba",
+ "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.3.1",
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "ext-xmlwriter": "*",
+ "myclabs/deep-copy": "^1.10.1",
+ "phar-io/manifest": "^2.0.3",
+ "phar-io/version": "^3.0.2",
+ "php": ">=7.3",
+ "phpspec/prophecy": "^1.12.1",
+ "phpunit/php-code-coverage": "^9.2.13",
+ "phpunit/php-file-iterator": "^3.0.5",
+ "phpunit/php-invoker": "^3.1.1",
+ "phpunit/php-text-template": "^2.0.3",
+ "phpunit/php-timer": "^5.0.2",
+ "sebastian/cli-parser": "^1.0.1",
+ "sebastian/code-unit": "^1.0.6",
+ "sebastian/comparator": "^4.0.5",
+ "sebastian/diff": "^4.0.3",
+ "sebastian/environment": "^5.1.3",
+ "sebastian/exporter": "^4.0.3",
+ "sebastian/global-state": "^5.0.1",
+ "sebastian/object-enumerator": "^4.0.3",
+ "sebastian/resource-operations": "^3.0.3",
+ "sebastian/type": "^3.0",
+ "sebastian/version": "^3.0.2"
+ },
+ "require-dev": {
+ "ext-pdo": "*",
+ "phpspec/prophecy-phpunit": "^2.0.1"
+ },
+ "suggest": {
+ "ext-soap": "*",
+ "ext-xdebug": "*"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.5-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Framework/Assert/Functions.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20"
+ },
+ "funding": [
+ {
+ "url": "https://phpunit.de/sponsors.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-04-01T12:37:26+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "dev-master",
+ "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"
+ },
+ "default-branch": true,
+ "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": "sebastian/cli-parser",
+ "version": "1.0.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/cli-parser.git",
+ "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
+ "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for parsing CLI options",
+ "homepage": "https://github.com/sebastianbergmann/cli-parser",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T06:27:43+00:00"
+ },
+ {
+ "name": "sebastian/code-unit",
+ "version": "1.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit.git",
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/code-unit",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:08:54+00:00"
+ },
+ {
+ "name": "sebastian/code-unit-reverse-lookup",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Looks up which function or method a line of code belongs to",
+ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:30:19+00:00"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "4.0.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "b247957a1c8dc81a671770f74b479c0a78a818f1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/b247957a1c8dc81a671770f74b479c0a78a818f1",
+ "reference": "b247957a1c8dc81a671770f74b479c0a78a818f1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/diff": "^4.0",
+ "sebastian/exporter": "^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/4.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-09-14T12:46:14+00:00"
+ },
+ {
+ "name": "sebastian/complexity",
+ "version": "2.0.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/complexity.git",
+ "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a",
+ "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for calculating the complexity of PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/complexity",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/complexity/issues",
+ "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-12-22T06:19:30+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "4.0.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc",
+ "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3",
+ "symfony/process": "^4.2 || ^5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T06:30:58+00:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "5.1.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
+ "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-posix": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "source": "https://github.com/sebastianbergmann/environment/tree/5.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T06:03:51+00:00"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "4.0.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72",
+ "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "ext-mbstring": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "https://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T06:33:00+00:00"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "5.0.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
+ "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "ext-dom": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-uopz": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T06:35:11+00:00"
+ },
+ {
+ "name": "sebastian/lines-of-code",
+ "version": "1.0.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+ "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5",
+ "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for counting the lines of code in PHP source code",
+ "homepage": "https://github.com/sebastianbergmann/lines-of-code",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-12-22T06:20:34+00:00"
+ },
+ {
+ "name": "sebastian/object-enumerator",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:12:34+00:00"
+ },
+ {
+ "name": "sebastian/object-reflector",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:14:26+00:00"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "4.0.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
+ "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "https://github.com/sebastianbergmann/recursion-context",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T06:07:39+00:00"
+ },
+ {
+ "name": "sebastian/resource-operations",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
+ "reference": "ff553e7482dcee39fa4acc2b175d6ddeb0f7bc25"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ff553e7482dcee39fa4acc2b175d6ddeb0f7bc25",
+ "reference": "ff553e7482dcee39fa4acc2b175d6ddeb0f7bc25",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides a list of PHP built-in functions that operate on resources",
+ "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+ "support": {
+ "source": "https://github.com/sebastianbergmann/resource-operations/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-14T18:47:08+00:00"
+ },
+ {
+ "name": "sebastian/type",
+ "version": "3.2.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/type.git",
+ "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
+ "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the types of the PHP type system",
+ "homepage": "https://github.com/sebastianbergmann/type",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/type/issues",
+ "source": "https://github.com/sebastianbergmann/type/tree/3.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T06:13:03+00:00"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "3.0.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "c6c1022351a901512170118436c764e473f6de8c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
+ "reference": "c6c1022351a901512170118436c764e473f6de8c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T06:39:44+00:00"
+ },
+ {
+ "name": "swoole/ide-helper",
+ "version": "5.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/swoole/ide-helper.git",
+ "reference": "33ec7af9111b76d06a70dd31191cc74793551112"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/swoole/ide-helper/zipball/33ec7af9111b76d06a70dd31191cc74793551112",
+ "reference": "33ec7af9111b76d06a70dd31191cc74793551112",
+ "shasum": ""
+ },
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Team Swoole",
+ "email": "team@swoole.com"
+ }
+ ],
+ "description": "IDE help files for Swoole.",
+ "support": {
+ "issues": "https://github.com/swoole/ide-helper/issues",
+ "source": "https://github.com/swoole/ide-helper/tree/5.1.2"
+ },
+ "time": "2024-02-01T22:28:11+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "1.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "c9e59dec962d38cf2e0e4c61c4a1a1312f4dd7fe"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c9e59dec962d38cf2e0e4c61c4a1a1312f4dd7fe",
+ "reference": "c9e59dec962d38cf2e0e4c61c4a1a1312f4dd7fe",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "provide": {
+ "ext-ctype": "*"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "default-branch": true,
+ "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/1.x"
+ },
+ "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-19T06:31:17+00:00"
+ },
+ {
+ "name": "textalk/websocket",
+ "version": "1.5.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Textalk/websocket-php.git",
+ "reference": "1712325e99b6bf869ccbf9bf41ab749e7328ea46"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Textalk/websocket-php/zipball/1712325e99b6bf869ccbf9bf41ab749e7328ea46",
+ "reference": "1712325e99b6bf869ccbf9bf41ab749e7328ea46",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 | ^8.0",
+ "psr/log": "^1 | ^2 | ^3"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.0",
+ "phpunit/phpunit": "^8.0|^9.0",
+ "squizlabs/php_codesniffer": "^3.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "WebSocket\\": "lib"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "ISC"
+ ],
+ "authors": [
+ {
+ "name": "Fredrik Liljegren"
+ },
+ {
+ "name": "Sören Jensen",
+ "email": "soren@abicart.se"
+ }
+ ],
+ "description": "WebSocket client and server",
+ "support": {
+ "issues": "https://github.com/Textalk/websocket-php/issues",
+ "source": "https://github.com/Textalk/websocket-php/tree/1.5.7"
+ },
+ "time": "2022-03-29T09:46:59+00:00"
+ },
+ {
+ "name": "theseer/tokenizer",
+ "version": "1.2.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+ "support": {
+ "issues": "https://github.com/theseer/tokenizer/issues",
+ "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-03T12:36:25+00:00"
+ },
+ {
+ "name": "twig/twig",
+ "version": "v3.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/twigphp/Twig.git",
+ "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/twigphp/Twig/zipball/9d15f0ac07f44dc4217883ec6ae02fd555c6f71d",
+ "reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-ctype": "^1.8",
+ "symfony/polyfill-mbstring": "^1.3",
+ "symfony/polyfill-php80": "^1.22"
+ },
+ "require-dev": {
+ "psr/container": "^1.0|^2.0",
+ "symfony/phpunit-bridge": "^5.4.9|^6.3|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Twig\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com",
+ "homepage": "http://fabien.potencier.org",
+ "role": "Lead Developer"
+ },
+ {
+ "name": "Twig Team",
+ "role": "Contributors"
+ },
+ {
+ "name": "Armin Ronacher",
+ "email": "armin.ronacher@active-4.com",
+ "role": "Project Founder"
+ }
+ ],
+ "description": "Twig, the flexible, fast, and secure template language for PHP",
+ "homepage": "https://twig.symfony.com",
+ "keywords": [
+ "templating"
+ ],
+ "support": {
+ "issues": "https://github.com/twigphp/Twig/issues",
+ "source": "https://github.com/twigphp/Twig/tree/v3.8.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/twig/twig",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-11-21T18:54:41+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "dev",
+ "stability-flags": {
+ "utopia-php/messaging": 20
+ },
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": {
+ "php": ">=8.0.0",
+ "ext-curl": "*",
+ "ext-imagick": "*",
+ "ext-mbstring": "*",
+ "ext-json": "*",
+ "ext-yaml": "*",
+ "ext-dom": "*",
+ "ext-redis": "*",
+ "ext-swoole": "*",
+ "ext-pdo": "*",
+ "ext-openssl": "*",
+ "ext-zlib": "*",
+ "ext-sockets": "*"
+ },
+ "platform-dev": {
+ "ext-fileinfo": "*"
+ },
+ "platform-overrides": {
+ "php": "8.3"
+ },
+ "plugin-api-version": "2.2.0"
+}
From aabd81ee8c3fd237eaeacbb3a1a3006b694a96d9 Mon Sep 17 00:00:00 2001
From: shimon
Date: Sun, 12 May 2024 20:18:40 +0300
Subject: [PATCH 082/138] composer update
---
composer.json | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/composer.json b/composer.json
index cc0746ae3f..929fa66659 100644
--- a/composer.json
+++ b/composer.json
@@ -52,7 +52,7 @@
"utopia-php/config": "0.2.*",
"utopia-php/database": "0.49.*",
"utopia-php/domains": "0.5.*",
- "utopia-php/dsn": "0.2.*",
+ "utopia-php/dsn": "0.2.1",
"utopia-php/framework": "0.33.*",
"utopia-php/fetch": "0.2.*",
"utopia-php/image": "0.6.*",
@@ -84,7 +84,7 @@
"ext-fileinfo": "*",
"appwrite/sdk-generator": "0.38.*",
"phpunit/phpunit": "9.5.20",
- "swoole/ide-helper": "5.0.2",
+ "swoole/ide-helper": "5.1.2",
"textalk/websocket": "1.5.7",
"laravel/pint": "^1.14"
},
From e53a074d32097562d62e3da69b447c4aaa3f165c Mon Sep 17 00:00:00 2001
From: shimon
Date: Sun, 12 May 2024 20:19:17 +0300
Subject: [PATCH 083/138] composer update
---
composer.lock | 294 ++++++++++++++++++++++++--------------------------
1 file changed, 139 insertions(+), 155 deletions(-)
diff --git a/composer.lock b/composer.lock
index 889c16c324..88445d3aef 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "6a7cd54036740ed7162feb2d3f9ac04b",
+ "content-hash": "7982239ec581db40de6012c2901af9b7",
"packages": [
{
"name": "adhocore/jwt",
@@ -210,16 +210,16 @@
},
{
"name": "beberlei/assert",
- "version": "v3.x-dev",
+ "version": "v3.3.2",
"source": {
"type": "git",
"url": "https://github.com/beberlei/assert.git",
- "reference": "d63a6943fc4fd1a2aedb65994e3548715105abcf"
+ "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/beberlei/assert/zipball/d63a6943fc4fd1a2aedb65994e3548715105abcf",
- "reference": "d63a6943fc4fd1a2aedb65994e3548715105abcf",
+ "url": "https://api.github.com/repos/beberlei/assert/zipball/cb70015c04be1baee6f5f5c953703347c0ac1655",
+ "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655",
"shasum": ""
},
"require": {
@@ -227,12 +227,13 @@
"ext-json": "*",
"ext-mbstring": "*",
"ext-simplexml": "*",
- "php": "^7"
+ "php": "^7.0 || ^8.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "*",
- "phpstan/phpstan-shim": "*",
- "phpunit/phpunit": ">=6.0.0 <8"
+ "phpstan/phpstan": "*",
+ "phpunit/phpunit": ">=6.0.0",
+ "yoast/phpunit-polyfills": "^0.1.0"
},
"suggest": {
"ext-intl": "Needed to allow Assertion::count(), Assertion::isCountable(), Assertion::minCount(), and Assertion::maxCount() to operate on ResourceBundles"
@@ -270,9 +271,9 @@
],
"support": {
"issues": "https://github.com/beberlei/assert/issues",
- "source": "https://github.com/beberlei/assert/tree/v3"
+ "source": "https://github.com/beberlei/assert/tree/v3.3.2"
},
- "time": "2019-12-19T17:51:41+00:00"
+ "time": "2021-12-16T21:41:27+00:00"
},
{
"name": "chillerlan/php-qrcode",
@@ -564,16 +565,16 @@
},
{
"name": "jean85/pretty-package-versions",
- "version": "2.x-dev",
+ "version": "2.0.6",
"source": {
"type": "git",
"url": "https://github.com/Jean85/pretty-package-versions.git",
- "reference": "4ea62fbb39a29d65ef6cda413158baa7f1d98550"
+ "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/4ea62fbb39a29d65ef6cda413158baa7f1d98550",
- "reference": "4ea62fbb39a29d65ef6cda413158baa7f1d98550",
+ "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/f9fdd29ad8e6d024f52678b570e5593759b550b4",
+ "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4",
"shasum": ""
},
"require": {
@@ -585,9 +586,8 @@
"jean85/composer-provided-replaced-stub-package": "^1.0",
"phpstan/phpstan": "^1.4",
"phpunit/phpunit": "^7.5|^8.5|^9.4",
- "vimeo/psalm": "^4.3 || ^5.0"
+ "vimeo/psalm": "^4.3"
},
- "default-branch": true,
"type": "library",
"extra": {
"branch-alias": {
@@ -618,9 +618,9 @@
],
"support": {
"issues": "https://github.com/Jean85/pretty-package-versions/issues",
- "source": "https://github.com/Jean85/pretty-package-versions/tree/2.x"
+ "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.6"
},
- "time": "2024-04-08T08:58:14+00:00"
+ "time": "2024-03-08T09:58:59+00:00"
},
{
"name": "league/csv",
@@ -905,7 +905,7 @@
},
{
"name": "paragonie/constant_time_encoding",
- "version": "v2.x-dev",
+ "version": "v2.7.0",
"source": {
"type": "git",
"url": "https://github.com/paragonie/constant_time_encoding.git",
@@ -1053,7 +1053,7 @@
},
{
"name": "spomky-labs/otphp",
- "version": "v10.0.x-dev",
+ "version": "v10.0.3",
"source": {
"type": "git",
"url": "https://github.com/Spomky-Labs/otphp.git",
@@ -1082,7 +1082,6 @@
"phpunit/phpunit": "^8.0",
"thecodingmachine/phpstan-safe-rule": "^1.0 || ^2.0"
},
- "default-branch": true,
"type": "library",
"extra": {
"branch-alias": {
@@ -1129,16 +1128,16 @@
},
{
"name": "symfony/polyfill-mbstring",
- "version": "1.x-dev",
+ "version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "e642fbe7a7b73cdb05460555289a9057bfd6ead6"
+ "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e642fbe7a7b73cdb05460555289a9057bfd6ead6",
- "reference": "e642fbe7a7b73cdb05460555289a9057bfd6ead6",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
+ "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec",
"shasum": ""
},
"require": {
@@ -1150,7 +1149,6 @@
"suggest": {
"ext-mbstring": "For best performance"
},
- "default-branch": true,
"type": "library",
"extra": {
"thanks": {
@@ -1190,7 +1188,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/1.x"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0"
},
"funding": [
{
@@ -1206,26 +1204,25 @@
"type": "tidelift"
}
],
- "time": "2024-04-19T06:31:17+00:00"
+ "time": "2024-01-29T20:11:03+00:00"
},
{
"name": "symfony/polyfill-php80",
- "version": "1.x-dev",
+ "version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "7d191eb4022901cd3d91a816ec5464ca3a08a8aa"
+ "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7d191eb4022901cd3d91a816ec5464ca3a08a8aa",
- "reference": "7d191eb4022901cd3d91a816ec5464ca3a08a8aa",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
+ "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
- "default-branch": true,
"type": "library",
"extra": {
"thanks": {
@@ -1271,7 +1268,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/1.x"
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0"
},
"funding": [
{
@@ -1287,7 +1284,7 @@
"type": "tidelift"
}
],
- "time": "2024-04-19T06:31:17+00:00"
+ "time": "2024-01-29T20:11:03+00:00"
},
{
"name": "thecodingmachine/safe",
@@ -1924,7 +1921,7 @@
},
{
"name": "utopia-php/framework",
- "version": "0.33.x-dev",
+ "version": "0.33.6",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/http.git",
@@ -1963,7 +1960,7 @@
],
"support": {
"issues": "https://github.com/utopia-php/http/issues",
- "source": "https://github.com/utopia-php/http/tree/0.33.x"
+ "source": "https://github.com/utopia-php/http/tree/0.33.6"
},
"time": "2024-03-21T18:10:57+00:00"
},
@@ -2068,7 +2065,7 @@
},
{
"name": "utopia-php/logger",
- "version": "0.3.x-dev",
+ "version": "0.3.2",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/logger.git",
@@ -2115,22 +2112,22 @@
],
"support": {
"issues": "https://github.com/utopia-php/logger/issues",
- "source": "https://github.com/utopia-php/logger/tree/0.3.x"
+ "source": "https://github.com/utopia-php/logger/tree/0.3.2"
},
"time": "2023-11-22T14:45:43+00:00"
},
{
"name": "utopia-php/messaging",
- "version": "dev-get-country-code",
+ "version": "0.11.0",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/messaging.git",
- "reference": "724ba39fd7d5f701f54370201050e423b9de005f"
+ "reference": "b499c3ad11af711c28252c62d83f24e6106a2154"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/messaging/zipball/724ba39fd7d5f701f54370201050e423b9de005f",
- "reference": "724ba39fd7d5f701f54370201050e423b9de005f",
+ "url": "https://api.github.com/repos/utopia-php/messaging/zipball/b499c3ad11af711c28252c62d83f24e6106a2154",
+ "reference": "b499c3ad11af711c28252c62d83f24e6106a2154",
"shasum": ""
},
"require": {
@@ -2166,9 +2163,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/messaging/issues",
- "source": "https://github.com/utopia-php/messaging/tree/get-country-code"
+ "source": "https://github.com/utopia-php/messaging/tree/0.11.0"
},
- "time": "2024-05-08T17:06:19+00:00"
+ "time": "2024-05-08T17:10:02+00:00"
},
{
"name": "utopia-php/migration",
@@ -2330,7 +2327,7 @@
},
{
"name": "utopia-php/platform",
- "version": "0.5.x-dev",
+ "version": "0.5.1",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/platform.git",
@@ -3041,7 +3038,7 @@
},
{
"name": "doctrine/deprecations",
- "version": "1.1.x-dev",
+ "version": "1.1.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/deprecations.git",
@@ -3068,7 +3065,6 @@
"suggest": {
"psr/log": "Allows logging deprecations via PSR-3 logger implementation"
},
- "default-branch": true,
"type": "library",
"autoload": {
"psr-4": {
@@ -3089,29 +3085,29 @@
},
{
"name": "doctrine/instantiator",
- "version": "1.5.x-dev",
+ "version": "1.5.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/instantiator.git",
- "reference": "12be2483e1f0e850b353e26869e4e6c038459501"
+ "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/12be2483e1f0e850b353e26869e4e6c038459501",
- "reference": "12be2483e1f0e850b353e26869e4e6c038459501",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b",
+ "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
- "doctrine/coding-standard": "^9 || ^12",
+ "doctrine/coding-standard": "^9 || ^11",
"ext-pdo": "*",
"ext-phar": "*",
"phpbench/phpbench": "^0.16 || ^1",
"phpstan/phpstan": "^1.4",
"phpstan/phpstan-phpunit": "^1",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"vimeo/psalm": "^4.30 || ^5.4"
},
"type": "library",
@@ -3139,7 +3135,7 @@
],
"support": {
"issues": "https://github.com/doctrine/instantiator/issues",
- "source": "https://github.com/doctrine/instantiator/tree/1.5.x"
+ "source": "https://github.com/doctrine/instantiator/tree/1.5.0"
},
"funding": [
{
@@ -3155,7 +3151,7 @@
"type": "tidelift"
}
],
- "time": "2023-12-09T14:16:53+00:00"
+ "time": "2022-12-30T00:15:36+00:00"
},
{
"name": "laravel/pint",
@@ -3349,16 +3345,16 @@
},
{
"name": "myclabs/deep-copy",
- "version": "1.x-dev",
+ "version": "1.11.1",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "2f5294676c802a62b0549f6bc8983f14294ce369"
+ "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/2f5294676c802a62b0549f6bc8983f14294ce369",
- "reference": "2f5294676c802a62b0549f6bc8983f14294ce369",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
+ "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
"shasum": ""
},
"require": {
@@ -3366,15 +3362,13 @@
},
"conflict": {
"doctrine/collections": "<1.6.8",
- "doctrine/common": "<2.13.3 || >=3 <3.2.2"
+ "doctrine/common": "<2.13.3 || >=3,<3.2.2"
},
"require-dev": {
"doctrine/collections": "^1.6.8",
"doctrine/common": "^2.13.3 || ^3.2.2",
- "phpspec/prophecy": "^1.10",
"phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
},
- "default-branch": true,
"type": "library",
"autoload": {
"files": [
@@ -3398,7 +3392,7 @@
],
"support": {
"issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.x"
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1"
},
"funding": [
{
@@ -3406,20 +3400,20 @@
"type": "tidelift"
}
],
- "time": "2024-02-10T11:10:03+00:00"
+ "time": "2023-03-08T13:26:56+00:00"
},
{
"name": "nikic/php-parser",
- "version": "dev-master",
+ "version": "v5.0.2",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "c5ee33df86c06b3278c670f64273b1ba768a0744"
+ "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c5ee33df86c06b3278c670f64273b1ba768a0744",
- "reference": "c5ee33df86c06b3278c670f64273b1ba768a0744",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13",
+ "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13",
"shasum": ""
},
"require": {
@@ -3430,9 +3424,8 @@
},
"require-dev": {
"ircmaxell/php-yacc": "^0.0.7",
- "phpunit/phpunit": "^9.0"
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
},
- "default-branch": true,
"bin": [
"bin/php-parse"
],
@@ -3463,13 +3456,13 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/master"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2"
},
- "time": "2024-04-19T12:04:10+00:00"
+ "time": "2024-03-05T20:51:40+00:00"
},
{
"name": "phar-io/manifest",
- "version": "dev-master",
+ "version": "2.0.4",
"source": {
"type": "git",
"url": "https://github.com/phar-io/manifest.git",
@@ -3489,7 +3482,6 @@
"phar-io/version": "^3.0.1",
"php": "^7.2 || ^8.0"
},
- "default-branch": true,
"type": "library",
"extra": {
"branch-alias": {
@@ -3588,25 +3580,25 @@
},
{
"name": "phpdocumentor/reflection-common",
- "version": "dev-master",
+ "version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionCommon.git",
- "reference": "a0eeab580cbdf4414fef6978732510a36ed0a9d6"
+ "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/a0eeab580cbdf4414fef6978732510a36ed0a9d6",
- "reference": "a0eeab580cbdf4414fef6978732510a36ed0a9d6",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+ "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": "^7.2 || ^8.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.x-dev"
+ "dev-2.x": "2.x-dev"
}
},
"autoload": {
@@ -3635,22 +3627,22 @@
],
"support": {
"issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
- "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/master"
+ "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
},
- "time": "2021-06-25T13:47:51+00:00"
+ "time": "2020-06-27T09:03:43+00:00"
},
{
"name": "phpdocumentor/reflection-docblock",
- "version": "5.x-dev",
+ "version": "5.4.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "88a07d262854c827db22f2eac8b072138e492f65"
+ "reference": "298d2febfe79d03fe714eb871d5538da55205b1a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/88a07d262854c827db22f2eac8b072138e492f65",
- "reference": "88a07d262854c827db22f2eac8b072138e492f65",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/298d2febfe79d03fe714eb871d5538da55205b1a",
+ "reference": "298d2febfe79d03fe714eb871d5538da55205b1a",
"shasum": ""
},
"require": {
@@ -3671,7 +3663,6 @@
"phpunit/phpunit": "^9.5",
"vimeo/psalm": "^5.13"
},
- "default-branch": true,
"type": "library",
"extra": {
"branch-alias": {
@@ -3700,29 +3691,29 @@
"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/5.x"
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.0"
},
- "time": "2024-05-08T18:52:15+00:00"
+ "time": "2024-04-09T21:13:58+00:00"
},
{
"name": "phpdocumentor/type-resolver",
- "version": "1.x-dev",
+ "version": "1.8.2",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "483fb7fe262607b0a5ec32f99bdc42e2212b22fe"
+ "reference": "153ae662783729388a584b4361f2545e4d841e3c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/483fb7fe262607b0a5ec32f99bdc42e2212b22fe",
- "reference": "483fb7fe262607b0a5ec32f99bdc42e2212b22fe",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c",
+ "reference": "153ae662783729388a584b4361f2545e4d841e3c",
"shasum": ""
},
"require": {
"doctrine/deprecations": "^1.0",
"php": "^7.3 || ^8.0",
"phpdocumentor/reflection-common": "^2.0",
- "phpstan/phpdoc-parser": "^1.18"
+ "phpstan/phpdoc-parser": "^1.13"
},
"require-dev": {
"ext-tokenizer": "*",
@@ -3734,7 +3725,6 @@
"rector/rector": "^0.13.9",
"vimeo/psalm": "^4.25"
},
- "default-branch": true,
"type": "library",
"extra": {
"branch-alias": {
@@ -3759,22 +3749,22 @@
"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.x"
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2"
},
- "time": "2024-03-29T20:21:22+00:00"
+ "time": "2024-02-23T11:10:43+00:00"
},
{
"name": "phpspec/prophecy",
- "version": "dev-master",
+ "version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/phpspec/prophecy.git",
- "reference": "f9e07be0992e7bf1cad210829055b99318df142f"
+ "reference": "67a759e7d8746d501c41536ba40cd9c0a07d6a87"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/f9e07be0992e7bf1cad210829055b99318df142f",
- "reference": "f9e07be0992e7bf1cad210829055b99318df142f",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/67a759e7d8746d501c41536ba40cd9c0a07d6a87",
+ "reference": "67a759e7d8746d501c41536ba40cd9c0a07d6a87",
"shasum": ""
},
"require": {
@@ -3789,7 +3779,6 @@
"phpstan/phpstan": "^1.9",
"phpunit/phpunit": "^8.0 || ^9.0 || ^10.0"
},
- "default-branch": true,
"type": "library",
"extra": {
"branch-alias": {
@@ -3829,9 +3818,9 @@
],
"support": {
"issues": "https://github.com/phpspec/prophecy/issues",
- "source": "https://github.com/phpspec/prophecy/tree/master"
+ "source": "https://github.com/phpspec/prophecy/tree/v1.19.0"
},
- "time": "2024-03-29T09:25:04+00:00"
+ "time": "2024-02-29T11:52:51+00:00"
},
{
"name": "phpstan/phpdoc-parser",
@@ -3882,16 +3871,16 @@
},
{
"name": "phpunit/php-code-coverage",
- "version": "9.2.x-dev",
+ "version": "9.2.31",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "3352293d9e91513d5508c415835014881b420218"
+ "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/3352293d9e91513d5508c415835014881b420218",
- "reference": "3352293d9e91513d5508c415835014881b420218",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965",
+ "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965",
"shasum": ""
},
"require": {
@@ -3948,7 +3937,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31"
},
"funding": [
{
@@ -3956,20 +3945,20 @@
"type": "github"
}
],
- "time": "2024-03-22T05:16:32+00:00"
+ "time": "2024-03-02T06:37:42+00:00"
},
{
"name": "phpunit/php-file-iterator",
- "version": "3.0.x-dev",
+ "version": "3.0.6",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "38b24367e1b340aa78b96d7cab042942d917bb84"
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/38b24367e1b340aa78b96d7cab042942d917bb84",
- "reference": "38b24367e1b340aa78b96d7cab042942d917bb84",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
"shasum": ""
},
"require": {
@@ -4008,7 +3997,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
- "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0"
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
},
"funding": [
{
@@ -4016,7 +4005,7 @@
"type": "github"
}
],
- "time": "2022-02-11T16:23:04+00:00"
+ "time": "2021-12-02T12:48:52+00:00"
},
{
"name": "phpunit/php-invoker",
@@ -4304,7 +4293,7 @@
},
{
"name": "psr/log",
- "version": "dev-master",
+ "version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
@@ -4319,7 +4308,6 @@
"require": {
"php": ">=8.0.0"
},
- "default-branch": true,
"type": "library",
"extra": {
"branch-alias": {
@@ -4355,7 +4343,7 @@
},
{
"name": "sebastian/cli-parser",
- "version": "1.0.x-dev",
+ "version": "1.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/cli-parser.git",
@@ -4522,16 +4510,16 @@
},
{
"name": "sebastian/comparator",
- "version": "4.0.x-dev",
+ "version": "4.0.8",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "b247957a1c8dc81a671770f74b479c0a78a818f1"
+ "reference": "fa0f136dd2334583309d32b62544682ee972b51a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/b247957a1c8dc81a671770f74b479c0a78a818f1",
- "reference": "b247957a1c8dc81a671770f74b479c0a78a818f1",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a",
+ "reference": "fa0f136dd2334583309d32b62544682ee972b51a",
"shasum": ""
},
"require": {
@@ -4584,7 +4572,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
- "source": "https://github.com/sebastianbergmann/comparator/tree/4.0"
+ "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8"
},
"funding": [
{
@@ -4592,11 +4580,11 @@
"type": "github"
}
],
- "time": "2022-09-14T12:46:14+00:00"
+ "time": "2022-09-14T12:41:17+00:00"
},
{
"name": "sebastian/complexity",
- "version": "2.0.x-dev",
+ "version": "2.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/complexity.git",
@@ -4653,7 +4641,7 @@
},
{
"name": "sebastian/diff",
- "version": "4.0.x-dev",
+ "version": "4.0.6",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
@@ -4719,7 +4707,7 @@
},
{
"name": "sebastian/environment",
- "version": "5.1.x-dev",
+ "version": "5.1.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
@@ -4770,7 +4758,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/environment/issues",
- "source": "https://github.com/sebastianbergmann/environment/tree/5.1"
+ "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5"
},
"funding": [
{
@@ -4782,7 +4770,7 @@
},
{
"name": "sebastian/exporter",
- "version": "4.0.x-dev",
+ "version": "4.0.6",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
@@ -4859,7 +4847,7 @@
},
{
"name": "sebastian/global-state",
- "version": "5.0.x-dev",
+ "version": "5.0.7",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
@@ -4923,7 +4911,7 @@
},
{
"name": "sebastian/lines-of-code",
- "version": "1.0.x-dev",
+ "version": "1.0.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/lines-of-code.git",
@@ -5092,7 +5080,7 @@
},
{
"name": "sebastian/recursion-context",
- "version": "4.0.x-dev",
+ "version": "4.0.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
@@ -5155,16 +5143,16 @@
},
{
"name": "sebastian/resource-operations",
- "version": "dev-main",
+ "version": "3.0.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/resource-operations.git",
- "reference": "ff553e7482dcee39fa4acc2b175d6ddeb0f7bc25"
+ "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ff553e7482dcee39fa4acc2b175d6ddeb0f7bc25",
- "reference": "ff553e7482dcee39fa4acc2b175d6ddeb0f7bc25",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
+ "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
"shasum": ""
},
"require": {
@@ -5173,7 +5161,6 @@
"require-dev": {
"phpunit/phpunit": "^9.0"
},
- "default-branch": true,
"type": "library",
"extra": {
"branch-alias": {
@@ -5198,7 +5185,7 @@
"description": "Provides a list of PHP built-in functions that operate on resources",
"homepage": "https://www.github.com/sebastianbergmann/resource-operations",
"support": {
- "source": "https://github.com/sebastianbergmann/resource-operations/tree/main"
+ "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4"
},
"funding": [
{
@@ -5206,11 +5193,11 @@
"type": "github"
}
],
- "time": "2024-03-14T18:47:08+00:00"
+ "time": "2024-03-14T16:00:52+00:00"
},
{
"name": "sebastian/type",
- "version": "3.2.x-dev",
+ "version": "3.2.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/type.git",
@@ -5254,7 +5241,7 @@
"homepage": "https://github.com/sebastianbergmann/type",
"support": {
"issues": "https://github.com/sebastianbergmann/type/issues",
- "source": "https://github.com/sebastianbergmann/type/tree/3.2"
+ "source": "https://github.com/sebastianbergmann/type/tree/3.2.1"
},
"funding": [
{
@@ -5266,7 +5253,7 @@
},
{
"name": "sebastian/version",
- "version": "3.0.x-dev",
+ "version": "3.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/version.git",
@@ -5351,16 +5338,16 @@
},
{
"name": "symfony/polyfill-ctype",
- "version": "1.x-dev",
+ "version": "v1.29.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "c9e59dec962d38cf2e0e4c61c4a1a1312f4dd7fe"
+ "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c9e59dec962d38cf2e0e4c61c4a1a1312f4dd7fe",
- "reference": "c9e59dec962d38cf2e0e4c61c4a1a1312f4dd7fe",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4",
+ "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4",
"shasum": ""
},
"require": {
@@ -5372,7 +5359,6 @@
"suggest": {
"ext-ctype": "For best performance"
},
- "default-branch": true,
"type": "library",
"extra": {
"thanks": {
@@ -5411,7 +5397,7 @@
"portable"
],
"support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/1.x"
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0"
},
"funding": [
{
@@ -5427,7 +5413,7 @@
"type": "tidelift"
}
],
- "time": "2024-04-19T06:31:17+00:00"
+ "time": "2024-01-29T20:11:03+00:00"
},
{
"name": "textalk/websocket",
@@ -5602,10 +5588,8 @@
}
],
"aliases": [],
- "minimum-stability": "dev",
- "stability-flags": {
- "utopia-php/messaging": 20
- },
+ "minimum-stability": "stable",
+ "stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
From 1626168d3794cbacc31c9244c43436c2642dec68 Mon Sep 17 00:00:00 2001
From: Steven Nguyen <1477010+stnguyen90@users.noreply.github.com>
Date: Mon, 13 May 2024 14:17:39 -0700
Subject: [PATCH 084/138] fix(project): set limit to retrieve all stats for the
usage range
Because limit was not passed for the find() query, the limit defaulted to 25. As such, when requesting stats for the last 30 days, only the last 25 were retrieved.
---
app/controllers/api/project.php | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/app/controllers/api/project.php b/app/controllers/api/project.php
index 208e288614..a3e07927d6 100644
--- a/app/controllers/api/project.php
+++ b/app/controllers/api/project.php
@@ -70,7 +70,7 @@ App::get('/v1/project/usage')
'1d' => 'Y-m-d\T00:00:00.000P',
};
- Authorization::skip(function () use ($dbForProject, $firstDay, $lastDay, $period, $metrics, &$total, &$stats) {
+ Authorization::skip(function () use ($dbForProject, $firstDay, $lastDay, $period, $metrics, $limit, &$total, &$stats) {
foreach ($metrics['total'] as $metric) {
$result = $dbForProject->findOne('stats', [
Query::equal('metric', [$metric]),
@@ -85,6 +85,7 @@ App::get('/v1/project/usage')
Query::equal('period', [$period]),
Query::greaterThanEqual('time', $firstDay),
Query::lessThan('time', $lastDay),
+ Query::limit($limit),
Query::orderDesc('time'),
]);
From 2527ce1e5c41c45e6ade059754fdaad61061a3b0 Mon Sep 17 00:00:00 2001
From: Bradley Schofield
Date: Wed, 15 May 2024 06:07:17 +0000
Subject: [PATCH 085/138] Address Jake's Comments
---
docker-compose.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/docker-compose.yml b/docker-compose.yml
index b98152c288..96a2501c83 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -189,7 +189,7 @@ services:
- _APP_MESSAGE_PUSH_TEST_DSN
- _APP_CONSOLE_COUNTRIES_DENYLIST
- appwrite-task-realtime:
+ appwrite-realtime:
entrypoint: realtime
<<: *x-logging
container_name: appwrite-realtime
@@ -780,7 +780,7 @@ services:
- _APP_DB_USER
- _APP_DB_PASS
- appwrite-task-assistant:
+ appwrite-assistant:
container_name: appwrite-assistant
image: appwrite/assistant:0.4.0
networks:
From 74dd7297faf70be9a74597ded8dda321933a3042 Mon Sep 17 00:00:00 2001
From: Bradley Schofield
Date: Wed, 15 May 2024 06:46:21 +0000
Subject: [PATCH 086/138] Add changes to compose.phtml aswell
---
app/views/install/compose.phtml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/views/install/compose.phtml b/app/views/install/compose.phtml
index 53e7e71518..8650053183 100644
--- a/app/views/install/compose.phtml
+++ b/app/views/install/compose.phtml
@@ -574,7 +574,7 @@ services:
- _APP_MIGRATIONS_FIREBASE_CLIENT_ID
- _APP_MIGRATIONS_FIREBASE_CLIENT_SECRET
- appwrite-maintenance:
+ appwrite-task-maintenance:
image: /:
entrypoint: maintenance
<<: *x-logging
@@ -665,7 +665,7 @@ services:
- _APP_LOGGING_CONFIG
- _APP_USAGE_AGGREGATION_INTERVAL
- appwrite-scheduler-functions:
+ appwrite-task-scheduler-functions:
image: /:
entrypoint: schedule-functions
container_name: appwrite-scheduler-functions
@@ -690,7 +690,7 @@ services:
- _APP_DB_USER
- _APP_DB_PASS
- appwrite-scheduler-messages:
+ appwrite-task-scheduler-messages:
image: /:
entrypoint: schedule-messages
container_name: appwrite-scheduler-messages
From 6dd961116263a26d4a9ca0711f47c6372eacd5a4 Mon Sep 17 00:00:00 2001
From: Bradley Schofield
Date: Wed, 15 May 2024 06:50:59 +0000
Subject: [PATCH 087/138] Update container_name values
---
app/views/install/compose.phtml | 6 +++---
docker-compose.yml | 6 +++---
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/app/views/install/compose.phtml b/app/views/install/compose.phtml
index 8650053183..88fb1197f7 100644
--- a/app/views/install/compose.phtml
+++ b/app/views/install/compose.phtml
@@ -578,7 +578,7 @@ services:
image: /:
entrypoint: maintenance
<<: *x-logging
- container_name: appwrite-maintenance
+ container_name: appwrite-task-maintenance
restart: unless-stopped
networks:
- appwrite
@@ -668,7 +668,7 @@ services:
appwrite-task-scheduler-functions:
image: /:
entrypoint: schedule-functions
- container_name: appwrite-scheduler-functions
+ container_name: appwrite-task-scheduler-functions
<<: *x-logging
restart: unless-stopped
networks:
@@ -693,7 +693,7 @@ services:
appwrite-task-scheduler-messages:
image: /:
entrypoint: schedule-messages
- container_name: appwrite-scheduler-messages
+ container_name: appwrite-task-scheduler-messages
<<: *x-logging
restart: unless-stopped
networks:
diff --git a/docker-compose.yml b/docker-compose.yml
index 96a2501c83..0ba0bdb90e 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -630,7 +630,7 @@ services:
appwrite-task-maintenance:
entrypoint: maintenance
<<: *x-logging
- container_name: appwrite-maintenance
+ container_name: appwrite-task-maintenance
image: appwrite-dev
networks:
- appwrite
@@ -729,7 +729,7 @@ services:
appwrite-task-scheduler-functions:
entrypoint: schedule-functions
<<: *x-logging
- container_name: appwrite-scheduler-functions
+ container_name: appwrite-task-scheduler-functions
image: appwrite-dev
networks:
- appwrite
@@ -756,7 +756,7 @@ services:
appwrite-task-scheduler-messages:
entrypoint: schedule-messages
<<: *x-logging
- container_name: appwrite-scheduler-messages
+ container_name: appwrite-task-scheduler-messages
image: appwrite-dev
networks:
- appwrite
From 6ff3fc5c6bb95a3bb4234499fbb5684a315ba1b4 Mon Sep 17 00:00:00 2001
From: Ketan Baitule <111437670+ketanbaitule@users.noreply.github.com>
Date: Wed, 15 May 2024 15:03:46 +0530
Subject: [PATCH 088/138] fix: Allow Adding User Over Limit From Console In
Team Membership
---
app/controllers/api/teams.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php
index 4cb2eb331f..98233d9efe 100644
--- a/app/controllers/api/teams.php
+++ b/app/controllers/api/teams.php
@@ -453,7 +453,7 @@ App::post('/v1/teams/:teamId/memberships')
if (empty($invitee)) { // Create new user if no user with same email found
$limit = $project->getAttribute('auths', [])['limit'] ?? 0;
- if ($limit !== 0 && $project->getId() !== 'console') { // check users limit, console invites are allways allowed.
+ if (!$isPrivilegedUser && $limit !== 0 && $project->getId() !== 'console') { // check users limit, console invites are allways allowed.
$total = $dbForProject->count('users', [], APP_LIMIT_USERS);
if ($total >= $limit) {
From 0c5cf36dcd69147f70cf812148236534d2a9e790 Mon Sep 17 00:00:00 2001
From: Steven Nguyen <1477010+stnguyen90@users.noreply.github.com>
Date: Wed, 15 May 2024 12:11:56 -0700
Subject: [PATCH 089/138] fix(docs): update users create token description
1. The endpoint does not create a user
2. The endpoint is incorrect
---
docs/references/users/create-token.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/references/users/create-token.md b/docs/references/users/create-token.md
index 1ab34a3d74..c91f9dd3de 100644
--- a/docs/references/users/create-token.md
+++ b/docs/references/users/create-token.md
@@ -1 +1 @@
-Returns a token with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [PUT /account/sessions/custom](https://appwrite.io/docs/references/cloud/client-web/account#updateCustomSession) endpoint to complete the login process.
\ No newline at end of file
+Returns a token with a secret key for creating a session. Use the user ID and secret and submit a request to the [PUT /account/sessions/token](https://appwrite.io/docs/references/cloud/client-web/account#createSession) endpoint to complete the login process.
From 894f001c7aeab5a464d575aa6fd632feade9c97b Mon Sep 17 00:00:00 2001
From: Ketan Baitule <111437670+ketanbaitule@users.noreply.github.com>
Date: Thu, 16 May 2024 08:00:46 +0530
Subject: [PATCH 090/138] Update app/controllers/api/teams.php
Co-authored-by: Steven Nguyen <1477010+stnguyen90@users.noreply.github.com>
---
app/controllers/api/teams.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php
index 98233d9efe..d003fcfd37 100644
--- a/app/controllers/api/teams.php
+++ b/app/controllers/api/teams.php
@@ -453,7 +453,7 @@ App::post('/v1/teams/:teamId/memberships')
if (empty($invitee)) { // Create new user if no user with same email found
$limit = $project->getAttribute('auths', [])['limit'] ?? 0;
- if (!$isPrivilegedUser && $limit !== 0 && $project->getId() !== 'console') { // check users limit, console invites are allways allowed.
+ if (!$isPrivilegedUser && !$isAppUser && $limit !== 0 && $project->getId() !== 'console') { // check users limit, console invites are allways allowed.
$total = $dbForProject->count('users', [], APP_LIMIT_USERS);
if ($total >= $limit) {
From a63667f5a3dfe741e89deac64a2e1437d43cbd40 Mon Sep 17 00:00:00 2001
From: Christy Jacob
Date: Thu, 16 May 2024 07:04:40 +0000
Subject: [PATCH 091/138] chore: cleanup obsolete tasks
---
Dockerfile | 2 -
bin/calc-tier-stats | 3 -
bin/calc-users-stats | 3 -
bin/clear-card-cache | 3 -
bin/create-inf-metric | 3 -
bin/delete-orphaned-projects | 3 -
bin/dev-generate-translations | 3 -
bin/get-migration-stats | 3 -
bin/hamster | 3 -
bin/patch-delete-project-collections | 3 -
...patch-delete-schedule-updated-at-attribute | 3 -
bin/patch-recreate-repositories-documents | 3 -
bin/volume-sync | 3 -
src/Appwrite/Platform/Services/Tasks.php | 16 -
src/Appwrite/Platform/Tasks/CalcTierStats.php | 407 ---------------
.../Platform/Tasks/CreateInfMetric.php | 409 ---------------
.../Platform/Tasks/DeleteOrphanedProjects.php | 161 ------
.../Tasks/DevGenerateTranslations.php | 136 -----
.../Platform/Tasks/GetMigrationStats.php | 187 -------
src/Appwrite/Platform/Tasks/Hamster.php | 157 ------
.../PatchRecreateRepositoriesDocuments.php | 169 ------
src/Appwrite/Platform/Tasks/VolumeSync.php | 59 ---
src/Appwrite/Platform/Workers/Hamster.php | 494 ------------------
23 files changed, 2233 deletions(-)
delete mode 100644 bin/calc-tier-stats
delete mode 100644 bin/calc-users-stats
delete mode 100644 bin/clear-card-cache
delete mode 100644 bin/create-inf-metric
delete mode 100644 bin/delete-orphaned-projects
delete mode 100755 bin/dev-generate-translations
delete mode 100644 bin/get-migration-stats
delete mode 100644 bin/hamster
delete mode 100644 bin/patch-delete-project-collections
delete mode 100644 bin/patch-delete-schedule-updated-at-attribute
delete mode 100644 bin/patch-recreate-repositories-documents
delete mode 100644 bin/volume-sync
delete mode 100644 src/Appwrite/Platform/Tasks/CalcTierStats.php
delete mode 100644 src/Appwrite/Platform/Tasks/CreateInfMetric.php
delete mode 100644 src/Appwrite/Platform/Tasks/DeleteOrphanedProjects.php
delete mode 100644 src/Appwrite/Platform/Tasks/DevGenerateTranslations.php
delete mode 100644 src/Appwrite/Platform/Tasks/GetMigrationStats.php
delete mode 100644 src/Appwrite/Platform/Tasks/Hamster.php
delete mode 100644 src/Appwrite/Platform/Tasks/PatchRecreateRepositoriesDocuments.php
delete mode 100644 src/Appwrite/Platform/Tasks/VolumeSync.php
delete mode 100644 src/Appwrite/Platform/Workers/Hamster.php
diff --git a/Dockerfile b/Dockerfile
index d7343dd71d..ee77ec956f 100755
--- a/Dockerfile
+++ b/Dockerfile
@@ -99,12 +99,10 @@ RUN chmod +x /usr/local/bin/doctor && \
chmod +x /usr/local/bin/worker-databases && \
chmod +x /usr/local/bin/worker-deletes && \
chmod +x /usr/local/bin/worker-functions && \
- chmod +x /usr/local/bin/worker-hamster && \
chmod +x /usr/local/bin/worker-mails && \
chmod +x /usr/local/bin/worker-messaging && \
chmod +x /usr/local/bin/worker-migrations && \
chmod +x /usr/local/bin/worker-webhooks && \
- chmod +x /usr/local/bin/worker-hamster && \
chmod +x /usr/local/bin/worker-usage && \
chmod +x /usr/local/bin/worker-usage-dump
diff --git a/bin/calc-tier-stats b/bin/calc-tier-stats
deleted file mode 100644
index c7fb71e6fd..0000000000
--- a/bin/calc-tier-stats
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-php /usr/src/code/app/cli.php calc-tier-stats $@
\ No newline at end of file
diff --git a/bin/calc-users-stats b/bin/calc-users-stats
deleted file mode 100644
index 60472ed7a2..0000000000
--- a/bin/calc-users-stats
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-php /usr/src/code/app/cli.php calc-users-stats $@
\ No newline at end of file
diff --git a/bin/clear-card-cache b/bin/clear-card-cache
deleted file mode 100644
index b39bc13651..0000000000
--- a/bin/clear-card-cache
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-php /usr/src/code/app/cli.php clear-card-cache $@
\ No newline at end of file
diff --git a/bin/create-inf-metric b/bin/create-inf-metric
deleted file mode 100644
index ea7b2b4da0..0000000000
--- a/bin/create-inf-metric
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-php /usr/src/code/app/cli.php create-inf-metric $@
\ No newline at end of file
diff --git a/bin/delete-orphaned-projects b/bin/delete-orphaned-projects
deleted file mode 100644
index 16b9e3184d..0000000000
--- a/bin/delete-orphaned-projects
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-php /usr/src/code/app/cli.php delete-orphaned-projects $@
\ No newline at end of file
diff --git a/bin/dev-generate-translations b/bin/dev-generate-translations
deleted file mode 100755
index 2339be8996..0000000000
--- a/bin/dev-generate-translations
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-php /usr/src/code/app/cli.php dev-generate-translations $@
\ No newline at end of file
diff --git a/bin/get-migration-stats b/bin/get-migration-stats
deleted file mode 100644
index efc1934e15..0000000000
--- a/bin/get-migration-stats
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-php /usr/src/code/app/cli.php get-migration-stats $@
\ No newline at end of file
diff --git a/bin/hamster b/bin/hamster
deleted file mode 100644
index dcc7ed308d..0000000000
--- a/bin/hamster
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-php /usr/src/code/app/cli.php hamster $@
\ No newline at end of file
diff --git a/bin/patch-delete-project-collections b/bin/patch-delete-project-collections
deleted file mode 100644
index 8bf0736cf3..0000000000
--- a/bin/patch-delete-project-collections
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-php /usr/src/code/app/cli.php patch-delete-project-collections $@
\ No newline at end of file
diff --git a/bin/patch-delete-schedule-updated-at-attribute b/bin/patch-delete-schedule-updated-at-attribute
deleted file mode 100644
index 3e28289cbe..0000000000
--- a/bin/patch-delete-schedule-updated-at-attribute
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-php /usr/src/code/app/cli.php patch-delete-schedule-updated-at-attribute $@
\ No newline at end of file
diff --git a/bin/patch-recreate-repositories-documents b/bin/patch-recreate-repositories-documents
deleted file mode 100644
index 8c6c4157f4..0000000000
--- a/bin/patch-recreate-repositories-documents
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-php /usr/src/code/app/cli.php patch-recreate-repositories-documents $@
\ No newline at end of file
diff --git a/bin/volume-sync b/bin/volume-sync
deleted file mode 100644
index 5190750a24..0000000000
--- a/bin/volume-sync
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-php /usr/src/code/app/cli.php volume-sync $@
\ No newline at end of file
diff --git a/src/Appwrite/Platform/Services/Tasks.php b/src/Appwrite/Platform/Services/Tasks.php
index f1fd1945c4..ac1f99eec3 100644
--- a/src/Appwrite/Platform/Services/Tasks.php
+++ b/src/Appwrite/Platform/Services/Tasks.php
@@ -2,17 +2,10 @@
namespace Appwrite\Platform\Services;
-use Appwrite\Platform\Tasks\CalcTierStats;
-use Appwrite\Platform\Tasks\CreateInfMetric;
-use Appwrite\Platform\Tasks\DeleteOrphanedProjects;
-use Appwrite\Platform\Tasks\DevGenerateTranslations;
use Appwrite\Platform\Tasks\Doctor;
-use Appwrite\Platform\Tasks\GetMigrationStats;
-use Appwrite\Platform\Tasks\Hamster;
use Appwrite\Platform\Tasks\Install;
use Appwrite\Platform\Tasks\Maintenance;
use Appwrite\Platform\Tasks\Migrate;
-use Appwrite\Platform\Tasks\PatchRecreateRepositoriesDocuments;
use Appwrite\Platform\Tasks\QueueCount;
use Appwrite\Platform\Tasks\QueueRetry;
use Appwrite\Platform\Tasks\ScheduleFunctions;
@@ -23,7 +16,6 @@ use Appwrite\Platform\Tasks\SSL;
use Appwrite\Platform\Tasks\Upgrade;
use Appwrite\Platform\Tasks\Vars;
use Appwrite\Platform\Tasks\Version;
-use Appwrite\Platform\Tasks\VolumeSync;
use Utopia\Platform\Service;
class Tasks extends Service
@@ -32,17 +24,10 @@ class Tasks extends Service
{
$this->type = self::TYPE_CLI;
$this
- ->addAction(CalcTierStats::getName(), new CalcTierStats())
- ->addAction(CreateInfMetric::getName(), new CreateInfMetric())
- ->addAction(DeleteOrphanedProjects::getName(), new DeleteOrphanedProjects())
- ->addAction(DevGenerateTranslations::getName(), new DevGenerateTranslations())
->addAction(Doctor::getName(), new Doctor())
- ->addAction(GetMigrationStats::getName(), new GetMigrationStats())
- ->addAction(Hamster::getName(), new Hamster())
->addAction(Install::getName(), new Install())
->addAction(Maintenance::getName(), new Maintenance())
->addAction(Migrate::getName(), new Migrate())
- ->addAction(PatchRecreateRepositoriesDocuments::getName(), new PatchRecreateRepositoriesDocuments())
->addAction(QueueCount::getName(), new QueueCount())
->addAction(QueueRetry::getName(), new QueueRetry())
->addAction(SDKs::getName(), new SDKs())
@@ -53,7 +38,6 @@ class Tasks extends Service
->addAction(Upgrade::getName(), new Upgrade())
->addAction(Vars::getName(), new Vars())
->addAction(Version::getName(), new Version())
- ->addAction(VolumeSync::getName(), new VolumeSync())
;
}
}
diff --git a/src/Appwrite/Platform/Tasks/CalcTierStats.php b/src/Appwrite/Platform/Tasks/CalcTierStats.php
deleted file mode 100644
index ae8bd27fe3..0000000000
--- a/src/Appwrite/Platform/Tasks/CalcTierStats.php
+++ /dev/null
@@ -1,407 +0,0 @@
- 'Requests',
- 'network.inbound' => 'Inbound',
- 'network.outbound' => 'Outbound',
-
- ];
-
- public static function getName(): string
- {
- return 'calc-tier-stats';
- }
-
- public function __construct()
- {
-
- $this
- ->desc('Get stats for projects')
- ->param('after', '', new Text(36), 'After cursor', true)
- ->param('projectId', '', new Text(36), 'Select project to validate', true)
- ->inject('pools')
- ->inject('cache')
- ->inject('dbForConsole')
- ->inject('getProjectDB')
- ->inject('register')
- ->callback(function ($after, $projectId, Group $pools, Cache $cache, Database $dbForConsole, callable $getProjectDB, Registry $register) {
- $this->action($after, $projectId, $pools, $cache, $dbForConsole, $getProjectDB, $register);
- });
- }
-
-
- public function action(string $after, string $projectId, Group $pools, Cache $cache, Database $dbForConsole, callable $getProjectDB, Registry $register): void
- {
- //docker compose exec -t appwrite calc-tier-stats
-
- Console::title('Cloud free tier stats calculation V1');
- Console::success(APP_NAME . ' cloud free tier stats calculation has started');
-
- /** CSV stuff */
- $this->date = date('Y-m-d');
- $this->path = "{$this->directory}/tier_stats_{$this->date}.csv";
- $csv = Writer::createFromPath($this->path, 'w');
- $csv->insertOne($this->columns);
-
- if (!empty($projectId)) {
- try {
- console::log("Project " . $projectId);
- $project = $dbForConsole->getDocument('projects', $projectId);
- $dbForProject = call_user_func($getProjectDB, $project);
- $data = $this->getData($project, $dbForConsole, $dbForProject);
- $csv->insertOne($data);
- $this->sendMail($register);
-
- return;
- } catch (\Throwable $th) {
- Console::error("Unexpected error occurred with Project ID {$projectId}");
- Console::error('[Error] Type: ' . get_class($th));
- Console::error('[Error] Message: ' . $th->getMessage());
- Console::error('[Error] File: ' . $th->getFile());
- Console::error('[Error] Line: ' . $th->getLine());
- }
- }
-
- $queries = [];
-
- if (!empty($after)) {
- Console::info("Iterating remaining projects after project with ID {$after}");
- $project = $dbForConsole->getDocument('projects', $after);
- $queries = [Query::cursorAfter($project)];
- } else {
- Console::info("Iterating all projects");
- }
-
- $this->foreachDocument($dbForConsole, 'projects', $queries, function (Document $project) use ($getProjectDB, $dbForConsole, $csv) {
- $projectId = $project->getId();
- console::log("Project " . $projectId);
- try {
- $dbForProject = call_user_func($getProjectDB, $project);
- $data = $this->getData($project, $dbForConsole, $dbForProject);
- $csv->insertOne($data);
- } catch (\Throwable $th) {
- Console::error("Unexpected error occurred with Project ID {$projectId}");
- Console::error('[Error] Type: ' . get_class($th));
- Console::error('[Error] Message: ' . $th->getMessage());
- Console::error('[Error] File: ' . $th->getFile());
- Console::error('[Error] Line: ' . $th->getLine());
- }
- });
-
- $this->sendMail($register);
- }
-
- private function foreachDocument(Database $database, string $collection, array $queries = [], callable $callback = null): void
- {
- $limit = 1000;
- $results = [];
- $sum = $limit;
- $latestDocument = null;
-
- while ($sum === $limit) {
- $newQueries = $queries;
-
- if ($latestDocument != null) {
- array_unshift($newQueries, Query::cursorAfter($latestDocument));
- }
- $newQueries[] = Query::limit($limit);
- $results = $database->find('projects', $newQueries);
-
- if (empty($results)) {
- return;
- }
-
- $sum = count($results);
-
- foreach ($results as $document) {
- if (is_callable($callback)) {
- $callback($document);
- }
- }
- $latestDocument = $results[array_key_last($results)];
- }
- }
-
- private function sendMail(Registry $register): void
- {
- /** @var PHPMailer $mail */
- $mail = $register->get('smtp');
- $mail->clearAddresses();
- $mail->clearAllRecipients();
- $mail->clearReplyTos();
- $mail->clearAttachments();
- $mail->clearBCCs();
- $mail->clearCCs();
-
- try {
- /** Addresses */
- $mail->setFrom(System::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM), 'Appwrite Cloud Hamster');
- $recipients = explode(',', System::getEnv('_APP_USERS_STATS_RECIPIENTS', ''));
- foreach ($recipients as $recipient) {
- $mail->addAddress($recipient);
- }
-
- /** Attachments */
- $mail->addAttachment($this->path);
-
- /** Content */
- $mail->Subject = "Cloud Report for {$this->date}";
- $mail->Body = "Please find the daily cloud report atttached";
- $mail->send();
- Console::success('Email has been sent!');
- } catch (\Throwable $e) {
- Console::error("Message could not be sent. Mailer Error: {$mail->ErrorInfo}");
- }
- }
-
-
- private function getData(Document $project, Database $dbForConsole, Database $dbForProject): array
- {
- $stats['Project ID'] = $project->getId();
- $stats['Organization ID'] = $project->getAttribute('teamId', null);
-
- $teamInternalId = $project->getAttribute('teamInternalId', null);
-
- if ($teamInternalId) {
- $membership = $dbForConsole->findOne('memberships', [
- Query::equal('teamInternalId', [$teamInternalId]),
- ]);
-
- if (!$membership || $membership->isEmpty()) {
- Console::error('Membership not found. Skipping project : ' . $project->getId());
- }
-
- $userId = $membership->getAttribute('userId', null);
- if ($userId) {
- $user = $dbForConsole->getDocument('users', $userId);
- $stats['Organization Email'] = $user->getAttribute('email', null);
- }
- } else {
- Console::error("Email was not found for this Organization ID :{$teamInternalId}");
- }
-
- /** Get Total Members */
- if ($teamInternalId) {
- $stats['Organization Members'] = $dbForConsole->count('memberships', [
- Query::equal('teamInternalId', [$teamInternalId])
- ]);
- } else {
- $stats['Organization Members'] = 0;
- }
-
- /** Get Total internal Teams */
- try {
- $stats['Teams'] = $dbForProject->count('teams', []);
- } catch (\Throwable) {
- $stats['Teams'] = 0;
- }
-
- /** Get Total users */
- try {
- $stats['Users'] = $dbForProject->count('users', []);
- } catch (\Throwable) {
- $stats['Users'] = 0;
- }
-
- /** Get Usage stats */
- $range = '30d';
- $periods = [
- '30d' => [
- 'period' => '1d',
- 'limit' => 30,
- ]
- ];
-
- $tmp = [];
- $metrics = $this->usageStats;
- Authorization::skip(function () use ($dbForProject, $periods, $range, $metrics, &$tmp) {
- foreach ($metrics as $metric => $name) {
- $limit = $periods[$range]['limit'];
- $period = $periods[$range]['period'];
-
- $requestDocs = $dbForProject->find('stats', [
- Query::equal('metric', [$metric]),
- Query::equal('period', [$period]),
- Query::limit($limit),
- Query::orderDesc('time'),
- ]);
-
- $tmp[$metric] = [];
- foreach ($requestDocs as $requestDoc) {
- if (empty($requestDoc)) {
- continue;
- }
-
- $tmp[$metric][] = [
- 'value' => $requestDoc->getAttribute('value'),
- 'date' => $requestDoc->getAttribute('time'),
- ];
- }
-
- $tmp[$metric] = array_reverse($tmp[$metric]);
- $tmp[$metric] = array_sum(array_column($tmp[$metric], 'value'));
- }
- });
-
- foreach ($tmp as $key => $value) {
- $stats[$metrics[$key]] = $value;
- }
-
- /**
- * Workaround to combine network.inbound+network.outbound as network.
- */
- $stats['Bandwidth'] = ($stats['Inbound'] ?? 0) + ($stats['Outbound'] ?? 0);
- unset($stats['Inbound']);
- unset($stats['Outbound']);
-
- try {
- /** Get Domains */
- $stats['Domains'] = $dbForConsole->count('rules', [
- Query::equal('projectInternalId', [$project->getInternalId()]),
- ]);
- } catch (\Throwable) {
- $stats['Domains'] = 0;
- }
-
- try {
- /** Get Api keys */
- $stats['Api keys'] = $dbForConsole->count('keys', [
- Query::equal('projectInternalId', [$project->getInternalId()]),
- ]);
- } catch (\Throwable) {
- $stats['Api keys'] = 0;
- }
-
- try {
- /** Get Webhooks */
- $stats['Webhooks'] = $dbForConsole->count('webhooks', [
- Query::equal('projectInternalId', [$project->getInternalId()]),
- ]);
- } catch (\Throwable) {
- $stats['Webhooks'] = 0;
- }
-
- try {
- /** Get Platforms */
- $stats['Platforms'] = $dbForConsole->count('platforms', [
- Query::equal('projectInternalId', [$project->getInternalId()]),
- ]);
- } catch (\Throwable) {
- $stats['Platforms'] = 0;
- }
-
- /** Get Files & Buckets */
- $filesCount = 0;
- $filesSum = 0;
- $maxFileSize = 0;
- $counter = 0;
- try {
- $buckets = $dbForProject->find('buckets', []);
- foreach ($buckets as $bucket) {
- $file = $dbForProject->findOne('bucket_' . $bucket->getInternalId(), [Query::orderDesc('sizeOriginal'),]);
- if (empty($file)) {
- continue;
- }
- $filesSum += $dbForProject->sum('bucket_' . $bucket->getInternalId(), 'sizeOriginal', []);
- $filesCount += $dbForProject->count('bucket_' . $bucket->getInternalId(), []);
- if ($file->getAttribute('sizeOriginal') > $maxFileSize) {
- $maxFileSize = $file->getAttribute('sizeOriginal');
- }
- $counter++;
- }
- } catch (\Throwable $t) {
- Console::error("Error while counting buckets: {$project->getId()}");
- }
- $stats['Buckets'] = $counter;
- $stats['Files'] = $filesCount;
- $stats['Storage (bytes)'] = $filesSum;
- $stats['Max File Size (bytes)'] = $maxFileSize;
-
-
- try {
- /** Get Total Functions */
- $stats['Databases'] = $dbForProject->count('databases', []);
- } catch (\Throwable) {
- $stats['Databases'] = 0;
- }
-
- /** Get Total Functions */
- try {
- $stats['Functions'] = $dbForProject->count('functions', []);
- } catch (\Throwable) {
- $stats['Functions'] = 0;
- }
-
- /** Get Total Deployments */
- try {
- $stats['Deployments'] = $dbForProject->count('deployments', []);
- } catch (\Throwable) {
- $stats['Deployments'] = 0;
- }
-
- /** Get Total Executions */
- try {
- $stats['Executions'] = $dbForProject->count('executions', []);
- } catch (\Throwable) {
- $stats['Executions'] = 0;
- }
-
- /** Get Total Migrations */
- try {
- $stats['Migrations'] = $dbForProject->count('migrations', []);
- } catch (\Throwable) {
- $stats['Migrations'] = 0;
- }
-
- return array_values($stats);
- }
-}
diff --git a/src/Appwrite/Platform/Tasks/CreateInfMetric.php b/src/Appwrite/Platform/Tasks/CreateInfMetric.php
deleted file mode 100644
index ce3484edbf..0000000000
--- a/src/Appwrite/Platform/Tasks/CreateInfMetric.php
+++ /dev/null
@@ -1,409 +0,0 @@
-desc('Create infinity stats metric')
- ->param('after', '', new Text(36), 'After cursor', true)
- ->param('projectId', '', new Text(36), 'Select project to validate', true)
- ->inject('getProjectDB')
- ->inject('dbForConsole')
- ->callback(function (string $after, string $projectId, callable $getProjectDB, Database $dbForConsole) {
- $this->action($after, $projectId, $getProjectDB, $dbForConsole);
- });
- }
-
-
- /**
- * @throws Exception
- * @throws Exception\Timeout
- * @throws Exception\Query
- */
- public function action(string $after, string $projectId, callable $getProjectDB, Database $dbForConsole): void
- {
-
- Console::title('Create infinity metric V1');
- Console::success(APP_NAME . ' Create infinity metric started');
-
- if (!empty($projectId)) {
- try {
- $project = $dbForConsole->getDocument('projects', $projectId);
- $dbForProject = call_user_func($getProjectDB, $project);
- $this->getUsageData($dbForProject, $project);
- } catch (\Throwable $th) {
- Console::error("Unexpected error occurred with Project ID {$projectId}");
- Console::error('[Error] Type: ' . get_class($th));
- Console::error('[Error] Message: ' . $th->getMessage());
- Console::error('[Error] File: ' . $th->getFile());
- Console::error('[Error] Line: ' . $th->getLine());
- }
- } else {
- $queries = [];
- if (!empty($after)) {
- Console::info("Iterating remaining projects after project with ID {$after}");
- $project = $dbForConsole->getDocument('projects', $after);
- $queries = [Query::cursorAfter($project)];
- } else {
- Console::info("Iterating all projects");
- }
- $this->foreachDocument($dbForConsole, 'projects', $queries, function (Document $project) use ($getProjectDB) {
- $projectId = $project->getId();
-
- try {
- $dbForProject = call_user_func($getProjectDB, $project);
- $this->getUsageData($dbForProject, $project);
- } catch (\Throwable $th) {
- Console::error("Unexpected error occurred with Project ID {$projectId}");
- Console::error('[Error] Type: ' . get_class($th));
- Console::error('[Error] Message: ' . $th->getMessage());
- Console::error('[Error] File: ' . $th->getFile());
- Console::error('[Error] Line: ' . $th->getLine());
- }
- });
- }
- }
-
- /**
- * @param Database $database
- * @param string $collection
- * @param array $queries
- * @param callable|null $callback
- * @return void
- * @throws Exception
- * @throws Exception\Query
- * @throws Exception\Timeout
- */
- private function foreachDocument(Database $database, string $collection, array $queries = [], callable $callback = null): void
- {
- $limit = 1000;
- $results = [];
- $sum = $limit;
- $latestDocument = null;
-
- while ($sum === $limit) {
- $newQueries = $queries;
-
- if ($latestDocument != null) {
- array_unshift($newQueries, Query::cursorAfter($latestDocument));
- }
- $newQueries[] = Query::limit($limit);
- $results = $database->find($collection, $newQueries);
-
- if (empty($results)) {
- return;
- }
-
- $sum = count($results);
-
- foreach ($results as $document) {
- if (is_callable($callback)) {
- $callback($document);
- }
- }
- $latestDocument = $results[array_key_last($results)];
- }
- }
-
-
- /**
- * @param Database $dbForProject
- * @param Document $project
- * @return void
- */
- private function getUsageData(Database $dbForProject, Document $project): void
- {
- try {
- $this->network($dbForProject);
- $this->sessions($dbForProject);
- $this->users($dbForProject);
- $this->teams($dbForProject);
- $this->databases($dbForProject);
- $this->functions($dbForProject);
- $this->storage($dbForProject);
- } catch (\Throwable $th) {
- var_dump($th->getMessage());
- }
-
- Console::log('Finished project ' . $project->getId() . ' ' . $project->getInternalId());
- }
-
-
- /**
- * @param Database $dbForProject
- * @param string $metric
- * @param int|float $value
- * @return void
- * @throws Exception
- * @throws Exception\Authorization
- * @throws Exception\Conflict
- * @throws Exception\Restricted
- * @throws Exception\Structure
- */
- private function createInfMetric(database $dbForProject, string $metric, int|float $value): void
- {
-
- try {
- $id = \md5("_inf_{$metric}");
- $dbForProject->deleteDocument('stats', $id);
- $dbForProject->createDocument('stats', new Document([
- '$id' => $id,
- 'metric' => $metric,
- 'period' => 'inf',
- 'value' => (int)$value,
- 'time' => null,
- 'region' => 'default',
- ]));
- } catch (Duplicate $th) {
- console::log("Error while creating inf metric: duplicate id {$metric} {$id}");
- }
- }
-
- /**
- * @param Database $dbForProject
- * @param string $metric
- * @return int|float
- * @throws Exception
- */
- protected function getFromMetric(database $dbForProject, string $metric): int|float
- {
-
- return $dbForProject->sum('stats', 'value', [
- Query::equal('metric', [
- $metric,
- ]),
- Query::equal('period', ['1d']),
- ]);
- }
-
- /**
- * @param Database $dbForProject
- * @throws Exception
- * @throws Exception\Authorization
- * @throws Exception\Conflict
- * @throws Exception\Restricted
- * @throws Exception\Structure
- */
- private function network(database $dbForProject)
- {
- $this->createInfMetric($dbForProject, 'network.inbound', $this->getFromMetric($dbForProject, 'network.inbound'));
- $this->createInfMetric($dbForProject, 'network.outbound', $this->getFromMetric($dbForProject, 'network.outbound'));
- $this->createInfMetric($dbForProject, 'network.requests', $this->getFromMetric($dbForProject, 'network.requests'));
- }
-
-
- /**
- * @throws Exception\Authorization
- * @throws Exception\Restricted
- * @throws Exception\Conflict
- * @throws Exception\Timeout
- * @throws Exception\Structure
- * @throws Exception
- * @throws Exception\Query
- */
- private function storage(database $dbForProject)
- {
- $bucketsCount = 0;
- $filesCount = 0;
- $filesStorageSum = 0;
-
- $buckets = $dbForProject->find('buckets');
- foreach ($buckets as $bucket) {
- $files = $dbForProject->count('bucket_' . $bucket->getInternalId());
- $this->createInfMetric($dbForProject, $bucket->getInternalId() . '.files', $files);
-
- $filesStorage = $dbForProject->sum('bucket_' . $bucket->getInternalId(), 'sizeOriginal');
- $this->createInfMetric($dbForProject, $bucket->getInternalId() . '.files.storage', $filesStorage);
-
- $bucketsCount++;
- $filesCount += $files;
- $filesStorageSum += $filesStorage;
- }
-
- $this->createInfMetric($dbForProject, 'buckets', $bucketsCount);
- $this->createInfMetric($dbForProject, 'files', $filesCount);
- $this->createInfMetric($dbForProject, 'files.storage', $filesStorageSum);
- }
-
-
- /**
- * @throws Exception\Authorization
- * @throws Exception\Timeout
- * @throws Exception\Restricted
- * @throws Exception\Structure
- * @throws Exception\Conflict
- * @throws Exception
- * @throws Exception\Query
- */
- private function functions(Database $dbForProject)
- {
- $functionsCount = 0;
- $deploymentsCount = 0;
- $buildsCount = 0;
- $buildsStorageSum = 0;
- $buildsComputeSum = 0;
- $executionsCount = 0;
- $executionsComputeSum = 0;
- $deploymentsStorageSum = 0;
-
- //functions
- $functions = $dbForProject->find('functions');
- foreach ($functions as $function) {
- //deployments
- $deployments = $dbForProject->find('deployments', [
- Query::equal('resourceType', ['functions']),
- Query::equal('resourceInternalId', [$function->getInternalId()]),
- ]);
-
- $deploymentCount = 0;
- $deploymentStorageSum = 0;
- foreach ($deployments as $deployment) {
- //builds
- $builds = $dbForProject->count('builds', [
- Query::equal('deploymentInternalId', [$deployment->getInternalId()]),
- ]);
-
- $buildsCompute = $dbForProject->sum('builds', 'duration', [
- Query::equal('deploymentInternalId', [$deployment->getInternalId()]),
- ]);
-
- $buildsStorage = $dbForProject->sum('builds', 'size', [
- Query::equal('deploymentInternalId', [$deployment->getInternalId()]),
- ]);
-
- $this->createInfMetric($dbForProject, $function->getInternalId() . '.builds', $builds);
- $this->createInfMetric($dbForProject, $function->getInternalId() . '.builds.storage', $buildsCompute * 1000);
- $this->createInfMetric($dbForProject, $function->getInternalId() . '.builds.compute', $buildsStorage);
-
- $buildsCount += $builds;
- $buildsComputeSum += $buildsCompute;
- $buildsStorageSum += $buildsStorage;
-
-
- $deploymentCount++;
- $deploymentsCount++;
- $deploymentsStorageSum += $deployment['size'];
- $deploymentStorageSum += $deployment['size'];
- }
- $this->createInfMetric($dbForProject, 'functions.' . $function->getInternalId() . '.deployments', $deploymentCount);
- $this->createInfMetric($dbForProject, 'functions.' . $function->getInternalId() . '.deployments.storage', $deploymentStorageSum);
-
- //executions
- $executions = $dbForProject->count('executions', [
- Query::equal('functionInternalId', [$function->getInternalId()]),
- ]);
-
- $executionsCompute = $dbForProject->sum('executions', 'duration', [
- Query::equal('functionInternalId', [$function->getInternalId()]),
- ]);
-
- $this->createInfMetric($dbForProject, $function->getInternalId() . '.executions', $executions);
- $this->createInfMetric($dbForProject, $function->getInternalId() . '.executions.compute', $executionsCompute * 1000);
- $executionsCount += $executions;
- $executionsComputeSum += $executionsCompute;
-
- $functionsCount++;
- }
-
- $this->createInfMetric($dbForProject, 'functions', $functionsCount);
- $this->createInfMetric($dbForProject, 'deployments', $deploymentsCount);
- $this->createInfMetric($dbForProject, 'deployments.storage', $deploymentsStorageSum);
- $this->createInfMetric($dbForProject, 'builds', $buildsCount);
- $this->createInfMetric($dbForProject, 'builds.compute', $buildsComputeSum * 1000);
- $this->createInfMetric($dbForProject, 'builds.storage', $buildsStorageSum);
- $this->createInfMetric($dbForProject, 'executions', $executionsCount);
- $this->createInfMetric($dbForProject, 'executions.compute', $executionsComputeSum * 1000);
- }
-
- /**
- * @throws Exception\Authorization
- * @throws Exception\Timeout
- * @throws Exception\Structure
- * @throws Exception\Restricted
- * @throws Exception\Conflict
- * @throws Exception
- * @throws Exception\Query
- */
- private function databases(Database $dbForProject)
- {
- $databasesCount = 0;
- $collectionsCount = 0;
- $documentsCount = 0;
- $databases = $dbForProject->find('databases');
- foreach ($databases as $database) {
- $collectionCount = 0;
- $collections = $dbForProject->find('database_' . $database->getInternalId());
- foreach ($collections as $collection) {
- $documents = $dbForProject->count('database_' . $database->getInternalId() . '_collection_' . $collection->getInternalId());
- $this->createInfMetric($dbForProject, $database->getInternalId() . '.' . $collection->getInternalId() . '.documents', $documents);
- $documentsCount += $documents;
- $collectionCount++;
- $collectionsCount++;
- }
- $this->createInfMetric($dbForProject, $database->getInternalId() . '.collections', $collectionCount);
- $this->createInfMetric($dbForProject, $database->getInternalId() . '.documents', $documentsCount);
- $databasesCount++;
- }
- $this->createInfMetric($dbForProject, 'collections', $collectionsCount);
- $this->createInfMetric($dbForProject, 'databases', $databasesCount);
- $this->createInfMetric($dbForProject, 'documents', $documentsCount);
- }
-
-
- /**
- * @throws Exception\Authorization
- * @throws Exception\Structure
- * @throws Exception\Restricted
- * @throws Exception\Conflict
- * @throws Exception
- */
- private function users(Database $dbForProject)
- {
- $users = $dbForProject->count('users');
- $this->createInfMetric($dbForProject, 'users', $users);
- }
-
- /**
- * @throws Exception\Authorization
- * @throws Exception\Structure
- * @throws Exception\Restricted
- * @throws Exception\Conflict
- * @throws Exception
- */
- private function sessions(Database $dbForProject)
- {
- $users = $dbForProject->count('sessions');
- $this->createInfMetric($dbForProject, 'sessions', $users);
- }
-
- /**
- * @throws Exception\Authorization
- * @throws Exception\Structure
- * @throws Exception\Restricted
- * @throws Exception\Conflict
- * @throws Exception
- */
- private function teams(Database $dbForProject)
- {
- $teams = $dbForProject->count('teams');
- $this->createInfMetric($dbForProject, 'teams', $teams);
- }
-}
diff --git a/src/Appwrite/Platform/Tasks/DeleteOrphanedProjects.php b/src/Appwrite/Platform/Tasks/DeleteOrphanedProjects.php
deleted file mode 100644
index 94879a4386..0000000000
--- a/src/Appwrite/Platform/Tasks/DeleteOrphanedProjects.php
+++ /dev/null
@@ -1,161 +0,0 @@
-desc('Delete orphaned projects')
- ->param('commit', false, new Boolean(true), 'Commit project deletion', true)
- ->inject('pools')
- ->inject('cache')
- ->inject('dbForConsole')
- ->inject('register')
- ->callback(function (bool $commit, Group $pools, Cache $cache, Database $dbForConsole, Registry $register) {
- $this->action($commit, $pools, $cache, $dbForConsole, $register);
- });
- }
-
-
- public function action(bool $commit, Group $pools, Cache $cache, Database $dbForConsole, Registry $register): void
- {
-
- Console::title('Delete orphaned projects V1');
- Console::success(APP_NAME . ' Delete orphaned projects started');
-
- /** @var array $collections */
- $collectionsConfig = Config::getParam('collections', [])['projects'] ?? [];
-
- $collectionsConfig = array_merge([
- 'audit' => [
- '$id' => ID::custom('audit'),
- '$collection' => Database::METADATA
- ],
- 'abuse' => [
- '$id' => ID::custom('abuse'),
- '$collection' => Database::METADATA
- ]
- ], $collectionsConfig);
-
- /* Initialise new Utopia app */
- $app = new App('UTC');
- $console = $app->getResource('console');
- $projects = [$console];
-
- /** Database connections */
- $totalProjects = $dbForConsole->count('projects');
- Console::success("Found a total of: {$totalProjects} projects");
-
- $orphans = 1;
- $cnt = 0;
- $count = 0;
- $limit = 30;
- $sum = 30;
- $offset = 0;
- while (!empty($projects)) {
- foreach ($projects as $project) {
-
- /**
- * Skip user projects with id 'console'
- */
- if ($project->getId() === 'console') {
- continue;
- }
-
- try {
- $db = $project->getAttribute('database');
- $adapter = $pools
- ->get($db)
- ->pop()
- ->getResource();
-
- $dbForProject = new Database($adapter, $cache);
- $dbForProject->setDatabase('appwrite');
- $dbForProject->setNamespace('_' . $project->getInternalId());
-
- $collectionsCreated = 0;
- $cnt++;
- if ($dbForProject->exists($dbForProject->getDatabase(), Database::METADATA)) {
- $collectionsCreated = $dbForProject->count(Database::METADATA);
- }
-
- $msg = '(' . $cnt . ') found (' . $collectionsCreated . ') collections on project (' . $project->getInternalId() . ') , database (' . $project['database'] . ')';
-
- if ($collectionsCreated >= count($collectionsConfig)) {
- Console::log($msg . ' ignoring....');
- continue;
- }
-
- Console::log($msg);
-
- if ($collectionsCreated > 0) {
- $collections = $dbForProject->find(Database::METADATA, []);
- foreach ($collections as $collection) {
- if ($commit) {
- $dbForProject->deleteCollection($collection->getId());
- $dbForConsole->purgeCachedCollection($collection->getId());
- }
- Console::info('--Deleting collection (' . $collection->getId() . ') project no (' . $project->getInternalId() . ')');
- }
- }
-
- if ($commit) {
- $dbForConsole->deleteDocument('projects', $project->getId());
- $dbForConsole->purgeCachedDocument('projects', $project->getId());
-
- if ($dbForProject->exists($dbForProject->getDefaultDatabase(), Database::METADATA)) {
- try {
- $dbForProject->deleteCollection(Database::METADATA);
- $dbForProject->purgeCachedCollection(Database::METADATA);
- } catch (\Throwable $th) {
- Console::warning('Metadata collection does not exist');
- }
- }
- }
-
- Console::info('--Deleting project no (' . $project->getInternalId() . ')');
-
- $orphans++;
- } catch (\Throwable $th) {
- Console::error('Error: ' . $th->getMessage() . ' ' . $th->getTraceAsString());
- } finally {
- $pools
- ->get($db)
- ->reclaim();
- }
- }
-
- $sum = \count($projects);
-
- $projects = $dbForConsole->find('projects', [
- Query::limit($limit),
- Query::offset($offset),
- ]);
-
- $offset = $offset + $limit;
- $count = $count + $sum;
- }
-
- Console::log('Iterated through ' . $count - 1 . '/' . $totalProjects . ' projects found ' . $orphans - 1 . ' orphans');
- }
-}
diff --git a/src/Appwrite/Platform/Tasks/DevGenerateTranslations.php b/src/Appwrite/Platform/Tasks/DevGenerateTranslations.php
deleted file mode 100644
index 66eee00d0d..0000000000
--- a/src/Appwrite/Platform/Tasks/DevGenerateTranslations.php
+++ /dev/null
@@ -1,136 +0,0 @@
-desc('Generate translations in all languages')
- ->param('dry-run', 'true', new Boolean(true), 'If action should do a dry run. Dry run does not write into files', true)
- ->param('api-key', '', new Text(256), 'Open AI API key. Only used during non-dry runs to generate translations.', true)
- ->callback(fn ($dryRun, $apiKey) => $this->action($dryRun, $apiKey));
- }
-
- public function action(bool|string $dryRun, string $apiKey): void
- {
- $dryRun = \strval($dryRun) === 'true';
-
- Console::info("Started");
-
- if (!$dryRun && empty($apiKey)) {
- Console::error("Please specify --api-key='OPEN_AI_API_KEY' or run with --dry-run");
- return;
- }
-
- $this->apiKey = $apiKey;
-
- $dir = __DIR__ . '/../../../../app/config/locale/translations';
- $mainFile = 'en.json';
-
- $mainJson = \json_decode(\file_get_contents($dir . '/' . $mainFile), true);
- $mainKeys = \array_keys($mainJson);
-
- $files = array_diff(scandir($dir), array('.', '..', $mainFile));
-
- foreach ($files as $file) {
- $fileJson = \json_decode(\file_get_contents($dir . '/' . $file), true);
- $fileKeys = \array_keys($fileJson);
-
- // Trick to clear specific key from all translation files:
- // $json = \json_decode(\file_get_contents($dir . '/' . $file), true);
- // unset($json['emails.magicSession.optionUrl']);
- // \file_put_contents($dir . '/' . $file, \json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | 0));
- // continue;
-
- foreach ($mainKeys as $key) {
- if (!(\in_array($key, $fileKeys))) {
- if ($dryRun) {
- Console::warning("{$file} missing translation for {$key}");
- } else {
- $language = \explode('.', $file)[0];
- $translation = $this->generateTranslation($language, $mainJson[$key]);
-
- if (!empty($translation)) {
- $json = \json_decode(\file_get_contents($dir . '/' . $file), true);
- $json[$key] = $translation;
- \file_put_contents($dir . '/' . $file, \json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | 0));
-
- Console::success("Generated {$key} for {$language}");
- }
- }
- }
- }
- }
-
- Console::info("Done");
- }
-
- private function generateTranslation(string $targetLanguage, string $enTranslation): string
- {
- $list = Config::getParam('locale-languages');
- foreach ($list as $language) {
- if ($language['code'] === $targetLanguage) {
- $languageObject = $language;
- }
- }
-
- if (!isset($languageObject)) {
- Console::error("{$targetLanguage} language not found");
- return '';
- }
-
- $targetLanguageName = $languageObject['name'];
-
- $response = Client::fetch('https://api.openai.com/v1/chat/completions', [
- 'content-type' => Client::CONTENT_TYPE_APPLICATION_JSON,
- 'Authorization' => 'Bearer ' . $this->apiKey
- ], Client::METHOD_POST, [
- 'model' => 'gpt-4-1106-preview', // https://platform.openai.com/docs/models/gpt-4-and-gpt-4-turbo
- 'messages' => [
- [
- 'role' => 'system',
- 'content' => "Please translate the message user provides from English language to {$targetLanguageName}. Do not translate text inside {{ and }} placeholders. Provide only translated text."
- ],
- [
- 'role' => 'user',
- 'content' => $enTranslation
- ]
- ]
- ], [], 60);
-
- $body = \json_decode($response->getBody(), true);
-
- if ($response->getStatusCode() >= 400) {
- throw new Exception($response->getBody() . ' with status code ' . $response->getStatusCode() . ' for language ' . $targetLanguage . ' and message ' . $enTranslation);
- }
-
- $answer = $body['choices'][0]['message']['content'];
-
- $failureDetectors = [ 'sorry', 'confusion', 'country code', 'misunderstanding', 'correct', 'clarify', 'specific', 'cannot', 'unable', 'language', 'appears' ];
-
- foreach ($failureDetectors as $detector) {
- if (\str_contains($answer, $detector)) {
- Console::error("Translation of '{$enTranslation}' for {$targetLanguage} is incorrect: {$answer}");
- }
- }
-
- return $answer;
- }
-}
diff --git a/src/Appwrite/Platform/Tasks/GetMigrationStats.php b/src/Appwrite/Platform/Tasks/GetMigrationStats.php
deleted file mode 100644
index 30a9ebb8e9..0000000000
--- a/src/Appwrite/Platform/Tasks/GetMigrationStats.php
+++ /dev/null
@@ -1,187 +0,0 @@
-desc('Get stats for projects')
- ->inject('pools')
- ->inject('cache')
- ->inject('dbForConsole')
- ->inject('register')
- ->callback(function (Group $pools, Cache $cache, Database $dbForConsole, Registry $register) {
- $this->action($pools, $cache, $dbForConsole, $register);
- });
- }
-
- /**
- * @throws \Utopia\Exception
- * @throws CannotInsertRecord
- */
- public function action(Group $pools, Cache $cache, Database $dbForConsole, Registry $register): void
- {
- //docker compose exec -t appwrite get-migration-stats
-
- Console::title('Migration stats calculation V1');
- Console::success(APP_NAME . ' Migration stats calculation has started');
-
- /* Initialise new Utopia app */
- $app = new App('UTC');
- $console = $app->getResource('console');
-
- /** CSV stuff */
- $this->date = date('Y-m-d');
- $this->path = "{$this->directory}/migration_stats_{$this->date}.csv";
- $csv = Writer::createFromPath($this->path, 'w');
- $csv->insertOne($this->columns);
-
- /** Database connections */
- $totalProjects = $dbForConsole->count('projects');
- Console::success("Found a total of: {$totalProjects} projects");
-
- $projects = [$console];
- $count = 0;
- $limit = 100;
- $sum = 100;
- $offset = 0;
- while (!empty($projects)) {
- foreach ($projects as $project) {
-
- /**
- * Skip user projects with id 'console'
- */
- if ($project->getId() === 'console') {
- continue;
- }
-
- Console::info("Getting stats for {$project->getId()}");
-
- try {
- $db = $project->getAttribute('database');
- $adapter = $pools
- ->get($db)
- ->pop()
- ->getResource();
-
- $dbForProject = new Database($adapter, $cache);
- $dbForProject->setDefaultDatabase('appwrite');
- $dbForProject->setNamespace('_' . $project->getInternalId());
-
- /** Get Project ID */
- $stats['Project ID'] = $project->getId();
-
- /** Get Migration details */
- $migrations = $dbForProject->find('migrations', [
- Query::limit(500)
- ]);
-
- $migrations = array_map(function ($migration) use ($project) {
- return [
- $project->getId(),
- $migration->getAttribute('$id'),
- $migration->getAttribute('$createdAt'),
- $migration->getAttribute('status'),
- $migration->getAttribute('stage'),
- $migration->getAttribute('source'),
- ];
- }, $migrations);
-
- if (!empty($migrations)) {
- $csv->insertAll($migrations);
- }
- } catch (\Throwable $th) {
- Console::error('Failed on project ("' . $project->getId() . '") with error on File: ' . $th->getFile() . ' line no: ' . $th->getline() . ' with message: ' . $th->getMessage());
- } finally {
- $pools
- ->get($db)
- ->reclaim();
- }
- }
-
- $sum = \count($projects);
-
- $projects = $dbForConsole->find('projects', [
- Query::limit($limit),
- Query::offset($offset),
- ]);
-
- $offset = $offset + $limit;
- $count = $count + $sum;
- }
-
- Console::log('Iterated through ' . $count - 1 . '/' . $totalProjects . ' projects...');
-
- $pools
- ->get('console')
- ->reclaim();
-
- /** @var PHPMailer $mail */
- $mail = $register->get('smtp');
-
- $mail->clearAddresses();
- $mail->clearAllRecipients();
- $mail->clearReplyTos();
- $mail->clearAttachments();
- $mail->clearBCCs();
- $mail->clearCCs();
-
- try {
- /** Addresses */
- $mail->setFrom(System::getEnv('_APP_SYSTEM_EMAIL_ADDRESS', APP_EMAIL_TEAM), 'Appwrite Cloud Hamster');
- $recipients = explode(',', System::getEnv('_APP_USERS_STATS_RECIPIENTS', ''));
-
- foreach ($recipients as $recipient) {
- $mail->addAddress($recipient);
- }
-
- /** Attachments */
- $mail->addAttachment($this->path);
-
- /** Content */
- $mail->Subject = "Migration Report for {$this->date}";
- $mail->Body = "Please find the migration report atttached";
- $mail->send();
- Console::success('Email has been sent!');
- } catch (\Throwable $e) {
- Console::error("Message could not be sent. Mailer Error: {$mail->ErrorInfo}");
- }
- }
-}
diff --git a/src/Appwrite/Platform/Tasks/Hamster.php b/src/Appwrite/Platform/Tasks/Hamster.php
deleted file mode 100644
index 2cfef1a2c9..0000000000
--- a/src/Appwrite/Platform/Tasks/Hamster.php
+++ /dev/null
@@ -1,157 +0,0 @@
-desc('Get stats for projects')
- ->inject('queueForHamster')
- ->inject('dbForConsole')
- ->callback(function (EventHamster $queueForHamster, Database $dbForConsole) {
- $this->action($queueForHamster, $dbForConsole);
- });
- }
-
- public function action(EventHamster $queueForHamster, Database $dbForConsole): void
- {
- Console::title('Cloud Hamster V1');
- Console::success(APP_NAME . ' cloud hamster process has started');
-
- $sleep = (int) System::getEnv('_APP_HAMSTER_INTERVAL', '30'); // 30 seconds (by default)
-
- $jobInitTime = System::getEnv('_APP_HAMSTER_TIME', '22:00'); // (hour:minutes)
-
- $now = new \DateTime();
- $now->setTimezone(new \DateTimeZone(date_default_timezone_get()));
-
- $next = new \DateTime($now->format("Y-m-d $jobInitTime"));
- $next->setTimezone(new \DateTimeZone(date_default_timezone_get()));
-
- $delay = $next->getTimestamp() - $now->getTimestamp();
- /**
- * If time passed for the target day.
- */
- if ($delay <= 0) {
- $next->add(\DateInterval::createFromDateString('1 days'));
- $delay = $next->getTimestamp() - $now->getTimestamp();
- }
-
- Console::log('[' . $now->format("Y-m-d H:i:s.v") . '] Delaying for ' . $delay . ' setting loop to [' . $next->format("Y-m-d H:i:s.v") . ']');
-
- Console::loop(function () use ($queueForHamster, $dbForConsole, $sleep) {
- $now = date('d-m-Y H:i:s', time());
- Console::info("[{$now}] Queuing Cloud Usage Stats every {$sleep} seconds");
- $loopStart = microtime(true);
-
- Console::info('Queuing stats for all projects');
- $this->getStatsPerProject($queueForHamster, $dbForConsole, $loopStart);
- Console::success('Completed queuing stats for all projects');
-
- Console::info('Queuing stats for all organizations');
- $this->getStatsPerOrganization($queueForHamster, $dbForConsole, $loopStart);
- Console::success('Completed queuing stats for all organizations');
-
- Console::info('Queuing stats for all users');
- $this->getStatsPerUser($queueForHamster, $dbForConsole, $loopStart);
- Console::success('Completed queuing stats for all users');
-
- $loopTook = microtime(true) - $loopStart;
- $now = date('d-m-Y H:i:s', time());
- Console::info("[{$now}] Cloud Stats took {$loopTook} seconds");
- }, $sleep, $delay);
- }
-
- protected function calculateByGroup(string $collection, Database $database, callable $callback)
- {
- $count = 0;
- $chunk = 0;
- $limit = 50;
- $results = [];
- $sum = $limit;
-
- $executionStart = \microtime(true);
-
- while ($sum === $limit) {
- $chunk++;
-
- $results = $database->find($collection, \array_merge([
- Query::limit($limit),
- Query::offset($count)
- ]));
-
- $sum = count($results);
-
- Console::log('Processing chunk #' . $chunk . '. Found ' . $sum . ' documents');
-
- foreach ($results as $document) {
- call_user_func($callback, $database, $document);
- $count++;
- }
- }
-
- $executionEnd = \microtime(true);
-
- Console::log("Processed {$count} document by group in " . ($executionEnd - $executionStart) . " seconds");
- }
-
- protected function getStatsPerOrganization(EventHamster $hamster, Database $dbForConsole, float $loopStart)
- {
- $this->calculateByGroup('teams', $dbForConsole, function (Database $dbForConsole, Document $organization) use ($hamster, $loopStart) {
- try {
- $organization->setAttribute('$time', $loopStart);
- $hamster
- ->setType(EventHamster::TYPE_ORGANISATION)
- ->setOrganization($organization)
- ->trigger();
- } catch (\Throwable $e) {
- Console::error($e->getMessage());
- }
- });
- }
-
- private function getStatsPerProject(EventHamster $hamster, Database $dbForConsole, float $loopStart)
- {
- $this->calculateByGroup('projects', $dbForConsole, function (Database $dbForConsole, Document $project) use ($hamster, $loopStart) {
- try {
- $project->setAttribute('$time', $loopStart);
- $hamster
- ->setType(EventHamster::TYPE_PROJECT)
- ->setProject($project)
- ->trigger();
- } catch (\Throwable $e) {
- Console::error($e->getMessage());
- }
- });
- }
-
- protected function getStatsPerUser(EventHamster $hamster, Database $dbForConsole, float $loopStart)
- {
- $this->calculateByGroup('users', $dbForConsole, function (Database $dbForConsole, Document $user) use ($hamster, $loopStart) {
- try {
- $user->setAttribute('$time', $loopStart);
- $hamster
- ->setType(EventHamster::TYPE_USER)
- ->setUser($user)
- ->trigger();
- } catch (\Throwable $e) {
- Console::error($e->getMessage());
- }
- });
- }
-}
diff --git a/src/Appwrite/Platform/Tasks/PatchRecreateRepositoriesDocuments.php b/src/Appwrite/Platform/Tasks/PatchRecreateRepositoriesDocuments.php
deleted file mode 100644
index a7e2367d59..0000000000
--- a/src/Appwrite/Platform/Tasks/PatchRecreateRepositoriesDocuments.php
+++ /dev/null
@@ -1,169 +0,0 @@
-desc('Recreate missing repositories in consoleDB from projectDBs. They can be missing if you used Appwrite 1.4.10 or 1.4.11, and deleted a function.')
- ->param('after', '', new Text(36), 'After cursor', true)
- ->param('projectId', '', new Text(36), 'Select project to validate', true)
- ->inject('dbForConsole')
- ->inject('getProjectDB')
- ->callback(fn ($after, $projectId, $dbForConsole, $getProjectDB) => $this->action($after, $projectId, $dbForConsole, $getProjectDB));
- }
-
- public function action($after, $projectId, Database $dbForConsole, callable $getProjectDB): void
- {
- Console::info("Starting the patch");
-
- $startTime = microtime(true);
-
- if (!empty($projectId)) {
- try {
- $project = $dbForConsole->getDocument('projects', $projectId);
- $dbForProject = call_user_func($getProjectDB, $project);
- $this->recreateRepositories($dbForConsole, $dbForProject, $project);
- } catch (\Throwable $th) {
- Console::error("Unexpected error occurred with Project ID {$projectId}");
- Console::error('[Error] Type: ' . get_class($th));
- Console::error('[Error] Message: ' . $th->getMessage());
- Console::error('[Error] File: ' . $th->getFile());
- Console::error('[Error] Line: ' . $th->getLine());
- }
- } else {
- $queries = [];
- if (!empty($after)) {
- Console::info("Iterating remaining projects after project with ID {$after}");
- $project = $dbForConsole->getDocument('projects', $after);
- $queries = [Query::cursorAfter($project)];
- } else {
- Console::info("Iterating all projects");
- }
- $this->foreachDocument($dbForConsole, 'projects', $queries, function (Document $project) use ($getProjectDB, $dbForConsole) {
- $projectId = $project->getId();
-
- try {
- $dbForProject = call_user_func($getProjectDB, $project);
- $this->recreateRepositories($dbForConsole, $dbForProject, $project);
- } catch (\Throwable $th) {
- Console::error("Unexpected error occurred with Project ID {$projectId}");
- Console::error('[Error] Type: ' . get_class($th));
- Console::error('[Error] Message: ' . $th->getMessage());
- Console::error('[Error] File: ' . $th->getFile());
- Console::error('[Error] Line: ' . $th->getLine());
- }
- });
- }
-
- $endTime = microtime(true);
- $timeTaken = $endTime - $startTime;
-
- $hours = (int)($timeTaken / 3600);
- $timeTaken -= $hours * 3600;
- $minutes = (int)($timeTaken / 60);
- $timeTaken -= $minutes * 60;
- $seconds = (int)$timeTaken;
- $milliseconds = ($timeTaken - $seconds) * 1000;
- Console::info("Recreate patch completed in $hours h, $minutes m, $seconds s, $milliseconds mis ( total $timeTaken milliseconds)");
- }
-
- protected function foreachDocument(Database $database, string $collection, array $queries = [], callable $callback = null): void
- {
- $limit = 1000;
- $results = [];
- $sum = $limit;
- $latestDocument = null;
-
- while ($sum === $limit) {
- $newQueries = $queries;
-
- if ($latestDocument != null) {
- array_unshift($newQueries, Query::cursorAfter($latestDocument));
- }
- $newQueries[] = Query::limit($limit);
- $results = $database->find($collection, $newQueries);
-
- if (empty($results)) {
- return;
- }
-
- $sum = count($results);
-
- foreach ($results as $document) {
- if (is_callable($callback)) {
- $callback($document);
- }
- }
- $latestDocument = $results[array_key_last($results)];
- }
- }
-
- public function recreateRepositories(Database $dbForConsole, Database $dbForProject, Document $project): void
- {
- $projectId = $project->getId();
- Console::log("Running patch for project {$projectId}");
-
- $this->foreachDocument($dbForProject, 'functions', [], function (Document $function) use ($dbForProject, $dbForConsole, $project) {
- $isConnected = !empty($function->getAttribute('providerRepositoryId', ''));
-
- if ($isConnected) {
- $repository = $dbForConsole->getDocument('repositories', $function->getAttribute('repositoryId', ''));
-
- if ($repository->isEmpty()) {
- $projectId = $project->getId();
- $functionId = $function->getId();
- Console::success("Recreating repositories document for project ID {$projectId}, function ID {$functionId}");
-
- $repository = $dbForConsole->createDocument('repositories', new Document([
- '$id' => ID::unique(),
- '$permissions' => [
- Permission::read(Role::any()),
- Permission::update(Role::any()),
- Permission::delete(Role::any()),
- ],
- 'installationId' => $function->getAttribute('installationId', ''),
- 'installationInternalId' => $function->getAttribute('installationInternalId', ''),
- 'projectId' => $project->getId(),
- 'projectInternalId' => $project->getInternalId(),
- 'providerRepositoryId' => $function->getAttribute('providerRepositoryId', ''),
- 'resourceId' => $function->getId(),
- 'resourceInternalId' => $function->getInternalId(),
- 'resourceType' => 'function',
- 'providerPullRequestIds' => []
- ]));
-
- $function = $dbForProject->updateDocument('functions', $function->getId(), $function
- ->setAttribute('repositoryId', $repository->getId())
- ->setAttribute('repositoryInternalId', $repository->getInternalId()));
-
- $this->foreachDocument($dbForProject, 'deployments', [
- Query::equal('resourceInternalId', [$function->getInternalId()]),
- Query::equal('resourceType', ['functions'])
- ], function (Document $deployment) use ($dbForProject, $repository) {
- $dbForProject->updateDocument('deployments', $deployment->getId(), $deployment
- ->setAttribute('repositoryId', $repository->getId())
- ->setAttribute('repositoryInternalId', $repository->getInternalId()));
- });
- }
- }
- });
- }
-}
diff --git a/src/Appwrite/Platform/Tasks/VolumeSync.php b/src/Appwrite/Platform/Tasks/VolumeSync.php
deleted file mode 100644
index 6197b20fbd..0000000000
--- a/src/Appwrite/Platform/Tasks/VolumeSync.php
+++ /dev/null
@@ -1,59 +0,0 @@
-desc('Runs rsync to sync certificates between the storage mount and traefik.')
- ->param('source', null, new Text(255), 'Source path to sync from.', false)
- ->param('destination', null, new Text(255), 'Destination path to sync to.', false)
- ->param('interval', null, new Integer(true), 'Interval to run rsync', false)
- ->callback(fn ($source, $destination, $interval) => $this->action($source, $destination, $interval));
- }
-
- public function action(string $source, string $destination, int $interval)
- {
-
- Console::title('RSync V1');
- Console::success(APP_NAME . ' rsync process v1 has started');
-
- if (!file_exists($source)) {
- Console::error('Source directory does not exist. Exiting ... ');
- Console::exit(0);
- }
-
- Console::loop(function () use ($interval, $source, $destination) {
- $time = DateTime::now();
-
- Console::info("[{$time}] Executing rsync every {$interval} seconds");
- Console::info("Syncing between $source and $destination");
-
- if (!file_exists($source)) {
- Console::error('Source directory does not exist. Skipping ... ');
- return;
- }
-
- $stdin = "";
- $stdout = "";
- $stderr = "";
-
- Console::execute("rsync -av $source $destination", $stdin, $stdout, $stderr);
- Console::success($stdout);
- Console::error($stderr);
- }, $interval);
- }
-}
diff --git a/src/Appwrite/Platform/Workers/Hamster.php b/src/Appwrite/Platform/Workers/Hamster.php
deleted file mode 100644
index 2c34f6f3dc..0000000000
--- a/src/Appwrite/Platform/Workers/Hamster.php
+++ /dev/null
@@ -1,494 +0,0 @@
- 'files',
- 'usage_buckets' => 'buckets',
- 'usage_databases' => 'databases',
- 'usage_documents' => 'documents',
- 'usage_collections' => 'collections',
- 'usage_storage' => 'files.storage',
- 'usage_requests' => 'network.requests',
- 'usage_inbound' => 'network.inbound',
- 'usage_outbound' => 'network.outbound',
- 'usage_users' => 'users',
- 'usage_sessions' => 'sessions',
- 'usage_executions' => 'executions',
- ];
-
- protected Mixpanel $mixpanel;
-
- public static function getName(): string
- {
- return 'hamster';
- }
-
- /**
- * @throws \Exception
- */
- public function __construct()
- {
- $this
- ->desc('Hamster worker')
- ->inject('message')
- ->inject('pools')
- ->inject('cache')
- ->inject('dbForConsole')
- ->callback(fn (Message $message, Group $pools, Cache $cache, Database $dbForConsole) => $this->action($message, $pools, $cache, $dbForConsole));
- }
-
- /**
- * @param Message $message
- * @param Group $pools
- * @param Cache $cache
- * @param Database $dbForConsole
- *
- * @return void
- * @throws \Utopia\Database\Exception
- */
- public function action(Message $message, Group $pools, Cache $cache, Database $dbForConsole): void
- {
- $token = System::getEnv('_APP_MIXPANEL_TOKEN', '');
- if (empty($token)) {
- throw new \Exception('Missing MixPanel Token');
- }
- $this->mixpanel = new Mixpanel($token);
-
- $payload = $message->getPayload() ?? [];
-
- if (empty($payload)) {
- throw new \Exception('Missing payload');
- }
-
- $type = $payload['type'] ?? '';
-
- switch ($type) {
- case EventHamster::TYPE_PROJECT:
- $this->getStatsForProject(new Document($payload['project']), $pools, $cache, $dbForConsole);
- break;
- case EventHamster::TYPE_ORGANISATION:
- $this->getStatsForOrganization(new Document($payload['organization']), $dbForConsole);
- break;
- case EventHamster::TYPE_USER:
- $this->getStatsPerUser(new Document($payload['user']), $dbForConsole);
- break;
- }
- }
-
- /**
- * @param Document $project
- * @param Group $pools
- * @param Cache $cache
- * @param Database $dbForConsole
- * @throws \Utopia\Database\Exception
- */
- private function getStatsForProject(Document $project, Group $pools, Cache $cache, Database $dbForConsole): void
- {
- /**
- * Skip user projects with id 'console'
- */
- if ($project->getId() === 'console') {
- Console::info("Skipping project console");
- return;
- }
-
- Console::log("Getting stats for Project {$project->getId()}");
-
- try {
- $db = $project->getAttribute('database');
- $adapter = $pools
- ->get($db)
- ->pop()
- ->getResource();
-
- $dbForProject = new Database($adapter, $cache);
- $dbForProject->setDefaultDatabase('appwrite');
- $dbForProject->setNamespace('_' . $project->getInternalId());
-
- $statsPerProject = [];
-
- $statsPerProject['time'] = $project->getAttribute('$time');
-
- /** Get Project ID */
- $statsPerProject['project_id'] = $project->getId();
-
- /** Get project created time */
- $statsPerProject['project_created'] = $project->getAttribute('$createdAt');
-
- /** Get Project Name */
- $statsPerProject['project_name'] = $project->getAttribute('name');
-
- /** Total Project Variables */
- $statsPerProject['custom_variables'] = $dbForProject->count('variables', [], APP_LIMIT_COUNT);
-
- /** Total Migrations */
- $statsPerProject['custom_migrations'] = $dbForProject->count('migrations', [], APP_LIMIT_COUNT);
-
- /** Get Custom SMTP */
- $smtp = $project->getAttribute('smtp', null);
- if ($smtp) {
- $statsPerProject['custom_smtp_status'] = $smtp['enabled'] === true ? 'enabled' : 'disabled';
-
- /** Get Custom Templates Count */
- $templates = array_keys($project->getAttribute('templates', []));
- $statsPerProject['custom_email_templates'] = array_filter($templates, function ($template) {
- return str_contains($template, 'email');
- });
- $statsPerProject['custom_sms_templates'] = array_filter($templates, function ($template) {
- return str_contains($template, 'sms');
- });
- }
-
- /** Get total relationship attributes */
- $statsPerProject['custom_relationship_attributes'] = $dbForProject->count('attributes', [
- Query::equal('type', ['relationship'])
- ], APP_LIMIT_COUNT);
-
- /** Get Total Functions */
- $statsPerProject['custom_functions'] = $dbForProject->count('functions', [], APP_LIMIT_COUNT);
-
- foreach (\array_keys(Config::getParam('runtimes')) as $runtime) {
- $statsPerProject['custom_functions_' . $runtime] = $dbForProject->count('functions', [
- Query::equal('runtime', [$runtime]),
- ], APP_LIMIT_COUNT);
- }
-
- /** Get Total Deployments */
- $statsPerProject['custom_deployments'] = $dbForProject->count('deployments', [], APP_LIMIT_COUNT);
- $statsPerProject['custom_deployments_manual'] = $dbForProject->count('deployments', [
- Query::equal('type', ['manual'])
- ], APP_LIMIT_COUNT);
- $statsPerProject['custom_deployments_git'] = $dbForProject->count('deployments', [
- Query::equal('type', ['vcs'])
- ], APP_LIMIT_COUNT);
-
- /** Get VCS repos connected */
- $statsPerProject['custom_vcs_repositories'] = $dbForConsole->count('repositories', [
- Query::equal('projectInternalId', [$project->getInternalId()])
- ], APP_LIMIT_COUNT);
-
- /** Get Total Teams */
- $statsPerProject['custom_teams'] = $dbForProject->count('teams', [], APP_LIMIT_COUNT);
-
- /** Get Total Members */
- $teamInternalId = $project->getAttribute('teamInternalId', null);
- if ($teamInternalId) {
- $statsPerProject['custom_organization_members'] = $dbForConsole->count('memberships', [
- Query::equal('teamInternalId', [$teamInternalId])
- ], APP_LIMIT_COUNT);
- } else {
- $statsPerProject['custom_organization_members'] = 0;
- }
-
- /** Get Email and Name of the project owner */
- if ($teamInternalId) {
- $membership = $dbForConsole->findOne('memberships', [
- Query::equal('teamInternalId', [$teamInternalId]),
- ]);
-
- if (!$membership || $membership->isEmpty()) {
- throw new \Exception('Membership not found. Skipping project : ' . $project->getId());
- }
-
- $userId = $membership->getAttribute('userId', null);
- if ($userId) {
- $user = $dbForConsole->getDocument('users', $userId);
- $statsPerProject['email'] = $user->getAttribute('email', null);
- $statsPerProject['name'] = $user->getAttribute('name', null);
- }
- }
-
- /** Add billing information to the project */
- $organization = $dbForConsole->findOne('teams', [
- Query::equal('$internalId', [$teamInternalId])
- ]);
-
- $billing = $this->getBillingDetails($organization);
- $statsPerProject['billing_plan'] = $billing['billing_plan'] ?? null;
- $statsPerProject['billing_start_date'] = $billing['billing_start_date'] ?? null;
-
- /** Get Domains */
- $statsPerProject['custom_domains'] = $dbForConsole->count('rules', [
- Query::equal('projectInternalId', [$project->getInternalId()]),
- Query::limit(APP_LIMIT_COUNT)
- ]);
-
- /** Get Platforms */
- $platforms = $dbForConsole->find('platforms', [
- Query::equal('projectInternalId', [$project->getInternalId()]),
- Query::limit(APP_LIMIT_COUNT)
- ]);
-
- $statsPerProject['custom_platforms_web'] = sizeof(array_filter($platforms, function ($platform) {
- return $platform['type'] === 'web';
- }));
-
- $statsPerProject['custom_platforms_android'] = sizeof(array_filter($platforms, function ($platform) {
- return $platform['type'] === 'android';
- }));
-
- $statsPerProject['custom_platforms_apple'] = sizeof(array_filter($platforms, function ($platform) {
- return str_contains($platform['type'], 'apple');
- }));
-
- $statsPerProject['custom_platforms_flutter'] = sizeof(array_filter($platforms, function ($platform) {
- return str_contains($platform['type'], 'flutter');
- }));
-
- $flutterPlatforms = [Origin::CLIENT_TYPE_FLUTTER_ANDROID, Origin::CLIENT_TYPE_FLUTTER_IOS, Origin::CLIENT_TYPE_FLUTTER_MACOS, Origin::CLIENT_TYPE_FLUTTER_WINDOWS, Origin::CLIENT_TYPE_FLUTTER_LINUX];
-
- foreach ($flutterPlatforms as $flutterPlatform) {
- $statsPerProject['custom_platforms_' . $flutterPlatform] = sizeof(array_filter($platforms, function ($platform) use ($flutterPlatform) {
- return $platform['type'] === $flutterPlatform;
- }));
- }
-
- $statsPerProject['custom_platforms_api_keys'] = $dbForConsole->count('keys', [
- Query::equal('projectInternalId', [$project->getInternalId()]),
- Query::limit(APP_LIMIT_COUNT)
- ]);
-
- /** Get Usage $statsPerProject */
- $periods = [
- 'infinity' => [
- 'period' => '1d',
- 'limit' => 90,
- ],
- '24h' => [
- 'period' => '1h',
- 'limit' => 24,
- ],
- ];
-
- Authorization::skip(function () use ($dbForProject, $periods, &$statsPerProject) {
- foreach ($this->metrics as $key => $metric) {
- foreach ($periods as $periodKey => $periodValue) {
- $limit = $periodValue['limit'];
- $period = $periodValue['period'];
-
- $requestDocs = $dbForProject->find('stats', [
- Query::equal('period', [$period]),
- Query::equal('metric', [$metric]),
- Query::limit($limit),
- Query::orderDesc('time'),
- ]);
-
- $statsPerProject[$key . '_' . $periodKey] = [];
- foreach ($requestDocs as $requestDoc) {
- $statsPerProject[$key . '_' . $periodKey][] = [
- 'value' => $requestDoc->getAttribute('value'),
- 'date' => $requestDoc->getAttribute('time'),
- ];
- }
-
- $statsPerProject[$key . '_' . $periodKey] = array_reverse($statsPerProject[$key . '_' . $periodKey]);
- // Calculate aggregate of each metric
- $statsPerProject[$key . '_' . $periodKey] = array_sum(array_column($statsPerProject[$key . '_' . $periodKey], 'value'));
- }
- }
- });
-
- /**
- * Workaround to combine network.Inbound+network.outbound as bandwidth.
- */
- $statsPerProject["usage_bandwidth_infinity"] = $statsPerProject["usage_inbound_infinity"] + $statsPerProject["usage_outbound_infinity"];
- $statsPerProject["usage_bandwidth_24h"] = $statsPerProject["usage_inbound_24h"] + $statsPerProject["usage_outbound_24h"];
- unset($statsPerProject["usage_outbound_24h"]);
- unset($statsPerProject["usage_inbound_24h"]);
- unset($statsPerProject["usage_outbound_infinity"]);
- unset($statsPerProject["usage_inbound_infinity"]);
-
-
- if (isset($statsPerProject['email'])) {
- /** Send data to mixpanel */
- $res = $this->mixpanel->createProfile($statsPerProject['email'], '', [
- 'name' => $statsPerProject['name'],
- 'email' => $statsPerProject['email']
- ]);
-
- if (!$res) {
- Console::error('Failed to create user profile for project: ' . $project->getId());
- }
- }
-
- $event = new AnalyticsEvent();
- $event
- ->setName('Project Daily Usage')
- ->setProps($statsPerProject);
- $res = $this->mixpanel->createEvent($event);
-
- if (!$res) {
- Console::error('Failed to create event for project: ' . $project->getId());
- }
- } catch (\Throwable $e) {
- Console::error('Failed to send stats for project: ' . $project->getId());
- Console::error($e->getMessage());
- } finally {
- $pools
- ->get($db)
- ->reclaim();
- }
- }
-
- /**
- * @param Document $organization
- * @param Database $dbForConsole
- */
- private function getStatsForOrganization(Document $organization, Database $dbForConsole): void
- {
- Console::log("Getting stats for Organization {$organization->getId()}");
-
- try {
- $statsPerOrganization = [];
-
- $statsPerOrganization['time'] = $organization->getAttribute('$time');
-
- /** Organization name */
- $statsPerOrganization['name'] = $organization->getAttribute('name');
-
- /** Get Email and of the organization owner */
- $membership = $dbForConsole->findOne('memberships', [
- Query::equal('teamInternalId', [$organization->getInternalId()]),
- ]);
- if (!$membership || $membership->isEmpty()) {
- throw new \Exception('Membership not found. Skipping organization : ' . $organization->getId());
- }
- $userId = $membership->getAttribute('userId', null);
- if ($userId) {
- $user = $dbForConsole->getDocument('users', $userId);
- $statsPerOrganization['email'] = $user->getAttribute('email', null);
- }
-
- /** Add billing information */
- $billing = $this->getBillingDetails($organization);
- $statsPerOrganization['billing_plan'] = $billing['billing_plan'] ?? null;
- $statsPerOrganization['billing_start_date'] = $billing['billing_start_date'] ?? null;
- $statsPerOrganization['marked_for_deletion'] = $billing['markedForDeletion'] ?? 0;
- $statsPerOrganization['billing_plan_downgrade'] = $billing['billing_plan_downgrade'] ?? null;
-
- /** Organization Creation Date */
- $statsPerOrganization['created'] = $organization->getAttribute('$createdAt');
-
- /** Number of team members */
- $statsPerOrganization['members'] = $organization->getAttribute('total');
-
- /** Number of projects in this organization */
- $statsPerOrganization['projects'] = $dbForConsole->count('projects', [
- Query::equal('teamId', [$organization->getId()]),
- Query::limit(APP_LIMIT_COUNT)
- ]);
-
- if (!isset($statsPerOrganization['email'])) {
- throw new \Exception('Email not found. Skipping organization : ' . $organization->getId());
- }
-
- $event = new AnalyticsEvent();
- $event
- ->setName('Organization Daily Usage')
- ->setProps($statsPerOrganization);
- $res = $this->mixpanel->createEvent($event);
- if (!$res) {
- throw new \Exception('Failed to create event for organization : ' . $organization->getId());
- }
- } catch (\Throwable $e) {
- Console::error($e->getMessage());
- }
- }
-
- protected function getStatsPerUser(Document $user, Database $dbForConsole)
- {
- Console::log("Getting stats for User {$user->getId()}");
-
- try {
- $statsPerUser = [];
-
- $statsPerUser['time'] = $user->getAttribute('$time');
-
- /** Add billing information */
- $organization = $dbForConsole->findOne('teams', [
- Query::equal('userInternalId', [$user->getInternalId()])
- ]);
-
-
- $billing = $this->getBillingDetails($organization);
- $statsPerUser['billing_plan'] = $billing['billing_plan'] ?? null;
- $statsPerUser['billing_start_date'] = $billing['billing_start_date'] ?? null;
-
- /** Organization name */
- $statsPerUser['name'] = $user->getAttribute('name');
-
- /** Organization ID (needs to be stored as an email since mixpanel uses the email attribute as a distinctID) */
- $statsPerUser['email'] = $user->getAttribute('email');
-
- /** Organization Creation Date */
- $statsPerUser['created'] = $user->getAttribute('$createdAt');
-
- /** Number of teams this user is a part of */
- $statsPerUser['memberships'] = $dbForConsole->count('memberships', [
- Query::equal('userInternalId', [$user->getInternalId()]),
- Query::limit(APP_LIMIT_COUNT)
- ]);
-
- if (!isset($statsPerUser['email'])) {
- throw new \Exception('User has no email: ' . $user->getId());
- }
-
- /** Send data to mixpanel */
- $event = new AnalyticsEvent();
- $event
- ->setName('User Daily Usage')
- ->setProps($statsPerUser);
-
- $res = $this->mixpanel->createEvent($event);
-
- if (!$res) {
- throw new \Exception('Failed to create user profile for user: ' . $user->getId());
- }
- } catch (\Throwable $e) {
- Console::error($e->getMessage());
- }
- }
-
- private function getBillingDetails(bool|Document $team): array
- {
- $billing = [];
-
- if (!empty($team) && !$team->isEmpty()) {
- $billingPlan = $team->getAttribute('billingPlan', null);
- $billingPlanDowngrade = $team->getAttribute('billingPlanDowngrade', null);
-
- if (!empty($billingPlan) && empty($billingPlanDowngrade)) {
- $billing['billing_plan'] = $billingPlan;
- }
-
- if (in_array($billingPlan, ['tier-1', 'tier-2'])) {
- $billingStartDate = $team->getAttribute('billingStartDate', null);
- $billing['billing_start_date'] = $billingStartDate;
- }
-
- $billing['marked_for_deletion'] = $team->getAttribute('markedForDeletion', 0);
- $billing['billing_plan_downgrade'] = $billingPlanDowngrade;
- }
-
- return $billing;
- }
-}
From 10722aa736cb39478568a590eccfe3e995e1755a Mon Sep 17 00:00:00 2001
From: Christy Jacob
Date: Thu, 16 May 2024 07:11:00 +0000
Subject: [PATCH 092/138] chore: cleanup obsolete tasks and workers
---
Dockerfile | 20 ---
app/cli.php | 4 -
app/controllers/api/health.php | 3 +-
app/worker.php | 5 -
bin/worker-hamster | 3 -
docker-compose.yml | 57 --------
src/Appwrite/Event/Event.php | 3 -
src/Appwrite/Event/Hamster.php | 157 ---------------------
src/Appwrite/Platform/Services/Workers.php | 2 -
src/Appwrite/Platform/Tasks/QueueCount.php | 3 +-
src/Appwrite/Platform/Tasks/QueueRetry.php | 3 +-
11 files changed, 3 insertions(+), 257 deletions(-)
delete mode 100644 bin/worker-hamster
delete mode 100644 src/Appwrite/Event/Hamster.php
diff --git a/Dockerfile b/Dockerfile
index ee77ec956f..eedc759ed1 100755
--- a/Dockerfile
+++ b/Dockerfile
@@ -106,26 +106,6 @@ RUN chmod +x /usr/local/bin/doctor && \
chmod +x /usr/local/bin/worker-usage && \
chmod +x /usr/local/bin/worker-usage-dump
-
-# Cloud Executabless
-RUN chmod +x /usr/local/bin/calc-tier-stats && \
- chmod +x /usr/local/bin/calc-users-stats && \
- chmod +x /usr/local/bin/clear-card-cache && \
- chmod +x /usr/local/bin/delete-orphaned-projects && \
- chmod +x /usr/local/bin/get-migration-stats && \
- chmod +x /usr/local/bin/hamster && \
- chmod +x /usr/local/bin/patch-delete-project-collections && \
- chmod +x /usr/local/bin/patch-delete-schedule-updated-at-attribute && \
- chmod +x /usr/local/bin/patch-recreate-repositories-documents && \
- chmod +x /usr/local/bin/volume-sync && \
- chmod +x /usr/local/bin/patch-delete-project-collections && \
- chmod +x /usr/local/bin/delete-orphaned-projects && \
- chmod +x /usr/local/bin/clear-card-cache && \
- chmod +x /usr/local/bin/calc-users-stats && \
- chmod +x /usr/local/bin/calc-tier-stats && \
- chmod +x /usr/local/bin/get-migration-stats && \
- chmod +x /usr/local/bin/create-inf-metric
-
# Letsencrypt Permissions
RUN mkdir -p /etc/letsencrypt/live/ && chmod -Rf 755 /etc/letsencrypt/live/
diff --git a/app/cli.php b/app/cli.php
index bde8159f24..1996b4da32 100644
--- a/app/cli.php
+++ b/app/cli.php
@@ -6,7 +6,6 @@ require_once __DIR__ . '/controllers/general.php';
use Appwrite\Event\Certificate;
use Appwrite\Event\Delete;
use Appwrite\Event\Func;
-use Appwrite\Event\Hamster;
use Appwrite\Platform\Appwrite;
use Utopia\Cache\Adapter\Sharding;
use Utopia\Cache\Cache;
@@ -131,9 +130,6 @@ CLI::setResource('queue', function (Group $pools) {
CLI::setResource('queueForFunctions', function (Connection $queue) {
return new Func($queue);
}, ['queue']);
-CLI::setResource('queueForHamster', function (Connection $queue) {
- return new Hamster($queue);
-}, ['queue']);
CLI::setResource('queueForDeletes', function (Connection $queue) {
return new Delete($queue);
}, ['queue']);
diff --git a/app/controllers/api/health.php b/app/controllers/api/health.php
index c215a78a8b..4b4ce8f307 100644
--- a/app/controllers/api/health.php
+++ b/app/controllers/api/health.php
@@ -856,8 +856,7 @@ App::get('/v1/health/queue/failed/:name')
Event::CERTIFICATES_QUEUE_NAME,
Event::BUILDS_QUEUE_NAME,
Event::MESSAGING_QUEUE_NAME,
- Event::MIGRATIONS_QUEUE_NAME,
- Event::HAMSTER_CLASS_NAME
+ Event::MIGRATIONS_QUEUE_NAME
]), 'The name of the queue')
->param('threshold', 5000, new Integer(true), 'Queue size threshold. When hit (equal or higher), endpoint returns server error. Default value is 5000.', true)
->label('sdk.description', '/docs/references/health/get-failed-queue-jobs.md')
diff --git a/app/worker.php b/app/worker.php
index ae9732fb1b..6f912a84fd 100644
--- a/app/worker.php
+++ b/app/worker.php
@@ -9,7 +9,6 @@ use Appwrite\Event\Database as EventDatabase;
use Appwrite\Event\Delete;
use Appwrite\Event\Event;
use Appwrite\Event\Func;
-use Appwrite\Event\Hamster;
use Appwrite\Event\Mail;
use Appwrite\Event\Messaging;
use Appwrite\Event\Migration;
@@ -194,10 +193,6 @@ Server::setResource('queueForMigrations', function (Connection $queue) {
return new Migration($queue);
}, ['queue']);
-Server::setResource('queueForHamster', function (Connection $queue) {
- return new Hamster($queue);
-}, ['queue']);
-
Server::setResource('logger', function (Registry $register) {
return $register->get('logger');
}, ['register']);
diff --git a/bin/worker-hamster b/bin/worker-hamster
deleted file mode 100644
index b388dd13c9..0000000000
--- a/bin/worker-hamster
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-php /usr/src/code/app/worker.php hamster $@
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
index d270074412..3ef5f1b714 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -788,63 +788,6 @@ services:
environment:
- _APP_ASSISTANT_OPENAI_API_KEY
- appwrite-worker-hamster:
- entrypoint: worker-hamster
- <<: *x-logging
- container_name: appwrite-worker-hamster
- image: appwrite-dev
- networks:
- - appwrite
- volumes:
- - ./app:/usr/src/code/app
- - ./src:/usr/src/code/src
- depends_on:
- - redis
- - mariadb
- environment:
- - _APP_ENV
- - _APP_WORKER_PER_CORE
- - _APP_OPENSSL_KEY_V1
- - _APP_DB_HOST
- - _APP_DB_PORT
- - _APP_DB_SCHEMA
- - _APP_DB_USER
- - _APP_DB_PASS
- - _APP_REDIS_HOST
- - _APP_REDIS_PORT
- - _APP_REDIS_USER
- - _APP_REDIS_PASS
- - _APP_MIXPANEL_TOKEN
-
- appwrite-hamster-scheduler:
- entrypoint: hamster
- <<: *x-logging
- container_name: appwrite-hamster-scheduler
- image: appwrite-dev
- networks:
- - appwrite
- volumes:
- - ./app:/usr/src/code/app
- - ./src:/usr/src/code/src
- depends_on:
- - redis
- - mariadb
- environment:
- - _APP_ENV
- - _APP_WORKER_PER_CORE
- - _APP_OPENSSL_KEY_V1
- - _APP_REDIS_HOST
- - _APP_REDIS_PORT
- - _APP_REDIS_USER
- - _APP_REDIS_PASS
- - _APP_DB_HOST
- - _APP_DB_PORT
- - _APP_DB_SCHEMA
- - _APP_DB_USER
- - _APP_DB_PASS
- - _APP_HAMSTER_TIME
- - _APP_HAMSTER_INTERVAL
-
openruntimes-executor:
container_name: openruntimes-executor
hostname: appwrite-executor
diff --git a/src/Appwrite/Event/Event.php b/src/Appwrite/Event/Event.php
index fa9ddf1315..b80ba9333d 100644
--- a/src/Appwrite/Event/Event.php
+++ b/src/Appwrite/Event/Event.php
@@ -45,9 +45,6 @@ class Event
public const MIGRATIONS_QUEUE_NAME = 'v1-migrations';
public const MIGRATIONS_CLASS_NAME = 'MigrationsV1';
- public const HAMSTER_QUEUE_NAME = 'v1-hamster';
- public const HAMSTER_CLASS_NAME = 'HamsterV1';
-
protected string $queue = '';
protected string $class = '';
protected string $event = '';
diff --git a/src/Appwrite/Event/Hamster.php b/src/Appwrite/Event/Hamster.php
deleted file mode 100644
index 5d79fce568..0000000000
--- a/src/Appwrite/Event/Hamster.php
+++ /dev/null
@@ -1,157 +0,0 @@
-setQueue(Event::HAMSTER_QUEUE_NAME)
- ->setClass(Event::HAMSTER_CLASS_NAME);
- }
-
- /**
- * Sets the type for the hamster event.
- *
- * @param string $type
- * @return self
- */
- public function setType(string $type): self
- {
- $this->type = $type;
-
- return $this;
- }
-
- /**
- * Returns the set type for the hamster event.
- *
- * @return string
- */
- public function getType(): string
- {
- return $this->type;
- }
-
- /**
- * Sets the project for the hamster event.
- *
- * @param Document $project
- */
- public function setProject(Document $project): self
- {
- $this->project = $project;
-
- return $this;
- }
-
- /**
- * Returns the set project for the hamster event.
- *
- * @return Document
- */
- public function getProject(): Document
- {
- return $this->project;
- }
-
- /**
- * Sets the organization for the hamster event.
- *
- * @param Document $organization
- */
- public function setOrganization(Document $organization): self
- {
- $this->organization = $organization;
-
- return $this;
- }
-
- /**
- * Returns the set organization for the hamster event.
- *
- * @return string
- */
- public function getOrganization(): Document
- {
- return $this->organization;
- }
-
- /**
- * Sets the user for the hamster event.
- *
- * @param Document $user
- */
- public function setUser(Document $user): self
- {
- $this->user = $user;
-
- return $this;
- }
-
- /**
- * Returns the set user for the hamster event.
- *
- * @return Document
- */
- public function getUser(): Document
- {
- return $this->user;
- }
-
- /**
- * Executes the function event and sends it to the functions worker.
- *
- * @return string|bool
- * @throws \InvalidArgumentException
- */
- public function trigger(): string|bool
- {
- if ($this->paused) {
- return false;
- }
-
- $client = new Client($this->queue, $this->connection);
-
- $events = $this->getEvent() ? Event::generateEvents($this->getEvent(), $this->getParams()) : null;
-
- return $client->enqueue([
- 'type' => $this->type,
- 'project' => $this->project,
- 'organization' => $this->organization,
- 'user' => $this->user,
- 'events' => $events,
- ]);
- }
-
- /**
- * Generate a function event from a base event
- *
- * @param Event $event
- *
- * @return self
- *
- */
- public function from(Event $event): self
- {
- $this->event = $event->getEvent();
- $this->params = $event->getParams();
- return $this;
- }
-}
diff --git a/src/Appwrite/Platform/Services/Workers.php b/src/Appwrite/Platform/Services/Workers.php
index 4adf9b76cb..62a7fcf3fb 100644
--- a/src/Appwrite/Platform/Services/Workers.php
+++ b/src/Appwrite/Platform/Services/Workers.php
@@ -8,7 +8,6 @@ use Appwrite\Platform\Workers\Certificates;
use Appwrite\Platform\Workers\Databases;
use Appwrite\Platform\Workers\Deletes;
use Appwrite\Platform\Workers\Functions;
-use Appwrite\Platform\Workers\Hamster;
use Appwrite\Platform\Workers\Mails;
use Appwrite\Platform\Workers\Messaging;
use Appwrite\Platform\Workers\Migrations;
@@ -32,7 +31,6 @@ class Workers extends Service
->addAction(Mails::getName(), new Mails())
->addAction(Messaging::getName(), new Messaging())
->addAction(Webhooks::getName(), new Webhooks())
- ->addAction(Hamster::getName(), new Hamster())
->addAction(UsageDump::getName(), new UsageDump())
->addAction(Usage::getName(), new Usage())
->addAction(Migrations::getName(), new Migrations())
diff --git a/src/Appwrite/Platform/Tasks/QueueCount.php b/src/Appwrite/Platform/Tasks/QueueCount.php
index 9b7bba82d1..961360479d 100644
--- a/src/Appwrite/Platform/Tasks/QueueCount.php
+++ b/src/Appwrite/Platform/Tasks/QueueCount.php
@@ -32,8 +32,7 @@ class QueueCount extends Action
Event::CERTIFICATES_QUEUE_NAME,
Event::BUILDS_QUEUE_NAME,
Event::MESSAGING_QUEUE_NAME,
- Event::MIGRATIONS_QUEUE_NAME,
- Event::HAMSTER_QUEUE_NAME
+ Event::MIGRATIONS_QUEUE_NAME
]), 'Queue name')
->param('type', '', new WhiteList([
'success',
diff --git a/src/Appwrite/Platform/Tasks/QueueRetry.php b/src/Appwrite/Platform/Tasks/QueueRetry.php
index 465152f21d..7259f82c89 100644
--- a/src/Appwrite/Platform/Tasks/QueueRetry.php
+++ b/src/Appwrite/Platform/Tasks/QueueRetry.php
@@ -33,8 +33,7 @@ class QueueRetry extends Action
Event::CERTIFICATES_QUEUE_NAME,
Event::BUILDS_QUEUE_NAME,
Event::MESSAGING_QUEUE_NAME,
- Event::MIGRATIONS_QUEUE_NAME,
- Event::HAMSTER_CLASS_NAME
+ Event::MIGRATIONS_QUEUE_NAME
]), 'Queue name')
->param('limit', 0, new Wildcard(), 'jobs limit', true)
->inject('queue')
From b371909deb16d3b0a2b99cc3164a08884f5d59ae Mon Sep 17 00:00:00 2001
From: Christy Jacob
Date: Thu, 16 May 2024 07:16:45 +0000
Subject: [PATCH 093/138] chore: fix Dockerile
---
Dockerfile | 3 ---
1 file changed, 3 deletions(-)
diff --git a/Dockerfile b/Dockerfile
index eedc759ed1..1d2ac91ae0 100755
--- a/Dockerfile
+++ b/Dockerfile
@@ -72,9 +72,6 @@ RUN mkdir -p /storage/uploads && \
chown -Rf www-data.www-data /storage/functions && chmod -Rf 0755 /storage/functions && \
chown -Rf www-data.www-data /storage/debug && chmod -Rf 0755 /storage/debug
-# Development Executables
-RUN chmod +x /usr/local/bin/dev-generate-translations
-
# Executables
RUN chmod +x /usr/local/bin/doctor && \
chmod +x /usr/local/bin/install && \
From 8a18fee89b5158a1f49ff81270d6c10e46fd31bd Mon Sep 17 00:00:00 2001
From: Steven Nguyen
Date: Wed, 15 May 2024 15:42:59 -0700
Subject: [PATCH 094/138] chore: bump dependencies
---
composer.lock | 61 +++++++++++++++++++++++++--------------------------
1 file changed, 30 insertions(+), 31 deletions(-)
diff --git a/composer.lock b/composer.lock
index dae02059a5..81f8190b77 100644
--- a/composer.lock
+++ b/composer.lock
@@ -822,16 +822,16 @@
},
{
"name": "paragonie/constant_time_encoding",
- "version": "v2.6.3",
+ "version": "v2.7.0",
"source": {
"type": "git",
"url": "https://github.com/paragonie/constant_time_encoding.git",
- "reference": "58c3f47f650c94ec05a151692652a868995d2938"
+ "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938",
- "reference": "58c3f47f650c94ec05a151692652a868995d2938",
+ "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/52a0d99e69f56b9ec27ace92ba56897fe6993105",
+ "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105",
"shasum": ""
},
"require": {
@@ -885,7 +885,7 @@
"issues": "https://github.com/paragonie/constant_time_encoding/issues",
"source": "https://github.com/paragonie/constant_time_encoding"
},
- "time": "2022-06-14T06:56:20+00:00"
+ "time": "2024-05-08T12:18:48+00:00"
},
{
"name": "phpmailer/phpmailer",
@@ -1556,16 +1556,16 @@
},
{
"name": "utopia-php/database",
- "version": "0.49.6",
+ "version": "0.49.9",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/database.git",
- "reference": "ebc2d3b9435ca56659ab58479a0f755329599f7c"
+ "reference": "ee93c14b99820f791c669648854f094fe399a085"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/database/zipball/ebc2d3b9435ca56659ab58479a0f755329599f7c",
- "reference": "ebc2d3b9435ca56659ab58479a0f755329599f7c",
+ "url": "https://api.github.com/repos/utopia-php/database/zipball/ee93c14b99820f791c669648854f094fe399a085",
+ "reference": "ee93c14b99820f791c669648854f094fe399a085",
"shasum": ""
},
"require": {
@@ -1606,9 +1606,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/database/issues",
- "source": "https://github.com/utopia-php/database/tree/0.49.6"
+ "source": "https://github.com/utopia-php/database/tree/0.49.9"
},
- "time": "2024-04-30T01:33:56+00:00"
+ "time": "2024-05-12T23:58:34+00:00"
},
{
"name": "utopia-php/domains",
@@ -1672,16 +1672,16 @@
},
{
"name": "utopia-php/dsn",
- "version": "0.2.0",
+ "version": "0.2.1",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/dsn.git",
- "reference": "c11f37a12c3f6aaf9fea97ca7cb363dcc93668d7"
+ "reference": "42ee37a3d1785100b2f69091c9d4affadb6846eb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/dsn/zipball/c11f37a12c3f6aaf9fea97ca7cb363dcc93668d7",
- "reference": "c11f37a12c3f6aaf9fea97ca7cb363dcc93668d7",
+ "url": "https://api.github.com/repos/utopia-php/dsn/zipball/42ee37a3d1785100b2f69091c9d4affadb6846eb",
+ "reference": "42ee37a3d1785100b2f69091c9d4affadb6846eb",
"shasum": ""
},
"require": {
@@ -1713,9 +1713,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/dsn/issues",
- "source": "https://github.com/utopia-php/dsn/tree/0.2.0"
+ "source": "https://github.com/utopia-php/dsn/tree/0.2.1"
},
- "time": "2023-11-02T12:01:43+00:00"
+ "time": "2024-05-07T02:01:25+00:00"
},
{
"name": "utopia-php/framework",
@@ -1966,22 +1966,21 @@
},
{
"name": "utopia-php/migration",
- "version": "0.4.1",
+ "version": "0.4.3",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/migration.git",
- "reference": "ae3cfe93f6d313105d226aeb68806660c806a925"
+ "reference": "117be70da329dac047d22b4250dfa435a725e187"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/migration/zipball/ae3cfe93f6d313105d226aeb68806660c806a925",
- "reference": "ae3cfe93f6d313105d226aeb68806660c806a925",
+ "url": "https://api.github.com/repos/utopia-php/migration/zipball/117be70da329dac047d22b4250dfa435a725e187",
+ "reference": "117be70da329dac047d22b4250dfa435a725e187",
"shasum": ""
},
"require": {
"appwrite/appwrite": "10.1.0",
- "php": "8.*",
- "utopia-php/cli": "0.*"
+ "php": "8.*"
},
"require-dev": {
"laravel/pint": "1.*",
@@ -2008,9 +2007,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/migration/issues",
- "source": "https://github.com/utopia-php/migration/tree/0.4.1"
+ "source": "https://github.com/utopia-php/migration/tree/0.4.3"
},
- "time": "2024-05-01T13:19:18+00:00"
+ "time": "2024-05-15T04:49:28+00:00"
},
{
"name": "utopia-php/mongo",
@@ -2731,16 +2730,16 @@
"packages-dev": [
{
"name": "appwrite/sdk-generator",
- "version": "0.38.2",
+ "version": "0.38.4",
"source": {
"type": "git",
"url": "https://github.com/appwrite/sdk-generator.git",
- "reference": "51284668529e2b10ed933412a42b603c76cded23"
+ "reference": "af7e4b53e9d5467fcb03d482d539669bf2eacdd8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/51284668529e2b10ed933412a42b603c76cded23",
- "reference": "51284668529e2b10ed933412a42b603c76cded23",
+ "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/af7e4b53e9d5467fcb03d482d539669bf2eacdd8",
+ "reference": "af7e4b53e9d5467fcb03d482d539669bf2eacdd8",
"shasum": ""
},
"require": {
@@ -2776,9 +2775,9 @@
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
"support": {
"issues": "https://github.com/appwrite/sdk-generator/issues",
- "source": "https://github.com/appwrite/sdk-generator/tree/0.38.2"
+ "source": "https://github.com/appwrite/sdk-generator/tree/0.38.4"
},
- "time": "2024-04-25T07:49:29+00:00"
+ "time": "2024-05-15T00:35:29+00:00"
},
{
"name": "doctrine/deprecations",
From 49fc75e59d8e308d1699d3fa67c3a6470618e70c Mon Sep 17 00:00:00 2001
From: Steven Nguyen <1477010+stnguyen90@users.noreply.github.com>
Date: Thu, 16 May 2024 21:13:32 +0000
Subject: [PATCH 095/138] Bump console to version 4.3.0
---
.gitmodules | 2 +-
app/console | 2 +-
app/init.php | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/.gitmodules b/.gitmodules
index c5a49ced3e..4d0d96252e 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,4 +1,4 @@
[submodule "app/console"]
path = app/console
url = https://github.com/appwrite/console
- branch = 4.0.6
+ branch = 4.3.0
diff --git a/app/console b/app/console
index f483d9631d..0af1af4852 160000
--- a/app/console
+++ b/app/console
@@ -1 +1 @@
-Subproject commit f483d9631d6f21e94aedb20b5c37c56fea06c23e
+Subproject commit 0af1af4852bfe4d9b234c74524b3f7592094e85f
diff --git a/app/init.php b/app/init.php
index db69cad164..6f9e9f41dd 100644
--- a/app/init.php
+++ b/app/init.php
@@ -112,7 +112,7 @@ const APP_LIMIT_LIST_DEFAULT = 25; // Default maximum number of items to return
const APP_KEY_ACCCESS = 24 * 60 * 60; // 24 hours
const APP_USER_ACCCESS = 24 * 60 * 60; // 24 hours
const APP_CACHE_UPDATE = 24 * 60 * 60; // 24 hours
-const APP_CACHE_BUSTER = 406;
+const APP_CACHE_BUSTER = 430;
const APP_VERSION_STABLE = '1.5.5';
const APP_DATABASE_ATTRIBUTE_EMAIL = 'email';
const APP_DATABASE_ATTRIBUTE_ENUM = 'enum';
From 60179b1790ba7fcfa70783d75b2e430824d4caa5 Mon Sep 17 00:00:00 2001
From: Jake Barnby
Date: Fri, 17 May 2024 14:54:40 +1200
Subject: [PATCH 096/138] Fix not account for abuse/audit on project delete
---
src/Appwrite/Platform/Workers/Deletes.php | 37 +++++++++++++----------
1 file changed, 21 insertions(+), 16 deletions(-)
diff --git a/src/Appwrite/Platform/Workers/Deletes.php b/src/Appwrite/Platform/Workers/Deletes.php
index b08bfb027a..36d9dbd4f0 100644
--- a/src/Appwrite/Platform/Workers/Deletes.php
+++ b/src/Appwrite/Platform/Workers/Deletes.php
@@ -443,7 +443,7 @@ class Deletes extends Action
* @param Document $document
* @return void
* @throws Authorization
- * @throws \Utopia\Database\Exception
+ * @throws DatabaseException
* @throws Conflict
* @throws Restricted
* @throws Structure
@@ -471,11 +471,10 @@ class Deletes extends Action
* @return void
* @throws Exception
* @throws Authorization
- * @throws \Utopia\Database\Exception
+ * @throws DatabaseException
*/
private function deleteProject(Database $dbForConsole, callable $getProjectDB, Device $deviceForFiles, Device $deviceForFunctions, Device $deviceForBuilds, Device $deviceForCache, Document $document): void
{
- $projectId = $document->getId();
$projectInternalId = $document->getInternalId();
try {
@@ -486,24 +485,18 @@ class Deletes extends Action
}
$dbForProject = $getProjectDB($document);
- $projectCollectionIds = \array_keys(Config::getParam('collections', [])['projects']);
+
+ $projectCollectionIds = [
+ ...\array_keys(Config::getParam('collections', [])['projects']),
+ Audit::COLLECTION,
+ TimeLimit::COLLECTION,
+ ];
+
$limit = \count($projectCollectionIds) + 25;
while (true) {
$collections = $dbForProject->listCollections($limit);
- if ($dsn->getHost() === DATABASE_SHARED_TABLES) {
- $collectionsIds = \array_map(fn ($collection) => $collection->getId(), $collections);
-
- if ($collectionsIds == $projectCollectionIds) {
- break;
- }
- } else {
- if (empty($collections)) {
- break;
- }
- }
-
foreach ($collections as $collection) {
if ($dsn->getHost() !== DATABASE_SHARED_TABLES || !\in_array($collection->getId(), $projectCollectionIds)) {
$dbForProject->deleteCollection($collection->getId());
@@ -511,6 +504,16 @@ class Deletes extends Action
$this->deleteByGroup($collection->getId(), [], database: $dbForProject);
}
}
+
+ if ($dsn->getHost() === DATABASE_SHARED_TABLES) {
+ $collectionsIds = \array_map(fn ($collection) => $collection->getId(), $collections);
+
+ if (empty(\array_diff($collectionsIds, $projectCollectionIds))) {
+ break;
+ }
+ } elseif (empty($collections)) {
+ break;
+ }
}
// Delete Platforms
@@ -553,6 +556,8 @@ class Deletes extends Action
// Delete metadata table
if ($dsn->getHost() !== DATABASE_SHARED_TABLES) {
$dbForProject->deleteCollection('_metadata');
+ } else {
+ $this->deleteByGroup('_metadata', [], $dbForProject);
}
// Delete all storage directories
From 6a9e98365177e48bdbcb800681a90700458f06d5 Mon Sep 17 00:00:00 2001
From: Jake Barnby
Date: Fri, 17 May 2024 16:38:40 +1200
Subject: [PATCH 097/138] Catch DB errors on delete
---
src/Appwrite/Platform/Workers/Deletes.php | 23 ++++++++++++++++-------
1 file changed, 16 insertions(+), 7 deletions(-)
diff --git a/src/Appwrite/Platform/Workers/Deletes.php b/src/Appwrite/Platform/Workers/Deletes.php
index b08bfb027a..3320d05efd 100644
--- a/src/Appwrite/Platform/Workers/Deletes.php
+++ b/src/Appwrite/Platform/Workers/Deletes.php
@@ -679,9 +679,11 @@ class Deletes extends Action
$dbForProject = $getProjectDB($project);
$timeLimit = new TimeLimit("", 0, 1, $dbForProject);
$abuse = new Abuse($timeLimit);
- $status = $abuse->cleanup($abuseRetention);
- if (!$status) {
- throw new Exception('Failed to delete Abuse logs for project ' . $projectId);
+
+ try {
+ $abuse->cleanup($abuseRetention);
+ } catch (DatabaseException $e) {
+ Console::error('Failed to delete abuse logs for project ' . $projectId . ': ' . $e->getMessage());
}
}
@@ -697,9 +699,11 @@ class Deletes extends Action
$projectId = $project->getId();
$dbForProject = $getProjectDB($project);
$audit = new Audit($dbForProject);
- $status = $audit->cleanup($auditRetention);
- if (!$status) {
- throw new Exception('Failed to delete Audit logs for project' . $projectId);
+
+ try {
+ $audit->cleanup($auditRetention);
+ } catch (DatabaseException $e) {
+ Console::error('Failed to delete audit logs for project ' . $projectId . ': ' . $e->getMessage());
}
}
@@ -954,7 +958,12 @@ class Deletes extends Action
while ($sum === $limit) {
$chunk++;
- $results = $database->find($collection, \array_merge([Query::limit($limit)], $queries));
+ try {
+ $results = $database->find($collection, [Query::limit($limit), ...$queries]);
+ } catch (DatabaseException $e) {
+ Console::error('Failed to find documents for collection ' . $collection . ': ' . $e->getMessage());
+ return;
+ }
$sum = count($results);
From deacaa2d6fd920e80f4d1bbb2c671346037b8bcc Mon Sep 17 00:00:00 2001
From: Bradley Schofield
Date: Fri, 17 May 2024 18:01:33 +0900
Subject: [PATCH 098/138] Multiple Changes, See Desc
- Update Logger from 0.3.* to 0.5.*
- Add old sentry syntax conversion
- Add sampler for experiment logger, and set it to 4%
---
app/controllers/general.php | 1 +
app/init.php | 10 ++++++
composer.json | 2 +-
composer.lock | 64 ++++++++++++++++++-------------------
4 files changed, 44 insertions(+), 33 deletions(-)
diff --git a/app/controllers/general.php b/app/controllers/general.php
index 3734b81a3b..1fa70ed703 100644
--- a/app/controllers/general.php
+++ b/app/controllers/general.php
@@ -725,6 +725,7 @@ App::error()
$classname = '\\Utopia\\Logger\\Adapter\\' . \ucfirst($providerName);
$adapter = new $classname($providerConfig);
$logger = new Logger($adapter);
+ $logger->setSample(0.04);
$publish = true;
}
}
diff --git a/app/init.php b/app/init.php
index fbb3e2ee8d..88e8de0ea2 100644
--- a/app/init.php
+++ b/app/init.php
@@ -735,6 +735,16 @@ $register->set('logger', function () {
throw new Exception(Exception::GENERAL_SERVER_ERROR, "Logging provider not supported. Logging is disabled");
}
+ // Old Sentry Format conversion. Fallback until the old syntax is completely deprecated.
+ if (str_contains($providerConfig, ';') && strtolower($providerName) == 'sentry') {
+ $configChunks = \explode(";", $providerConfig);
+
+ $sentryKey = $configChunks[0];
+ $projectId = $configChunks[1];
+
+ $providerConfig = 'https://' . $sentryKey . '@sentry.io/' . $projectId;
+ }
+
$classname = '\\Utopia\\Logger\\Adapter\\' . \ucfirst($providerName);
$adapter = new $classname($providerConfig);
return new Logger($adapter);
diff --git a/composer.json b/composer.json
index 8865a32d91..e247799645 100644
--- a/composer.json
+++ b/composer.json
@@ -57,7 +57,7 @@
"utopia-php/fetch": "0.2.*",
"utopia-php/image": "0.6.*",
"utopia-php/locale": "0.4.*",
- "utopia-php/logger": "0.3.*",
+ "utopia-php/logger": "0.5.*",
"utopia-php/messaging": "0.10.*",
"utopia-php/migration": "0.4.*",
"utopia-php/orchestration": "0.9.*",
diff --git a/composer.lock b/composer.lock
index 83c5e027b9..4044508d4f 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "6ce62f5b54254e5023c5ace349a0ced7",
+ "content-hash": "e3975335737921ddfe4e35d891ea222a",
"packages": [
{
"name": "adhocore/jwt",
@@ -822,16 +822,16 @@
},
{
"name": "paragonie/constant_time_encoding",
- "version": "v2.6.3",
+ "version": "v2.7.0",
"source": {
"type": "git",
"url": "https://github.com/paragonie/constant_time_encoding.git",
- "reference": "58c3f47f650c94ec05a151692652a868995d2938"
+ "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938",
- "reference": "58c3f47f650c94ec05a151692652a868995d2938",
+ "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/52a0d99e69f56b9ec27ace92ba56897fe6993105",
+ "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105",
"shasum": ""
},
"require": {
@@ -885,7 +885,7 @@
"issues": "https://github.com/paragonie/constant_time_encoding/issues",
"source": "https://github.com/paragonie/constant_time_encoding"
},
- "time": "2022-06-14T06:56:20+00:00"
+ "time": "2024-05-08T12:18:48+00:00"
},
{
"name": "phpmailer/phpmailer",
@@ -1902,22 +1902,23 @@
},
{
"name": "utopia-php/logger",
- "version": "0.3.2",
+ "version": "0.5.1",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/logger.git",
- "reference": "ba763c10688fe2ed715ad2bed3f13d18dfec6253"
+ "reference": "048042f9440a4517332872a9fa35e145e4aa5daf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/logger/zipball/ba763c10688fe2ed715ad2bed3f13d18dfec6253",
- "reference": "ba763c10688fe2ed715ad2bed3f13d18dfec6253",
+ "url": "https://api.github.com/repos/utopia-php/logger/zipball/048042f9440a4517332872a9fa35e145e4aa5daf",
+ "reference": "048042f9440a4517332872a9fa35e145e4aa5daf",
"shasum": ""
},
"require": {
"php": ">=8.0"
},
"require-dev": {
+ "laravel/pint": "1.2.*",
"phpstan/phpstan": "1.9.x-dev",
"phpunit/phpunit": "^9.3",
"vimeo/psalm": "4.0.1"
@@ -1949,9 +1950,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/logger/issues",
- "source": "https://github.com/utopia-php/logger/tree/0.3.2"
+ "source": "https://github.com/utopia-php/logger/tree/0.5.1"
},
- "time": "2023-11-22T14:45:43+00:00"
+ "time": "2024-05-17T07:57:39+00:00"
},
{
"name": "utopia-php/messaging",
@@ -2005,22 +2006,21 @@
},
{
"name": "utopia-php/migration",
- "version": "0.4.1",
+ "version": "0.4.4",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/migration.git",
- "reference": "ae3cfe93f6d313105d226aeb68806660c806a925"
+ "reference": "a8a5d392bebf082faf289f4dfe09d9fd76844c33"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/migration/zipball/ae3cfe93f6d313105d226aeb68806660c806a925",
- "reference": "ae3cfe93f6d313105d226aeb68806660c806a925",
+ "url": "https://api.github.com/repos/utopia-php/migration/zipball/a8a5d392bebf082faf289f4dfe09d9fd76844c33",
+ "reference": "a8a5d392bebf082faf289f4dfe09d9fd76844c33",
"shasum": ""
},
"require": {
"appwrite/appwrite": "10.1.0",
- "php": "8.*",
- "utopia-php/cli": "0.*"
+ "php": "8.*"
},
"require-dev": {
"laravel/pint": "1.*",
@@ -2047,9 +2047,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/migration/issues",
- "source": "https://github.com/utopia-php/migration/tree/0.4.1"
+ "source": "https://github.com/utopia-php/migration/tree/0.4.4"
},
- "time": "2024-05-01T13:19:18+00:00"
+ "time": "2024-05-17T05:25:31+00:00"
},
{
"name": "utopia-php/mongo",
@@ -2823,16 +2823,16 @@
"packages-dev": [
{
"name": "appwrite/sdk-generator",
- "version": "0.38.2",
+ "version": "0.38.5",
"source": {
"type": "git",
"url": "https://github.com/appwrite/sdk-generator.git",
- "reference": "51284668529e2b10ed933412a42b603c76cded23"
+ "reference": "830a46cc8e34ee096a76d4af6f00adf008a7cbf8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/51284668529e2b10ed933412a42b603c76cded23",
- "reference": "51284668529e2b10ed933412a42b603c76cded23",
+ "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/830a46cc8e34ee096a76d4af6f00adf008a7cbf8",
+ "reference": "830a46cc8e34ee096a76d4af6f00adf008a7cbf8",
"shasum": ""
},
"require": {
@@ -2868,9 +2868,9 @@
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
"support": {
"issues": "https://github.com/appwrite/sdk-generator/issues",
- "source": "https://github.com/appwrite/sdk-generator/tree/0.38.2"
+ "source": "https://github.com/appwrite/sdk-generator/tree/0.38.5"
},
- "time": "2024-04-25T07:49:29+00:00"
+ "time": "2024-05-17T00:59:59+00:00"
},
{
"name": "doctrine/deprecations",
@@ -3660,16 +3660,16 @@
},
{
"name": "phpstan/phpdoc-parser",
- "version": "1.28.0",
+ "version": "1.29.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb"
+ "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
- "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/536889f2b340489d328f5ffb7b02bb6b183ddedc",
+ "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc",
"shasum": ""
},
"require": {
@@ -3701,9 +3701,9 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.0"
},
- "time": "2024-04-03T18:51:33+00:00"
+ "time": "2024-05-06T12:04:23+00:00"
},
{
"name": "phpunit/php-code-coverage",
From 51a27315330c1a8f621d46546c1f3171af09940b Mon Sep 17 00:00:00 2001
From: Bradley Schofield
Date: Fri, 17 May 2024 18:36:25 +0900
Subject: [PATCH 099/138] Update composer.lock
---
composer.lock | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/composer.lock b/composer.lock
index 4044508d4f..7fc372d624 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1902,16 +1902,16 @@
},
{
"name": "utopia-php/logger",
- "version": "0.5.1",
+ "version": "0.5.2",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/logger.git",
- "reference": "048042f9440a4517332872a9fa35e145e4aa5daf"
+ "reference": "c6dfdb672e41364c309b0c30dc03bc6d45446dba"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/logger/zipball/048042f9440a4517332872a9fa35e145e4aa5daf",
- "reference": "048042f9440a4517332872a9fa35e145e4aa5daf",
+ "url": "https://api.github.com/repos/utopia-php/logger/zipball/c6dfdb672e41364c309b0c30dc03bc6d45446dba",
+ "reference": "c6dfdb672e41364c309b0c30dc03bc6d45446dba",
"shasum": ""
},
"require": {
@@ -1950,9 +1950,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/logger/issues",
- "source": "https://github.com/utopia-php/logger/tree/0.5.1"
+ "source": "https://github.com/utopia-php/logger/tree/0.5.2"
},
- "time": "2024-05-17T07:57:39+00:00"
+ "time": "2024-05-17T09:32:59+00:00"
},
{
"name": "utopia-php/messaging",
From 82b473c8ee8b7291828c46178c985e47accdc144 Mon Sep 17 00:00:00 2001
From: bhc
Date: Fri, 17 May 2024 17:39:35 +0300
Subject: [PATCH 100/138] Update Chinese language native names in languages.php
---
app/config/locale/languages.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/config/locale/languages.php b/app/config/locale/languages.php
index eeea92e636..28d3fa4ebc 100644
--- a/app/config/locale/languages.php
+++ b/app/config/locale/languages.php
@@ -926,12 +926,12 @@ return [
[
"code" => "zh-cn",
"name" => "Chinese (Simplified)",
- "nativeName" => "中国人"
+ "nativeName" => "中文"
],
[
"code" => "zh-tw",
"name" => "Chinese (Traditional)",
- "nativeName" => "中國人"
+ "nativeName" => "中文"
],
[
"code" => "zu",
From 3d119ad1a6babf053ae65bc12ea2b5b7127d5260 Mon Sep 17 00:00:00 2001
From: loks0n <22452787+loks0n@users.noreply.github.com>
Date: Fri, 17 May 2024 18:16:10 +0100
Subject: [PATCH 101/138] fix: improve cold start error
---
app/controllers/general.php | 3 ++
composer.lock | 83 +++++++++++++++----------------
docker-compose.yml | 2 +-
src/Appwrite/Extend/Exception.php | 1 +
src/Executor/Executor.php | 11 +++-
5 files changed, 55 insertions(+), 45 deletions(-)
diff --git a/app/controllers/general.php b/app/controllers/general.php
index 71ecc80d54..6697670e4b 100644
--- a/app/controllers/general.php
+++ b/app/controllers/general.php
@@ -288,6 +288,9 @@ function router(App $utopia, Database $dbForConsole, callable $getProjectDB, Swo
$execution->setAttribute('logs', $executionResponse['logs']);
$execution->setAttribute('errors', $executionResponse['errors']);
$execution->setAttribute('duration', $executionResponse['duration']);
+
+ } catch (AppwriteException $ex) {
+ throw $ex;
} catch (\Throwable $th) {
$durationEnd = \microtime(true);
diff --git a/composer.lock b/composer.lock
index 34a3cc143c..3142bd9965 100644
--- a/composer.lock
+++ b/composer.lock
@@ -822,16 +822,16 @@
},
{
"name": "paragonie/constant_time_encoding",
- "version": "v2.6.3",
+ "version": "v2.7.0",
"source": {
"type": "git",
"url": "https://github.com/paragonie/constant_time_encoding.git",
- "reference": "58c3f47f650c94ec05a151692652a868995d2938"
+ "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938",
- "reference": "58c3f47f650c94ec05a151692652a868995d2938",
+ "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/52a0d99e69f56b9ec27ace92ba56897fe6993105",
+ "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105",
"shasum": ""
},
"require": {
@@ -885,7 +885,7 @@
"issues": "https://github.com/paragonie/constant_time_encoding/issues",
"source": "https://github.com/paragonie/constant_time_encoding"
},
- "time": "2022-06-14T06:56:20+00:00"
+ "time": "2024-05-08T12:18:48+00:00"
},
{
"name": "phpmailer/phpmailer",
@@ -1672,16 +1672,16 @@
},
{
"name": "utopia-php/dsn",
- "version": "0.2.0",
+ "version": "0.2.1",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/dsn.git",
- "reference": "c11f37a12c3f6aaf9fea97ca7cb363dcc93668d7"
+ "reference": "42ee37a3d1785100b2f69091c9d4affadb6846eb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/dsn/zipball/c11f37a12c3f6aaf9fea97ca7cb363dcc93668d7",
- "reference": "c11f37a12c3f6aaf9fea97ca7cb363dcc93668d7",
+ "url": "https://api.github.com/repos/utopia-php/dsn/zipball/42ee37a3d1785100b2f69091c9d4affadb6846eb",
+ "reference": "42ee37a3d1785100b2f69091c9d4affadb6846eb",
"shasum": ""
},
"require": {
@@ -1713,9 +1713,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/dsn/issues",
- "source": "https://github.com/utopia-php/dsn/tree/0.2.0"
+ "source": "https://github.com/utopia-php/dsn/tree/0.2.1"
},
- "time": "2023-11-02T12:01:43+00:00"
+ "time": "2024-05-07T02:01:25+00:00"
},
{
"name": "utopia-php/framework",
@@ -1966,22 +1966,21 @@
},
{
"name": "utopia-php/migration",
- "version": "0.4.0",
+ "version": "0.4.4",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/migration.git",
- "reference": "a72f27bd3dde68752fb185d306c4820e1b8d9657"
+ "reference": "a8a5d392bebf082faf289f4dfe09d9fd76844c33"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/migration/zipball/a72f27bd3dde68752fb185d306c4820e1b8d9657",
- "reference": "a72f27bd3dde68752fb185d306c4820e1b8d9657",
+ "url": "https://api.github.com/repos/utopia-php/migration/zipball/a8a5d392bebf082faf289f4dfe09d9fd76844c33",
+ "reference": "a8a5d392bebf082faf289f4dfe09d9fd76844c33",
"shasum": ""
},
"require": {
"appwrite/appwrite": "10.1.0",
- "php": "8.*",
- "utopia-php/cli": "0.*"
+ "php": "8.*"
},
"require-dev": {
"laravel/pint": "1.*",
@@ -2008,9 +2007,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/migration/issues",
- "source": "https://github.com/utopia-php/migration/tree/0.4.0"
+ "source": "https://github.com/utopia-php/migration/tree/0.4.4"
},
- "time": "2024-02-25T12:35:21+00:00"
+ "time": "2024-05-17T05:25:31+00:00"
},
{
"name": "utopia-php/mongo",
@@ -2499,16 +2498,16 @@
},
{
"name": "utopia-php/vcs",
- "version": "0.6.5",
+ "version": "0.6.6",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/vcs.git",
- "reference": "104e47ea8e38c156ec0e0bd415caa3dcd5046fe2"
+ "reference": "e538264cfee5e3efdfe1771efba04750cf20b2c4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/vcs/zipball/104e47ea8e38c156ec0e0bd415caa3dcd5046fe2",
- "reference": "104e47ea8e38c156ec0e0bd415caa3dcd5046fe2",
+ "url": "https://api.github.com/repos/utopia-php/vcs/zipball/e538264cfee5e3efdfe1771efba04750cf20b2c4",
+ "reference": "e538264cfee5e3efdfe1771efba04750cf20b2c4",
"shasum": ""
},
"require": {
@@ -2542,9 +2541,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/vcs/issues",
- "source": "https://github.com/utopia-php/vcs/tree/0.6.5"
+ "source": "https://github.com/utopia-php/vcs/tree/0.6.6"
},
- "time": "2024-01-08T17:11:12+00:00"
+ "time": "2024-05-17T09:36:30+00:00"
},
{
"name": "utopia-php/websocket",
@@ -2731,16 +2730,16 @@
"packages-dev": [
{
"name": "appwrite/sdk-generator",
- "version": "0.38.2",
+ "version": "0.38.5",
"source": {
"type": "git",
"url": "https://github.com/appwrite/sdk-generator.git",
- "reference": "51284668529e2b10ed933412a42b603c76cded23"
+ "reference": "830a46cc8e34ee096a76d4af6f00adf008a7cbf8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/51284668529e2b10ed933412a42b603c76cded23",
- "reference": "51284668529e2b10ed933412a42b603c76cded23",
+ "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/830a46cc8e34ee096a76d4af6f00adf008a7cbf8",
+ "reference": "830a46cc8e34ee096a76d4af6f00adf008a7cbf8",
"shasum": ""
},
"require": {
@@ -2776,9 +2775,9 @@
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
"support": {
"issues": "https://github.com/appwrite/sdk-generator/issues",
- "source": "https://github.com/appwrite/sdk-generator/tree/0.38.2"
+ "source": "https://github.com/appwrite/sdk-generator/tree/0.38.5"
},
- "time": "2024-04-25T07:49:29+00:00"
+ "time": "2024-05-17T00:59:59+00:00"
},
{
"name": "doctrine/deprecations",
@@ -2899,16 +2898,16 @@
},
{
"name": "laravel/pint",
- "version": "v1.15.2",
+ "version": "v1.15.3",
"source": {
"type": "git",
"url": "https://github.com/laravel/pint.git",
- "reference": "2c9f8004899815f3f0ee3cb28ef7281e2b589134"
+ "reference": "3600b5d17aff52f6100ea4921849deacbbeb8656"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/pint/zipball/2c9f8004899815f3f0ee3cb28ef7281e2b589134",
- "reference": "2c9f8004899815f3f0ee3cb28ef7281e2b589134",
+ "url": "https://api.github.com/repos/laravel/pint/zipball/3600b5d17aff52f6100ea4921849deacbbeb8656",
+ "reference": "3600b5d17aff52f6100ea4921849deacbbeb8656",
"shasum": ""
},
"require": {
@@ -2961,7 +2960,7 @@
"issues": "https://github.com/laravel/pint/issues",
"source": "https://github.com/laravel/pint"
},
- "time": "2024-04-23T15:42:34+00:00"
+ "time": "2024-04-30T15:02:26+00:00"
},
{
"name": "matthiasmullie/minify",
@@ -3568,16 +3567,16 @@
},
{
"name": "phpstan/phpdoc-parser",
- "version": "1.28.0",
+ "version": "1.29.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb"
+ "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
- "reference": "cd06d6b1a1b3c75b0b83f97577869fd85a3cd4fb",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/536889f2b340489d328f5ffb7b02bb6b183ddedc",
+ "reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc",
"shasum": ""
},
"require": {
@@ -3609,9 +3608,9 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/1.28.0"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.0"
},
- "time": "2024-04-03T18:51:33+00:00"
+ "time": "2024-05-06T12:04:23+00:00"
},
{
"name": "phpunit/php-code-coverage",
diff --git a/docker-compose.yml b/docker-compose.yml
index 0ba0bdb90e..48c6367295 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -850,7 +850,7 @@ services:
hostname: appwrite-executor
<<: *x-logging
stop_signal: SIGINT
- image: openruntimes/executor:0.4.12
+ image: openruntimes/executor:0.5.5
restart: unless-stopped
networks:
- appwrite
diff --git a/src/Appwrite/Extend/Exception.php b/src/Appwrite/Extend/Exception.php
index 1c5692cd9d..823140691e 100644
--- a/src/Appwrite/Extend/Exception.php
+++ b/src/Appwrite/Extend/Exception.php
@@ -153,6 +153,7 @@ class Exception extends \Exception
public const FUNCTION_NOT_FOUND = 'function_not_found';
public const FUNCTION_RUNTIME_UNSUPPORTED = 'function_runtime_unsupported';
public const FUNCTION_ENTRYPOINT_MISSING = 'function_entrypoint_missing';
+ public const FUNCTION_SYNCHRONOUS_TIMEOUT = 'function_synchronous_timeout';
/** Deployments */
public const DEPLOYMENT_NOT_FOUND = 'deployment_not_found';
diff --git a/src/Executor/Executor.php b/src/Executor/Executor.php
index 76c66de231..170b6dc23a 100644
--- a/src/Executor/Executor.php
+++ b/src/Executor/Executor.php
@@ -2,6 +2,8 @@
namespace Executor;
+use Appwrite\Extend\Exception as AppwriteException;
+use Appwrite\Utopia\Response;
use Exception;
use Utopia\System\System;
@@ -311,6 +313,8 @@ class Executor
$responseType = $responseHeaders['content-type'] ?? '';
$responseStatus = curl_getinfo($ch, CURLINFO_HTTP_CODE);
+ $curlError = curl_errno($ch);
+ $curlErrorMessage = curl_error($ch);
if ($decode) {
switch (substr($responseType, 0, strpos($responseType, ';'))) {
@@ -327,8 +331,11 @@ class Executor
}
}
- if ((curl_errno($ch)/* || 200 != $responseStatus*/)) {
- throw new Exception(curl_error($ch) . ' with status code ' . $responseStatus, $responseStatus);
+ if ($curlError) {
+ if ($curlError == CURLE_OPERATION_TIMEDOUT) {
+ throw new AppwriteException(AppwriteException::FUNCTION_SYNCHRONOUS_TIMEOUT, $curlErrorMessage, Response::STATUS_CODE_REQUEST_TIMEOUT);
+ }
+ throw new Exception($curlErrorMessage . ' with status code ' . $responseStatus, $responseStatus);
}
curl_close($ch);
From 095baab24aa217faf30a54ca246845335868853c Mon Sep 17 00:00:00 2001
From: loks0n <22452787+loks0n@users.noreply.github.com>
Date: Fri, 17 May 2024 20:50:40 +0100
Subject: [PATCH 102/138] chore: update executer in compose
---
app/views/install/compose.phtml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/views/install/compose.phtml b/app/views/install/compose.phtml
index 88fb1197f7..eea99a1fb0 100644
--- a/app/views/install/compose.phtml
+++ b/app/views/install/compose.phtml
@@ -731,7 +731,7 @@ services:
<<: *x-logging
restart: unless-stopped
stop_signal: SIGINT
- image: openruntimes/executor:0.4.12
+ image: openruntimes/executor:0.5.5
networks:
- appwrite
- runtimes
From 5b827169866a09bd78fad6b87844a032956daf17 Mon Sep 17 00:00:00 2001
From: Jake Barnby
Date: Mon, 20 May 2024 14:00:48 +1200
Subject: [PATCH 103/138] Change from 1 in 20 to 1 in 5 projects on shared
tables DB
---
app/controllers/api/projects.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php
index c51697bf95..5464014b48 100644
--- a/app/controllers/api/projects.php
+++ b/app/controllers/api/projects.php
@@ -152,10 +152,10 @@ App::post('/v1/projects')
throw new Exception(Exception::PROJECT_RESERVED_PROJECT, "'console' is a reserved project.");
}
- // TODO: One in 20 projects use shared tables. Temporary until all projects are using shared tables.
+ // TODO: 1 in 5 projects use shared tables. Temporary until all projects are using shared tables.
if (
(
- !\mt_rand(0, 19)
+ !\mt_rand(0, 4)
&& System::getEnv('_APP_DATABASE_SHARED_TABLES', 'enabled') === 'enabled'
&& System::getEnv('_APP_EDITION', 'self-hosted') !== 'self-hosted'
) ||
From 537e2ead3c2590a55bd48da875c3703c1659f85b Mon Sep 17 00:00:00 2001
From: Jake Barnby
Date: Mon, 20 May 2024 14:24:09 +1200
Subject: [PATCH 104/138] Update database
---
composer.lock | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/composer.lock b/composer.lock
index 7fc372d624..30d5ed74e0 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1556,16 +1556,16 @@
},
{
"name": "utopia-php/database",
- "version": "0.49.9",
+ "version": "0.49.10",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/database.git",
- "reference": "ee93c14b99820f791c669648854f094fe399a085"
+ "reference": "216209121bc97a2010f67a39c561fafe1e936bec"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/utopia-php/database/zipball/ee93c14b99820f791c669648854f094fe399a085",
- "reference": "ee93c14b99820f791c669648854f094fe399a085",
+ "url": "https://api.github.com/repos/utopia-php/database/zipball/216209121bc97a2010f67a39c561fafe1e936bec",
+ "reference": "216209121bc97a2010f67a39c561fafe1e936bec",
"shasum": ""
},
"require": {
@@ -1606,9 +1606,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/database/issues",
- "source": "https://github.com/utopia-php/database/tree/0.49.9"
+ "source": "https://github.com/utopia-php/database/tree/0.49.10"
},
- "time": "2024-05-12T23:58:34+00:00"
+ "time": "2024-05-20T02:14:20+00:00"
},
{
"name": "utopia-php/domains",
From 4d572d4a05ad72dd8b26e5c7e5294c02e0c0b889 Mon Sep 17 00:00:00 2001
From: loks0n <22452787+loks0n@users.noreply.github.com>
Date: Mon, 20 May 2024 11:05:53 +0100
Subject: [PATCH 105/138] chore: errors.php
---
app/config/errors.php | 5 +++++
src/Executor/Executor.php | 3 +--
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/app/config/errors.php b/app/config/errors.php
index 287e639f6b..ec37a2a34e 100644
--- a/app/config/errors.php
+++ b/app/config/errors.php
@@ -519,6 +519,11 @@ return [
'description' => 'Entrypoint for your Appwrite Function is missing. Please specify it when making deployment or update the entrypoint under your function\'s "Settings" > "Configuration" > "Entrypoint".',
'code' => 404,
],
+ Exception::FUNCTION_SYNCHRONOUS_TIMEOUT => [
+ 'name' => Exception::FUNCTION_SYNCHRONOUS_TIMEOUT,
+ 'description' => 'Synchronous function execution timed out. Please check the function code and try again.',
+ 'code' => 408,
+ ],
/** Builds */
Exception::BUILD_NOT_FOUND => [
diff --git a/src/Executor/Executor.php b/src/Executor/Executor.php
index 170b6dc23a..26a8934aae 100644
--- a/src/Executor/Executor.php
+++ b/src/Executor/Executor.php
@@ -3,7 +3,6 @@
namespace Executor;
use Appwrite\Extend\Exception as AppwriteException;
-use Appwrite\Utopia\Response;
use Exception;
use Utopia\System\System;
@@ -333,7 +332,7 @@ class Executor
if ($curlError) {
if ($curlError == CURLE_OPERATION_TIMEDOUT) {
- throw new AppwriteException(AppwriteException::FUNCTION_SYNCHRONOUS_TIMEOUT, $curlErrorMessage, Response::STATUS_CODE_REQUEST_TIMEOUT);
+ throw new AppwriteException(AppwriteException::FUNCTION_SYNCHRONOUS_TIMEOUT);
}
throw new Exception($curlErrorMessage . ' with status code ' . $responseStatus, $responseStatus);
}
From bfe12710dacc267cad14ff7a008ccdb740305866 Mon Sep 17 00:00:00 2001
From: loks0n <22452787+loks0n@users.noreply.github.com>
Date: Mon, 20 May 2024 11:08:23 +0100
Subject: [PATCH 106/138] chore: specs
---
app/config/specs/open-api3-latest-client.json | 2 +-
app/config/specs/open-api3-latest-console.json | 2 +-
app/config/specs/open-api3-latest-server.json | 2 +-
app/config/specs/swagger2-latest-client.json | 2 +-
app/config/specs/swagger2-latest-console.json | 2 +-
app/config/specs/swagger2-latest-server.json | 2 +-
6 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/app/config/specs/open-api3-latest-client.json b/app/config/specs/open-api3-latest-client.json
index f8cc516899..9727629495 100644
--- a/app/config/specs/open-api3-latest-client.json
+++ b/app/config/specs/open-api3-latest-client.json
@@ -1 +1 @@
-{"openapi":"3.0.0","info":{"version":"1.5.4","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"servers":[{"url":"https:\/\/cloud.appwrite.io\/v1"}],"paths":{"\/account":{"get":{"summary":"Get account","operationId":"accountGet","tags":["account"],"description":"Get the currently logged in user.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"get","weight":8,"cookies":false,"type":"","deprecated":false,"demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]},"post":{"summary":"Create account","operationId":"accountCreate","tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createEmailSession).","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"create","weight":7,"cookies":false,"type":"","deprecated":false,"demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":""},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"New user password. Must be between 8 and 256 chars.","x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":""}},"required":["userId","email","password"]}}}}}},"\/account\/email":{"patch":{"summary":"Update email","operationId":"accountUpdateEmail","tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmail","weight":33,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/identities":{"get":{"summary":"List Identities","operationId":"accountListIdentities","tags":["account"],"description":"Get the list of identities for the currently logged in user.","responses":{"200":{"description":"Identities List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/identityList"}}}}},"x-appwrite":{"method":"listIdentities","weight":56,"cookies":false,"type":"","deprecated":false,"demo":"account\/list-identities.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-identities.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account\/identities","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, provider, providerUid, providerEmail, providerAccessTokenExpiry","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/identities\/{identityId}":{"delete":{"summary":"Delete identity","operationId":"accountDeleteIdentity","tags":["account"],"description":"Delete an identity by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIdentity","weight":57,"cookies":false,"type":"","deprecated":false,"demo":"account\/delete-identity.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-identity.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"identityId","description":"Identity ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]}},"\/account\/jwt":{"post":{"summary":"Create JWT","operationId":"accountCreateJWT","tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/jwt"}}}}},"x-appwrite":{"method":"createJWT","weight":28,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List logs","operationId":"accountListLogs","tags":["account"],"description":"Get the list of latest security activity logs for the currently logged in user. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":30,"cookies":false,"type":"","deprecated":false,"demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/mfa":{"patch":{"summary":"Update MFA","operationId":"accountUpdateMFA","tags":["account"],"description":"Enable or disable MFA on an account.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateMFA","weight":43,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-m-f-a.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-mfa.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"mfa":{"type":"boolean","description":"Enable or disable MFA.","x-example":false}},"required":["mfa"]}}}}}},"\/account\/mfa\/authenticators\/{type}":{"post":{"summary":"Add Authenticator","operationId":"accountCreateMfaAuthenticator","tags":["account"],"description":"Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.","responses":{"200":{"description":"MFAType","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/mfaType"}}}}},"x-appwrite":{"method":"createMfaAuthenticator","weight":45,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-mfa-authenticator.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-mfa-authenticator.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"type","description":"Type of authenticator. Must be `totp`","required":true,"schema":{"type":"string","x-example":"totp","enum":["totp"],"x-enum-name":"AuthenticatorType","x-enum-keys":[]},"in":"path"}]},"put":{"summary":"Verify Authenticator","operationId":"accountUpdateMfaAuthenticator","tags":["account"],"description":"Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method. add ","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateMfaAuthenticator","weight":46,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-mfa-authenticator.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-mfa-authenticator.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"type","description":"Type of authenticator.","required":true,"schema":{"type":"string","x-example":"totp","enum":["totp"],"x-enum-name":"AuthenticatorType","x-enum-keys":[]},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"otp":{"type":"string","description":"Valid verification token.","x-example":""}},"required":["otp"]}}}}},"delete":{"summary":"Delete Authenticator","operationId":"accountDeleteMfaAuthenticator","tags":["account"],"description":"Delete an authenticator for a user by ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMfaAuthenticator","weight":50,"cookies":false,"type":"","deprecated":false,"demo":"account\/delete-mfa-authenticator.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-mfa-authenticator.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"type","description":"Type of authenticator.","required":true,"schema":{"type":"string","x-example":"totp","enum":["totp"],"x-enum-name":"AuthenticatorType","x-enum-keys":[]},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"otp":{"type":"string","description":"Valid verification token.","x-example":""}},"required":["otp"]}}}}}},"\/account\/mfa\/challenge":{"post":{"summary":"Create 2FA Challenge","operationId":"accountCreateMfaChallenge","tags":["account"],"description":"Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.","responses":{"201":{"description":"MFA Challenge","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/mfaChallenge"}}}}},"x-appwrite":{"method":"createMfaChallenge","weight":51,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-mfa-challenge.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-mfa-challenge.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},token:{param-token}","scope":"account","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"factor":{"type":"string","description":"Factor used for verification. Must be one of following: `email`, `phone`, `totp`, `recoveryCode`.","x-example":"email","enum":["email","phone","totp","recoverycode"],"x-enum-name":"AuthenticationFactor","x-enum-keys":[]}},"required":["factor"]}}}}},"put":{"summary":"Create MFA Challenge (confirmation)","operationId":"accountUpdateMfaChallenge","tags":["account"],"description":"Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.","responses":{"204":{"description":"No content","content":{"":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateMfaChallenge","weight":52,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-mfa-challenge.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-mfa-challenge.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"challengeId":{"type":"string","description":"ID of the challenge.","x-example":""},"otp":{"type":"string","description":"Valid verification token.","x-example":""}},"required":["challengeId","otp"]}}}}}},"\/account\/mfa\/factors":{"get":{"summary":"List Factors","operationId":"accountListMfaFactors","tags":["account"],"description":"List the factors available on the account to be used as a MFA challange.","responses":{"200":{"description":"MFAFactors","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/mfaFactors"}}}}},"x-appwrite":{"method":"listMfaFactors","weight":44,"cookies":false,"type":"","deprecated":false,"demo":"account\/list-mfa-factors.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-mfa-factors.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/account\/mfa\/recovery-codes":{"get":{"summary":"Get MFA Recovery Codes","operationId":"accountGetMfaRecoveryCodes","tags":["account"],"description":"Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.","responses":{"200":{"description":"MFA Recovery Codes","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/mfaRecoveryCodes"}}}}},"x-appwrite":{"method":"getMfaRecoveryCodes","weight":49,"cookies":false,"type":"","deprecated":false,"demo":"account\/get-mfa-recovery-codes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-mfa-recovery-codes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]},"post":{"summary":"Create MFA Recovery Codes","operationId":"accountCreateMfaRecoveryCodes","tags":["account"],"description":"Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.","responses":{"201":{"description":"MFA Recovery Codes","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/mfaRecoveryCodes"}}}}},"x-appwrite":{"method":"createMfaRecoveryCodes","weight":47,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-mfa-recovery-codes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-mfa-recovery-codes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]},"patch":{"summary":"Regenerate MFA Recovery Codes","operationId":"accountUpdateMfaRecoveryCodes","tags":["account"],"description":"Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.","responses":{"200":{"description":"MFA Recovery Codes","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/mfaRecoveryCodes"}}}}},"x-appwrite":{"method":"updateMfaRecoveryCodes","weight":48,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-mfa-recovery-codes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-mfa-recovery-codes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/account\/name":{"patch":{"summary":"Update name","operationId":"accountUpdateName","tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateName","weight":31,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":""}},"required":["name"]}}}}}},"\/account\/password":{"patch":{"summary":"Update password","operationId":"accountUpdatePassword","tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePassword","weight":32,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":null},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/account\/phone":{"patch":{"summary":"Update phone","operationId":"accountUpdatePhone","tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createPhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhone","weight":34,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["phone","password"]}}}}}},"\/account\/prefs":{"get":{"summary":"Get account preferences","operationId":"accountGetPrefs","tags":["account"],"description":"Get the preferences as a key-value object for the currently logged in user.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":29,"cookies":false,"type":"","deprecated":false,"demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account\/prefs","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]},"patch":{"summary":"Update preferences","operationId":"accountUpdatePrefs","tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePrefs","weight":35,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account\/prefs","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/account\/recovery":{"post":{"summary":"Create password recovery","operationId":"accountCreateRecovery","tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createRecovery","weight":37,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","url:{url},ip:{ip}"],"scope":"sessions.write","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["email","url"]}}}}},"put":{"summary":"Create password recovery (confirmation)","operationId":"accountUpdateRecovery","tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateRecovery","weight":38,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"sessions.write","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":""},"secret":{"type":"string","description":"Valid reset token.","x-example":""},"password":{"type":"string","description":"New user password. Must be between 8 and 256 chars.","x-example":null}},"required":["userId","secret","password"]}}}}}},"\/account\/sessions":{"get":{"summary":"List sessions","operationId":"accountListSessions","tags":["account"],"description":"Get the list of active sessions across different devices for the currently logged in user.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":10,"cookies":false,"type":"","deprecated":false,"demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account\/sessions","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]},"delete":{"summary":"Delete sessions","operationId":"accountDeleteSessions","tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":11,"cookies":false,"type":"","deprecated":false,"demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create anonymous session","operationId":"accountCreateAnonymousSession","tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updateEmail) or create an [OAuth2 session](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#CreateOAuth2Session).","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createAnonymousSession","weight":16,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create email password session","operationId":"accountCreateEmailPasswordSession","tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createEmailPasswordSession","weight":15,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-email-password-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email-password.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/sessions\/magic-url":{"put":{"summary":"Update magic URL session","operationId":"accountUpdateMagicURLSession","tags":["account"],"description":"Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login.","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateMagicURLSession","weight":25,"cookies":false,"type":"","deprecated":true,"demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session.md","rate-limit":10,"rate-time":3600,"rate-key":"ip:{ip},userId:{param-userId}","scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":""},"secret":{"type":"string","description":"Valid verification token.","x-example":""}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create OAuth2 session","operationId":"accountCreateOAuth2Session","tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).\n","responses":{"301":{"description":"File"}},"x-appwrite":{"method":"createOAuth2Session","weight":18,"cookies":false,"type":"webAuth","deprecated":false,"demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.","required":true,"schema":{"type":"string","x-example":"amazon","enum":["amazon","apple","auth0","authentik","autodesk","bitbucket","bitly","box","dailymotion","discord","disqus","dropbox","etsy","facebook","github","gitlab","google","linkedin","microsoft","notion","oidc","okta","paypal","paypalSandbox","podio","salesforce","slack","spotify","stripe","tradeshift","tradeshiftBox","twitch","wordpress","yahoo","yammer","yandex","zoho","zoom","mock"],"x-enum-name":"OAuthProvider","x-enum-keys":[]},"in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project's platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project's platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/sessions\/phone":{"put":{"summary":"Update phone session","operationId":"accountUpdatePhoneSession","tags":["account"],"description":"Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login.","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updatePhoneSession","weight":26,"cookies":false,"type":"","deprecated":true,"demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session.md","rate-limit":10,"rate-time":3600,"rate-key":"ip:{ip},userId:{param-userId}","scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":""},"secret":{"type":"string","description":"Valid verification token.","x-example":""}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/token":{"post":{"summary":"Create session","operationId":"accountCreateSession","tags":["account"],"description":"Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login.","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createSession","weight":17,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session.md","rate-limit":10,"rate-time":3600,"rate-key":"ip:{ip},userId:{param-userId}","scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":""},"secret":{"type":"string","description":"Secret of a token generated by login methods. For example, the `createMagicURLToken` or `createPhoneToken` methods.","x-example":""}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get session","operationId":"accountGetSession","tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"getSession","weight":12,"cookies":false,"type":"","deprecated":false,"demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account\/sessions","offline-key":"{sessionId}","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]},"patch":{"summary":"Update session","operationId":"accountUpdateSession","tags":["account"],"description":"Use this endpoint to extend a session's length. Extending a session is useful when session expiry is short. If the session was created using an OAuth provider, this endpoint refreshes the access token from the provider.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateSession","weight":14,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]},"delete":{"summary":"Delete session","operationId":"accountDeleteSession","tags":["account"],"description":"Logout the user. Use 'current' as the session ID to logout on this device, use a session ID to logout on another device. If you're looking to logout the user on all devices, use [Delete Sessions](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#deleteSessions) instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":13,"cookies":false,"type":"","deprecated":false,"demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update status","operationId":"accountUpdateStatus","tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateStatus","weight":36,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/account\/targets\/push":{"post":{"summary":"Create push target","operationId":"accountCreatePushTarget","tags":["account"],"description":"","responses":{"201":{"description":"Target","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/target"}}}}},"x-appwrite":{"method":"createPushTarget","weight":53,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-push-target.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"targets.write","platforms":["client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"targetId":{"type":"string","description":"Target ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":""},"identifier":{"type":"string","description":"The target identifier (token, email, phone etc.)","x-example":""},"providerId":{"type":"string","description":"Provider ID. Message will be sent to this target from the specified provider ID. If no provider ID is set the first setup provider will be used.","x-example":""}},"required":["targetId","identifier"]}}}}}},"\/account\/targets\/{targetId}\/push":{"put":{"summary":"Update push target","operationId":"accountUpdatePushTarget","tags":["account"],"description":"","responses":{"200":{"description":"Target","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/target"}}}}},"x-appwrite":{"method":"updatePushTarget","weight":54,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-push-target.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"targets.write","platforms":["client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[]}],"parameters":[{"name":"targetId","description":"Target ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"identifier":{"type":"string","description":"The target identifier (token, email, phone etc.)","x-example":""}},"required":["identifier"]}}}}},"delete":{"summary":"Delete push target","operationId":"accountDeletePushTarget","tags":["account"],"description":"","responses":{"204":{"description":"No content","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/target"}}}}},"x-appwrite":{"method":"deletePushTarget","weight":55,"cookies":false,"type":"","deprecated":false,"demo":"account\/delete-push-target.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"targets.write","platforms":["client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[]}],"parameters":[{"name":"targetId","description":"Target ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]}},"\/account\/tokens\/email":{"post":{"summary":"Create email token (OTP)","operationId":"accountCreateEmailToken","tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST \/v1\/account\/sessions\/token](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createSession) endpoint to complete the login process. The secret sent to the user's email is valid for 15 minutes.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createEmailToken","weight":24,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-email-token.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-token-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":""},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"phrase":{"type":"boolean","description":"Toggle for security phrase. If enabled, email will be send with a randomly generated phrase and the phrase will also be included in the response. Confirming phrases match increases the security of your authentication flow.","x-example":false}},"required":["userId","email"]}}}}}},"\/account\/tokens\/magic-url":{"post":{"summary":"Create magic URL token","operationId":"accountCreateMagicURLToken","tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not been registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [POST \/v1\/account\/sessions\/token](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createMagicURLToken","weight":23,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-magic-u-r-l-token.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-token-magic-url.md","rate-limit":60,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","url:{url},ip:{ip}"],"scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":""},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"phrase":{"type":"boolean","description":"Toggle for security phrase. If enabled, email will be send with a randomly generated phrase and the phrase will also be included in the response. Confirming phrases match increases the security of your authentication flow.","x-example":false}},"required":["userId","email"]}}}}}},"\/account\/tokens\/oauth2\/{provider}":{"get":{"summary":"Create OAuth2 token","operationId":"accountCreateOAuth2Token","tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed. \n\nIf authentication succeeds, `userId` and `secret` of a token will be appended to the success URL as query parameters. These can be used to create a new session using the [Create session](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createSession) endpoint.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).","responses":{"301":{"description":"File"}},"x-appwrite":{"method":"createOAuth2Token","weight":22,"cookies":false,"type":"webAuth","deprecated":false,"demo":"account\/create-o-auth2token.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-token-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.","required":true,"schema":{"type":"string","x-example":"amazon","enum":["amazon","apple","auth0","authentik","autodesk","bitbucket","bitly","box","dailymotion","discord","disqus","dropbox","etsy","facebook","github","gitlab","google","linkedin","microsoft","notion","oidc","okta","paypal","paypalSandbox","podio","salesforce","slack","spotify","stripe","tradeshift","tradeshiftBox","twitch","wordpress","yahoo","yammer","yandex","zoho","zoom","mock"],"x-enum-name":"OAuthProvider","x-enum-keys":[]},"in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project's platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project's platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/tokens\/phone":{"post":{"summary":"Create phone token","operationId":"accountCreatePhoneToken","tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST \/v1\/account\/sessions\/token](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneToken","weight":27,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-phone-token.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-token-phone.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},phone:{param-phone}","url:{url},ip:{ip}"],"scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":""},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"}},"required":["userId","phone"]}}}}}},"\/account\/verification":{"post":{"summary":"Create email verification","operationId":"accountCreateVerification","tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updateVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createVerification","weight":39,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["url"]}}}}},"put":{"summary":"Create email verification (confirmation)","operationId":"accountUpdateVerification","tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateVerification","weight":40,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":""},"secret":{"type":"string","description":"Valid verification token.","x-example":""}},"required":["userId","secret"]}}}}}},"\/account\/verification\/phone":{"post":{"summary":"Create phone verification","operationId":"accountCreatePhoneVerification","tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updatePhone) endpoint. Learn more about how to [complete the verification process](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneVerification","weight":41,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},userId:{userId}","url:{url},ip:{ip}"],"scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]},"put":{"summary":"Create phone verification (confirmation)","operationId":"accountUpdatePhoneVerification","tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":42,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":""},"secret":{"type":"string","description":"Valid verification token.","x-example":""}},"required":["userId","secret"]}}}}}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get browser icon","operationId":"avatarsGetBrowser","tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#getSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getBrowser","weight":59,"cookies":false,"type":"location","deprecated":false,"demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"schema":{"type":"string","x-example":"aa","enum":["aa","an","ch","ci","cm","cr","ff","sf","mf","ps","oi","om","op","on"],"x-enum-name":"Browser","x-enum-keys":["Avant Browser","Android WebView Beta","Google Chrome","Google Chrome (iOS)","Google Chrome (Mobile)","Chromium","Mozilla Firefox","Safari","Mobile Safari","Microsoft Edge","Microsoft Edge (iOS)","Opera Mini","Opera","Opera (Next)"]},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get credit card icon","operationId":"avatarsGetCreditCard","tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getCreditCard","weight":58,"cookies":false,"type":"location","deprecated":false,"demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, censosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"schema":{"type":"string","x-example":"amex","enum":["amex","argencard","cabal","censosud","diners","discover","elo","hipercard","jcb","mastercard","naranja","targeta-shopping","union-china-pay","visa","mir","maestro"],"x-enum-name":"CreditCard","x-enum-keys":["American Express","Argencard","Cabal","Consosud","Diners Club","Discover","Elo","Hipercard","JCB","Mastercard","Naranja","Tarjeta Shopping","Union China Pay","Visa","MIR","Maestro"]},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get favicon","operationId":"avatarsGetFavicon","tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFavicon","weight":62,"cookies":false,"type":"location","deprecated":false,"demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get country flag","operationId":"avatarsGetFlag","tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](https:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFlag","weight":60,"cookies":false,"type":"location","deprecated":false,"demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"schema":{"type":"string","x-example":"af","enum":["af","ao","al","ad","ae","ar","am","ag","au","at","az","bi","be","bj","bf","bd","bg","bh","bs","ba","by","bz","bo","br","bb","bn","bt","bw","cf","ca","ch","cl","cn","ci","cm","cd","cg","co","km","cv","cr","cu","cy","cz","de","dj","dm","dk","do","dz","ec","eg","er","es","ee","et","fi","fj","fr","fm","ga","gb","ge","gh","gn","gm","gw","gq","gr","gd","gt","gy","hn","hr","ht","hu","id","in","ie","ir","iq","is","il","it","jm","jo","jp","kz","ke","kg","kh","ki","kn","kr","kw","la","lb","lr","ly","lc","li","lk","ls","lt","lu","lv","ma","mc","md","mg","mv","mx","mh","mk","ml","mt","mm","me","mn","mz","mr","mu","mw","my","na","ne","ng","ni","nl","no","np","nr","nz","om","pk","pa","pe","ph","pw","pg","pl","pf","kp","pt","py","qa","ro","ru","rw","sa","sd","sn","sg","sb","sl","sv","sm","so","rs","ss","st","sr","sk","si","se","sz","sc","sy","td","tg","th","tj","tm","tl","to","tt","tn","tr","tv","tz","ug","ua","uy","us","uz","va","vc","ve","vn","vu","ws","ye","za","zm","zw"],"x-enum-name":"Flag","x-enum-keys":["Afghanistan","Angola","Albania","Andorra","United Arab Emirates","Argentina","Armenia","Antigua and Barbuda","Australia","Austria","Azerbaijan","Burundi","Belgium","Benin","Burkina Faso","Bangladesh","Bulgaria","Bahrain","Bahamas","Bosnia and Herzegovina","Belarus","Belize","Bolivia","Brazil","Barbados","Brunei Darussalam","Bhutan","Botswana","Central African Republic","Canada","Switzerland","Chile","China","C\u00f4te d'Ivoire","Cameroon","Democratic Republic of the Congo","Republic of the Congo","Colombia","Comoros","Cape Verde","Costa Rica","Cuba","Cyprus","Czech Republic","Germany","Djibouti","Dominica","Denmark","Dominican Republic","Algeria","Ecuador","Egypt","Eritrea","Spain","Estonia","Ethiopia","Finland","Fiji","France","Micronesia (Federated States of)","Gabon","United Kingdom","Georgia","Ghana","Guinea","Gambia","Guinea-Bissau","Equatorial Guinea","Greece","Grenada","Guatemala","Guyana","Honduras","Croatia","Haiti","Hungary","Indonesia","India","Ireland","Iran (Islamic Republic of)","Iraq","Iceland","Israel","Italy","Jamaica","Jordan","Japan","Kazakhstan","Kenya","Kyrgyzstan","Cambodia","Kiribati","Saint Kitts and Nevis","South Korea","Kuwait","Lao People's Democratic Republic","Lebanon","Liberia","Libya","Saint Lucia","Liechtenstein","Sri Lanka","Lesotho","Lithuania","Luxembourg","Latvia","Morocco","Monaco","Moldova","Madagascar","Maldives","Mexico","Marshall Islands","North Macedonia","Mali","Malta","Myanmar","Montenegro","Mongolia","Mozambique","Mauritania","Mauritius","Malawi","Malaysia","Namibia","Niger","Nigeria","Nicaragua","Netherlands","Norway","Nepal","Nauru","New Zealand","Oman","Pakistan","Panama","Peru","Philippines","Palau","Papua New Guinea","Poland","French Polynesia","North Korea","Portugal","Paraguay","Qatar","Romania","Russia","Rwanda","Saudi Arabia","Sudan","Senegal","Singapore","Solomon Islands","Sierra Leone","El Salvador","San Marino","Somalia","Serbia","South Sudan","Sao Tome and Principe","Suriname","Slovakia","Slovenia","Sweden","Eswatini","Seychelles","Syria","Chad","Togo","Thailand","Tajikistan","Turkmenistan","Timor-Leste","Tonga","Trinidad and Tobago","Tunisia","Turkey","Tuvalu","Tanzania","Uganda","Ukraine","Uruguay","United States","Uzbekistan","Vatican City","Saint Vincent and the Grenadines","Venezuela","Vietnam","Vanuatu","Samoa","Yemen","South Africa","Zambia","Zimbabwe"]},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get image from URL","operationId":"avatarsGetImage","tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getImage","weight":61,"cookies":false,"type":"location","deprecated":false,"demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get user initials","operationId":"avatarsGetInitials","tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getInitials","weight":64,"cookies":false,"type":"location","deprecated":false,"demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"schema":{"type":"string","x-example":"","default":""},"in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"schema":{"type":"string","default":""},"in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR code","operationId":"avatarsGetQR","tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getQR","weight":63,"cookies":false,"type":"location","deprecated":false,"demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"schema":{"type":"string","x-example":""},"in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":1,"default":400},"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":1},"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"schema":{"type":"boolean","x-example":false,"default":false},"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List documents","operationId":"databasesListDocuments","tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/documentList"}}}}},"x-appwrite":{"method":"listDocuments","weight":108,"cookies":false,"type":"","deprecated":false,"demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/databases\/{databaseId}\/collections\/{collectionId}\/documents","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"post":{"summary":"Create document","operationId":"databasesCreateDocument","tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"createDocument","weight":107,"cookies":false,"type":"","deprecated":false,"demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"offline-model":"\/databases\/{databaseId}\/collections\/{collectionId}\/documents","offline-key":"{documentId}","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":""},"data":{"type":"object","description":"Document data as JSON object.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default, only the current user is granted all permissions. [Learn more about permissions](https:\/\/appwrite.io\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get document","operationId":"databasesGetDocument","tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"getDocument","weight":109,"cookies":false,"type":"","deprecated":false,"demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/databases\/{databaseId}\/collections\/{collectionId}\/documents","offline-key":"{documentId}","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"patch":{"summary":"Update document","operationId":"databasesUpdateDocument","tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"updateDocument","weight":111,"cookies":false,"type":"","deprecated":false,"demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"offline-model":"\/databases\/{databaseId}\/collections\/{collectionId}\/documents","offline-key":"{documentId}","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default, the current permissions are inherited. [Learn more about permissions](https:\/\/appwrite.io\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete document","operationId":"databasesDeleteDocument","tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":112,"cookies":false,"type":"","deprecated":false,"demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"offline-model":"\/databases\/{databaseId}\/collections\/{collectionId}\/documents","offline-key":"{documentId}","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List executions","operationId":"functionsListExecutions","tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/executionList"}}}}},"x-appwrite":{"method":"listExecutions","weight":297,"cookies":false,"type":"","deprecated":false,"demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, responseStatusCode, duration","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"","default":""},"in":"query"}]},"post":{"summary":"Create execution","operationId":"functionsCreateExecution","tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"createExecution","weight":296,"cookies":false,"type":"","deprecated":false,"demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"body":{"type":"string","description":"HTTP body of execution. Default value is empty string.","x-example":""},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","x-example":false},"path":{"type":"string","description":"HTTP path of execution. Path can include query params. Default value is \/","x-example":""},"method":{"type":"string","description":"HTTP method of execution. Default value is GET.","x-example":"GET","enum":["GET","POST","PUT","PATCH","DELETE","OPTIONS"],"x-enum-name":"ExecutionMethod","x-enum-keys":[]},"headers":{"type":"object","description":"HTTP headers of execution. Defaults to empty.","x-example":"{}"}}}}}}}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get execution","operationId":"functionsGetExecution","tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"getExecution","weight":298,"cookies":false,"type":"","deprecated":false,"demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]}},"\/graphql":{"post":{"summary":"GraphQL endpoint","operationId":"graphqlQuery","tags":["graphql"],"description":"Execute a GraphQL mutation.","responses":{"200":{"description":"Any","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/any"}}}}},"x-appwrite":{"method":"query","weight":318,"cookies":false,"type":"graphql","deprecated":false,"demo":"graphql\/query.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/graphql\/post.md","rate-limit":60,"rate-time":60,"rate-key":"url:{url},ip:{ip}","scope":"graphql","platforms":["server","client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/graphql\/mutation":{"post":{"summary":"GraphQL endpoint","operationId":"graphqlMutation","tags":["graphql"],"description":"Execute a GraphQL mutation.","responses":{"200":{"description":"Any","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/any"}}}}},"x-appwrite":{"method":"mutation","weight":317,"cookies":false,"type":"graphql","deprecated":false,"demo":"graphql\/mutation.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/graphql\/post.md","rate-limit":60,"rate-time":60,"rate-key":"url:{url},ip:{ip}","scope":"graphql","platforms":["server","client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/locale":{"get":{"summary":"Get user locale","operationId":"localeGet","tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/locale"}}}}},"x-appwrite":{"method":"get","weight":116,"cookies":false,"type":"","deprecated":false,"demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/localed","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/locale\/codes":{"get":{"summary":"List Locale Codes","operationId":"localeListCodes","tags":["locale"],"description":"List of all locale codes in [ISO 639-1](https:\/\/en.wikipedia.org\/wiki\/List_of_ISO_639-1_codes).","responses":{"200":{"description":"Locale codes list","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/localeCodeList"}}}}},"x-appwrite":{"method":"listCodes","weight":117,"cookies":false,"type":"","deprecated":false,"demo":"locale\/list-codes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-locale-codes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/locale\/localeCode","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List continents","operationId":"localeListContinents","tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/continentList"}}}}},"x-appwrite":{"method":"listContinents","weight":121,"cookies":false,"type":"","deprecated":false,"demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/locale\/continents","offline-key":"","offline-response-key":"code","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List countries","operationId":"localeListCountries","tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountries","weight":118,"cookies":false,"type":"","deprecated":false,"demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/locale\/countries","offline-key":"","offline-response-key":"code","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU countries","operationId":"localeListCountriesEU","tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountriesEU","weight":119,"cookies":false,"type":"","deprecated":false,"demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/locale\/countries\/eu","offline-key":"","offline-response-key":"code","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List countries phone codes","operationId":"localeListCountriesPhones","tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/phoneList"}}}}},"x-appwrite":{"method":"listCountriesPhones","weight":120,"cookies":false,"type":"","deprecated":false,"demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/locale\/countries\/phones","offline-key":"","offline-response-key":"countryCode","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List currencies","operationId":"localeListCurrencies","tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/currencyList"}}}}},"x-appwrite":{"method":"listCurrencies","weight":122,"cookies":false,"type":"","deprecated":false,"demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/locale\/currencies","offline-key":"","offline-response-key":"code","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List languages","operationId":"localeListLanguages","tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/languageList"}}}}},"x-appwrite":{"method":"listLanguages","weight":123,"cookies":false,"type":"","deprecated":false,"demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/locale\/languages","offline-key":"","offline-response-key":"code","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/messaging\/topics\/{topicId}\/subscribers":{"post":{"summary":"Create subscriber","operationId":"messagingCreateSubscriber","tags":["messaging"],"description":"Create a new subscriber.","responses":{"201":{"description":"Subscriber","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/subscriber"}}}}},"x-appwrite":{"method":"createSubscriber","weight":369,"cookies":false,"type":"","deprecated":false,"demo":"messaging\/create-subscriber.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/messaging\/create-subscriber.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"subscribers.write","platforms":["server","client","console","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"JWT":[],"Session":[]}],"parameters":[{"name":"topicId","description":"Topic ID. The topic ID to subscribe to.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"subscriberId":{"type":"string","description":"Subscriber ID. Choose a custom Subscriber ID or a new Subscriber ID.","x-example":""},"targetId":{"type":"string","description":"Target ID. The target ID to link to the specified Topic ID.","x-example":""}},"required":["subscriberId","targetId"]}}}}}},"\/messaging\/topics\/{topicId}\/subscribers\/{subscriberId}":{"delete":{"summary":"Delete subscriber","operationId":"messagingDeleteSubscriber","tags":["messaging"],"description":"Delete a subscriber by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSubscriber","weight":373,"cookies":false,"type":"","deprecated":false,"demo":"messaging\/delete-subscriber.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/messaging\/delete-subscriber.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"subscribers.write","platforms":["server","client","console","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"JWT":[],"Session":[]}],"parameters":[{"name":"topicId","description":"Topic ID. The topic ID subscribed to.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"subscriberId","description":"Subscriber ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List files","operationId":"storageListFiles","tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/fileList"}}}}},"x-appwrite":{"method":"listFiles","weight":203,"cookies":false,"type":"","deprecated":false,"demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](https:\/\/appwrite.io\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"","default":""},"in":"query"}]},"post":{"summary":"Create file","operationId":"storageCreateFile","tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"createFile","weight":202,"cookies":false,"type":"upload","deprecated":false,"demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId},chunkId:{chunkId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](https:\/\/appwrite.io\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":""},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"File ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":"","x-upload-id":true},"file":{"type":"string","description":"Binary file. Appwrite SDKs provide helpers to handle file input. [Learn about file input](https:\/\/appwrite.io\/docs\/storage#file-input).","x-example":null},"permissions":{"type":"array","description":"An array of permission strings. By default, only the current user is granted all permissions. [Learn more about permissions](https:\/\/appwrite.io\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["fileId","file"]}}}}}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get file","operationId":"storageGetFile","tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"getFile","weight":204,"cookies":false,"type":"","deprecated":false,"demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](https:\/\/appwrite.io\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]},"put":{"summary":"Update file","operationId":"storageUpdateFile","tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"updateFile","weight":209,"cookies":false,"type":"","deprecated":false,"demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](https:\/\/appwrite.io\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Name of the file","x-example":""},"permissions":{"type":"array","description":"An array of permission string. By default, the current permissions are inherited. [Learn more about permissions](https:\/\/appwrite.io\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":210,"cookies":false,"type":"","deprecated":false,"demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](https:\/\/appwrite.io\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get file for download","operationId":"storageGetFileDownload","tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileDownload","weight":206,"cookies":false,"type":"location","deprecated":false,"demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](https:\/\/appwrite.io\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get file preview","operationId":"storageGetFilePreview","tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFilePreview","weight":205,"cookies":false,"type":"location","deprecated":false,"demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](https:\/\/appwrite.io\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"fileId","description":"File ID","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"schema":{"type":"string","x-example":"center","enum":["center","top-left","top","top-right","left","right","bottom-left","bottom","bottom-right"],"x-enum-name":"ImageGravity","x-enum-keys":[],"default":"center"},"in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"schema":{"type":"number","format":"float","x-example":0,"default":1},"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"schema":{"type":"integer","format":"int32","x-example":-360,"default":0},"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"schema":{"type":"string","x-example":"jpg","enum":["jpg","jpeg","gif","png","webp"],"x-enum-name":"ImageFormat","x-enum-keys":[],"default":""},"in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get file for view","operationId":"storageGetFileView","tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileView","weight":207,"cookies":false,"type":"location","deprecated":false,"demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](https:\/\/appwrite.io\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]}},"\/teams":{"get":{"summary":"List teams","operationId":"teamsList","tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/teamList"}}}}},"x-appwrite":{"method":"list","weight":214,"cookies":false,"type":"","deprecated":false,"demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/teams","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total, billingPlan","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"","default":""},"in":"query"}]},"post":{"summary":"Create team","operationId":"teamsCreate","tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"create","weight":213,"cookies":false,"type":"","deprecated":false,"demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":""},"name":{"type":"string","description":"Team name. Max length: 128 chars.","x-example":""},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}}}}},"\/teams\/{teamId}":{"get":{"summary":"Get team","operationId":"teamsGet","tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"get","weight":215,"cookies":false,"type":"","deprecated":false,"demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/teams","offline-key":"{teamId}","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]},"put":{"summary":"Update name","operationId":"teamsUpdateName","tags":["teams"],"description":"Update the team's name by its unique ID.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"updateName","weight":217,"cookies":false,"type":"","deprecated":false,"demo":"teams\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"offline-model":"\/teams","offline-key":"{teamId}","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","x-example":""}},"required":["name"]}}}}},"delete":{"summary":"Delete team","operationId":"teamsDelete","tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":219,"cookies":false,"type":"","deprecated":false,"demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List team memberships","operationId":"teamsListMemberships","tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":221,"cookies":false,"type":"","deprecated":false,"demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/teams\/{teamId}\/memberships","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"","default":""},"in":"query"}]},"post":{"summary":"Create team membership","operationId":"teamsCreateMembership","tags":["teams"],"description":"Invite a new member to join your team. Provide an ID for existing users, or invite unregistered users using an email or phone number. If initiated from a Client SDK, Appwrite will send an email or sms with a link to join the team to the invited user, and an account will be created for them if one doesn't exist. If initiated from a Server SDK, the new member will be added automatically to the team.\n\nYou only need to provide one of a user ID, email, or phone number. Appwrite will prioritize accepting the user ID > email > phone number if you provide more than one of these parameters.\n\nUse the `url` parameter to redirect the user from the invitation email to your app. After the user is redirected, use the [Update Team Membership Status](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/teams#updateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) Appwrite will accept the only redirect URLs under the domains you have added as a platform on the Appwrite Console.\n","responses":{"201":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"createMembership","weight":220,"cookies":false,"type":"","deprecated":false,"demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","x-example":"email@example.com"},"userId":{"type":"string","description":"ID of the user to be added to a team.","x-example":""},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","x-example":""}},"required":["roles"]}}}}}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get team membership","operationId":"teamsGetMembership","tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"getMembership","weight":222,"cookies":false,"type":"","deprecated":false,"demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/teams\/{teamId}\/memberships","offline-key":"{membershipId}","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]},"patch":{"summary":"Update membership","operationId":"teamsUpdateMembership","tags":["teams"],"description":"Modify the roles of a team member. Only team members with the owner role have access to this endpoint. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions).\n","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembership","weight":223,"cookies":false,"type":"","deprecated":false,"demo":"teams\/update-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","description":"An array of strings. Use this param to set the user's roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["roles"]}}}}},"delete":{"summary":"Delete team membership","operationId":"teamsDeleteMembership","tags":["teams"],"description":"This endpoint allows a user to leave a team or for a team owner to delete the membership of any other team member. You can also use this endpoint to delete a user membership even if it is not accepted.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMembership","weight":225,"cookies":false,"type":"","deprecated":false,"demo":"teams\/delete-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team-membership.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]}},"\/teams\/{teamId}\/memberships\/{membershipId}\/status":{"patch":{"summary":"Update team membership status","operationId":"teamsUpdateMembershipStatus","tags":["teams"],"description":"Use this endpoint to allow a user to accept an invitation to join a team after being redirected back to your app from the invitation email received by the user.\n\nIf the request is successful, a session for the user is automatically created.\n","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"updateMembershipStatus","weight":224,"cookies":false,"type":"","deprecated":false,"demo":"teams\/update-membership-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-membership-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"public","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":""},"secret":{"type":"string","description":"Secret key.","x-example":""}},"required":["userId","secret"]}}}}}},"\/teams\/{teamId}\/prefs":{"get":{"summary":"Get team preferences","operationId":"teamsGetPrefs","tags":["teams"],"description":"Get the team's shared preferences by its unique ID. If a preference doesn't need to be shared by all team members, prefer storing them in [user preferences](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#getPrefs).","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":216,"cookies":false,"type":"","deprecated":false,"demo":"teams\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server"],"packaging":false,"offline-model":"\/teams\/{teamId}\/prefs","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]},"put":{"summary":"Update preferences","operationId":"teamsUpdatePrefs","tags":["teams"],"description":"Update the team's preferences by its unique ID. The object you pass is stored as is and replaces any previous value. The maximum allowed prefs size is 64kB and throws an error if exceeded.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"updatePrefs","weight":218,"cookies":false,"type":"","deprecated":false,"demo":"teams\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server"],"packaging":false,"offline-model":"\/teams\/{teamId}\/prefs","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}}},"tags":[{"name":"account","description":"The Account service allows you to authenticate and manage a user account.","x-globalAttributes":[]},{"name":"avatars","description":"The Avatars service aims to help you complete everyday tasks related to your app image, icons, and avatars.","x-globalAttributes":[]},{"name":"databases","description":"The Databases service allows you to create structured collections of documents, query and filter lists of documents","x-globalAttributes":["databaseId"]},{"name":"locale","description":"The Locale service allows you to customize your app based on your users' location.","x-globalAttributes":[]},{"name":"health","description":"The Health service allows you to both validate and monitor your Appwrite server's health.","x-globalAttributes":[]},{"name":"projects","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"project","description":"The Project service allows you to manage all the projects in your Appwrite server.","x-globalAttributes":[]},{"name":"storage","description":"The Storage service allows you to manage your project files.","x-globalAttributes":[]},{"name":"teams","description":"The Teams service allows you to group users of your project and to enable them to share read and write access to your project resources","x-globalAttributes":[]},{"name":"users","description":"The Users service allows you to manage your project users.","x-globalAttributes":[]},{"name":"functions","description":"The Functions Service allows you view, create and manage your Cloud Functions.","x-globalAttributes":[]},{"name":"proxy","description":"The Proxy Service allows you to configure actions for your domains beyond DNS configuration.","x-globalAttributes":[]},{"name":"graphql","description":"The GraphQL API allows you to query and mutate your Appwrite server using GraphQL.","x-globalAttributes":[]},{"name":"console","description":"The Console service allows you to interact with console relevant informations.","x-globalAttributes":[]},{"name":"migrations","description":"The Migrations service allows you to migrate third-party data to your Appwrite project.","x-globalAttributes":[]},{"name":"messaging","description":"The Messaging service allows you to send messages to any provider type (SMTP, push notification, SMS, etc.).","x-globalAttributes":[]}],"components":{"schemas":{"any":{"description":"Any","type":"object","additionalProperties":true},"error":{"description":"Error","type":"object","properties":{"message":{"type":"string","description":"Error message.","x-example":"Not found"},"code":{"type":"string","description":"Error code.","x-example":"404"},"type":{"type":"string","description":"Error type. You can learn more about all the error types at https:\/\/appwrite.io\/docs\/error-codes#errorTypes","x-example":"not_found"},"version":{"type":"string","description":"Server version number.","x-example":"1.0"}},"required":["message","code","type","version"]},"documentList":{"description":"Documents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of documents documents that matched your query.","x-example":5,"format":"int32"},"documents":{"type":"array","description":"List of documents.","items":{"$ref":"#\/components\/schemas\/document"},"x-example":""}},"required":["total","documents"]},"sessionList":{"description":"Sessions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of sessions documents that matched your query.","x-example":5,"format":"int32"},"sessions":{"type":"array","description":"List of sessions.","items":{"$ref":"#\/components\/schemas\/session"},"x-example":""}},"required":["total","sessions"]},"identityList":{"description":"Identities List","type":"object","properties":{"total":{"type":"integer","description":"Total number of identities documents that matched your query.","x-example":5,"format":"int32"},"identities":{"type":"array","description":"List of identities.","items":{"$ref":"#\/components\/schemas\/identity"},"x-example":""}},"required":["total","identities"]},"logList":{"description":"Logs List","type":"object","properties":{"total":{"type":"integer","description":"Total number of logs documents that matched your query.","x-example":5,"format":"int32"},"logs":{"type":"array","description":"List of logs.","items":{"$ref":"#\/components\/schemas\/log"},"x-example":""}},"required":["total","logs"]},"fileList":{"description":"Files List","type":"object","properties":{"total":{"type":"integer","description":"Total number of files documents that matched your query.","x-example":5,"format":"int32"},"files":{"type":"array","description":"List of files.","items":{"$ref":"#\/components\/schemas\/file"},"x-example":""}},"required":["total","files"]},"teamList":{"description":"Teams List","type":"object","properties":{"total":{"type":"integer","description":"Total number of teams documents that matched your query.","x-example":5,"format":"int32"},"teams":{"type":"array","description":"List of teams.","items":{"$ref":"#\/components\/schemas\/team"},"x-example":""}},"required":["total","teams"]},"membershipList":{"description":"Memberships List","type":"object","properties":{"total":{"type":"integer","description":"Total number of memberships documents that matched your query.","x-example":5,"format":"int32"},"memberships":{"type":"array","description":"List of memberships.","items":{"$ref":"#\/components\/schemas\/membership"},"x-example":""}},"required":["total","memberships"]},"executionList":{"description":"Executions List","type":"object","properties":{"total":{"type":"integer","description":"Total number of executions documents that matched your query.","x-example":5,"format":"int32"},"executions":{"type":"array","description":"List of executions.","items":{"$ref":"#\/components\/schemas\/execution"},"x-example":""}},"required":["total","executions"]},"countryList":{"description":"Countries List","type":"object","properties":{"total":{"type":"integer","description":"Total number of countries documents that matched your query.","x-example":5,"format":"int32"},"countries":{"type":"array","description":"List of countries.","items":{"$ref":"#\/components\/schemas\/country"},"x-example":""}},"required":["total","countries"]},"continentList":{"description":"Continents List","type":"object","properties":{"total":{"type":"integer","description":"Total number of continents documents that matched your query.","x-example":5,"format":"int32"},"continents":{"type":"array","description":"List of continents.","items":{"$ref":"#\/components\/schemas\/continent"},"x-example":""}},"required":["total","continents"]},"languageList":{"description":"Languages List","type":"object","properties":{"total":{"type":"integer","description":"Total number of languages documents that matched your query.","x-example":5,"format":"int32"},"languages":{"type":"array","description":"List of languages.","items":{"$ref":"#\/components\/schemas\/language"},"x-example":""}},"required":["total","languages"]},"currencyList":{"description":"Currencies List","type":"object","properties":{"total":{"type":"integer","description":"Total number of currencies documents that matched your query.","x-example":5,"format":"int32"},"currencies":{"type":"array","description":"List of currencies.","items":{"$ref":"#\/components\/schemas\/currency"},"x-example":""}},"required":["total","currencies"]},"phoneList":{"description":"Phones List","type":"object","properties":{"total":{"type":"integer","description":"Total number of phones documents that matched your query.","x-example":5,"format":"int32"},"phones":{"type":"array","description":"List of phones.","items":{"$ref":"#\/components\/schemas\/phone"},"x-example":""}},"required":["total","phones"]},"localeCodeList":{"description":"Locale codes list","type":"object","properties":{"total":{"type":"integer","description":"Total number of localeCodes documents that matched your query.","x-example":5,"format":"int32"},"localeCodes":{"type":"array","description":"List of localeCodes.","items":{"$ref":"#\/components\/schemas\/localeCode"},"x-example":""}},"required":["total","localeCodes"]},"document":{"description":"Document","type":"object","properties":{"$id":{"type":"string","description":"Document ID.","x-example":"5e5ea5c16897e"},"$collectionId":{"type":"string","description":"Collection ID.","x-example":"5e5ea5c15117e"},"$databaseId":{"type":"string","description":"Database ID.","x-example":"5e5ea5c15117e"},"$createdAt":{"type":"string","description":"Document creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Document update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Document permissions. [Learn more about permissions](https:\/\/appwrite.io\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]}},"additionalProperties":true,"required":["$id","$collectionId","$databaseId","$createdAt","$updatedAt","$permissions"]},"log":{"description":"Log","type":"object","properties":{"event":{"type":"string","description":"Event name.","x-example":"account.sessions.create"},"userId":{"type":"string","description":"User ID.","x-example":"610fc2f985ee0"},"userEmail":{"type":"string","description":"User Email.","x-example":"john@appwrite.io"},"userName":{"type":"string","description":"User Name.","x-example":"John Doe"},"mode":{"type":"string","description":"API mode when event triggered.","x-example":"admin"},"ip":{"type":"string","description":"IP session in use when the session was created.","x-example":"127.0.0.1"},"time":{"type":"string","description":"Log creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["event","userId","userEmail","userName","mode","ip","time","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName"]},"user":{"description":"User","type":"object","properties":{"$id":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"User creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"User update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"User name.","x-example":"John Doe"},"password":{"type":"string","description":"Hashed user password.","x-example":"$argon2id$v=19$m=2048,t=4,p=3$aUZjLnliVWRINmFNTWMudg$5S+x+7uA31xFnrHFT47yFwcJeaP0w92L\/4LdgrVRXxE","nullable":true},"hash":{"type":"string","description":"Password hashing algorithm.","x-example":"argon2","nullable":true},"hashOptions":{"type":"object","description":"Password hashing algorithm configuration.","x-example":{},"items":{"oneOf":[{"$ref":"#\/components\/schemas\/algoArgon2"},{"$ref":"#\/components\/schemas\/algoScrypt"},{"$ref":"#\/components\/schemas\/algoScryptModified"},{"$ref":"#\/components\/schemas\/algoBcrypt"},{"$ref":"#\/components\/schemas\/algoPhpass"},{"$ref":"#\/components\/schemas\/algoSha"},{"$ref":"#\/components\/schemas\/algoMd5"}]},"nullable":true},"registration":{"type":"string","description":"User registration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"status":{"type":"boolean","description":"User status. Pass `true` for enabled and `false` for disabled.","x-example":true},"labels":{"type":"array","description":"Labels for the user.","items":{"type":"string"},"x-example":["vip"]},"passwordUpdate":{"type":"string","description":"Password update time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"email":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"phone":{"type":"string","description":"User phone number in E.164 format.","x-example":"+4930901820"},"emailVerification":{"type":"boolean","description":"Email verification status.","x-example":true},"phoneVerification":{"type":"boolean","description":"Phone verification status.","x-example":true},"mfa":{"type":"boolean","description":"Multi factor authentication status.","x-example":true},"prefs":{"type":"object","description":"User preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}},"targets":{"type":"array","description":"A user-owned message receiver. A single user may have multiple e.g. emails, phones, and a browser. Each target is registered with a single provider.","items":{"$ref":"#\/components\/schemas\/target"},"x-example":[]},"accessedAt":{"type":"string","description":"Most recent access date in ISO 8601 format. This attribute is only updated again after 24 hours.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","$updatedAt","name","registration","status","labels","passwordUpdate","email","phone","emailVerification","phoneVerification","mfa","prefs","targets","accessedAt"]},"algoMd5":{"description":"AlgoMD5","type":"object","properties":{"type":{"type":"string","description":"Algo type.","x-example":"md5"}},"required":["type"]},"algoSha":{"description":"AlgoSHA","type":"object","properties":{"type":{"type":"string","description":"Algo type.","x-example":"sha"}},"required":["type"]},"algoPhpass":{"description":"AlgoPHPass","type":"object","properties":{"type":{"type":"string","description":"Algo type.","x-example":"phpass"}},"required":["type"]},"algoBcrypt":{"description":"AlgoBcrypt","type":"object","properties":{"type":{"type":"string","description":"Algo type.","x-example":"bcrypt"}},"required":["type"]},"algoScrypt":{"description":"AlgoScrypt","type":"object","properties":{"type":{"type":"string","description":"Algo type.","x-example":"scrypt"},"costCpu":{"type":"integer","description":"CPU complexity of computed hash.","x-example":8,"format":"int32"},"costMemory":{"type":"integer","description":"Memory complexity of computed hash.","x-example":14,"format":"int32"},"costParallel":{"type":"integer","description":"Parallelization of computed hash.","x-example":1,"format":"int32"},"length":{"type":"integer","description":"Length used to compute hash.","x-example":64,"format":"int32"}},"required":["type","costCpu","costMemory","costParallel","length"]},"algoScryptModified":{"description":"AlgoScryptModified","type":"object","properties":{"type":{"type":"string","description":"Algo type.","x-example":"scryptMod"},"salt":{"type":"string","description":"Salt used to compute hash.","x-example":"UxLMreBr6tYyjQ=="},"saltSeparator":{"type":"string","description":"Separator used to compute hash.","x-example":"Bw=="},"signerKey":{"type":"string","description":"Key used to compute hash.","x-example":"XyEKE9RcTDeLEsL\/RjwPDBv\/RqDl8fb3gpYEOQaPihbxf1ZAtSOHCjuAAa7Q3oHpCYhXSN9tizHgVOwn6krflQ=="}},"required":["type","salt","saltSeparator","signerKey"]},"algoArgon2":{"description":"AlgoArgon2","type":"object","properties":{"type":{"type":"string","description":"Algo type.","x-example":"argon2"},"memoryCost":{"type":"integer","description":"Memory used to compute hash.","x-example":65536,"format":"int32"},"timeCost":{"type":"integer","description":"Amount of time consumed to compute hash","x-example":4,"format":"int32"},"threads":{"type":"integer","description":"Number of threads used to compute hash.","x-example":3,"format":"int32"}},"required":["type","memoryCost","timeCost","threads"]},"preferences":{"description":"Preferences","type":"object","additionalProperties":true},"session":{"description":"Session","type":"object","properties":{"$id":{"type":"string","description":"Session ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Session creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Session update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"expire":{"type":"string","description":"Session expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"provider":{"type":"string","description":"Session Provider.","x-example":"email"},"providerUid":{"type":"string","description":"Session Provider User ID.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Session Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Session Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"ip":{"type":"string","description":"IP in use when the session was created.","x-example":"127.0.0.1"},"osCode":{"type":"string","description":"Operating system code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/os.json).","x-example":"Mac"},"osName":{"type":"string","description":"Operating system name.","x-example":"Mac"},"osVersion":{"type":"string","description":"Operating system version.","x-example":"Mac"},"clientType":{"type":"string","description":"Client type.","x-example":"browser"},"clientCode":{"type":"string","description":"Client code name. View list of [available options](https:\/\/github.com\/appwrite\/appwrite\/blob\/master\/docs\/lists\/clients.json).","x-example":"CM"},"clientName":{"type":"string","description":"Client name.","x-example":"Chrome Mobile iOS"},"clientVersion":{"type":"string","description":"Client version.","x-example":"84.0"},"clientEngine":{"type":"string","description":"Client engine name.","x-example":"WebKit"},"clientEngineVersion":{"type":"string","description":"Client engine name.","x-example":"605.1.15"},"deviceName":{"type":"string","description":"Device name.","x-example":"smartphone"},"deviceBrand":{"type":"string","description":"Device brand name.","x-example":"Google"},"deviceModel":{"type":"string","description":"Device model name.","x-example":"Nexus 5"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"},"current":{"type":"boolean","description":"Returns true if this the current user session.","x-example":true},"factors":{"type":"array","description":"Returns a list of active session factors.","items":{"type":"string"},"x-example":["email"]},"secret":{"type":"string","description":"Secret used to authenticate the user. Only included if the request was made with an API key","x-example":"5e5bb8c16897e"},"mfaUpdatedAt":{"type":"string","description":"Most recent date in ISO 8601 format when the session successfully passed MFA challenge.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","$updatedAt","userId","expire","provider","providerUid","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken","ip","osCode","osName","osVersion","clientType","clientCode","clientName","clientVersion","clientEngine","clientEngineVersion","deviceName","deviceBrand","deviceModel","countryCode","countryName","current","factors","secret","mfaUpdatedAt"]},"identity":{"description":"Identity","type":"object","properties":{"$id":{"type":"string","description":"Identity ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Identity creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Identity update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5bb8c16897e"},"provider":{"type":"string","description":"Identity Provider.","x-example":"email"},"providerUid":{"type":"string","description":"ID of the User in the Identity Provider.","x-example":"5e5bb8c16897e"},"providerEmail":{"type":"string","description":"Email of the User in the Identity Provider.","x-example":"user@example.com"},"providerAccessToken":{"type":"string","description":"Identity Provider Access Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"},"providerAccessTokenExpiry":{"type":"string","description":"The date of when the access token expires in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"providerRefreshToken":{"type":"string","description":"Identity Provider Refresh Token.","x-example":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3"}},"required":["$id","$createdAt","$updatedAt","userId","provider","providerUid","providerEmail","providerAccessToken","providerAccessTokenExpiry","providerRefreshToken"]},"token":{"description":"Token","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"secret":{"type":"string","description":"Token secret key. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"phrase":{"type":"string","description":"Security phrase of a token. Empty if security phrase was not requested when creating a token. It includes randomly generated phrase which is also sent in the external resource such as email.","x-example":"Golden Fox"}},"required":["$id","$createdAt","userId","secret","expire","phrase"]},"jwt":{"description":"JWT","type":"object","properties":{"jwt":{"type":"string","description":"JWT encoded string.","x-example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"}},"required":["jwt"]},"locale":{"description":"Locale","type":"object","properties":{"ip":{"type":"string","description":"User IP address.","x-example":"127.0.0.1"},"countryCode":{"type":"string","description":"Country code in [ISO 3166-1](http:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) two-character format","x-example":"US"},"country":{"type":"string","description":"Country name. This field support localization.","x-example":"United States"},"continentCode":{"type":"string","description":"Continent code. A two character continent code \"AF\" for Africa, \"AN\" for Antarctica, \"AS\" for Asia, \"EU\" for Europe, \"NA\" for North America, \"OC\" for Oceania, and \"SA\" for South America.","x-example":"NA"},"continent":{"type":"string","description":"Continent name. This field support localization.","x-example":"North America"},"eu":{"type":"boolean","description":"True if country is part of the European Union.","x-example":false},"currency":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format","x-example":"USD"}},"required":["ip","countryCode","country","continentCode","continent","eu","currency"]},"localeCode":{"description":"LocaleCode","type":"object","properties":{"code":{"type":"string","description":"Locale codes in [ISO 639-1](https:\/\/en.wikipedia.org\/wiki\/List_of_ISO_639-1_codes)","x-example":"en-us"},"name":{"type":"string","description":"Locale name","x-example":"US"}},"required":["code","name"]},"file":{"description":"File","type":"object","properties":{"$id":{"type":"string","description":"File ID.","x-example":"5e5ea5c16897e"},"bucketId":{"type":"string","description":"Bucket ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"File creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"File update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"File permissions. [Learn more about permissions](https:\/\/appwrite.io\/docs\/permissions).","items":{"type":"string"},"x-example":["read(\"any\")"]},"name":{"type":"string","description":"File name.","x-example":"Pink.png"},"signature":{"type":"string","description":"File MD5 signature.","x-example":"5d529fd02b544198ae075bd57c1762bb"},"mimeType":{"type":"string","description":"File mime type.","x-example":"image\/png"},"sizeOriginal":{"type":"integer","description":"File original size in bytes.","x-example":17890,"format":"int32"},"chunksTotal":{"type":"integer","description":"Total number of chunks available","x-example":17890,"format":"int32"},"chunksUploaded":{"type":"integer","description":"Total number of chunks uploaded","x-example":17890,"format":"int32"}},"required":["$id","bucketId","$createdAt","$updatedAt","$permissions","name","signature","mimeType","sizeOriginal","chunksTotal","chunksUploaded"]},"team":{"description":"Team","type":"object","properties":{"$id":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Team creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Team update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Team name.","x-example":"VIP"},"total":{"type":"integer","description":"Total number of team members.","x-example":7,"format":"int32"},"prefs":{"type":"object","description":"Team preferences as a key-value object","x-example":{"theme":"pink","timezone":"UTC"},"items":{"$ref":"#\/components\/schemas\/preferences"}}},"required":["$id","$createdAt","$updatedAt","name","total","prefs"]},"membership":{"description":"Membership","type":"object","properties":{"$id":{"type":"string","description":"Membership ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Membership creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Membership update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User name.","x-example":"John Doe"},"userEmail":{"type":"string","description":"User email address.","x-example":"john@appwrite.io"},"teamId":{"type":"string","description":"Team ID.","x-example":"5e5ea5c16897e"},"teamName":{"type":"string","description":"Team name.","x-example":"VIP"},"invited":{"type":"string","description":"Date, the user has been invited to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"joined":{"type":"string","description":"Date, the user has accepted the invitation to join the team in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"confirm":{"type":"boolean","description":"User confirmation status, true if the user has joined the team or false otherwise.","x-example":false},"mfa":{"type":"boolean","description":"Multi factor authentication status, true if the user has MFA enabled or false otherwise.","x-example":false},"roles":{"type":"array","description":"User list of roles","items":{"type":"string"},"x-example":["owner"]}},"required":["$id","$createdAt","$updatedAt","userId","userName","userEmail","teamId","teamName","invited","joined","confirm","mfa","roles"]},"execution":{"description":"Execution","type":"object","properties":{"$id":{"type":"string","description":"Execution ID.","x-example":"5e5ea5c16897e"},"$createdAt":{"type":"string","description":"Execution creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Execution upate date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$permissions":{"type":"array","description":"Execution roles.","items":{"type":"string"},"x-example":["any"]},"functionId":{"type":"string","description":"Function ID.","x-example":"5e5ea6g16897e"},"trigger":{"type":"string","description":"The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.","x-example":"http"},"status":{"type":"string","description":"The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.","x-example":"processing"},"requestMethod":{"type":"string","description":"HTTP request method type.","x-example":"GET"},"requestPath":{"type":"string","description":"HTTP request path and query.","x-example":"\/articles?id=5"},"requestHeaders":{"type":"array","description":"HTTP response headers as a key-value object. This will return only whitelisted headers. All headers are returned if execution is created as synchronous.","items":{"$ref":"#\/components\/schemas\/headers"},"x-example":[{"Content-Type":"application\/json"}]},"responseStatusCode":{"type":"integer","description":"HTTP response status code.","x-example":200,"format":"int32"},"responseBody":{"type":"string","description":"HTTP response body. This will return empty unless execution is created as synchronous.","x-example":"Developers are awesome."},"responseHeaders":{"type":"array","description":"HTTP response headers as a key-value object. This will return only whitelisted headers. All headers are returned if execution is created as synchronous.","items":{"$ref":"#\/components\/schemas\/headers"},"x-example":[{"Content-Type":"application\/json"}]},"logs":{"type":"string","description":"Function logs. Includes the last 4,000 characters. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"errors":{"type":"string","description":"Function errors. Includes the last 4,000 characters. This will return an empty string unless the response is returned using an API key or as part of a webhook payload.","x-example":""},"duration":{"type":"number","description":"Function execution duration in seconds.","x-example":0.4,"format":"double"}},"required":["$id","$createdAt","$updatedAt","$permissions","functionId","trigger","status","requestMethod","requestPath","requestHeaders","responseStatusCode","responseBody","responseHeaders","logs","errors","duration"]},"country":{"description":"Country","type":"object","properties":{"name":{"type":"string","description":"Country name.","x-example":"United States"},"code":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"}},"required":["name","code"]},"continent":{"description":"Continent","type":"object","properties":{"name":{"type":"string","description":"Continent name.","x-example":"Europe"},"code":{"type":"string","description":"Continent two letter code.","x-example":"EU"}},"required":["name","code"]},"language":{"description":"Language","type":"object","properties":{"name":{"type":"string","description":"Language name.","x-example":"Italian"},"code":{"type":"string","description":"Language two-character ISO 639-1 codes.","x-example":"it"},"nativeName":{"type":"string","description":"Language native name.","x-example":"Italiano"}},"required":["name","code","nativeName"]},"currency":{"description":"Currency","type":"object","properties":{"symbol":{"type":"string","description":"Currency symbol.","x-example":"$"},"name":{"type":"string","description":"Currency name.","x-example":"US dollar"},"symbolNative":{"type":"string","description":"Currency native symbol.","x-example":"$"},"decimalDigits":{"type":"integer","description":"Number of decimal digits.","x-example":2,"format":"int32"},"rounding":{"type":"number","description":"Currency digit rounding.","x-example":0,"format":"double"},"code":{"type":"string","description":"Currency code in [ISO 4217-1](http:\/\/en.wikipedia.org\/wiki\/ISO_4217) three-character format.","x-example":"USD"},"namePlural":{"type":"string","description":"Currency plural name","x-example":"US dollars"}},"required":["symbol","name","symbolNative","decimalDigits","rounding","code","namePlural"]},"phone":{"description":"Phone","type":"object","properties":{"code":{"type":"string","description":"Phone code.","x-example":"+1"},"countryCode":{"type":"string","description":"Country two-character ISO 3166-1 alpha code.","x-example":"US"},"countryName":{"type":"string","description":"Country name.","x-example":"United States"}},"required":["code","countryCode","countryName"]},"headers":{"description":"Headers","type":"object","properties":{"name":{"type":"string","description":"Header name.","x-example":"Content-Type"},"value":{"type":"string","description":"Header value.","x-example":"application\/json"}},"required":["name","value"]},"mfaChallenge":{"description":"MFA Challenge","type":"object","properties":{"$id":{"type":"string","description":"Token ID.","x-example":"bb8ea5c16897e"},"$createdAt":{"type":"string","description":"Token creation date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"userId":{"type":"string","description":"User ID.","x-example":"5e5ea5c168bb8"},"expire":{"type":"string","description":"Token expiration date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"}},"required":["$id","$createdAt","userId","expire"]},"mfaRecoveryCodes":{"description":"MFA Recovery Codes","type":"object","properties":{"recoveryCodes":{"type":"array","description":"Recovery codes.","items":{"type":"string"},"x-example":["a3kf0-s0cl2","s0co1-as98s"]}},"required":["recoveryCodes"]},"mfaType":{"description":"MFAType","type":"object","properties":{"secret":{"type":"string","description":"Secret token used for TOTP factor.","x-example":true},"uri":{"type":"string","description":"URI for authenticator apps.","x-example":true}},"required":["secret","uri"]},"mfaFactors":{"description":"MFAFactors","type":"object","properties":{"totp":{"type":"boolean","description":"Can TOTP be used for MFA challenge for this account.","x-example":true},"phone":{"type":"boolean","description":"Can phone (SMS) be used for MFA challenge for this account.","x-example":true},"email":{"type":"boolean","description":"Can email be used for MFA challenge for this account.","x-example":true},"recoveryCode":{"type":"boolean","description":"Can recovery code be used for MFA challenge for this account.","x-example":true}},"required":["totp","phone","email","recoveryCode"]},"subscriber":{"description":"Subscriber","type":"object","properties":{"$id":{"type":"string","description":"Subscriber ID.","x-example":"259125845563242502"},"$createdAt":{"type":"string","description":"Subscriber creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Subscriber update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"targetId":{"type":"string","description":"Target ID.","x-example":"259125845563242502"},"target":{"type":"object","description":"Target.","x-example":{"$id":"259125845563242502","$createdAt":"2020-10-15T06:38:00.000+00:00","$updatedAt":"2020-10-15T06:38:00.000+00:00","providerType":"email","providerId":"259125845563242502","name":"ageon-app-email","identifier":"random-mail@email.org","userId":"5e5ea5c16897e"},"items":{"$ref":"#\/components\/schemas\/target"}},"userId":{"type":"string","description":"Topic ID.","x-example":"5e5ea5c16897e"},"userName":{"type":"string","description":"User Name.","x-example":"Aegon Targaryen"},"topicId":{"type":"string","description":"Topic ID.","x-example":"259125845563242502"},"providerType":{"type":"string","description":"The target provider type. Can be one of the following: `email`, `sms` or `push`.","x-example":"email"}},"required":["$id","$createdAt","$updatedAt","targetId","target","userId","userName","topicId","providerType"]},"target":{"description":"Target","type":"object","properties":{"$id":{"type":"string","description":"Target ID.","x-example":"259125845563242502"},"$createdAt":{"type":"string","description":"Target creation time in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"$updatedAt":{"type":"string","description":"Target update date in ISO 8601 format.","x-example":"2020-10-15T06:38:00.000+00:00"},"name":{"type":"string","description":"Target Name.","x-example":"Aegon apple token"},"userId":{"type":"string","description":"User ID.","x-example":"259125845563242502"},"providerId":{"type":"string","description":"Provider ID.","x-example":"259125845563242502","nullable":true},"providerType":{"type":"string","description":"The target provider type. Can be one of the following: `email`, `sms` or `push`.","x-example":"email"},"identifier":{"type":"string","description":"The target identifier.","x-example":"token"}},"required":["$id","$createdAt","$updatedAt","name","userId","providerType","identifier"]}},"securitySchemes":{"Project":{"type":"apiKey","name":"X-Appwrite-Project","description":"Your project ID","in":"header","x-appwrite":{"demo":"5df5acd0d48c2"}},"JWT":{"type":"apiKey","name":"X-Appwrite-JWT","description":"Your secret JSON Web Token","in":"header"},"Locale":{"type":"apiKey","name":"X-Appwrite-Locale","description":"","in":"header","x-appwrite":{"demo":"en"}},"Session":{"type":"apiKey","name":"X-Appwrite-Session","description":"The user session to authenticate with","in":"header"}}},"externalDocs":{"description":"Full API docs, specs and tutorials","url":"https:\/\/appwrite.io\/docs"}}
\ No newline at end of file
+{"openapi":"3.0.0","info":{"version":"1.5.5","title":"Appwrite","description":"Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)","termsOfService":"https:\/\/appwrite.io\/policy\/terms","contact":{"name":"Appwrite Team","url":"https:\/\/appwrite.io\/support","email":"team@appwrite.io"},"license":{"name":"BSD-3-Clause","url":"https:\/\/raw.githubusercontent.com\/appwrite\/appwrite\/master\/LICENSE"}},"servers":[{"url":"https:\/\/cloud.appwrite.io\/v1"}],"paths":{"\/account":{"get":{"summary":"Get account","operationId":"accountGet","tags":["account"],"description":"Get the currently logged in user.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"get","weight":8,"cookies":false,"type":"","deprecated":false,"demo":"account\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]},"post":{"summary":"Create account","operationId":"accountCreate","tags":["account"],"description":"Use this endpoint to allow a new user to register a new account in your project. After the user registration completes successfully, you can use the [\/account\/verfication](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createVerification) route to start verifying the user email address. To allow the new user to login to their new account, you need to create a new [account session](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createEmailSession).","responses":{"201":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"create","weight":7,"cookies":false,"type":"","deprecated":false,"demo":"account\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":""},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"New user password. Must be between 8 and 256 chars.","x-example":null},"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":""}},"required":["userId","email","password"]}}}}}},"\/account\/email":{"patch":{"summary":"Update email","operationId":"accountUpdateEmail","tags":["account"],"description":"Update currently logged in user account email address. After changing user address, the user confirmation status will get reset. A new confirmation email is not sent automatically however you can use the send confirmation email endpoint again to send the confirmation email. For security measures, user password is required to complete this request.\nThis endpoint can also be used to convert an anonymous account to a normal one, by passing an email address and a new password.\n","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateEmail","weight":33,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-email.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/identities":{"get":{"summary":"List Identities","operationId":"accountListIdentities","tags":["account"],"description":"Get the list of identities for the currently logged in user.","responses":{"200":{"description":"Identities List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/identityList"}}}}},"x-appwrite":{"method":"listIdentities","weight":56,"cookies":false,"type":"","deprecated":false,"demo":"account\/list-identities.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-identities.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account\/identities","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, provider, providerUid, providerEmail, providerAccessTokenExpiry","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/identities\/{identityId}":{"delete":{"summary":"Delete identity","operationId":"accountDeleteIdentity","tags":["account"],"description":"Delete an identity by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteIdentity","weight":57,"cookies":false,"type":"","deprecated":false,"demo":"account\/delete-identity.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-identity.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"identityId","description":"Identity ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]}},"\/account\/jwt":{"post":{"summary":"Create JWT","operationId":"accountCreateJWT","tags":["account"],"description":"Use this endpoint to create a JSON Web Token. You can use the resulting JWT to authenticate on behalf of the current user when working with the Appwrite server-side API and SDKs. The JWT secret is valid for 15 minutes from its creation and will be invalid if the user will logout in that time frame.","responses":{"201":{"description":"JWT","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/jwt"}}}}},"x-appwrite":{"method":"createJWT","weight":28,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-j-w-t.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-jwt.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/logs":{"get":{"summary":"List logs","operationId":"accountListLogs","tags":["account"],"description":"Get the list of latest security activity logs for the currently logged in user. Each log returns user IP address, location and date and time of log.","responses":{"200":{"description":"Logs List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/logList"}}}}},"x-appwrite":{"method":"listLogs","weight":30,"cookies":false,"type":"","deprecated":false,"demo":"account\/list-logs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-logs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Only supported methods are limit and offset","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/mfa":{"patch":{"summary":"Update MFA","operationId":"accountUpdateMFA","tags":["account"],"description":"Enable or disable MFA on an account.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateMFA","weight":43,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-m-f-a.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-mfa.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"mfa":{"type":"boolean","description":"Enable or disable MFA.","x-example":false}},"required":["mfa"]}}}}}},"\/account\/mfa\/authenticators\/{type}":{"post":{"summary":"Add Authenticator","operationId":"accountCreateMfaAuthenticator","tags":["account"],"description":"Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.","responses":{"200":{"description":"MFAType","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/mfaType"}}}}},"x-appwrite":{"method":"createMfaAuthenticator","weight":45,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-mfa-authenticator.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-mfa-authenticator.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"type","description":"Type of authenticator. Must be `totp`","required":true,"schema":{"type":"string","x-example":"totp","enum":["totp"],"x-enum-name":"AuthenticatorType","x-enum-keys":[]},"in":"path"}]},"put":{"summary":"Verify Authenticator","operationId":"accountUpdateMfaAuthenticator","tags":["account"],"description":"Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method. add ","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateMfaAuthenticator","weight":46,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-mfa-authenticator.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-mfa-authenticator.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"type","description":"Type of authenticator.","required":true,"schema":{"type":"string","x-example":"totp","enum":["totp"],"x-enum-name":"AuthenticatorType","x-enum-keys":[]},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"otp":{"type":"string","description":"Valid verification token.","x-example":""}},"required":["otp"]}}}}},"delete":{"summary":"Delete Authenticator","operationId":"accountDeleteMfaAuthenticator","tags":["account"],"description":"Delete an authenticator for a user by ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteMfaAuthenticator","weight":50,"cookies":false,"type":"","deprecated":false,"demo":"account\/delete-mfa-authenticator.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-mfa-authenticator.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"type","description":"Type of authenticator.","required":true,"schema":{"type":"string","x-example":"totp","enum":["totp"],"x-enum-name":"AuthenticatorType","x-enum-keys":[]},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"otp":{"type":"string","description":"Valid verification token.","x-example":""}},"required":["otp"]}}}}}},"\/account\/mfa\/challenge":{"post":{"summary":"Create 2FA Challenge","operationId":"accountCreateMfaChallenge","tags":["account"],"description":"Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.","responses":{"201":{"description":"MFA Challenge","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/mfaChallenge"}}}}},"x-appwrite":{"method":"createMfaChallenge","weight":51,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-mfa-challenge.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-mfa-challenge.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},token:{param-token}","scope":"account","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"factor":{"type":"string","description":"Factor used for verification. Must be one of following: `email`, `phone`, `totp`, `recoveryCode`.","x-example":"email","enum":["email","phone","totp","recoverycode"],"x-enum-name":"AuthenticationFactor","x-enum-keys":[]}},"required":["factor"]}}}}},"put":{"summary":"Create MFA Challenge (confirmation)","operationId":"accountUpdateMfaChallenge","tags":["account"],"description":"Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.","responses":{"204":{"description":"No content","content":{"":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateMfaChallenge","weight":52,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-mfa-challenge.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-mfa-challenge.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"challengeId":{"type":"string","description":"ID of the challenge.","x-example":""},"otp":{"type":"string","description":"Valid verification token.","x-example":""}},"required":["challengeId","otp"]}}}}}},"\/account\/mfa\/factors":{"get":{"summary":"List Factors","operationId":"accountListMfaFactors","tags":["account"],"description":"List the factors available on the account to be used as a MFA challange.","responses":{"200":{"description":"MFAFactors","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/mfaFactors"}}}}},"x-appwrite":{"method":"listMfaFactors","weight":44,"cookies":false,"type":"","deprecated":false,"demo":"account\/list-mfa-factors.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-mfa-factors.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/account\/mfa\/recovery-codes":{"get":{"summary":"Get MFA Recovery Codes","operationId":"accountGetMfaRecoveryCodes","tags":["account"],"description":"Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.","responses":{"200":{"description":"MFA Recovery Codes","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/mfaRecoveryCodes"}}}}},"x-appwrite":{"method":"getMfaRecoveryCodes","weight":49,"cookies":false,"type":"","deprecated":false,"demo":"account\/get-mfa-recovery-codes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-mfa-recovery-codes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]},"post":{"summary":"Create MFA Recovery Codes","operationId":"accountCreateMfaRecoveryCodes","tags":["account"],"description":"Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.","responses":{"201":{"description":"MFA Recovery Codes","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/mfaRecoveryCodes"}}}}},"x-appwrite":{"method":"createMfaRecoveryCodes","weight":47,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-mfa-recovery-codes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-mfa-recovery-codes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]},"patch":{"summary":"Regenerate MFA Recovery Codes","operationId":"accountUpdateMfaRecoveryCodes","tags":["account"],"description":"Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.","responses":{"200":{"description":"MFA Recovery Codes","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/mfaRecoveryCodes"}}}}},"x-appwrite":{"method":"updateMfaRecoveryCodes","weight":48,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-mfa-recovery-codes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-mfa-recovery-codes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/account\/name":{"patch":{"summary":"Update name","operationId":"accountUpdateName","tags":["account"],"description":"Update currently logged in user account name.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateName","weight":31,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"User name. Max length: 128 chars.","x-example":""}},"required":["name"]}}}}}},"\/account\/password":{"patch":{"summary":"Update password","operationId":"accountUpdatePassword","tags":["account"],"description":"Update currently logged in user password. For validation, user is required to pass in the new password, and the old password. For users created with OAuth, Team Invites and Magic URL, oldPassword is optional.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePassword","weight":32,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-password.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-password.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"New user password. Must be at least 8 chars.","x-example":null},"oldPassword":{"type":"string","description":"Current user password. Must be at least 8 chars.","x-example":"password"}},"required":["password"]}}}}}},"\/account\/phone":{"patch":{"summary":"Update phone","operationId":"accountUpdatePhone","tags":["account"],"description":"Update the currently logged in user's phone number. After updating the phone number, the phone verification status will be reset. A confirmation SMS is not sent automatically, however you can use the [POST \/account\/verification\/phone](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createPhoneVerification) endpoint to send a confirmation SMS.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePhone","weight":34,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-phone.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["phone","password"]}}}}}},"\/account\/prefs":{"get":{"summary":"Get account preferences","operationId":"accountGetPrefs","tags":["account"],"description":"Get the preferences as a key-value object for the currently logged in user.","responses":{"200":{"description":"Preferences","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/preferences"}}}}},"x-appwrite":{"method":"getPrefs","weight":29,"cookies":false,"type":"","deprecated":false,"demo":"account\/get-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account\/prefs","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]},"patch":{"summary":"Update preferences","operationId":"accountUpdatePrefs","tags":["account"],"description":"Update currently logged in user account preferences. The object you pass is stored as is, and replaces any previous value. The maximum allowed prefs size is 64kB and throws error if exceeded.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updatePrefs","weight":35,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-prefs.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-prefs.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account\/prefs","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"prefs":{"type":"object","description":"Prefs key-value JSON object.","x-example":"{}"}},"required":["prefs"]}}}}}},"\/account\/recovery":{"post":{"summary":"Create password recovery","operationId":"accountCreateRecovery","tags":["account"],"description":"Sends the user an email with a temporary secret key for password reset. When the user clicks the confirmation link he is redirected back to your app password reset URL with the secret key and email address values attached to the URL query string. Use the query string params to submit a request to the [PUT \/account\/recovery](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updateRecovery) endpoint to complete the process. The verification link sent to the user's email address is valid for 1 hour.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createRecovery","weight":37,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","url:{url},ip:{ip}"],"scope":"sessions.write","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the recovery email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["email","url"]}}}}},"put":{"summary":"Create password recovery (confirmation)","operationId":"accountUpdateRecovery","tags":["account"],"description":"Use this endpoint to complete the user account password reset. Both the **userId** and **secret** arguments will be passed as query parameters to the redirect URL you have provided when sending your request to the [POST \/account\/recovery](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createRecovery) endpoint.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateRecovery","weight":38,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-recovery.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-recovery.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"sessions.write","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":""},"secret":{"type":"string","description":"Valid reset token.","x-example":""},"password":{"type":"string","description":"New user password. Must be between 8 and 256 chars.","x-example":null}},"required":["userId","secret","password"]}}}}}},"\/account\/sessions":{"get":{"summary":"List sessions","operationId":"accountListSessions","tags":["account"],"description":"Get the list of active sessions across different devices for the currently logged in user.","responses":{"200":{"description":"Sessions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/sessionList"}}}}},"x-appwrite":{"method":"listSessions","weight":10,"cookies":false,"type":"","deprecated":false,"demo":"account\/list-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/list-sessions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account\/sessions","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]},"delete":{"summary":"Delete sessions","operationId":"accountDeleteSessions","tags":["account"],"description":"Delete all sessions from the user account and remove any sessions cookies from the end client.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSessions","weight":11,"cookies":false,"type":"","deprecated":false,"demo":"account\/delete-sessions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-sessions.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/account\/sessions\/anonymous":{"post":{"summary":"Create anonymous session","operationId":"accountCreateAnonymousSession","tags":["account"],"description":"Use this endpoint to allow a new user to register an anonymous account in your project. This route will also create a new session for the user. To allow the new user to convert an anonymous account to a normal account, you need to update its [email and password](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updateEmail) or create an [OAuth2 session](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#CreateOAuth2Session).","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createAnonymousSession","weight":16,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-anonymous-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-anonymous.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}]}},"\/account\/sessions\/email":{"post":{"summary":"Create email password session","operationId":"accountCreateEmailPasswordSession","tags":["account"],"description":"Allow the user to login into their account by providing a valid email and password combination. This route will create a new session for the user.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createEmailPasswordSession","weight":15,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-email-password-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-email-password.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"password":{"type":"string","description":"User password. Must be at least 8 chars.","x-example":"password"}},"required":["email","password"]}}}}}},"\/account\/sessions\/magic-url":{"put":{"summary":"Update magic URL session","operationId":"accountUpdateMagicURLSession","tags":["account"],"description":"Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login.","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateMagicURLSession","weight":25,"cookies":false,"type":"","deprecated":true,"demo":"account\/update-magic-u-r-l-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session.md","rate-limit":10,"rate-time":3600,"rate-key":"ip:{ip},userId:{param-userId}","scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":""},"secret":{"type":"string","description":"Valid verification token.","x-example":""}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/oauth2\/{provider}":{"get":{"summary":"Create OAuth2 session","operationId":"accountCreateOAuth2Session","tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed.\n\nIf there is already an active session, the new session will be attached to the logged-in account. If there are no active sessions, the server will attempt to look for a user with the same email address as the email received from the OAuth2 provider and attach the new session to the existing user. If no matching user is found - the server will create a new user.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).\n","responses":{"301":{"description":"File"}},"x-appwrite":{"method":"createOAuth2Session","weight":18,"cookies":false,"type":"webAuth","deprecated":false,"demo":"account\/create-o-auth2session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.","required":true,"schema":{"type":"string","x-example":"amazon","enum":["amazon","apple","auth0","authentik","autodesk","bitbucket","bitly","box","dailymotion","discord","disqus","dropbox","etsy","facebook","github","gitlab","google","linkedin","microsoft","notion","oidc","okta","paypal","paypalSandbox","podio","salesforce","slack","spotify","stripe","tradeshift","tradeshiftBox","twitch","wordpress","yahoo","yammer","yandex","zoho","zoom","mock"],"x-enum-name":"OAuthProvider","x-enum-keys":[]},"in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project's platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project's platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/sessions\/phone":{"put":{"summary":"Update phone session","operationId":"accountUpdatePhoneSession","tags":["account"],"description":"Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login.","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updatePhoneSession","weight":26,"cookies":false,"type":"","deprecated":true,"demo":"account\/update-phone-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session.md","rate-limit":10,"rate-time":3600,"rate-key":"ip:{ip},userId:{param-userId}","scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":""},"secret":{"type":"string","description":"Valid verification token.","x-example":""}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/token":{"post":{"summary":"Create session","operationId":"accountCreateSession","tags":["account"],"description":"Use this endpoint to create a session from token. Provide the **userId** and **secret** parameters from the successful response of authentication flows initiated by token creation. For example, magic URL and phone login.","responses":{"201":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"createSession","weight":17,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-session.md","rate-limit":10,"rate-time":3600,"rate-key":"ip:{ip},userId:{param-userId}","scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":""},"secret":{"type":"string","description":"Secret of a token generated by login methods. For example, the `createMagicURLToken` or `createPhoneToken` methods.","x-example":""}},"required":["userId","secret"]}}}}}},"\/account\/sessions\/{sessionId}":{"get":{"summary":"Get session","operationId":"accountGetSession","tags":["account"],"description":"Use this endpoint to get a logged in user's session using a Session ID. Inputting 'current' will return the current session being used.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"getSession","weight":12,"cookies":false,"type":"","deprecated":false,"demo":"account\/get-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/get-session.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"\/account\/sessions","offline-key":"{sessionId}","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to get the current device session.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]},"patch":{"summary":"Update session","operationId":"accountUpdateSession","tags":["account"],"description":"Use this endpoint to extend a session's length. Extending a session is useful when session expiry is short. If the session was created using an OAuth provider, this endpoint refreshes the access token from the provider.","responses":{"200":{"description":"Session","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/session"}}}}},"x-appwrite":{"method":"updateSession","weight":14,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-session.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to update the current device session.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]},"delete":{"summary":"Delete session","operationId":"accountDeleteSession","tags":["account"],"description":"Logout the user. Use 'current' as the session ID to logout on this device, use a session ID to logout on another device. If you're looking to logout the user on all devices, use [Delete Sessions](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#deleteSessions) instead.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSession","weight":13,"cookies":false,"type":"","deprecated":false,"demo":"account\/delete-session.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/delete-session.md","rate-limit":100,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"sessionId","description":"Session ID. Use the string 'current' to delete the current device session.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]}},"\/account\/status":{"patch":{"summary":"Update status","operationId":"accountUpdateStatus","tags":["account"],"description":"Block the currently logged in user account. Behind the scene, the user record is not deleted but permanently blocked from any access. To completely delete a user, use the Users API instead.","responses":{"200":{"description":"User","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/user"}}}}},"x-appwrite":{"method":"updateStatus","weight":36,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-status.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-status.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/account\/targets\/push":{"post":{"summary":"Create push target","operationId":"accountCreatePushTarget","tags":["account"],"description":"","responses":{"201":{"description":"Target","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/target"}}}}},"x-appwrite":{"method":"createPushTarget","weight":53,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-push-target.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"targets.write","platforms":["client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"targetId":{"type":"string","description":"Target ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":""},"identifier":{"type":"string","description":"The target identifier (token, email, phone etc.)","x-example":""},"providerId":{"type":"string","description":"Provider ID. Message will be sent to this target from the specified provider ID. If no provider ID is set the first setup provider will be used.","x-example":""}},"required":["targetId","identifier"]}}}}}},"\/account\/targets\/{targetId}\/push":{"put":{"summary":"Update push target","operationId":"accountUpdatePushTarget","tags":["account"],"description":"","responses":{"200":{"description":"Target","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/target"}}}}},"x-appwrite":{"method":"updatePushTarget","weight":54,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-push-target.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"targets.write","platforms":["client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[]}],"parameters":[{"name":"targetId","description":"Target ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"identifier":{"type":"string","description":"The target identifier (token, email, phone etc.)","x-example":""}},"required":["identifier"]}}}}},"delete":{"summary":"Delete push target","operationId":"accountDeletePushTarget","tags":["account"],"description":"","responses":{"204":{"description":"No content","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/target"}}}}},"x-appwrite":{"method":"deletePushTarget","weight":55,"cookies":false,"type":"","deprecated":false,"demo":"account\/delete-push-target.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"targets.write","platforms":["client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[]}],"parameters":[{"name":"targetId","description":"Target ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]}},"\/account\/tokens\/email":{"post":{"summary":"Create email token (OTP)","operationId":"accountCreateEmailToken","tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST \/v1\/account\/sessions\/token](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createSession) endpoint to complete the login process. The secret sent to the user's email is valid for 15 minutes.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createEmailToken","weight":24,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-email-token.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-token-email.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},email:{param-email}","scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":""},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"phrase":{"type":"boolean","description":"Toggle for security phrase. If enabled, email will be send with a randomly generated phrase and the phrase will also be included in the response. Confirming phrases match increases the security of your authentication flow.","x-example":false}},"required":["userId","email"]}}}}}},"\/account\/tokens\/magic-url":{"post":{"summary":"Create magic URL token","operationId":"accountCreateMagicURLToken","tags":["account"],"description":"Sends the user an email with a secret key for creating a session. If the provided user ID has not been registered, a new user will be created. When the user clicks the link in the email, the user is redirected back to the URL you provided with the secret key and userId values attached to the URL query string. Use the query string parameters to submit a request to the [POST \/v1\/account\/sessions\/token](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createSession) endpoint to complete the login process. The link sent to the user's email address is valid for 1 hour. If you are on a mobile device you can leave the URL parameter empty, so that the login completion will be handled by your Appwrite instance by default.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createMagicURLToken","weight":23,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-magic-u-r-l-token.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-token-magic-url.md","rate-limit":60,"rate-time":3600,"rate-key":["url:{url},email:{param-email}","url:{url},ip:{ip}"],"scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":""},"email":{"type":"string","description":"User email.","x-example":"email@example.com"},"url":{"type":"string","description":"URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"phrase":{"type":"boolean","description":"Toggle for security phrase. If enabled, email will be send with a randomly generated phrase and the phrase will also be included in the response. Confirming phrases match increases the security of your authentication flow.","x-example":false}},"required":["userId","email"]}}}}}},"\/account\/tokens\/oauth2\/{provider}":{"get":{"summary":"Create OAuth2 token","operationId":"accountCreateOAuth2Token","tags":["account"],"description":"Allow the user to login to their account using the OAuth2 provider of their choice. Each OAuth2 provider should be enabled from the Appwrite console first. Use the success and failure arguments to provide a redirect URL's back to your app when login is completed. \n\nIf authentication succeeds, `userId` and `secret` of a token will be appended to the success URL as query parameters. These can be used to create a new session using the [Create session](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createSession) endpoint.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).","responses":{"301":{"description":"File"}},"x-appwrite":{"method":"createOAuth2Token","weight":22,"cookies":false,"type":"webAuth","deprecated":false,"demo":"account\/create-o-auth2token.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-token-oauth2.md","rate-limit":50,"rate-time":3600,"rate-key":"ip:{ip}","scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"parameters":[{"name":"provider","description":"OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.","required":true,"schema":{"type":"string","x-example":"amazon","enum":["amazon","apple","auth0","authentik","autodesk","bitbucket","bitly","box","dailymotion","discord","disqus","dropbox","etsy","facebook","github","gitlab","google","linkedin","microsoft","notion","oidc","okta","paypal","paypalSandbox","podio","salesforce","slack","spotify","stripe","tradeshift","tradeshiftBox","twitch","wordpress","yahoo","yammer","yandex","zoho","zoom","mock"],"x-enum-name":"OAuthProvider","x-enum-keys":[]},"in":"path"},{"name":"success","description":"URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project's platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"failure","description":"URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project's platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","required":false,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com","default":""},"in":"query"},{"name":"scopes","description":"A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of 100 scopes are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]}},"\/account\/tokens\/phone":{"post":{"summary":"Create phone token","operationId":"accountCreatePhoneToken","tags":["account"],"description":"Sends the user an SMS with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST \/v1\/account\/sessions\/token](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createSession) endpoint to complete the login process. The secret sent to the user's phone is valid for 15 minutes.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneToken","weight":27,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-phone-token.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-token-phone.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},phone:{param-phone}","url:{url},ip:{ip}"],"scope":"sessions.write","platforms":["server","client"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":""},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"}},"required":["userId","phone"]}}}}}},"\/account\/verification":{"post":{"summary":"Create email verification","operationId":"accountCreateVerification","tags":["account"],"description":"Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updateVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createVerification","weight":39,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{userId}","scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"}},"required":["url"]}}}}},"put":{"summary":"Create email verification (confirmation)","operationId":"accountUpdateVerification","tags":["account"],"description":"Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updateVerification","weight":40,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":""},"secret":{"type":"string","description":"Valid verification token.","x-example":""}},"required":["userId","secret"]}}}}}},"\/account\/verification\/phone":{"post":{"summary":"Create phone verification","operationId":"accountCreatePhoneVerification","tags":["account"],"description":"Use this endpoint to send a verification SMS to the currently logged in user. This endpoint is meant for use after updating a user's phone number using the [accountUpdatePhone](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updatePhone) endpoint. Learn more about how to [complete the verification process](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updatePhoneVerification). The verification code sent to the user's phone number is valid for 15 minutes.","responses":{"201":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"createPhoneVerification","weight":41,"cookies":false,"type":"","deprecated":false,"demo":"account\/create-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":["url:{url},userId:{userId}","url:{url},ip:{ip}"],"scope":"account","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]},"put":{"summary":"Create phone verification (confirmation)","operationId":"accountUpdatePhoneVerification","tags":["account"],"description":"Use this endpoint to complete the user phone verification process. Use the **userId** and **secret** that were sent to your user's phone number to verify the user email ownership. If confirmed this route will return a 200 status code.","responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/token"}}}}},"x-appwrite":{"method":"updatePhoneVerification","weight":42,"cookies":false,"type":"","deprecated":false,"demo":"account\/update-phone-verification.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-phone-verification.md","rate-limit":10,"rate-time":3600,"rate-key":"userId:{param-userId}","scope":"public","platforms":["client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","description":"User ID.","x-example":""},"secret":{"type":"string","description":"Valid verification token.","x-example":""}},"required":["userId","secret"]}}}}}},"\/avatars\/browsers\/{code}":{"get":{"summary":"Get browser icon","operationId":"avatarsGetBrowser","tags":["avatars"],"description":"You can use this endpoint to show different browser icons to your users. The code argument receives the browser code as it appears in your user [GET \/account\/sessions](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#getSessions) endpoint. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getBrowser","weight":59,"cookies":false,"type":"location","deprecated":false,"demo":"avatars\/get-browser.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-browser.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"code","description":"Browser Code.","required":true,"schema":{"type":"string","x-example":"aa","enum":["aa","an","ch","ci","cm","cr","ff","sf","mf","ps","oi","om","op","on"],"x-enum-name":"Browser","x-enum-keys":["Avant Browser","Android WebView Beta","Google Chrome","Google Chrome (iOS)","Google Chrome (Mobile)","Chromium","Mozilla Firefox","Safari","Mobile Safari","Microsoft Edge","Microsoft Edge (iOS)","Opera Mini","Opera","Opera (Next)"]},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/credit-cards\/{code}":{"get":{"summary":"Get credit card icon","operationId":"avatarsGetCreditCard","tags":["avatars"],"description":"The credit card endpoint will return you the icon of the credit card provider you need. Use width, height and quality arguments to change the output settings.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getCreditCard","weight":58,"cookies":false,"type":"location","deprecated":false,"demo":"avatars\/get-credit-card.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-credit-card.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"code","description":"Credit Card Code. Possible values: amex, argencard, cabal, cencosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro.","required":true,"schema":{"type":"string","x-example":"amex","enum":["amex","argencard","cabal","cencosud","diners","discover","elo","hipercard","jcb","mastercard","naranja","targeta-shopping","union-china-pay","visa","mir","maestro"],"x-enum-name":"CreditCard","x-enum-keys":["American Express","Argencard","Cabal","Cencosud","Diners Club","Discover","Elo","Hipercard","JCB","Mastercard","Naranja","Tarjeta Shopping","Union China Pay","Visa","MIR","Maestro"]},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/favicon":{"get":{"summary":"Get favicon","operationId":"avatarsGetFavicon","tags":["avatars"],"description":"Use this endpoint to fetch the favorite icon (AKA favicon) of any remote website URL.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFavicon","weight":62,"cookies":false,"type":"location","deprecated":false,"demo":"avatars\/get-favicon.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-favicon.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"url","description":"Website URL which you want to fetch the favicon from.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"}]}},"\/avatars\/flags\/{code}":{"get":{"summary":"Get country flag","operationId":"avatarsGetFlag","tags":["avatars"],"description":"You can use this endpoint to show different country flags icons to your users. The code argument receives the 2 letter country code. Use width, height and quality arguments to change the output settings. Country codes follow the [ISO 3166-1](https:\/\/en.wikipedia.org\/wiki\/ISO_3166-1) standard.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFlag","weight":60,"cookies":false,"type":"location","deprecated":false,"demo":"avatars\/get-flag.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-flag.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"code","description":"Country Code. ISO Alpha-2 country code format.","required":true,"schema":{"type":"string","x-example":"af","enum":["af","ao","al","ad","ae","ar","am","ag","au","at","az","bi","be","bj","bf","bd","bg","bh","bs","ba","by","bz","bo","br","bb","bn","bt","bw","cf","ca","ch","cl","cn","ci","cm","cd","cg","co","km","cv","cr","cu","cy","cz","de","dj","dm","dk","do","dz","ec","eg","er","es","ee","et","fi","fj","fr","fm","ga","gb","ge","gh","gn","gm","gw","gq","gr","gd","gt","gy","hn","hr","ht","hu","id","in","ie","ir","iq","is","il","it","jm","jo","jp","kz","ke","kg","kh","ki","kn","kr","kw","la","lb","lr","ly","lc","li","lk","ls","lt","lu","lv","ma","mc","md","mg","mv","mx","mh","mk","ml","mt","mm","me","mn","mz","mr","mu","mw","my","na","ne","ng","ni","nl","no","np","nr","nz","om","pk","pa","pe","ph","pw","pg","pl","pf","kp","pt","py","qa","ro","ru","rw","sa","sd","sn","sg","sb","sl","sv","sm","so","rs","ss","st","sr","sk","si","se","sz","sc","sy","td","tg","th","tj","tm","tl","to","tt","tn","tr","tv","tz","ug","ua","uy","us","uz","va","vc","ve","vn","vu","ws","ye","za","zm","zw"],"x-enum-name":"Flag","x-enum-keys":["Afghanistan","Angola","Albania","Andorra","United Arab Emirates","Argentina","Armenia","Antigua and Barbuda","Australia","Austria","Azerbaijan","Burundi","Belgium","Benin","Burkina Faso","Bangladesh","Bulgaria","Bahrain","Bahamas","Bosnia and Herzegovina","Belarus","Belize","Bolivia","Brazil","Barbados","Brunei Darussalam","Bhutan","Botswana","Central African Republic","Canada","Switzerland","Chile","China","C\u00f4te d'Ivoire","Cameroon","Democratic Republic of the Congo","Republic of the Congo","Colombia","Comoros","Cape Verde","Costa Rica","Cuba","Cyprus","Czech Republic","Germany","Djibouti","Dominica","Denmark","Dominican Republic","Algeria","Ecuador","Egypt","Eritrea","Spain","Estonia","Ethiopia","Finland","Fiji","France","Micronesia (Federated States of)","Gabon","United Kingdom","Georgia","Ghana","Guinea","Gambia","Guinea-Bissau","Equatorial Guinea","Greece","Grenada","Guatemala","Guyana","Honduras","Croatia","Haiti","Hungary","Indonesia","India","Ireland","Iran (Islamic Republic of)","Iraq","Iceland","Israel","Italy","Jamaica","Jordan","Japan","Kazakhstan","Kenya","Kyrgyzstan","Cambodia","Kiribati","Saint Kitts and Nevis","South Korea","Kuwait","Lao People's Democratic Republic","Lebanon","Liberia","Libya","Saint Lucia","Liechtenstein","Sri Lanka","Lesotho","Lithuania","Luxembourg","Latvia","Morocco","Monaco","Moldova","Madagascar","Maldives","Mexico","Marshall Islands","North Macedonia","Mali","Malta","Myanmar","Montenegro","Mongolia","Mozambique","Mauritania","Mauritius","Malawi","Malaysia","Namibia","Niger","Nigeria","Nicaragua","Netherlands","Norway","Nepal","Nauru","New Zealand","Oman","Pakistan","Panama","Peru","Philippines","Palau","Papua New Guinea","Poland","French Polynesia","North Korea","Portugal","Paraguay","Qatar","Romania","Russia","Rwanda","Saudi Arabia","Sudan","Senegal","Singapore","Solomon Islands","Sierra Leone","El Salvador","San Marino","Somalia","Serbia","South Sudan","Sao Tome and Principe","Suriname","Slovakia","Slovenia","Sweden","Eswatini","Seychelles","Syria","Chad","Togo","Thailand","Tajikistan","Turkmenistan","Timor-Leste","Tonga","Trinidad and Tobago","Tunisia","Turkey","Tuvalu","Tanzania","Uganda","Ukraine","Uruguay","United States","Uzbekistan","Vatican City","Saint Vincent and the Grenadines","Venezuela","Vietnam","Vanuatu","Samoa","Yemen","South Africa","Zambia","Zimbabwe"]},"in":"path"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"quality","description":"Image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"}]}},"\/avatars\/image":{"get":{"summary":"Get image from URL","operationId":"avatarsGetImage","tags":["avatars"],"description":"Use this endpoint to fetch a remote image URL and crop it to any image size you want. This endpoint is very useful if you need to crop and display remote images in your app or in case you want to make sure a 3rd party image is properly served using a TLS protocol.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 400x400px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getImage","weight":61,"cookies":false,"type":"location","deprecated":false,"demo":"avatars\/get-image.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-image.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"url","description":"Image URL which you want to crop.","required":true,"schema":{"type":"string","format":"url","x-example":"https:\/\/example.com"},"in":"query"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 2000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":400},"in":"query"}]}},"\/avatars\/initials":{"get":{"summary":"Get user initials","operationId":"avatarsGetInitials","tags":["avatars"],"description":"Use this endpoint to show your user initials avatar icon on your website or app. By default, this route will try to print your logged-in user name or email initials. You can also overwrite the user name if you pass the 'name' parameter. If no name is given and no user is logged, an empty avatar will be returned.\n\nYou can use the color and background params to change the avatar colors. By default, a random theme will be selected. The random theme will persist for the user's initials when reloading the same theme will always return for the same initials.\n\nWhen one dimension is specified and the other is 0, the image is scaled with preserved aspect ratio. If both dimensions are 0, the API provides an image at source quality. If dimensions are not specified, the default size of image returned is 100x100px.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getInitials","weight":64,"cookies":false,"type":"location","deprecated":false,"demo":"avatars\/get-initials.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-initials.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"name","description":"Full Name. When empty, current user name or email will be used. Max length: 128 chars.","required":false,"schema":{"type":"string","x-example":"","default":""},"in":"query"},{"name":"width","description":"Image width. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"height","description":"Image height. Pass an integer between 0 to 2000. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":500},"in":"query"},{"name":"background","description":"Changes background color. By default a random color will be picked and stay will persistent to the given name.","required":false,"schema":{"type":"string","default":""},"in":"query"}]}},"\/avatars\/qr":{"get":{"summary":"Get QR code","operationId":"avatarsGetQR","tags":["avatars"],"description":"Converts a given plain text to a QR code image. You can use the query parameters to change the size and style of the resulting image.\n","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getQR","weight":63,"cookies":false,"type":"location","deprecated":false,"demo":"avatars\/get-q-r.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/avatars\/get-qr.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"avatars.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"text","description":"Plain text to be converted to QR code image.","required":true,"schema":{"type":"string","x-example":""},"in":"query"},{"name":"size","description":"QR code size. Pass an integer between 1 to 1000. Defaults to 400.","required":false,"schema":{"type":"integer","format":"int32","x-example":1,"default":400},"in":"query"},{"name":"margin","description":"Margin from edge. Pass an integer between 0 to 10. Defaults to 1.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":1},"in":"query"},{"name":"download","description":"Return resulting image with 'Content-Disposition: attachment ' headers for the browser to start downloading it. Pass 0 for no header, or 1 for otherwise. Default value is set to 0.","required":false,"schema":{"type":"boolean","x-example":false,"default":false},"in":"query"}]}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents":{"get":{"summary":"List documents","operationId":"databasesListDocuments","tags":["databases"],"description":"Get a list of all the user's documents in a given collection. You can use the query params to filter your results.","responses":{"200":{"description":"Documents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/documentList"}}}}},"x-appwrite":{"method":"listDocuments","weight":108,"cookies":false,"type":"","deprecated":false,"demo":"databases\/list-documents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/list-documents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/databases\/{databaseId}\/collections\/{collectionId}\/documents","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"post":{"summary":"Create document","operationId":"databasesCreateDocument","tags":["databases"],"description":"Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.","responses":{"201":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"createDocument","weight":107,"cookies":false,"type":"","deprecated":false,"demo":"databases\/create-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/create-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"offline-model":"\/databases\/{databaseId}\/collections\/{collectionId}\/documents","offline-key":"{documentId}","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection). Make sure to define attributes before creating documents.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"documentId":{"type":"string","description":"Document ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":""},"data":{"type":"object","description":"Document data as JSON object.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default, only the current user is granted all permissions. [Learn more about permissions](https:\/\/appwrite.io\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["documentId","data"]}}}}}},"\/databases\/{databaseId}\/collections\/{collectionId}\/documents\/{documentId}":{"get":{"summary":"Get document","operationId":"databasesGetDocument","tags":["databases"],"description":"Get a document by its unique ID. This endpoint response returns a JSON object with the document data.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"getDocument","weight":109,"cookies":false,"type":"","deprecated":false,"demo":"databases\/get-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/get-document.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"documents.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/databases\/{databaseId}\/collections\/{collectionId}\/documents","offline-key":"{documentId}","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Maximum of 100 queries are allowed, each 4096 characters long.","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"}]},"patch":{"summary":"Update document","operationId":"databasesUpdateDocument","tags":["databases"],"description":"Update a document by its unique ID. Using the patch method you can pass only specific fields that will get updated.","responses":{"200":{"description":"Document","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/document"}}}}},"x-appwrite":{"method":"updateDocument","weight":111,"cookies":false,"type":"","deprecated":false,"demo":"databases\/update-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/update-document.md","rate-limit":120,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"offline-model":"\/databases\/{databaseId}\/collections\/{collectionId}\/documents","offline-key":"{documentId}","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"collectionId","description":"Collection ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Document data as JSON object. Include only attribute and value pairs to be updated.","x-example":"{}"},"permissions":{"type":"array","description":"An array of permissions strings. By default, the current permissions are inherited. [Learn more about permissions](https:\/\/appwrite.io\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete document","operationId":"databasesDeleteDocument","tags":["databases"],"description":"Delete a document by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteDocument","weight":112,"cookies":false,"type":"","deprecated":false,"demo":"databases\/delete-document.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/databases\/delete-document.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"documents.write","platforms":["client","server","server"],"packaging":false,"offline-model":"\/databases\/{databaseId}\/collections\/{collectionId}\/documents","offline-key":"{documentId}","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"databaseId","description":"Database ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"collectionId","description":"Collection ID. You can create a new collection using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection).","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"documentId","description":"Document ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]}},"\/functions\/{functionId}\/executions":{"get":{"summary":"List executions","operationId":"functionsListExecutions","tags":["functions"],"description":"Get a list of all the current user function execution logs. You can use the query params to filter your results.","responses":{"200":{"description":"Executions List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/executionList"}}}}},"x-appwrite":{"method":"listExecutions","weight":297,"cookies":false,"type":"","deprecated":false,"demo":"functions\/list-executions.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/list-executions.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: trigger, status, responseStatusCode, duration","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"","default":""},"in":"query"}]},"post":{"summary":"Create execution","operationId":"functionsCreateExecution","tags":["functions"],"description":"Trigger a function execution. The returned object will return you the current execution status. You can ping the `Get Execution` endpoint to get updates on the current execution status. Once this endpoint is called, your function execution process will start asynchronously.","responses":{"201":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"createExecution","weight":296,"cookies":false,"type":"","deprecated":false,"demo":"functions\/create-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/create-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.write","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"body":{"type":"string","description":"HTTP body of execution. Default value is empty string.","x-example":""},"async":{"type":"boolean","description":"Execute code in the background. Default value is false.","x-example":false},"path":{"type":"string","description":"HTTP path of execution. Path can include query params. Default value is \/","x-example":""},"method":{"type":"string","description":"HTTP method of execution. Default value is GET.","x-example":"GET","enum":["GET","POST","PUT","PATCH","DELETE","OPTIONS"],"x-enum-name":"ExecutionMethod","x-enum-keys":[]},"headers":{"type":"object","description":"HTTP headers of execution. Defaults to empty.","x-example":"{}"}}}}}}}},"\/functions\/{functionId}\/executions\/{executionId}":{"get":{"summary":"Get execution","operationId":"functionsGetExecution","tags":["functions"],"description":"Get a function execution log by its unique ID.","responses":{"200":{"description":"Execution","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/execution"}}}}},"x-appwrite":{"method":"getExecution","weight":298,"cookies":false,"type":"","deprecated":false,"demo":"functions\/get-execution.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/functions\/get-execution.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"execution.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"functionId","description":"Function ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"executionId","description":"Execution ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]}},"\/graphql":{"post":{"summary":"GraphQL endpoint","operationId":"graphqlQuery","tags":["graphql"],"description":"Execute a GraphQL mutation.","responses":{"200":{"description":"Any","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/any"}}}}},"x-appwrite":{"method":"query","weight":318,"cookies":false,"type":"graphql","deprecated":false,"demo":"graphql\/query.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/graphql\/post.md","rate-limit":60,"rate-time":60,"rate-key":"url:{url},ip:{ip}","scope":"graphql","platforms":["server","client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/graphql\/mutation":{"post":{"summary":"GraphQL endpoint","operationId":"graphqlMutation","tags":["graphql"],"description":"Execute a GraphQL mutation.","responses":{"200":{"description":"Any","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/any"}}}}},"x-appwrite":{"method":"mutation","weight":317,"cookies":false,"type":"graphql","deprecated":false,"demo":"graphql\/mutation.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/graphql\/post.md","rate-limit":60,"rate-time":60,"rate-key":"url:{url},ip:{ip}","scope":"graphql","platforms":["server","client","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/locale":{"get":{"summary":"Get user locale","operationId":"localeGet","tags":["locale"],"description":"Get the current user location based on IP. Returns an object with user country code, country name, continent name, continent code, ip address and suggested currency. You can use the locale header to get the data in a supported language.\n\n([IP Geolocation by DB-IP](https:\/\/db-ip.com))","responses":{"200":{"description":"Locale","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/locale"}}}}},"x-appwrite":{"method":"get","weight":116,"cookies":false,"type":"","deprecated":false,"demo":"locale\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/get-locale.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/localed","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/locale\/codes":{"get":{"summary":"List Locale Codes","operationId":"localeListCodes","tags":["locale"],"description":"List of all locale codes in [ISO 639-1](https:\/\/en.wikipedia.org\/wiki\/List_of_ISO_639-1_codes).","responses":{"200":{"description":"Locale codes list","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/localeCodeList"}}}}},"x-appwrite":{"method":"listCodes","weight":117,"cookies":false,"type":"","deprecated":false,"demo":"locale\/list-codes.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-locale-codes.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/locale\/localeCode","offline-key":"current","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/locale\/continents":{"get":{"summary":"List continents","operationId":"localeListContinents","tags":["locale"],"description":"List of all continents. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Continents List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/continentList"}}}}},"x-appwrite":{"method":"listContinents","weight":121,"cookies":false,"type":"","deprecated":false,"demo":"locale\/list-continents.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-continents.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/locale\/continents","offline-key":"","offline-response-key":"code","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/locale\/countries":{"get":{"summary":"List countries","operationId":"localeListCountries","tags":["locale"],"description":"List of all countries. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountries","weight":118,"cookies":false,"type":"","deprecated":false,"demo":"locale\/list-countries.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/locale\/countries","offline-key":"","offline-response-key":"code","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/locale\/countries\/eu":{"get":{"summary":"List EU countries","operationId":"localeListCountriesEU","tags":["locale"],"description":"List of all countries that are currently members of the EU. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Countries List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/countryList"}}}}},"x-appwrite":{"method":"listCountriesEU","weight":119,"cookies":false,"type":"","deprecated":false,"demo":"locale\/list-countries-e-u.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-eu.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/locale\/countries\/eu","offline-key":"","offline-response-key":"code","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/locale\/countries\/phones":{"get":{"summary":"List countries phone codes","operationId":"localeListCountriesPhones","tags":["locale"],"description":"List of all countries phone codes. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Phones List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/phoneList"}}}}},"x-appwrite":{"method":"listCountriesPhones","weight":120,"cookies":false,"type":"","deprecated":false,"demo":"locale\/list-countries-phones.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-countries-phones.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/locale\/countries\/phones","offline-key":"","offline-response-key":"countryCode","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/locale\/currencies":{"get":{"summary":"List currencies","operationId":"localeListCurrencies","tags":["locale"],"description":"List of all currencies, including currency symbol, name, plural, and decimal digits for all major and minor currencies. You can use the locale header to get the data in a supported language.","responses":{"200":{"description":"Currencies List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/currencyList"}}}}},"x-appwrite":{"method":"listCurrencies","weight":122,"cookies":false,"type":"","deprecated":false,"demo":"locale\/list-currencies.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-currencies.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/locale\/currencies","offline-key":"","offline-response-key":"code","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/locale\/languages":{"get":{"summary":"List languages","operationId":"localeListLanguages","tags":["locale"],"description":"List of all languages classified by ISO 639-1 including 2-letter code, name in English, and name in the respective language.","responses":{"200":{"description":"Languages List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/languageList"}}}}},"x-appwrite":{"method":"listLanguages","weight":123,"cookies":false,"type":"","deprecated":false,"demo":"locale\/list-languages.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/locale\/list-languages.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"locale.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/locale\/languages","offline-key":"","offline-response-key":"code","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}]}},"\/messaging\/topics\/{topicId}\/subscribers":{"post":{"summary":"Create subscriber","operationId":"messagingCreateSubscriber","tags":["messaging"],"description":"Create a new subscriber.","responses":{"201":{"description":"Subscriber","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/subscriber"}}}}},"x-appwrite":{"method":"createSubscriber","weight":369,"cookies":false,"type":"","deprecated":false,"demo":"messaging\/create-subscriber.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/messaging\/create-subscriber.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"subscribers.write","platforms":["server","client","console","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"JWT":[],"Session":[]}],"parameters":[{"name":"topicId","description":"Topic ID. The topic ID to subscribe to.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"subscriberId":{"type":"string","description":"Subscriber ID. Choose a custom Subscriber ID or a new Subscriber ID.","x-example":""},"targetId":{"type":"string","description":"Target ID. The target ID to link to the specified Topic ID.","x-example":""}},"required":["subscriberId","targetId"]}}}}}},"\/messaging\/topics\/{topicId}\/subscribers\/{subscriberId}":{"delete":{"summary":"Delete subscriber","operationId":"messagingDeleteSubscriber","tags":["messaging"],"description":"Delete a subscriber by its unique ID.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteSubscriber","weight":373,"cookies":false,"type":"","deprecated":false,"demo":"messaging\/delete-subscriber.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/messaging\/delete-subscriber.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"subscribers.write","platforms":["server","client","console","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"JWT":[],"Session":[]}],"parameters":[{"name":"topicId","description":"Topic ID. The topic ID subscribed to.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"subscriberId","description":"Subscriber ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files":{"get":{"summary":"List files","operationId":"storageListFiles","tags":["storage"],"description":"Get a list of all the user files. You can use the query params to filter your results.","responses":{"200":{"description":"Files List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/fileList"}}}}},"x-appwrite":{"method":"listFiles","weight":203,"cookies":false,"type":"","deprecated":false,"demo":"storage\/list-files.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/list-files.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](https:\/\/appwrite.io\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, signature, mimeType, sizeOriginal, chunksTotal, chunksUploaded","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"","default":""},"in":"query"}]},"post":{"summary":"Create file","operationId":"storageCreateFile","tags":["storage"],"description":"Create a new file. Before using this route, you should create a new bucket resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/storage#storageCreateBucket) API or directly from your Appwrite console.\n\nLarger files should be uploaded using multiple requests with the [content-range](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Headers\/Content-Range) header to send a partial request with a maximum supported chunk of `5MB`. The `content-range` header values should always be in bytes.\n\nWhen the first request is sent, the server will return the **File** object, and the subsequent part request must include the file's **id** in `x-appwrite-id` header to allow the server to know that the partial upload is for the existing file and not for a new one.\n\nIf you're creating a new file using one of the Appwrite SDKs, all the chunking logic will be managed by the SDK internally.\n","responses":{"201":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"createFile","weight":202,"cookies":false,"type":"upload","deprecated":false,"demo":"storage\/create-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/create-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId},chunkId:{chunkId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](https:\/\/appwrite.io\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":""},"in":"path"}],"requestBody":{"content":{"multipart\/form-data":{"schema":{"type":"object","properties":{"fileId":{"type":"string","description":"File ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":"","x-upload-id":true},"file":{"type":"string","description":"Binary file. Appwrite SDKs provide helpers to handle file input. [Learn about file input](https:\/\/appwrite.io\/docs\/storage#file-input).","x-example":null},"permissions":{"type":"array","description":"An array of permission strings. By default, only the current user is granted all permissions. [Learn more about permissions](https:\/\/appwrite.io\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}},"required":["fileId","file"]}}}}}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}":{"get":{"summary":"Get file","operationId":"storageGetFile","tags":["storage"],"description":"Get a file by its unique ID. This endpoint response returns a JSON object with the file metadata.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"getFile","weight":204,"cookies":false,"type":"","deprecated":false,"demo":"storage\/get-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](https:\/\/appwrite.io\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]},"put":{"summary":"Update file","operationId":"storageUpdateFile","tags":["storage"],"description":"Update a file by its unique ID. Only users with write permissions have access to update this resource.","responses":{"200":{"description":"File","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/file"}}}}},"x-appwrite":{"method":"updateFile","weight":209,"cookies":false,"type":"","deprecated":false,"demo":"storage\/update-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/update-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](https:\/\/appwrite.io\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"fileId","description":"File unique ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Name of the file","x-example":""},"permissions":{"type":"array","description":"An array of permission string. By default, the current permissions are inherited. [Learn more about permissions](https:\/\/appwrite.io\/docs\/permissions).","x-example":"[\"read(\"any\")\"]","items":{"type":"string"}}}}}}}},"delete":{"summary":"Delete File","operationId":"storageDeleteFile","tags":["storage"],"description":"Delete a file by its unique ID. Only users with write permissions have access to delete this resource.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"deleteFile","weight":210,"cookies":false,"type":"","deprecated":false,"demo":"storage\/delete-file.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/delete-file.md","rate-limit":60,"rate-time":60,"rate-key":"ip:{ip},method:{method},url:{url},userId:{userId}","scope":"files.write","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](https:\/\/appwrite.io\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/download":{"get":{"summary":"Get file for download","operationId":"storageGetFileDownload","tags":["storage"],"description":"Get a file content by its unique ID. The endpoint response return with a 'Content-Disposition: attachment' header that tells the browser to start downloading the file to user downloads directory.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileDownload","weight":206,"cookies":false,"type":"location","deprecated":false,"demo":"storage\/get-file-download.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-download.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket ID. You can create a new storage bucket using the Storage service [server integration](https:\/\/appwrite.io\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/preview":{"get":{"summary":"Get file preview","operationId":"storageGetFilePreview","tags":["storage"],"description":"Get a file preview image. Currently, this method supports preview for image files (jpg, png, and gif), other supported formats, like pdf, docs, slides, and spreadsheets, will return the file icon image. You can also pass query string arguments for cutting and resizing your preview image. Preview is supported only for image files smaller than 10MB.","responses":{"200":{"description":"Image"}},"x-appwrite":{"method":"getFilePreview","weight":205,"cookies":false,"type":"location","deprecated":false,"demo":"storage\/get-file-preview.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-preview.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](https:\/\/appwrite.io\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"fileId","description":"File ID","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"width","description":"Resize preview image width, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"height","description":"Resize preview image height, Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"gravity","description":"Image crop gravity. Can be one of center,top-left,top,top-right,left,right,bottom-left,bottom,bottom-right","required":false,"schema":{"type":"string","x-example":"center","enum":["center","top-left","top","top-right","left","right","bottom-left","bottom","bottom-right"],"x-enum-name":"ImageGravity","x-enum-keys":[],"default":"center"},"in":"query"},{"name":"quality","description":"Preview image quality. Pass an integer between 0 to 100. Defaults to 100.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":100},"in":"query"},{"name":"borderWidth","description":"Preview image border in pixels. Pass an integer between 0 to 100. Defaults to 0.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"borderColor","description":"Preview image border color. Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"borderRadius","description":"Preview image border radius in pixels. Pass an integer between 0 to 4000.","required":false,"schema":{"type":"integer","format":"int32","x-example":0,"default":0},"in":"query"},{"name":"opacity","description":"Preview image opacity. Only works with images having an alpha channel (like png). Pass a number between 0 to 1.","required":false,"schema":{"type":"number","format":"float","x-example":0,"default":1},"in":"query"},{"name":"rotation","description":"Preview image rotation in degrees. Pass an integer between -360 and 360.","required":false,"schema":{"type":"integer","format":"int32","x-example":-360,"default":0},"in":"query"},{"name":"background","description":"Preview image background color. Only works with transparent images (png). Use a valid HEX color, no # is needed for prefix.","required":false,"schema":{"type":"string","default":""},"in":"query"},{"name":"output","description":"Output format type (jpeg, jpg, png, gif and webp).","required":false,"schema":{"type":"string","x-example":"jpg","enum":["jpg","jpeg","gif","png","webp"],"x-enum-name":"ImageFormat","x-enum-keys":[],"default":""},"in":"query"}]}},"\/storage\/buckets\/{bucketId}\/files\/{fileId}\/view":{"get":{"summary":"Get file for view","operationId":"storageGetFileView","tags":["storage"],"description":"Get a file content by its unique ID. This endpoint is similar to the download method but returns with no 'Content-Disposition: attachment' header.","responses":{"200":{"description":"File"}},"x-appwrite":{"method":"getFileView","weight":207,"cookies":false,"type":"location","deprecated":false,"demo":"storage\/get-file-view.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/storage\/get-file-view.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"files.read","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"bucketId","description":"Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](https:\/\/appwrite.io\/docs\/server\/storage#createBucket).","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"fileId","description":"File ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]}},"\/teams":{"get":{"summary":"List teams","operationId":"teamsList","tags":["teams"],"description":"Get a list of all the teams in which the current user is a member. You can use the parameters to filter your results.","responses":{"200":{"description":"Teams List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/teamList"}}}}},"x-appwrite":{"method":"list","weight":214,"cookies":false,"type":"","deprecated":false,"demo":"teams\/list.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-teams.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/teams","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, total, billingPlan","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"","default":""},"in":"query"}]},"post":{"summary":"Create team","operationId":"teamsCreate","tags":["teams"],"description":"Create a new team. The user who creates the team will automatically be assigned as the owner of the team. Only the users with the owner role can invite new members, add new owners and delete or update the team.","responses":{"201":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"create","weight":213,"cookies":false,"type":"","deprecated":false,"demo":"teams\/create.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.","x-example":""},"name":{"type":"string","description":"Team name. Max length: 128 chars.","x-example":""},"roles":{"type":"array","description":"Array of strings. Use this param to set the roles in the team for the user who created it. The default role is **owner**. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}}},"required":["teamId","name"]}}}}}},"\/teams\/{teamId}":{"get":{"summary":"Get team","operationId":"teamsGet","tags":["teams"],"description":"Get a team by its ID. All team members have read access for this resource.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"get","weight":215,"cookies":false,"type":"","deprecated":false,"demo":"teams\/get.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/teams","offline-key":"{teamId}","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]},"put":{"summary":"Update name","operationId":"teamsUpdateName","tags":["teams"],"description":"Update the team's name by its unique ID.","responses":{"200":{"description":"Team","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/team"}}}}},"x-appwrite":{"method":"updateName","weight":217,"cookies":false,"type":"","deprecated":false,"demo":"teams\/update-name.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/update-team-name.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"offline-model":"\/teams","offline-key":"{teamId}","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"New team name. Max length: 128 chars.","x-example":""}},"required":["name"]}}}}},"delete":{"summary":"Delete team","operationId":"teamsDelete","tags":["teams"],"description":"Delete a team using its ID. Only team members with the owner role can delete the team.","responses":{"204":{"description":"No content"}},"x-appwrite":{"method":"delete","weight":219,"cookies":false,"type":"","deprecated":false,"demo":"teams\/delete.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/delete-team.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}]}},"\/teams\/{teamId}\/memberships":{"get":{"summary":"List team memberships","operationId":"teamsListMemberships","tags":["teams"],"description":"Use this endpoint to list a team's members using the team's ID. All team members have read access to this endpoint.","responses":{"200":{"description":"Memberships List","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membershipList"}}}}},"x-appwrite":{"method":"listMemberships","weight":221,"cookies":false,"type":"","deprecated":false,"demo":"teams\/list-memberships.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/list-team-members.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/teams\/{teamId}\/memberships","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"queries","description":"Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: userId, teamId, invited, joined, confirm","required":false,"schema":{"type":"array","items":{"type":"string"},"default":[]},"in":"query"},{"name":"search","description":"Search term to filter your list results. Max length: 256 chars.","required":false,"schema":{"type":"string","x-example":"","default":""},"in":"query"}]},"post":{"summary":"Create team membership","operationId":"teamsCreateMembership","tags":["teams"],"description":"Invite a new member to join your team. Provide an ID for existing users, or invite unregistered users using an email or phone number. If initiated from a Client SDK, Appwrite will send an email or sms with a link to join the team to the invited user, and an account will be created for them if one doesn't exist. If initiated from a Server SDK, the new member will be added automatically to the team.\n\nYou only need to provide one of a user ID, email, or phone number. Appwrite will prioritize accepting the user ID > email > phone number if you provide more than one of these parameters.\n\nUse the `url` parameter to redirect the user from the invitation email to your app. After the user is redirected, use the [Update Team Membership Status](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/teams#updateMembershipStatus) endpoint to allow the user to accept the invitation to the team. \n\nPlease note that to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) Appwrite will accept the only redirect URLs under the domains you have added as a platform on the Appwrite Console.\n","responses":{"201":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"createMembership","weight":220,"cookies":false,"type":"","deprecated":false,"demo":"teams\/create-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/create-team-membership.md","rate-limit":10,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.write","platforms":["client","server","server"],"packaging":false,"offline-model":"","offline-key":"","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"Email of the new team member.","x-example":"email@example.com"},"userId":{"type":"string","description":"ID of the user to be added to a team.","x-example":""},"phone":{"type":"string","description":"Phone number. Format this number with a leading '+' and a country code, e.g., +16175551212.","x-example":"+12065550100"},"roles":{"type":"array","description":"Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](https:\/\/appwrite.io\/docs\/permissions). Maximum of 100 roles are allowed, each 32 characters long.","x-example":null,"items":{"type":"string"}},"url":{"type":"string","description":"URL to redirect the user back to your app from the invitation email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https:\/\/cheatsheetseries.owasp.org\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.","x-example":"https:\/\/example.com"},"name":{"type":"string","description":"Name of the new team member. Max length: 128 chars.","x-example":""}},"required":["roles"]}}}}}},"\/teams\/{teamId}\/memberships\/{membershipId}":{"get":{"summary":"Get team membership","operationId":"teamsGetMembership","tags":["teams"],"description":"Get a team member by the membership unique id. All team members have read access for this resource.","responses":{"200":{"description":"Membership","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/membership"}}}}},"x-appwrite":{"method":"getMembership","weight":222,"cookies":false,"type":"","deprecated":false,"demo":"teams\/get-membership.md","edit":"https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/teams\/get-team-member.md","rate-limit":0,"rate-time":3600,"rate-key":"url:{url},ip:{ip}","scope":"teams.read","platforms":["client","server","server"],"packaging":false,"offline-model":"\/teams\/{teamId}\/memberships","offline-key":"{membershipId}","offline-response-key":"$id","auth":{"Project":[]}},"security":[{"Project":[],"Session":[],"JWT":[]}],"parameters":[{"name":"teamId","description":"Team ID.","required":true,"schema":{"type":"string","x-example":""},"in":"path"},{"name":"membershipId","description":"Membership ID.","required":true,"schema":{"type":"string","x-example":"