From 69e6c0afc0954c2a2ee531a3e2a1df5b6e5d6c30 Mon Sep 17 00:00:00 2001 From: fogelito Date: Wed, 28 Jan 2026 14:53:24 +0200 Subject: [PATCH 01/65] getCursorQueries --- app/controllers/api/account.php | 12 +--- app/controllers/api/messaging.php | 55 +++++-------------- app/controllers/api/migrations.php | 12 +--- app/controllers/api/teams.php | 25 ++------- app/controllers/api/users.php | 39 +++++-------- app/controllers/api/vcs.php | 13 ++--- .../Databases/Collections/Documents/XList.php | 10 +--- .../Databases/Collections/Indexes/XList.php | 11 +--- .../Http/Databases/Collections/XList.php | 11 +--- .../Databases/Http/Databases/XList.php | 13 ++--- .../Functions/Http/Deployments/XList.php | 12 +--- .../Functions/Http/Executions/XList.php | 12 +--- .../Functions/Http/Functions/XList.php | 12 +--- .../Modules/Projects/Http/Projects/XList.php | 12 +--- .../Modules/Proxy/Http/Rules/XList.php | 12 +--- .../Modules/Sites/Http/Deployments/XList.php | 12 +--- .../Modules/Sites/Http/Logs/XList.php | 12 +--- .../Modules/Sites/Http/Sites/XList.php | 12 +--- .../Storage/Http/Buckets/Files/XList.php | 12 +--- .../Modules/Storage/Http/Buckets/XList.php | 12 +--- .../Http/Tokens/Buckets/Files/XList.php | 12 ++-- 21 files changed, 91 insertions(+), 242 deletions(-) diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index ce655bfe18..2f30633859 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -4574,16 +4574,10 @@ App::get('/v1/account/identities') $queries[] = Query::equal('userInternalId', [$user->getSequence()]); - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); - if ($cursor) { - /** @var Query $cursor */ + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); diff --git a/app/controllers/api/messaging.php b/app/controllers/api/messaging.php index 6ac36fe3c0..aa9fe50391 100644 --- a/app/controllers/api/messaging.php +++ b/app/controllers/api/messaging.php @@ -1087,15 +1087,10 @@ App::get('/v1/messaging/providers') $queries[] = Query::search('search', $search); } - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); - if ($cursor) { + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); @@ -2496,15 +2491,10 @@ App::get('/v1/messaging/topics') $queries[] = Query::search('search', $search); } - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); - if ($cursor) { + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); @@ -2904,15 +2894,10 @@ App::get('/v1/messaging/topics/:topicId/subscribers') $queries[] = Query::equal('topicInternalId', [$topic->getSequence()]); - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); - if ($cursor) { + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); @@ -3719,15 +3704,10 @@ App::get('/v1/messaging/messages') $queries[] = Query::search('search', $search); } - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); - if ($cursor) { + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); @@ -3899,15 +3879,10 @@ App::get('/v1/messaging/messages/:messageId/targets') $queries[] = Query::equal('$id', $targetIDs); - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); - if ($cursor) { + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); diff --git a/app/controllers/api/migrations.php b/app/controllers/api/migrations.php index 1a17853577..379a90a92b 100644 --- a/app/controllers/api/migrations.php +++ b/app/controllers/api/migrations.php @@ -629,16 +629,10 @@ App::get('/v1/migrations') $queries[] = Query::search('search', $search); } - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); - if ($cursor) { - /** @var Query $cursor */ + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index 2cee394a9c..2bff998bda 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -191,16 +191,10 @@ App::get('/v1/teams') $queries[] = Query::search('search', $search); } - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); - if ($cursor) { - /** @var Query $cursor */ + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); @@ -882,22 +876,15 @@ App::get('/v1/teams/:teamId/memberships') // Set internal queries $queries[] = Query::equal('teamInternalId', [$team->getSequence()]); - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); - if ($cursor) { - /** @var Query $cursor */ + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); } - $membershipId = $cursor->getValue(); $cursorDocument = $dbForProject->getDocument('memberships', $membershipId); diff --git a/app/controllers/api/users.php b/app/controllers/api/users.php index a963284538..be0a73d1e1 100644 --- a/app/controllers/api/users.php +++ b/app/controllers/api/users.php @@ -675,16 +675,10 @@ App::get('/v1/users') $queries[] = Query::search('search', $search); } - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); - if ($cursor) { - /** @var Query $cursor */ + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); @@ -1042,14 +1036,11 @@ App::get('/v1/users/:userId/targets') throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage()); } $queries[] = Query::equal('userId', [$userId]); - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); - if ($cursor) { + + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); + + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); @@ -1106,15 +1097,11 @@ App::get('/v1/users/identities') if (!empty($search)) { $queries[] = Query::search('search', $search); } - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); - if ($cursor) { - /** @var Query $cursor */ + + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); + + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); diff --git a/app/controllers/api/vcs.php b/app/controllers/api/vcs.php index 2bb9c17fd3..65753fd660 100644 --- a/app/controllers/api/vcs.php +++ b/app/controllers/api/vcs.php @@ -1649,15 +1649,10 @@ App::get('/v1/vcs/installations') $queries[] = Query::search('search', $search); } - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); - if ($cursor) { - /** @var Query $cursor */ + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); + + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/XList.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/XList.php index ff94e67b02..295b78a114 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/XList.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/XList.php @@ -99,16 +99,10 @@ class XList extends Action throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage()); } - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - + $cursor = Query::getCursorQueries($queries, false); $cursor = \reset($cursor); - if ($cursor) { + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Indexes/XList.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Indexes/XList.php index 90826ffbe3..b9705515eb 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Indexes/XList.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Indexes/XList.php @@ -98,15 +98,10 @@ class XList extends Action Query::equal('collectionId', [$collectionId]), ); - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); - if ($cursor) { + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/XList.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/XList.php index c23286f3cd..87e0720089 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/XList.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/XList.php @@ -89,15 +89,10 @@ class XList extends Action $queries[] = Query::search('search', $search); } - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); - if ($cursor) { + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/XList.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/XList.php index e3dd46839a..ff2f6a574b 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/XList.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/XList.php @@ -73,15 +73,10 @@ class XList extends Action $queries[] = Query::search('search', $search); } - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); - if ($cursor) { - /** @var Query $cursor */ + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); + + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { diff --git a/src/Appwrite/Platform/Modules/Functions/Http/Deployments/XList.php b/src/Appwrite/Platform/Modules/Functions/Http/Deployments/XList.php index 55711495e9..ea31af8580 100644 --- a/src/Appwrite/Platform/Modules/Functions/Http/Deployments/XList.php +++ b/src/Appwrite/Platform/Modules/Functions/Http/Deployments/XList.php @@ -95,16 +95,10 @@ class XList extends Base $queries[] = Query::equal('resourceInternalId', [$function->getSequence()]); $queries[] = Query::equal('resourceType', ['functions']); - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); - if ($cursor) { - /** @var Query $cursor */ + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); diff --git a/src/Appwrite/Platform/Modules/Functions/Http/Executions/XList.php b/src/Appwrite/Platform/Modules/Functions/Http/Executions/XList.php index ff381e1f3d..f82207eaee 100644 --- a/src/Appwrite/Platform/Modules/Functions/Http/Executions/XList.php +++ b/src/Appwrite/Platform/Modules/Functions/Http/Executions/XList.php @@ -91,16 +91,10 @@ class XList extends Base $queries[] = Query::equal('resourceInternalId', [$function->getSequence()]); $queries[] = Query::equal('resourceType', ['functions']); - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); - if ($cursor) { - /** @var Query $cursor */ + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); diff --git a/src/Appwrite/Platform/Modules/Functions/Http/Functions/XList.php b/src/Appwrite/Platform/Modules/Functions/Http/Functions/XList.php index aaf288bee7..8e71258501 100644 --- a/src/Appwrite/Platform/Modules/Functions/Http/Functions/XList.php +++ b/src/Appwrite/Platform/Modules/Functions/Http/Functions/XList.php @@ -78,16 +78,10 @@ class XList extends Base $queries[] = Query::search('search', $search); } - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); - if ($cursor) { - /** @var Query $cursor */ + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); diff --git a/src/Appwrite/Platform/Modules/Projects/Http/Projects/XList.php b/src/Appwrite/Platform/Modules/Projects/Http/Projects/XList.php index 7269582a15..fe29fdc4da 100644 --- a/src/Appwrite/Platform/Modules/Projects/Http/Projects/XList.php +++ b/src/Appwrite/Platform/Modules/Projects/Http/Projects/XList.php @@ -86,16 +86,10 @@ class XList extends Action $queries[] = Query::search('search', $search); } - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); - if ($cursor) { - /** @var Query $cursor */ + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); diff --git a/src/Appwrite/Platform/Modules/Proxy/Http/Rules/XList.php b/src/Appwrite/Platform/Modules/Proxy/Http/Rules/XList.php index e160b71060..19daf8c8d2 100644 --- a/src/Appwrite/Platform/Modules/Proxy/Http/Rules/XList.php +++ b/src/Appwrite/Platform/Modules/Proxy/Http/Rules/XList.php @@ -81,16 +81,10 @@ class XList extends Action $queries[] = Query::equal('projectInternalId', [$project->getSequence()]); - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); - if ($cursor) { - /** @var Query $cursor */ + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); diff --git a/src/Appwrite/Platform/Modules/Sites/Http/Deployments/XList.php b/src/Appwrite/Platform/Modules/Sites/Http/Deployments/XList.php index 73e5ea4d77..a01f54a6ff 100644 --- a/src/Appwrite/Platform/Modules/Sites/Http/Deployments/XList.php +++ b/src/Appwrite/Platform/Modules/Sites/Http/Deployments/XList.php @@ -95,16 +95,10 @@ class XList extends Base $queries[] = Query::equal('resourceInternalId', [$site->getSequence()]); $queries[] = Query::equal('resourceType', ['sites']); - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); - if ($cursor) { - /** @var Query $cursor */ + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); diff --git a/src/Appwrite/Platform/Modules/Sites/Http/Logs/XList.php b/src/Appwrite/Platform/Modules/Sites/Http/Logs/XList.php index e933a8d12b..38c6d4b29a 100644 --- a/src/Appwrite/Platform/Modules/Sites/Http/Logs/XList.php +++ b/src/Appwrite/Platform/Modules/Sites/Http/Logs/XList.php @@ -80,16 +80,10 @@ class XList extends Base $queries[] = Query::equal('resourceInternalId', [$site->getSequence()]); $queries[] = Query::equal('resourceType', ['sites']); - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); - if ($cursor) { - /** @var Query $cursor */ + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); diff --git a/src/Appwrite/Platform/Modules/Sites/Http/Sites/XList.php b/src/Appwrite/Platform/Modules/Sites/Http/Sites/XList.php index 8daf3eb063..2571043363 100644 --- a/src/Appwrite/Platform/Modules/Sites/Http/Sites/XList.php +++ b/src/Appwrite/Platform/Modules/Sites/Http/Sites/XList.php @@ -73,16 +73,10 @@ class XList extends Base $queries[] = Query::search('search', $search); } - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); - if ($cursor) { - /** @var Query $cursor */ + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); diff --git a/src/Appwrite/Platform/Modules/Storage/Http/Buckets/Files/XList.php b/src/Appwrite/Platform/Modules/Storage/Http/Buckets/Files/XList.php index 3663b56fab..6de360ae0e 100644 --- a/src/Appwrite/Platform/Modules/Storage/Http/Buckets/Files/XList.php +++ b/src/Appwrite/Platform/Modules/Storage/Http/Buckets/Files/XList.php @@ -101,16 +101,10 @@ class XList extends Action $queries[] = Query::search('search', $search); } - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); - if ($cursor) { - /** @var Query $cursor */ + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); diff --git a/src/Appwrite/Platform/Modules/Storage/Http/Buckets/XList.php b/src/Appwrite/Platform/Modules/Storage/Http/Buckets/XList.php index 601d9b5321..8f2cd9bbac 100644 --- a/src/Appwrite/Platform/Modules/Storage/Http/Buckets/XList.php +++ b/src/Appwrite/Platform/Modules/Storage/Http/Buckets/XList.php @@ -82,16 +82,10 @@ class XList extends Action $queries[] = Query::search('search', $search); } - /** - * Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries - */ - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); - if ($cursor) { - /** @var Query $cursor */ + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); + if ($cursor !== false) { $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); diff --git a/src/Appwrite/Platform/Modules/Tokens/Http/Tokens/Buckets/Files/XList.php b/src/Appwrite/Platform/Modules/Tokens/Http/Tokens/Buckets/Files/XList.php index 13da92cbc6..947801b465 100644 --- a/src/Appwrite/Platform/Modules/Tokens/Http/Tokens/Buckets/Files/XList.php +++ b/src/Appwrite/Platform/Modules/Tokens/Http/Tokens/Buckets/Files/XList.php @@ -69,13 +69,11 @@ class XList extends Action $queries = Query::parseQueries($queries); $queries[] = Query::equal('resourceType', [TOKENS_RESOURCE_TYPE_FILES]); $queries[] = Query::equal('resourceInternalId', [$bucket->getSequence() . ':' . $file->getSequence()]); - // Get cursor document if there was a cursor query - $cursor = \array_filter($queries, function ($query) { - return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - }); - $cursor = reset($cursor); - if ($cursor) { - /** @var Query $cursor */ + + $cursor = Query::getCursorQueries($queries, false); + $cursor = \reset($cursor); + + if ($cursor !== false) { $tokenId = $cursor->getValue(); $cursorDocument = $dbForProject->getDocument('resourceTokens', $tokenId); From f35aad0816cfa092bc8c4743196ef07ea97a479d Mon Sep 17 00:00:00 2001 From: fogelito Date: Wed, 28 Jan 2026 14:55:09 +0200 Subject: [PATCH 02/65] Remove extra line --- app/controllers/api/vcs.php | 1 - src/Appwrite/Platform/Modules/Databases/Http/Databases/XList.php | 1 - 2 files changed, 2 deletions(-) diff --git a/app/controllers/api/vcs.php b/app/controllers/api/vcs.php index 65753fd660..9feaa4d38d 100644 --- a/app/controllers/api/vcs.php +++ b/app/controllers/api/vcs.php @@ -1653,7 +1653,6 @@ App::get('/v1/vcs/installations') $cursor = \reset($cursor); if ($cursor !== false) { - $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/XList.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/XList.php index ff2f6a574b..f9589c4469 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/XList.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/XList.php @@ -77,7 +77,6 @@ class XList extends Action $cursor = \reset($cursor); if ($cursor !== false) { - $validator = new Cursor(); if (!$validator->isValid($cursor)) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); From 95ce53b66eab24f1a0a7eebeeb00800270c40f4e Mon Sep 17 00:00:00 2001 From: fogelito Date: Wed, 28 Jan 2026 15:15:33 +0200 Subject: [PATCH 03/65] Exception --- .../Tokens/Http/Tokens/Buckets/Files/XList.php | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Appwrite/Platform/Modules/Tokens/Http/Tokens/Buckets/Files/XList.php b/src/Appwrite/Platform/Modules/Tokens/Http/Tokens/Buckets/Files/XList.php index 947801b465..579c6e7100 100644 --- a/src/Appwrite/Platform/Modules/Tokens/Http/Tokens/Buckets/Files/XList.php +++ b/src/Appwrite/Platform/Modules/Tokens/Http/Tokens/Buckets/Files/XList.php @@ -2,18 +2,18 @@ namespace Appwrite\Platform\Modules\Tokens\Http\Tokens\Buckets\Files; -use Appwrite\Extend\Exception as ExtendException; +use Appwrite\Extend\Exception; use Appwrite\SDK\AuthType; use Appwrite\SDK\ContentType; use Appwrite\SDK\Method; use Appwrite\SDK\Response as SDKResponse; use Appwrite\Utopia\Database\Validator\Queries\FileTokens; use Appwrite\Utopia\Response; -use Exception; use Utopia\Database\Database; use Utopia\Database\Document; use Utopia\Database\Query; use Utopia\Database\Validator\Authorization; +use Utopia\Database\Validator\Query\Cursor; use Utopia\Database\Validator\UID; use Utopia\Platform\Scope\HTTP; use Utopia\Validator\Boolean; @@ -74,11 +74,16 @@ class XList extends Action $cursor = \reset($cursor); if ($cursor !== false) { + $validator = new Cursor(); + if (!$validator->isValid($cursor)) { + throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription()); + } + $tokenId = $cursor->getValue(); $cursorDocument = $dbForProject->getDocument('resourceTokens', $tokenId); if ($cursorDocument->isEmpty()) { - throw new Exception(ExtendException::GENERAL_CURSOR_NOT_FOUND, "File token '{$tokenId}' for the 'cursor' value not found."); + throw new Exception(Exception::GENERAL_CURSOR_NOT_FOUND, "File token '{$tokenId}' for the 'cursor' value not found."); } $cursor->setValue($cursorDocument); From 01cc9bcd1f2f8855a3d223fa9a72e7adf0c44686 Mon Sep 17 00:00:00 2001 From: Hemachandar Date: Thu, 29 Jan 2026 21:35:42 +0530 Subject: [PATCH 04/65] Move project create & update APIs to Modules --- app/controllers/api/projects.php | 376 ------------------ app/controllers/api/teams.php | 22 +- .../Platform/Modules/Compute/Base.php | 26 ++ .../Functions/Http/Functions/Create.php | 8 +- .../Functions/Http/Functions/Update.php | 8 +- .../Functions/Http/Variables/Create.php | 8 +- .../Modules/Projects/Http/Projects/Action.php | 30 ++ .../Modules/Projects/Http/Projects/Create.php | 294 ++++++++++++++ .../Projects/Http/Projects/Team/Update.php | 107 +++++ .../Modules/Projects/Http/Projects/Update.php | 94 +++++ .../Modules/Projects/Services/Http.php | 6 + .../Modules/Sites/Http/Sites/Create.php | 8 +- .../Modules/Sites/Http/Sites/Update.php | 8 +- .../Modules/Sites/Http/Variables/Create.php | 8 +- 14 files changed, 565 insertions(+), 438 deletions(-) create mode 100644 src/Appwrite/Platform/Modules/Projects/Http/Projects/Action.php create mode 100644 src/Appwrite/Platform/Modules/Projects/Http/Projects/Create.php create mode 100644 src/Appwrite/Platform/Modules/Projects/Http/Projects/Team/Update.php create mode 100644 src/Appwrite/Platform/Modules/Projects/Http/Projects/Update.php diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index 57ad3030d9..3cebc4fbb9 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -61,251 +61,6 @@ App::init() } }); -App::post('/v1/projects') - ->desc('Create project') - ->groups(['api', 'projects']) - ->label('audits.event', 'projects.create') - ->label('audits.resource', 'project/{response.$id}') - ->label('scope', 'projects.write') - ->label('sdk', new Method( - namespace: 'projects', - group: 'projects', - name: 'create', - description: '/docs/references/projects/create.md', - auth: [AuthType::ADMIN], - responses: [ - new SDKResponse( - code: Response::STATUS_CODE_CREATED, - model: Response::MODEL_PROJECT, - ) - ] - )) - ->param('projectId', '', new ProjectId(), 'Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, and hyphen. Can\'t start with a special char. Max length is 36 chars.') - ->param('name', null, new Text(128), 'Project name. Max length: 128 chars.') - ->param('teamId', '', new UID(), 'Team unique ID.') - ->param('region', System::getEnv('_APP_REGION', 'default'), new Whitelist(array_keys(array_filter(Config::getParam('regions'), fn ($config) => !$config['disabled']))), 'Project Region.', true) - ->param('description', '', new Text(256), 'Project description. Max length: 256 chars.', true) - ->param('logo', '', new Text(1024), 'Project logo.', true) - ->param('url', '', new URL(), 'Project URL.', true) - ->param('legalName', '', new Text(256), 'Project legal Name. Max length: 256 chars.', true) - ->param('legalCountry', '', new Text(256), 'Project legal Country. Max length: 256 chars.', true) - ->param('legalState', '', new Text(256), 'Project legal State. Max length: 256 chars.', true) - ->param('legalCity', '', new Text(256), 'Project legal City. Max length: 256 chars.', true) - ->param('legalAddress', '', new Text(256), 'Project legal Address. Max length: 256 chars.', true) - ->param('legalTaxId', '', new Text(256), 'Project legal Tax ID. Max length: 256 chars.', true) - ->inject('request') - ->inject('response') - ->inject('dbForPlatform') - ->inject('cache') - ->inject('pools') - ->inject('hooks') - ->action(function (string $projectId, string $name, string $teamId, string $region, string $description, string $logo, string $url, string $legalName, string $legalCountry, string $legalState, string $legalCity, string $legalAddress, string $legalTaxId, Request $request, Response $response, Database $dbForPlatform, Cache $cache, Group $pools, Hooks $hooks) { - - $team = $dbForPlatform->getDocument('teams', $teamId); - - if ($team->isEmpty()) { - throw new Exception(Exception::TEAM_NOT_FOUND); - } - - $allowList = \array_filter(\explode(',', System::getEnv('_APP_PROJECT_REGIONS', ''))); - - if (!empty($allowList) && !\in_array($region, $allowList)) { - throw new Exception(Exception::PROJECT_REGION_UNSUPPORTED, 'Region "' . $region . '" is not supported'); - } - - $auth = Config::getParam('auth', []); - $auths = [ - 'limit' => 0, - 'maxSessions' => APP_LIMIT_USER_SESSIONS_DEFAULT, - 'passwordHistory' => 0, - 'passwordDictionary' => false, - 'duration' => TOKEN_EXPIRATION_LOGIN_LONG, - 'personalDataCheck' => false, - 'mockNumbers' => [], - 'sessionAlerts' => false, - 'membershipsUserName' => false, - 'membershipsUserEmail' => false, - 'membershipsMfa' => false, - 'invalidateSessions' => true - ]; - - foreach ($auth as $method) { - $auths[$method['key'] ?? ''] = true; - } - - $projectId = ($projectId == 'unique()') ? ID::unique() : $projectId; - - if ($projectId === 'console') { - throw new Exception(Exception::PROJECT_RESERVED_PROJECT, "'console' is a reserved project."); - } - - $databases = Config::getParam('pools-database', []); - - if ($region !== 'default') { - $databaseKeys = System::getEnv('_APP_DATABASE_KEYS', ''); - $keys = explode(',', $databaseKeys); - $databases = array_filter($keys, function ($value) use ($region) { - return str_contains($value, $region); - }); - } - - $databaseOverride = System::getEnv('_APP_DATABASE_OVERRIDE'); - $index = \array_search($databaseOverride, $databases); - if ($index !== false) { - $dsn = $databases[$index]; - } else { - $dsn = $databases[array_rand($databases)]; - } - - // TODO: Temporary until all projects are using shared tables. - $sharedTables = \explode(',', System::getEnv('_APP_DATABASE_SHARED_TABLES', '')); - - if (\in_array($dsn, $sharedTables)) { - $schema = 'appwrite'; - $database = 'appwrite'; - $namespace = System::getEnv('_APP_DATABASE_SHARED_NAMESPACE', ''); - $dsn = $schema . '://' . $dsn . '?database=' . $database; - - if (!empty($namespace)) { - $dsn .= '&namespace=' . $namespace; - } - } - - try { - $project = $dbForPlatform->createDocument('projects', new Document([ - '$id' => $projectId, - '$permissions' => [ - Permission::read(Role::team(ID::custom($teamId))), - Permission::update(Role::team(ID::custom($teamId), 'owner')), - Permission::update(Role::team(ID::custom($teamId), 'developer')), - Permission::delete(Role::team(ID::custom($teamId), 'owner')), - Permission::delete(Role::team(ID::custom($teamId), 'developer')), - ], - 'name' => $name, - 'teamInternalId' => $team->getSequence(), - 'teamId' => $team->getId(), - 'region' => $region, - 'description' => $description, - 'logo' => $logo, - 'url' => $url, - 'version' => APP_VERSION_STABLE, - 'legalName' => $legalName, - 'legalCountry' => $legalCountry, - 'legalState' => $legalState, - 'legalCity' => $legalCity, - 'legalAddress' => $legalAddress, - 'legalTaxId' => ID::custom($legalTaxId), - 'services' => new stdClass(), - 'platforms' => null, - 'oAuthProviders' => [], - 'webhooks' => null, - 'keys' => null, - 'auths' => $auths, - 'accessedAt' => DateTime::now(), - 'search' => implode(' ', [$projectId, $name]), - 'database' => $dsn, - 'labels' => [], - ])); - } catch (Duplicate) { - throw new Exception(Exception::PROJECT_ALREADY_EXISTS); - } - - try { - $dsn = new DSN($dsn); - } catch (\InvalidArgumentException) { - // TODO: Temporary until all projects are using shared tables - $dsn = new DSN('mysql://' . $dsn); - } - - $sharedTables = \explode(',', System::getEnv('_APP_DATABASE_SHARED_TABLES', '')); - $sharedTablesV1 = \explode(',', System::getEnv('_APP_DATABASE_SHARED_TABLES_V1', '')); - $projectTables = !\in_array($dsn->getHost(), $sharedTables); - $sharedTablesV1 = \in_array($dsn->getHost(), $sharedTablesV1); - $sharedTablesV2 = !$projectTables && !$sharedTablesV1; - $sharedTables = $sharedTablesV1 || $sharedTablesV2; - - if (!$sharedTablesV2) { - $adapter = new DatabasePool($pools->get($dsn->getHost())); - $dbForProject = new Database($adapter, $cache); - $dbForProject->setDatabase(APP_DATABASE); - - if ($sharedTables) { - $dbForProject - ->setSharedTables(true) - ->setTenant($sharedTablesV1 ? (int)$project->getSequence() : null) - ->setNamespace($dsn->getParam('namespace')); - } else { - $dbForProject - ->setSharedTables(false) - ->setTenant(null) - ->setNamespace('_' . $project->getSequence()); - } - - $create = true; - - try { - $dbForProject->create(); - } catch (Duplicate) { - $create = false; - } - - if ($create || $projectTables) { - $adapter = new AdapterDatabase($dbForProject); - $audit = new Audit($adapter); - $audit->setup(); - } - - if (!$create && $sharedTablesV1) { - $adapter = new AdapterDatabase($dbForProject); - $attributes = $adapter->getAttributeDocuments(); - $indexes = $adapter->getIndexDocuments(); - $dbForProject->createDocument(Database::METADATA, new Document([ - '$id' => ID::custom('audit'), - '$permissions' => [Permission::create(Role::any())], - 'name' => 'audit', - 'attributes' => $attributes, - 'indexes' => $indexes, - 'documentSecurity' => true - ])); - } - - if ($create || $sharedTablesV1) { - /** @var array $collections */ - $collections = Config::getParam('collections', [])['projects'] ?? []; - - foreach ($collections as $key => $collection) { - if (($collection['$collection'] ?? '') !== Database::METADATA) { - continue; - } - - $attributes = \array_map(fn ($attribute) => new Document($attribute), $collection['attributes']); - $indexes = \array_map(fn (array $index) => new Document($index), $collection['indexes']); - - try { - $dbForProject->createCollection($key, $attributes, $indexes); - } catch (Duplicate) { - $dbForProject->createDocument(Database::METADATA, new Document([ - '$id' => ID::custom($key), - '$permissions' => [Permission::create(Role::any())], - 'name' => $key, - 'attributes' => $attributes, - 'indexes' => $indexes, - 'documentSecurity' => true - ])); - } - } - } - } - - // Hook allowing instant project mirroring during migration - // Outside of migration, hook is not registered and has no effect - $hooks->trigger('afterProjectCreation', [$project, $pools, $cache]); - - $response - ->setStatusCode(Response::STATUS_CODE_CREATED) - ->dynamic($project, Response::MODEL_PROJECT); - }); - App::get('/v1/projects/:projectId') ->desc('Get project') ->groups(['api', 'projects']) @@ -337,137 +92,6 @@ App::get('/v1/projects/:projectId') $response->dynamic($project, Response::MODEL_PROJECT); }); -App::patch('/v1/projects/:projectId') - ->desc('Update project') - ->groups(['api', 'projects']) - ->label('scope', 'projects.write') - ->label('audits.event', 'projects.update') - ->label('audits.resource', 'project/{request.projectId}') - ->label('sdk', new Method( - namespace: 'projects', - group: 'projects', - name: 'update', - description: '/docs/references/projects/update.md', - auth: [AuthType::ADMIN], - responses: [ - new SDKResponse( - code: Response::STATUS_CODE_OK, - model: Response::MODEL_PROJECT, - ) - ] - )) - ->param('projectId', '', new UID(), 'Project unique ID.') - ->param('name', null, new Text(128), 'Project name. Max length: 128 chars.') - ->param('description', '', new Text(256), 'Project description. Max length: 256 chars.', true) - ->param('logo', '', new Text(1024), 'Project logo.', true) - ->param('url', '', new URL(), 'Project URL.', true) - ->param('legalName', '', new Text(256), 'Project legal name. Max length: 256 chars.', true) - ->param('legalCountry', '', new Text(256), 'Project legal country. Max length: 256 chars.', true) - ->param('legalState', '', new Text(256), 'Project legal state. Max length: 256 chars.', true) - ->param('legalCity', '', new Text(256), 'Project legal city. Max length: 256 chars.', true) - ->param('legalAddress', '', new Text(256), 'Project legal address. Max length: 256 chars.', true) - ->param('legalTaxId', '', new Text(256), 'Project legal tax ID. Max length: 256 chars.', true) - ->inject('response') - ->inject('dbForPlatform') - ->action(function (string $projectId, string $name, string $description, string $logo, string $url, string $legalName, string $legalCountry, string $legalState, string $legalCity, string $legalAddress, string $legalTaxId, Response $response, Database $dbForPlatform) { - - $project = $dbForPlatform->getDocument('projects', $projectId); - - if ($project->isEmpty()) { - throw new Exception(Exception::PROJECT_NOT_FOUND); - } - - $project = $dbForPlatform->updateDocument('projects', $project->getId(), $project - ->setAttribute('name', $name) - ->setAttribute('description', $description) - ->setAttribute('logo', $logo) - ->setAttribute('url', $url) - ->setAttribute('legalName', $legalName) - ->setAttribute('legalCountry', $legalCountry) - ->setAttribute('legalState', $legalState) - ->setAttribute('legalCity', $legalCity) - ->setAttribute('legalAddress', $legalAddress) - ->setAttribute('legalTaxId', $legalTaxId) - ->setAttribute('search', implode(' ', [$projectId, $name]))); - - $response->dynamic($project, Response::MODEL_PROJECT); - }); - -App::patch('/v1/projects/:projectId/team') - ->desc('Update project team') - ->groups(['api', 'projects']) - ->label('scope', 'projects.write') - ->label('sdk', new Method( - namespace: 'projects', - group: 'projects', - name: 'updateTeam', - description: '/docs/references/projects/update-team.md', - auth: [AuthType::ADMIN], - responses: [ - new SDKResponse( - code: Response::STATUS_CODE_OK, - model: Response::MODEL_PROJECT, - ) - ] - )) - ->param('projectId', '', new UID(), 'Project unique ID.') - ->param('teamId', '', new UID(), 'Team ID of the team to transfer project to.') - ->inject('response') - ->inject('dbForPlatform') - ->action(function (string $projectId, string $teamId, Response $response, Database $dbForPlatform) { - - $project = $dbForPlatform->getDocument('projects', $projectId); - $team = $dbForPlatform->getDocument('teams', $teamId); - - if ($project->isEmpty()) { - throw new Exception(Exception::PROJECT_NOT_FOUND); - } - - if ($team->isEmpty()) { - throw new Exception(Exception::TEAM_NOT_FOUND); - } - - $permissions = [ - Permission::read(Role::team(ID::custom($teamId))), - Permission::update(Role::team(ID::custom($teamId), 'owner')), - Permission::update(Role::team(ID::custom($teamId), 'developer')), - Permission::delete(Role::team(ID::custom($teamId), 'owner')), - Permission::delete(Role::team(ID::custom($teamId), 'developer')), - ]; - - $project - ->setAttribute('teamId', $teamId) - ->setAttribute('teamInternalId', $team->getSequence()) - ->setAttribute('$permissions', $permissions); - $project = $dbForPlatform->updateDocument('projects', $project->getId(), $project); - - $installations = $dbForPlatform->find('installations', [ - Query::equal('projectInternalId', [$project->getSequence()]), - ]); - foreach ($installations as $installation) { - $installation->getAttribute('$permissions', $permissions); - $dbForPlatform->updateDocument('installations', $installation->getId(), $installation); - } - - $repositories = $dbForPlatform->find('repositories', [ - Query::equal('projectInternalId', [$project->getSequence()]), - ]); - foreach ($repositories as $repository) { - $repository->getAttribute('$permissions', $permissions); - $dbForPlatform->updateDocument('repositories', $repository->getId(), $repository); - } - - $vcsComments = $dbForPlatform->find('vcsComments', [ - Query::equal('projectInternalId', [$project->getSequence()]), - ]); - foreach ($vcsComments as $vcsComment) { - $vcsComment->getAttribute('$permissions', $permissions); - $dbForPlatform->updateDocument('vcsComments', $vcsComment->getId(), $vcsComment); - } - - $response->dynamic($project, Response::MODEL_PROJECT); - }); - App::patch('/v1/projects/:projectId/service') ->desc('Update service status') ->groups(['api', 'projects']) diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index 703582f3fd..c9e57cb353 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -484,16 +484,7 @@ App::post('/v1/teams/:teamId/memberships') ->param('email', '', new EmailValidator(), 'Email of the new team member.', true) ->param('userId', '', new UID(), 'ID of the user to be added to a team.', true) ->param('phone', '', new Phone(), 'Phone number. Format this number with a leading \'+\' and a country code, e.g., +16175551212.', true) - ->param('roles', [], function (Document $project) { - if ($project->getId() === 'console') { - $roles = array_keys(Config::getParam('roles', [])); - $roles = array_filter($roles, function ($role) { - return !in_array($role, [User::ROLE_APPS, User::ROLE_GUESTS, User::ROLE_USERS]); - }); - return new ArrayList(new WhiteList($roles), APP_LIMIT_ARRAY_PARAMS_SIZE); - } - return new ArrayList(new Key(), APP_LIMIT_ARRAY_PARAMS_SIZE); - }, '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 ' . APP_LIMIT_ARRAY_PARAMS_SIZE . ' roles are allowed, each 32 characters long.', false, ['project']) + ->param('roles', [], new ArrayList(new Key(), APP_LIMIT_ARRAY_PARAMS_SIZE), '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 ' . APP_LIMIT_ARRAY_PARAMS_SIZE . ' roles are allowed, each 32 characters long.', false, ['project']) ->param('url', '', fn ($redirectValidator) => $redirectValidator, 'URL to redirect the user back to your app from the invitation email. This parameter is not required when an API key is supplied. 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.', true, ['redirectValidator']) // TODO add our own built-in confirm page ->param('name', '', new Text(128), 'Name of the new team member. Max length: 128 chars.', true) ->inject('response') @@ -1095,16 +1086,7 @@ App::patch('/v1/teams/:teamId/memberships/:membershipId') )) ->param('teamId', '', new UID(), 'Team ID.') ->param('membershipId', '', new UID(), 'Membership ID.') - ->param('roles', [], function (Document $project) { - if ($project->getId() === 'console') { - $roles = array_keys(Config::getParam('roles', [])); - $roles = array_filter($roles, function ($role) { - return !in_array($role, [User::ROLE_APPS, User::ROLE_GUESTS, User::ROLE_USERS]); - }); - return new ArrayList(new WhiteList($roles), APP_LIMIT_ARRAY_PARAMS_SIZE); - } - return new ArrayList(new Key(), APP_LIMIT_ARRAY_PARAMS_SIZE); - }, '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 ' . APP_LIMIT_ARRAY_PARAMS_SIZE . ' roles are allowed, each 32 characters long.', false, ['project']) + ->param('roles', [], new ArrayList(new Key(), APP_LIMIT_ARRAY_PARAMS_SIZE), '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 ' . APP_LIMIT_ARRAY_PARAMS_SIZE . ' roles are allowed, each 32 characters long.', false, ['project']) ->inject('request') ->inject('response') ->inject('user') diff --git a/src/Appwrite/Platform/Modules/Compute/Base.php b/src/Appwrite/Platform/Modules/Compute/Base.php index 749a9fe87a..f0dcb1a4ff 100644 --- a/src/Appwrite/Platform/Modules/Compute/Base.php +++ b/src/Appwrite/Platform/Modules/Compute/Base.php @@ -22,6 +22,32 @@ use Utopia\VCS\Exception\RepositoryNotFound; class Base extends Action { + /** + * Permissions for resources in this project. + * + * @param string $teamId + * @param string $projectId + * @return string[] + */ + protected function getPermissions(string $teamId, string $projectId): array + { + return [ + // Team-wide permissions + Permission::read(Role::team(ID::custom($teamId), 'owner')), + Permission::read(Role::team(ID::custom($teamId), 'developer')), + Permission::update(Role::team(ID::custom($teamId), 'owner')), + Permission::update(Role::team(ID::custom($teamId), 'developer')), + Permission::delete(Role::team(ID::custom($teamId), 'owner')), + Permission::delete(Role::team(ID::custom($teamId), 'developer')), + // Project-wide permissions + Permission::read(Role::team(ID::custom($teamId), "project-{$projectId}")), + Permission::update(Role::team(ID::custom($teamId), "project-{$projectId}-owner")), + Permission::update(Role::team(ID::custom($teamId), "project-{$projectId}-developer")), + Permission::delete(Role::team(ID::custom($teamId), "project-{$projectId}-owner")), + Permission::delete(Role::team(ID::custom($teamId), "project-{$projectId}-developer")), + ]; + } + /** * Get default specification based on plan and available specifications. * diff --git a/src/Appwrite/Platform/Modules/Functions/Http/Functions/Create.php b/src/Appwrite/Platform/Modules/Functions/Http/Functions/Create.php index 4bf072d115..41adfe283b 100644 --- a/src/Appwrite/Platform/Modules/Functions/Http/Functions/Create.php +++ b/src/Appwrite/Platform/Modules/Functions/Http/Functions/Create.php @@ -265,13 +265,7 @@ class Create extends Base $repository = $dbForPlatform->createDocument('repositories', new Document([ '$id' => ID::unique(), - '$permissions' => [ - Permission::read(Role::team(ID::custom($teamId))), - Permission::update(Role::team(ID::custom($teamId), 'owner')), - Permission::update(Role::team(ID::custom($teamId), 'developer')), - Permission::delete(Role::team(ID::custom($teamId), 'owner')), - Permission::delete(Role::team(ID::custom($teamId), 'developer')), - ], + '$permissions' => $this->getPermissions($teamId, $project->getId()), 'installationId' => $installation->getId(), 'installationInternalId' => $installation->getSequence(), 'projectId' => $project->getId(), diff --git a/src/Appwrite/Platform/Modules/Functions/Http/Functions/Update.php b/src/Appwrite/Platform/Modules/Functions/Http/Functions/Update.php index e5ff11864a..7a7d4c098a 100644 --- a/src/Appwrite/Platform/Modules/Functions/Http/Functions/Update.php +++ b/src/Appwrite/Platform/Modules/Functions/Http/Functions/Update.php @@ -202,13 +202,7 @@ class Update extends Base $repository = $dbForPlatform->createDocument('repositories', new Document([ '$id' => ID::unique(), - '$permissions' => [ - Permission::read(Role::team(ID::custom($teamId))), - Permission::update(Role::team(ID::custom($teamId), 'owner')), - Permission::update(Role::team(ID::custom($teamId), 'developer')), - Permission::delete(Role::team(ID::custom($teamId), 'owner')), - Permission::delete(Role::team(ID::custom($teamId), 'developer')), - ], + '$permissions' => $this->getPermissions($teamId, $project->getId()), 'installationId' => $installation->getId(), 'installationInternalId' => $installation->getSequence(), 'projectId' => $project->getId(), diff --git a/src/Appwrite/Platform/Modules/Functions/Http/Variables/Create.php b/src/Appwrite/Platform/Modules/Functions/Http/Variables/Create.php index 5438479d40..6cf54765cd 100644 --- a/src/Appwrite/Platform/Modules/Functions/Http/Variables/Create.php +++ b/src/Appwrite/Platform/Modules/Functions/Http/Variables/Create.php @@ -91,13 +91,7 @@ class Create extends Base $teamId = $project->getAttribute('teamId', ''); $variable = new Document([ '$id' => $variableId, - '$permissions' => [ - Permission::read(Role::team(ID::custom($teamId))), - Permission::update(Role::team(ID::custom($teamId), 'owner')), - Permission::update(Role::team(ID::custom($teamId), 'developer')), - Permission::delete(Role::team(ID::custom($teamId), 'owner')), - Permission::delete(Role::team(ID::custom($teamId), 'developer')), - ], + '$permissions' => $this->getPermissions($teamId, $project->getId()), 'resourceInternalId' => $function->getSequence(), 'resourceId' => $function->getId(), 'resourceType' => 'function', diff --git a/src/Appwrite/Platform/Modules/Projects/Http/Projects/Action.php b/src/Appwrite/Platform/Modules/Projects/Http/Projects/Action.php new file mode 100644 index 0000000000..1b38fa01f4 --- /dev/null +++ b/src/Appwrite/Platform/Modules/Projects/Http/Projects/Action.php @@ -0,0 +1,30 @@ +setHttpMethod(Action::HTTP_REQUEST_METHOD_POST) + ->setHttpPath('/v1/projects') + ->desc('Create project') + ->groups(['api', 'projects']) + ->label('audits.event', 'projects.create') + ->label('audits.resource', 'project/{response.$id}') + ->label('scope', 'projects.write') + ->label('sdk', new Method( + namespace: 'projects', + group: 'projects', + name: 'create', + description: '/docs/references/projects/create.md', + auth: [AuthType::ADMIN], + responses: [ + new SDKResponse( + code: Response::STATUS_CODE_CREATED, + model: Response::MODEL_PROJECT, + ) + ] + )) + ->param('projectId', '', new ProjectId(), 'Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, and hyphen. Can\'t start with a special char. Max length is 36 chars.') + ->param('name', null, new Text(128), 'Project name. Max length: 128 chars.') + ->param('teamId', '', new UID(), 'Team unique ID.') + ->param('region', System::getEnv('_APP_REGION', 'default'), new WhiteList(array_keys(array_filter(Config::getParam('regions'), fn ($config) => !$config['disabled']))), 'Project Region.', true) + ->param('description', '', new Text(256), 'Project description. Max length: 256 chars.', true) + ->param('logo', '', new Text(1024), 'Project logo.', true) + ->param('url', '', new URL(), 'Project URL.', true) + ->param('legalName', '', new Text(256), 'Project legal Name. Max length: 256 chars.', true) + ->param('legalCountry', '', new Text(256), 'Project legal Country. Max length: 256 chars.', true) + ->param('legalState', '', new Text(256), 'Project legal State. Max length: 256 chars.', true) + ->param('legalCity', '', new Text(256), 'Project legal City. Max length: 256 chars.', true) + ->param('legalAddress', '', new Text(256), 'Project legal Address. Max length: 256 chars.', true) + ->param('legalTaxId', '', new Text(256), 'Project legal Tax ID. Max length: 256 chars.', true) + ->inject('request') + ->inject('response') + ->inject('dbForPlatform') + ->inject('cache') + ->inject('pools') + ->inject('hooks') + ->callback($this->action(...)); + } + + public function action(string $projectId, string $name, string $teamId, string $region, string $description, string $logo, string $url, string $legalName, string $legalCountry, string $legalState, string $legalCity, string $legalAddress, string $legalTaxId, Request $request, Response $response, Database $dbForPlatform, Cache $cache, Group $pools, Hooks $hooks) + { + $team = $dbForPlatform->getDocument('teams', $teamId); + + if ($team->isEmpty()) { + throw new Exception(Exception::TEAM_NOT_FOUND); + } + + $allowList = \array_filter(\explode(',', System::getEnv('_APP_PROJECT_REGIONS', ''))); + + if (!empty($allowList) && !\in_array($region, $allowList)) { + throw new Exception(Exception::PROJECT_REGION_UNSUPPORTED, 'Region "' . $region . '" is not supported'); + } + + $auth = Config::getParam('auth', []); + $auths = [ + 'limit' => 0, + 'maxSessions' => APP_LIMIT_USER_SESSIONS_DEFAULT, + 'passwordHistory' => 0, + 'passwordDictionary' => false, + 'duration' => TOKEN_EXPIRATION_LOGIN_LONG, + 'personalDataCheck' => false, + 'mockNumbers' => [], + 'sessionAlerts' => false, + 'membershipsUserName' => false, + 'membershipsUserEmail' => false, + 'membershipsMfa' => false, + 'invalidateSessions' => true + ]; + + foreach ($auth as $method) { + $auths[$method['key'] ?? ''] = true; + } + + $projectId = ($projectId == 'unique()') ? ID::unique() : $projectId; + + if ($projectId === 'console') { + throw new Exception(Exception::PROJECT_RESERVED_PROJECT, "'console' is a reserved project."); + } + + $databases = Config::getParam('pools-database', []); + + if ($region !== 'default') { + $databaseKeys = System::getEnv('_APP_DATABASE_KEYS', ''); + $keys = explode(',', $databaseKeys); + $databases = array_filter($keys, function ($value) use ($region) { + return str_contains($value, $region); + }); + } + + $databaseOverride = System::getEnv('_APP_DATABASE_OVERRIDE'); + $index = \array_search($databaseOverride, $databases); + if ($index !== false) { + $dsn = $databases[$index]; + } else { + $dsn = $databases[array_rand($databases)]; + } + + // TODO: Temporary until all projects are using shared tables. + $sharedTables = \explode(',', System::getEnv('_APP_DATABASE_SHARED_TABLES', '')); + + if (\in_array($dsn, $sharedTables)) { + $schema = 'appwrite'; + $database = 'appwrite'; + $namespace = System::getEnv('_APP_DATABASE_SHARED_NAMESPACE', ''); + $dsn = $schema . '://' . $dsn . '?database=' . $database; + + if (!empty($namespace)) { + $dsn .= '&namespace=' . $namespace; + } + } + + try { + $project = $dbForPlatform->createDocument('projects', new Document([ + '$id' => $projectId, + '$permissions' => $this->getPermissions($teamId, $projectId), + 'name' => $name, + 'teamInternalId' => $team->getSequence(), + 'teamId' => $team->getId(), + 'region' => $region, + 'description' => $description, + 'logo' => $logo, + 'url' => $url, + 'version' => APP_VERSION_STABLE, + 'legalName' => $legalName, + 'legalCountry' => $legalCountry, + 'legalState' => $legalState, + 'legalCity' => $legalCity, + 'legalAddress' => $legalAddress, + 'legalTaxId' => ID::custom($legalTaxId), + 'services' => new \stdClass(), + 'platforms' => null, + 'oAuthProviders' => [], + 'webhooks' => null, + 'keys' => null, + 'auths' => $auths, + 'accessedAt' => DateTime::now(), + 'search' => implode(' ', [$projectId, $name]), + 'database' => $dsn, + 'labels' => [], + ])); + } catch (Duplicate) { + throw new Exception(Exception::PROJECT_ALREADY_EXISTS); + } + + try { + $dsn = new DSN($dsn); + } catch (\InvalidArgumentException) { + // TODO: Temporary until all projects are using shared tables + $dsn = new DSN('mysql://' . $dsn); + } + + $sharedTables = \explode(',', System::getEnv('_APP_DATABASE_SHARED_TABLES', '')); + $sharedTablesV1 = \explode(',', System::getEnv('_APP_DATABASE_SHARED_TABLES_V1', '')); + $projectTables = !\in_array($dsn->getHost(), $sharedTables); + $sharedTablesV1 = \in_array($dsn->getHost(), $sharedTablesV1); + $sharedTablesV2 = !$projectTables && !$sharedTablesV1; + $sharedTables = $sharedTablesV1 || $sharedTablesV2; + + if (!$sharedTablesV2) { + $adapter = new DatabasePool($pools->get($dsn->getHost())); + $dbForProject = new Database($adapter, $cache); + $dbForProject->setDatabase(APP_DATABASE); + + if ($sharedTables) { + $dbForProject + ->setSharedTables(true) + ->setTenant($sharedTablesV1 ? (int)$project->getSequence() : null) + ->setNamespace($dsn->getParam('namespace')); + } else { + $dbForProject + ->setSharedTables(false) + ->setTenant(null) + ->setNamespace('_' . $project->getSequence()); + } + + $create = true; + + try { + $dbForProject->create(); + } catch (Duplicate) { + $create = false; + } + + if ($create || $projectTables) { + $adapter = new AdapterDatabase($dbForProject); + $audit = new Audit($adapter); + $audit->setup(); + } + + if (!$create && $sharedTablesV1) { + $adapter = new AdapterDatabase($dbForProject); + $attributes = $adapter->getAttributeDocuments(); + $indexes = $adapter->getIndexDocuments(); + $dbForProject->createDocument(Database::METADATA, new Document([ + '$id' => ID::custom('audit'), + '$permissions' => [Permission::create(Role::any())], + 'name' => 'audit', + 'attributes' => $attributes, + 'indexes' => $indexes, + 'documentSecurity' => true + ])); + } + + if ($create || $sharedTablesV1) { + /** @var array $collections */ + $collections = Config::getParam('collections', [])['projects'] ?? []; + + foreach ($collections as $key => $collection) { + if (($collection['$collection'] ?? '') !== Database::METADATA) { + continue; + } + + $attributes = \array_map(fn ($attribute) => new Document($attribute), $collection['attributes']); + $indexes = \array_map(fn (array $index) => new Document($index), $collection['indexes']); + + try { + $dbForProject->createCollection($key, $attributes, $indexes); + } catch (Duplicate) { + $dbForProject->createDocument(Database::METADATA, new Document([ + '$id' => ID::custom($key), + '$permissions' => [Permission::create(Role::any())], + 'name' => $key, + 'attributes' => $attributes, + 'indexes' => $indexes, + 'documentSecurity' => true + ])); + } + } + } + } + + // Hook allowing instant project mirroring during migration + // Outside of migration, hook is not registered and has no effect + $hooks->trigger('afterProjectCreation', [$project, $pools, $cache]); + + $response + ->setStatusCode(Response::STATUS_CODE_CREATED) + ->dynamic($project, Response::MODEL_PROJECT); + } +} \ No newline at end of file diff --git a/src/Appwrite/Platform/Modules/Projects/Http/Projects/Team/Update.php b/src/Appwrite/Platform/Modules/Projects/Http/Projects/Team/Update.php new file mode 100644 index 0000000000..ac1537cd3a --- /dev/null +++ b/src/Appwrite/Platform/Modules/Projects/Http/Projects/Team/Update.php @@ -0,0 +1,107 @@ +setHttpMethod(Action::HTTP_REQUEST_METHOD_PATCH) + ->setHttpPath('/v1/projects/:projectId/team') + ->desc('Update project team') + ->groups(['api', 'projects']) + ->label('scope', 'projects.write') + ->label('sdk', new Method( + namespace: 'projects', + group: 'projects', + name: 'updateTeam', + description: '/docs/references/projects/update-team.md', + auth: [AuthType::ADMIN], + responses: [ + new SDKResponse( + code: Response::STATUS_CODE_OK, + model: Response::MODEL_PROJECT, + ) + ] + )) + ->param('projectId', '', new UID(), 'Project unique ID.') + ->param('teamId', '', new UID(), 'Team ID of the team to transfer project to.') + ->inject('response') + ->inject('dbForPlatform') + ->callback($this->action(...)); + } + + public function action(string $projectId, string $teamId, Response $response, Database $dbForPlatform) + { + $project = $dbForPlatform->getDocument('projects', $projectId); + $team = $dbForPlatform->getDocument('teams', $teamId); + + if ($project->isEmpty()) { + throw new Exception(Exception::PROJECT_NOT_FOUND); + } + + if ($team->isEmpty()) { + throw new Exception(Exception::TEAM_NOT_FOUND); + } + + $permissions = $this->getPermissions($teamId, $projectId); + + $project + ->setAttribute('teamId', $teamId) + ->setAttribute('teamInternalId', $team->getSequence()) + ->setAttribute('$permissions', $permissions); + $project = $dbForPlatform->updateDocument('projects', $project->getId(), $project); + + $installations = $dbForPlatform->find('installations', [ + Query::equal('projectInternalId', [$project->getSequence()]), + ]); + foreach ($installations as $installation) { + $installation->setAttribute('$permissions', $permissions); + $dbForPlatform->updateDocument('installations', $installation->getId(), $installation); + } + + $repositories = $dbForPlatform->find('repositories', [ + Query::equal('projectInternalId', [$project->getSequence()]), + ]); + foreach ($repositories as $repository) { + $repository->setAttribute('$permissions', $permissions); + $dbForPlatform->updateDocument('repositories', $repository->getId(), $repository); + } + + $vcsComments = $dbForPlatform->find('vcsComments', [ + Query::equal('projectInternalId', [$project->getSequence()]), + ]); + foreach ($vcsComments as $vcsComment) { + $vcsComment->setAttribute('$permissions', $permissions); + $dbForPlatform->updateDocument('vcsComments', $vcsComment->getId(), $vcsComment); + } + + $response->dynamic($project, Response::MODEL_PROJECT); + } +} \ No newline at end of file diff --git a/src/Appwrite/Platform/Modules/Projects/Http/Projects/Update.php b/src/Appwrite/Platform/Modules/Projects/Http/Projects/Update.php new file mode 100644 index 0000000000..2ec0fd9501 --- /dev/null +++ b/src/Appwrite/Platform/Modules/Projects/Http/Projects/Update.php @@ -0,0 +1,94 @@ +setHttpMethod(Action::HTTP_REQUEST_METHOD_PATCH) + ->setHttpPath('/v1/projects/:projectId') + ->desc('Update project') + ->groups(['api', 'projects']) + ->label('scope', 'projects.write') + ->label('audits.event', 'projects.update') + ->label('audits.resource', 'project/{request.projectId}') + ->label('sdk', new Method( + namespace: 'projects', + group: 'projects', + name: 'update', + description: '/docs/references/projects/update.md', + auth: [AuthType::ADMIN], + responses: [ + new SDKResponse( + code: Response::STATUS_CODE_OK, + model: Response::MODEL_PROJECT, + ) + ] + )) + ->param('projectId', '', new UID(), 'Project unique ID.') + ->param('name', null, new Text(128), 'Project name. Max length: 128 chars.') + ->param('description', '', new Text(256), 'Project description. Max length: 256 chars.', true) + ->param('logo', '', new Text(1024), 'Project logo.', true) + ->param('url', '', new URL(), 'Project URL.', true) + ->param('legalName', '', new Text(256), 'Project legal name. Max length: 256 chars.', true) + ->param('legalCountry', '', new Text(256), 'Project legal country. Max length: 256 chars.', true) + ->param('legalState', '', new Text(256), 'Project legal state. Max length: 256 chars.', true) + ->param('legalCity', '', new Text(256), 'Project legal city. Max length: 256 chars.', true) + ->param('legalAddress', '', new Text(256), 'Project legal address. Max length: 256 chars.', true) + ->param('legalTaxId', '', new Text(256), 'Project legal tax ID. Max length: 256 chars.', true) + ->inject('response') + ->inject('dbForPlatform') + ->callback($this->action(...)); + } + + public function action(string $projectId, string $name, string $description, string $logo, string $url, string $legalName, string $legalCountry, string $legalState, string $legalCity, string $legalAddress, string $legalTaxId, Response $response, Database $dbForPlatform) + { + $project = $dbForPlatform->getDocument('projects', $projectId); + + if ($project->isEmpty()) { + throw new Exception(Exception::PROJECT_NOT_FOUND); + } + + $project = $dbForPlatform->updateDocument('projects', $project->getId(), $project + ->setAttribute('name', $name) + ->setAttribute('description', $description) + ->setAttribute('logo', $logo) + ->setAttribute('url', $url) + ->setAttribute('legalName', $legalName) + ->setAttribute('legalCountry', $legalCountry) + ->setAttribute('legalState', $legalState) + ->setAttribute('legalCity', $legalCity) + ->setAttribute('legalAddress', $legalAddress) + ->setAttribute('legalTaxId', $legalTaxId) + ->setAttribute('search', implode(' ', [$projectId, $name]))); + + $response->dynamic($project, Response::MODEL_PROJECT); + } +} \ No newline at end of file diff --git a/src/Appwrite/Platform/Modules/Projects/Services/Http.php b/src/Appwrite/Platform/Modules/Projects/Services/Http.php index cce05a9570..b4617fdb76 100644 --- a/src/Appwrite/Platform/Modules/Projects/Services/Http.php +++ b/src/Appwrite/Platform/Modules/Projects/Services/Http.php @@ -7,7 +7,10 @@ use Appwrite\Platform\Modules\Projects\Http\DevKeys\Delete as DeleteDevKey; use Appwrite\Platform\Modules\Projects\Http\DevKeys\Get as GetDevKey; use Appwrite\Platform\Modules\Projects\Http\DevKeys\Update as UpdateDevKey; use Appwrite\Platform\Modules\Projects\Http\DevKeys\XList as ListDevKeys; +use Appwrite\Platform\Modules\Projects\Http\Projects\Create as CreateProject; +use Appwrite\Platform\Modules\Projects\Http\Projects\Team\Update as UpdateProjectTeam; use Appwrite\Platform\Modules\Projects\Http\Projects\Labels\Update as UpdateProjectLabels; +use Appwrite\Platform\Modules\Projects\Http\Projects\Update as UpdateProject; use Appwrite\Platform\Modules\Projects\Http\Projects\XList as ListProjects; use Utopia\Platform\Service; @@ -22,7 +25,10 @@ class Http extends Service $this->addAction(ListDevKeys::getName(), new ListDevKeys()); $this->addAction(DeleteDevKey::getName(), new DeleteDevKey()); + $this->addAction(CreateProject::getName(), new CreateProject()); + $this->addAction(UpdateProject::getName(), new UpdateProject()); $this->addAction(ListProjects::getName(), new ListProjects()); $this->addAction(UpdateProjectLabels::getName(), new UpdateProjectLabels()); + $this->addAction(UpdateProjectTeam::getName(), new UpdateProjectTeam()); } } diff --git a/src/Appwrite/Platform/Modules/Sites/Http/Sites/Create.php b/src/Appwrite/Platform/Modules/Sites/Http/Sites/Create.php index b48cfeb73f..c5532ea9cf 100644 --- a/src/Appwrite/Platform/Modules/Sites/Http/Sites/Create.php +++ b/src/Appwrite/Platform/Modules/Sites/Http/Sites/Create.php @@ -176,13 +176,7 @@ class Create extends Base $repository = $dbForPlatform->createDocument('repositories', new Document([ '$id' => ID::unique(), - '$permissions' => [ - Permission::read(Role::team(ID::custom($teamId))), - Permission::update(Role::team(ID::custom($teamId), 'owner')), - Permission::update(Role::team(ID::custom($teamId), 'developer')), - Permission::delete(Role::team(ID::custom($teamId), 'owner')), - Permission::delete(Role::team(ID::custom($teamId), 'developer')), - ], + '$permissions' => $this->getPermissions($teamId, $project->getId()), 'installationId' => $installation->getId(), 'installationInternalId' => $installation->getSequence(), 'projectId' => $project->getId(), diff --git a/src/Appwrite/Platform/Modules/Sites/Http/Sites/Update.php b/src/Appwrite/Platform/Modules/Sites/Http/Sites/Update.php index b4b720537d..9197acbef1 100644 --- a/src/Appwrite/Platform/Modules/Sites/Http/Sites/Update.php +++ b/src/Appwrite/Platform/Modules/Sites/Http/Sites/Update.php @@ -198,13 +198,7 @@ class Update extends Base $repository = $dbForPlatform->createDocument('repositories', new Document([ '$id' => ID::unique(), - '$permissions' => [ - Permission::read(Role::team(ID::custom($teamId))), - Permission::update(Role::team(ID::custom($teamId), 'owner')), - Permission::update(Role::team(ID::custom($teamId), 'developer')), - Permission::delete(Role::team(ID::custom($teamId), 'owner')), - Permission::delete(Role::team(ID::custom($teamId), 'developer')), - ], + '$permissions' => $this->getPermissions($teamId, $project->getId()), 'installationId' => $installation->getId(), 'installationInternalId' => $installation->getSequence(), 'projectId' => $project->getId(), diff --git a/src/Appwrite/Platform/Modules/Sites/Http/Variables/Create.php b/src/Appwrite/Platform/Modules/Sites/Http/Variables/Create.php index c674aa06a2..62ca69b7d0 100644 --- a/src/Appwrite/Platform/Modules/Sites/Http/Variables/Create.php +++ b/src/Appwrite/Platform/Modules/Sites/Http/Variables/Create.php @@ -78,13 +78,7 @@ class Create extends Base $teamId = $project->getAttribute('teamId', ''); $variable = new Document([ '$id' => $variableId, - '$permissions' => [ - Permission::read(Role::team(ID::custom($teamId))), - Permission::update(Role::team(ID::custom($teamId), 'owner')), - Permission::update(Role::team(ID::custom($teamId), 'developer')), - Permission::delete(Role::team(ID::custom($teamId), 'owner')), - Permission::delete(Role::team(ID::custom($teamId), 'developer')), - ], + '$permissions' => $this->getPermissions($teamId, $project->getId()), 'resourceInternalId' => $site->getSequence(), 'resourceId' => $site->getId(), 'resourceType' => 'site', From cb0f2299fb39be150eb3c4ea25929e64cee5cfe4 Mon Sep 17 00:00:00 2001 From: Hemachandar Date: Fri, 30 Jan 2026 13:58:18 +0530 Subject: [PATCH 05/65] Upgrade DB --- composer.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/composer.lock b/composer.lock index c29c66e759..4606767abb 100644 --- a/composer.lock +++ b/composer.lock @@ -3961,16 +3961,16 @@ }, { "name": "utopia-php/database", - "version": "4.6.1", + "version": "4.6.4", "source": { "type": "git", "url": "https://github.com/utopia-php/database.git", - "reference": "8795a7f5bf8828955299ae44e5946f93a2b1bde5" + "reference": "4dfffd4d528f89b3b3fc09180d4c965ef9bdae30" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/database/zipball/8795a7f5bf8828955299ae44e5946f93a2b1bde5", - "reference": "8795a7f5bf8828955299ae44e5946f93a2b1bde5", + "url": "https://api.github.com/repos/utopia-php/database/zipball/4dfffd4d528f89b3b3fc09180d4c965ef9bdae30", + "reference": "4dfffd4d528f89b3b3fc09180d4c965ef9bdae30", "shasum": "" }, "require": { @@ -4013,9 +4013,9 @@ ], "support": { "issues": "https://github.com/utopia-php/database/issues", - "source": "https://github.com/utopia-php/database/tree/4.6.1" + "source": "https://github.com/utopia-php/database/tree/4.6.4" }, - "time": "2026-01-21T09:37:22+00:00" + "time": "2026-01-30T08:19:14+00:00" }, { "name": "utopia-php/detector", @@ -9076,5 +9076,5 @@ "platform-overrides": { "php": "8.3" }, - "plugin-api-version": "2.9.0" + "plugin-api-version": "2.6.0" } From 2144f2705906f6d150c73c86d17024b27250f211 Mon Sep 17 00:00:00 2001 From: Hemachandar Date: Fri, 30 Jan 2026 14:36:38 +0530 Subject: [PATCH 06/65] lint + feedback --- app/controllers/api/projects.php | 12 ------------ app/controllers/api/teams.php | 1 - .../Modules/Functions/Http/Functions/Update.php | 2 -- .../Modules/Functions/Http/Variables/Create.php | 2 -- .../Modules/Projects/Http/Projects/Action.php | 3 ++- .../Modules/Projects/Http/Projects/Create.php | 3 ++- .../Modules/Projects/Http/Projects/Team/Update.php | 2 +- .../Modules/Projects/Http/Projects/Update.php | 2 +- .../Platform/Modules/Projects/Services/Http.php | 2 +- .../Platform/Modules/Sites/Http/Sites/Create.php | 2 -- .../Platform/Modules/Sites/Http/Sites/Update.php | 2 -- .../Platform/Modules/Sites/Http/Variables/Create.php | 2 -- 12 files changed, 7 insertions(+), 28 deletions(-) diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index 3cebc4fbb9..776a9a7f32 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -6,7 +6,6 @@ use Appwrite\Event\Delete; use Appwrite\Event\Mail; use Appwrite\Event\Validator\Event; use Appwrite\Extend\Exception; -use Appwrite\Hooks\Hooks; use Appwrite\Network\Platform; use Appwrite\Network\Validator\Email; use Appwrite\SDK\AuthType; @@ -15,21 +14,12 @@ use Appwrite\SDK\Deprecated; use Appwrite\SDK\Method; use Appwrite\SDK\Response as SDKResponse; use Appwrite\Template\Template; -use Appwrite\Utopia\Database\Validator\ProjectId; -use Appwrite\Utopia\Database\Validator\Queries\Projects; -use Appwrite\Utopia\Request; use Appwrite\Utopia\Response; use PHPMailer\PHPMailer\PHPMailer; use Utopia\App; -use Utopia\Audit\Adapter\Database as AdapterDatabase; -use Utopia\Audit\Audit; -use Utopia\Cache\Cache; use Utopia\Config\Config; -use Utopia\Database\Adapter\Pool as DatabasePool; use Utopia\Database\Database; -use Utopia\Database\DateTime; use Utopia\Database\Document; -use Utopia\Database\Exception\Duplicate; use Utopia\Database\Helpers\ID; use Utopia\Database\Helpers\Permission; use Utopia\Database\Helpers\Role; @@ -37,9 +27,7 @@ use Utopia\Database\Query; use Utopia\Database\Validator\Datetime as DatetimeValidator; use Utopia\Database\Validator\UID; use Utopia\Domains\Validator\PublicDomain; -use Utopia\DSN\DSN; use Utopia\Locale\Locale; -use Utopia\Pools\Group; use Utopia\System\System; use Utopia\Validator\ArrayList; use Utopia\Validator\Boolean; diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index c9e57cb353..3ebb8ba918 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -58,7 +58,6 @@ use Utopia\Validator\ArrayList; use Utopia\Validator\Assoc; use Utopia\Validator\Boolean; use Utopia\Validator\Text; -use Utopia\Validator\WhiteList; App::post('/v1/teams') ->desc('Create team') diff --git a/src/Appwrite/Platform/Modules/Functions/Http/Functions/Update.php b/src/Appwrite/Platform/Modules/Functions/Http/Functions/Update.php index 7a7d4c098a..3df257726a 100644 --- a/src/Appwrite/Platform/Modules/Functions/Http/Functions/Update.php +++ b/src/Appwrite/Platform/Modules/Functions/Http/Functions/Update.php @@ -19,8 +19,6 @@ use Utopia\Database\Database; use Utopia\Database\DateTime; use Utopia\Database\Document; use Utopia\Database\Helpers\ID; -use Utopia\Database\Helpers\Permission; -use Utopia\Database\Helpers\Role; use Utopia\Database\Query; use Utopia\Database\Validator\Authorization; use Utopia\Database\Validator\Roles; diff --git a/src/Appwrite/Platform/Modules/Functions/Http/Variables/Create.php b/src/Appwrite/Platform/Modules/Functions/Http/Variables/Create.php index 6cf54765cd..99d9f49a66 100644 --- a/src/Appwrite/Platform/Modules/Functions/Http/Variables/Create.php +++ b/src/Appwrite/Platform/Modules/Functions/Http/Variables/Create.php @@ -13,8 +13,6 @@ use Utopia\Database\DateTime; use Utopia\Database\Document; use Utopia\Database\Exception\Duplicate as DuplicateException; use Utopia\Database\Helpers\ID; -use Utopia\Database\Helpers\Permission; -use Utopia\Database\Helpers\Role; use Utopia\Database\Validator\Authorization; use Utopia\Database\Validator\UID; use Utopia\Platform\Action; diff --git a/src/Appwrite/Platform/Modules/Projects/Http/Projects/Action.php b/src/Appwrite/Platform/Modules/Projects/Http/Projects/Action.php index 1b38fa01f4..3b31618440 100644 --- a/src/Appwrite/Platform/Modules/Projects/Http/Projects/Action.php +++ b/src/Appwrite/Platform/Modules/Projects/Http/Projects/Action.php @@ -20,7 +20,8 @@ class Action extends AppwriteAction Permission::delete(Role::team(ID::custom($teamId), 'owner')), Permission::delete(Role::team(ID::custom($teamId), 'developer')), // Project-wide permissions - Permission::read(Role::team(ID::custom($teamId), "project-{$projectId}")), + Permission::read(Role::team(ID::custom($teamId), "project-{$projectId}-owner")), + Permission::read(Role::team(ID::custom($teamId), "project-{$projectId}-developer")), Permission::update(Role::team(ID::custom($teamId), "project-{$projectId}-owner")), Permission::update(Role::team(ID::custom($teamId), "project-{$projectId}-developer")), Permission::delete(Role::team(ID::custom($teamId), "project-{$projectId}-owner")), diff --git a/src/Appwrite/Platform/Modules/Projects/Http/Projects/Create.php b/src/Appwrite/Platform/Modules/Projects/Http/Projects/Create.php index 424d6d1344..d22cf03590 100644 --- a/src/Appwrite/Platform/Modules/Projects/Http/Projects/Create.php +++ b/src/Appwrite/Platform/Modules/Projects/Http/Projects/Create.php @@ -19,6 +19,7 @@ use Utopia\Database\Adapter\Pool as DatabasePool; use Utopia\Database\Database; use Utopia\Database\DateTime; use Utopia\Database\Document; +use Utopia\Database\Exception\Duplicate; use Utopia\Database\Helpers\ID; use Utopia\Database\Helpers\Permission; use Utopia\Database\Helpers\Role; @@ -291,4 +292,4 @@ class Create extends Action ->setStatusCode(Response::STATUS_CODE_CREATED) ->dynamic($project, Response::MODEL_PROJECT); } -} \ No newline at end of file +} diff --git a/src/Appwrite/Platform/Modules/Projects/Http/Projects/Team/Update.php b/src/Appwrite/Platform/Modules/Projects/Http/Projects/Team/Update.php index ac1537cd3a..df5b2b6245 100644 --- a/src/Appwrite/Platform/Modules/Projects/Http/Projects/Team/Update.php +++ b/src/Appwrite/Platform/Modules/Projects/Http/Projects/Team/Update.php @@ -104,4 +104,4 @@ class Update extends Action $response->dynamic($project, Response::MODEL_PROJECT); } -} \ No newline at end of file +} diff --git a/src/Appwrite/Platform/Modules/Projects/Http/Projects/Update.php b/src/Appwrite/Platform/Modules/Projects/Http/Projects/Update.php index 2ec0fd9501..29c26b33ea 100644 --- a/src/Appwrite/Platform/Modules/Projects/Http/Projects/Update.php +++ b/src/Appwrite/Platform/Modules/Projects/Http/Projects/Update.php @@ -91,4 +91,4 @@ class Update extends Action $response->dynamic($project, Response::MODEL_PROJECT); } -} \ No newline at end of file +} diff --git a/src/Appwrite/Platform/Modules/Projects/Services/Http.php b/src/Appwrite/Platform/Modules/Projects/Services/Http.php index b4617fdb76..587f101d61 100644 --- a/src/Appwrite/Platform/Modules/Projects/Services/Http.php +++ b/src/Appwrite/Platform/Modules/Projects/Services/Http.php @@ -8,8 +8,8 @@ use Appwrite\Platform\Modules\Projects\Http\DevKeys\Get as GetDevKey; use Appwrite\Platform\Modules\Projects\Http\DevKeys\Update as UpdateDevKey; use Appwrite\Platform\Modules\Projects\Http\DevKeys\XList as ListDevKeys; use Appwrite\Platform\Modules\Projects\Http\Projects\Create as CreateProject; -use Appwrite\Platform\Modules\Projects\Http\Projects\Team\Update as UpdateProjectTeam; use Appwrite\Platform\Modules\Projects\Http\Projects\Labels\Update as UpdateProjectLabels; +use Appwrite\Platform\Modules\Projects\Http\Projects\Team\Update as UpdateProjectTeam; use Appwrite\Platform\Modules\Projects\Http\Projects\Update as UpdateProject; use Appwrite\Platform\Modules\Projects\Http\Projects\XList as ListProjects; use Utopia\Platform\Service; diff --git a/src/Appwrite/Platform/Modules/Sites/Http/Sites/Create.php b/src/Appwrite/Platform/Modules/Sites/Http/Sites/Create.php index c5532ea9cf..dd2c30625f 100644 --- a/src/Appwrite/Platform/Modules/Sites/Http/Sites/Create.php +++ b/src/Appwrite/Platform/Modules/Sites/Http/Sites/Create.php @@ -15,8 +15,6 @@ use Utopia\Config\Config; use Utopia\Database\Database; use Utopia\Database\Document; use Utopia\Database\Helpers\ID; -use Utopia\Database\Helpers\Permission; -use Utopia\Database\Helpers\Role; use Utopia\Platform\Action; use Utopia\Platform\Scope\HTTP; use Utopia\System\System; diff --git a/src/Appwrite/Platform/Modules/Sites/Http/Sites/Update.php b/src/Appwrite/Platform/Modules/Sites/Http/Sites/Update.php index 9197acbef1..9cfa45b77b 100644 --- a/src/Appwrite/Platform/Modules/Sites/Http/Sites/Update.php +++ b/src/Appwrite/Platform/Modules/Sites/Http/Sites/Update.php @@ -16,8 +16,6 @@ use Utopia\Config\Config; use Utopia\Database\Database; use Utopia\Database\Document; use Utopia\Database\Helpers\ID; -use Utopia\Database\Helpers\Permission; -use Utopia\Database\Helpers\Role; use Utopia\Database\Query; use Utopia\Database\Validator\UID; use Utopia\Platform\Action; diff --git a/src/Appwrite/Platform/Modules/Sites/Http/Variables/Create.php b/src/Appwrite/Platform/Modules/Sites/Http/Variables/Create.php index 62ca69b7d0..fe4fe35626 100644 --- a/src/Appwrite/Platform/Modules/Sites/Http/Variables/Create.php +++ b/src/Appwrite/Platform/Modules/Sites/Http/Variables/Create.php @@ -12,8 +12,6 @@ use Utopia\Database\Database; use Utopia\Database\Document; use Utopia\Database\Exception\Duplicate as DuplicateException; use Utopia\Database\Helpers\ID; -use Utopia\Database\Helpers\Permission; -use Utopia\Database\Helpers\Role; use Utopia\Database\Validator\UID; use Utopia\Platform\Action; use Utopia\Platform\Scope\HTTP; From a987195f6fee3a66089f086c5d55999aea9f690e Mon Sep 17 00:00:00 2001 From: Hemachandar Date: Fri, 30 Jan 2026 14:47:55 +0530 Subject: [PATCH 07/65] more lint --- src/Appwrite/Platform/Modules/Compute/Base.php | 3 ++- .../Platform/Modules/Projects/Http/Projects/Action.php | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Appwrite/Platform/Modules/Compute/Base.php b/src/Appwrite/Platform/Modules/Compute/Base.php index f0dcb1a4ff..47c648283f 100644 --- a/src/Appwrite/Platform/Modules/Compute/Base.php +++ b/src/Appwrite/Platform/Modules/Compute/Base.php @@ -40,7 +40,8 @@ class Base extends Action Permission::delete(Role::team(ID::custom($teamId), 'owner')), Permission::delete(Role::team(ID::custom($teamId), 'developer')), // Project-wide permissions - Permission::read(Role::team(ID::custom($teamId), "project-{$projectId}")), + Permission::read(Role::team(ID::custom($teamId), "project-{$projectId}-owner")), + Permission::read(Role::team(ID::custom($teamId), "project-{$projectId}-developer")), Permission::update(Role::team(ID::custom($teamId), "project-{$projectId}-owner")), Permission::update(Role::team(ID::custom($teamId), "project-{$projectId}-developer")), Permission::delete(Role::team(ID::custom($teamId), "project-{$projectId}-owner")), diff --git a/src/Appwrite/Platform/Modules/Projects/Http/Projects/Action.php b/src/Appwrite/Platform/Modules/Projects/Http/Projects/Action.php index 3b31618440..21cd108485 100644 --- a/src/Appwrite/Platform/Modules/Projects/Http/Projects/Action.php +++ b/src/Appwrite/Platform/Modules/Projects/Http/Projects/Action.php @@ -28,4 +28,4 @@ class Action extends AppwriteAction Permission::delete(Role::team(ID::custom($teamId), "project-{$projectId}-developer")), ]; } -} \ No newline at end of file +} From f1a2e869a229944bfea2d5dd438f7e380341b52e Mon Sep 17 00:00:00 2001 From: fogelito Date: Tue, 3 Feb 2026 10:11:03 +0200 Subject: [PATCH 08/65] localhost setUp --- composer.lock | 12 ++++++------ tests/e2e/Scopes/Scope.php | 3 ++- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/composer.lock b/composer.lock index 10e68b7f63..7afb4ecac8 100644 --- a/composer.lock +++ b/composer.lock @@ -283,16 +283,16 @@ }, { "name": "brick/math", - "version": "0.14.3", + "version": "0.14.4", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "6af96b11de3f7d99730c118c200418c48274edb4" + "reference": "a8b53e6cc4d3a336543f042a4dfa0e3f2f2356a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/6af96b11de3f7d99730c118c200418c48274edb4", - "reference": "6af96b11de3f7d99730c118c200418c48274edb4", + "url": "https://api.github.com/repos/brick/math/zipball/a8b53e6cc4d3a336543f042a4dfa0e3f2f2356a4", + "reference": "a8b53e6cc4d3a336543f042a4dfa0e3f2f2356a4", "shasum": "" }, "require": { @@ -331,7 +331,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.14.3" + "source": "https://github.com/brick/math/tree/0.14.4" }, "funding": [ { @@ -339,7 +339,7 @@ "type": "github" } ], - "time": "2026-02-01T15:18:05+00:00" + "time": "2026-02-02T16:57:31+00:00" }, { "name": "chillerlan/php-qrcode", diff --git a/tests/e2e/Scopes/Scope.php b/tests/e2e/Scopes/Scope.php index 8731a29672..8dafc0f511 100644 --- a/tests/e2e/Scopes/Scope.php +++ b/tests/e2e/Scopes/Scope.php @@ -19,11 +19,12 @@ abstract class Scope extends TestCase protected ?Client $client = null; protected string $endpoint = 'http://appwrite.test/v1'; + protected string $localhost = 'http://localhost/v1'; // todo: use variable protected function setUp(): void { $this->client = new Client(); - $this->client->setEndpoint($this->endpoint); + $this->client->setEndpoint($this->localhost); $format = System::getEnv('_APP_E2E_RESPONSE_FORMAT'); if (!empty($format)) { From 91f3bf024497b83d9907d53c864be6423a14045f Mon Sep 17 00:00:00 2001 From: fogelito Date: Tue, 3 Feb 2026 11:47:21 +0200 Subject: [PATCH 09/65] Run tests --- tests/e2e/Scopes/Scope.php | 2 +- tests/e2e/Services/Migrations/MigrationsBase.php | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/e2e/Scopes/Scope.php b/tests/e2e/Scopes/Scope.php index 8dafc0f511..aec683286a 100644 --- a/tests/e2e/Scopes/Scope.php +++ b/tests/e2e/Scopes/Scope.php @@ -19,7 +19,7 @@ abstract class Scope extends TestCase protected ?Client $client = null; protected string $endpoint = 'http://appwrite.test/v1'; - protected string $localhost = 'http://localhost/v1'; // todo: use variable + protected string $localhost = 'http://localhost/v1'; protected function setUp(): void { diff --git a/tests/e2e/Services/Migrations/MigrationsBase.php b/tests/e2e/Services/Migrations/MigrationsBase.php index bed7a7e542..e66508538d 100644 --- a/tests/e2e/Services/Migrations/MigrationsBase.php +++ b/tests/e2e/Services/Migrations/MigrationsBase.php @@ -13,6 +13,7 @@ use Utopia\Database\Helpers\Role; use Utopia\Database\Query; use Utopia\Migration\Resource; use Utopia\Migration\Sources\Appwrite; +use Utopia\System\System; trait MigrationsBase { From c0cbf991aba2bb4a65b7cb17026976b7cc779981 Mon Sep 17 00:00:00 2001 From: fogelito Date: Tue, 3 Feb 2026 11:48:48 +0200 Subject: [PATCH 10/65] Run tests --- tests/e2e/Services/Migrations/MigrationsBase.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/e2e/Services/Migrations/MigrationsBase.php b/tests/e2e/Services/Migrations/MigrationsBase.php index e66508538d..bed7a7e542 100644 --- a/tests/e2e/Services/Migrations/MigrationsBase.php +++ b/tests/e2e/Services/Migrations/MigrationsBase.php @@ -13,7 +13,6 @@ use Utopia\Database\Helpers\Role; use Utopia\Database\Query; use Utopia\Migration\Resource; use Utopia\Migration\Sources\Appwrite; -use Utopia\System\System; trait MigrationsBase { From 3da3b6a324a86a7002afcdac061c01eacb92e3a5 Mon Sep 17 00:00:00 2001 From: fogelito Date: Tue, 3 Feb 2026 11:49:53 +0200 Subject: [PATCH 11/65] pull changes --- composer.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/composer.lock b/composer.lock index 7afb4ecac8..5a2c8ebc29 100644 --- a/composer.lock +++ b/composer.lock @@ -5546,16 +5546,16 @@ "packages-dev": [ { "name": "appwrite/sdk-generator", - "version": "1.8.22", + "version": "1.8.23", "source": { "type": "git", "url": "https://github.com/appwrite/sdk-generator.git", - "reference": "2888fa2abd820dca24f3d967ba54d498999e3caf" + "reference": "b80b8210b4940cfcfad970c8c07ccf1eee74c267" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/2888fa2abd820dca24f3d967ba54d498999e3caf", - "reference": "2888fa2abd820dca24f3d967ba54d498999e3caf", + "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/b80b8210b4940cfcfad970c8c07ccf1eee74c267", + "reference": "b80b8210b4940cfcfad970c8c07ccf1eee74c267", "shasum": "" }, "require": { @@ -5591,9 +5591,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/1.8.22" + "source": "https://github.com/appwrite/sdk-generator/tree/1.8.23" }, - "time": "2026-02-02T13:02:47+00:00" + "time": "2026-02-03T09:20:19+00:00" }, { "name": "doctrine/annotations", From 8b4f4d2fea53a78e223d4985edcd28bdff4c4507 Mon Sep 17 00:00:00 2001 From: fogelito Date: Tue, 3 Feb 2026 12:43:37 +0200 Subject: [PATCH 12/65] localhost --- tests/e2e/Scopes/Scope.php | 6 ++-- .../Services/Migrations/MigrationsBase.php | 32 ++++++++++++------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/tests/e2e/Scopes/Scope.php b/tests/e2e/Scopes/Scope.php index aec683286a..2a9849950f 100644 --- a/tests/e2e/Scopes/Scope.php +++ b/tests/e2e/Scopes/Scope.php @@ -18,13 +18,13 @@ abstract class Scope extends TestCase public const REQUEST_TYPE_SMS = 'sms'; protected ?Client $client = null; - protected string $endpoint = 'http://appwrite.test/v1'; - protected string $localhost = 'http://localhost/v1'; + //protected string $endpoint = 'http://appwrite.test/v1'; + protected string $endpoint = 'http://localhost/v1'; protected function setUp(): void { $this->client = new Client(); - $this->client->setEndpoint($this->localhost); + $this->client->setEndpoint($this->endpoint); $format = System::getEnv('_APP_E2E_RESPONSE_FORMAT'); if (!empty($format)) { diff --git a/tests/e2e/Services/Migrations/MigrationsBase.php b/tests/e2e/Services/Migrations/MigrationsBase.php index bed7a7e542..0dde9b8ed9 100644 --- a/tests/e2e/Services/Migrations/MigrationsBase.php +++ b/tests/e2e/Services/Migrations/MigrationsBase.php @@ -24,6 +24,14 @@ trait MigrationsBase */ protected static array $destinationProject = []; + /** + * @return string + */ + public function getEndPoint():string + { + return 'http://appwrite.test/v1'; + } + /** * @param bool $fresh * @return array @@ -89,7 +97,7 @@ trait MigrationsBase { $response = $this->performMigrationSync([ 'resources' => Appwrite::getSupportedResources(), - 'endpoint' => $this->endpoint, + 'endpoint' => $this->getEndPoint(), 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -126,7 +134,7 @@ trait MigrationsBase 'resources' => [ Resource::TYPE_USER, ], - 'endpoint' => $this->endpoint, + 'endpoint' => $this->getEndPoint(), 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -188,7 +196,7 @@ trait MigrationsBase 'resources' => [ Resource::TYPE_USER, ], - 'endpoint' => $this->endpoint, + 'endpoint' => $this->getEndPoint(), 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -277,7 +285,7 @@ trait MigrationsBase Resource::TYPE_TEAM, Resource::TYPE_MEMBERSHIP, ], - 'endpoint' => $this->endpoint, + 'endpoint' => $this->getEndPoint(), 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -393,7 +401,7 @@ trait MigrationsBase 'resources' => [ Resource::TYPE_DATABASE, ], - 'endpoint' => $this->endpoint, + 'endpoint' => $this->getEndPoint(), 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -484,7 +492,7 @@ trait MigrationsBase Resource::TYPE_TABLE, Resource::TYPE_COLUMN, ], - 'endpoint' => $this->endpoint, + 'endpoint' => $this->getEndPoint(), 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -571,7 +579,7 @@ trait MigrationsBase Resource::TYPE_COLUMN, Resource::TYPE_ROW, ], - 'endpoint' => $this->endpoint, + 'endpoint' => $this->getEndPoint(), 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -651,7 +659,7 @@ trait MigrationsBase 'resources' => [ Resource::TYPE_BUCKET ], - 'endpoint' => $this->endpoint, + 'endpoint' => $this->getEndPoint(), 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -747,7 +755,7 @@ trait MigrationsBase Resource::TYPE_BUCKET, Resource::TYPE_FILE ], - 'endpoint' => $this->endpoint, + 'endpoint' => $this->getEndPoint(), 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -818,7 +826,7 @@ trait MigrationsBase Resource::TYPE_FUNCTION, Resource::TYPE_DEPLOYMENT ], - 'endpoint' => $this->endpoint, + 'endpoint' => $this->getEndPoint(), 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -1119,7 +1127,7 @@ trait MigrationsBase // all data exists, pass. $migration = $this->performCsvMigration( [ - 'endpoint' => $this->endpoint, + 'endpoint' => $this->getEndPoint(), 'fileId' => $fileIds['default'], 'bucketId' => $bucketIds['default'], 'resourceId' => $databaseId . ':' . $tableId, @@ -1161,7 +1169,7 @@ trait MigrationsBase // all data exists and includes internals, pass. $migration = $this->performCsvMigration( [ - 'endpoint' => $this->endpoint, + 'endpoint' => $this->getEndPoint(), 'fileId' => $fileIds['documents-internals'], 'bucketId' => $bucketIds['documents-internals'], 'resourceId' => $databaseId . ':' . $tableId, From 7d193d9c36b7dcfc3941e901212c2e0682d21c8e Mon Sep 17 00:00:00 2001 From: fogelito Date: Tue, 3 Feb 2026 13:41:02 +0200 Subject: [PATCH 13/65] force localhost --- src/Appwrite/Platform/Workers/Migrations.php | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/Appwrite/Platform/Workers/Migrations.php b/src/Appwrite/Platform/Workers/Migrations.php index 1e2bace54b..ed40173baf 100644 --- a/src/Appwrite/Platform/Workers/Migrations.php +++ b/src/Appwrite/Platform/Workers/Migrations.php @@ -333,8 +333,10 @@ class Migrations extends Action $transfer = $source = $destination = null; - $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') === 'disabled' ? 'http' : 'https'; - $endpoint = $protocol . '://' . $platform['apiHostname'] . '/v1'; + //$protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') === 'disabled' ? 'http' : 'https'; + //$endpoint = $protocol . '://' . $platform['apiHostname'] . '/v1'; + + $endpoint = 'http://localhost/v1'; try { $credentials = $migration->getAttribute('credentials', []); @@ -350,9 +352,11 @@ class Migrations extends Action $credentials['destinationEndpoint'] = $endpoint; } - if (($credentials['endpoint'] ?? '') === 'http://localhost/v1') { - $credentials['endpoint'] = $endpoint; - } +// if (($credentials['endpoint'] ?? '') === 'http://localhost/v1') { +// $credentials['endpoint'] = $endpoint; +// } + + var_dump($credentials); $migration->setAttribute('credentials', $credentials); From 736b72164eb56ad550151bcf411a7a0eb82dc5f2 Mon Sep 17 00:00:00 2001 From: fogelito Date: Tue, 3 Feb 2026 16:14:00 +0200 Subject: [PATCH 14/65] ci cd --- app/config/platform.php | 1 + app/controllers/general.php | 5 +++++ src/Appwrite/Platform/Workers/Migrations.php | 1 + tests/e2e/Scopes/Scope.php | 3 ++- 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/config/platform.php b/app/config/platform.php index 4030949ce6..ef8f786f6c 100644 --- a/app/config/platform.php +++ b/app/config/platform.php @@ -22,6 +22,7 @@ return [ 'hostnames' => array_filter(array_unique([ System::getEnv('_APP_DOMAIN', 'localhost'), System::getEnv('_APP_CONSOLE_DOMAIN', 'localhost'), + 'appwrite', ])), 'platformName' => APP_EMAIL_PLATFORM_NAME, 'logoUrl' => APP_EMAIL_LOGO_URL, diff --git a/app/controllers/general.php b/app/controllers/general.php index 3ab59eb870..3d7b90c557 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -84,6 +84,11 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw $url = $protocol . '://' . $platform['consoleHostname']; $platformHostnames = $platform['hostnames'] ?? []; + var_dump('getHostname='); + var_dump($host); + + var_dump('$platformHostnames='); + var_dump($platformHostnames); if ($rule->isEmpty()) { $denyDomains = []; $denyEnvVars = [ diff --git a/src/Appwrite/Platform/Workers/Migrations.php b/src/Appwrite/Platform/Workers/Migrations.php index ed40173baf..a28c1c9efd 100644 --- a/src/Appwrite/Platform/Workers/Migrations.php +++ b/src/Appwrite/Platform/Workers/Migrations.php @@ -337,6 +337,7 @@ class Migrations extends Action //$endpoint = $protocol . '://' . $platform['apiHostname'] . '/v1'; $endpoint = 'http://localhost/v1'; + $endpoint = 'http://appwrite/v1'; try { $credentials = $migration->getAttribute('credentials', []); diff --git a/tests/e2e/Scopes/Scope.php b/tests/e2e/Scopes/Scope.php index 2a9849950f..cd5996ba83 100644 --- a/tests/e2e/Scopes/Scope.php +++ b/tests/e2e/Scopes/Scope.php @@ -19,7 +19,8 @@ abstract class Scope extends TestCase protected ?Client $client = null; //protected string $endpoint = 'http://appwrite.test/v1'; - protected string $endpoint = 'http://localhost/v1'; + //protected string $endpoint = 'http://localhost/v1'; + protected string $endpoint = 'http://appwrite/v1'; protected function setUp(): void { From 9bafa90ac8cffef2c3e8306f2a4bd09ff51e6de3 Mon Sep 17 00:00:00 2001 From: fogelito Date: Tue, 3 Feb 2026 17:39:29 +0200 Subject: [PATCH 15/65] _APP_HOSTNAMES --- .env | 1 + app/config/platform.php | 2 +- docker-compose.yml | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.env b/.env index 1ca5d5fc4e..3bef66f414 100644 --- a/.env +++ b/.env @@ -10,6 +10,7 @@ _APP_CONSOLE_SESSION_ALERTS=enabled _APP_CONSOLE_WHITELIST_IPS= _APP_CONSOLE_COUNTRIES_DENYLIST=AQ _APP_CONSOLE_HOSTNAMES=localhost,appwrite.io,*.appwrite.io +_APP_HOSTNAMES=appwrite _APP_SYSTEM_EMAIL_NAME=Appwrite _APP_SYSTEM_EMAIL_ADDRESS=noreply@appwrite.io _APP_SYSTEM_TEAM_EMAIL=team@appwrite.io diff --git a/app/config/platform.php b/app/config/platform.php index ef8f786f6c..60ad8f4445 100644 --- a/app/config/platform.php +++ b/app/config/platform.php @@ -22,7 +22,7 @@ return [ 'hostnames' => array_filter(array_unique([ System::getEnv('_APP_DOMAIN', 'localhost'), System::getEnv('_APP_CONSOLE_DOMAIN', 'localhost'), - 'appwrite', + ...explode(',', System::getEnv('_APP_HOSTNAMES', '')), ])), 'platformName' => APP_EMAIL_PLATFORM_NAME, 'logoUrl' => APP_EMAIL_LOGO_URL, diff --git a/docker-compose.yml b/docker-compose.yml index 0eee94a999..4a0875c5f2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -228,6 +228,7 @@ services: - _APP_FUNCTIONS_CREATION_ABUSE_LIMIT - _APP_CUSTOM_DOMAIN_DENY_LIST - _APP_TRUSTED_HEADERS + - _APP_HOSTNAMES extra_hosts: - "host.docker.internal:host-gateway" From ca03176ad614e4e1059a6efaf85fd867d7814045 Mon Sep 17 00:00:00 2001 From: fogelito Date: Wed, 4 Feb 2026 09:53:19 +0200 Subject: [PATCH 16/65] $this->webEndpoint, --- tests/e2e/General/CompressionTest.php | 7 ++-- tests/e2e/Scopes/Scope.php | 3 +- .../Services/Migrations/MigrationsBase.php | 32 +++++++------------ 3 files changed, 18 insertions(+), 24 deletions(-) diff --git a/tests/e2e/General/CompressionTest.php b/tests/e2e/General/CompressionTest.php index cff23b1201..29ec0ea1e8 100644 --- a/tests/e2e/General/CompressionTest.php +++ b/tests/e2e/General/CompressionTest.php @@ -86,8 +86,11 @@ class CompressionTest extends Scope $this->assertEquals(200, $response['headers']['status-code']); $this->assertArrayNotHasKey('content-encoding', $response['headers']); - $this->assertEquals('chunked', $response['headers']['transfer-encoding'] ?? null, 'Uncompressed response should use chunked transfer, headers received: ' . json_encode($response['headers'], JSON_PRETTY_PRINT)); - $this->assertArrayNotHasKey('content-length', $response['headers'], 'Uncompressed response should not send content length when chunked.'); + + if ($this->endpoint !== 'http://appwrite/v1'){ + $this->assertEquals('chunked', $response['headers']['transfer-encoding'] ?? null, 'Uncompressed response should use chunked transfer, headers received: ' . json_encode($response['headers'], JSON_PRETTY_PRINT)); + $this->assertArrayNotHasKey('content-length', $response['headers'], 'Uncompressed response should not send content length when chunked.'); + } $this->assertArrayHasKey('longValue', $response['body'], 'Prefs payload should expose longValue at the top level, body received: ' . json_encode($response['body'], JSON_PRETTY_PRINT)); diff --git a/tests/e2e/Scopes/Scope.php b/tests/e2e/Scopes/Scope.php index cd5996ba83..91ef7cbb62 100644 --- a/tests/e2e/Scopes/Scope.php +++ b/tests/e2e/Scopes/Scope.php @@ -18,8 +18,7 @@ abstract class Scope extends TestCase public const REQUEST_TYPE_SMS = 'sms'; protected ?Client $client = null; - //protected string $endpoint = 'http://appwrite.test/v1'; - //protected string $endpoint = 'http://localhost/v1'; + protected string $webEndpoint = 'http://appwrite.test/v1'; protected string $endpoint = 'http://appwrite/v1'; protected function setUp(): void diff --git a/tests/e2e/Services/Migrations/MigrationsBase.php b/tests/e2e/Services/Migrations/MigrationsBase.php index 0dde9b8ed9..aad0b73aa9 100644 --- a/tests/e2e/Services/Migrations/MigrationsBase.php +++ b/tests/e2e/Services/Migrations/MigrationsBase.php @@ -24,14 +24,6 @@ trait MigrationsBase */ protected static array $destinationProject = []; - /** - * @return string - */ - public function getEndPoint():string - { - return 'http://appwrite.test/v1'; - } - /** * @param bool $fresh * @return array @@ -97,7 +89,7 @@ trait MigrationsBase { $response = $this->performMigrationSync([ 'resources' => Appwrite::getSupportedResources(), - 'endpoint' => $this->getEndPoint(), + 'endpoint' => $this->webEndpoint, 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -134,7 +126,7 @@ trait MigrationsBase 'resources' => [ Resource::TYPE_USER, ], - 'endpoint' => $this->getEndPoint(), + 'endpoint' => $this->webEndpoint, 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -196,7 +188,7 @@ trait MigrationsBase 'resources' => [ Resource::TYPE_USER, ], - 'endpoint' => $this->getEndPoint(), + 'endpoint' => $this->webEndpoint, 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -285,7 +277,7 @@ trait MigrationsBase Resource::TYPE_TEAM, Resource::TYPE_MEMBERSHIP, ], - 'endpoint' => $this->getEndPoint(), + 'endpoint' => $this->webEndpoint, 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -401,7 +393,7 @@ trait MigrationsBase 'resources' => [ Resource::TYPE_DATABASE, ], - 'endpoint' => $this->getEndPoint(), + 'endpoint' => $this->webEndpoint, 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -492,7 +484,7 @@ trait MigrationsBase Resource::TYPE_TABLE, Resource::TYPE_COLUMN, ], - 'endpoint' => $this->getEndPoint(), + 'endpoint' => $this->webEndpoint, 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -579,7 +571,7 @@ trait MigrationsBase Resource::TYPE_COLUMN, Resource::TYPE_ROW, ], - 'endpoint' => $this->getEndPoint(), + 'endpoint' => $this->webEndpoint, 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -659,7 +651,7 @@ trait MigrationsBase 'resources' => [ Resource::TYPE_BUCKET ], - 'endpoint' => $this->getEndPoint(), + 'endpoint' => $this->webEndpoint, 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -755,7 +747,7 @@ trait MigrationsBase Resource::TYPE_BUCKET, Resource::TYPE_FILE ], - 'endpoint' => $this->getEndPoint(), + 'endpoint' => $this->webEndpoint, 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -826,7 +818,7 @@ trait MigrationsBase Resource::TYPE_FUNCTION, Resource::TYPE_DEPLOYMENT ], - 'endpoint' => $this->getEndPoint(), + 'endpoint' => $this->webEndpoint, 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -1127,7 +1119,7 @@ trait MigrationsBase // all data exists, pass. $migration = $this->performCsvMigration( [ - 'endpoint' => $this->getEndPoint(), + 'endpoint' => $this->webEndpoint, 'fileId' => $fileIds['default'], 'bucketId' => $bucketIds['default'], 'resourceId' => $databaseId . ':' . $tableId, @@ -1169,7 +1161,7 @@ trait MigrationsBase // all data exists and includes internals, pass. $migration = $this->performCsvMigration( [ - 'endpoint' => $this->getEndPoint(), + 'endpoint' => $this->webEndpoint, 'fileId' => $fileIds['documents-internals'], 'bucketId' => $bucketIds['documents-internals'], 'resourceId' => $databaseId . ':' . $tableId, From c2b87cff660578c77d6508d9593e19698ed5226f Mon Sep 17 00:00:00 2001 From: fogelito Date: Wed, 4 Feb 2026 09:53:37 +0200 Subject: [PATCH 17/65] $this->webEndpoint, --- tests/e2e/Scopes/Scope.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/Scopes/Scope.php b/tests/e2e/Scopes/Scope.php index 91ef7cbb62..3a2bb83aa7 100644 --- a/tests/e2e/Scopes/Scope.php +++ b/tests/e2e/Scopes/Scope.php @@ -18,8 +18,8 @@ abstract class Scope extends TestCase public const REQUEST_TYPE_SMS = 'sms'; protected ?Client $client = null; - protected string $webEndpoint = 'http://appwrite.test/v1'; protected string $endpoint = 'http://appwrite/v1'; + protected string $webEndpoint = 'http://appwrite.test/v1'; protected function setUp(): void { From ffd568aecd3cd90d011925e57d543e572b039c65 Mon Sep 17 00:00:00 2001 From: fogelito Date: Wed, 4 Feb 2026 10:05:54 +0200 Subject: [PATCH 18/65] Update 1.8.x --- composer.lock | 42 ++++++++++---------- src/Appwrite/Platform/Workers/Migrations.php | 6 +-- tests/e2e/General/CompressionTest.php | 2 +- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/composer.lock b/composer.lock index 9f92beb7a2..9359b405ea 100644 --- a/composer.lock +++ b/composer.lock @@ -283,16 +283,16 @@ }, { "name": "brick/math", - "version": "0.14.4", + "version": "0.14.5", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "a8b53e6cc4d3a336543f042a4dfa0e3f2f2356a4" + "reference": "618a8077b3c326045e10d5788ed713b341fcfe40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/a8b53e6cc4d3a336543f042a4dfa0e3f2f2356a4", - "reference": "a8b53e6cc4d3a336543f042a4dfa0e3f2f2356a4", + "url": "https://api.github.com/repos/brick/math/zipball/618a8077b3c326045e10d5788ed713b341fcfe40", + "reference": "618a8077b3c326045e10d5788ed713b341fcfe40", "shasum": "" }, "require": { @@ -331,7 +331,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.14.4" + "source": "https://github.com/brick/math/tree/0.14.5" }, "funding": [ { @@ -339,7 +339,7 @@ "type": "github" } ], - "time": "2026-02-02T16:57:31+00:00" + "time": "2026-02-03T18:06:51+00:00" }, { "name": "chillerlan/php-qrcode", @@ -4745,16 +4745,16 @@ }, { "name": "utopia-php/platform", - "version": "0.7.14", + "version": "0.7.15", "source": { "type": "git", "url": "https://github.com/utopia-php/platform.git", - "reference": "9f18ce63f1425ae2dae57468200e4a5d1239d57b" + "reference": "1b94e9b7c3f86d8955178ed05696bb7c8f49839a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/platform/zipball/9f18ce63f1425ae2dae57468200e4a5d1239d57b", - "reference": "9f18ce63f1425ae2dae57468200e4a5d1239d57b", + "url": "https://api.github.com/repos/utopia-php/platform/zipball/1b94e9b7c3f86d8955178ed05696bb7c8f49839a", + "reference": "1b94e9b7c3f86d8955178ed05696bb7c8f49839a", "shasum": "" }, "require": { @@ -4790,9 +4790,9 @@ ], "support": { "issues": "https://github.com/utopia-php/platform/issues", - "source": "https://github.com/utopia-php/platform/tree/0.7.14" + "source": "https://github.com/utopia-php/platform/tree/0.7.15" }, - "time": "2026-01-06T15:39:45+00:00" + "time": "2026-02-04T05:28:13+00:00" }, { "name": "utopia-php/pools", @@ -5121,22 +5121,22 @@ }, { "name": "utopia-php/swoole", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/utopia-php/swoole.git", - "reference": "c5ce710dfffc4df09bf3e7aea2d1e55c53e77a95" + "reference": "8c89f38ff163de6c6f8a4898e467ca38c1f03133" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/swoole/zipball/c5ce710dfffc4df09bf3e7aea2d1e55c53e77a95", - "reference": "c5ce710dfffc4df09bf3e7aea2d1e55c53e77a95", + "url": "https://api.github.com/repos/utopia-php/swoole/zipball/8c89f38ff163de6c6f8a4898e467ca38c1f03133", + "reference": "8c89f38ff163de6c6f8a4898e467ca38c1f03133", "shasum": "" }, "require": { "ext-swoole": "6.*", "php": ">=8.1", - "utopia-php/framework": "0.33.37" + "utopia-php/framework": "0.33.*" }, "require-dev": { "laravel/pint": "1.2.*", @@ -5166,9 +5166,9 @@ ], "support": { "issues": "https://github.com/utopia-php/swoole/issues", - "source": "https://github.com/utopia-php/swoole/tree/1.0.1" + "source": "https://github.com/utopia-php/swoole/tree/1.0.2" }, - "time": "2026-01-28T12:43:38+00:00" + "time": "2026-02-04T05:12:48+00:00" }, { "name": "utopia-php/system", @@ -9052,7 +9052,7 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": {}, + "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": { @@ -9076,5 +9076,5 @@ "platform-overrides": { "php": "8.3" }, - "plugin-api-version": "2.9.0" + "plugin-api-version": "2.6.0" } diff --git a/src/Appwrite/Platform/Workers/Migrations.php b/src/Appwrite/Platform/Workers/Migrations.php index a28c1c9efd..cfba5d0677 100644 --- a/src/Appwrite/Platform/Workers/Migrations.php +++ b/src/Appwrite/Platform/Workers/Migrations.php @@ -353,9 +353,9 @@ class Migrations extends Action $credentials['destinationEndpoint'] = $endpoint; } -// if (($credentials['endpoint'] ?? '') === 'http://localhost/v1') { -// $credentials['endpoint'] = $endpoint; -// } + // if (($credentials['endpoint'] ?? '') === 'http://localhost/v1') { + // $credentials['endpoint'] = $endpoint; + // } var_dump($credentials); diff --git a/tests/e2e/General/CompressionTest.php b/tests/e2e/General/CompressionTest.php index 29ec0ea1e8..b8395d2b4a 100644 --- a/tests/e2e/General/CompressionTest.php +++ b/tests/e2e/General/CompressionTest.php @@ -87,7 +87,7 @@ class CompressionTest extends Scope $this->assertEquals(200, $response['headers']['status-code']); $this->assertArrayNotHasKey('content-encoding', $response['headers']); - if ($this->endpoint !== 'http://appwrite/v1'){ + if ($this->endpoint !== 'http://appwrite/v1') { $this->assertEquals('chunked', $response['headers']['transfer-encoding'] ?? null, 'Uncompressed response should use chunked transfer, headers received: ' . json_encode($response['headers'], JSON_PRETTY_PRINT)); $this->assertArrayNotHasKey('content-length', $response['headers'], 'Uncompressed response should not send content length when chunked.'); } From 1db42c6fc7357f461bdb472becbdaf6528309daf Mon Sep 17 00:00:00 2001 From: fogelito Date: Wed, 4 Feb 2026 11:43:56 +0200 Subject: [PATCH 19/65] revert lock --- composer.lock | 144 ++++++++++++++++++++++++++------------------------ 1 file changed, 75 insertions(+), 69 deletions(-) diff --git a/composer.lock b/composer.lock index 9359b405ea..56da13dece 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": "e2308896fe86b2bd967390d250b95bae", + "content-hash": "15766c9e6f5480b6e07d9f3b0f075397", "packages": [ { "name": "adhocore/jwt", @@ -283,16 +283,16 @@ }, { "name": "brick/math", - "version": "0.14.5", + "version": "0.14.3", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "618a8077b3c326045e10d5788ed713b341fcfe40" + "reference": "6af96b11de3f7d99730c118c200418c48274edb4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/618a8077b3c326045e10d5788ed713b341fcfe40", - "reference": "618a8077b3c326045e10d5788ed713b341fcfe40", + "url": "https://api.github.com/repos/brick/math/zipball/6af96b11de3f7d99730c118c200418c48274edb4", + "reference": "6af96b11de3f7d99730c118c200418c48274edb4", "shasum": "" }, "require": { @@ -331,7 +331,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.14.5" + "source": "https://github.com/brick/math/tree/0.14.3" }, "funding": [ { @@ -339,7 +339,7 @@ "type": "github" } ], - "time": "2026-02-03T18:06:51+00:00" + "time": "2026-02-01T15:18:05+00:00" }, { "name": "chillerlan/php-qrcode", @@ -3517,16 +3517,16 @@ }, { "name": "utopia-php/abuse", - "version": "1.2.2", + "version": "dev-chore-upgrade-database-5", "source": { "type": "git", "url": "https://github.com/utopia-php/abuse.git", - "reference": "20bee84fd14dbe81d50ecabf1ffd81cceca06152" + "reference": "251856e88367fb139e914d7aba46467167fe176b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/abuse/zipball/20bee84fd14dbe81d50ecabf1ffd81cceca06152", - "reference": "20bee84fd14dbe81d50ecabf1ffd81cceca06152", + "url": "https://api.github.com/repos/utopia-php/abuse/zipball/251856e88367fb139e914d7aba46467167fe176b", + "reference": "251856e88367fb139e914d7aba46467167fe176b", "shasum": "" }, "require": { @@ -3563,9 +3563,9 @@ ], "support": { "issues": "https://github.com/utopia-php/abuse/issues", - "source": "https://github.com/utopia-php/abuse/tree/1.2.2" + "source": "https://github.com/utopia-php/abuse/tree/chore-upgrade-database-5" }, - "time": "2026-02-02T10:43:10+00:00" + "time": "2026-01-30T17:46:51+00:00" }, { "name": "utopia-php/analytics", @@ -3615,16 +3615,16 @@ }, { "name": "utopia-php/audit", - "version": "2.2.1", + "version": "dev-chore-upgrade-database-5", "source": { "type": "git", "url": "https://github.com/utopia-php/audit.git", - "reference": "e3e2d6ad5c7f6377d9237df296a12eb7943892fd" + "reference": "33ea392e6579b8ecfe96c1377116021af7c48af0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/audit/zipball/e3e2d6ad5c7f6377d9237df296a12eb7943892fd", - "reference": "e3e2d6ad5c7f6377d9237df296a12eb7943892fd", + "url": "https://api.github.com/repos/utopia-php/audit/zipball/33ea392e6579b8ecfe96c1377116021af7c48af0", + "reference": "33ea392e6579b8ecfe96c1377116021af7c48af0", "shasum": "" }, "require": { @@ -3658,9 +3658,9 @@ ], "support": { "issues": "https://github.com/utopia-php/audit/issues", - "source": "https://github.com/utopia-php/audit/tree/2.2.1" + "source": "https://github.com/utopia-php/audit/tree/chore-upgrade-database-5" }, - "time": "2026-02-02T10:39:25+00:00" + "time": "2026-01-30T14:09:28+00:00" }, { "name": "utopia-php/auth", @@ -3961,16 +3961,16 @@ }, { "name": "utopia-php/database", - "version": "5.0.1", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/utopia-php/database.git", - "reference": "2783f07e74ddd86dda6e711d79212dd34158540d" + "reference": "221794bd7de027f9177cd325209e8162ca2520cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/database/zipball/2783f07e74ddd86dda6e711d79212dd34158540d", - "reference": "2783f07e74ddd86dda6e711d79212dd34158540d", + "url": "https://api.github.com/repos/utopia-php/database/zipball/221794bd7de027f9177cd325209e8162ca2520cb", + "reference": "221794bd7de027f9177cd325209e8162ca2520cb", "shasum": "" }, "require": { @@ -4013,9 +4013,9 @@ ], "support": { "issues": "https://github.com/utopia-php/database/issues", - "source": "https://github.com/utopia-php/database/tree/5.0.1" + "source": "https://github.com/utopia-php/database/tree/5.0.0" }, - "time": "2026-02-03T10:31:12+00:00" + "time": "2026-01-30T06:17:53+00:00" }, { "name": "utopia-php/detector", @@ -4064,16 +4064,16 @@ }, { "name": "utopia-php/dns", - "version": "1.5.4", + "version": "dev-chore-upgrade-domains-1", "source": { "type": "git", "url": "https://github.com/utopia-php/dns.git", - "reference": "ee831a6f2ceb28babb042ea65539c26ea4530bf6" + "reference": "301b8c5b1cf029ed2dc1437a0508d873ef5718f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/dns/zipball/ee831a6f2ceb28babb042ea65539c26ea4530bf6", - "reference": "ee831a6f2ceb28babb042ea65539c26ea4530bf6", + "url": "https://api.github.com/repos/utopia-php/dns/zipball/301b8c5b1cf029ed2dc1437a0508d873ef5718f0", + "reference": "301b8c5b1cf029ed2dc1437a0508d873ef5718f0", "shasum": "" }, "require": { @@ -4115,9 +4115,9 @@ ], "support": { "issues": "https://github.com/utopia-php/dns/issues", - "source": "https://github.com/utopia-php/dns/tree/1.5.4" + "source": "https://github.com/utopia-php/dns/tree/chore-upgrade-domains-1" }, - "time": "2026-02-02T10:40:38+00:00" + "time": "2026-01-30T14:09:32+00:00" }, { "name": "utopia-php/domains", @@ -4230,16 +4230,16 @@ }, { "name": "utopia-php/emails", - "version": "0.6.6", + "version": "dev-chore-upgrade-domains-1", "source": { "type": "git", "url": "https://github.com/utopia-php/emails.git", - "reference": "354f7fe591e1fba7736afada558cb3b02ec03fea" + "reference": "d7ae7a73e05ae1bc8c6686af90a8f4b354b1fdd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/emails/zipball/354f7fe591e1fba7736afada558cb3b02ec03fea", - "reference": "354f7fe591e1fba7736afada558cb3b02ec03fea", + "url": "https://api.github.com/repos/utopia-php/emails/zipball/d7ae7a73e05ae1bc8c6686af90a8f4b354b1fdd5", + "reference": "d7ae7a73e05ae1bc8c6686af90a8f4b354b1fdd5", "shasum": "" }, "require": { @@ -4284,9 +4284,9 @@ ], "support": { "issues": "https://github.com/utopia-php/emails/issues", - "source": "https://github.com/utopia-php/emails/tree/0.6.6" + "source": "https://github.com/utopia-php/emails/tree/chore-upgrade-domains-1" }, - "time": "2026-02-02T10:41:22+00:00" + "time": "2026-01-30T14:09:30+00:00" }, { "name": "utopia-php/fetch", @@ -4578,16 +4578,16 @@ }, { "name": "utopia-php/migration", - "version": "1.5.0", + "version": "dev-chore-upgrade-database-5", "source": { "type": "git", "url": "https://github.com/utopia-php/migration.git", - "reference": "0d6e77748ca7d9302a88953751bd89d577610afd" + "reference": "afc4eca7d808c360bf2770937f7cc6cbdf9e4ac2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/migration/zipball/0d6e77748ca7d9302a88953751bd89d577610afd", - "reference": "0d6e77748ca7d9302a88953751bd89d577610afd", + "url": "https://api.github.com/repos/utopia-php/migration/zipball/afc4eca7d808c360bf2770937f7cc6cbdf9e4ac2", + "reference": "afc4eca7d808c360bf2770937f7cc6cbdf9e4ac2", "shasum": "" }, "require": { @@ -4628,9 +4628,9 @@ ], "support": { "issues": "https://github.com/utopia-php/migration/issues", - "source": "https://github.com/utopia-php/migration/tree/1.5.0" + "source": "https://github.com/utopia-php/migration/tree/chore-upgrade-database-5" }, - "time": "2026-02-02T10:42:04+00:00" + "time": "2026-01-30T14:09:29+00:00" }, { "name": "utopia-php/mongo", @@ -4745,16 +4745,16 @@ }, { "name": "utopia-php/platform", - "version": "0.7.15", + "version": "0.7.14", "source": { "type": "git", "url": "https://github.com/utopia-php/platform.git", - "reference": "1b94e9b7c3f86d8955178ed05696bb7c8f49839a" + "reference": "9f18ce63f1425ae2dae57468200e4a5d1239d57b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/platform/zipball/1b94e9b7c3f86d8955178ed05696bb7c8f49839a", - "reference": "1b94e9b7c3f86d8955178ed05696bb7c8f49839a", + "url": "https://api.github.com/repos/utopia-php/platform/zipball/9f18ce63f1425ae2dae57468200e4a5d1239d57b", + "reference": "9f18ce63f1425ae2dae57468200e4a5d1239d57b", "shasum": "" }, "require": { @@ -4790,9 +4790,9 @@ ], "support": { "issues": "https://github.com/utopia-php/platform/issues", - "source": "https://github.com/utopia-php/platform/tree/0.7.15" + "source": "https://github.com/utopia-php/platform/tree/0.7.14" }, - "time": "2026-02-04T05:28:13+00:00" + "time": "2026-01-06T15:39:45+00:00" }, { "name": "utopia-php/pools", @@ -4902,16 +4902,16 @@ }, { "name": "utopia-php/queue", - "version": "0.15.2", + "version": "0.15.1", "source": { "type": "git", "url": "https://github.com/utopia-php/queue.git", - "reference": "5051c08d9f50ff4aa78c0eb2f7ca74b328509c81" + "reference": "e551606385990ec7901d222017c4cfc2749a518c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/queue/zipball/5051c08d9f50ff4aa78c0eb2f7ca74b328509c81", - "reference": "5051c08d9f50ff4aa78c0eb2f7ca74b328509c81", + "url": "https://api.github.com/repos/utopia-php/queue/zipball/e551606385990ec7901d222017c4cfc2749a518c", + "reference": "e551606385990ec7901d222017c4cfc2749a518c", "shasum": "" }, "require": { @@ -4962,9 +4962,9 @@ ], "support": { "issues": "https://github.com/utopia-php/queue/issues", - "source": "https://github.com/utopia-php/queue/tree/0.15.2" + "source": "https://github.com/utopia-php/queue/tree/0.15.1" }, - "time": "2026-02-02T11:56:51+00:00" + "time": "2026-01-16T07:54:54+00:00" }, { "name": "utopia-php/registry", @@ -5121,22 +5121,22 @@ }, { "name": "utopia-php/swoole", - "version": "1.0.2", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/utopia-php/swoole.git", - "reference": "8c89f38ff163de6c6f8a4898e467ca38c1f03133" + "reference": "c5ce710dfffc4df09bf3e7aea2d1e55c53e77a95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/swoole/zipball/8c89f38ff163de6c6f8a4898e467ca38c1f03133", - "reference": "8c89f38ff163de6c6f8a4898e467ca38c1f03133", + "url": "https://api.github.com/repos/utopia-php/swoole/zipball/c5ce710dfffc4df09bf3e7aea2d1e55c53e77a95", + "reference": "c5ce710dfffc4df09bf3e7aea2d1e55c53e77a95", "shasum": "" }, "require": { "ext-swoole": "6.*", "php": ">=8.1", - "utopia-php/framework": "0.33.*" + "utopia-php/framework": "0.33.37" }, "require-dev": { "laravel/pint": "1.2.*", @@ -5166,9 +5166,9 @@ ], "support": { "issues": "https://github.com/utopia-php/swoole/issues", - "source": "https://github.com/utopia-php/swoole/tree/1.0.2" + "source": "https://github.com/utopia-php/swoole/tree/1.0.1" }, - "time": "2026-02-04T05:12:48+00:00" + "time": "2026-01-28T12:43:38+00:00" }, { "name": "utopia-php/system", @@ -5546,16 +5546,16 @@ "packages-dev": [ { "name": "appwrite/sdk-generator", - "version": "1.8.24", + "version": "1.8.21", "source": { "type": "git", "url": "https://github.com/appwrite/sdk-generator.git", - "reference": "6bfe521d2b6762d1da94c234f6ef4eab54e5e269" + "reference": "1b47b2c794811c565f8b5e7eeaa19f749bcbeb6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/6bfe521d2b6762d1da94c234f6ef4eab54e5e269", - "reference": "6bfe521d2b6762d1da94c234f6ef4eab54e5e269", + "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/1b47b2c794811c565f8b5e7eeaa19f749bcbeb6b", + "reference": "1b47b2c794811c565f8b5e7eeaa19f749bcbeb6b", "shasum": "" }, "require": { @@ -5591,9 +5591,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/1.8.24" + "source": "https://github.com/appwrite/sdk-generator/tree/1.8.21" }, - "time": "2026-02-04T04:42:05+00:00" + "time": "2026-01-26T04:42:33+00:00" }, { "name": "doctrine/annotations", @@ -9052,7 +9052,13 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": { + "utopia-php/abuse": 20, + "utopia-php/audit": 20, + "utopia-php/emails": 20, + "utopia-php/dns": 20, + "utopia-php/migration": 20 + }, "prefer-stable": false, "prefer-lowest": false, "platform": { From 186ed5b61ffb8b9e0e7bf7c7bd24953eace3f0fb Mon Sep 17 00:00:00 2001 From: fogelito Date: Wed, 4 Feb 2026 12:29:20 +0200 Subject: [PATCH 20/65] fix graphQL --- tests/e2e/Services/GraphQL/ScopeTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/Services/GraphQL/ScopeTest.php b/tests/e2e/Services/GraphQL/ScopeTest.php index f3c80a7418..f6d8b5b0f2 100644 --- a/tests/e2e/Services/GraphQL/ScopeTest.php +++ b/tests/e2e/Services/GraphQL/ScopeTest.php @@ -33,7 +33,7 @@ class ScopeTest extends Scope 'x-appwrite-key' => $apiKey, ], $gqlPayload); - $message = "app.{$projectId}@service.appwrite.test (role: applications) missing scopes ([\"databases.write\"])"; + $message = "app.{$projectId}@service.appwrite (role: applications) missing scopes ([\"databases.write\"])"; $this->assertArrayHasKey('errors', $database['body']); $this->assertEquals($message, $database['body']['errors'][0]['message']); } From 0003443c776db6d7daf390bcfc91e06626eb648d Mon Sep 17 00:00:00 2001 From: Hemachandar Date: Wed, 4 Feb 2026 19:23:27 +0530 Subject: [PATCH 21/65] Create rule in SSL task --- src/Appwrite/Platform/Tasks/SSL.php | 88 +++++++++++++++++++++++++---- 1 file changed, 78 insertions(+), 10 deletions(-) diff --git a/src/Appwrite/Platform/Tasks/SSL.php b/src/Appwrite/Platform/Tasks/SSL.php index 651cb4de11..9ba8d65dd9 100644 --- a/src/Appwrite/Platform/Tasks/SSL.php +++ b/src/Appwrite/Platform/Tasks/SSL.php @@ -4,7 +4,12 @@ namespace Appwrite\Platform\Tasks; use Appwrite\Event\Certificate; use Utopia\CLI\Console; +use Utopia\Database\Database; use Utopia\Database\Document; +use Utopia\Database\Helpers\ID; +use Utopia\Database\Query; +use Utopia\Database\Validator\Authorization; +use Utopia\Domains\Domain; use Utopia\Platform\Action; use Utopia\System\System; use Utopia\Validator\Boolean; @@ -22,22 +27,85 @@ class SSL extends Action $this ->desc('Validate server certificates') ->param('domain', System::getEnv('_APP_DOMAIN', ''), new Hostname(), 'Domain to generate certificate for. If empty, main domain will be used.', true) - ->param('skip-check', true, new Boolean(true), 'If DNS and renew check should be skipped. Defaults to true, and when true, all jobs will result in certificate generation attempt.', true) + ->param('skip-check', 'true', new Boolean(true), 'If DNS and renew check should be skipped. Defaults to true, and when true, all jobs will result in certificate generation attempt.', true) + ->inject('console') + ->inject('dbForPlatform') ->inject('queueForCertificates') + ->inject('authorization') ->callback($this->action(...)); } - public function action(string $domain, bool|string $skipCheck, Certificate $queueForCertificates): void + public function action(string $domain, bool|string $skipCheck, Document $console, Database $dbForPlatform, Certificate $queueForCertificates, Authorization $authorization): void { - $skipCheck = \strval($skipCheck) === 'true'; + $domain = new Domain(!empty($domain) ? $domain : ''); + if (!$domain->isKnown() || $domain->isTest()) { + Console::error('Domain is not known or is a test domain: ' . $domain->get()); + return; + } - Console::success('Scheduling a job to issue a TLS certificate for domain: ' . $domain); + $authorization->skip(function () use ($skipCheck, $console, $dbForPlatform, $domain, $queueForCertificates) { + $isMd5 = System::getEnv('_APP_RULES_FORMAT') === 'md5'; + $skipCheck = \strval($skipCheck) === 'true'; - $queueForCertificates - ->setDomain(new Document([ - 'domain' => $domain - ])) - ->setSkipRenewCheck($skipCheck) - ->trigger(); + $rule = $isMd5 + ? $dbForPlatform->getDocument('rules', md5($domain->get())) + : $dbForPlatform->findOne('rules', [ + Query::equal('domain', [$domain->get()]), + ]); + + if (!$rule->isEmpty()) { + Console::warning('Rule ' . $rule->getId() . ' already exists for domain: ' . $domain->get()); + return; + } + + $owner = ''; + + // Mark owner as Appwrite if its appwrite-owned domain + $appwriteDomains = []; + $appwriteDomainEnvs = [ + System::getEnv('_APP_DOMAIN_FUNCTIONS_FALLBACK', ''), + System::getEnv('_APP_DOMAIN_FUNCTIONS', ''), + System::getEnv('_APP_DOMAIN_SITES', ''), + ]; + foreach ($appwriteDomainEnvs as $appwriteDomainEnv) { + foreach (\explode(',', $appwriteDomainEnv) as $appwriteDomain) { + if (empty($appwriteDomain)) { + continue; + } + $appwriteDomains[] = $appwriteDomain; + } + } + + foreach ($appwriteDomains as $appwriteDomain) { + if (\str_ends_with($domain->get(), $appwriteDomain)) { + $owner = 'Appwrite'; + break; + } + } + + $ruleId = $isMd5 ? md5($domain->get()) : ID::unique(); + $rule = $dbForPlatform->createDocument('rules', new Document([ + '$id' => $ruleId, + 'domain' => $domain->get(), + 'type' => 'api', + 'status' => RULE_STATUS_CERTIFICATE_GENERATING, + 'projectId' => $console->getId(), + 'projectInternalId' => $console->getSequence(), + 'search' => implode(' ', [$ruleId, $domain->get()]), + 'owner' => $owner, + 'region' => $console->getAttribute('region') + ])); + + Console::success('Rule ' . $rule->getId() . ' created for domain: ' . $domain->get()); + + $queueForCertificates + ->setDomain(new Document([ + 'domain' => $domain->get() + ])) + ->setSkipRenewCheck($skipCheck) + ->trigger(); + + Console::success('Scheduled a job to issue a TLS certificate for domain: ' . $domain->get()); + }); } } From a30f12cd66b42525339329361f637c2f498f7ed7 Mon Sep 17 00:00:00 2001 From: Hemachandar Date: Wed, 4 Feb 2026 19:31:00 +0530 Subject: [PATCH 22/65] tiny --- src/Appwrite/Platform/Tasks/SSL.php | 106 +++++++++++++--------------- 1 file changed, 51 insertions(+), 55 deletions(-) diff --git a/src/Appwrite/Platform/Tasks/SSL.php b/src/Appwrite/Platform/Tasks/SSL.php index 9ba8d65dd9..514e2b670a 100644 --- a/src/Appwrite/Platform/Tasks/SSL.php +++ b/src/Appwrite/Platform/Tasks/SSL.php @@ -8,7 +8,6 @@ use Utopia\Database\Database; use Utopia\Database\Document; use Utopia\Database\Helpers\ID; use Utopia\Database\Query; -use Utopia\Database\Validator\Authorization; use Utopia\Domains\Domain; use Utopia\Platform\Action; use Utopia\System\System; @@ -31,11 +30,10 @@ class SSL extends Action ->inject('console') ->inject('dbForPlatform') ->inject('queueForCertificates') - ->inject('authorization') ->callback($this->action(...)); } - public function action(string $domain, bool|string $skipCheck, Document $console, Database $dbForPlatform, Certificate $queueForCertificates, Authorization $authorization): void + public function action(string $domain, bool|string $skipCheck, Document $console, Database $dbForPlatform, Certificate $queueForCertificates): void { $domain = new Domain(!empty($domain) ? $domain : ''); if (!$domain->isKnown() || $domain->isTest()) { @@ -43,69 +41,67 @@ class SSL extends Action return; } - $authorization->skip(function () use ($skipCheck, $console, $dbForPlatform, $domain, $queueForCertificates) { - $isMd5 = System::getEnv('_APP_RULES_FORMAT') === 'md5'; - $skipCheck = \strval($skipCheck) === 'true'; + $skipCheck = \strval($skipCheck) === 'true'; + $isMd5 = System::getEnv('_APP_RULES_FORMAT') === 'md5'; - $rule = $isMd5 - ? $dbForPlatform->getDocument('rules', md5($domain->get())) - : $dbForPlatform->findOne('rules', [ - Query::equal('domain', [$domain->get()]), - ]); + $rule = $isMd5 + ? $dbForPlatform->getDocument('rules', md5($domain->get())) + : $dbForPlatform->findOne('rules', [ + Query::equal('domain', [$domain->get()]), + ]); - if (!$rule->isEmpty()) { - Console::warning('Rule ' . $rule->getId() . ' already exists for domain: ' . $domain->get()); - return; - } + if (!$rule->isEmpty()) { + Console::warning('Rule ' . $rule->getId() . ' already exists for domain: ' . $domain->get()); + return; + } - $owner = ''; + $owner = ''; - // Mark owner as Appwrite if its appwrite-owned domain - $appwriteDomains = []; - $appwriteDomainEnvs = [ - System::getEnv('_APP_DOMAIN_FUNCTIONS_FALLBACK', ''), - System::getEnv('_APP_DOMAIN_FUNCTIONS', ''), - System::getEnv('_APP_DOMAIN_SITES', ''), - ]; - foreach ($appwriteDomainEnvs as $appwriteDomainEnv) { - foreach (\explode(',', $appwriteDomainEnv) as $appwriteDomain) { - if (empty($appwriteDomain)) { - continue; - } - $appwriteDomains[] = $appwriteDomain; + // Mark owner as Appwrite if its appwrite-owned domain + $appwriteDomains = []; + $appwriteDomainEnvs = [ + System::getEnv('_APP_DOMAIN_FUNCTIONS_FALLBACK', ''), + System::getEnv('_APP_DOMAIN_FUNCTIONS', ''), + System::getEnv('_APP_DOMAIN_SITES', ''), + ]; + foreach ($appwriteDomainEnvs as $appwriteDomainEnv) { + foreach (\explode(',', $appwriteDomainEnv) as $appwriteDomain) { + if (empty($appwriteDomain)) { + continue; } + $appwriteDomains[] = $appwriteDomain; } + } - foreach ($appwriteDomains as $appwriteDomain) { - if (\str_ends_with($domain->get(), $appwriteDomain)) { - $owner = 'Appwrite'; - break; - } + foreach ($appwriteDomains as $appwriteDomain) { + if (\str_ends_with($domain->get(), $appwriteDomain)) { + $owner = 'Appwrite'; + break; } + } - $ruleId = $isMd5 ? md5($domain->get()) : ID::unique(); - $rule = $dbForPlatform->createDocument('rules', new Document([ - '$id' => $ruleId, - 'domain' => $domain->get(), - 'type' => 'api', - 'status' => RULE_STATUS_CERTIFICATE_GENERATING, - 'projectId' => $console->getId(), - 'projectInternalId' => $console->getSequence(), - 'search' => implode(' ', [$ruleId, $domain->get()]), - 'owner' => $owner, - 'region' => $console->getAttribute('region') - ])); + $ruleId = $isMd5 ? md5($domain->get()) : ID::unique(); + $rule = $dbForPlatform->createDocument('rules', new Document([ + '$id' => $ruleId, + 'domain' => $domain->get(), + 'type' => 'api', + 'status' => RULE_STATUS_CERTIFICATE_GENERATING, + 'projectId' => $console->getId(), + 'projectInternalId' => $console->getSequence(), + 'search' => implode(' ', [$ruleId, $domain->get()]), + 'owner' => $owner, + 'region' => $console->getAttribute('region') + ])); - Console::success('Rule ' . $rule->getId() . ' created for domain: ' . $domain->get()); + Console::info('Rule ' . $rule->getId() . ' created for domain: ' . $domain->get()); - $queueForCertificates - ->setDomain(new Document([ - 'domain' => $domain->get() - ])) - ->setSkipRenewCheck($skipCheck) - ->trigger(); + $queueForCertificates + ->setDomain(new Document([ + 'domain' => $domain->get() + ])) + ->setSkipRenewCheck($skipCheck) + ->trigger(); - Console::success('Scheduled a job to issue a TLS certificate for domain: ' . $domain->get()); - }); + Console::success('Scheduled a job to issue a TLS certificate for domain: ' . $domain->get()); } } From ead2afb9d4fcfcb2e2942e0d0d73077dcde83609 Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Thu, 5 Feb 2026 18:47:27 +1300 Subject: [PATCH 23/65] Early exit on select all --- src/Appwrite/Utopia/Database/RuntimeQuery.php | 185 +++++++++++++----- 1 file changed, 135 insertions(+), 50 deletions(-) diff --git a/src/Appwrite/Utopia/Database/RuntimeQuery.php b/src/Appwrite/Utopia/Database/RuntimeQuery.php index f959e9b573..89a7a8ebc8 100644 --- a/src/Appwrite/Utopia/Database/RuntimeQuery.php +++ b/src/Appwrite/Utopia/Database/RuntimeQuery.php @@ -4,6 +4,11 @@ namespace Appwrite\Utopia\Database; use Utopia\Database\Query; +/** + * RuntimeQuery handles real-time query filtering for Appwrite's Realtime subscriptions. + * + * Queries are pre-compiled at subscription time for fast evaluation during message delivery. + */ class RuntimeQuery extends Query { public const ALLOWED_QUERIES = [ @@ -27,19 +32,6 @@ class RuntimeQuery extends Query Query::TYPE_SELECT ]; - /** - * Checks if a query is select("*") which means "listen to all events" - * - * @param Query $query - * @return bool - */ - public static function isSelectAll(Query $query): bool - { - return $query->getMethod() === Query::TYPE_SELECT - && count($query->getValues()) === 1 - && $query->getValues()[0] === '*'; - } - /** * Validates a select query - only select("*") is allowed in Realtime * @@ -52,7 +44,10 @@ class RuntimeQuery extends Query return; } - if (!self::isSelectAll($query)) { + $values = $query->getValues(); + $isSelectAll = count($values) === 1 && $values[0] === '*'; + + if (!$isSelectAll) { throw new \InvalidArgumentException( 'Only select("*") is allowed in Realtime queries. select("*") means "listen to all events".' ); @@ -60,60 +55,150 @@ class RuntimeQuery extends Query } /** + * Pre-compile queries into an optimized format for fast evaluation. + * Call this once when subscription is created, store the result. + * * @param array $queries - * @param array $payload + * @return array Compiled query structure with 'type' key */ - public static function filter(array $queries, array $payload): array + public static function compile(array $queries): array { if (empty($queries)) { - return $payload; + return ['type' => 'selectAll']; } - // Check if select("*") is present - if so, return payload (match all) + // Check for select("*") upfront foreach ($queries as $query) { - if (self::isSelectAll($query)) { - return $payload; + if ($query->getMethod() === Query::TYPE_SELECT) { + $values = $query->getValues(); + if (count($values) === 1 && $values[0] === '*') { + return ['type' => 'selectAll']; + } } } - // multiple queries follows and condition + // Compile queries into flat structure + $compiled = [ + 'type' => 'filter', + 'conditions' => [], + 'attributes' => [], + ]; + foreach ($queries as $query) { - if (!self::evaluateFilter($query, $payload)) { - return []; - }; + $condition = self::compileCondition($query); + $compiled['conditions'][] = $condition; + self::extractAttributes($condition, $compiled['attributes']); } + + $compiled['attributes'] = array_unique($compiled['attributes']); + + return $compiled; + } + + /** + * Compile a single query condition into an optimized array format. + */ + private static function compileCondition(Query $query): array + { + $method = $query->getMethod(); + + if ($method === Query::TYPE_AND) { + return [ + 'op' => 'AND', + 'conditions' => array_map([self::class, 'compileCondition'], $query->getValues()), + ]; + } + + if ($method === Query::TYPE_OR) { + return [ + 'op' => 'OR', + 'conditions' => array_map([self::class, 'compileCondition'], $query->getValues()), + ]; + } + + return [ + 'op' => $method, + 'attr' => $query->getAttribute(), + 'values' => $query->getValues(), + ]; + } + + /** + * Extract all attribute names from a compiled condition tree. + */ + private static function extractAttributes(array $condition, array &$attributes): void + { + if (isset($condition['attr'])) { + $attributes[] = $condition['attr']; + } + if (isset($condition['conditions'])) { + foreach ($condition['conditions'] as $sub) { + self::extractAttributes($sub, $attributes); + } + } + } + + /** + * Fast filter using pre-compiled query structure. + * + * @param array $compiled Result from compile() + * @param array $payload Event payload + * @return array Empty array if no match, payload if match + */ + public static function filter(array $compiled, array $payload): array + { + // Fast path for select("*") subscriptions + if ($compiled['type'] === 'selectAll') { + return $payload; + } + + // Quick rejection: if payload is missing any required attribute, fail fast + foreach ($compiled['attributes'] as $attr) { + if (!isset($payload[$attr]) && !\array_key_exists($attr, $payload)) { + return []; + } + } + + // Evaluate all conditions (AND logic at top level) + foreach ($compiled['conditions'] as $condition) { + if (!self::evaluateCondition($condition, $payload)) { + return []; + } + } + return $payload; } - private static function evaluateFilter(Query $query, array $payload): bool + /** + * Evaluate a single compiled condition against a payload. + */ + private static function evaluateCondition(array $condition, array $payload): bool { - $attribute = $query->getAttribute(); - $method = $query->getMethod(); - $values = $query->getValues(); + $op = $condition['op']; - // during 'and' and 'or' attribute will not be present - switch ($method) { - case Query::TYPE_AND: - // All subqueries must evaluate to true - foreach ($query->getValues() as $subquery) { - if (!self::evaluateFilter($subquery, $payload)) { - return false; - } + // Handle AND/OR + if ($op === 'AND') { + foreach ($condition['conditions'] as $sub) { + if (!self::evaluateCondition($sub, $payload)) { + return false; } - return true; - - case Query::TYPE_OR: - // At least one subquery must evaluate to true - foreach ($query->getValues() as $subquery) { - if (self::evaluateFilter($subquery, $payload)) { - return true; - } - } - return false; + } + return true; } - $hasAttribute = \array_key_exists($attribute, $payload); - if (!$hasAttribute) { + if ($op === 'OR') { + foreach ($condition['conditions'] as $sub) { + if (self::evaluateCondition($sub, $payload)) { + return true; + } + } + return false; + } + + // Leaf condition - direct comparison + $attr = $condition['attr']; + + if (!\array_key_exists($attr, $payload)) { return false; } @@ -159,6 +244,6 @@ class RuntimeQuery extends Query return true; } } - return false; + return false; + } } -} From ecf0a1ec67141661e22aa003f833dd35e1221023 Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Thu, 5 Feb 2026 18:47:49 +1300 Subject: [PATCH 24/65] Avoid closures on hot path --- src/Appwrite/Messaging/Adapter/Realtime.php | 190 +++++++----------- src/Appwrite/Utopia/Database/RuntimeQuery.php | 69 ++++--- 2 files changed, 119 insertions(+), 140 deletions(-) diff --git a/src/Appwrite/Messaging/Adapter/Realtime.php b/src/Appwrite/Messaging/Adapter/Realtime.php index 32329bda54..7c51bbb2e5 100644 --- a/src/Appwrite/Messaging/Adapter/Realtime.php +++ b/src/Appwrite/Messaging/Adapter/Realtime.php @@ -31,9 +31,9 @@ class Realtime extends MessagingAdapter * [ROLE_X] -> * [CHANNEL_NAME_X] -> * [CONNECTION_ID] -> - * [SUB_ID] -> ['strings' => [...], 'parsed' => [...]] + * [SUB_ID] -> ['strings' => [...], 'compiled' => [...]] * - * Each subscription ID maps to query strings (for metadata) and pre-parsed Query objects (for filtering). + * Each subscription ID maps to query strings (for metadata) and pre-compiled query filters. * Within a subscription: AND logic (all queries must match) * Across subscriptions: OR logic (any subscription matching = send event) */ @@ -73,25 +73,18 @@ class Realtime extends MessagingAdapter $this->subscriptions[$projectId] = []; } - // Convert Query objects to strings and store both for this subscription - $queryStrings = []; - $parsedQueries = []; + $strings = []; if (empty($queryGroup)) { - // No queries means "listen to all events" - use select("*") - $selectAll = Query::select(['*']); - $queryStrings[] = $selectAll->toString(); - $parsedQueries[] = $selectAll; + $strings[] = Query::select(['*'])->toString(); } else { foreach ($queryGroup as $query) { - /** @var Query $query */ - $queryStrings[] = $query->toString(); - $parsedQueries[] = $query; + $strings[] = $query->toString(); } } - $subscriptionData = [ - 'strings' => $queryStrings, - 'parsed' => $parsedQueries, + $data = [ + 'strings' => $strings, + 'compiled' => RuntimeQuery::compile($queryGroup), ]; foreach ($roles as $role) { @@ -106,7 +99,7 @@ class Realtime extends MessagingAdapter if (!isset($this->subscriptions[$projectId][$role][$channel][$identifier])) { $this->subscriptions[$projectId][$role][$channel][$identifier] = []; } - $this->subscriptions[$projectId][$role][$channel][$identifier][$subscriptionId] = $subscriptionData; + $this->subscriptions[$projectId][$role][$channel][$identifier][$subscriptionId] = $data; } } @@ -148,15 +141,15 @@ class Realtime extends MessagingAdapter continue; } - foreach ($this->subscriptions[$projectId][$role][$channel][$connection] as $subId => $subscriptionData) { - if (!isset($subscriptions[$subId])) { - $subscriptions[$subId] = [ + foreach ($this->subscriptions[$projectId][$role][$channel][$connection] as $subscriptionId => $data) { + if (!isset($subscriptions[$subscriptionId])) { + $subscriptions[$subscriptionId] = [ 'channels' => [], - 'queries' => $subscriptionData['strings'] ?? [] + 'queries' => $data['strings'] ?? [] ]; } - if (!\in_array($channel, $subscriptions[$subId]['channels'])) { - $subscriptions[$subId]['channels'][] = $channel; + if (!\in_array($channel, $subscriptions[$subscriptionId]['channels'])) { + $subscriptions[$subscriptionId]['channels'][] = $channel; } } } @@ -259,12 +252,10 @@ class Realtime extends MessagingAdapter * Identifies the receivers of all subscriptions, based on the permissions and event. * * Example of performance with an event with user:XXX permissions and with X users spread across 10 different channels: - * - 0.014 ms (±6.88%) | 10 Connections / 100 Subscriptions - * - 0.070 ms (±3.71%) | 100 Connections / 1,000 Subscriptions - * - 0.846 ms (±2.74%) | 1,000 Connections / 10,000 Subscriptions - * - 10.866 ms (±1.01%) | 10,000 Connections / 100,000 Subscriptions - * - 110.201 ms (±2.32%) | 100,000 Connections / 1,000,000 Subscriptions - * - 1,121.328 ms (±0.84%) | 1,000,000 Connections / 10,000,000 Subscriptions + * - 0.013 ms | 10 Connections / 100 Subscriptions + * - 0.14 ms | 100 Connections / 1,000 Subscriptions + * - 1.5 ms | 1,000 Connections / 10,000 Subscriptions + * - 15 ms | 10,000 Connections / 100,000 Subscriptions * * @param array $event * @return array Map of connection IDs to matched query groups @@ -272,57 +263,42 @@ class Realtime extends MessagingAdapter public function getSubscribers(array $event): array { $receivers = []; - /** - * Check if project has subscriber. - */ - if (isset($this->subscriptions[$event['project']])) { - /** - * Iterate through each role. - */ - foreach ($this->subscriptions[$event['project']] as $role => $subscription) { - /** - * Iterate through each channel. - */ - foreach ($event['data']['channels'] as $channel) { - /** - * Check if channel has subscriber. Also taking care of the role in the event and the wildcard role. - */ - if ( - \array_key_exists($channel, $this->subscriptions[$event['project']][$role]) - && (\in_array($role, $event['roles']) || \in_array(Role::any()->toString(), $event['roles'])) - ) { - /** - * Saving all connections that are allowed to receive this event. - */ - $payload = $event['data']['payload'] ?? []; - foreach ($this->subscriptions[$event['project']][$role][$channel] as $id => $subscriptions) { - $matchedSubscriptions = []; - // Process each subscription (OR logic across subscriptions) - foreach ($subscriptions as $subId => $subscriptionData) { - // Use pre-parsed queries instead of re-parsing on every event - $parsedQueries = $subscriptionData['parsed'] ?? []; - $queryStrings = $subscriptionData['strings'] ?? []; + if (!isset($this->subscriptions[$event['project']])) { + return $receivers; + } - // Check if this subscription matches (AND logic within subscription) - // Or if empty payload and select all as filter will return empty payload out of it even if it passed - $isEmptyPayloadAndSelectAll = !empty($parsedQueries) && RuntimeQuery::isSelectAll($parsedQueries[0]) && empty($payload); - if ($isEmptyPayloadAndSelectAll || !empty(RuntimeQuery::filter($parsedQueries, $payload))) { - $matchedSubscriptions[$subId] = $queryStrings; - } - } + $payload = $event['data']['payload'] ?? []; - // Only add connection to receivers if at least one subscription matched - if (!empty($matchedSubscriptions)) { - if (!isset($receivers[$id])) { - $receivers[$id] = []; - } - $receivers[$id] += $matchedSubscriptions; - } + foreach ($this->subscriptions[$event['project']] as $role => $subscription) { + foreach ($event['data']['channels'] as $channel) { + if ( + !\array_key_exists($channel, $this->subscriptions[$event['project']][$role]) + || (!\in_array($role, $event['roles']) && !\in_array(Role::any()->toString(), $event['roles'])) + ) { + continue; + } + + foreach ($this->subscriptions[$event['project']][$role][$channel] as $id => $subscriptions) { + $matched = []; + + foreach ($subscriptions as $subscriptionId => $data) { + $compiled = $data['compiled'] ?? ['type' => 'selectAll']; + $strings = $data['strings'] ?? []; + + if (!empty(RuntimeQuery::filter($compiled, $payload))) { + $matched[$subscriptionId] = $strings; } - break; + } + + if (!empty($matched)) { + if (!isset($receivers[$id])) { + $receivers[$id] = []; + } + $receivers[$id] += $matched; } } + break; } } @@ -360,65 +336,50 @@ class Realtime extends MessagingAdapter /** * Constructs subscriptions from query parameters. * - * Reconstructs subscription structure from query params where subscription indices can span multiple channels. - * Format: {channel}[subscriptionIndex][]=query1&{channel}[subscriptionIndex][]=query2 - * - * Example: - * - tests[0][]=select(*) → subscription 0: channels=["tests"] - * - tests[1][]=equal(...) & prod[1][]=equal(...) → subscription 1: channels=["tests", "prod"] - * - * @param array $channelNames Array of channel names - * @param callable $getQueryParam Callable that takes a channel name and returns its query param value (null if not present) - * @return array Array indexed by subscription index: [index => ['channels' => string[], 'queries' => Query[]]] + * @param array $channelNames + * @param callable $getQueryParam + * @return array [index => ['channels' => string[], 'queries' => Query[]]] * @throws QueryException */ public static function constructSubscriptions(array $channelNames, callable $getQueryParam): array { - $subscriptionsByIndex = []; + $subscriptions = []; foreach ($channelNames as $channel) { - $channelSubscriptions = $getQueryParam($channel); + $params = $getQueryParam($channel); - // Backward compatibility: if no channel-specific query params, treat as subscription 0 with select("*") - if ($channelSubscriptions === null) { - if (!isset($subscriptionsByIndex[0])) { - $subscriptionsByIndex[0] = [ - 'channels' => [], - 'queries' => [] - ]; + if ($params === null) { + if (!isset($subscriptions[0])) { + $subscriptions[0] = ['channels' => [], 'queries' => []]; } - $subscriptionsByIndex[0]['channels'][] = $channel; - if (empty($subscriptionsByIndex[0]['queries'])) { - $subscriptionsByIndex[0]['queries'] = [Query::select(['*'])]; + $subscriptions[0]['channels'][] = $channel; + if (empty($subscriptions[0]['queries'])) { + $subscriptions[0]['queries'] = [Query::select(['*'])]; } continue; } - if (!is_array($channelSubscriptions)) { - $channelSubscriptions = [$channelSubscriptions]; + if (!is_array($params)) { + $params = [$params]; } - foreach ($channelSubscriptions as $subscriptionIndex => $subscription) { - if (!isset($subscriptionsByIndex[$subscriptionIndex])) { - $subscriptionsByIndex[$subscriptionIndex] = [ - 'channels' => [], - 'queries' => [] - ]; + foreach ($params as $index => $slot) { + if (!isset($subscriptions[$index])) { + $subscriptions[$index] = ['channels' => [], 'queries' => []]; } - if (!in_array($channel, $subscriptionsByIndex[$subscriptionIndex]['channels'])) { - $subscriptionsByIndex[$subscriptionIndex]['channels'][] = $channel; + if (!in_array($channel, $subscriptions[$index]['channels'])) { + $subscriptions[$index]['channels'][] = $channel; } - if (empty($subscriptionsByIndex[$subscriptionIndex]['queries'])) { - $queriesToParse = is_array($subscription) ? $subscription : [$subscription]; - $parsedQueries = self::convertQueries($queriesToParse); - $subscriptionsByIndex[$subscriptionIndex]['queries'] = $parsedQueries; + if (empty($subscriptions[$index]['queries'])) { + $raw = is_array($slot) ? $slot : [$slot]; + $subscriptions[$index]['queries'] = self::convertQueries($raw); } } } - return $subscriptionsByIndex; + return $subscriptions; } /** @@ -431,19 +392,18 @@ class Realtime extends MessagingAdapter { $queries = Query::parseQueries($queries); $stack = $queries; - $allowedMethods = implode(', ', RuntimeQuery::ALLOWED_QUERIES); + $allowed = implode(', ', RuntimeQuery::ALLOWED_QUERIES); + while (!empty($stack)) { - /** @var Query $query */ $query = array_pop($stack); $method = $query->getMethod(); + if (!in_array($method, RuntimeQuery::ALLOWED_QUERIES, true)) { - $unsupportedMethod = $method; throw new QueryException( - "Query method '{$unsupportedMethod}' is not supported in Realtime queries. Allowed query methods are: {$allowedMethods}" + "Query method '{$method}' is not supported in Realtime queries. Allowed: {$allowed}" ); } - // Validate select queries - only select("*") is allowed if ($method === Query::TYPE_SELECT) { RuntimeQuery::validateSelectQuery($query); } diff --git a/src/Appwrite/Utopia/Database/RuntimeQuery.php b/src/Appwrite/Utopia/Database/RuntimeQuery.php index 89a7a8ebc8..fe2f14fc0a 100644 --- a/src/Appwrite/Utopia/Database/RuntimeQuery.php +++ b/src/Appwrite/Utopia/Database/RuntimeQuery.php @@ -202,48 +202,67 @@ class RuntimeQuery extends Query return false; } - // null can be a value as well - $payloadAttributeValue = $payload[$attribute]; - switch ($method) { + $value = $payload[$attr]; + $targets = $condition['values']; + + // Inlined comparisons - no closures, no method calls + switch ($op) { case Query::TYPE_EQUAL: - return self::anyMatch($values, fn ($value) => $payloadAttributeValue === $value); + foreach ($targets as $target) { + if ($value === $target) { + return true; + } + } + return false; case Query::TYPE_NOT_EQUAL: - return !self::anyMatch($values, fn ($value) => $payloadAttributeValue === $value); + foreach ($targets as $target) { + if ($value === $target) { + return false; + } + } + return true; case Query::TYPE_LESSER: - return self::anyMatch($values, fn ($value) => $payloadAttributeValue < $value); + foreach ($targets as $target) { + if ($value < $target) { + return true; + } + } + return false; case Query::TYPE_LESSER_EQUAL: - return self::anyMatch($values, fn ($value) => $payloadAttributeValue <= $value); + foreach ($targets as $target) { + if ($value <= $target) { + return true; + } + } + return false; case Query::TYPE_GREATER: - return self::anyMatch($values, fn ($value) => $payloadAttributeValue > $value); + foreach ($targets as $target) { + if ($value > $target) { + return true; + } + } + return false; case Query::TYPE_GREATER_EQUAL: - return self::anyMatch($values, fn ($value) => $payloadAttributeValue >= $value); + foreach ($targets as $target) { + if ($value >= $target) { + return true; + } + } + return false; - // attribute must be present and should be explicitly null case Query::TYPE_IS_NULL: - return $payloadAttributeValue === null; + return $value === null; case Query::TYPE_IS_NOT_NULL: - return $payloadAttributeValue !== null; + return $value !== null; default: - throw new \InvalidArgumentException( - "Unsupported query method: {$method}" - ); - } - } - - private static function anyMatch(array $values, callable $fn): bool - { - foreach ($values as $value) { - if ($fn($value)) { - return true; - } - } return false; } } +} From d06759e33edad250a3afb61c2a45565067da7a57 Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Thu, 5 Feb 2026 18:47:54 +1300 Subject: [PATCH 25/65] Cleanup --- app/realtime.php | 83 +++++++++++++++++++++--------------------------- 1 file changed, 37 insertions(+), 46 deletions(-) diff --git a/app/realtime.php b/app/realtime.php index 1f0c4300a8..4169b9f8bc 100644 --- a/app/realtime.php +++ b/app/realtime.php @@ -431,15 +431,13 @@ $server->onWorkerStart(function (int $workerId) use ($server, $register, $stats, ] ]; - $subscribers = $realtime->getSubscribers($event); // [connectionId => [subId => queries]] + $subscribers = $realtime->getSubscribers($event); - // For test events, send to all connections with their matched subscription queries - foreach ($subscribers as $connectionId => $matchedSubscriptions) { + foreach ($subscribers as $id => $matched) { $data = $event['data']; - // Send matched subscription IDs - $data['subscriptions'] = array_keys($matchedSubscriptions); + $data['subscriptions'] = array_keys($matched); - $server->send([$connectionId], json_encode([ + $server->send([$id], json_encode([ 'type' => 'event', 'data' => $data ])); @@ -484,18 +482,18 @@ $server->onWorkerStart(function (int $workerId) use ($server, $register, $stats, $roles = $user->getRoles($database->getAuthorization()); $authorization = $realtime->connections[$connection]['authorization'] ?? null; - $subscriptionMetadata = $realtime->getSubscriptionMetadata($connection); + $meta = $realtime->getSubscriptionMetadata($connection); $realtime->unsubscribe($connection); - foreach ($subscriptionMetadata as $subscriptionId => $metadata) { - $queries = Query::parseQueries($metadata['queries'] ?? []); + foreach ($meta as $subscriptionId => $subscription) { + $queries = Query::parseQueries($subscription['queries'] ?? []); $realtime->subscribe( $projectId, $connection, $subscriptionId, $roles, - $metadata['channels'] ?? [], + $subscription['channels'] ?? [], $queries ); } @@ -507,35 +505,31 @@ $server->onWorkerStart(function (int $workerId) use ($server, $register, $stats, } } - $receivers = $realtime->getSubscribers($event); // [connectionId => [subId => queries]] + $receivers = $realtime->getSubscribers($event); if (Http::isDevelopment() && !empty($receivers)) { Console::log("[Debug][Worker {$workerId}] Receivers: " . count($receivers)); - Console::log("[Debug][Worker {$workerId}] Receivers Connection IDs: " . json_encode(array_keys($receivers))); - Console::log("[Debug][Worker {$workerId}] Event Query: " . json_encode(array_values($receivers))); + Console::log("[Debug][Worker {$workerId}] Connection IDs: " . json_encode(array_keys($receivers))); + Console::log("[Debug][Worker {$workerId}] Matched: " . json_encode(array_values($receivers))); Console::log("[Debug][Worker {$workerId}] Event: " . $payload); } - $totalMessages = 0; + $total = 0; - foreach ($receivers as $connectionId => $matchedSubscriptions) { + foreach ($receivers as $id => $matched) { $data = $event['data']; - // Send matched subscription IDs - $data['subscriptions'] = array_keys($matchedSubscriptions); + $data['subscriptions'] = array_keys($matched); - $server->send( - [$connectionId], - json_encode([ - 'type' => 'event', - 'data' => $data - ]) - ); - $totalMessages++; + $server->send([$id], json_encode([ + 'type' => 'event', + 'data' => $data + ])); + $total++; } - if ($totalMessages > 0) { - $register->get('telemetry.messageSentCounter')->add($totalMessages); - $stats->incr($event['project'], 'messages', $totalMessages); + if ($total > 0) { + $register->get('telemetry.messageSentCounter')->add($total); + $stats->incr($event['project'], 'messages', $total); } }); } catch (Throwable $th) { @@ -624,21 +618,19 @@ $server->onOpen(function (int $connection, SwooleRequest $request) use ($server, throw new Exception(Exception::REALTIME_POLICY_VIOLATION, 'Missing channels'); } - // Reconstruct subscriptions from query params using helper method - $channelNames = array_keys($channels); + $names = array_keys($channels); try { - $subscriptionsByIndex = Realtime::constructSubscriptions( - $channelNames, + $subscriptions = Realtime::constructSubscriptions( + $names, fn ($channel) => $request->getQuery($channel, null) ); } catch (QueryException $e) { throw new Exception(Exception::REALTIME_POLICY_VIOLATION, $e->getMessage()); } - // Generate subscription IDs and subscribe - $subscriptionMapping = []; - foreach ($subscriptionsByIndex as $index => $subscription) { + $mapping = []; + foreach ($subscriptions as $index => $subscription) { $subscriptionId = ID::unique(); $realtime->subscribe( @@ -647,10 +639,10 @@ $server->onOpen(function (int $connection, SwooleRequest $request) use ($server, $subscriptionId, $roles, $subscription['channels'], - $subscription['queries'] // Query objects + $subscription['queries'] ); - $subscriptionMapping[$index] = $subscriptionId; + $mapping[$index] = $subscriptionId; } $realtime->connections[$connection]['authorization'] = $authorization; @@ -660,8 +652,8 @@ $server->onOpen(function (int $connection, SwooleRequest $request) use ($server, $server->send([$connection], json_encode([ 'type' => 'connected', 'data' => [ - 'channels' => $channelNames, - 'subscriptions' => $subscriptionMapping, + 'channels' => $names, + 'subscriptions' => $mapping, 'user' => $user ] ])); @@ -791,32 +783,31 @@ $server->onMessage(function (int $connection, string $message) use ($server, $re } $roles = $user->getRoles($database->getAuthorization()); - $channelNames = $realtime->connections[$connection]['channels'] ?? []; - $channels = Realtime::convertChannels(array_flip($channelNames), $user->getId()); + $names = $realtime->connections[$connection]['channels'] ?? []; + $channels = Realtime::convertChannels(array_flip($names), $user->getId()); $authorization = $realtime->connections[$connection]['authorization'] ?? null; $projectId = $realtime->connections[$connection]['projectId'] ?? null; - $subscriptionMetadata = $realtime->getSubscriptionMetadata($connection); + $meta = $realtime->getSubscriptionMetadata($connection); $realtime->unsubscribe($connection); if (!empty($projectId)) { - foreach ($subscriptionMetadata as $subscriptionId => $metadata) { - $queries = Query::parseQueries($metadata['queries'] ?? []); + foreach ($meta as $subscriptionId => $subscription) { + $queries = Query::parseQueries($subscription['queries'] ?? []); $realtime->subscribe( $projectId, $connection, $subscriptionId, $roles, - $metadata['channels'] ?? [], + $subscription['channels'] ?? [], $queries ); } } - // Restore authorization after subscribe if ($authorization !== null) { $realtime->connections[$connection]['authorization'] = $authorization; } From 7e385fe87f1b3ad8847a39b27309afb097108a13 Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 5 Feb 2026 08:52:12 +0200 Subject: [PATCH 26/65] localhosts --- app/controllers/general.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/controllers/general.php b/app/controllers/general.php index 93d335c943..8964dfca4b 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -955,7 +955,9 @@ Http::init() $endDomain->getRegisterable() !== '' ); - $isLocalHost = $request->getHostname() === 'localhost' || $request->getHostname() === 'localhost:' . $request->getPort(); + $localhosts = ['localhost', 'appwrite', 'localhost:'.$request->getPort(), 'appwrite:'.$request->getPort()]; + + $isLocalHost = in_array($request->getHostname(), $localhosts); $isIpAddress = filter_var($request->getHostname(), FILTER_VALIDATE_IP) !== false; $isConsoleProject = $project->getAttribute('$id', '') === 'console'; @@ -1002,7 +1004,7 @@ Http::init() } if (System::getEnv('_APP_OPTIONS_FORCE_HTTPS', 'disabled') === 'enabled') { // Force HTTPS - if ($request->getProtocol() !== 'https' && ($swooleRequest->header['host'] ?? '') !== 'localhost') { // localhost allowed for proxy, APP_HOSTNAME_INTERNAL allowed for migrations + if ($request->getProtocol() !== 'https' && !in_array(($swooleRequest->header['host'] ?? ''), $localhosts)) { // localhost allowed for proxy, APP_HOSTNAME_INTERNAL allowed for migrations if ($request->getMethod() !== Request::METHOD_GET) { throw new AppwriteException(AppwriteException::GENERAL_PROTOCOL_UNSUPPORTED, 'Method unsupported over HTTP. Please use HTTPS instead.'); } From e490f375eee513b05aedf062d3f10504b99be4fc Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Thu, 5 Feb 2026 20:48:40 +1300 Subject: [PATCH 27/65] Batch groups --- app/realtime.php | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/app/realtime.php b/app/realtime.php index 4169b9f8bc..9a058fbacb 100644 --- a/app/realtime.php +++ b/app/realtime.php @@ -433,11 +433,18 @@ $server->onWorkerStart(function (int $workerId) use ($server, $register, $stats, $subscribers = $realtime->getSubscribers($event); + $groups = []; foreach ($subscribers as $id => $matched) { - $data = $event['data']; - $data['subscriptions'] = array_keys($matched); + $key = implode(',', array_keys($matched)); + $groups[$key]['ids'][] = $id; + $groups[$key]['subscriptions'] = array_keys($matched); + } - $server->send([$id], json_encode([ + foreach ($groups as $group) { + $data = $event['data']; + $data['subscriptions'] = $group['subscriptions']; + + $server->send($group['ids'], json_encode([ 'type' => 'event', 'data' => $data ])); @@ -514,17 +521,24 @@ $server->onWorkerStart(function (int $workerId) use ($server, $register, $stats, Console::log("[Debug][Worker {$workerId}] Event: " . $payload); } - $total = 0; - + // Group connections by matched subscription IDs for batch sending + $groups = []; foreach ($receivers as $id => $matched) { - $data = $event['data']; - $data['subscriptions'] = array_keys($matched); + $key = implode(',', array_keys($matched)); + $groups[$key]['ids'][] = $id; + $groups[$key]['subscriptions'] = array_keys($matched); + } - $server->send([$id], json_encode([ + $total = 0; + foreach ($groups as $group) { + $data = $event['data']; + $data['subscriptions'] = $group['subscriptions']; + + $server->send($group['ids'], json_encode([ 'type' => 'event', 'data' => $data ])); - $total++; + $total += count($group['ids']); } if ($total > 0) { From 12b7f94c1ff0e14590c669dc862462746f9af0f1 Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 5 Feb 2026 10:06:11 +0200 Subject: [PATCH 28/65] _APP_MIGRATION_HOST --- .env | 1 + app/config/platform.php | 2 +- app/controllers/general.php | 12 +++++++++--- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.env b/.env index 85dc6b3b9c..ceb971dcff 100644 --- a/.env +++ b/.env @@ -11,6 +11,7 @@ _APP_CONSOLE_WHITELIST_IPS= _APP_CONSOLE_COUNTRIES_DENYLIST=AQ _APP_CONSOLE_HOSTNAMES=localhost,appwrite.io,*.appwrite.io _APP_HOSTNAMES=appwrite +_APP_MIGRATION_HOST=appwrite _APP_SYSTEM_EMAIL_NAME=Appwrite _APP_SYSTEM_EMAIL_ADDRESS=noreply@appwrite.io _APP_SYSTEM_TEAM_EMAIL=team@appwrite.io diff --git a/app/config/platform.php b/app/config/platform.php index 60ad8f4445..11010022f7 100644 --- a/app/config/platform.php +++ b/app/config/platform.php @@ -22,7 +22,7 @@ return [ 'hostnames' => array_filter(array_unique([ System::getEnv('_APP_DOMAIN', 'localhost'), System::getEnv('_APP_CONSOLE_DOMAIN', 'localhost'), - ...explode(',', System::getEnv('_APP_HOSTNAMES', '')), + ...explode(',', System::getEnv('_APP_HOSTNAMES')), ])), 'platformName' => APP_EMAIL_PLATFORM_NAME, 'logoUrl' => APP_EMAIL_LOGO_URL, diff --git a/app/controllers/general.php b/app/controllers/general.php index 8964dfca4b..c43fc5eac8 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -955,9 +955,15 @@ Http::init() $endDomain->getRegisterable() !== '' ); - $localhosts = ['localhost', 'appwrite', 'localhost:'.$request->getPort(), 'appwrite:'.$request->getPort()]; + $localHosts = ['localhost','localhost:'.$request->getPort()]; - $isLocalHost = in_array($request->getHostname(), $localhosts); + $migrationHost = System::getEnv('_APP_MIGRATION_HOST'); + if (!empty($migrationHost)) { + $localHosts[] = $migrationHost; + $localHosts[] = $migrationHost.':'.$request->getPort(); + } + + $isLocalHost = in_array($request->getHostname(), $localHosts); $isIpAddress = filter_var($request->getHostname(), FILTER_VALIDATE_IP) !== false; $isConsoleProject = $project->getAttribute('$id', '') === 'console'; @@ -1004,7 +1010,7 @@ Http::init() } if (System::getEnv('_APP_OPTIONS_FORCE_HTTPS', 'disabled') === 'enabled') { // Force HTTPS - if ($request->getProtocol() !== 'https' && !in_array(($swooleRequest->header['host'] ?? ''), $localhosts)) { // localhost allowed for proxy, APP_HOSTNAME_INTERNAL allowed for migrations + if ($request->getProtocol() !== 'https' && !in_array(($swooleRequest->header['host'] ?? ''), $localHosts)) { // localhost allowed for proxy, APP_HOSTNAME_INTERNAL allowed for migrations if ($request->getMethod() !== Request::METHOD_GET) { throw new AppwriteException(AppwriteException::GENERAL_PROTOCOL_UNSUPPORTED, 'Method unsupported over HTTP. Please use HTTPS instead.'); } From 64f8b9195b08a8e952f67929fe8be3813f48e3e6 Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 5 Feb 2026 10:12:55 +0200 Subject: [PATCH 29/65] _APP_MIGRATION_HOST --- .env | 1 - app/config/platform.php | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.env b/.env index ceb971dcff..7ac8fc25ef 100644 --- a/.env +++ b/.env @@ -10,7 +10,6 @@ _APP_CONSOLE_SESSION_ALERTS=enabled _APP_CONSOLE_WHITELIST_IPS= _APP_CONSOLE_COUNTRIES_DENYLIST=AQ _APP_CONSOLE_HOSTNAMES=localhost,appwrite.io,*.appwrite.io -_APP_HOSTNAMES=appwrite _APP_MIGRATION_HOST=appwrite _APP_SYSTEM_EMAIL_NAME=Appwrite _APP_SYSTEM_EMAIL_ADDRESS=noreply@appwrite.io diff --git a/app/config/platform.php b/app/config/platform.php index 11010022f7..17dfd72217 100644 --- a/app/config/platform.php +++ b/app/config/platform.php @@ -22,7 +22,7 @@ return [ 'hostnames' => array_filter(array_unique([ System::getEnv('_APP_DOMAIN', 'localhost'), System::getEnv('_APP_CONSOLE_DOMAIN', 'localhost'), - ...explode(',', System::getEnv('_APP_HOSTNAMES')), + System::getEnv('_APP_MIGRATION_HOST'), ])), 'platformName' => APP_EMAIL_PLATFORM_NAME, 'logoUrl' => APP_EMAIL_LOGO_URL, From 5d1b63fd35854de72f27e3c6f6fc4d2d96ebe966 Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 5 Feb 2026 10:29:45 +0200 Subject: [PATCH 30/65] docker-compose.yml --- docker-compose.yml | 2 +- phpunit.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 1f35e840c7..61b3f3d82d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -229,7 +229,7 @@ services: - _APP_FUNCTIONS_CREATION_ABUSE_LIMIT - _APP_CUSTOM_DOMAIN_DENY_LIST - _APP_TRUSTED_HEADERS - - _APP_HOSTNAMES + - _APP_MIGRATION_HOST extra_hosts: - "host.docker.internal:host-gateway" diff --git a/phpunit.xml b/phpunit.xml index a8578995c1..215ee2d59d 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -6,7 +6,7 @@ convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" - stopOnFailure="false" + stopOnFailure="true" > From aff180c517bd037cd10548cfbfccdc5f4cd74e27 Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 5 Feb 2026 10:30:21 +0200 Subject: [PATCH 31/65] docker-compose.yml --- docker-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yml b/docker-compose.yml index 61b3f3d82d..349a81e2de 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -821,6 +821,7 @@ services: - _APP_MIGRATIONS_FIREBASE_CLIENT_SECRET - _APP_DATABASE_SHARED_TABLES - _APP_OPTIONS_FORCE_HTTPS + - _APP_MIGRATION_HOST appwrite-task-maintenance: entrypoint: maintenance From 074470c2c2cb451042d8252d224e447a694fd554 Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 5 Feb 2026 10:35:35 +0200 Subject: [PATCH 32/65] check _APP_MIGRATION_HOST --- src/Appwrite/Platform/Workers/Migrations.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Appwrite/Platform/Workers/Migrations.php b/src/Appwrite/Platform/Workers/Migrations.php index cfba5d0677..7030396eaa 100644 --- a/src/Appwrite/Platform/Workers/Migrations.php +++ b/src/Appwrite/Platform/Workers/Migrations.php @@ -336,8 +336,12 @@ class Migrations extends Action //$protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') === 'disabled' ? 'http' : 'https'; //$endpoint = $protocol . '://' . $platform['apiHostname'] . '/v1'; - $endpoint = 'http://localhost/v1'; - $endpoint = 'http://appwrite/v1'; + $host = System::getEnv('_APP_MIGRATION_HOST'); + if (empty($host)) { + throw new \Exception('_APP_MIGRATION_HOST is not set'); + } + + $endpoint = 'http://'.$host.'/v1'; try { $credentials = $migration->getAttribute('credentials', []); From 3e31094e1e985c8e2b8bddfec9837cba54a3725b Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Thu, 5 Feb 2026 21:57:00 +1300 Subject: [PATCH 33/65] fix: Fix unit test failures for RuntimeQuery and Messaging tests - Add missing isSelectAll() method to RuntimeQuery class - Update RuntimeQueryTest to use compile() before filter() since filter() expects pre-compiled query arrays, not Query objects - Remove incorrect break statement in Realtime::getSubscribers() that was stopping iteration after the first matching channel, causing subscribers to not be found for subsequent channels - Use local variable $subscriptionsByChannel to avoid unused variable warning Co-Authored-By: Claude Opus 4.5 --- src/Appwrite/Messaging/Adapter/Realtime.php | 7 +- src/Appwrite/Utopia/Database/RuntimeQuery.php | 21 ++- .../Database/Query/RuntimeQueryTest.php | 139 ++++++++++-------- 3 files changed, 94 insertions(+), 73 deletions(-) diff --git a/src/Appwrite/Messaging/Adapter/Realtime.php b/src/Appwrite/Messaging/Adapter/Realtime.php index 7c51bbb2e5..05de941cb3 100644 --- a/src/Appwrite/Messaging/Adapter/Realtime.php +++ b/src/Appwrite/Messaging/Adapter/Realtime.php @@ -270,16 +270,16 @@ class Realtime extends MessagingAdapter $payload = $event['data']['payload'] ?? []; - foreach ($this->subscriptions[$event['project']] as $role => $subscription) { + foreach ($this->subscriptions[$event['project']] as $role => $subscriptionsByChannel) { foreach ($event['data']['channels'] as $channel) { if ( - !\array_key_exists($channel, $this->subscriptions[$event['project']][$role]) + !\array_key_exists($channel, $subscriptionsByChannel) || (!\in_array($role, $event['roles']) && !\in_array(Role::any()->toString(), $event['roles'])) ) { continue; } - foreach ($this->subscriptions[$event['project']][$role][$channel] as $id => $subscriptions) { + foreach ($subscriptionsByChannel[$channel] as $id => $subscriptions) { $matched = []; foreach ($subscriptions as $subscriptionId => $data) { @@ -298,7 +298,6 @@ class Realtime extends MessagingAdapter $receivers[$id] += $matched; } } - break; } } diff --git a/src/Appwrite/Utopia/Database/RuntimeQuery.php b/src/Appwrite/Utopia/Database/RuntimeQuery.php index fe2f14fc0a..cfc7fbfd7d 100644 --- a/src/Appwrite/Utopia/Database/RuntimeQuery.php +++ b/src/Appwrite/Utopia/Database/RuntimeQuery.php @@ -32,6 +32,22 @@ class RuntimeQuery extends Query Query::TYPE_SELECT ]; + /** + * Checks if a query is a select("*") query. + * + * @param Query $query + * @return bool + */ + public static function isSelectAll(Query $query): bool + { + if ($query->getMethod() !== Query::TYPE_SELECT) { + return false; + } + + $values = $query->getValues(); + return count($values) === 1 && $values[0] === '*'; + } + /** * Validates a select query - only select("*") is allowed in Realtime * @@ -44,10 +60,7 @@ class RuntimeQuery extends Query return; } - $values = $query->getValues(); - $isSelectAll = count($values) === 1 && $values[0] === '*'; - - if (!$isSelectAll) { + if (!self::isSelectAll($query)) { throw new \InvalidArgumentException( 'Only select("*") is allowed in Realtime queries. select("*") means "listen to all events".' ); diff --git a/tests/unit/Utopia/Database/Query/RuntimeQueryTest.php b/tests/unit/Utopia/Database/Query/RuntimeQueryTest.php index 51d3a307da..7745d535cf 100644 --- a/tests/unit/Utopia/Database/Query/RuntimeQueryTest.php +++ b/tests/unit/Utopia/Database/Query/RuntimeQueryTest.php @@ -16,10 +16,19 @@ class RuntimeQueryTest extends TestCase { } + /** + * Helper to compile and filter queries in one step for tests. + */ + private function compileAndFilter(array $queries, array $payload): array + { + $compiled = RuntimeQuery::compile($queries); + return RuntimeQuery::filter($compiled, $payload); + } + public function testFilterEmptyQueries(): void { $payload = ['name' => 'John', 'age' => 30]; - $result = RuntimeQuery::filter([], $payload); + $result = $this->compileAndFilter([], $payload); $this->assertEquals($payload, $result); } @@ -27,7 +36,7 @@ class RuntimeQueryTest extends TestCase { $queries = [Query::equal('name', ['Jane'])]; $payload = ['name' => 'John', 'age' => 30]; - $result = RuntimeQuery::filter($queries, $payload); + $result = $this->compileAndFilter($queries, $payload); $this->assertEquals([], $result); } @@ -35,7 +44,7 @@ class RuntimeQueryTest extends TestCase { $queries = [Query::equal('name', ['John'])]; $payload = ['name' => 'John', 'age' => 30]; - $result = RuntimeQuery::filter($queries, $payload); + $result = $this->compileAndFilter($queries, $payload); $this->assertEquals($payload, $result); } @@ -44,7 +53,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::equal('name', ['John']); $payload = ['name' => 'John']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -52,7 +61,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::equal('name', ['Jane']); $payload = ['name' => 'John']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals([], $result); } @@ -60,7 +69,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::equal('status', ['active', 'pending', 'approved']); $payload = ['status' => 'active']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -68,7 +77,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::equal('status', ['active', 'pending', 'approved']); $payload = ['status' => 'rejected']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals([], $result); } @@ -76,7 +85,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::equal('age', [30, 25, 35]); $payload = ['age' => 30]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -84,7 +93,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::equal('active', [true]); $payload = ['active' => true]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -92,7 +101,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::equal('missing', ['value']); $payload = ['name' => 'John']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals([], $result); } @@ -101,7 +110,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::notEqual('name', ['Jane']); $payload = ['name' => 'John']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -109,7 +118,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::notEqual('name', ['John']); $payload = ['name' => 'John']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals([], $result); } @@ -119,12 +128,12 @@ class RuntimeQueryTest extends TestCase // and Query::parse will be done first and parse doesn't allow multiple notEqual values $query = Query::notEqual('status', ['rejected', 'cancelled']); $payload = ['status' => 'active']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); $query = Query::notEqual('status', ['active', 'pending']); $payload = ['status' => 'active']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals([], $result); } @@ -133,7 +142,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::lessThan('age', 30); $payload = ['age' => 25]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -141,7 +150,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::lessThan('age', 30); $payload = ['age' => 35]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals([], $result); } @@ -149,7 +158,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::lessThan('age', 30); $payload = ['age' => 30]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals([], $result); } @@ -159,7 +168,7 @@ class RuntimeQueryTest extends TestCase // This test uses a single value as Query class requires $query = Query::lessThan('age', 30); $payload = ['age' => 25]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -167,7 +176,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::lessThan('name', 'M'); $payload = ['name' => 'A']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -176,7 +185,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::lessThanEqual('age', 30); $payload = ['age' => 25]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -184,7 +193,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::lessThanEqual('age', 30); $payload = ['age' => 30]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -192,7 +201,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::lessThanEqual('age', 30); $payload = ['age' => 35]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals([], $result); } @@ -201,7 +210,7 @@ class RuntimeQueryTest extends TestCase // Note: Query::lessThanEqual only accepts single value $query = Query::lessThanEqual('age', 30); $payload = ['age' => 30]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -210,7 +219,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::greaterThan('age', 30); $payload = ['age' => 35]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -218,7 +227,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::greaterThan('age', 30); $payload = ['age' => 25]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals([], $result); } @@ -226,7 +235,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::greaterThan('age', 30); $payload = ['age' => 30]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals([], $result); } @@ -235,7 +244,7 @@ class RuntimeQueryTest extends TestCase // Note: Query::greaterThan only accepts single value $query = Query::greaterThan('age', 20); $payload = ['age' => 35]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -244,7 +253,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::greaterThanEqual('age', 30); $payload = ['age' => 35]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -252,7 +261,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::greaterThanEqual('age', 30); $payload = ['age' => 30]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -260,7 +269,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::greaterThanEqual('age', 30); $payload = ['age' => 25]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals([], $result); } @@ -269,7 +278,7 @@ class RuntimeQueryTest extends TestCase // Note: Query::greaterThanEqual only accepts single value $query = Query::greaterThanEqual('age', 20); $payload = ['age' => 30]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -278,7 +287,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::isNull('description'); $payload = ['description' => null]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -286,7 +295,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::isNull('description'); $payload = ['description' => 'Some text']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals([], $result); } @@ -294,7 +303,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::isNull('missing'); $payload = ['name' => 'John']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals([], $result); } @@ -303,7 +312,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::isNotNull('description'); $payload = ['description' => 'Some text']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -311,7 +320,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::isNotNull('description'); $payload = ['description' => null]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals([], $result); } @@ -319,7 +328,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::isNotNull('missing'); $payload = ['name' => 'John']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals([], $result); } @@ -331,7 +340,7 @@ class RuntimeQueryTest extends TestCase Query::equal('age', [30]) ]); $payload = ['name' => 'John', 'age' => 30]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -342,7 +351,7 @@ class RuntimeQueryTest extends TestCase Query::equal('age', [25]) ]); $payload = ['name' => 'John', 'age' => 30]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals([], $result); } @@ -353,7 +362,7 @@ class RuntimeQueryTest extends TestCase Query::equal('age', [25]) ]); $payload = ['name' => 'John', 'age' => 30]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals([], $result); } @@ -365,7 +374,7 @@ class RuntimeQueryTest extends TestCase Query::isNotNull('email') ]); $payload = ['status' => 'active', 'age' => 25, 'email' => 'test@example.com']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -379,7 +388,7 @@ class RuntimeQueryTest extends TestCase ]) ]); $payload = ['name' => 'John', 'age' => 30, 'status' => 'active']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -391,7 +400,7 @@ class RuntimeQueryTest extends TestCase Query::equal('name', ['Jane']) ]); $payload = ['name' => 'John']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -402,7 +411,7 @@ class RuntimeQueryTest extends TestCase Query::equal('status', ['pending']) ]); $payload = ['status' => 'active']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -413,7 +422,7 @@ class RuntimeQueryTest extends TestCase Query::equal('age', [25]) ]); $payload = ['name' => 'John', 'age' => 30]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals([], $result); } @@ -425,7 +434,7 @@ class RuntimeQueryTest extends TestCase Query::equal('status', ['approved']) ]); $payload = ['status' => 'pending']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -439,7 +448,7 @@ class RuntimeQueryTest extends TestCase ]) ]); $payload = ['name' => 'Bob']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -450,7 +459,7 @@ class RuntimeQueryTest extends TestCase Query::equal('email', ['john@example.com']) ]); $payload = ['name' => 'Jane', 'email' => 'john@example.com']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -465,7 +474,7 @@ class RuntimeQueryTest extends TestCase ]) ]); $payload = ['type' => 'user', 'status' => 'active']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -482,7 +491,7 @@ class RuntimeQueryTest extends TestCase ]) ]); $payload = ['name' => 'John', 'age' => 30]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -494,7 +503,7 @@ class RuntimeQueryTest extends TestCase Query::equal('age', [30]) ]; $payload = ['name' => 'John', 'age' => 30]; - $result = RuntimeQuery::filter($queries, $payload); + $result = $this->compileAndFilter($queries, $payload); $this->assertEquals($payload, $result); } @@ -505,7 +514,7 @@ class RuntimeQueryTest extends TestCase Query::equal('age', [25]) ]; $payload = ['name' => 'John', 'age' => 30]; - $result = RuntimeQuery::filter($queries, $payload); + $result = $this->compileAndFilter($queries, $payload); // With AND logic, if first matches but second doesn't, should return empty $this->assertEquals([], $result); } @@ -517,7 +526,7 @@ class RuntimeQueryTest extends TestCase Query::equal('age', [30]) ]; $payload = ['name' => 'John', 'age' => 30]; - $result = RuntimeQuery::filter($queries, $payload); + $result = $this->compileAndFilter($queries, $payload); // With AND logic, if second matches but first doesn't, should return empty $this->assertEquals([], $result); } @@ -529,7 +538,7 @@ class RuntimeQueryTest extends TestCase Query::equal('age', [25]) ]; $payload = ['name' => 'John', 'age' => 30]; - $result = RuntimeQuery::filter($queries, $payload); + $result = $this->compileAndFilter($queries, $payload); $this->assertEquals([], $result); } @@ -537,7 +546,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::equal('name', ['John']); $payload = []; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals([], $result); } @@ -545,7 +554,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::and([]); $payload = ['name' => 'John']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); // Empty AND should return true (all conditions pass vacuously) $this->assertEquals($payload, $result); } @@ -554,7 +563,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::or([]); $payload = ['name' => 'John']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); // Empty OR should return false (no conditions match) $this->assertEquals([], $result); } @@ -564,7 +573,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::equal('count', [0]); $payload = ['count' => 0]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -572,7 +581,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::equal('name', ['']); $payload = ['name' => '']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -580,7 +589,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::equal('active', [false]); $payload = ['active' => false]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -588,7 +597,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::greaterThan('score', 8.5); $payload = ['score' => 9.2]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -596,7 +605,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::lessThan('version', '10'); $payload = ['version' => '9']; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -667,7 +676,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::select(['*']); $payload = ['name' => 'John', 'age' => 30]; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } @@ -679,7 +688,7 @@ class RuntimeQueryTest extends TestCase Query::equal('name', ['Jane']), // This would normally fail ]; $payload = ['name' => 'John', 'age' => 30]; - $result = RuntimeQuery::filter($queries, $payload); + $result = $this->compileAndFilter($queries, $payload); // select("*") takes precedence - returns payload $this->assertEquals($payload, $result); } @@ -688,7 +697,7 @@ class RuntimeQueryTest extends TestCase { $query = Query::select(['*']); $payload = []; - $result = RuntimeQuery::filter([$query], $payload); + $result = $this->compileAndFilter([$query], $payload); $this->assertEquals($payload, $result); } } From 765d33467481b89fd29ac3a83d6267041a1f97d2 Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Thu, 5 Feb 2026 22:08:43 +1300 Subject: [PATCH 34/65] fix: Return null instead of empty array for non-matching queries RuntimeQuery::filter() now returns null when the query doesn't match, instead of an empty array. This distinguishes between "no match" and "match with empty payload", fixing the issue where subscriptions with empty payloads weren't being delivered. Updated Realtime::getSubscribers() to check for null instead of using !empty(), and updated all tests to expect null for non-matches. Co-Authored-By: Claude Opus 4.5 --- src/Appwrite/Messaging/Adapter/Realtime.php | 2 +- src/Appwrite/Utopia/Database/RuntimeQuery.php | 8 ++-- .../Database/Query/RuntimeQueryTest.php | 48 +++++++++---------- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/Appwrite/Messaging/Adapter/Realtime.php b/src/Appwrite/Messaging/Adapter/Realtime.php index 05de941cb3..3149785c4c 100644 --- a/src/Appwrite/Messaging/Adapter/Realtime.php +++ b/src/Appwrite/Messaging/Adapter/Realtime.php @@ -286,7 +286,7 @@ class Realtime extends MessagingAdapter $compiled = $data['compiled'] ?? ['type' => 'selectAll']; $strings = $data['strings'] ?? []; - if (!empty(RuntimeQuery::filter($compiled, $payload))) { + if (RuntimeQuery::filter($compiled, $payload) !== null) { $matched[$subscriptionId] = $strings; } } diff --git a/src/Appwrite/Utopia/Database/RuntimeQuery.php b/src/Appwrite/Utopia/Database/RuntimeQuery.php index cfc7fbfd7d..1db750b7ef 100644 --- a/src/Appwrite/Utopia/Database/RuntimeQuery.php +++ b/src/Appwrite/Utopia/Database/RuntimeQuery.php @@ -156,9 +156,9 @@ class RuntimeQuery extends Query * * @param array $compiled Result from compile() * @param array $payload Event payload - * @return array Empty array if no match, payload if match + * @return array|null Null if no match, payload if match */ - public static function filter(array $compiled, array $payload): array + public static function filter(array $compiled, array $payload): ?array { // Fast path for select("*") subscriptions if ($compiled['type'] === 'selectAll') { @@ -168,14 +168,14 @@ class RuntimeQuery extends Query // Quick rejection: if payload is missing any required attribute, fail fast foreach ($compiled['attributes'] as $attr) { if (!isset($payload[$attr]) && !\array_key_exists($attr, $payload)) { - return []; + return null; } } // Evaluate all conditions (AND logic at top level) foreach ($compiled['conditions'] as $condition) { if (!self::evaluateCondition($condition, $payload)) { - return []; + return null; } } diff --git a/tests/unit/Utopia/Database/Query/RuntimeQueryTest.php b/tests/unit/Utopia/Database/Query/RuntimeQueryTest.php index 7745d535cf..4078e8e2c4 100644 --- a/tests/unit/Utopia/Database/Query/RuntimeQueryTest.php +++ b/tests/unit/Utopia/Database/Query/RuntimeQueryTest.php @@ -37,7 +37,7 @@ class RuntimeQueryTest extends TestCase $queries = [Query::equal('name', ['Jane'])]; $payload = ['name' => 'John', 'age' => 30]; $result = $this->compileAndFilter($queries, $payload); - $this->assertEquals([], $result); + $this->assertNull($result); } public function testFilterWithMatchingQuery(): void @@ -62,7 +62,7 @@ class RuntimeQueryTest extends TestCase $query = Query::equal('name', ['Jane']); $payload = ['name' => 'John']; $result = $this->compileAndFilter([$query], $payload); - $this->assertEquals([], $result); + $this->assertNull($result); } public function testEqualMultipleValuesMatch(): void @@ -78,7 +78,7 @@ class RuntimeQueryTest extends TestCase $query = Query::equal('status', ['active', 'pending', 'approved']); $payload = ['status' => 'rejected']; $result = $this->compileAndFilter([$query], $payload); - $this->assertEquals([], $result); + $this->assertNull($result); } public function testEqualNumericValues(): void @@ -102,7 +102,7 @@ class RuntimeQueryTest extends TestCase $query = Query::equal('missing', ['value']); $payload = ['name' => 'John']; $result = $this->compileAndFilter([$query], $payload); - $this->assertEquals([], $result); + $this->assertNull($result); } // TYPE_NOT_EQUAL tests @@ -119,7 +119,7 @@ class RuntimeQueryTest extends TestCase $query = Query::notEqual('name', ['John']); $payload = ['name' => 'John']; $result = $this->compileAndFilter([$query], $payload); - $this->assertEquals([], $result); + $this->assertNull($result); } public function testNotEqualMultipleValues(): void @@ -134,7 +134,7 @@ class RuntimeQueryTest extends TestCase $query = Query::notEqual('status', ['active', 'pending']); $payload = ['status' => 'active']; $result = $this->compileAndFilter([$query], $payload); - $this->assertEquals([], $result); + $this->assertNull($result); } // TYPE_LESSER tests @@ -151,7 +151,7 @@ class RuntimeQueryTest extends TestCase $query = Query::lessThan('age', 30); $payload = ['age' => 35]; $result = $this->compileAndFilter([$query], $payload); - $this->assertEquals([], $result); + $this->assertNull($result); } public function testLesserEqualValue(): void @@ -159,7 +159,7 @@ class RuntimeQueryTest extends TestCase $query = Query::lessThan('age', 30); $payload = ['age' => 30]; $result = $this->compileAndFilter([$query], $payload); - $this->assertEquals([], $result); + $this->assertNull($result); } public function testLesserMultipleValues(): void @@ -202,7 +202,7 @@ class RuntimeQueryTest extends TestCase $query = Query::lessThanEqual('age', 30); $payload = ['age' => 35]; $result = $this->compileAndFilter([$query], $payload); - $this->assertEquals([], $result); + $this->assertNull($result); } public function testLesserEqualMultipleValues(): void @@ -228,7 +228,7 @@ class RuntimeQueryTest extends TestCase $query = Query::greaterThan('age', 30); $payload = ['age' => 25]; $result = $this->compileAndFilter([$query], $payload); - $this->assertEquals([], $result); + $this->assertNull($result); } public function testGreaterEqualValue(): void @@ -236,7 +236,7 @@ class RuntimeQueryTest extends TestCase $query = Query::greaterThan('age', 30); $payload = ['age' => 30]; $result = $this->compileAndFilter([$query], $payload); - $this->assertEquals([], $result); + $this->assertNull($result); } public function testGreaterMultipleValues(): void @@ -270,7 +270,7 @@ class RuntimeQueryTest extends TestCase $query = Query::greaterThanEqual('age', 30); $payload = ['age' => 25]; $result = $this->compileAndFilter([$query], $payload); - $this->assertEquals([], $result); + $this->assertNull($result); } public function testGreaterEqualMultipleValues(): void @@ -296,7 +296,7 @@ class RuntimeQueryTest extends TestCase $query = Query::isNull('description'); $payload = ['description' => 'Some text']; $result = $this->compileAndFilter([$query], $payload); - $this->assertEquals([], $result); + $this->assertNull($result); } public function testIsNullMissingAttribute(): void @@ -304,7 +304,7 @@ class RuntimeQueryTest extends TestCase $query = Query::isNull('missing'); $payload = ['name' => 'John']; $result = $this->compileAndFilter([$query], $payload); - $this->assertEquals([], $result); + $this->assertNull($result); } // TYPE_IS_NOT_NULL tests @@ -321,7 +321,7 @@ class RuntimeQueryTest extends TestCase $query = Query::isNotNull('description'); $payload = ['description' => null]; $result = $this->compileAndFilter([$query], $payload); - $this->assertEquals([], $result); + $this->assertNull($result); } public function testIsNotNullMissingAttribute(): void @@ -329,7 +329,7 @@ class RuntimeQueryTest extends TestCase $query = Query::isNotNull('missing'); $payload = ['name' => 'John']; $result = $this->compileAndFilter([$query], $payload); - $this->assertEquals([], $result); + $this->assertNull($result); } // TYPE_AND tests @@ -352,7 +352,7 @@ class RuntimeQueryTest extends TestCase ]); $payload = ['name' => 'John', 'age' => 30]; $result = $this->compileAndFilter([$query], $payload); - $this->assertEquals([], $result); + $this->assertNull($result); } public function testAndAllFail(): void @@ -363,7 +363,7 @@ class RuntimeQueryTest extends TestCase ]); $payload = ['name' => 'John', 'age' => 30]; $result = $this->compileAndFilter([$query], $payload); - $this->assertEquals([], $result); + $this->assertNull($result); } public function testAndMultipleConditions(): void @@ -423,7 +423,7 @@ class RuntimeQueryTest extends TestCase ]); $payload = ['name' => 'John', 'age' => 30]; $result = $this->compileAndFilter([$query], $payload); - $this->assertEquals([], $result); + $this->assertNull($result); } public function testOrMultipleConditions(): void @@ -516,7 +516,7 @@ class RuntimeQueryTest extends TestCase $payload = ['name' => 'John', 'age' => 30]; $result = $this->compileAndFilter($queries, $payload); // With AND logic, if first matches but second doesn't, should return empty - $this->assertEquals([], $result); + $this->assertNull($result); } public function testMultipleQueriesSecondMatches(): void @@ -528,7 +528,7 @@ class RuntimeQueryTest extends TestCase $payload = ['name' => 'John', 'age' => 30]; $result = $this->compileAndFilter($queries, $payload); // With AND logic, if second matches but first doesn't, should return empty - $this->assertEquals([], $result); + $this->assertNull($result); } public function testMultipleQueriesNoneMatch(): void @@ -539,7 +539,7 @@ class RuntimeQueryTest extends TestCase ]; $payload = ['name' => 'John', 'age' => 30]; $result = $this->compileAndFilter($queries, $payload); - $this->assertEquals([], $result); + $this->assertNull($result); } public function testEmptyPayload(): void @@ -547,7 +547,7 @@ class RuntimeQueryTest extends TestCase $query = Query::equal('name', ['John']); $payload = []; $result = $this->compileAndFilter([$query], $payload); - $this->assertEquals([], $result); + $this->assertNull($result); } public function testEmptyAndQuery(): void @@ -565,7 +565,7 @@ class RuntimeQueryTest extends TestCase $payload = ['name' => 'John']; $result = $this->compileAndFilter([$query], $payload); // Empty OR should return false (no conditions match) - $this->assertEquals([], $result); + $this->assertNull($result); } // Type-specific edge cases From 18125156d2b6d159c3a1b85a99e9d66dadc7602a Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Thu, 5 Feb 2026 22:14:41 +1300 Subject: [PATCH 35/65] fix: Update compileAndFilter return type to nullable array Co-Authored-By: Claude Opus 4.5 --- tests/unit/Utopia/Database/Query/RuntimeQueryTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/Utopia/Database/Query/RuntimeQueryTest.php b/tests/unit/Utopia/Database/Query/RuntimeQueryTest.php index 4078e8e2c4..2b60f00d8b 100644 --- a/tests/unit/Utopia/Database/Query/RuntimeQueryTest.php +++ b/tests/unit/Utopia/Database/Query/RuntimeQueryTest.php @@ -19,7 +19,7 @@ class RuntimeQueryTest extends TestCase /** * Helper to compile and filter queries in one step for tests. */ - private function compileAndFilter(array $queries, array $payload): array + private function compileAndFilter(array $queries, array $payload): ?array { $compiled = RuntimeQuery::compile($queries); return RuntimeQuery::filter($compiled, $payload); From e21614088f710a8a3a71e69dbffe08428cd2077d Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Thu, 5 Feb 2026 22:24:26 +1300 Subject: [PATCH 36/65] fix: Address CodeRabbit review comments - Fix OR precheck bug: skip attribute existence check when OR conditions exist, since OR can match with partial attributes present - Remove dead code in app/realtime.php (unused $names and $channels variables) - Add tests for OR queries with missing attributes in one branch Co-Authored-By: Claude Opus 4.5 --- app/realtime.php | 2 -- src/Appwrite/Utopia/Database/RuntimeQuery.php | 20 +++++++++----- .../Database/Query/RuntimeQueryTest.php | 26 +++++++++++++++++++ 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/app/realtime.php b/app/realtime.php index 9a058fbacb..97e7465683 100644 --- a/app/realtime.php +++ b/app/realtime.php @@ -797,8 +797,6 @@ $server->onMessage(function (int $connection, string $message) use ($server, $re } $roles = $user->getRoles($database->getAuthorization()); - $names = $realtime->connections[$connection]['channels'] ?? []; - $channels = Realtime::convertChannels(array_flip($names), $user->getId()); $authorization = $realtime->connections[$connection]['authorization'] ?? null; $projectId = $realtime->connections[$connection]['projectId'] ?? null; diff --git a/src/Appwrite/Utopia/Database/RuntimeQuery.php b/src/Appwrite/Utopia/Database/RuntimeQuery.php index 1db750b7ef..369006d9df 100644 --- a/src/Appwrite/Utopia/Database/RuntimeQuery.php +++ b/src/Appwrite/Utopia/Database/RuntimeQuery.php @@ -95,12 +95,13 @@ class RuntimeQuery extends Query 'type' => 'filter', 'conditions' => [], 'attributes' => [], + 'hasOr' => false, ]; foreach ($queries as $query) { $condition = self::compileCondition($query); $compiled['conditions'][] = $condition; - self::extractAttributes($condition, $compiled['attributes']); + self::extractAttributes($condition, $compiled['attributes'], $compiled['hasOr']); } $compiled['attributes'] = array_unique($compiled['attributes']); @@ -138,15 +139,19 @@ class RuntimeQuery extends Query /** * Extract all attribute names from a compiled condition tree. + * Also tracks whether any OR conditions exist. */ - private static function extractAttributes(array $condition, array &$attributes): void + private static function extractAttributes(array $condition, array &$attributes, bool &$hasOr): void { + if (isset($condition['op']) && $condition['op'] === 'OR') { + $hasOr = true; + } if (isset($condition['attr'])) { $attributes[] = $condition['attr']; } if (isset($condition['conditions'])) { foreach ($condition['conditions'] as $sub) { - self::extractAttributes($sub, $attributes); + self::extractAttributes($sub, $attributes, $hasOr); } } } @@ -166,9 +171,12 @@ class RuntimeQuery extends Query } // Quick rejection: if payload is missing any required attribute, fail fast - foreach ($compiled['attributes'] as $attr) { - if (!isset($payload[$attr]) && !\array_key_exists($attr, $payload)) { - return null; + // Skip this optimization when OR conditions exist (OR can match with partial attributes) + if (empty($compiled['hasOr'])) { + foreach ($compiled['attributes'] as $attr) { + if (!isset($payload[$attr]) && !\array_key_exists($attr, $payload)) { + return null; + } } } diff --git a/tests/unit/Utopia/Database/Query/RuntimeQueryTest.php b/tests/unit/Utopia/Database/Query/RuntimeQueryTest.php index 2b60f00d8b..f7d73eb287 100644 --- a/tests/unit/Utopia/Database/Query/RuntimeQueryTest.php +++ b/tests/unit/Utopia/Database/Query/RuntimeQueryTest.php @@ -463,6 +463,32 @@ class RuntimeQueryTest extends TestCase $this->assertEquals($payload, $result); } + public function testOrWithMissingAttributeInOneBranch(): void + { + // OR should match when one branch's attribute is missing but another branch matches + $query = Query::or([ + Query::equal('name', ['John']), + Query::equal('email', ['john@example.com']) + ]); + // Payload only has email, not name - should still match via email branch + $payload = ['email' => 'john@example.com']; + $result = $this->compileAndFilter([$query], $payload); + $this->assertEquals($payload, $result); + } + + public function testOrWithMissingAttributeNoMatch(): void + { + // OR should not match when the only matching branch has missing attribute + $query = Query::or([ + Query::equal('name', ['John']), + Query::equal('email', ['john@example.com']) + ]); + // Payload only has name but it doesn't match - should not match + $payload = ['name' => 'Jane']; + $result = $this->compileAndFilter([$query], $payload); + $this->assertNull($result); + } + // Complex combinations public function testAndOrCombination(): void { From cbfef909eed373ce611c48669dc8d0f5c9a96934 Mon Sep 17 00:00:00 2001 From: Hemachandar Date: Thu, 5 Feb 2026 15:03:27 +0530 Subject: [PATCH 37/65] reset permissions --- src/Appwrite/Platform/Modules/Compute/Base.php | 11 +---------- .../Modules/Projects/Http/Projects/Action.php | 11 +---------- 2 files changed, 2 insertions(+), 20 deletions(-) diff --git a/src/Appwrite/Platform/Modules/Compute/Base.php b/src/Appwrite/Platform/Modules/Compute/Base.php index ee5f679330..db0cfe7daf 100644 --- a/src/Appwrite/Platform/Modules/Compute/Base.php +++ b/src/Appwrite/Platform/Modules/Compute/Base.php @@ -32,20 +32,11 @@ class Base extends Action protected function getPermissions(string $teamId, string $projectId): array { return [ - // Team-wide permissions - Permission::read(Role::team(ID::custom($teamId), 'owner')), - Permission::read(Role::team(ID::custom($teamId), 'developer')), + Permission::read(Role::team(ID::custom($teamId))), Permission::update(Role::team(ID::custom($teamId), 'owner')), Permission::update(Role::team(ID::custom($teamId), 'developer')), Permission::delete(Role::team(ID::custom($teamId), 'owner')), Permission::delete(Role::team(ID::custom($teamId), 'developer')), - // Project-wide permissions - Permission::read(Role::team(ID::custom($teamId), "project-{$projectId}-owner")), - Permission::read(Role::team(ID::custom($teamId), "project-{$projectId}-developer")), - Permission::update(Role::team(ID::custom($teamId), "project-{$projectId}-owner")), - Permission::update(Role::team(ID::custom($teamId), "project-{$projectId}-developer")), - Permission::delete(Role::team(ID::custom($teamId), "project-{$projectId}-owner")), - Permission::delete(Role::team(ID::custom($teamId), "project-{$projectId}-developer")), ]; } diff --git a/src/Appwrite/Platform/Modules/Projects/Http/Projects/Action.php b/src/Appwrite/Platform/Modules/Projects/Http/Projects/Action.php index 21cd108485..1a3be1e783 100644 --- a/src/Appwrite/Platform/Modules/Projects/Http/Projects/Action.php +++ b/src/Appwrite/Platform/Modules/Projects/Http/Projects/Action.php @@ -12,20 +12,11 @@ class Action extends AppwriteAction protected function getPermissions(string $teamId, string $projectId): array { return [ - // Team-wide permissions - Permission::read(Role::team(ID::custom($teamId), 'owner')), - Permission::read(Role::team(ID::custom($teamId), 'developer')), + Permission::read(Role::team(ID::custom($teamId))), Permission::update(Role::team(ID::custom($teamId), 'owner')), Permission::update(Role::team(ID::custom($teamId), 'developer')), Permission::delete(Role::team(ID::custom($teamId), 'owner')), Permission::delete(Role::team(ID::custom($teamId), 'developer')), - // Project-wide permissions - Permission::read(Role::team(ID::custom($teamId), "project-{$projectId}-owner")), - Permission::read(Role::team(ID::custom($teamId), "project-{$projectId}-developer")), - Permission::update(Role::team(ID::custom($teamId), "project-{$projectId}-owner")), - Permission::update(Role::team(ID::custom($teamId), "project-{$projectId}-developer")), - Permission::delete(Role::team(ID::custom($teamId), "project-{$projectId}-owner")), - Permission::delete(Role::team(ID::custom($teamId), "project-{$projectId}-developer")), ]; } } From 657f16031b708f1dbfb976d5d88a73b3729b747c Mon Sep 17 00:00:00 2001 From: Hemachandar Date: Thu, 5 Feb 2026 15:11:17 +0530 Subject: [PATCH 38/65] lint --- app/controllers/api/projects.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index 27f02fb2d0..d61340cfff 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -16,7 +16,6 @@ use Appwrite\SDK\Response as SDKResponse; use Appwrite\Template\Template; use Appwrite\Utopia\Response; use PHPMailer\PHPMailer\PHPMailer; -use Utopia\App; use Utopia\Config\Config; use Utopia\Database\Database; use Utopia\Database\Document; From 4f7337759f69cde96737d3dd0f9cc2cd8fbcbcea Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Thu, 5 Feb 2026 22:53:04 +1300 Subject: [PATCH 39/65] Expose row bytes used/bytes free on table/collection --- .../Databases/Http/Databases/Collections/Action.php | 13 +++++++++++++ .../Databases/Http/Databases/Collections/Create.php | 2 ++ .../Databases/Http/Databases/Collections/Get.php | 2 ++ .../Databases/Http/Databases/Collections/Update.php | 2 ++ .../Databases/Http/Databases/Collections/XList.php | 4 ++++ src/Appwrite/Utopia/Response/Model/Collection.php | 12 ++++++++++++ src/Appwrite/Utopia/Response/Model/Table.php | 12 ++++++++++++ .../e2e/Services/Databases/Legacy/DatabasesBase.php | 11 +++++++++++ .../Services/Databases/TablesDB/DatabasesBase.php | 11 +++++++++++ 9 files changed, 69 insertions(+) diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Action.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Action.php index a148e23845..f49d07ec4c 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Action.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Action.php @@ -3,6 +3,8 @@ namespace Appwrite\Platform\Modules\Databases\Http\Databases\Collections; use Appwrite\Extend\Exception; +use Utopia\Database\Database; +use Utopia\Database\Document; use Utopia\Platform\Action as UtopiaAction; use Utopia\Platform\Scope\HTTP; @@ -165,4 +167,15 @@ abstract class Action extends UtopiaAction ? Exception::ATTRIBUTE_TYPE_INVALID : Exception::COLUMN_TYPE_INVALID; } + + /** + * Add row bytes information to a collection/table document. + */ + protected function addRowBytesInfo(Document $document, Database $dbForProject): Document + { + $adapter = $dbForProject->getAdapter(); + $document->setAttribute('bytesMax', $adapter->getDocumentSizeLimit()); + $document->setAttribute('bytesUsed', $adapter->getAttributeWidth($document)); + return $document; + } } diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Create.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Create.php index d0e9539ad4..31125ae417 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Create.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Create.php @@ -248,6 +248,8 @@ class Create extends Action ->setParam('databaseId', $databaseId) ->setParam($this->getEventsParamKey(), $collection->getId()); + $this->addRowBytesInfo($collection, $dbForProject); + $response ->setStatusCode(SwooleResponse::STATUS_CODE_CREATED) ->dynamic($collection, $this->getResponseModel()); diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Get.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Get.php index d8df8f1f8c..5d6e3ee5ef 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Get.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Get.php @@ -75,6 +75,8 @@ class Get extends Action throw new Exception($this->getNotFoundException(), params: [$collectionId]); } + $this->addRowBytesInfo($collection, $dbForProject); + $response->dynamic($collection, $this->getResponseModel()); } } diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Update.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Update.php index a2d696813b..ebf7b75a17 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Update.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Update.php @@ -117,6 +117,8 @@ class Update extends Action ->setParam('databaseId', $databaseId) ->setParam($this->getEventsParamKey(), $collection->getId()); + $this->addRowBytesInfo($collection, $dbForProject); + $response->dynamic($collection, $this->getResponseModel()); } } diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/XList.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/XList.php index c23286f3cd..5e29d53abc 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/XList.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/XList.php @@ -122,6 +122,10 @@ class XList extends Action throw new Exception(Exception::GENERAL_QUERY_INVALID); } + foreach ($collections as $collection) { + $this->addRowBytesInfo($collection, $dbForProject); + } + $response->dynamic(new Document([ 'total' => $total, $this->getSDKGroup() => $collections, diff --git a/src/Appwrite/Utopia/Response/Model/Collection.php b/src/Appwrite/Utopia/Response/Model/Collection.php index 9350b6298c..18797178e1 100644 --- a/src/Appwrite/Utopia/Response/Model/Collection.php +++ b/src/Appwrite/Utopia/Response/Model/Collection.php @@ -87,6 +87,18 @@ class Collection extends Model 'example' => new \stdClass(), 'array' => true ]) + ->addRule('bytesMax', [ + 'type' => self::TYPE_INTEGER, + 'description' => 'Maximum row size in bytes. Returns 0 when no limit applies (e.g., MongoDB).', + 'default' => 0, + 'example' => 65535, + ]) + ->addRule('bytesUsed', [ + 'type' => self::TYPE_INTEGER, + 'description' => 'Currently used row size in bytes based on defined attributes.', + 'default' => 0, + 'example' => 1500, + ]) ; } diff --git a/src/Appwrite/Utopia/Response/Model/Table.php b/src/Appwrite/Utopia/Response/Model/Table.php index c45ee85a69..f2f1b8725f 100644 --- a/src/Appwrite/Utopia/Response/Model/Table.php +++ b/src/Appwrite/Utopia/Response/Model/Table.php @@ -92,6 +92,18 @@ class Table extends Model 'example' => new \stdClass(), 'array' => true ]) + ->addRule('bytesMax', [ + 'type' => self::TYPE_INTEGER, + 'description' => 'Maximum row size in bytes. Returns 0 when no limit applies (e.g., MongoDB).', + 'default' => 0, + 'example' => 65535, + ]) + ->addRule('bytesUsed', [ + 'type' => self::TYPE_INTEGER, + 'description' => 'Currently used row size in bytes based on defined attributes.', + 'default' => 0, + 'example' => 1500, + ]) ; } diff --git a/tests/e2e/Services/Databases/Legacy/DatabasesBase.php b/tests/e2e/Services/Databases/Legacy/DatabasesBase.php index 6cde01e240..9f59bf5922 100644 --- a/tests/e2e/Services/Databases/Legacy/DatabasesBase.php +++ b/tests/e2e/Services/Databases/Legacy/DatabasesBase.php @@ -62,6 +62,12 @@ trait DatabasesBase $this->assertEquals(201, $movies['headers']['status-code']); $this->assertEquals($movies['body']['name'], 'Movies'); + $this->assertArrayHasKey('bytesMax', $movies['body']); + $this->assertArrayHasKey('bytesUsed', $movies['body']); + $this->assertIsInt($movies['body']['bytesMax']); + $this->assertIsInt($movies['body']['bytesUsed']); + $this->assertGreaterThanOrEqual(0, $movies['body']['bytesMax']); + $this->assertGreaterThanOrEqual(0, $movies['body']['bytesUsed']); $actors = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections', array_merge([ 'content-type' => 'application/json', @@ -143,6 +149,8 @@ trait DatabasesBase $this->assertEquals(200, $response['headers']['status-code']); $this->assertFalse($response['body']['enabled']); + $this->assertArrayHasKey('bytesMax', $response['body']); + $this->assertArrayHasKey('bytesUsed', $response['body']); if ($this->getSide() === 'client') { $responseCreateDocument = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections/' . $data['moviesId'] . '/documents', array_merge([ @@ -363,6 +371,9 @@ trait DatabasesBase $this->assertIsArray($movies['body']['attributes']); $this->assertCount(9, $movies['body']['attributes']); + $this->assertArrayHasKey('bytesMax', $movies['body']); + $this->assertArrayHasKey('bytesUsed', $movies['body']); + $this->assertGreaterThanOrEqual(0, $movies['body']['bytesUsed']); $this->assertEquals($movies['body']['attributes'][0]['key'], $title['body']['key']); $this->assertEquals($movies['body']['attributes'][1]['key'], $description['body']['key']); $this->assertEquals($movies['body']['attributes'][2]['key'], $tagline['body']['key']); diff --git a/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php b/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php index 58bb92f643..7b2f903aa1 100644 --- a/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php +++ b/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php @@ -62,6 +62,12 @@ trait DatabasesBase $this->assertEquals(201, $movies['headers']['status-code']); $this->assertEquals($movies['body']['name'], 'Movies'); + $this->assertArrayHasKey('bytesMax', $movies['body']); + $this->assertArrayHasKey('bytesUsed', $movies['body']); + $this->assertIsInt($movies['body']['bytesMax']); + $this->assertIsInt($movies['body']['bytesUsed']); + $this->assertGreaterThanOrEqual(0, $movies['body']['bytesMax']); + $this->assertGreaterThanOrEqual(0, $movies['body']['bytesUsed']); $actors = $this->client->call(Client::METHOD_POST, '/tablesdb/' . $databaseId . '/tables', array_merge([ 'content-type' => 'application/json', @@ -143,6 +149,8 @@ trait DatabasesBase $this->assertEquals(200, $response['headers']['status-code']); $this->assertFalse($response['body']['enabled']); + $this->assertArrayHasKey('bytesMax', $response['body']); + $this->assertArrayHasKey('bytesUsed', $response['body']); if ($this->getSide() === 'client') { $responseCreateRow = $this->client->call(Client::METHOD_POST, '/tablesdb/' . $databaseId . '/tables/' . $data['moviesId'] . '/rows', array_merge([ @@ -363,6 +371,9 @@ trait DatabasesBase $this->assertIsArray($movies['body']['columns']); $this->assertCount(9, $movies['body']['columns']); + $this->assertArrayHasKey('bytesMax', $movies['body']); + $this->assertArrayHasKey('bytesUsed', $movies['body']); + $this->assertGreaterThanOrEqual(0, $movies['body']['bytesUsed']); $this->assertEquals($movies['body']['columns'][0]['key'], $title['body']['key']); $this->assertEquals($movies['body']['columns'][1]['key'], $description['body']['key']); $this->assertEquals($movies['body']['columns'][2]['key'], $tagline['body']['key']); From 8600d0e64fd8a5744879171435a05085e69028e1 Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 5 Feb 2026 12:04:57 +0200 Subject: [PATCH 40/65] Remove var_dump --- app/controllers/general.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/controllers/general.php b/app/controllers/general.php index c43fc5eac8..2c24d8336a 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -84,11 +84,6 @@ function router(Http $utopia, Database $dbForPlatform, callable $getProjectDB, S $url = $protocol . '://' . $platform['consoleHostname']; $platformHostnames = $platform['hostnames'] ?? []; - var_dump('getHostname='); - var_dump($host); - - var_dump('$platformHostnames='); - var_dump($platformHostnames); if ($rule->isEmpty()) { $denyDomains = []; $denyEnvVars = [ From d40b1707bac3d9c96800f81733dfccce4904c776 Mon Sep 17 00:00:00 2001 From: fogelito Date: Thu, 5 Feb 2026 12:09:54 +0200 Subject: [PATCH 41/65] Remove var_dump --- app/controllers/general.php | 2 +- phpunit.xml | 2 +- src/Appwrite/Platform/Workers/Migrations.php | 9 --------- 3 files changed, 2 insertions(+), 11 deletions(-) diff --git a/app/controllers/general.php b/app/controllers/general.php index 2c24d8336a..d894135886 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -1005,7 +1005,7 @@ Http::init() } if (System::getEnv('_APP_OPTIONS_FORCE_HTTPS', 'disabled') === 'enabled') { // Force HTTPS - if ($request->getProtocol() !== 'https' && !in_array(($swooleRequest->header['host'] ?? ''), $localHosts)) { // localhost allowed for proxy, APP_HOSTNAME_INTERNAL allowed for migrations + if ($request->getProtocol() !== 'https' && !in_array(($swooleRequest->header['host'] ?? ''), $localHosts)) { // localhost allowed for proxy if ($request->getMethod() !== Request::METHOD_GET) { throw new AppwriteException(AppwriteException::GENERAL_PROTOCOL_UNSUPPORTED, 'Method unsupported over HTTP. Please use HTTPS instead.'); } diff --git a/phpunit.xml b/phpunit.xml index 215ee2d59d..a8578995c1 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -6,7 +6,7 @@ convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" - stopOnFailure="true" + stopOnFailure="false" > diff --git a/src/Appwrite/Platform/Workers/Migrations.php b/src/Appwrite/Platform/Workers/Migrations.php index 7030396eaa..7f112e2414 100644 --- a/src/Appwrite/Platform/Workers/Migrations.php +++ b/src/Appwrite/Platform/Workers/Migrations.php @@ -333,9 +333,6 @@ class Migrations extends Action $transfer = $source = $destination = null; - //$protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') === 'disabled' ? 'http' : 'https'; - //$endpoint = $protocol . '://' . $platform['apiHostname'] . '/v1'; - $host = System::getEnv('_APP_MIGRATION_HOST'); if (empty($host)) { throw new \Exception('_APP_MIGRATION_HOST is not set'); @@ -357,12 +354,6 @@ class Migrations extends Action $credentials['destinationEndpoint'] = $endpoint; } - // if (($credentials['endpoint'] ?? '') === 'http://localhost/v1') { - // $credentials['endpoint'] = $endpoint; - // } - - var_dump($credentials); - $migration->setAttribute('credentials', $credentials); $migration->setAttribute('stage', 'processing'); From 3b2c05eb8debf6b6197f0440dc3f7eb7a65337a1 Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Thu, 5 Feb 2026 23:50:10 +1300 Subject: [PATCH 42/65] Update desc --- composer.lock | 14 +++++++------- src/Appwrite/Utopia/Response/Model/Collection.php | 4 ++-- src/Appwrite/Utopia/Response/Model/Table.php | 4 ++-- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/composer.lock b/composer.lock index d4c7939166..e18149bd34 100644 --- a/composer.lock +++ b/composer.lock @@ -283,16 +283,16 @@ }, { "name": "brick/math", - "version": "0.14.5", + "version": "0.14.6", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "618a8077b3c326045e10d5788ed713b341fcfe40" + "reference": "32498d5e1897e7642c0b961ace2df6d7dc9a3bc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/618a8077b3c326045e10d5788ed713b341fcfe40", - "reference": "618a8077b3c326045e10d5788ed713b341fcfe40", + "url": "https://api.github.com/repos/brick/math/zipball/32498d5e1897e7642c0b961ace2df6d7dc9a3bc3", + "reference": "32498d5e1897e7642c0b961ace2df6d7dc9a3bc3", "shasum": "" }, "require": { @@ -331,7 +331,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.14.5" + "source": "https://github.com/brick/math/tree/0.14.6" }, "funding": [ { @@ -339,7 +339,7 @@ "type": "github" } ], - "time": "2026-02-03T18:06:51+00:00" + "time": "2026-02-05T07:59:58+00:00" }, { "name": "chillerlan/php-qrcode", @@ -9184,5 +9184,5 @@ "platform-overrides": { "php": "8.3" }, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" } diff --git a/src/Appwrite/Utopia/Response/Model/Collection.php b/src/Appwrite/Utopia/Response/Model/Collection.php index 18797178e1..407db3aea9 100644 --- a/src/Appwrite/Utopia/Response/Model/Collection.php +++ b/src/Appwrite/Utopia/Response/Model/Collection.php @@ -89,13 +89,13 @@ class Collection extends Model ]) ->addRule('bytesMax', [ 'type' => self::TYPE_INTEGER, - 'description' => 'Maximum row size in bytes. Returns 0 when no limit applies (e.g., MongoDB).', + 'description' => 'Maximum document size in bytes. Returns 0 when no limit applies.', 'default' => 0, 'example' => 65535, ]) ->addRule('bytesUsed', [ 'type' => self::TYPE_INTEGER, - 'description' => 'Currently used row size in bytes based on defined attributes.', + 'description' => 'Currently used document size in bytes based on defined attributes.', 'default' => 0, 'example' => 1500, ]) diff --git a/src/Appwrite/Utopia/Response/Model/Table.php b/src/Appwrite/Utopia/Response/Model/Table.php index f2f1b8725f..20cd3ccca2 100644 --- a/src/Appwrite/Utopia/Response/Model/Table.php +++ b/src/Appwrite/Utopia/Response/Model/Table.php @@ -94,13 +94,13 @@ class Table extends Model ]) ->addRule('bytesMax', [ 'type' => self::TYPE_INTEGER, - 'description' => 'Maximum row size in bytes. Returns 0 when no limit applies (e.g., MongoDB).', + 'description' => 'Maximum row size in bytes. Returns 0 when no limit applies.', 'default' => 0, 'example' => 65535, ]) ->addRule('bytesUsed', [ 'type' => self::TYPE_INTEGER, - 'description' => 'Currently used row size in bytes based on defined attributes.', + 'description' => 'Currently used row size in bytes based on defined columns.', 'default' => 0, 'example' => 1500, ]) From a866f0a69fd714466cac4f36e02165197eafc9b4 Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Thu, 5 Feb 2026 23:50:16 +1300 Subject: [PATCH 43/65] Gen specs --- app/config/specs/open-api3-1.8.x-client.json | 122 +-- app/config/specs/open-api3-1.8.x-console.json | 746 +++++++++--------- app/config/specs/open-api3-1.8.x-server.json | 632 ++++++++------- app/config/specs/open-api3-latest-client.json | 122 +-- .../specs/open-api3-latest-console.json | 746 +++++++++--------- app/config/specs/open-api3-latest-server.json | 632 ++++++++------- app/config/specs/swagger2-1.8.x-client.json | 122 +-- app/config/specs/swagger2-1.8.x-console.json | 746 +++++++++--------- app/config/specs/swagger2-1.8.x-server.json | 632 ++++++++------- app/config/specs/swagger2-latest-client.json | 122 +-- app/config/specs/swagger2-latest-console.json | 746 +++++++++--------- app/config/specs/swagger2-latest-server.json | 632 ++++++++------- 12 files changed, 3128 insertions(+), 2872 deletions(-) diff --git a/app/config/specs/open-api3-1.8.x-client.json b/app/config/specs/open-api3-1.8.x-client.json index 592dc5b052..1dd3c60448 100644 --- a/app/config/specs/open-api3-1.8.x-client.json +++ b/app/config/specs/open-api3-1.8.x-client.json @@ -555,7 +555,7 @@ "x-appwrite": { "method": "updateMFA", "group": "mfa", - "weight": 253, + "weight": 250, "cookies": false, "type": "", "demo": "account\/update-mfa.md", @@ -627,7 +627,7 @@ "x-appwrite": { "method": "createMfaAuthenticator", "group": "mfa", - "weight": 255, + "weight": 252, "cookies": false, "type": "", "demo": "account\/create-mfa-authenticator.md", @@ -751,7 +751,7 @@ "x-appwrite": { "method": "updateMfaAuthenticator", "group": "mfa", - "weight": 256, + "weight": 253, "cookies": false, "type": "", "demo": "account\/update-mfa-authenticator.md", @@ -891,7 +891,7 @@ "x-appwrite": { "method": "deleteMfaAuthenticator", "group": "mfa", - "weight": 257, + "weight": 254, "cookies": false, "type": "", "demo": "account\/delete-mfa-authenticator.md", @@ -1015,7 +1015,7 @@ "x-appwrite": { "method": "createMfaChallenge", "group": "mfa", - "weight": 261, + "weight": 258, "cookies": false, "type": "", "demo": "account\/create-mfa-challenge.md", @@ -1149,7 +1149,7 @@ "x-appwrite": { "method": "updateMfaChallenge", "group": "mfa", - "weight": 262, + "weight": 259, "cookies": false, "type": "", "demo": "account\/update-mfa-challenge.md", @@ -1287,7 +1287,7 @@ "x-appwrite": { "method": "listMfaFactors", "group": "mfa", - "weight": 254, + "weight": 251, "cookies": false, "type": "", "demo": "account\/list-mfa-factors.md", @@ -1388,7 +1388,7 @@ "x-appwrite": { "method": "getMfaRecoveryCodes", "group": "mfa", - "weight": 260, + "weight": 257, "cookies": false, "type": "", "demo": "account\/get-mfa-recovery-codes.md", @@ -1487,7 +1487,7 @@ "x-appwrite": { "method": "createMfaRecoveryCodes", "group": "mfa", - "weight": 258, + "weight": 255, "cookies": false, "type": "", "demo": "account\/create-mfa-recovery-codes.md", @@ -1586,7 +1586,7 @@ "x-appwrite": { "method": "updateMfaRecoveryCodes", "group": "mfa", - "weight": 259, + "weight": 256, "cookies": false, "type": "", "demo": "account\/update-mfa-recovery-codes.md", @@ -4051,7 +4051,7 @@ "x-appwrite": { "method": "getBrowser", "group": null, - "weight": 264, + "weight": 261, "cookies": false, "type": "location", "demo": "avatars\/get-browser.md", @@ -4179,7 +4179,7 @@ "x-appwrite": { "method": "getCreditCard", "group": null, - "weight": 263, + "weight": 260, "cookies": false, "type": "location", "demo": "avatars\/get-credit-card.md", @@ -4313,7 +4313,7 @@ "x-appwrite": { "method": "getFavicon", "group": null, - "weight": 267, + "weight": 264, "cookies": false, "type": "location", "demo": "avatars\/get-favicon.md", @@ -4373,7 +4373,7 @@ "x-appwrite": { "method": "getFlag", "group": null, - "weight": 265, + "weight": 262, "cookies": false, "type": "location", "demo": "avatars\/get-flag.md", @@ -4863,7 +4863,7 @@ "x-appwrite": { "method": "getImage", "group": null, - "weight": 266, + "weight": 263, "cookies": false, "type": "location", "demo": "avatars\/get-image.md", @@ -4947,7 +4947,7 @@ "x-appwrite": { "method": "getInitials", "group": null, - "weight": 269, + "weight": 266, "cookies": false, "type": "location", "demo": "avatars\/get-initials.md", @@ -5041,7 +5041,7 @@ "x-appwrite": { "method": "getQR", "group": null, - "weight": 268, + "weight": 265, "cookies": false, "type": "location", "demo": "avatars\/get-qr.md", @@ -5135,7 +5135,7 @@ "x-appwrite": { "method": "getScreenshot", "group": null, - "weight": 270, + "weight": 267, "cookies": false, "type": "location", "demo": "avatars\/get-screenshot.md", @@ -5888,7 +5888,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 346, + "weight": 343, "cookies": false, "type": "", "demo": "databases\/list-transactions.md", @@ -5955,7 +5955,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 342, + "weight": 339, "cookies": false, "type": "", "demo": "databases\/create-transaction.md", @@ -6026,7 +6026,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 343, + "weight": 340, "cookies": false, "type": "", "demo": "databases\/get-transaction.md", @@ -6090,7 +6090,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 344, + "weight": 341, "cookies": false, "type": "", "demo": "databases\/update-transaction.md", @@ -6168,7 +6168,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 345, + "weight": 342, "cookies": false, "type": "", "demo": "databases\/delete-transaction.md", @@ -6234,7 +6234,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 347, + "weight": 344, "cookies": false, "type": "", "demo": "databases\/create-operations.md", @@ -6319,7 +6319,7 @@ "x-appwrite": { "method": "listDocuments", "group": "documents", - "weight": 297, + "weight": 294, "cookies": false, "type": "", "demo": "databases\/list-documents.md", @@ -6431,7 +6431,7 @@ "x-appwrite": { "method": "createDocument", "group": "documents", - "weight": 289, + "weight": 286, "cookies": false, "type": "", "demo": "databases\/create-document.md", @@ -6592,7 +6592,7 @@ "x-appwrite": { "method": "getDocument", "group": "documents", - "weight": 290, + "weight": 287, "cookies": false, "type": "", "demo": "databases\/get-document.md", @@ -6703,7 +6703,7 @@ "x-appwrite": { "method": "upsertDocument", "group": "documents", - "weight": 293, + "weight": 290, "cookies": false, "type": "", "demo": "databases\/upsert-document.md", @@ -6858,7 +6858,7 @@ "x-appwrite": { "method": "updateDocument", "group": "documents", - "weight": 291, + "weight": 288, "cookies": false, "type": "", "demo": "databases\/update-document.md", @@ -6970,7 +6970,7 @@ "x-appwrite": { "method": "deleteDocument", "group": "documents", - "weight": 295, + "weight": 292, "cookies": false, "type": "", "demo": "databases\/delete-document.md", @@ -7077,7 +7077,7 @@ "x-appwrite": { "method": "decrementDocumentAttribute", "group": "documents", - "weight": 300, + "weight": 297, "cookies": false, "type": "", "demo": "databases\/decrement-document-attribute.md", @@ -7206,7 +7206,7 @@ "x-appwrite": { "method": "incrementDocumentAttribute", "group": "documents", - "weight": 299, + "weight": 296, "cookies": false, "type": "", "demo": "databases\/increment-document-attribute.md", @@ -7335,7 +7335,7 @@ "x-appwrite": { "method": "listExecutions", "group": "executions", - "weight": 447, + "weight": 444, "cookies": false, "type": "", "demo": "functions\/list-executions.md", @@ -7422,7 +7422,7 @@ "x-appwrite": { "method": "createExecution", "group": "executions", - "weight": 445, + "weight": 442, "cookies": false, "type": "", "demo": "functions\/create-execution.md", @@ -7540,7 +7540,7 @@ "x-appwrite": { "method": "getExecution", "group": "executions", - "weight": 446, + "weight": 443, "cookies": false, "type": "", "demo": "functions\/get-execution.md", @@ -7615,7 +7615,7 @@ "x-appwrite": { "method": "query", "group": "graphql", - "weight": 190, + "weight": 187, "cookies": false, "type": "graphql", "demo": "graphql\/query.md", @@ -7669,7 +7669,7 @@ "x-appwrite": { "method": "mutation", "group": "graphql", - "weight": 189, + "weight": 186, "cookies": false, "type": "graphql", "demo": "graphql\/mutation.md", @@ -8155,7 +8155,7 @@ "x-appwrite": { "method": "createSubscriber", "group": "subscribers", - "weight": 237, + "weight": 234, "cookies": false, "type": "", "demo": "messaging\/create-subscriber.md", @@ -8239,7 +8239,7 @@ "x-appwrite": { "method": "deleteSubscriber", "group": "subscribers", - "weight": 241, + "weight": 238, "cookies": false, "type": "", "demo": "messaging\/delete-subscriber.md", @@ -8315,7 +8315,7 @@ "x-appwrite": { "method": "listFiles", "group": "files", - "weight": 543, + "weight": 540, "cookies": false, "type": "", "demo": "storage\/list-files.md", @@ -8414,7 +8414,7 @@ "x-appwrite": { "method": "createFile", "group": "files", - "weight": 541, + "weight": 538, "cookies": false, "type": "upload", "demo": "storage\/create-file.md", @@ -8516,7 +8516,7 @@ "x-appwrite": { "method": "getFile", "group": "files", - "weight": 542, + "weight": 539, "cookies": false, "type": "", "demo": "storage\/get-file.md", @@ -8590,7 +8590,7 @@ "x-appwrite": { "method": "updateFile", "group": "files", - "weight": 544, + "weight": 541, "cookies": false, "type": "", "demo": "storage\/update-file.md", @@ -8682,7 +8682,7 @@ "x-appwrite": { "method": "deleteFile", "group": "files", - "weight": 545, + "weight": 542, "cookies": false, "type": "", "demo": "storage\/delete-file.md", @@ -8751,7 +8751,7 @@ "x-appwrite": { "method": "getFileDownload", "group": "files", - "weight": 547, + "weight": 544, "cookies": false, "type": "location", "demo": "storage\/get-file-download.md", @@ -8831,7 +8831,7 @@ "x-appwrite": { "method": "getFilePreview", "group": "files", - "weight": 546, + "weight": 543, "cookies": false, "type": "location", "demo": "storage\/get-file-preview.md", @@ -9061,7 +9061,7 @@ "x-appwrite": { "method": "getFileView", "group": "files", - "weight": 548, + "weight": 545, "cookies": false, "type": "location", "demo": "storage\/get-file-view.md", @@ -9148,7 +9148,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 419, + "weight": 416, "cookies": false, "type": "", "demo": "tablesdb\/list-transactions.md", @@ -9218,7 +9218,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 415, + "weight": 412, "cookies": false, "type": "", "demo": "tablesdb\/create-transaction.md", @@ -9292,7 +9292,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 416, + "weight": 413, "cookies": false, "type": "", "demo": "tablesdb\/get-transaction.md", @@ -9359,7 +9359,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 417, + "weight": 414, "cookies": false, "type": "", "demo": "tablesdb\/update-transaction.md", @@ -9440,7 +9440,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 418, + "weight": 415, "cookies": false, "type": "", "demo": "tablesdb\/delete-transaction.md", @@ -9509,7 +9509,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 420, + "weight": 417, "cookies": false, "type": "", "demo": "tablesdb\/create-operations.md", @@ -9597,7 +9597,7 @@ "x-appwrite": { "method": "listRows", "group": "rows", - "weight": 411, + "weight": 408, "cookies": false, "type": "", "demo": "tablesdb\/list-rows.md", @@ -9708,7 +9708,7 @@ "x-appwrite": { "method": "createRow", "group": "rows", - "weight": 403, + "weight": 400, "cookies": false, "type": "", "demo": "tablesdb\/create-row.md", @@ -9864,7 +9864,7 @@ "x-appwrite": { "method": "getRow", "group": "rows", - "weight": 404, + "weight": 401, "cookies": false, "type": "", "demo": "tablesdb\/get-row.md", @@ -9974,7 +9974,7 @@ "x-appwrite": { "method": "upsertRow", "group": "rows", - "weight": 407, + "weight": 404, "cookies": false, "type": "", "demo": "tablesdb\/upsert-row.md", @@ -10124,7 +10124,7 @@ "x-appwrite": { "method": "updateRow", "group": "rows", - "weight": 405, + "weight": 402, "cookies": false, "type": "", "demo": "tablesdb\/update-row.md", @@ -10235,7 +10235,7 @@ "x-appwrite": { "method": "deleteRow", "group": "rows", - "weight": 409, + "weight": 406, "cookies": false, "type": "", "demo": "tablesdb\/delete-row.md", @@ -10341,7 +10341,7 @@ "x-appwrite": { "method": "decrementRowColumn", "group": "rows", - "weight": 414, + "weight": 411, "cookies": false, "type": "", "demo": "tablesdb\/decrement-row-column.md", @@ -10469,7 +10469,7 @@ "x-appwrite": { "method": "incrementRowColumn", "group": "rows", - "weight": 413, + "weight": 410, "cookies": false, "type": "", "demo": "tablesdb\/increment-row-column.md", diff --git a/app/config/specs/open-api3-1.8.x-console.json b/app/config/specs/open-api3-1.8.x-console.json index d82b0f6cb9..e494529d75 100644 --- a/app/config/specs/open-api3-1.8.x-console.json +++ b/app/config/specs/open-api3-1.8.x-console.json @@ -588,7 +588,7 @@ "x-appwrite": { "method": "updateMFA", "group": "mfa", - "weight": 253, + "weight": 250, "cookies": false, "type": "", "demo": "account\/update-mfa.md", @@ -659,7 +659,7 @@ "x-appwrite": { "method": "createMfaAuthenticator", "group": "mfa", - "weight": 255, + "weight": 252, "cookies": false, "type": "", "demo": "account\/create-mfa-authenticator.md", @@ -782,7 +782,7 @@ "x-appwrite": { "method": "updateMfaAuthenticator", "group": "mfa", - "weight": 256, + "weight": 253, "cookies": false, "type": "", "demo": "account\/update-mfa-authenticator.md", @@ -921,7 +921,7 @@ "x-appwrite": { "method": "deleteMfaAuthenticator", "group": "mfa", - "weight": 257, + "weight": 254, "cookies": false, "type": "", "demo": "account\/delete-mfa-authenticator.md", @@ -1044,7 +1044,7 @@ "x-appwrite": { "method": "createMfaChallenge", "group": "mfa", - "weight": 261, + "weight": 258, "cookies": false, "type": "", "demo": "account\/create-mfa-challenge.md", @@ -1177,7 +1177,7 @@ "x-appwrite": { "method": "updateMfaChallenge", "group": "mfa", - "weight": 262, + "weight": 259, "cookies": false, "type": "", "demo": "account\/update-mfa-challenge.md", @@ -1314,7 +1314,7 @@ "x-appwrite": { "method": "listMfaFactors", "group": "mfa", - "weight": 254, + "weight": 251, "cookies": false, "type": "", "demo": "account\/list-mfa-factors.md", @@ -1414,7 +1414,7 @@ "x-appwrite": { "method": "getMfaRecoveryCodes", "group": "mfa", - "weight": 260, + "weight": 257, "cookies": false, "type": "", "demo": "account\/get-mfa-recovery-codes.md", @@ -1512,7 +1512,7 @@ "x-appwrite": { "method": "createMfaRecoveryCodes", "group": "mfa", - "weight": 258, + "weight": 255, "cookies": false, "type": "", "demo": "account\/create-mfa-recovery-codes.md", @@ -1610,7 +1610,7 @@ "x-appwrite": { "method": "updateMfaRecoveryCodes", "group": "mfa", - "weight": 259, + "weight": 256, "cookies": false, "type": "", "demo": "account\/update-mfa-recovery-codes.md", @@ -4044,7 +4044,7 @@ "x-appwrite": { "method": "getBrowser", "group": null, - "weight": 264, + "weight": 261, "cookies": false, "type": "location", "demo": "avatars\/get-browser.md", @@ -4172,7 +4172,7 @@ "x-appwrite": { "method": "getCreditCard", "group": null, - "weight": 263, + "weight": 260, "cookies": false, "type": "location", "demo": "avatars\/get-credit-card.md", @@ -4306,7 +4306,7 @@ "x-appwrite": { "method": "getFavicon", "group": null, - "weight": 267, + "weight": 264, "cookies": false, "type": "location", "demo": "avatars\/get-favicon.md", @@ -4366,7 +4366,7 @@ "x-appwrite": { "method": "getFlag", "group": null, - "weight": 265, + "weight": 262, "cookies": false, "type": "location", "demo": "avatars\/get-flag.md", @@ -4856,7 +4856,7 @@ "x-appwrite": { "method": "getImage", "group": null, - "weight": 266, + "weight": 263, "cookies": false, "type": "location", "demo": "avatars\/get-image.md", @@ -4940,7 +4940,7 @@ "x-appwrite": { "method": "getInitials", "group": null, - "weight": 269, + "weight": 266, "cookies": false, "type": "location", "demo": "avatars\/get-initials.md", @@ -5034,7 +5034,7 @@ "x-appwrite": { "method": "getQR", "group": null, - "weight": 268, + "weight": 265, "cookies": false, "type": "location", "demo": "avatars\/get-qr.md", @@ -5128,7 +5128,7 @@ "x-appwrite": { "method": "getScreenshot", "group": null, - "weight": 270, + "weight": 267, "cookies": false, "type": "location", "demo": "avatars\/get-screenshot.md", @@ -5874,7 +5874,7 @@ "x-appwrite": { "method": "chat", "group": "console", - "weight": 513, + "weight": 510, "cookies": false, "type": "", "demo": "assistant\/chat.md", @@ -5935,7 +5935,7 @@ "x-appwrite": { "method": "getResource", "group": null, - "weight": 514, + "weight": 511, "cookies": false, "type": "", "demo": "console\/get-resource.md", @@ -6010,7 +6010,7 @@ "x-appwrite": { "method": "variables", "group": "console", - "weight": 512, + "weight": 509, "cookies": false, "type": "", "demo": "console\/variables.md", @@ -6059,7 +6059,7 @@ "x-appwrite": { "method": "list", "group": "databases", - "weight": 278, + "weight": 275, "cookies": false, "type": "", "demo": "databases\/list.md", @@ -6178,7 +6178,7 @@ "x-appwrite": { "method": "create", "group": "databases", - "weight": 274, + "weight": 271, "cookies": false, "type": "", "demo": "databases\/create.md", @@ -6295,7 +6295,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 346, + "weight": 343, "cookies": false, "type": "", "demo": "databases\/list-transactions.md", @@ -6362,7 +6362,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 342, + "weight": 339, "cookies": false, "type": "", "demo": "databases\/create-transaction.md", @@ -6433,7 +6433,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 343, + "weight": 340, "cookies": false, "type": "", "demo": "databases\/get-transaction.md", @@ -6497,7 +6497,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 344, + "weight": 341, "cookies": false, "type": "", "demo": "databases\/update-transaction.md", @@ -6575,7 +6575,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 345, + "weight": 342, "cookies": false, "type": "", "demo": "databases\/delete-transaction.md", @@ -6641,7 +6641,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 347, + "weight": 344, "cookies": false, "type": "", "demo": "databases\/create-operations.md", @@ -6726,7 +6726,7 @@ "x-appwrite": { "method": "listUsage", "group": null, - "weight": 281, + "weight": 278, "cookies": false, "type": "", "demo": "databases\/list-usage.md", @@ -6830,7 +6830,7 @@ "x-appwrite": { "method": "get", "group": "databases", - "weight": 275, + "weight": 272, "cookies": false, "type": "", "demo": "databases\/get.md", @@ -6924,7 +6924,7 @@ "x-appwrite": { "method": "update", "group": "databases", - "weight": 276, + "weight": 273, "cookies": false, "type": "", "demo": "databases\/update.md", @@ -7034,7 +7034,7 @@ "x-appwrite": { "method": "delete", "group": "databases", - "weight": 277, + "weight": 274, "cookies": false, "type": "", "demo": "databases\/delete.md", @@ -7129,7 +7129,7 @@ "x-appwrite": { "method": "listCollections", "group": "collections", - "weight": 286, + "weight": 283, "cookies": false, "type": "", "demo": "databases\/list-collections.md", @@ -7229,7 +7229,7 @@ "x-appwrite": { "method": "createCollection", "group": "collections", - "weight": 282, + "weight": 279, "cookies": false, "type": "", "demo": "databases\/create-collection.md", @@ -7356,7 +7356,7 @@ "x-appwrite": { "method": "getCollection", "group": "collections", - "weight": 283, + "weight": 280, "cookies": false, "type": "", "demo": "databases\/get-collection.md", @@ -7431,7 +7431,7 @@ "x-appwrite": { "method": "updateCollection", "group": "collections", - "weight": 284, + "weight": 281, "cookies": false, "type": "", "demo": "databases\/update-collection.md", @@ -7534,7 +7534,7 @@ "x-appwrite": { "method": "deleteCollection", "group": "collections", - "weight": 285, + "weight": 282, "cookies": false, "type": "", "demo": "databases\/delete-collection.md", @@ -7611,7 +7611,7 @@ "x-appwrite": { "method": "listAttributes", "group": "attributes", - "weight": 303, + "weight": 300, "cookies": false, "type": "", "demo": "databases\/list-attributes.md", @@ -7712,7 +7712,7 @@ "x-appwrite": { "method": "createBooleanAttribute", "group": "attributes", - "weight": 304, + "weight": 301, "cookies": false, "type": "", "demo": "databases\/create-boolean-attribute.md", @@ -7825,7 +7825,7 @@ "x-appwrite": { "method": "updateBooleanAttribute", "group": "attributes", - "weight": 305, + "weight": 302, "cookies": false, "type": "", "demo": "databases\/update-boolean-attribute.md", @@ -7943,7 +7943,7 @@ "x-appwrite": { "method": "createDatetimeAttribute", "group": "attributes", - "weight": 306, + "weight": 303, "cookies": false, "type": "", "demo": "databases\/create-datetime-attribute.md", @@ -8056,7 +8056,7 @@ "x-appwrite": { "method": "updateDatetimeAttribute", "group": "attributes", - "weight": 307, + "weight": 304, "cookies": false, "type": "", "demo": "databases\/update-datetime-attribute.md", @@ -8174,7 +8174,7 @@ "x-appwrite": { "method": "createEmailAttribute", "group": "attributes", - "weight": 308, + "weight": 305, "cookies": false, "type": "", "demo": "databases\/create-email-attribute.md", @@ -8288,7 +8288,7 @@ "x-appwrite": { "method": "updateEmailAttribute", "group": "attributes", - "weight": 309, + "weight": 306, "cookies": false, "type": "", "demo": "databases\/update-email-attribute.md", @@ -8407,7 +8407,7 @@ "x-appwrite": { "method": "createEnumAttribute", "group": "attributes", - "weight": 310, + "weight": 307, "cookies": false, "type": "", "demo": "databases\/create-enum-attribute.md", @@ -8529,7 +8529,7 @@ "x-appwrite": { "method": "updateEnumAttribute", "group": "attributes", - "weight": 311, + "weight": 308, "cookies": false, "type": "", "demo": "databases\/update-enum-attribute.md", @@ -8656,7 +8656,7 @@ "x-appwrite": { "method": "createFloatAttribute", "group": "attributes", - "weight": 312, + "weight": 309, "cookies": false, "type": "", "demo": "databases\/create-float-attribute.md", @@ -8784,7 +8784,7 @@ "x-appwrite": { "method": "updateFloatAttribute", "group": "attributes", - "weight": 313, + "weight": 310, "cookies": false, "type": "", "demo": "databases\/update-float-attribute.md", @@ -8917,7 +8917,7 @@ "x-appwrite": { "method": "createIntegerAttribute", "group": "attributes", - "weight": 314, + "weight": 311, "cookies": false, "type": "", "demo": "databases\/create-integer-attribute.md", @@ -9045,7 +9045,7 @@ "x-appwrite": { "method": "updateIntegerAttribute", "group": "attributes", - "weight": 315, + "weight": 312, "cookies": false, "type": "", "demo": "databases\/update-integer-attribute.md", @@ -9178,7 +9178,7 @@ "x-appwrite": { "method": "createIpAttribute", "group": "attributes", - "weight": 316, + "weight": 313, "cookies": false, "type": "", "demo": "databases\/create-ip-attribute.md", @@ -9291,7 +9291,7 @@ "x-appwrite": { "method": "updateIpAttribute", "group": "attributes", - "weight": 317, + "weight": 314, "cookies": false, "type": "", "demo": "databases\/update-ip-attribute.md", @@ -9409,7 +9409,7 @@ "x-appwrite": { "method": "createLineAttribute", "group": "attributes", - "weight": 318, + "weight": 315, "cookies": false, "type": "", "demo": "databases\/create-line-attribute.md", @@ -9524,7 +9524,7 @@ "x-appwrite": { "method": "updateLineAttribute", "group": "attributes", - "weight": 319, + "weight": 316, "cookies": false, "type": "", "demo": "databases\/update-line-attribute.md", @@ -9648,7 +9648,7 @@ "x-appwrite": { "method": "createLongtextAttribute", "group": "attributes", - "weight": 336, + "weight": 333, "cookies": false, "type": "", "demo": "databases\/create-longtext-attribute.md", @@ -9757,7 +9757,7 @@ "x-appwrite": { "method": "updateLongtextAttribute", "group": "attributes", - "weight": 337, + "weight": 334, "cookies": false, "type": "", "demo": "databases\/update-longtext-attribute.md", @@ -9871,7 +9871,7 @@ "x-appwrite": { "method": "createMediumtextAttribute", "group": "attributes", - "weight": 334, + "weight": 331, "cookies": false, "type": "", "demo": "databases\/create-mediumtext-attribute.md", @@ -9980,7 +9980,7 @@ "x-appwrite": { "method": "updateMediumtextAttribute", "group": "attributes", - "weight": 335, + "weight": 332, "cookies": false, "type": "", "demo": "databases\/update-mediumtext-attribute.md", @@ -10094,7 +10094,7 @@ "x-appwrite": { "method": "createPointAttribute", "group": "attributes", - "weight": 320, + "weight": 317, "cookies": false, "type": "", "demo": "databases\/create-point-attribute.md", @@ -10209,7 +10209,7 @@ "x-appwrite": { "method": "updatePointAttribute", "group": "attributes", - "weight": 321, + "weight": 318, "cookies": false, "type": "", "demo": "databases\/update-point-attribute.md", @@ -10333,7 +10333,7 @@ "x-appwrite": { "method": "createPolygonAttribute", "group": "attributes", - "weight": 322, + "weight": 319, "cookies": false, "type": "", "demo": "databases\/create-polygon-attribute.md", @@ -10448,7 +10448,7 @@ "x-appwrite": { "method": "updatePolygonAttribute", "group": "attributes", - "weight": 323, + "weight": 320, "cookies": false, "type": "", "demo": "databases\/update-polygon-attribute.md", @@ -10572,7 +10572,7 @@ "x-appwrite": { "method": "createRelationshipAttribute", "group": "attributes", - "weight": 324, + "weight": 321, "cookies": false, "type": "", "demo": "databases\/create-relationship-attribute.md", @@ -10711,7 +10711,7 @@ "x-appwrite": { "method": "createStringAttribute", "group": "attributes", - "weight": 326, + "weight": 323, "cookies": false, "type": "", "demo": "databases\/create-string-attribute.md", @@ -10836,7 +10836,7 @@ "x-appwrite": { "method": "updateStringAttribute", "group": "attributes", - "weight": 327, + "weight": 324, "cookies": false, "type": "", "demo": "databases\/update-string-attribute.md", @@ -10961,7 +10961,7 @@ "x-appwrite": { "method": "createTextAttribute", "group": "attributes", - "weight": 332, + "weight": 329, "cookies": false, "type": "", "demo": "databases\/create-text-attribute.md", @@ -11070,7 +11070,7 @@ "x-appwrite": { "method": "updateTextAttribute", "group": "attributes", - "weight": 333, + "weight": 330, "cookies": false, "type": "", "demo": "databases\/update-text-attribute.md", @@ -11184,7 +11184,7 @@ "x-appwrite": { "method": "createUrlAttribute", "group": "attributes", - "weight": 328, + "weight": 325, "cookies": false, "type": "", "demo": "databases\/create-url-attribute.md", @@ -11298,7 +11298,7 @@ "x-appwrite": { "method": "updateUrlAttribute", "group": "attributes", - "weight": 329, + "weight": 326, "cookies": false, "type": "", "demo": "databases\/update-url-attribute.md", @@ -11417,7 +11417,7 @@ "x-appwrite": { "method": "createVarcharAttribute", "group": "attributes", - "weight": 330, + "weight": 327, "cookies": false, "type": "", "demo": "databases\/create-varchar-attribute.md", @@ -11533,7 +11533,7 @@ "x-appwrite": { "method": "updateVarcharAttribute", "group": "attributes", - "weight": 331, + "weight": 328, "cookies": false, "type": "", "demo": "databases\/update-varchar-attribute.md", @@ -11685,7 +11685,7 @@ "x-appwrite": { "method": "getAttribute", "group": "attributes", - "weight": 301, + "weight": 298, "cookies": false, "type": "", "demo": "databases\/get-attribute.md", @@ -11762,7 +11762,7 @@ "x-appwrite": { "method": "deleteAttribute", "group": "attributes", - "weight": 302, + "weight": 299, "cookies": false, "type": "", "demo": "databases\/delete-attribute.md", @@ -11848,7 +11848,7 @@ "x-appwrite": { "method": "updateRelationshipAttribute", "group": "attributes", - "weight": 325, + "weight": 322, "cookies": false, "type": "", "demo": "databases\/update-relationship-attribute.md", @@ -11964,7 +11964,7 @@ "x-appwrite": { "method": "listDocuments", "group": "documents", - "weight": 297, + "weight": 294, "cookies": false, "type": "", "demo": "databases\/list-documents.md", @@ -12076,7 +12076,7 @@ "x-appwrite": { "method": "createDocument", "group": "documents", - "weight": 289, + "weight": 286, "cookies": false, "type": "", "demo": "databases\/create-document.md", @@ -12267,7 +12267,7 @@ "x-appwrite": { "method": "upsertDocuments", "group": "documents", - "weight": 294, + "weight": 291, "cookies": false, "type": "", "demo": "databases\/upsert-documents.md", @@ -12404,7 +12404,7 @@ "x-appwrite": { "method": "updateDocuments", "group": "documents", - "weight": 292, + "weight": 289, "cookies": false, "type": "", "demo": "databases\/update-documents.md", @@ -12509,7 +12509,7 @@ "x-appwrite": { "method": "deleteDocuments", "group": "documents", - "weight": 296, + "weight": 293, "cookies": false, "type": "", "demo": "databases\/delete-documents.md", @@ -12611,7 +12611,7 @@ "x-appwrite": { "method": "getDocument", "group": "documents", - "weight": 290, + "weight": 287, "cookies": false, "type": "", "demo": "databases\/get-document.md", @@ -12722,7 +12722,7 @@ "x-appwrite": { "method": "upsertDocument", "group": "documents", - "weight": 293, + "weight": 290, "cookies": false, "type": "", "demo": "databases\/upsert-document.md", @@ -12877,7 +12877,7 @@ "x-appwrite": { "method": "updateDocument", "group": "documents", - "weight": 291, + "weight": 288, "cookies": false, "type": "", "demo": "databases\/update-document.md", @@ -12989,7 +12989,7 @@ "x-appwrite": { "method": "deleteDocument", "group": "documents", - "weight": 295, + "weight": 292, "cookies": false, "type": "", "demo": "databases\/delete-document.md", @@ -13096,7 +13096,7 @@ "x-appwrite": { "method": "listDocumentLogs", "group": "logs", - "weight": 298, + "weight": 295, "cookies": false, "type": "", "demo": "databases\/list-document-logs.md", @@ -13194,7 +13194,7 @@ "x-appwrite": { "method": "decrementDocumentAttribute", "group": "documents", - "weight": 300, + "weight": 297, "cookies": false, "type": "", "demo": "databases\/decrement-document-attribute.md", @@ -13323,7 +13323,7 @@ "x-appwrite": { "method": "incrementDocumentAttribute", "group": "documents", - "weight": 299, + "weight": 296, "cookies": false, "type": "", "demo": "databases\/increment-document-attribute.md", @@ -13452,7 +13452,7 @@ "x-appwrite": { "method": "listIndexes", "group": "indexes", - "weight": 341, + "weight": 338, "cookies": false, "type": "", "demo": "databases\/list-indexes.md", @@ -13551,7 +13551,7 @@ "x-appwrite": { "method": "createIndex", "group": "indexes", - "weight": 338, + "weight": 335, "cookies": false, "type": "", "demo": "databases\/create-index.md", @@ -13692,7 +13692,7 @@ "x-appwrite": { "method": "getIndex", "group": "indexes", - "weight": 339, + "weight": 336, "cookies": false, "type": "", "demo": "databases\/get-index.md", @@ -13769,7 +13769,7 @@ "x-appwrite": { "method": "deleteIndex", "group": "indexes", - "weight": 340, + "weight": 337, "cookies": false, "type": "", "demo": "databases\/delete-index.md", @@ -13855,7 +13855,7 @@ "x-appwrite": { "method": "listCollectionLogs", "group": "collections", - "weight": 287, + "weight": 284, "cookies": false, "type": "", "demo": "databases\/list-collection-logs.md", @@ -13943,7 +13943,7 @@ "x-appwrite": { "method": "getCollectionUsage", "group": null, - "weight": 288, + "weight": 285, "cookies": false, "type": "", "demo": "databases\/get-collection-usage.md", @@ -14040,7 +14040,7 @@ "x-appwrite": { "method": "listLogs", "group": "logs", - "weight": 279, + "weight": 276, "cookies": false, "type": "", "demo": "databases\/list-logs.md", @@ -14148,7 +14148,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 280, + "weight": 277, "cookies": false, "type": "", "demo": "databases\/get-usage.md", @@ -14265,7 +14265,7 @@ "x-appwrite": { "method": "list", "group": "functions", - "weight": 431, + "weight": 428, "cookies": false, "type": "", "demo": "functions\/list.md", @@ -14350,7 +14350,7 @@ "x-appwrite": { "method": "create", "group": "functions", - "weight": 428, + "weight": 425, "cookies": false, "type": "", "demo": "functions\/create.md", @@ -14646,7 +14646,7 @@ "x-appwrite": { "method": "listRuntimes", "group": "runtimes", - "weight": 433, + "weight": 430, "cookies": false, "type": "", "demo": "functions\/list-runtimes.md", @@ -14696,7 +14696,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "runtimes", - "weight": 434, + "weight": 431, "cookies": false, "type": "", "demo": "functions\/list-specifications.md", @@ -14746,7 +14746,7 @@ "x-appwrite": { "method": "listTemplates", "group": "templates", - "weight": 457, + "weight": 454, "cookies": false, "type": "", "demo": "functions\/list-templates.md", @@ -14939,7 +14939,7 @@ "x-appwrite": { "method": "getTemplate", "group": "templates", - "weight": 456, + "weight": 453, "cookies": false, "type": "", "demo": "functions\/get-template.md", @@ -14999,7 +14999,7 @@ "x-appwrite": { "method": "listUsage", "group": null, - "weight": 450, + "weight": 447, "cookies": false, "type": "", "demo": "functions\/list-usage.md", @@ -15071,7 +15071,7 @@ "x-appwrite": { "method": "get", "group": "functions", - "weight": 429, + "weight": 426, "cookies": false, "type": "", "demo": "functions\/get.md", @@ -15131,7 +15131,7 @@ "x-appwrite": { "method": "update", "group": "functions", - "weight": 430, + "weight": 427, "cookies": false, "type": "", "demo": "functions\/update.md", @@ -15424,7 +15424,7 @@ "x-appwrite": { "method": "delete", "group": "functions", - "weight": 432, + "weight": 429, "cookies": false, "type": "", "demo": "functions\/delete.md", @@ -15486,7 +15486,7 @@ "x-appwrite": { "method": "updateFunctionDeployment", "group": "functions", - "weight": 437, + "weight": 434, "cookies": false, "type": "", "demo": "functions\/update-function-deployment.md", @@ -15567,7 +15567,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 438, + "weight": 435, "cookies": false, "type": "", "demo": "functions\/list-deployments.md", @@ -15662,7 +15662,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 435, + "weight": 432, "cookies": false, "type": "upload", "demo": "functions\/create-deployment.md", @@ -15762,7 +15762,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 443, + "weight": 440, "cookies": false, "type": "", "demo": "functions\/create-duplicate-deployment.md", @@ -15848,7 +15848,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 440, + "weight": 437, "cookies": false, "type": "", "demo": "functions\/create-template-deployment.md", @@ -15965,7 +15965,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 441, + "weight": 438, "cookies": false, "type": "", "demo": "functions\/create-vcs-deployment.md", @@ -16063,7 +16063,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 436, + "weight": 433, "cookies": false, "type": "", "demo": "functions\/get-deployment.md", @@ -16126,7 +16126,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 439, + "weight": 436, "cookies": false, "type": "", "demo": "functions\/delete-deployment.md", @@ -16191,7 +16191,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 442, + "weight": 439, "cookies": false, "type": "location", "demo": "functions\/get-deployment-download.md", @@ -16282,7 +16282,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 444, + "weight": 441, "cookies": false, "type": "", "demo": "functions\/update-deployment-status.md", @@ -16354,7 +16354,7 @@ "x-appwrite": { "method": "listExecutions", "group": "executions", - "weight": 447, + "weight": 444, "cookies": false, "type": "", "demo": "functions\/list-executions.md", @@ -16441,7 +16441,7 @@ "x-appwrite": { "method": "createExecution", "group": "executions", - "weight": 445, + "weight": 442, "cookies": false, "type": "", "demo": "functions\/create-execution.md", @@ -16559,7 +16559,7 @@ "x-appwrite": { "method": "getExecution", "group": "executions", - "weight": 446, + "weight": 443, "cookies": false, "type": "", "demo": "functions\/get-execution.md", @@ -16625,7 +16625,7 @@ "x-appwrite": { "method": "deleteExecution", "group": "executions", - "weight": 448, + "weight": 445, "cookies": false, "type": "", "demo": "functions\/delete-execution.md", @@ -16697,7 +16697,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 449, + "weight": 446, "cookies": false, "type": "", "demo": "functions\/get-usage.md", @@ -16779,7 +16779,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 453, + "weight": 450, "cookies": false, "type": "", "demo": "functions\/list-variables.md", @@ -16839,7 +16839,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 451, + "weight": 448, "cookies": false, "type": "", "demo": "functions\/create-variable.md", @@ -16931,7 +16931,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 452, + "weight": 449, "cookies": false, "type": "", "demo": "functions\/get-variable.md", @@ -17001,7 +17001,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 454, + "weight": 451, "cookies": false, "type": "", "demo": "functions\/update-variable.md", @@ -17095,7 +17095,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 455, + "weight": 452, "cookies": false, "type": "", "demo": "functions\/delete-variable.md", @@ -17167,7 +17167,7 @@ "x-appwrite": { "method": "query", "group": "graphql", - "weight": 190, + "weight": 187, "cookies": false, "type": "graphql", "demo": "graphql\/query.md", @@ -17221,7 +17221,7 @@ "x-appwrite": { "method": "mutation", "group": "graphql", - "weight": 189, + "weight": 186, "cookies": false, "type": "graphql", "demo": "graphql\/mutation.md", @@ -17275,7 +17275,7 @@ "x-appwrite": { "method": "get", "group": "health", - "weight": 458, + "weight": 455, "cookies": false, "type": "", "demo": "health\/get.md", @@ -17326,7 +17326,7 @@ "x-appwrite": { "method": "getAntivirus", "group": "health", - "weight": 467, + "weight": 464, "cookies": false, "type": "", "demo": "health\/get-antivirus.md", @@ -17377,7 +17377,7 @@ "x-appwrite": { "method": "getCache", "group": "health", - "weight": 461, + "weight": 458, "cookies": false, "type": "", "demo": "health\/get-cache.md", @@ -17428,7 +17428,7 @@ "x-appwrite": { "method": "getCertificate", "group": "health", - "weight": 464, + "weight": 461, "cookies": false, "type": "", "demo": "health\/get-certificate.md", @@ -17490,7 +17490,7 @@ "x-appwrite": { "method": "getDB", "group": "health", - "weight": 460, + "weight": 457, "cookies": false, "type": "", "demo": "health\/get-db.md", @@ -17541,7 +17541,7 @@ "x-appwrite": { "method": "getPubSub", "group": "health", - "weight": 462, + "weight": 459, "cookies": false, "type": "", "demo": "health\/get-pub-sub.md", @@ -17592,7 +17592,7 @@ "x-appwrite": { "method": "getQueueAudits", "group": "queue", - "weight": 468, + "weight": 465, "cookies": false, "type": "", "demo": "health\/get-queue-audits.md", @@ -17656,7 +17656,7 @@ "x-appwrite": { "method": "getQueueBuilds", "group": "queue", - "weight": 472, + "weight": 469, "cookies": false, "type": "", "demo": "health\/get-queue-builds.md", @@ -17720,7 +17720,7 @@ "x-appwrite": { "method": "getQueueCertificates", "group": "queue", - "weight": 471, + "weight": 468, "cookies": false, "type": "", "demo": "health\/get-queue-certificates.md", @@ -17784,7 +17784,7 @@ "x-appwrite": { "method": "getQueueDatabases", "group": "queue", - "weight": 473, + "weight": 470, "cookies": false, "type": "", "demo": "health\/get-queue-databases.md", @@ -17859,7 +17859,7 @@ "x-appwrite": { "method": "getQueueDeletes", "group": "queue", - "weight": 474, + "weight": 471, "cookies": false, "type": "", "demo": "health\/get-queue-deletes.md", @@ -17923,7 +17923,7 @@ "x-appwrite": { "method": "getFailedJobs", "group": "queue", - "weight": 481, + "weight": 478, "cookies": false, "type": "", "demo": "health\/get-failed-jobs.md", @@ -18014,7 +18014,7 @@ "x-appwrite": { "method": "getQueueFunctions", "group": "queue", - "weight": 478, + "weight": 475, "cookies": false, "type": "", "demo": "health\/get-queue-functions.md", @@ -18078,7 +18078,7 @@ "x-appwrite": { "method": "getQueueLogs", "group": "queue", - "weight": 470, + "weight": 467, "cookies": false, "type": "", "demo": "health\/get-queue-logs.md", @@ -18142,7 +18142,7 @@ "x-appwrite": { "method": "getQueueMails", "group": "queue", - "weight": 475, + "weight": 472, "cookies": false, "type": "", "demo": "health\/get-queue-mails.md", @@ -18206,7 +18206,7 @@ "x-appwrite": { "method": "getQueueMessaging", "group": "queue", - "weight": 476, + "weight": 473, "cookies": false, "type": "", "demo": "health\/get-queue-messaging.md", @@ -18270,7 +18270,7 @@ "x-appwrite": { "method": "getQueueMigrations", "group": "queue", - "weight": 477, + "weight": 474, "cookies": false, "type": "", "demo": "health\/get-queue-migrations.md", @@ -18334,7 +18334,7 @@ "x-appwrite": { "method": "getQueueStatsResources", "group": "queue", - "weight": 479, + "weight": 476, "cookies": false, "type": "", "demo": "health\/get-queue-stats-resources.md", @@ -18398,7 +18398,7 @@ "x-appwrite": { "method": "getQueueUsage", "group": "queue", - "weight": 480, + "weight": 477, "cookies": false, "type": "", "demo": "health\/get-queue-usage.md", @@ -18462,7 +18462,7 @@ "x-appwrite": { "method": "getQueueWebhooks", "group": "queue", - "weight": 469, + "weight": 466, "cookies": false, "type": "", "demo": "health\/get-queue-webhooks.md", @@ -18526,7 +18526,7 @@ "x-appwrite": { "method": "getStorage", "group": "storage", - "weight": 466, + "weight": 463, "cookies": false, "type": "", "demo": "health\/get-storage.md", @@ -18577,7 +18577,7 @@ "x-appwrite": { "method": "getStorageLocal", "group": "storage", - "weight": 465, + "weight": 462, "cookies": false, "type": "", "demo": "health\/get-storage-local.md", @@ -18628,7 +18628,7 @@ "x-appwrite": { "method": "getTime", "group": "health", - "weight": 463, + "weight": 460, "cookies": false, "type": "", "demo": "health\/get-time.md", @@ -19111,7 +19111,7 @@ "x-appwrite": { "method": "listMessages", "group": "messages", - "weight": 245, + "weight": 242, "cookies": false, "type": "", "demo": "messaging\/list-messages.md", @@ -19199,7 +19199,7 @@ "x-appwrite": { "method": "createEmail", "group": "messages", - "weight": 242, + "weight": 239, "cookies": false, "type": "", "demo": "messaging\/create-email.md", @@ -19345,7 +19345,7 @@ "x-appwrite": { "method": "updateEmail", "group": "messages", - "weight": 249, + "weight": 246, "cookies": false, "type": "", "demo": "messaging\/update-email.md", @@ -19503,7 +19503,7 @@ "x-appwrite": { "method": "createPush", "group": "messages", - "weight": 244, + "weight": 241, "cookies": false, "type": "", "demo": "messaging\/create-push.md", @@ -19681,7 +19681,7 @@ "x-appwrite": { "method": "updatePush", "group": "messages", - "weight": 251, + "weight": 248, "cookies": false, "type": "", "demo": "messaging\/update-push.md", @@ -19879,7 +19879,7 @@ "x-appwrite": { "method": "createSms", "group": "messages", - "weight": 243, + "weight": 240, "cookies": false, "type": "", "demo": "messaging\/create-sms.md", @@ -20060,7 +20060,7 @@ "x-appwrite": { "method": "updateSms", "group": "messages", - "weight": 250, + "weight": 247, "cookies": false, "type": "", "demo": "messaging\/update-sms.md", @@ -20247,7 +20247,7 @@ "x-appwrite": { "method": "getMessage", "group": "messages", - "weight": 248, + "weight": 245, "cookies": false, "type": "", "demo": "messaging\/get-message.md", @@ -20301,7 +20301,7 @@ "x-appwrite": { "method": "delete", "group": "messages", - "weight": 252, + "weight": 249, "cookies": false, "type": "", "demo": "messaging\/delete.md", @@ -20364,7 +20364,7 @@ "x-appwrite": { "method": "listMessageLogs", "group": "logs", - "weight": 246, + "weight": 243, "cookies": false, "type": "", "demo": "messaging\/list-message-logs.md", @@ -20451,7 +20451,7 @@ "x-appwrite": { "method": "listTargets", "group": "messages", - "weight": 247, + "weight": 244, "cookies": false, "type": "", "demo": "messaging\/list-targets.md", @@ -20538,7 +20538,7 @@ "x-appwrite": { "method": "listProviders", "group": "providers", - "weight": 216, + "weight": 213, "cookies": false, "type": "", "demo": "messaging\/list-providers.md", @@ -20626,7 +20626,7 @@ "x-appwrite": { "method": "createApnsProvider", "group": "providers", - "weight": 215, + "weight": 212, "cookies": false, "type": "", "demo": "messaging\/create-apns-provider.md", @@ -20805,7 +20805,7 @@ "x-appwrite": { "method": "updateApnsProvider", "group": "providers", - "weight": 229, + "weight": 226, "cookies": false, "type": "", "demo": "messaging\/update-apns-provider.md", @@ -20986,7 +20986,7 @@ "x-appwrite": { "method": "createFcmProvider", "group": "providers", - "weight": 214, + "weight": 211, "cookies": false, "type": "", "demo": "messaging\/create-fcm-provider.md", @@ -21138,7 +21138,7 @@ "x-appwrite": { "method": "updateFcmProvider", "group": "providers", - "weight": 228, + "weight": 225, "cookies": false, "type": "", "demo": "messaging\/update-fcm-provider.md", @@ -21291,7 +21291,7 @@ "x-appwrite": { "method": "createMailgunProvider", "group": "providers", - "weight": 205, + "weight": 202, "cookies": false, "type": "", "demo": "messaging\/create-mailgun-provider.md", @@ -21411,7 +21411,7 @@ "x-appwrite": { "method": "updateMailgunProvider", "group": "providers", - "weight": 219, + "weight": 216, "cookies": false, "type": "", "demo": "messaging\/update-mailgun-provider.md", @@ -21533,7 +21533,7 @@ "x-appwrite": { "method": "createMsg91Provider", "group": "providers", - "weight": 209, + "weight": 206, "cookies": false, "type": "", "demo": "messaging\/create-msg-91-provider.md", @@ -21630,7 +21630,7 @@ "x-appwrite": { "method": "updateMsg91Provider", "group": "providers", - "weight": 223, + "weight": 220, "cookies": false, "type": "", "demo": "messaging\/update-msg-91-provider.md", @@ -21730,7 +21730,7 @@ "x-appwrite": { "method": "createResendProvider", "group": "providers", - "weight": 207, + "weight": 204, "cookies": false, "type": "", "demo": "messaging\/create-resend-provider.md", @@ -21839,7 +21839,7 @@ "x-appwrite": { "method": "updateResendProvider", "group": "providers", - "weight": 221, + "weight": 218, "cookies": false, "type": "", "demo": "messaging\/update-resend-provider.md", @@ -21950,7 +21950,7 @@ "x-appwrite": { "method": "createSendgridProvider", "group": "providers", - "weight": 206, + "weight": 203, "cookies": false, "type": "", "demo": "messaging\/create-sendgrid-provider.md", @@ -22059,7 +22059,7 @@ "x-appwrite": { "method": "updateSendgridProvider", "group": "providers", - "weight": 220, + "weight": 217, "cookies": false, "type": "", "demo": "messaging\/update-sendgrid-provider.md", @@ -22170,7 +22170,7 @@ "x-appwrite": { "method": "createSmtpProvider", "group": "providers", - "weight": 208, + "weight": 205, "cookies": false, "type": "", "demo": "messaging\/create-smtp-provider.md", @@ -22404,7 +22404,7 @@ "x-appwrite": { "method": "updateSmtpProvider", "group": "providers", - "weight": 222, + "weight": 219, "cookies": false, "type": "", "demo": "messaging\/update-smtp-provider.md", @@ -22637,7 +22637,7 @@ "x-appwrite": { "method": "createTelesignProvider", "group": "providers", - "weight": 210, + "weight": 207, "cookies": false, "type": "", "demo": "messaging\/create-telesign-provider.md", @@ -22735,7 +22735,7 @@ "x-appwrite": { "method": "updateTelesignProvider", "group": "providers", - "weight": 224, + "weight": 221, "cookies": false, "type": "", "demo": "messaging\/update-telesign-provider.md", @@ -22835,7 +22835,7 @@ "x-appwrite": { "method": "createTextmagicProvider", "group": "providers", - "weight": 211, + "weight": 208, "cookies": false, "type": "", "demo": "messaging\/create-textmagic-provider.md", @@ -22933,7 +22933,7 @@ "x-appwrite": { "method": "updateTextmagicProvider", "group": "providers", - "weight": 225, + "weight": 222, "cookies": false, "type": "", "demo": "messaging\/update-textmagic-provider.md", @@ -23033,7 +23033,7 @@ "x-appwrite": { "method": "createTwilioProvider", "group": "providers", - "weight": 212, + "weight": 209, "cookies": false, "type": "", "demo": "messaging\/create-twilio-provider.md", @@ -23131,7 +23131,7 @@ "x-appwrite": { "method": "updateTwilioProvider", "group": "providers", - "weight": 226, + "weight": 223, "cookies": false, "type": "", "demo": "messaging\/update-twilio-provider.md", @@ -23231,7 +23231,7 @@ "x-appwrite": { "method": "createVonageProvider", "group": "providers", - "weight": 213, + "weight": 210, "cookies": false, "type": "", "demo": "messaging\/create-vonage-provider.md", @@ -23329,7 +23329,7 @@ "x-appwrite": { "method": "updateVonageProvider", "group": "providers", - "weight": 227, + "weight": 224, "cookies": false, "type": "", "demo": "messaging\/update-vonage-provider.md", @@ -23429,7 +23429,7 @@ "x-appwrite": { "method": "getProvider", "group": "providers", - "weight": 218, + "weight": 215, "cookies": false, "type": "", "demo": "messaging\/get-provider.md", @@ -23483,7 +23483,7 @@ "x-appwrite": { "method": "deleteProvider", "group": "providers", - "weight": 230, + "weight": 227, "cookies": false, "type": "", "demo": "messaging\/delete-provider.md", @@ -23546,7 +23546,7 @@ "x-appwrite": { "method": "listProviderLogs", "group": "providers", - "weight": 217, + "weight": 214, "cookies": false, "type": "", "demo": "messaging\/list-provider-logs.md", @@ -23633,7 +23633,7 @@ "x-appwrite": { "method": "listSubscriberLogs", "group": "subscribers", - "weight": 239, + "weight": 236, "cookies": false, "type": "", "demo": "messaging\/list-subscriber-logs.md", @@ -23720,7 +23720,7 @@ "x-appwrite": { "method": "listTopics", "group": "topics", - "weight": 232, + "weight": 229, "cookies": false, "type": "", "demo": "messaging\/list-topics.md", @@ -23806,7 +23806,7 @@ "x-appwrite": { "method": "createTopic", "group": "topics", - "weight": 231, + "weight": 228, "cookies": false, "type": "", "demo": "messaging\/create-topic.md", @@ -23890,7 +23890,7 @@ "x-appwrite": { "method": "getTopic", "group": "topics", - "weight": 234, + "weight": 231, "cookies": false, "type": "", "demo": "messaging\/get-topic.md", @@ -23951,7 +23951,7 @@ "x-appwrite": { "method": "updateTopic", "group": "topics", - "weight": 235, + "weight": 232, "cookies": false, "type": "", "demo": "messaging\/update-topic.md", @@ -24031,7 +24031,7 @@ "x-appwrite": { "method": "deleteTopic", "group": "topics", - "weight": 236, + "weight": 233, "cookies": false, "type": "", "demo": "messaging\/delete-topic.md", @@ -24094,7 +24094,7 @@ "x-appwrite": { "method": "listTopicLogs", "group": "topics", - "weight": 233, + "weight": 230, "cookies": false, "type": "", "demo": "messaging\/list-topic-logs.md", @@ -24181,7 +24181,7 @@ "x-appwrite": { "method": "listSubscribers", "group": "subscribers", - "weight": 238, + "weight": 235, "cookies": false, "type": "", "demo": "messaging\/list-subscribers.md", @@ -24277,7 +24277,7 @@ "x-appwrite": { "method": "createSubscriber", "group": "subscribers", - "weight": 237, + "weight": 234, "cookies": false, "type": "", "demo": "messaging\/create-subscriber.md", @@ -24368,7 +24368,7 @@ "x-appwrite": { "method": "getSubscriber", "group": "subscribers", - "weight": 240, + "weight": 237, "cookies": false, "type": "", "demo": "messaging\/get-subscriber.md", @@ -24432,7 +24432,7 @@ "x-appwrite": { "method": "deleteSubscriber", "group": "subscribers", - "weight": 241, + "weight": 238, "cookies": false, "type": "", "demo": "messaging\/delete-subscriber.md", @@ -24508,7 +24508,7 @@ "x-appwrite": { "method": "list", "group": null, - "weight": 197, + "weight": 194, "cookies": false, "type": "", "demo": "migrations\/list.md", @@ -24594,7 +24594,7 @@ "x-appwrite": { "method": "createAppwriteMigration", "group": null, - "weight": 191, + "weight": 188, "cookies": false, "type": "", "demo": "migrations\/create-appwrite-migration.md", @@ -24704,7 +24704,7 @@ "x-appwrite": { "method": "getAppwriteReport", "group": null, - "weight": 199, + "weight": 196, "cookies": false, "type": "", "demo": "migrations\/get-appwrite-report.md", @@ -24818,7 +24818,7 @@ "x-appwrite": { "method": "createCSVExport", "group": null, - "weight": 196, + "weight": 193, "cookies": false, "type": "", "demo": "migrations\/create-csv-export.md", @@ -24933,7 +24933,7 @@ "x-appwrite": { "method": "createCSVImport", "group": null, - "weight": 195, + "weight": 192, "cookies": false, "type": "", "demo": "migrations\/create-csv-import.md", @@ -25018,7 +25018,7 @@ "x-appwrite": { "method": "createFirebaseMigration", "group": null, - "weight": 192, + "weight": 189, "cookies": false, "type": "", "demo": "migrations\/create-firebase-migration.md", @@ -25109,7 +25109,7 @@ "x-appwrite": { "method": "getFirebaseReport", "group": null, - "weight": 200, + "weight": 197, "cookies": false, "type": "", "demo": "migrations\/get-firebase-report.md", @@ -25196,7 +25196,7 @@ "x-appwrite": { "method": "createNHostMigration", "group": null, - "weight": 194, + "weight": 191, "cookies": false, "type": "", "demo": "migrations\/create-n-host-migration.md", @@ -25324,7 +25324,7 @@ "x-appwrite": { "method": "getNHostReport", "group": null, - "weight": 202, + "weight": 199, "cookies": false, "type": "", "demo": "migrations\/get-n-host-report.md", @@ -25473,7 +25473,7 @@ "x-appwrite": { "method": "createSupabaseMigration", "group": null, - "weight": 193, + "weight": 190, "cookies": false, "type": "", "demo": "migrations\/create-supabase-migration.md", @@ -25596,7 +25596,7 @@ "x-appwrite": { "method": "getSupabaseReport", "group": null, - "weight": 201, + "weight": 198, "cookies": false, "type": "", "demo": "migrations\/get-supabase-report.md", @@ -25736,7 +25736,7 @@ "x-appwrite": { "method": "get", "group": null, - "weight": 198, + "weight": 195, "cookies": false, "type": "", "demo": "migrations\/get.md", @@ -25795,7 +25795,7 @@ "x-appwrite": { "method": "retry", "group": null, - "weight": 203, + "weight": 200, "cookies": false, "type": "", "demo": "migrations\/retry.md", @@ -25847,7 +25847,7 @@ "x-appwrite": { "method": "delete", "group": null, - "weight": 204, + "weight": 201, "cookies": false, "type": "", "demo": "migrations\/delete.md", @@ -26326,7 +26326,7 @@ "x-appwrite": { "method": "list", "group": "projects", - "weight": 426, + "weight": 423, "cookies": false, "type": "", "demo": "projects\/list.md", @@ -27999,7 +27999,7 @@ "x-appwrite": { "method": "listDevKeys", "group": "devKeys", - "weight": 424, + "weight": 421, "cookies": false, "type": "", "demo": "projects\/list-dev-keys.md", @@ -28070,7 +28070,7 @@ "x-appwrite": { "method": "createDevKey", "group": "devKeys", - "weight": 421, + "weight": 418, "cookies": false, "type": "", "demo": "projects\/create-dev-key.md", @@ -28155,7 +28155,7 @@ "x-appwrite": { "method": "getDevKey", "group": "devKeys", - "weight": 423, + "weight": 420, "cookies": false, "type": "", "demo": "projects\/get-dev-key.md", @@ -28223,7 +28223,7 @@ "x-appwrite": { "method": "updateDevKey", "group": "devKeys", - "weight": 422, + "weight": 419, "cookies": false, "type": "", "demo": "projects\/update-dev-key.md", @@ -28309,7 +28309,7 @@ "x-appwrite": { "method": "deleteDevKey", "group": "devKeys", - "weight": 425, + "weight": 422, "cookies": false, "type": "", "demo": "projects\/delete-dev-key.md", @@ -29048,7 +29048,7 @@ "x-appwrite": { "method": "updateLabels", "group": "projects", - "weight": 427, + "weight": 424, "cookies": false, "type": "", "demo": "projects\/update-labels.md", @@ -32489,7 +32489,7 @@ "x-appwrite": { "method": "listRules", "group": null, - "weight": 528, + "weight": 525, "cookies": false, "type": "", "demo": "proxy\/list-rules.md", @@ -32574,7 +32574,7 @@ "x-appwrite": { "method": "createAPIRule", "group": null, - "weight": 523, + "weight": 520, "cookies": false, "type": "", "demo": "proxy\/create-api-rule.md", @@ -32641,7 +32641,7 @@ "x-appwrite": { "method": "createFunctionRule", "group": null, - "weight": 525, + "weight": 522, "cookies": false, "type": "", "demo": "proxy\/create-function-rule.md", @@ -32719,7 +32719,7 @@ "x-appwrite": { "method": "createRedirectRule", "group": null, - "weight": 526, + "weight": 523, "cookies": false, "type": "", "demo": "proxy\/create-redirect-rule.md", @@ -32833,7 +32833,7 @@ "x-appwrite": { "method": "createSiteRule", "group": null, - "weight": 524, + "weight": 521, "cookies": false, "type": "", "demo": "proxy\/create-site-rule.md", @@ -32911,7 +32911,7 @@ "x-appwrite": { "method": "getRule", "group": null, - "weight": 527, + "weight": 524, "cookies": false, "type": "", "demo": "proxy\/get-rule.md", @@ -32962,7 +32962,7 @@ "x-appwrite": { "method": "deleteRule", "group": null, - "weight": 529, + "weight": 526, "cookies": false, "type": "", "demo": "proxy\/delete-rule.md", @@ -33022,7 +33022,7 @@ "x-appwrite": { "method": "updateRuleVerification", "group": null, - "weight": 530, + "weight": 527, "cookies": false, "type": "", "demo": "proxy\/update-rule-verification.md", @@ -33082,7 +33082,7 @@ "x-appwrite": { "method": "list", "group": "sites", - "weight": 485, + "weight": 482, "cookies": false, "type": "", "demo": "sites\/list.md", @@ -33167,7 +33167,7 @@ "x-appwrite": { "method": "create", "group": "sites", - "weight": 483, + "weight": 480, "cookies": false, "type": "", "demo": "sites\/create.md", @@ -33421,7 +33421,7 @@ "x-appwrite": { "method": "listFrameworks", "group": "frameworks", - "weight": 488, + "weight": 485, "cookies": false, "type": "", "demo": "sites\/list-frameworks.md", @@ -33471,7 +33471,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "frameworks", - "weight": 511, + "weight": 508, "cookies": false, "type": "", "demo": "sites\/list-specifications.md", @@ -33521,7 +33521,7 @@ "x-appwrite": { "method": "listTemplates", "group": "templates", - "weight": 507, + "weight": 504, "cookies": false, "type": "", "demo": "sites\/list-templates.md", @@ -33653,7 +33653,7 @@ "x-appwrite": { "method": "getTemplate", "group": "templates", - "weight": 508, + "weight": 505, "cookies": false, "type": "", "demo": "sites\/get-template.md", @@ -33713,7 +33713,7 @@ "x-appwrite": { "method": "listUsage", "group": null, - "weight": 509, + "weight": 506, "cookies": false, "type": "", "demo": "sites\/list-usage.md", @@ -33785,7 +33785,7 @@ "x-appwrite": { "method": "get", "group": "sites", - "weight": 484, + "weight": 481, "cookies": false, "type": "", "demo": "sites\/get.md", @@ -33845,7 +33845,7 @@ "x-appwrite": { "method": "update", "group": "sites", - "weight": 486, + "weight": 483, "cookies": false, "type": "", "demo": "sites\/update.md", @@ -34095,7 +34095,7 @@ "x-appwrite": { "method": "delete", "group": "sites", - "weight": 487, + "weight": 484, "cookies": false, "type": "", "demo": "sites\/delete.md", @@ -34157,7 +34157,7 @@ "x-appwrite": { "method": "updateSiteDeployment", "group": "sites", - "weight": 494, + "weight": 491, "cookies": false, "type": "", "demo": "sites\/update-site-deployment.md", @@ -34238,7 +34238,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 493, + "weight": 490, "cookies": false, "type": "", "demo": "sites\/list-deployments.md", @@ -34333,7 +34333,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 489, + "weight": 486, "cookies": false, "type": "upload", "demo": "sites\/create-deployment.md", @@ -34439,7 +34439,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 497, + "weight": 494, "cookies": false, "type": "", "demo": "sites\/create-duplicate-deployment.md", @@ -34520,7 +34520,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 490, + "weight": 487, "cookies": false, "type": "", "demo": "sites\/create-template-deployment.md", @@ -34637,7 +34637,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 491, + "weight": 488, "cookies": false, "type": "", "demo": "sites\/create-vcs-deployment.md", @@ -34736,7 +34736,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 492, + "weight": 489, "cookies": false, "type": "", "demo": "sites\/get-deployment.md", @@ -34799,7 +34799,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 495, + "weight": 492, "cookies": false, "type": "", "demo": "sites\/delete-deployment.md", @@ -34864,7 +34864,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 496, + "weight": 493, "cookies": false, "type": "location", "demo": "sites\/get-deployment-download.md", @@ -34955,7 +34955,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 498, + "weight": 495, "cookies": false, "type": "", "demo": "sites\/update-deployment-status.md", @@ -35027,7 +35027,7 @@ "x-appwrite": { "method": "listLogs", "group": "logs", - "weight": 500, + "weight": 497, "cookies": false, "type": "", "demo": "sites\/list-logs.md", @@ -35113,7 +35113,7 @@ "x-appwrite": { "method": "getLog", "group": "logs", - "weight": 499, + "weight": 496, "cookies": false, "type": "", "demo": "sites\/get-log.md", @@ -35176,7 +35176,7 @@ "x-appwrite": { "method": "deleteLog", "group": "logs", - "weight": 501, + "weight": 498, "cookies": false, "type": "", "demo": "sites\/delete-log.md", @@ -35248,7 +35248,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 510, + "weight": 507, "cookies": false, "type": "", "demo": "sites\/get-usage.md", @@ -35330,7 +35330,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 504, + "weight": 501, "cookies": false, "type": "", "demo": "sites\/list-variables.md", @@ -35390,7 +35390,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 502, + "weight": 499, "cookies": false, "type": "", "demo": "sites\/create-variable.md", @@ -35482,7 +35482,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 503, + "weight": 500, "cookies": false, "type": "", "demo": "sites\/get-variable.md", @@ -35552,7 +35552,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 505, + "weight": 502, "cookies": false, "type": "", "demo": "sites\/update-variable.md", @@ -35646,7 +35646,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 506, + "weight": 503, "cookies": false, "type": "", "demo": "sites\/delete-variable.md", @@ -35718,7 +35718,7 @@ "x-appwrite": { "method": "listBuckets", "group": "buckets", - "weight": 538, + "weight": 535, "cookies": false, "type": "", "demo": "storage\/list-buckets.md", @@ -35804,7 +35804,7 @@ "x-appwrite": { "method": "createBucket", "group": "buckets", - "weight": 536, + "weight": 533, "cookies": false, "type": "", "demo": "storage\/create-bucket.md", @@ -35940,7 +35940,7 @@ "x-appwrite": { "method": "getBucket", "group": "buckets", - "weight": 537, + "weight": 534, "cookies": false, "type": "", "demo": "storage\/get-bucket.md", @@ -36001,7 +36001,7 @@ "x-appwrite": { "method": "updateBucket", "group": "buckets", - "weight": 539, + "weight": 536, "cookies": false, "type": "", "demo": "storage\/update-bucket.md", @@ -36134,7 +36134,7 @@ "x-appwrite": { "method": "deleteBucket", "group": "buckets", - "weight": 540, + "weight": 537, "cookies": false, "type": "", "demo": "storage\/delete-bucket.md", @@ -36197,7 +36197,7 @@ "x-appwrite": { "method": "listFiles", "group": "files", - "weight": 543, + "weight": 540, "cookies": false, "type": "", "demo": "storage\/list-files.md", @@ -36296,7 +36296,7 @@ "x-appwrite": { "method": "createFile", "group": "files", - "weight": 541, + "weight": 538, "cookies": false, "type": "upload", "demo": "storage\/create-file.md", @@ -36398,7 +36398,7 @@ "x-appwrite": { "method": "getFile", "group": "files", - "weight": 542, + "weight": 539, "cookies": false, "type": "", "demo": "storage\/get-file.md", @@ -36472,7 +36472,7 @@ "x-appwrite": { "method": "updateFile", "group": "files", - "weight": 544, + "weight": 541, "cookies": false, "type": "", "demo": "storage\/update-file.md", @@ -36564,7 +36564,7 @@ "x-appwrite": { "method": "deleteFile", "group": "files", - "weight": 545, + "weight": 542, "cookies": false, "type": "", "demo": "storage\/delete-file.md", @@ -36633,7 +36633,7 @@ "x-appwrite": { "method": "getFileDownload", "group": "files", - "weight": 547, + "weight": 544, "cookies": false, "type": "location", "demo": "storage\/get-file-download.md", @@ -36713,7 +36713,7 @@ "x-appwrite": { "method": "getFilePreview", "group": "files", - "weight": 546, + "weight": 543, "cookies": false, "type": "location", "demo": "storage\/get-file-preview.md", @@ -36943,7 +36943,7 @@ "x-appwrite": { "method": "getFileView", "group": "files", - "weight": 548, + "weight": 545, "cookies": false, "type": "location", "demo": "storage\/get-file-view.md", @@ -37030,7 +37030,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 550, + "weight": 547, "cookies": false, "type": "", "demo": "storage\/get-usage.md", @@ -37103,7 +37103,7 @@ "x-appwrite": { "method": "getBucketUsage", "group": null, - "weight": 551, + "weight": 548, "cookies": false, "type": "", "demo": "storage\/get-bucket-usage.md", @@ -37186,7 +37186,7 @@ "x-appwrite": { "method": "list", "group": "tablesdb", - "weight": 352, + "weight": 349, "cookies": false, "type": "", "demo": "tablesdb\/list.md", @@ -37272,7 +37272,7 @@ "x-appwrite": { "method": "create", "group": "tablesdb", - "weight": 348, + "weight": 345, "cookies": false, "type": "", "demo": "tablesdb\/create.md", @@ -37353,7 +37353,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 419, + "weight": 416, "cookies": false, "type": "", "demo": "tablesdb\/list-transactions.md", @@ -37423,7 +37423,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 415, + "weight": 412, "cookies": false, "type": "", "demo": "tablesdb\/create-transaction.md", @@ -37497,7 +37497,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 416, + "weight": 413, "cookies": false, "type": "", "demo": "tablesdb\/get-transaction.md", @@ -37564,7 +37564,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 417, + "weight": 414, "cookies": false, "type": "", "demo": "tablesdb\/update-transaction.md", @@ -37645,7 +37645,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 418, + "weight": 415, "cookies": false, "type": "", "demo": "tablesdb\/delete-transaction.md", @@ -37714,7 +37714,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 420, + "weight": 417, "cookies": false, "type": "", "demo": "tablesdb\/create-operations.md", @@ -37802,7 +37802,7 @@ "x-appwrite": { "method": "listUsage", "group": null, - "weight": 354, + "weight": 351, "cookies": false, "type": "", "demo": "tablesdb\/list-usage.md", @@ -37901,7 +37901,7 @@ "x-appwrite": { "method": "get", "group": "tablesdb", - "weight": 349, + "weight": 346, "cookies": false, "type": "", "demo": "tablesdb\/get.md", @@ -37962,7 +37962,7 @@ "x-appwrite": { "method": "update", "group": "tablesdb", - "weight": 350, + "weight": 347, "cookies": false, "type": "", "demo": "tablesdb\/update.md", @@ -38037,7 +38037,7 @@ "x-appwrite": { "method": "delete", "group": "tablesdb", - "weight": 351, + "weight": 348, "cookies": false, "type": "", "demo": "tablesdb\/delete.md", @@ -38100,7 +38100,7 @@ "x-appwrite": { "method": "listTables", "group": "tables", - "weight": 359, + "weight": 356, "cookies": false, "type": "", "demo": "tablesdb\/list-tables.md", @@ -38199,7 +38199,7 @@ "x-appwrite": { "method": "createTable", "group": "tables", - "weight": 355, + "weight": 352, "cookies": false, "type": "", "demo": "tablesdb\/create-table.md", @@ -38325,7 +38325,7 @@ "x-appwrite": { "method": "getTable", "group": "tables", - "weight": 356, + "weight": 353, "cookies": false, "type": "", "demo": "tablesdb\/get-table.md", @@ -38399,7 +38399,7 @@ "x-appwrite": { "method": "updateTable", "group": "tables", - "weight": 357, + "weight": 354, "cookies": false, "type": "", "demo": "tablesdb\/update-table.md", @@ -38501,7 +38501,7 @@ "x-appwrite": { "method": "deleteTable", "group": "tables", - "weight": 358, + "weight": 355, "cookies": false, "type": "", "demo": "tablesdb\/delete-table.md", @@ -38577,7 +38577,7 @@ "x-appwrite": { "method": "listColumns", "group": "columns", - "weight": 364, + "weight": 361, "cookies": false, "type": "", "demo": "tablesdb\/list-columns.md", @@ -38677,7 +38677,7 @@ "x-appwrite": { "method": "createBooleanColumn", "group": "columns", - "weight": 365, + "weight": 362, "cookies": false, "type": "", "demo": "tablesdb\/create-boolean-column.md", @@ -38789,7 +38789,7 @@ "x-appwrite": { "method": "updateBooleanColumn", "group": "columns", - "weight": 366, + "weight": 363, "cookies": false, "type": "", "demo": "tablesdb\/update-boolean-column.md", @@ -38906,7 +38906,7 @@ "x-appwrite": { "method": "createDatetimeColumn", "group": "columns", - "weight": 367, + "weight": 364, "cookies": false, "type": "", "demo": "tablesdb\/create-datetime-column.md", @@ -39018,7 +39018,7 @@ "x-appwrite": { "method": "updateDatetimeColumn", "group": "columns", - "weight": 368, + "weight": 365, "cookies": false, "type": "", "demo": "tablesdb\/update-datetime-column.md", @@ -39135,7 +39135,7 @@ "x-appwrite": { "method": "createEmailColumn", "group": "columns", - "weight": 369, + "weight": 366, "cookies": false, "type": "", "demo": "tablesdb\/create-email-column.md", @@ -39248,7 +39248,7 @@ "x-appwrite": { "method": "updateEmailColumn", "group": "columns", - "weight": 370, + "weight": 367, "cookies": false, "type": "", "demo": "tablesdb\/update-email-column.md", @@ -39366,7 +39366,7 @@ "x-appwrite": { "method": "createEnumColumn", "group": "columns", - "weight": 371, + "weight": 368, "cookies": false, "type": "", "demo": "tablesdb\/create-enum-column.md", @@ -39487,7 +39487,7 @@ "x-appwrite": { "method": "updateEnumColumn", "group": "columns", - "weight": 372, + "weight": 369, "cookies": false, "type": "", "demo": "tablesdb\/update-enum-column.md", @@ -39613,7 +39613,7 @@ "x-appwrite": { "method": "createFloatColumn", "group": "columns", - "weight": 373, + "weight": 370, "cookies": false, "type": "", "demo": "tablesdb\/create-float-column.md", @@ -39740,7 +39740,7 @@ "x-appwrite": { "method": "updateFloatColumn", "group": "columns", - "weight": 374, + "weight": 371, "cookies": false, "type": "", "demo": "tablesdb\/update-float-column.md", @@ -39872,7 +39872,7 @@ "x-appwrite": { "method": "createIntegerColumn", "group": "columns", - "weight": 375, + "weight": 372, "cookies": false, "type": "", "demo": "tablesdb\/create-integer-column.md", @@ -39999,7 +39999,7 @@ "x-appwrite": { "method": "updateIntegerColumn", "group": "columns", - "weight": 376, + "weight": 373, "cookies": false, "type": "", "demo": "tablesdb\/update-integer-column.md", @@ -40131,7 +40131,7 @@ "x-appwrite": { "method": "createIpColumn", "group": "columns", - "weight": 377, + "weight": 374, "cookies": false, "type": "", "demo": "tablesdb\/create-ip-column.md", @@ -40243,7 +40243,7 @@ "x-appwrite": { "method": "updateIpColumn", "group": "columns", - "weight": 378, + "weight": 375, "cookies": false, "type": "", "demo": "tablesdb\/update-ip-column.md", @@ -40360,7 +40360,7 @@ "x-appwrite": { "method": "createLineColumn", "group": "columns", - "weight": 379, + "weight": 376, "cookies": false, "type": "", "demo": "tablesdb\/create-line-column.md", @@ -40474,7 +40474,7 @@ "x-appwrite": { "method": "updateLineColumn", "group": "columns", - "weight": 380, + "weight": 377, "cookies": false, "type": "", "demo": "tablesdb\/update-line-column.md", @@ -40597,7 +40597,7 @@ "x-appwrite": { "method": "createLongtextColumn", "group": "columns", - "weight": 397, + "weight": 394, "cookies": false, "type": "", "demo": "tablesdb\/create-longtext-column.md", @@ -40709,7 +40709,7 @@ "x-appwrite": { "method": "updateLongtextColumn", "group": "columns", - "weight": 398, + "weight": 395, "cookies": false, "type": "", "demo": "tablesdb\/update-longtext-column.md", @@ -40826,7 +40826,7 @@ "x-appwrite": { "method": "createMediumtextColumn", "group": "columns", - "weight": 395, + "weight": 392, "cookies": false, "type": "", "demo": "tablesdb\/create-mediumtext-column.md", @@ -40938,7 +40938,7 @@ "x-appwrite": { "method": "updateMediumtextColumn", "group": "columns", - "weight": 396, + "weight": 393, "cookies": false, "type": "", "demo": "tablesdb\/update-mediumtext-column.md", @@ -41055,7 +41055,7 @@ "x-appwrite": { "method": "createPointColumn", "group": "columns", - "weight": 381, + "weight": 378, "cookies": false, "type": "", "demo": "tablesdb\/create-point-column.md", @@ -41169,7 +41169,7 @@ "x-appwrite": { "method": "updatePointColumn", "group": "columns", - "weight": 382, + "weight": 379, "cookies": false, "type": "", "demo": "tablesdb\/update-point-column.md", @@ -41292,7 +41292,7 @@ "x-appwrite": { "method": "createPolygonColumn", "group": "columns", - "weight": 383, + "weight": 380, "cookies": false, "type": "", "demo": "tablesdb\/create-polygon-column.md", @@ -41406,7 +41406,7 @@ "x-appwrite": { "method": "updatePolygonColumn", "group": "columns", - "weight": 384, + "weight": 381, "cookies": false, "type": "", "demo": "tablesdb\/update-polygon-column.md", @@ -41529,7 +41529,7 @@ "x-appwrite": { "method": "createRelationshipColumn", "group": "columns", - "weight": 385, + "weight": 382, "cookies": false, "type": "", "demo": "tablesdb\/create-relationship-column.md", @@ -41667,7 +41667,7 @@ "x-appwrite": { "method": "createStringColumn", "group": "columns", - "weight": 387, + "weight": 384, "cookies": false, "type": "", "demo": "tablesdb\/create-string-column.md", @@ -41795,7 +41795,7 @@ "x-appwrite": { "method": "updateStringColumn", "group": "columns", - "weight": 388, + "weight": 385, "cookies": false, "type": "", "demo": "tablesdb\/update-string-column.md", @@ -41923,7 +41923,7 @@ "x-appwrite": { "method": "createTextColumn", "group": "columns", - "weight": 393, + "weight": 390, "cookies": false, "type": "", "demo": "tablesdb\/create-text-column.md", @@ -42035,7 +42035,7 @@ "x-appwrite": { "method": "updateTextColumn", "group": "columns", - "weight": 394, + "weight": 391, "cookies": false, "type": "", "demo": "tablesdb\/update-text-column.md", @@ -42152,7 +42152,7 @@ "x-appwrite": { "method": "createUrlColumn", "group": "columns", - "weight": 389, + "weight": 386, "cookies": false, "type": "", "demo": "tablesdb\/create-url-column.md", @@ -42265,7 +42265,7 @@ "x-appwrite": { "method": "updateUrlColumn", "group": "columns", - "weight": 390, + "weight": 387, "cookies": false, "type": "", "demo": "tablesdb\/update-url-column.md", @@ -42383,7 +42383,7 @@ "x-appwrite": { "method": "createVarcharColumn", "group": "columns", - "weight": 391, + "weight": 388, "cookies": false, "type": "", "demo": "tablesdb\/create-varchar-column.md", @@ -42502,7 +42502,7 @@ "x-appwrite": { "method": "updateVarcharColumn", "group": "columns", - "weight": 392, + "weight": 389, "cookies": false, "type": "", "demo": "tablesdb\/update-varchar-column.md", @@ -42657,7 +42657,7 @@ "x-appwrite": { "method": "getColumn", "group": "columns", - "weight": 362, + "weight": 359, "cookies": false, "type": "", "demo": "tablesdb\/get-column.md", @@ -42733,7 +42733,7 @@ "x-appwrite": { "method": "deleteColumn", "group": "columns", - "weight": 363, + "weight": 360, "cookies": false, "type": "", "demo": "tablesdb\/delete-column.md", @@ -42818,7 +42818,7 @@ "x-appwrite": { "method": "updateRelationshipColumn", "group": "columns", - "weight": 386, + "weight": 383, "cookies": false, "type": "", "demo": "tablesdb\/update-relationship-column.md", @@ -42933,7 +42933,7 @@ "x-appwrite": { "method": "listIndexes", "group": "indexes", - "weight": 402, + "weight": 399, "cookies": false, "type": "", "demo": "tablesdb\/list-indexes.md", @@ -43031,7 +43031,7 @@ "x-appwrite": { "method": "createIndex", "group": "indexes", - "weight": 399, + "weight": 396, "cookies": false, "type": "", "demo": "tablesdb\/create-index.md", @@ -43171,7 +43171,7 @@ "x-appwrite": { "method": "getIndex", "group": "indexes", - "weight": 400, + "weight": 397, "cookies": false, "type": "", "demo": "tablesdb\/get-index.md", @@ -43247,7 +43247,7 @@ "x-appwrite": { "method": "deleteIndex", "group": "indexes", - "weight": 401, + "weight": 398, "cookies": false, "type": "", "demo": "tablesdb\/delete-index.md", @@ -43332,7 +43332,7 @@ "x-appwrite": { "method": "listTableLogs", "group": "tables", - "weight": 360, + "weight": 357, "cookies": false, "type": "", "demo": "tablesdb\/list-table-logs.md", @@ -43419,7 +43419,7 @@ "x-appwrite": { "method": "listRows", "group": "rows", - "weight": 411, + "weight": 408, "cookies": false, "type": "", "demo": "tablesdb\/list-rows.md", @@ -43530,7 +43530,7 @@ "x-appwrite": { "method": "createRow", "group": "rows", - "weight": 403, + "weight": 400, "cookies": false, "type": "", "demo": "tablesdb\/create-row.md", @@ -43712,7 +43712,7 @@ "x-appwrite": { "method": "upsertRows", "group": "rows", - "weight": 408, + "weight": 405, "cookies": false, "type": "", "demo": "tablesdb\/upsert-rows.md", @@ -43844,7 +43844,7 @@ "x-appwrite": { "method": "updateRows", "group": "rows", - "weight": 406, + "weight": 403, "cookies": false, "type": "", "demo": "tablesdb\/update-rows.md", @@ -43948,7 +43948,7 @@ "x-appwrite": { "method": "deleteRows", "group": "rows", - "weight": 410, + "weight": 407, "cookies": false, "type": "", "demo": "tablesdb\/delete-rows.md", @@ -44049,7 +44049,7 @@ "x-appwrite": { "method": "getRow", "group": "rows", - "weight": 404, + "weight": 401, "cookies": false, "type": "", "demo": "tablesdb\/get-row.md", @@ -44159,7 +44159,7 @@ "x-appwrite": { "method": "upsertRow", "group": "rows", - "weight": 407, + "weight": 404, "cookies": false, "type": "", "demo": "tablesdb\/upsert-row.md", @@ -44309,7 +44309,7 @@ "x-appwrite": { "method": "updateRow", "group": "rows", - "weight": 405, + "weight": 402, "cookies": false, "type": "", "demo": "tablesdb\/update-row.md", @@ -44420,7 +44420,7 @@ "x-appwrite": { "method": "deleteRow", "group": "rows", - "weight": 409, + "weight": 406, "cookies": false, "type": "", "demo": "tablesdb\/delete-row.md", @@ -44526,7 +44526,7 @@ "x-appwrite": { "method": "listRowLogs", "group": "logs", - "weight": 412, + "weight": 409, "cookies": false, "type": "", "demo": "tablesdb\/list-row-logs.md", @@ -44623,7 +44623,7 @@ "x-appwrite": { "method": "decrementRowColumn", "group": "rows", - "weight": 414, + "weight": 411, "cookies": false, "type": "", "demo": "tablesdb\/decrement-row-column.md", @@ -44751,7 +44751,7 @@ "x-appwrite": { "method": "incrementRowColumn", "group": "rows", - "weight": 413, + "weight": 410, "cookies": false, "type": "", "demo": "tablesdb\/increment-row-column.md", @@ -44879,7 +44879,7 @@ "x-appwrite": { "method": "getTableUsage", "group": null, - "weight": 361, + "weight": 358, "cookies": false, "type": "", "demo": "tablesdb\/get-table-usage.md", @@ -44975,7 +44975,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 353, + "weight": 350, "cookies": false, "type": "", "demo": "tablesdb\/get-usage.md", @@ -46266,7 +46266,7 @@ "x-appwrite": { "method": "list", "group": "files", - "weight": 533, + "weight": 530, "cookies": false, "type": "", "demo": "tokens\/list.md", @@ -46360,7 +46360,7 @@ "x-appwrite": { "method": "createFileToken", "group": "files", - "weight": 531, + "weight": 528, "cookies": false, "type": "", "demo": "tokens\/create-file-token.md", @@ -46449,7 +46449,7 @@ "x-appwrite": { "method": "get", "group": "tokens", - "weight": 532, + "weight": 529, "cookies": false, "type": "", "demo": "tokens\/get.md", @@ -46509,7 +46509,7 @@ "x-appwrite": { "method": "update", "group": "tokens", - "weight": 534, + "weight": 531, "cookies": false, "type": "", "demo": "tokens\/update.md", @@ -46579,7 +46579,7 @@ "x-appwrite": { "method": "delete", "group": "tokens", - "weight": 535, + "weight": 532, "cookies": false, "type": "", "demo": "tokens\/delete.md", @@ -50948,7 +50948,7 @@ "x-appwrite": { "method": "updateExternalDeployments", "group": "repositories", - "weight": 178, + "weight": 175, "cookies": false, "type": "", "demo": "vcs\/update-external-deployments.md", @@ -51038,7 +51038,7 @@ "x-appwrite": { "method": "listInstallations", "group": "installations", - "weight": 175, + "weight": 550, "cookies": false, "type": "", "demo": "vcs\/list-installations.md", @@ -51124,7 +51124,7 @@ "x-appwrite": { "method": "getInstallation", "group": "installations", - "weight": 176, + "weight": 549, "cookies": false, "type": "", "demo": "vcs\/get-installation.md", @@ -51176,7 +51176,7 @@ "x-appwrite": { "method": "deleteInstallation", "group": "installations", - "weight": 177, + "weight": 551, "cookies": false, "type": "", "demo": "vcs\/delete-installation.md", @@ -52922,6 +52922,18 @@ "$ref": "#\/components\/schemas\/index" }, "x-example": {} + }, + "bytesMax": { + "type": "integer", + "description": "Maximum document size in bytes. Returns 0 when no limit applies.", + "x-example": 65535, + "format": "int32" + }, + "bytesUsed": { + "type": "integer", + "description": "Currently used document size in bytes based on defined attributes.", + "x-example": 1500, + "format": "int32" } }, "required": [ @@ -52934,7 +52946,9 @@ "enabled", "documentSecurity", "attributes", - "indexes" + "indexes", + "bytesMax", + "bytesUsed" ], "example": { "$id": "5e5ea5c16897e", @@ -52948,7 +52962,9 @@ "enabled": false, "documentSecurity": true, "attributes": {}, - "indexes": {} + "indexes": {}, + "bytesMax": 65535, + "bytesUsed": 1500 } }, "attributeList": { @@ -54715,6 +54731,18 @@ "$ref": "#\/components\/schemas\/columnIndex" }, "x-example": {} + }, + "bytesMax": { + "type": "integer", + "description": "Maximum row size in bytes. Returns 0 when no limit applies.", + "x-example": 65535, + "format": "int32" + }, + "bytesUsed": { + "type": "integer", + "description": "Currently used row size in bytes based on defined columns.", + "x-example": 1500, + "format": "int32" } }, "required": [ @@ -54727,7 +54755,9 @@ "enabled", "rowSecurity", "columns", - "indexes" + "indexes", + "bytesMax", + "bytesUsed" ], "example": { "$id": "5e5ea5c16897e", @@ -54741,7 +54771,9 @@ "enabled": false, "rowSecurity": true, "columns": {}, - "indexes": {} + "indexes": {}, + "bytesMax": 65535, + "bytesUsed": 1500 } }, "columnList": { diff --git a/app/config/specs/open-api3-1.8.x-server.json b/app/config/specs/open-api3-1.8.x-server.json index f63942090c..ee2af4b70a 100644 --- a/app/config/specs/open-api3-1.8.x-server.json +++ b/app/config/specs/open-api3-1.8.x-server.json @@ -562,7 +562,7 @@ "x-appwrite": { "method": "updateMFA", "group": "mfa", - "weight": 253, + "weight": 250, "cookies": false, "type": "", "demo": "account\/update-mfa.md", @@ -635,7 +635,7 @@ "x-appwrite": { "method": "createMfaAuthenticator", "group": "mfa", - "weight": 255, + "weight": 252, "cookies": false, "type": "", "demo": "account\/create-mfa-authenticator.md", @@ -762,7 +762,7 @@ "x-appwrite": { "method": "updateMfaAuthenticator", "group": "mfa", - "weight": 256, + "weight": 253, "cookies": false, "type": "", "demo": "account\/update-mfa-authenticator.md", @@ -905,7 +905,7 @@ "x-appwrite": { "method": "deleteMfaAuthenticator", "group": "mfa", - "weight": 257, + "weight": 254, "cookies": false, "type": "", "demo": "account\/delete-mfa-authenticator.md", @@ -1032,7 +1032,7 @@ "x-appwrite": { "method": "createMfaChallenge", "group": "mfa", - "weight": 261, + "weight": 258, "cookies": false, "type": "", "demo": "account\/create-mfa-challenge.md", @@ -1169,7 +1169,7 @@ "x-appwrite": { "method": "updateMfaChallenge", "group": "mfa", - "weight": 262, + "weight": 259, "cookies": false, "type": "", "demo": "account\/update-mfa-challenge.md", @@ -1310,7 +1310,7 @@ "x-appwrite": { "method": "listMfaFactors", "group": "mfa", - "weight": 254, + "weight": 251, "cookies": false, "type": "", "demo": "account\/list-mfa-factors.md", @@ -1414,7 +1414,7 @@ "x-appwrite": { "method": "getMfaRecoveryCodes", "group": "mfa", - "weight": 260, + "weight": 257, "cookies": false, "type": "", "demo": "account\/get-mfa-recovery-codes.md", @@ -1516,7 +1516,7 @@ "x-appwrite": { "method": "createMfaRecoveryCodes", "group": "mfa", - "weight": 258, + "weight": 255, "cookies": false, "type": "", "demo": "account\/create-mfa-recovery-codes.md", @@ -1618,7 +1618,7 @@ "x-appwrite": { "method": "updateMfaRecoveryCodes", "group": "mfa", - "weight": 259, + "weight": 256, "cookies": false, "type": "", "demo": "account\/update-mfa-recovery-codes.md", @@ -3761,7 +3761,7 @@ "x-appwrite": { "method": "getBrowser", "group": null, - "weight": 264, + "weight": 261, "cookies": false, "type": "location", "demo": "avatars\/get-browser.md", @@ -3891,7 +3891,7 @@ "x-appwrite": { "method": "getCreditCard", "group": null, - "weight": 263, + "weight": 260, "cookies": false, "type": "location", "demo": "avatars\/get-credit-card.md", @@ -4027,7 +4027,7 @@ "x-appwrite": { "method": "getFavicon", "group": null, - "weight": 267, + "weight": 264, "cookies": false, "type": "location", "demo": "avatars\/get-favicon.md", @@ -4089,7 +4089,7 @@ "x-appwrite": { "method": "getFlag", "group": null, - "weight": 265, + "weight": 262, "cookies": false, "type": "location", "demo": "avatars\/get-flag.md", @@ -4581,7 +4581,7 @@ "x-appwrite": { "method": "getImage", "group": null, - "weight": 266, + "weight": 263, "cookies": false, "type": "location", "demo": "avatars\/get-image.md", @@ -4667,7 +4667,7 @@ "x-appwrite": { "method": "getInitials", "group": null, - "weight": 269, + "weight": 266, "cookies": false, "type": "location", "demo": "avatars\/get-initials.md", @@ -4763,7 +4763,7 @@ "x-appwrite": { "method": "getQR", "group": null, - "weight": 268, + "weight": 265, "cookies": false, "type": "location", "demo": "avatars\/get-qr.md", @@ -4859,7 +4859,7 @@ "x-appwrite": { "method": "getScreenshot", "group": null, - "weight": 270, + "weight": 267, "cookies": false, "type": "location", "demo": "avatars\/get-screenshot.md", @@ -5614,7 +5614,7 @@ "x-appwrite": { "method": "list", "group": "databases", - "weight": 278, + "weight": 275, "cookies": false, "type": "", "demo": "databases\/list.md", @@ -5735,7 +5735,7 @@ "x-appwrite": { "method": "create", "group": "databases", - "weight": 274, + "weight": 271, "cookies": false, "type": "", "demo": "databases\/create.md", @@ -5854,7 +5854,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 346, + "weight": 343, "cookies": false, "type": "", "demo": "databases\/list-transactions.md", @@ -5923,7 +5923,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 342, + "weight": 339, "cookies": false, "type": "", "demo": "databases\/create-transaction.md", @@ -5996,7 +5996,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 343, + "weight": 340, "cookies": false, "type": "", "demo": "databases\/get-transaction.md", @@ -6062,7 +6062,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 344, + "weight": 341, "cookies": false, "type": "", "demo": "databases\/update-transaction.md", @@ -6142,7 +6142,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 345, + "weight": 342, "cookies": false, "type": "", "demo": "databases\/delete-transaction.md", @@ -6210,7 +6210,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 347, + "weight": 344, "cookies": false, "type": "", "demo": "databases\/create-operations.md", @@ -6297,7 +6297,7 @@ "x-appwrite": { "method": "get", "group": "databases", - "weight": 275, + "weight": 272, "cookies": false, "type": "", "demo": "databases\/get.md", @@ -6393,7 +6393,7 @@ "x-appwrite": { "method": "update", "group": "databases", - "weight": 276, + "weight": 273, "cookies": false, "type": "", "demo": "databases\/update.md", @@ -6505,7 +6505,7 @@ "x-appwrite": { "method": "delete", "group": "databases", - "weight": 277, + "weight": 274, "cookies": false, "type": "", "demo": "databases\/delete.md", @@ -6602,7 +6602,7 @@ "x-appwrite": { "method": "listCollections", "group": "collections", - "weight": 286, + "weight": 283, "cookies": false, "type": "", "demo": "databases\/list-collections.md", @@ -6703,7 +6703,7 @@ "x-appwrite": { "method": "createCollection", "group": "collections", - "weight": 282, + "weight": 279, "cookies": false, "type": "", "demo": "databases\/create-collection.md", @@ -6831,7 +6831,7 @@ "x-appwrite": { "method": "getCollection", "group": "collections", - "weight": 283, + "weight": 280, "cookies": false, "type": "", "demo": "databases\/get-collection.md", @@ -6907,7 +6907,7 @@ "x-appwrite": { "method": "updateCollection", "group": "collections", - "weight": 284, + "weight": 281, "cookies": false, "type": "", "demo": "databases\/update-collection.md", @@ -7011,7 +7011,7 @@ "x-appwrite": { "method": "deleteCollection", "group": "collections", - "weight": 285, + "weight": 282, "cookies": false, "type": "", "demo": "databases\/delete-collection.md", @@ -7089,7 +7089,7 @@ "x-appwrite": { "method": "listAttributes", "group": "attributes", - "weight": 303, + "weight": 300, "cookies": false, "type": "", "demo": "databases\/list-attributes.md", @@ -7191,7 +7191,7 @@ "x-appwrite": { "method": "createBooleanAttribute", "group": "attributes", - "weight": 304, + "weight": 301, "cookies": false, "type": "", "demo": "databases\/create-boolean-attribute.md", @@ -7305,7 +7305,7 @@ "x-appwrite": { "method": "updateBooleanAttribute", "group": "attributes", - "weight": 305, + "weight": 302, "cookies": false, "type": "", "demo": "databases\/update-boolean-attribute.md", @@ -7424,7 +7424,7 @@ "x-appwrite": { "method": "createDatetimeAttribute", "group": "attributes", - "weight": 306, + "weight": 303, "cookies": false, "type": "", "demo": "databases\/create-datetime-attribute.md", @@ -7538,7 +7538,7 @@ "x-appwrite": { "method": "updateDatetimeAttribute", "group": "attributes", - "weight": 307, + "weight": 304, "cookies": false, "type": "", "demo": "databases\/update-datetime-attribute.md", @@ -7657,7 +7657,7 @@ "x-appwrite": { "method": "createEmailAttribute", "group": "attributes", - "weight": 308, + "weight": 305, "cookies": false, "type": "", "demo": "databases\/create-email-attribute.md", @@ -7772,7 +7772,7 @@ "x-appwrite": { "method": "updateEmailAttribute", "group": "attributes", - "weight": 309, + "weight": 306, "cookies": false, "type": "", "demo": "databases\/update-email-attribute.md", @@ -7892,7 +7892,7 @@ "x-appwrite": { "method": "createEnumAttribute", "group": "attributes", - "weight": 310, + "weight": 307, "cookies": false, "type": "", "demo": "databases\/create-enum-attribute.md", @@ -8015,7 +8015,7 @@ "x-appwrite": { "method": "updateEnumAttribute", "group": "attributes", - "weight": 311, + "weight": 308, "cookies": false, "type": "", "demo": "databases\/update-enum-attribute.md", @@ -8143,7 +8143,7 @@ "x-appwrite": { "method": "createFloatAttribute", "group": "attributes", - "weight": 312, + "weight": 309, "cookies": false, "type": "", "demo": "databases\/create-float-attribute.md", @@ -8272,7 +8272,7 @@ "x-appwrite": { "method": "updateFloatAttribute", "group": "attributes", - "weight": 313, + "weight": 310, "cookies": false, "type": "", "demo": "databases\/update-float-attribute.md", @@ -8406,7 +8406,7 @@ "x-appwrite": { "method": "createIntegerAttribute", "group": "attributes", - "weight": 314, + "weight": 311, "cookies": false, "type": "", "demo": "databases\/create-integer-attribute.md", @@ -8535,7 +8535,7 @@ "x-appwrite": { "method": "updateIntegerAttribute", "group": "attributes", - "weight": 315, + "weight": 312, "cookies": false, "type": "", "demo": "databases\/update-integer-attribute.md", @@ -8669,7 +8669,7 @@ "x-appwrite": { "method": "createIpAttribute", "group": "attributes", - "weight": 316, + "weight": 313, "cookies": false, "type": "", "demo": "databases\/create-ip-attribute.md", @@ -8783,7 +8783,7 @@ "x-appwrite": { "method": "updateIpAttribute", "group": "attributes", - "weight": 317, + "weight": 314, "cookies": false, "type": "", "demo": "databases\/update-ip-attribute.md", @@ -8902,7 +8902,7 @@ "x-appwrite": { "method": "createLineAttribute", "group": "attributes", - "weight": 318, + "weight": 315, "cookies": false, "type": "", "demo": "databases\/create-line-attribute.md", @@ -9018,7 +9018,7 @@ "x-appwrite": { "method": "updateLineAttribute", "group": "attributes", - "weight": 319, + "weight": 316, "cookies": false, "type": "", "demo": "databases\/update-line-attribute.md", @@ -9143,7 +9143,7 @@ "x-appwrite": { "method": "createLongtextAttribute", "group": "attributes", - "weight": 336, + "weight": 333, "cookies": false, "type": "", "demo": "databases\/create-longtext-attribute.md", @@ -9253,7 +9253,7 @@ "x-appwrite": { "method": "updateLongtextAttribute", "group": "attributes", - "weight": 337, + "weight": 334, "cookies": false, "type": "", "demo": "databases\/update-longtext-attribute.md", @@ -9368,7 +9368,7 @@ "x-appwrite": { "method": "createMediumtextAttribute", "group": "attributes", - "weight": 334, + "weight": 331, "cookies": false, "type": "", "demo": "databases\/create-mediumtext-attribute.md", @@ -9478,7 +9478,7 @@ "x-appwrite": { "method": "updateMediumtextAttribute", "group": "attributes", - "weight": 335, + "weight": 332, "cookies": false, "type": "", "demo": "databases\/update-mediumtext-attribute.md", @@ -9593,7 +9593,7 @@ "x-appwrite": { "method": "createPointAttribute", "group": "attributes", - "weight": 320, + "weight": 317, "cookies": false, "type": "", "demo": "databases\/create-point-attribute.md", @@ -9709,7 +9709,7 @@ "x-appwrite": { "method": "updatePointAttribute", "group": "attributes", - "weight": 321, + "weight": 318, "cookies": false, "type": "", "demo": "databases\/update-point-attribute.md", @@ -9834,7 +9834,7 @@ "x-appwrite": { "method": "createPolygonAttribute", "group": "attributes", - "weight": 322, + "weight": 319, "cookies": false, "type": "", "demo": "databases\/create-polygon-attribute.md", @@ -9950,7 +9950,7 @@ "x-appwrite": { "method": "updatePolygonAttribute", "group": "attributes", - "weight": 323, + "weight": 320, "cookies": false, "type": "", "demo": "databases\/update-polygon-attribute.md", @@ -10075,7 +10075,7 @@ "x-appwrite": { "method": "createRelationshipAttribute", "group": "attributes", - "weight": 324, + "weight": 321, "cookies": false, "type": "", "demo": "databases\/create-relationship-attribute.md", @@ -10215,7 +10215,7 @@ "x-appwrite": { "method": "createStringAttribute", "group": "attributes", - "weight": 326, + "weight": 323, "cookies": false, "type": "", "demo": "databases\/create-string-attribute.md", @@ -10341,7 +10341,7 @@ "x-appwrite": { "method": "updateStringAttribute", "group": "attributes", - "weight": 327, + "weight": 324, "cookies": false, "type": "", "demo": "databases\/update-string-attribute.md", @@ -10467,7 +10467,7 @@ "x-appwrite": { "method": "createTextAttribute", "group": "attributes", - "weight": 332, + "weight": 329, "cookies": false, "type": "", "demo": "databases\/create-text-attribute.md", @@ -10577,7 +10577,7 @@ "x-appwrite": { "method": "updateTextAttribute", "group": "attributes", - "weight": 333, + "weight": 330, "cookies": false, "type": "", "demo": "databases\/update-text-attribute.md", @@ -10692,7 +10692,7 @@ "x-appwrite": { "method": "createUrlAttribute", "group": "attributes", - "weight": 328, + "weight": 325, "cookies": false, "type": "", "demo": "databases\/create-url-attribute.md", @@ -10807,7 +10807,7 @@ "x-appwrite": { "method": "updateUrlAttribute", "group": "attributes", - "weight": 329, + "weight": 326, "cookies": false, "type": "", "demo": "databases\/update-url-attribute.md", @@ -10927,7 +10927,7 @@ "x-appwrite": { "method": "createVarcharAttribute", "group": "attributes", - "weight": 330, + "weight": 327, "cookies": false, "type": "", "demo": "databases\/create-varchar-attribute.md", @@ -11044,7 +11044,7 @@ "x-appwrite": { "method": "updateVarcharAttribute", "group": "attributes", - "weight": 331, + "weight": 328, "cookies": false, "type": "", "demo": "databases\/update-varchar-attribute.md", @@ -11197,7 +11197,7 @@ "x-appwrite": { "method": "getAttribute", "group": "attributes", - "weight": 301, + "weight": 298, "cookies": false, "type": "", "demo": "databases\/get-attribute.md", @@ -11275,7 +11275,7 @@ "x-appwrite": { "method": "deleteAttribute", "group": "attributes", - "weight": 302, + "weight": 299, "cookies": false, "type": "", "demo": "databases\/delete-attribute.md", @@ -11362,7 +11362,7 @@ "x-appwrite": { "method": "updateRelationshipAttribute", "group": "attributes", - "weight": 325, + "weight": 322, "cookies": false, "type": "", "demo": "databases\/update-relationship-attribute.md", @@ -11479,7 +11479,7 @@ "x-appwrite": { "method": "listDocuments", "group": "documents", - "weight": 297, + "weight": 294, "cookies": false, "type": "", "demo": "databases\/list-documents.md", @@ -11593,7 +11593,7 @@ "x-appwrite": { "method": "createDocument", "group": "documents", - "weight": 289, + "weight": 286, "cookies": false, "type": "", "demo": "databases\/create-document.md", @@ -11788,7 +11788,7 @@ "x-appwrite": { "method": "upsertDocuments", "group": "documents", - "weight": 294, + "weight": 291, "cookies": false, "type": "", "demo": "databases\/upsert-documents.md", @@ -11927,7 +11927,7 @@ "x-appwrite": { "method": "updateDocuments", "group": "documents", - "weight": 292, + "weight": 289, "cookies": false, "type": "", "demo": "databases\/update-documents.md", @@ -12033,7 +12033,7 @@ "x-appwrite": { "method": "deleteDocuments", "group": "documents", - "weight": 296, + "weight": 293, "cookies": false, "type": "", "demo": "databases\/delete-documents.md", @@ -12136,7 +12136,7 @@ "x-appwrite": { "method": "getDocument", "group": "documents", - "weight": 290, + "weight": 287, "cookies": false, "type": "", "demo": "databases\/get-document.md", @@ -12249,7 +12249,7 @@ "x-appwrite": { "method": "upsertDocument", "group": "documents", - "weight": 293, + "weight": 290, "cookies": false, "type": "", "demo": "databases\/upsert-document.md", @@ -12407,7 +12407,7 @@ "x-appwrite": { "method": "updateDocument", "group": "documents", - "weight": 291, + "weight": 288, "cookies": false, "type": "", "demo": "databases\/update-document.md", @@ -12521,7 +12521,7 @@ "x-appwrite": { "method": "deleteDocument", "group": "documents", - "weight": 295, + "weight": 292, "cookies": false, "type": "", "demo": "databases\/delete-document.md", @@ -12630,7 +12630,7 @@ "x-appwrite": { "method": "decrementDocumentAttribute", "group": "documents", - "weight": 300, + "weight": 297, "cookies": false, "type": "", "demo": "databases\/decrement-document-attribute.md", @@ -12761,7 +12761,7 @@ "x-appwrite": { "method": "incrementDocumentAttribute", "group": "documents", - "weight": 299, + "weight": 296, "cookies": false, "type": "", "demo": "databases\/increment-document-attribute.md", @@ -12892,7 +12892,7 @@ "x-appwrite": { "method": "listIndexes", "group": "indexes", - "weight": 341, + "weight": 338, "cookies": false, "type": "", "demo": "databases\/list-indexes.md", @@ -12992,7 +12992,7 @@ "x-appwrite": { "method": "createIndex", "group": "indexes", - "weight": 338, + "weight": 335, "cookies": false, "type": "", "demo": "databases\/create-index.md", @@ -13134,7 +13134,7 @@ "x-appwrite": { "method": "getIndex", "group": "indexes", - "weight": 339, + "weight": 336, "cookies": false, "type": "", "demo": "databases\/get-index.md", @@ -13212,7 +13212,7 @@ "x-appwrite": { "method": "deleteIndex", "group": "indexes", - "weight": 340, + "weight": 337, "cookies": false, "type": "", "demo": "databases\/delete-index.md", @@ -13299,7 +13299,7 @@ "x-appwrite": { "method": "list", "group": "functions", - "weight": 431, + "weight": 428, "cookies": false, "type": "", "demo": "functions\/list.md", @@ -13385,7 +13385,7 @@ "x-appwrite": { "method": "create", "group": "functions", - "weight": 428, + "weight": 425, "cookies": false, "type": "", "demo": "functions\/create.md", @@ -13682,7 +13682,7 @@ "x-appwrite": { "method": "listRuntimes", "group": "runtimes", - "weight": 433, + "weight": 430, "cookies": false, "type": "", "demo": "functions\/list-runtimes.md", @@ -13733,7 +13733,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "runtimes", - "weight": 434, + "weight": 431, "cookies": false, "type": "", "demo": "functions\/list-specifications.md", @@ -13784,7 +13784,7 @@ "x-appwrite": { "method": "get", "group": "functions", - "weight": 429, + "weight": 426, "cookies": false, "type": "", "demo": "functions\/get.md", @@ -13845,7 +13845,7 @@ "x-appwrite": { "method": "update", "group": "functions", - "weight": 430, + "weight": 427, "cookies": false, "type": "", "demo": "functions\/update.md", @@ -14139,7 +14139,7 @@ "x-appwrite": { "method": "delete", "group": "functions", - "weight": 432, + "weight": 429, "cookies": false, "type": "", "demo": "functions\/delete.md", @@ -14202,7 +14202,7 @@ "x-appwrite": { "method": "updateFunctionDeployment", "group": "functions", - "weight": 437, + "weight": 434, "cookies": false, "type": "", "demo": "functions\/update-function-deployment.md", @@ -14284,7 +14284,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 438, + "weight": 435, "cookies": false, "type": "", "demo": "functions\/list-deployments.md", @@ -14380,7 +14380,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 435, + "weight": 432, "cookies": false, "type": "upload", "demo": "functions\/create-deployment.md", @@ -14481,7 +14481,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 443, + "weight": 440, "cookies": false, "type": "", "demo": "functions\/create-duplicate-deployment.md", @@ -14568,7 +14568,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 440, + "weight": 437, "cookies": false, "type": "", "demo": "functions\/create-template-deployment.md", @@ -14686,7 +14686,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 441, + "weight": 438, "cookies": false, "type": "", "demo": "functions\/create-vcs-deployment.md", @@ -14785,7 +14785,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 436, + "weight": 433, "cookies": false, "type": "", "demo": "functions\/get-deployment.md", @@ -14849,7 +14849,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 439, + "weight": 436, "cookies": false, "type": "", "demo": "functions\/delete-deployment.md", @@ -14915,7 +14915,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 442, + "weight": 439, "cookies": false, "type": "location", "demo": "functions\/get-deployment-download.md", @@ -15007,7 +15007,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 444, + "weight": 441, "cookies": false, "type": "", "demo": "functions\/update-deployment-status.md", @@ -15080,7 +15080,7 @@ "x-appwrite": { "method": "listExecutions", "group": "executions", - "weight": 447, + "weight": 444, "cookies": false, "type": "", "demo": "functions\/list-executions.md", @@ -15169,7 +15169,7 @@ "x-appwrite": { "method": "createExecution", "group": "executions", - "weight": 445, + "weight": 442, "cookies": false, "type": "", "demo": "functions\/create-execution.md", @@ -15289,7 +15289,7 @@ "x-appwrite": { "method": "getExecution", "group": "executions", - "weight": 446, + "weight": 443, "cookies": false, "type": "", "demo": "functions\/get-execution.md", @@ -15357,7 +15357,7 @@ "x-appwrite": { "method": "deleteExecution", "group": "executions", - "weight": 448, + "weight": 445, "cookies": false, "type": "", "demo": "functions\/delete-execution.md", @@ -15430,7 +15430,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 453, + "weight": 450, "cookies": false, "type": "", "demo": "functions\/list-variables.md", @@ -15491,7 +15491,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 451, + "weight": 448, "cookies": false, "type": "", "demo": "functions\/create-variable.md", @@ -15584,7 +15584,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 452, + "weight": 449, "cookies": false, "type": "", "demo": "functions\/get-variable.md", @@ -15655,7 +15655,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 454, + "weight": 451, "cookies": false, "type": "", "demo": "functions\/update-variable.md", @@ -15750,7 +15750,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 455, + "weight": 452, "cookies": false, "type": "", "demo": "functions\/delete-variable.md", @@ -15823,7 +15823,7 @@ "x-appwrite": { "method": "query", "group": "graphql", - "weight": 190, + "weight": 187, "cookies": false, "type": "graphql", "demo": "graphql\/query.md", @@ -15879,7 +15879,7 @@ "x-appwrite": { "method": "mutation", "group": "graphql", - "weight": 189, + "weight": 186, "cookies": false, "type": "graphql", "demo": "graphql\/mutation.md", @@ -15935,7 +15935,7 @@ "x-appwrite": { "method": "get", "group": "health", - "weight": 458, + "weight": 455, "cookies": false, "type": "", "demo": "health\/get.md", @@ -15987,7 +15987,7 @@ "x-appwrite": { "method": "getAntivirus", "group": "health", - "weight": 467, + "weight": 464, "cookies": false, "type": "", "demo": "health\/get-antivirus.md", @@ -16039,7 +16039,7 @@ "x-appwrite": { "method": "getCache", "group": "health", - "weight": 461, + "weight": 458, "cookies": false, "type": "", "demo": "health\/get-cache.md", @@ -16091,7 +16091,7 @@ "x-appwrite": { "method": "getCertificate", "group": "health", - "weight": 464, + "weight": 461, "cookies": false, "type": "", "demo": "health\/get-certificate.md", @@ -16154,7 +16154,7 @@ "x-appwrite": { "method": "getDB", "group": "health", - "weight": 460, + "weight": 457, "cookies": false, "type": "", "demo": "health\/get-db.md", @@ -16206,7 +16206,7 @@ "x-appwrite": { "method": "getPubSub", "group": "health", - "weight": 462, + "weight": 459, "cookies": false, "type": "", "demo": "health\/get-pub-sub.md", @@ -16258,7 +16258,7 @@ "x-appwrite": { "method": "getQueueAudits", "group": "queue", - "weight": 468, + "weight": 465, "cookies": false, "type": "", "demo": "health\/get-queue-audits.md", @@ -16323,7 +16323,7 @@ "x-appwrite": { "method": "getQueueBuilds", "group": "queue", - "weight": 472, + "weight": 469, "cookies": false, "type": "", "demo": "health\/get-queue-builds.md", @@ -16388,7 +16388,7 @@ "x-appwrite": { "method": "getQueueCertificates", "group": "queue", - "weight": 471, + "weight": 468, "cookies": false, "type": "", "demo": "health\/get-queue-certificates.md", @@ -16453,7 +16453,7 @@ "x-appwrite": { "method": "getQueueDatabases", "group": "queue", - "weight": 473, + "weight": 470, "cookies": false, "type": "", "demo": "health\/get-queue-databases.md", @@ -16529,7 +16529,7 @@ "x-appwrite": { "method": "getQueueDeletes", "group": "queue", - "weight": 474, + "weight": 471, "cookies": false, "type": "", "demo": "health\/get-queue-deletes.md", @@ -16594,7 +16594,7 @@ "x-appwrite": { "method": "getFailedJobs", "group": "queue", - "weight": 481, + "weight": 478, "cookies": false, "type": "", "demo": "health\/get-failed-jobs.md", @@ -16686,7 +16686,7 @@ "x-appwrite": { "method": "getQueueFunctions", "group": "queue", - "weight": 478, + "weight": 475, "cookies": false, "type": "", "demo": "health\/get-queue-functions.md", @@ -16751,7 +16751,7 @@ "x-appwrite": { "method": "getQueueLogs", "group": "queue", - "weight": 470, + "weight": 467, "cookies": false, "type": "", "demo": "health\/get-queue-logs.md", @@ -16816,7 +16816,7 @@ "x-appwrite": { "method": "getQueueMails", "group": "queue", - "weight": 475, + "weight": 472, "cookies": false, "type": "", "demo": "health\/get-queue-mails.md", @@ -16881,7 +16881,7 @@ "x-appwrite": { "method": "getQueueMessaging", "group": "queue", - "weight": 476, + "weight": 473, "cookies": false, "type": "", "demo": "health\/get-queue-messaging.md", @@ -16946,7 +16946,7 @@ "x-appwrite": { "method": "getQueueMigrations", "group": "queue", - "weight": 477, + "weight": 474, "cookies": false, "type": "", "demo": "health\/get-queue-migrations.md", @@ -17011,7 +17011,7 @@ "x-appwrite": { "method": "getQueueStatsResources", "group": "queue", - "weight": 479, + "weight": 476, "cookies": false, "type": "", "demo": "health\/get-queue-stats-resources.md", @@ -17076,7 +17076,7 @@ "x-appwrite": { "method": "getQueueUsage", "group": "queue", - "weight": 480, + "weight": 477, "cookies": false, "type": "", "demo": "health\/get-queue-usage.md", @@ -17141,7 +17141,7 @@ "x-appwrite": { "method": "getQueueWebhooks", "group": "queue", - "weight": 469, + "weight": 466, "cookies": false, "type": "", "demo": "health\/get-queue-webhooks.md", @@ -17206,7 +17206,7 @@ "x-appwrite": { "method": "getStorage", "group": "storage", - "weight": 466, + "weight": 463, "cookies": false, "type": "", "demo": "health\/get-storage.md", @@ -17258,7 +17258,7 @@ "x-appwrite": { "method": "getStorageLocal", "group": "storage", - "weight": 465, + "weight": 462, "cookies": false, "type": "", "demo": "health\/get-storage-local.md", @@ -17310,7 +17310,7 @@ "x-appwrite": { "method": "getTime", "group": "health", - "weight": 463, + "weight": 460, "cookies": false, "type": "", "demo": "health\/get-time.md", @@ -17810,7 +17810,7 @@ "x-appwrite": { "method": "listMessages", "group": "messages", - "weight": 245, + "weight": 242, "cookies": false, "type": "", "demo": "messaging\/list-messages.md", @@ -17899,7 +17899,7 @@ "x-appwrite": { "method": "createEmail", "group": "messages", - "weight": 242, + "weight": 239, "cookies": false, "type": "", "demo": "messaging\/create-email.md", @@ -18046,7 +18046,7 @@ "x-appwrite": { "method": "updateEmail", "group": "messages", - "weight": 249, + "weight": 246, "cookies": false, "type": "", "demo": "messaging\/update-email.md", @@ -18205,7 +18205,7 @@ "x-appwrite": { "method": "createPush", "group": "messages", - "weight": 244, + "weight": 241, "cookies": false, "type": "", "demo": "messaging\/create-push.md", @@ -18384,7 +18384,7 @@ "x-appwrite": { "method": "updatePush", "group": "messages", - "weight": 251, + "weight": 248, "cookies": false, "type": "", "demo": "messaging\/update-push.md", @@ -18583,7 +18583,7 @@ "x-appwrite": { "method": "createSms", "group": "messages", - "weight": 243, + "weight": 240, "cookies": false, "type": "", "demo": "messaging\/create-sms.md", @@ -18767,7 +18767,7 @@ "x-appwrite": { "method": "updateSms", "group": "messages", - "weight": 250, + "weight": 247, "cookies": false, "type": "", "demo": "messaging\/update-sms.md", @@ -18957,7 +18957,7 @@ "x-appwrite": { "method": "getMessage", "group": "messages", - "weight": 248, + "weight": 245, "cookies": false, "type": "", "demo": "messaging\/get-message.md", @@ -19012,7 +19012,7 @@ "x-appwrite": { "method": "delete", "group": "messages", - "weight": 252, + "weight": 249, "cookies": false, "type": "", "demo": "messaging\/delete.md", @@ -19076,7 +19076,7 @@ "x-appwrite": { "method": "listMessageLogs", "group": "logs", - "weight": 246, + "weight": 243, "cookies": false, "type": "", "demo": "messaging\/list-message-logs.md", @@ -19164,7 +19164,7 @@ "x-appwrite": { "method": "listTargets", "group": "messages", - "weight": 247, + "weight": 244, "cookies": false, "type": "", "demo": "messaging\/list-targets.md", @@ -19252,7 +19252,7 @@ "x-appwrite": { "method": "listProviders", "group": "providers", - "weight": 216, + "weight": 213, "cookies": false, "type": "", "demo": "messaging\/list-providers.md", @@ -19341,7 +19341,7 @@ "x-appwrite": { "method": "createApnsProvider", "group": "providers", - "weight": 215, + "weight": 212, "cookies": false, "type": "", "demo": "messaging\/create-apns-provider.md", @@ -19523,7 +19523,7 @@ "x-appwrite": { "method": "updateApnsProvider", "group": "providers", - "weight": 229, + "weight": 226, "cookies": false, "type": "", "demo": "messaging\/update-apns-provider.md", @@ -19707,7 +19707,7 @@ "x-appwrite": { "method": "createFcmProvider", "group": "providers", - "weight": 214, + "weight": 211, "cookies": false, "type": "", "demo": "messaging\/create-fcm-provider.md", @@ -19862,7 +19862,7 @@ "x-appwrite": { "method": "updateFcmProvider", "group": "providers", - "weight": 228, + "weight": 225, "cookies": false, "type": "", "demo": "messaging\/update-fcm-provider.md", @@ -20018,7 +20018,7 @@ "x-appwrite": { "method": "createMailgunProvider", "group": "providers", - "weight": 205, + "weight": 202, "cookies": false, "type": "", "demo": "messaging\/create-mailgun-provider.md", @@ -20139,7 +20139,7 @@ "x-appwrite": { "method": "updateMailgunProvider", "group": "providers", - "weight": 219, + "weight": 216, "cookies": false, "type": "", "demo": "messaging\/update-mailgun-provider.md", @@ -20262,7 +20262,7 @@ "x-appwrite": { "method": "createMsg91Provider", "group": "providers", - "weight": 209, + "weight": 206, "cookies": false, "type": "", "demo": "messaging\/create-msg-91-provider.md", @@ -20360,7 +20360,7 @@ "x-appwrite": { "method": "updateMsg91Provider", "group": "providers", - "weight": 223, + "weight": 220, "cookies": false, "type": "", "demo": "messaging\/update-msg-91-provider.md", @@ -20461,7 +20461,7 @@ "x-appwrite": { "method": "createResendProvider", "group": "providers", - "weight": 207, + "weight": 204, "cookies": false, "type": "", "demo": "messaging\/create-resend-provider.md", @@ -20571,7 +20571,7 @@ "x-appwrite": { "method": "updateResendProvider", "group": "providers", - "weight": 221, + "weight": 218, "cookies": false, "type": "", "demo": "messaging\/update-resend-provider.md", @@ -20683,7 +20683,7 @@ "x-appwrite": { "method": "createSendgridProvider", "group": "providers", - "weight": 206, + "weight": 203, "cookies": false, "type": "", "demo": "messaging\/create-sendgrid-provider.md", @@ -20793,7 +20793,7 @@ "x-appwrite": { "method": "updateSendgridProvider", "group": "providers", - "weight": 220, + "weight": 217, "cookies": false, "type": "", "demo": "messaging\/update-sendgrid-provider.md", @@ -20905,7 +20905,7 @@ "x-appwrite": { "method": "createSmtpProvider", "group": "providers", - "weight": 208, + "weight": 205, "cookies": false, "type": "", "demo": "messaging\/create-smtp-provider.md", @@ -21142,7 +21142,7 @@ "x-appwrite": { "method": "updateSmtpProvider", "group": "providers", - "weight": 222, + "weight": 219, "cookies": false, "type": "", "demo": "messaging\/update-smtp-provider.md", @@ -21378,7 +21378,7 @@ "x-appwrite": { "method": "createTelesignProvider", "group": "providers", - "weight": 210, + "weight": 207, "cookies": false, "type": "", "demo": "messaging\/create-telesign-provider.md", @@ -21477,7 +21477,7 @@ "x-appwrite": { "method": "updateTelesignProvider", "group": "providers", - "weight": 224, + "weight": 221, "cookies": false, "type": "", "demo": "messaging\/update-telesign-provider.md", @@ -21578,7 +21578,7 @@ "x-appwrite": { "method": "createTextmagicProvider", "group": "providers", - "weight": 211, + "weight": 208, "cookies": false, "type": "", "demo": "messaging\/create-textmagic-provider.md", @@ -21677,7 +21677,7 @@ "x-appwrite": { "method": "updateTextmagicProvider", "group": "providers", - "weight": 225, + "weight": 222, "cookies": false, "type": "", "demo": "messaging\/update-textmagic-provider.md", @@ -21778,7 +21778,7 @@ "x-appwrite": { "method": "createTwilioProvider", "group": "providers", - "weight": 212, + "weight": 209, "cookies": false, "type": "", "demo": "messaging\/create-twilio-provider.md", @@ -21877,7 +21877,7 @@ "x-appwrite": { "method": "updateTwilioProvider", "group": "providers", - "weight": 226, + "weight": 223, "cookies": false, "type": "", "demo": "messaging\/update-twilio-provider.md", @@ -21978,7 +21978,7 @@ "x-appwrite": { "method": "createVonageProvider", "group": "providers", - "weight": 213, + "weight": 210, "cookies": false, "type": "", "demo": "messaging\/create-vonage-provider.md", @@ -22077,7 +22077,7 @@ "x-appwrite": { "method": "updateVonageProvider", "group": "providers", - "weight": 227, + "weight": 224, "cookies": false, "type": "", "demo": "messaging\/update-vonage-provider.md", @@ -22178,7 +22178,7 @@ "x-appwrite": { "method": "getProvider", "group": "providers", - "weight": 218, + "weight": 215, "cookies": false, "type": "", "demo": "messaging\/get-provider.md", @@ -22233,7 +22233,7 @@ "x-appwrite": { "method": "deleteProvider", "group": "providers", - "weight": 230, + "weight": 227, "cookies": false, "type": "", "demo": "messaging\/delete-provider.md", @@ -22297,7 +22297,7 @@ "x-appwrite": { "method": "listProviderLogs", "group": "providers", - "weight": 217, + "weight": 214, "cookies": false, "type": "", "demo": "messaging\/list-provider-logs.md", @@ -22385,7 +22385,7 @@ "x-appwrite": { "method": "listSubscriberLogs", "group": "subscribers", - "weight": 239, + "weight": 236, "cookies": false, "type": "", "demo": "messaging\/list-subscriber-logs.md", @@ -22473,7 +22473,7 @@ "x-appwrite": { "method": "listTopics", "group": "topics", - "weight": 232, + "weight": 229, "cookies": false, "type": "", "demo": "messaging\/list-topics.md", @@ -22560,7 +22560,7 @@ "x-appwrite": { "method": "createTopic", "group": "topics", - "weight": 231, + "weight": 228, "cookies": false, "type": "", "demo": "messaging\/create-topic.md", @@ -22645,7 +22645,7 @@ "x-appwrite": { "method": "getTopic", "group": "topics", - "weight": 234, + "weight": 231, "cookies": false, "type": "", "demo": "messaging\/get-topic.md", @@ -22707,7 +22707,7 @@ "x-appwrite": { "method": "updateTopic", "group": "topics", - "weight": 235, + "weight": 232, "cookies": false, "type": "", "demo": "messaging\/update-topic.md", @@ -22788,7 +22788,7 @@ "x-appwrite": { "method": "deleteTopic", "group": "topics", - "weight": 236, + "weight": 233, "cookies": false, "type": "", "demo": "messaging\/delete-topic.md", @@ -22852,7 +22852,7 @@ "x-appwrite": { "method": "listTopicLogs", "group": "topics", - "weight": 233, + "weight": 230, "cookies": false, "type": "", "demo": "messaging\/list-topic-logs.md", @@ -22940,7 +22940,7 @@ "x-appwrite": { "method": "listSubscribers", "group": "subscribers", - "weight": 238, + "weight": 235, "cookies": false, "type": "", "demo": "messaging\/list-subscribers.md", @@ -23037,7 +23037,7 @@ "x-appwrite": { "method": "createSubscriber", "group": "subscribers", - "weight": 237, + "weight": 234, "cookies": false, "type": "", "demo": "messaging\/create-subscriber.md", @@ -23130,7 +23130,7 @@ "x-appwrite": { "method": "getSubscriber", "group": "subscribers", - "weight": 240, + "weight": 237, "cookies": false, "type": "", "demo": "messaging\/get-subscriber.md", @@ -23195,7 +23195,7 @@ "x-appwrite": { "method": "deleteSubscriber", "group": "subscribers", - "weight": 241, + "weight": 238, "cookies": false, "type": "", "demo": "messaging\/delete-subscriber.md", @@ -23273,7 +23273,7 @@ "x-appwrite": { "method": "list", "group": "sites", - "weight": 485, + "weight": 482, "cookies": false, "type": "", "demo": "sites\/list.md", @@ -23359,7 +23359,7 @@ "x-appwrite": { "method": "create", "group": "sites", - "weight": 483, + "weight": 480, "cookies": false, "type": "", "demo": "sites\/create.md", @@ -23614,7 +23614,7 @@ "x-appwrite": { "method": "listFrameworks", "group": "frameworks", - "weight": 488, + "weight": 485, "cookies": false, "type": "", "demo": "sites\/list-frameworks.md", @@ -23665,7 +23665,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "frameworks", - "weight": 511, + "weight": 508, "cookies": false, "type": "", "demo": "sites\/list-specifications.md", @@ -23716,7 +23716,7 @@ "x-appwrite": { "method": "get", "group": "sites", - "weight": 484, + "weight": 481, "cookies": false, "type": "", "demo": "sites\/get.md", @@ -23777,7 +23777,7 @@ "x-appwrite": { "method": "update", "group": "sites", - "weight": 486, + "weight": 483, "cookies": false, "type": "", "demo": "sites\/update.md", @@ -24028,7 +24028,7 @@ "x-appwrite": { "method": "delete", "group": "sites", - "weight": 487, + "weight": 484, "cookies": false, "type": "", "demo": "sites\/delete.md", @@ -24091,7 +24091,7 @@ "x-appwrite": { "method": "updateSiteDeployment", "group": "sites", - "weight": 494, + "weight": 491, "cookies": false, "type": "", "demo": "sites\/update-site-deployment.md", @@ -24173,7 +24173,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 493, + "weight": 490, "cookies": false, "type": "", "demo": "sites\/list-deployments.md", @@ -24269,7 +24269,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 489, + "weight": 486, "cookies": false, "type": "upload", "demo": "sites\/create-deployment.md", @@ -24376,7 +24376,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 497, + "weight": 494, "cookies": false, "type": "", "demo": "sites\/create-duplicate-deployment.md", @@ -24458,7 +24458,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 490, + "weight": 487, "cookies": false, "type": "", "demo": "sites\/create-template-deployment.md", @@ -24576,7 +24576,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 491, + "weight": 488, "cookies": false, "type": "", "demo": "sites\/create-vcs-deployment.md", @@ -24676,7 +24676,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 492, + "weight": 489, "cookies": false, "type": "", "demo": "sites\/get-deployment.md", @@ -24740,7 +24740,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 495, + "weight": 492, "cookies": false, "type": "", "demo": "sites\/delete-deployment.md", @@ -24806,7 +24806,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 496, + "weight": 493, "cookies": false, "type": "location", "demo": "sites\/get-deployment-download.md", @@ -24898,7 +24898,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 498, + "weight": 495, "cookies": false, "type": "", "demo": "sites\/update-deployment-status.md", @@ -24971,7 +24971,7 @@ "x-appwrite": { "method": "listLogs", "group": "logs", - "weight": 500, + "weight": 497, "cookies": false, "type": "", "demo": "sites\/list-logs.md", @@ -25058,7 +25058,7 @@ "x-appwrite": { "method": "getLog", "group": "logs", - "weight": 499, + "weight": 496, "cookies": false, "type": "", "demo": "sites\/get-log.md", @@ -25122,7 +25122,7 @@ "x-appwrite": { "method": "deleteLog", "group": "logs", - "weight": 501, + "weight": 498, "cookies": false, "type": "", "demo": "sites\/delete-log.md", @@ -25195,7 +25195,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 504, + "weight": 501, "cookies": false, "type": "", "demo": "sites\/list-variables.md", @@ -25256,7 +25256,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 502, + "weight": 499, "cookies": false, "type": "", "demo": "sites\/create-variable.md", @@ -25349,7 +25349,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 503, + "weight": 500, "cookies": false, "type": "", "demo": "sites\/get-variable.md", @@ -25420,7 +25420,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 505, + "weight": 502, "cookies": false, "type": "", "demo": "sites\/update-variable.md", @@ -25515,7 +25515,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 506, + "weight": 503, "cookies": false, "type": "", "demo": "sites\/delete-variable.md", @@ -25588,7 +25588,7 @@ "x-appwrite": { "method": "listBuckets", "group": "buckets", - "weight": 538, + "weight": 535, "cookies": false, "type": "", "demo": "storage\/list-buckets.md", @@ -25675,7 +25675,7 @@ "x-appwrite": { "method": "createBucket", "group": "buckets", - "weight": 536, + "weight": 533, "cookies": false, "type": "", "demo": "storage\/create-bucket.md", @@ -25812,7 +25812,7 @@ "x-appwrite": { "method": "getBucket", "group": "buckets", - "weight": 537, + "weight": 534, "cookies": false, "type": "", "demo": "storage\/get-bucket.md", @@ -25874,7 +25874,7 @@ "x-appwrite": { "method": "updateBucket", "group": "buckets", - "weight": 539, + "weight": 536, "cookies": false, "type": "", "demo": "storage\/update-bucket.md", @@ -26008,7 +26008,7 @@ "x-appwrite": { "method": "deleteBucket", "group": "buckets", - "weight": 540, + "weight": 537, "cookies": false, "type": "", "demo": "storage\/delete-bucket.md", @@ -26072,7 +26072,7 @@ "x-appwrite": { "method": "listFiles", "group": "files", - "weight": 543, + "weight": 540, "cookies": false, "type": "", "demo": "storage\/list-files.md", @@ -26173,7 +26173,7 @@ "x-appwrite": { "method": "createFile", "group": "files", - "weight": 541, + "weight": 538, "cookies": false, "type": "upload", "demo": "storage\/create-file.md", @@ -26277,7 +26277,7 @@ "x-appwrite": { "method": "getFile", "group": "files", - "weight": 542, + "weight": 539, "cookies": false, "type": "", "demo": "storage\/get-file.md", @@ -26353,7 +26353,7 @@ "x-appwrite": { "method": "updateFile", "group": "files", - "weight": 544, + "weight": 541, "cookies": false, "type": "", "demo": "storage\/update-file.md", @@ -26447,7 +26447,7 @@ "x-appwrite": { "method": "deleteFile", "group": "files", - "weight": 545, + "weight": 542, "cookies": false, "type": "", "demo": "storage\/delete-file.md", @@ -26518,7 +26518,7 @@ "x-appwrite": { "method": "getFileDownload", "group": "files", - "weight": 547, + "weight": 544, "cookies": false, "type": "location", "demo": "storage\/get-file-download.md", @@ -26600,7 +26600,7 @@ "x-appwrite": { "method": "getFilePreview", "group": "files", - "weight": 546, + "weight": 543, "cookies": false, "type": "location", "demo": "storage\/get-file-preview.md", @@ -26832,7 +26832,7 @@ "x-appwrite": { "method": "getFileView", "group": "files", - "weight": 548, + "weight": 545, "cookies": false, "type": "location", "demo": "storage\/get-file-view.md", @@ -26921,7 +26921,7 @@ "x-appwrite": { "method": "list", "group": "tablesdb", - "weight": 352, + "weight": 349, "cookies": false, "type": "", "demo": "tablesdb\/list.md", @@ -27008,7 +27008,7 @@ "x-appwrite": { "method": "create", "group": "tablesdb", - "weight": 348, + "weight": 345, "cookies": false, "type": "", "demo": "tablesdb\/create.md", @@ -27090,7 +27090,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 419, + "weight": 416, "cookies": false, "type": "", "demo": "tablesdb\/list-transactions.md", @@ -27162,7 +27162,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 415, + "weight": 412, "cookies": false, "type": "", "demo": "tablesdb\/create-transaction.md", @@ -27238,7 +27238,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 416, + "weight": 413, "cookies": false, "type": "", "demo": "tablesdb\/get-transaction.md", @@ -27307,7 +27307,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 417, + "weight": 414, "cookies": false, "type": "", "demo": "tablesdb\/update-transaction.md", @@ -27390,7 +27390,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 418, + "weight": 415, "cookies": false, "type": "", "demo": "tablesdb\/delete-transaction.md", @@ -27461,7 +27461,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 420, + "weight": 417, "cookies": false, "type": "", "demo": "tablesdb\/create-operations.md", @@ -27551,7 +27551,7 @@ "x-appwrite": { "method": "get", "group": "tablesdb", - "weight": 349, + "weight": 346, "cookies": false, "type": "", "demo": "tablesdb\/get.md", @@ -27613,7 +27613,7 @@ "x-appwrite": { "method": "update", "group": "tablesdb", - "weight": 350, + "weight": 347, "cookies": false, "type": "", "demo": "tablesdb\/update.md", @@ -27689,7 +27689,7 @@ "x-appwrite": { "method": "delete", "group": "tablesdb", - "weight": 351, + "weight": 348, "cookies": false, "type": "", "demo": "tablesdb\/delete.md", @@ -27753,7 +27753,7 @@ "x-appwrite": { "method": "listTables", "group": "tables", - "weight": 359, + "weight": 356, "cookies": false, "type": "", "demo": "tablesdb\/list-tables.md", @@ -27853,7 +27853,7 @@ "x-appwrite": { "method": "createTable", "group": "tables", - "weight": 355, + "weight": 352, "cookies": false, "type": "", "demo": "tablesdb\/create-table.md", @@ -27980,7 +27980,7 @@ "x-appwrite": { "method": "getTable", "group": "tables", - "weight": 356, + "weight": 353, "cookies": false, "type": "", "demo": "tablesdb\/get-table.md", @@ -28055,7 +28055,7 @@ "x-appwrite": { "method": "updateTable", "group": "tables", - "weight": 357, + "weight": 354, "cookies": false, "type": "", "demo": "tablesdb\/update-table.md", @@ -28158,7 +28158,7 @@ "x-appwrite": { "method": "deleteTable", "group": "tables", - "weight": 358, + "weight": 355, "cookies": false, "type": "", "demo": "tablesdb\/delete-table.md", @@ -28235,7 +28235,7 @@ "x-appwrite": { "method": "listColumns", "group": "columns", - "weight": 364, + "weight": 361, "cookies": false, "type": "", "demo": "tablesdb\/list-columns.md", @@ -28336,7 +28336,7 @@ "x-appwrite": { "method": "createBooleanColumn", "group": "columns", - "weight": 365, + "weight": 362, "cookies": false, "type": "", "demo": "tablesdb\/create-boolean-column.md", @@ -28449,7 +28449,7 @@ "x-appwrite": { "method": "updateBooleanColumn", "group": "columns", - "weight": 366, + "weight": 363, "cookies": false, "type": "", "demo": "tablesdb\/update-boolean-column.md", @@ -28567,7 +28567,7 @@ "x-appwrite": { "method": "createDatetimeColumn", "group": "columns", - "weight": 367, + "weight": 364, "cookies": false, "type": "", "demo": "tablesdb\/create-datetime-column.md", @@ -28680,7 +28680,7 @@ "x-appwrite": { "method": "updateDatetimeColumn", "group": "columns", - "weight": 368, + "weight": 365, "cookies": false, "type": "", "demo": "tablesdb\/update-datetime-column.md", @@ -28798,7 +28798,7 @@ "x-appwrite": { "method": "createEmailColumn", "group": "columns", - "weight": 369, + "weight": 366, "cookies": false, "type": "", "demo": "tablesdb\/create-email-column.md", @@ -28912,7 +28912,7 @@ "x-appwrite": { "method": "updateEmailColumn", "group": "columns", - "weight": 370, + "weight": 367, "cookies": false, "type": "", "demo": "tablesdb\/update-email-column.md", @@ -29031,7 +29031,7 @@ "x-appwrite": { "method": "createEnumColumn", "group": "columns", - "weight": 371, + "weight": 368, "cookies": false, "type": "", "demo": "tablesdb\/create-enum-column.md", @@ -29153,7 +29153,7 @@ "x-appwrite": { "method": "updateEnumColumn", "group": "columns", - "weight": 372, + "weight": 369, "cookies": false, "type": "", "demo": "tablesdb\/update-enum-column.md", @@ -29280,7 +29280,7 @@ "x-appwrite": { "method": "createFloatColumn", "group": "columns", - "weight": 373, + "weight": 370, "cookies": false, "type": "", "demo": "tablesdb\/create-float-column.md", @@ -29408,7 +29408,7 @@ "x-appwrite": { "method": "updateFloatColumn", "group": "columns", - "weight": 374, + "weight": 371, "cookies": false, "type": "", "demo": "tablesdb\/update-float-column.md", @@ -29541,7 +29541,7 @@ "x-appwrite": { "method": "createIntegerColumn", "group": "columns", - "weight": 375, + "weight": 372, "cookies": false, "type": "", "demo": "tablesdb\/create-integer-column.md", @@ -29669,7 +29669,7 @@ "x-appwrite": { "method": "updateIntegerColumn", "group": "columns", - "weight": 376, + "weight": 373, "cookies": false, "type": "", "demo": "tablesdb\/update-integer-column.md", @@ -29802,7 +29802,7 @@ "x-appwrite": { "method": "createIpColumn", "group": "columns", - "weight": 377, + "weight": 374, "cookies": false, "type": "", "demo": "tablesdb\/create-ip-column.md", @@ -29915,7 +29915,7 @@ "x-appwrite": { "method": "updateIpColumn", "group": "columns", - "weight": 378, + "weight": 375, "cookies": false, "type": "", "demo": "tablesdb\/update-ip-column.md", @@ -30033,7 +30033,7 @@ "x-appwrite": { "method": "createLineColumn", "group": "columns", - "weight": 379, + "weight": 376, "cookies": false, "type": "", "demo": "tablesdb\/create-line-column.md", @@ -30148,7 +30148,7 @@ "x-appwrite": { "method": "updateLineColumn", "group": "columns", - "weight": 380, + "weight": 377, "cookies": false, "type": "", "demo": "tablesdb\/update-line-column.md", @@ -30272,7 +30272,7 @@ "x-appwrite": { "method": "createLongtextColumn", "group": "columns", - "weight": 397, + "weight": 394, "cookies": false, "type": "", "demo": "tablesdb\/create-longtext-column.md", @@ -30385,7 +30385,7 @@ "x-appwrite": { "method": "updateLongtextColumn", "group": "columns", - "weight": 398, + "weight": 395, "cookies": false, "type": "", "demo": "tablesdb\/update-longtext-column.md", @@ -30503,7 +30503,7 @@ "x-appwrite": { "method": "createMediumtextColumn", "group": "columns", - "weight": 395, + "weight": 392, "cookies": false, "type": "", "demo": "tablesdb\/create-mediumtext-column.md", @@ -30616,7 +30616,7 @@ "x-appwrite": { "method": "updateMediumtextColumn", "group": "columns", - "weight": 396, + "weight": 393, "cookies": false, "type": "", "demo": "tablesdb\/update-mediumtext-column.md", @@ -30734,7 +30734,7 @@ "x-appwrite": { "method": "createPointColumn", "group": "columns", - "weight": 381, + "weight": 378, "cookies": false, "type": "", "demo": "tablesdb\/create-point-column.md", @@ -30849,7 +30849,7 @@ "x-appwrite": { "method": "updatePointColumn", "group": "columns", - "weight": 382, + "weight": 379, "cookies": false, "type": "", "demo": "tablesdb\/update-point-column.md", @@ -30973,7 +30973,7 @@ "x-appwrite": { "method": "createPolygonColumn", "group": "columns", - "weight": 383, + "weight": 380, "cookies": false, "type": "", "demo": "tablesdb\/create-polygon-column.md", @@ -31088,7 +31088,7 @@ "x-appwrite": { "method": "updatePolygonColumn", "group": "columns", - "weight": 384, + "weight": 381, "cookies": false, "type": "", "demo": "tablesdb\/update-polygon-column.md", @@ -31212,7 +31212,7 @@ "x-appwrite": { "method": "createRelationshipColumn", "group": "columns", - "weight": 385, + "weight": 382, "cookies": false, "type": "", "demo": "tablesdb\/create-relationship-column.md", @@ -31351,7 +31351,7 @@ "x-appwrite": { "method": "createStringColumn", "group": "columns", - "weight": 387, + "weight": 384, "cookies": false, "type": "", "demo": "tablesdb\/create-string-column.md", @@ -31480,7 +31480,7 @@ "x-appwrite": { "method": "updateStringColumn", "group": "columns", - "weight": 388, + "weight": 385, "cookies": false, "type": "", "demo": "tablesdb\/update-string-column.md", @@ -31609,7 +31609,7 @@ "x-appwrite": { "method": "createTextColumn", "group": "columns", - "weight": 393, + "weight": 390, "cookies": false, "type": "", "demo": "tablesdb\/create-text-column.md", @@ -31722,7 +31722,7 @@ "x-appwrite": { "method": "updateTextColumn", "group": "columns", - "weight": 394, + "weight": 391, "cookies": false, "type": "", "demo": "tablesdb\/update-text-column.md", @@ -31840,7 +31840,7 @@ "x-appwrite": { "method": "createUrlColumn", "group": "columns", - "weight": 389, + "weight": 386, "cookies": false, "type": "", "demo": "tablesdb\/create-url-column.md", @@ -31954,7 +31954,7 @@ "x-appwrite": { "method": "updateUrlColumn", "group": "columns", - "weight": 390, + "weight": 387, "cookies": false, "type": "", "demo": "tablesdb\/update-url-column.md", @@ -32073,7 +32073,7 @@ "x-appwrite": { "method": "createVarcharColumn", "group": "columns", - "weight": 391, + "weight": 388, "cookies": false, "type": "", "demo": "tablesdb\/create-varchar-column.md", @@ -32193,7 +32193,7 @@ "x-appwrite": { "method": "updateVarcharColumn", "group": "columns", - "weight": 392, + "weight": 389, "cookies": false, "type": "", "demo": "tablesdb\/update-varchar-column.md", @@ -32349,7 +32349,7 @@ "x-appwrite": { "method": "getColumn", "group": "columns", - "weight": 362, + "weight": 359, "cookies": false, "type": "", "demo": "tablesdb\/get-column.md", @@ -32426,7 +32426,7 @@ "x-appwrite": { "method": "deleteColumn", "group": "columns", - "weight": 363, + "weight": 360, "cookies": false, "type": "", "demo": "tablesdb\/delete-column.md", @@ -32512,7 +32512,7 @@ "x-appwrite": { "method": "updateRelationshipColumn", "group": "columns", - "weight": 386, + "weight": 383, "cookies": false, "type": "", "demo": "tablesdb\/update-relationship-column.md", @@ -32628,7 +32628,7 @@ "x-appwrite": { "method": "listIndexes", "group": "indexes", - "weight": 402, + "weight": 399, "cookies": false, "type": "", "demo": "tablesdb\/list-indexes.md", @@ -32727,7 +32727,7 @@ "x-appwrite": { "method": "createIndex", "group": "indexes", - "weight": 399, + "weight": 396, "cookies": false, "type": "", "demo": "tablesdb\/create-index.md", @@ -32868,7 +32868,7 @@ "x-appwrite": { "method": "getIndex", "group": "indexes", - "weight": 400, + "weight": 397, "cookies": false, "type": "", "demo": "tablesdb\/get-index.md", @@ -32945,7 +32945,7 @@ "x-appwrite": { "method": "deleteIndex", "group": "indexes", - "weight": 401, + "weight": 398, "cookies": false, "type": "", "demo": "tablesdb\/delete-index.md", @@ -33031,7 +33031,7 @@ "x-appwrite": { "method": "listRows", "group": "rows", - "weight": 411, + "weight": 408, "cookies": false, "type": "", "demo": "tablesdb\/list-rows.md", @@ -33144,7 +33144,7 @@ "x-appwrite": { "method": "createRow", "group": "rows", - "weight": 403, + "weight": 400, "cookies": false, "type": "", "demo": "tablesdb\/create-row.md", @@ -33330,7 +33330,7 @@ "x-appwrite": { "method": "upsertRows", "group": "rows", - "weight": 408, + "weight": 405, "cookies": false, "type": "", "demo": "tablesdb\/upsert-rows.md", @@ -33464,7 +33464,7 @@ "x-appwrite": { "method": "updateRows", "group": "rows", - "weight": 406, + "weight": 403, "cookies": false, "type": "", "demo": "tablesdb\/update-rows.md", @@ -33569,7 +33569,7 @@ "x-appwrite": { "method": "deleteRows", "group": "rows", - "weight": 410, + "weight": 407, "cookies": false, "type": "", "demo": "tablesdb\/delete-rows.md", @@ -33671,7 +33671,7 @@ "x-appwrite": { "method": "getRow", "group": "rows", - "weight": 404, + "weight": 401, "cookies": false, "type": "", "demo": "tablesdb\/get-row.md", @@ -33783,7 +33783,7 @@ "x-appwrite": { "method": "upsertRow", "group": "rows", - "weight": 407, + "weight": 404, "cookies": false, "type": "", "demo": "tablesdb\/upsert-row.md", @@ -33936,7 +33936,7 @@ "x-appwrite": { "method": "updateRow", "group": "rows", - "weight": 405, + "weight": 402, "cookies": false, "type": "", "demo": "tablesdb\/update-row.md", @@ -34049,7 +34049,7 @@ "x-appwrite": { "method": "deleteRow", "group": "rows", - "weight": 409, + "weight": 406, "cookies": false, "type": "", "demo": "tablesdb\/delete-row.md", @@ -34157,7 +34157,7 @@ "x-appwrite": { "method": "decrementRowColumn", "group": "rows", - "weight": 414, + "weight": 411, "cookies": false, "type": "", "demo": "tablesdb\/decrement-row-column.md", @@ -34287,7 +34287,7 @@ "x-appwrite": { "method": "incrementRowColumn", "group": "rows", - "weight": 413, + "weight": 410, "cookies": false, "type": "", "demo": "tablesdb\/increment-row-column.md", @@ -35537,7 +35537,7 @@ "x-appwrite": { "method": "list", "group": "files", - "weight": 533, + "weight": 530, "cookies": false, "type": "", "demo": "tokens\/list.md", @@ -35632,7 +35632,7 @@ "x-appwrite": { "method": "createFileToken", "group": "files", - "weight": 531, + "weight": 528, "cookies": false, "type": "", "demo": "tokens\/create-file-token.md", @@ -35722,7 +35722,7 @@ "x-appwrite": { "method": "get", "group": "tokens", - "weight": 532, + "weight": 529, "cookies": false, "type": "", "demo": "tokens\/get.md", @@ -35783,7 +35783,7 @@ "x-appwrite": { "method": "update", "group": "tokens", - "weight": 534, + "weight": 531, "cookies": false, "type": "", "demo": "tokens\/update.md", @@ -35854,7 +35854,7 @@ "x-appwrite": { "method": "delete", "group": "tokens", - "weight": 535, + "weight": 532, "cookies": false, "type": "", "demo": "tokens\/delete.md", @@ -40988,6 +40988,18 @@ "$ref": "#\/components\/schemas\/index" }, "x-example": {} + }, + "bytesMax": { + "type": "integer", + "description": "Maximum document size in bytes. Returns 0 when no limit applies.", + "x-example": 65535, + "format": "int32" + }, + "bytesUsed": { + "type": "integer", + "description": "Currently used document size in bytes based on defined attributes.", + "x-example": 1500, + "format": "int32" } }, "required": [ @@ -41000,7 +41012,9 @@ "enabled", "documentSecurity", "attributes", - "indexes" + "indexes", + "bytesMax", + "bytesUsed" ], "example": { "$id": "5e5ea5c16897e", @@ -41014,7 +41028,9 @@ "enabled": false, "documentSecurity": true, "attributes": {}, - "indexes": {} + "indexes": {}, + "bytesMax": 65535, + "bytesUsed": 1500 } }, "attributeList": { @@ -42781,6 +42797,18 @@ "$ref": "#\/components\/schemas\/columnIndex" }, "x-example": {} + }, + "bytesMax": { + "type": "integer", + "description": "Maximum row size in bytes. Returns 0 when no limit applies.", + "x-example": 65535, + "format": "int32" + }, + "bytesUsed": { + "type": "integer", + "description": "Currently used row size in bytes based on defined columns.", + "x-example": 1500, + "format": "int32" } }, "required": [ @@ -42793,7 +42821,9 @@ "enabled", "rowSecurity", "columns", - "indexes" + "indexes", + "bytesMax", + "bytesUsed" ], "example": { "$id": "5e5ea5c16897e", @@ -42807,7 +42837,9 @@ "enabled": false, "rowSecurity": true, "columns": {}, - "indexes": {} + "indexes": {}, + "bytesMax": 65535, + "bytesUsed": 1500 } }, "columnList": { diff --git a/app/config/specs/open-api3-latest-client.json b/app/config/specs/open-api3-latest-client.json index 592dc5b052..1dd3c60448 100644 --- a/app/config/specs/open-api3-latest-client.json +++ b/app/config/specs/open-api3-latest-client.json @@ -555,7 +555,7 @@ "x-appwrite": { "method": "updateMFA", "group": "mfa", - "weight": 253, + "weight": 250, "cookies": false, "type": "", "demo": "account\/update-mfa.md", @@ -627,7 +627,7 @@ "x-appwrite": { "method": "createMfaAuthenticator", "group": "mfa", - "weight": 255, + "weight": 252, "cookies": false, "type": "", "demo": "account\/create-mfa-authenticator.md", @@ -751,7 +751,7 @@ "x-appwrite": { "method": "updateMfaAuthenticator", "group": "mfa", - "weight": 256, + "weight": 253, "cookies": false, "type": "", "demo": "account\/update-mfa-authenticator.md", @@ -891,7 +891,7 @@ "x-appwrite": { "method": "deleteMfaAuthenticator", "group": "mfa", - "weight": 257, + "weight": 254, "cookies": false, "type": "", "demo": "account\/delete-mfa-authenticator.md", @@ -1015,7 +1015,7 @@ "x-appwrite": { "method": "createMfaChallenge", "group": "mfa", - "weight": 261, + "weight": 258, "cookies": false, "type": "", "demo": "account\/create-mfa-challenge.md", @@ -1149,7 +1149,7 @@ "x-appwrite": { "method": "updateMfaChallenge", "group": "mfa", - "weight": 262, + "weight": 259, "cookies": false, "type": "", "demo": "account\/update-mfa-challenge.md", @@ -1287,7 +1287,7 @@ "x-appwrite": { "method": "listMfaFactors", "group": "mfa", - "weight": 254, + "weight": 251, "cookies": false, "type": "", "demo": "account\/list-mfa-factors.md", @@ -1388,7 +1388,7 @@ "x-appwrite": { "method": "getMfaRecoveryCodes", "group": "mfa", - "weight": 260, + "weight": 257, "cookies": false, "type": "", "demo": "account\/get-mfa-recovery-codes.md", @@ -1487,7 +1487,7 @@ "x-appwrite": { "method": "createMfaRecoveryCodes", "group": "mfa", - "weight": 258, + "weight": 255, "cookies": false, "type": "", "demo": "account\/create-mfa-recovery-codes.md", @@ -1586,7 +1586,7 @@ "x-appwrite": { "method": "updateMfaRecoveryCodes", "group": "mfa", - "weight": 259, + "weight": 256, "cookies": false, "type": "", "demo": "account\/update-mfa-recovery-codes.md", @@ -4051,7 +4051,7 @@ "x-appwrite": { "method": "getBrowser", "group": null, - "weight": 264, + "weight": 261, "cookies": false, "type": "location", "demo": "avatars\/get-browser.md", @@ -4179,7 +4179,7 @@ "x-appwrite": { "method": "getCreditCard", "group": null, - "weight": 263, + "weight": 260, "cookies": false, "type": "location", "demo": "avatars\/get-credit-card.md", @@ -4313,7 +4313,7 @@ "x-appwrite": { "method": "getFavicon", "group": null, - "weight": 267, + "weight": 264, "cookies": false, "type": "location", "demo": "avatars\/get-favicon.md", @@ -4373,7 +4373,7 @@ "x-appwrite": { "method": "getFlag", "group": null, - "weight": 265, + "weight": 262, "cookies": false, "type": "location", "demo": "avatars\/get-flag.md", @@ -4863,7 +4863,7 @@ "x-appwrite": { "method": "getImage", "group": null, - "weight": 266, + "weight": 263, "cookies": false, "type": "location", "demo": "avatars\/get-image.md", @@ -4947,7 +4947,7 @@ "x-appwrite": { "method": "getInitials", "group": null, - "weight": 269, + "weight": 266, "cookies": false, "type": "location", "demo": "avatars\/get-initials.md", @@ -5041,7 +5041,7 @@ "x-appwrite": { "method": "getQR", "group": null, - "weight": 268, + "weight": 265, "cookies": false, "type": "location", "demo": "avatars\/get-qr.md", @@ -5135,7 +5135,7 @@ "x-appwrite": { "method": "getScreenshot", "group": null, - "weight": 270, + "weight": 267, "cookies": false, "type": "location", "demo": "avatars\/get-screenshot.md", @@ -5888,7 +5888,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 346, + "weight": 343, "cookies": false, "type": "", "demo": "databases\/list-transactions.md", @@ -5955,7 +5955,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 342, + "weight": 339, "cookies": false, "type": "", "demo": "databases\/create-transaction.md", @@ -6026,7 +6026,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 343, + "weight": 340, "cookies": false, "type": "", "demo": "databases\/get-transaction.md", @@ -6090,7 +6090,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 344, + "weight": 341, "cookies": false, "type": "", "demo": "databases\/update-transaction.md", @@ -6168,7 +6168,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 345, + "weight": 342, "cookies": false, "type": "", "demo": "databases\/delete-transaction.md", @@ -6234,7 +6234,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 347, + "weight": 344, "cookies": false, "type": "", "demo": "databases\/create-operations.md", @@ -6319,7 +6319,7 @@ "x-appwrite": { "method": "listDocuments", "group": "documents", - "weight": 297, + "weight": 294, "cookies": false, "type": "", "demo": "databases\/list-documents.md", @@ -6431,7 +6431,7 @@ "x-appwrite": { "method": "createDocument", "group": "documents", - "weight": 289, + "weight": 286, "cookies": false, "type": "", "demo": "databases\/create-document.md", @@ -6592,7 +6592,7 @@ "x-appwrite": { "method": "getDocument", "group": "documents", - "weight": 290, + "weight": 287, "cookies": false, "type": "", "demo": "databases\/get-document.md", @@ -6703,7 +6703,7 @@ "x-appwrite": { "method": "upsertDocument", "group": "documents", - "weight": 293, + "weight": 290, "cookies": false, "type": "", "demo": "databases\/upsert-document.md", @@ -6858,7 +6858,7 @@ "x-appwrite": { "method": "updateDocument", "group": "documents", - "weight": 291, + "weight": 288, "cookies": false, "type": "", "demo": "databases\/update-document.md", @@ -6970,7 +6970,7 @@ "x-appwrite": { "method": "deleteDocument", "group": "documents", - "weight": 295, + "weight": 292, "cookies": false, "type": "", "demo": "databases\/delete-document.md", @@ -7077,7 +7077,7 @@ "x-appwrite": { "method": "decrementDocumentAttribute", "group": "documents", - "weight": 300, + "weight": 297, "cookies": false, "type": "", "demo": "databases\/decrement-document-attribute.md", @@ -7206,7 +7206,7 @@ "x-appwrite": { "method": "incrementDocumentAttribute", "group": "documents", - "weight": 299, + "weight": 296, "cookies": false, "type": "", "demo": "databases\/increment-document-attribute.md", @@ -7335,7 +7335,7 @@ "x-appwrite": { "method": "listExecutions", "group": "executions", - "weight": 447, + "weight": 444, "cookies": false, "type": "", "demo": "functions\/list-executions.md", @@ -7422,7 +7422,7 @@ "x-appwrite": { "method": "createExecution", "group": "executions", - "weight": 445, + "weight": 442, "cookies": false, "type": "", "demo": "functions\/create-execution.md", @@ -7540,7 +7540,7 @@ "x-appwrite": { "method": "getExecution", "group": "executions", - "weight": 446, + "weight": 443, "cookies": false, "type": "", "demo": "functions\/get-execution.md", @@ -7615,7 +7615,7 @@ "x-appwrite": { "method": "query", "group": "graphql", - "weight": 190, + "weight": 187, "cookies": false, "type": "graphql", "demo": "graphql\/query.md", @@ -7669,7 +7669,7 @@ "x-appwrite": { "method": "mutation", "group": "graphql", - "weight": 189, + "weight": 186, "cookies": false, "type": "graphql", "demo": "graphql\/mutation.md", @@ -8155,7 +8155,7 @@ "x-appwrite": { "method": "createSubscriber", "group": "subscribers", - "weight": 237, + "weight": 234, "cookies": false, "type": "", "demo": "messaging\/create-subscriber.md", @@ -8239,7 +8239,7 @@ "x-appwrite": { "method": "deleteSubscriber", "group": "subscribers", - "weight": 241, + "weight": 238, "cookies": false, "type": "", "demo": "messaging\/delete-subscriber.md", @@ -8315,7 +8315,7 @@ "x-appwrite": { "method": "listFiles", "group": "files", - "weight": 543, + "weight": 540, "cookies": false, "type": "", "demo": "storage\/list-files.md", @@ -8414,7 +8414,7 @@ "x-appwrite": { "method": "createFile", "group": "files", - "weight": 541, + "weight": 538, "cookies": false, "type": "upload", "demo": "storage\/create-file.md", @@ -8516,7 +8516,7 @@ "x-appwrite": { "method": "getFile", "group": "files", - "weight": 542, + "weight": 539, "cookies": false, "type": "", "demo": "storage\/get-file.md", @@ -8590,7 +8590,7 @@ "x-appwrite": { "method": "updateFile", "group": "files", - "weight": 544, + "weight": 541, "cookies": false, "type": "", "demo": "storage\/update-file.md", @@ -8682,7 +8682,7 @@ "x-appwrite": { "method": "deleteFile", "group": "files", - "weight": 545, + "weight": 542, "cookies": false, "type": "", "demo": "storage\/delete-file.md", @@ -8751,7 +8751,7 @@ "x-appwrite": { "method": "getFileDownload", "group": "files", - "weight": 547, + "weight": 544, "cookies": false, "type": "location", "demo": "storage\/get-file-download.md", @@ -8831,7 +8831,7 @@ "x-appwrite": { "method": "getFilePreview", "group": "files", - "weight": 546, + "weight": 543, "cookies": false, "type": "location", "demo": "storage\/get-file-preview.md", @@ -9061,7 +9061,7 @@ "x-appwrite": { "method": "getFileView", "group": "files", - "weight": 548, + "weight": 545, "cookies": false, "type": "location", "demo": "storage\/get-file-view.md", @@ -9148,7 +9148,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 419, + "weight": 416, "cookies": false, "type": "", "demo": "tablesdb\/list-transactions.md", @@ -9218,7 +9218,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 415, + "weight": 412, "cookies": false, "type": "", "demo": "tablesdb\/create-transaction.md", @@ -9292,7 +9292,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 416, + "weight": 413, "cookies": false, "type": "", "demo": "tablesdb\/get-transaction.md", @@ -9359,7 +9359,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 417, + "weight": 414, "cookies": false, "type": "", "demo": "tablesdb\/update-transaction.md", @@ -9440,7 +9440,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 418, + "weight": 415, "cookies": false, "type": "", "demo": "tablesdb\/delete-transaction.md", @@ -9509,7 +9509,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 420, + "weight": 417, "cookies": false, "type": "", "demo": "tablesdb\/create-operations.md", @@ -9597,7 +9597,7 @@ "x-appwrite": { "method": "listRows", "group": "rows", - "weight": 411, + "weight": 408, "cookies": false, "type": "", "demo": "tablesdb\/list-rows.md", @@ -9708,7 +9708,7 @@ "x-appwrite": { "method": "createRow", "group": "rows", - "weight": 403, + "weight": 400, "cookies": false, "type": "", "demo": "tablesdb\/create-row.md", @@ -9864,7 +9864,7 @@ "x-appwrite": { "method": "getRow", "group": "rows", - "weight": 404, + "weight": 401, "cookies": false, "type": "", "demo": "tablesdb\/get-row.md", @@ -9974,7 +9974,7 @@ "x-appwrite": { "method": "upsertRow", "group": "rows", - "weight": 407, + "weight": 404, "cookies": false, "type": "", "demo": "tablesdb\/upsert-row.md", @@ -10124,7 +10124,7 @@ "x-appwrite": { "method": "updateRow", "group": "rows", - "weight": 405, + "weight": 402, "cookies": false, "type": "", "demo": "tablesdb\/update-row.md", @@ -10235,7 +10235,7 @@ "x-appwrite": { "method": "deleteRow", "group": "rows", - "weight": 409, + "weight": 406, "cookies": false, "type": "", "demo": "tablesdb\/delete-row.md", @@ -10341,7 +10341,7 @@ "x-appwrite": { "method": "decrementRowColumn", "group": "rows", - "weight": 414, + "weight": 411, "cookies": false, "type": "", "demo": "tablesdb\/decrement-row-column.md", @@ -10469,7 +10469,7 @@ "x-appwrite": { "method": "incrementRowColumn", "group": "rows", - "weight": 413, + "weight": 410, "cookies": false, "type": "", "demo": "tablesdb\/increment-row-column.md", diff --git a/app/config/specs/open-api3-latest-console.json b/app/config/specs/open-api3-latest-console.json index d82b0f6cb9..e494529d75 100644 --- a/app/config/specs/open-api3-latest-console.json +++ b/app/config/specs/open-api3-latest-console.json @@ -588,7 +588,7 @@ "x-appwrite": { "method": "updateMFA", "group": "mfa", - "weight": 253, + "weight": 250, "cookies": false, "type": "", "demo": "account\/update-mfa.md", @@ -659,7 +659,7 @@ "x-appwrite": { "method": "createMfaAuthenticator", "group": "mfa", - "weight": 255, + "weight": 252, "cookies": false, "type": "", "demo": "account\/create-mfa-authenticator.md", @@ -782,7 +782,7 @@ "x-appwrite": { "method": "updateMfaAuthenticator", "group": "mfa", - "weight": 256, + "weight": 253, "cookies": false, "type": "", "demo": "account\/update-mfa-authenticator.md", @@ -921,7 +921,7 @@ "x-appwrite": { "method": "deleteMfaAuthenticator", "group": "mfa", - "weight": 257, + "weight": 254, "cookies": false, "type": "", "demo": "account\/delete-mfa-authenticator.md", @@ -1044,7 +1044,7 @@ "x-appwrite": { "method": "createMfaChallenge", "group": "mfa", - "weight": 261, + "weight": 258, "cookies": false, "type": "", "demo": "account\/create-mfa-challenge.md", @@ -1177,7 +1177,7 @@ "x-appwrite": { "method": "updateMfaChallenge", "group": "mfa", - "weight": 262, + "weight": 259, "cookies": false, "type": "", "demo": "account\/update-mfa-challenge.md", @@ -1314,7 +1314,7 @@ "x-appwrite": { "method": "listMfaFactors", "group": "mfa", - "weight": 254, + "weight": 251, "cookies": false, "type": "", "demo": "account\/list-mfa-factors.md", @@ -1414,7 +1414,7 @@ "x-appwrite": { "method": "getMfaRecoveryCodes", "group": "mfa", - "weight": 260, + "weight": 257, "cookies": false, "type": "", "demo": "account\/get-mfa-recovery-codes.md", @@ -1512,7 +1512,7 @@ "x-appwrite": { "method": "createMfaRecoveryCodes", "group": "mfa", - "weight": 258, + "weight": 255, "cookies": false, "type": "", "demo": "account\/create-mfa-recovery-codes.md", @@ -1610,7 +1610,7 @@ "x-appwrite": { "method": "updateMfaRecoveryCodes", "group": "mfa", - "weight": 259, + "weight": 256, "cookies": false, "type": "", "demo": "account\/update-mfa-recovery-codes.md", @@ -4044,7 +4044,7 @@ "x-appwrite": { "method": "getBrowser", "group": null, - "weight": 264, + "weight": 261, "cookies": false, "type": "location", "demo": "avatars\/get-browser.md", @@ -4172,7 +4172,7 @@ "x-appwrite": { "method": "getCreditCard", "group": null, - "weight": 263, + "weight": 260, "cookies": false, "type": "location", "demo": "avatars\/get-credit-card.md", @@ -4306,7 +4306,7 @@ "x-appwrite": { "method": "getFavicon", "group": null, - "weight": 267, + "weight": 264, "cookies": false, "type": "location", "demo": "avatars\/get-favicon.md", @@ -4366,7 +4366,7 @@ "x-appwrite": { "method": "getFlag", "group": null, - "weight": 265, + "weight": 262, "cookies": false, "type": "location", "demo": "avatars\/get-flag.md", @@ -4856,7 +4856,7 @@ "x-appwrite": { "method": "getImage", "group": null, - "weight": 266, + "weight": 263, "cookies": false, "type": "location", "demo": "avatars\/get-image.md", @@ -4940,7 +4940,7 @@ "x-appwrite": { "method": "getInitials", "group": null, - "weight": 269, + "weight": 266, "cookies": false, "type": "location", "demo": "avatars\/get-initials.md", @@ -5034,7 +5034,7 @@ "x-appwrite": { "method": "getQR", "group": null, - "weight": 268, + "weight": 265, "cookies": false, "type": "location", "demo": "avatars\/get-qr.md", @@ -5128,7 +5128,7 @@ "x-appwrite": { "method": "getScreenshot", "group": null, - "weight": 270, + "weight": 267, "cookies": false, "type": "location", "demo": "avatars\/get-screenshot.md", @@ -5874,7 +5874,7 @@ "x-appwrite": { "method": "chat", "group": "console", - "weight": 513, + "weight": 510, "cookies": false, "type": "", "demo": "assistant\/chat.md", @@ -5935,7 +5935,7 @@ "x-appwrite": { "method": "getResource", "group": null, - "weight": 514, + "weight": 511, "cookies": false, "type": "", "demo": "console\/get-resource.md", @@ -6010,7 +6010,7 @@ "x-appwrite": { "method": "variables", "group": "console", - "weight": 512, + "weight": 509, "cookies": false, "type": "", "demo": "console\/variables.md", @@ -6059,7 +6059,7 @@ "x-appwrite": { "method": "list", "group": "databases", - "weight": 278, + "weight": 275, "cookies": false, "type": "", "demo": "databases\/list.md", @@ -6178,7 +6178,7 @@ "x-appwrite": { "method": "create", "group": "databases", - "weight": 274, + "weight": 271, "cookies": false, "type": "", "demo": "databases\/create.md", @@ -6295,7 +6295,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 346, + "weight": 343, "cookies": false, "type": "", "demo": "databases\/list-transactions.md", @@ -6362,7 +6362,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 342, + "weight": 339, "cookies": false, "type": "", "demo": "databases\/create-transaction.md", @@ -6433,7 +6433,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 343, + "weight": 340, "cookies": false, "type": "", "demo": "databases\/get-transaction.md", @@ -6497,7 +6497,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 344, + "weight": 341, "cookies": false, "type": "", "demo": "databases\/update-transaction.md", @@ -6575,7 +6575,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 345, + "weight": 342, "cookies": false, "type": "", "demo": "databases\/delete-transaction.md", @@ -6641,7 +6641,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 347, + "weight": 344, "cookies": false, "type": "", "demo": "databases\/create-operations.md", @@ -6726,7 +6726,7 @@ "x-appwrite": { "method": "listUsage", "group": null, - "weight": 281, + "weight": 278, "cookies": false, "type": "", "demo": "databases\/list-usage.md", @@ -6830,7 +6830,7 @@ "x-appwrite": { "method": "get", "group": "databases", - "weight": 275, + "weight": 272, "cookies": false, "type": "", "demo": "databases\/get.md", @@ -6924,7 +6924,7 @@ "x-appwrite": { "method": "update", "group": "databases", - "weight": 276, + "weight": 273, "cookies": false, "type": "", "demo": "databases\/update.md", @@ -7034,7 +7034,7 @@ "x-appwrite": { "method": "delete", "group": "databases", - "weight": 277, + "weight": 274, "cookies": false, "type": "", "demo": "databases\/delete.md", @@ -7129,7 +7129,7 @@ "x-appwrite": { "method": "listCollections", "group": "collections", - "weight": 286, + "weight": 283, "cookies": false, "type": "", "demo": "databases\/list-collections.md", @@ -7229,7 +7229,7 @@ "x-appwrite": { "method": "createCollection", "group": "collections", - "weight": 282, + "weight": 279, "cookies": false, "type": "", "demo": "databases\/create-collection.md", @@ -7356,7 +7356,7 @@ "x-appwrite": { "method": "getCollection", "group": "collections", - "weight": 283, + "weight": 280, "cookies": false, "type": "", "demo": "databases\/get-collection.md", @@ -7431,7 +7431,7 @@ "x-appwrite": { "method": "updateCollection", "group": "collections", - "weight": 284, + "weight": 281, "cookies": false, "type": "", "demo": "databases\/update-collection.md", @@ -7534,7 +7534,7 @@ "x-appwrite": { "method": "deleteCollection", "group": "collections", - "weight": 285, + "weight": 282, "cookies": false, "type": "", "demo": "databases\/delete-collection.md", @@ -7611,7 +7611,7 @@ "x-appwrite": { "method": "listAttributes", "group": "attributes", - "weight": 303, + "weight": 300, "cookies": false, "type": "", "demo": "databases\/list-attributes.md", @@ -7712,7 +7712,7 @@ "x-appwrite": { "method": "createBooleanAttribute", "group": "attributes", - "weight": 304, + "weight": 301, "cookies": false, "type": "", "demo": "databases\/create-boolean-attribute.md", @@ -7825,7 +7825,7 @@ "x-appwrite": { "method": "updateBooleanAttribute", "group": "attributes", - "weight": 305, + "weight": 302, "cookies": false, "type": "", "demo": "databases\/update-boolean-attribute.md", @@ -7943,7 +7943,7 @@ "x-appwrite": { "method": "createDatetimeAttribute", "group": "attributes", - "weight": 306, + "weight": 303, "cookies": false, "type": "", "demo": "databases\/create-datetime-attribute.md", @@ -8056,7 +8056,7 @@ "x-appwrite": { "method": "updateDatetimeAttribute", "group": "attributes", - "weight": 307, + "weight": 304, "cookies": false, "type": "", "demo": "databases\/update-datetime-attribute.md", @@ -8174,7 +8174,7 @@ "x-appwrite": { "method": "createEmailAttribute", "group": "attributes", - "weight": 308, + "weight": 305, "cookies": false, "type": "", "demo": "databases\/create-email-attribute.md", @@ -8288,7 +8288,7 @@ "x-appwrite": { "method": "updateEmailAttribute", "group": "attributes", - "weight": 309, + "weight": 306, "cookies": false, "type": "", "demo": "databases\/update-email-attribute.md", @@ -8407,7 +8407,7 @@ "x-appwrite": { "method": "createEnumAttribute", "group": "attributes", - "weight": 310, + "weight": 307, "cookies": false, "type": "", "demo": "databases\/create-enum-attribute.md", @@ -8529,7 +8529,7 @@ "x-appwrite": { "method": "updateEnumAttribute", "group": "attributes", - "weight": 311, + "weight": 308, "cookies": false, "type": "", "demo": "databases\/update-enum-attribute.md", @@ -8656,7 +8656,7 @@ "x-appwrite": { "method": "createFloatAttribute", "group": "attributes", - "weight": 312, + "weight": 309, "cookies": false, "type": "", "demo": "databases\/create-float-attribute.md", @@ -8784,7 +8784,7 @@ "x-appwrite": { "method": "updateFloatAttribute", "group": "attributes", - "weight": 313, + "weight": 310, "cookies": false, "type": "", "demo": "databases\/update-float-attribute.md", @@ -8917,7 +8917,7 @@ "x-appwrite": { "method": "createIntegerAttribute", "group": "attributes", - "weight": 314, + "weight": 311, "cookies": false, "type": "", "demo": "databases\/create-integer-attribute.md", @@ -9045,7 +9045,7 @@ "x-appwrite": { "method": "updateIntegerAttribute", "group": "attributes", - "weight": 315, + "weight": 312, "cookies": false, "type": "", "demo": "databases\/update-integer-attribute.md", @@ -9178,7 +9178,7 @@ "x-appwrite": { "method": "createIpAttribute", "group": "attributes", - "weight": 316, + "weight": 313, "cookies": false, "type": "", "demo": "databases\/create-ip-attribute.md", @@ -9291,7 +9291,7 @@ "x-appwrite": { "method": "updateIpAttribute", "group": "attributes", - "weight": 317, + "weight": 314, "cookies": false, "type": "", "demo": "databases\/update-ip-attribute.md", @@ -9409,7 +9409,7 @@ "x-appwrite": { "method": "createLineAttribute", "group": "attributes", - "weight": 318, + "weight": 315, "cookies": false, "type": "", "demo": "databases\/create-line-attribute.md", @@ -9524,7 +9524,7 @@ "x-appwrite": { "method": "updateLineAttribute", "group": "attributes", - "weight": 319, + "weight": 316, "cookies": false, "type": "", "demo": "databases\/update-line-attribute.md", @@ -9648,7 +9648,7 @@ "x-appwrite": { "method": "createLongtextAttribute", "group": "attributes", - "weight": 336, + "weight": 333, "cookies": false, "type": "", "demo": "databases\/create-longtext-attribute.md", @@ -9757,7 +9757,7 @@ "x-appwrite": { "method": "updateLongtextAttribute", "group": "attributes", - "weight": 337, + "weight": 334, "cookies": false, "type": "", "demo": "databases\/update-longtext-attribute.md", @@ -9871,7 +9871,7 @@ "x-appwrite": { "method": "createMediumtextAttribute", "group": "attributes", - "weight": 334, + "weight": 331, "cookies": false, "type": "", "demo": "databases\/create-mediumtext-attribute.md", @@ -9980,7 +9980,7 @@ "x-appwrite": { "method": "updateMediumtextAttribute", "group": "attributes", - "weight": 335, + "weight": 332, "cookies": false, "type": "", "demo": "databases\/update-mediumtext-attribute.md", @@ -10094,7 +10094,7 @@ "x-appwrite": { "method": "createPointAttribute", "group": "attributes", - "weight": 320, + "weight": 317, "cookies": false, "type": "", "demo": "databases\/create-point-attribute.md", @@ -10209,7 +10209,7 @@ "x-appwrite": { "method": "updatePointAttribute", "group": "attributes", - "weight": 321, + "weight": 318, "cookies": false, "type": "", "demo": "databases\/update-point-attribute.md", @@ -10333,7 +10333,7 @@ "x-appwrite": { "method": "createPolygonAttribute", "group": "attributes", - "weight": 322, + "weight": 319, "cookies": false, "type": "", "demo": "databases\/create-polygon-attribute.md", @@ -10448,7 +10448,7 @@ "x-appwrite": { "method": "updatePolygonAttribute", "group": "attributes", - "weight": 323, + "weight": 320, "cookies": false, "type": "", "demo": "databases\/update-polygon-attribute.md", @@ -10572,7 +10572,7 @@ "x-appwrite": { "method": "createRelationshipAttribute", "group": "attributes", - "weight": 324, + "weight": 321, "cookies": false, "type": "", "demo": "databases\/create-relationship-attribute.md", @@ -10711,7 +10711,7 @@ "x-appwrite": { "method": "createStringAttribute", "group": "attributes", - "weight": 326, + "weight": 323, "cookies": false, "type": "", "demo": "databases\/create-string-attribute.md", @@ -10836,7 +10836,7 @@ "x-appwrite": { "method": "updateStringAttribute", "group": "attributes", - "weight": 327, + "weight": 324, "cookies": false, "type": "", "demo": "databases\/update-string-attribute.md", @@ -10961,7 +10961,7 @@ "x-appwrite": { "method": "createTextAttribute", "group": "attributes", - "weight": 332, + "weight": 329, "cookies": false, "type": "", "demo": "databases\/create-text-attribute.md", @@ -11070,7 +11070,7 @@ "x-appwrite": { "method": "updateTextAttribute", "group": "attributes", - "weight": 333, + "weight": 330, "cookies": false, "type": "", "demo": "databases\/update-text-attribute.md", @@ -11184,7 +11184,7 @@ "x-appwrite": { "method": "createUrlAttribute", "group": "attributes", - "weight": 328, + "weight": 325, "cookies": false, "type": "", "demo": "databases\/create-url-attribute.md", @@ -11298,7 +11298,7 @@ "x-appwrite": { "method": "updateUrlAttribute", "group": "attributes", - "weight": 329, + "weight": 326, "cookies": false, "type": "", "demo": "databases\/update-url-attribute.md", @@ -11417,7 +11417,7 @@ "x-appwrite": { "method": "createVarcharAttribute", "group": "attributes", - "weight": 330, + "weight": 327, "cookies": false, "type": "", "demo": "databases\/create-varchar-attribute.md", @@ -11533,7 +11533,7 @@ "x-appwrite": { "method": "updateVarcharAttribute", "group": "attributes", - "weight": 331, + "weight": 328, "cookies": false, "type": "", "demo": "databases\/update-varchar-attribute.md", @@ -11685,7 +11685,7 @@ "x-appwrite": { "method": "getAttribute", "group": "attributes", - "weight": 301, + "weight": 298, "cookies": false, "type": "", "demo": "databases\/get-attribute.md", @@ -11762,7 +11762,7 @@ "x-appwrite": { "method": "deleteAttribute", "group": "attributes", - "weight": 302, + "weight": 299, "cookies": false, "type": "", "demo": "databases\/delete-attribute.md", @@ -11848,7 +11848,7 @@ "x-appwrite": { "method": "updateRelationshipAttribute", "group": "attributes", - "weight": 325, + "weight": 322, "cookies": false, "type": "", "demo": "databases\/update-relationship-attribute.md", @@ -11964,7 +11964,7 @@ "x-appwrite": { "method": "listDocuments", "group": "documents", - "weight": 297, + "weight": 294, "cookies": false, "type": "", "demo": "databases\/list-documents.md", @@ -12076,7 +12076,7 @@ "x-appwrite": { "method": "createDocument", "group": "documents", - "weight": 289, + "weight": 286, "cookies": false, "type": "", "demo": "databases\/create-document.md", @@ -12267,7 +12267,7 @@ "x-appwrite": { "method": "upsertDocuments", "group": "documents", - "weight": 294, + "weight": 291, "cookies": false, "type": "", "demo": "databases\/upsert-documents.md", @@ -12404,7 +12404,7 @@ "x-appwrite": { "method": "updateDocuments", "group": "documents", - "weight": 292, + "weight": 289, "cookies": false, "type": "", "demo": "databases\/update-documents.md", @@ -12509,7 +12509,7 @@ "x-appwrite": { "method": "deleteDocuments", "group": "documents", - "weight": 296, + "weight": 293, "cookies": false, "type": "", "demo": "databases\/delete-documents.md", @@ -12611,7 +12611,7 @@ "x-appwrite": { "method": "getDocument", "group": "documents", - "weight": 290, + "weight": 287, "cookies": false, "type": "", "demo": "databases\/get-document.md", @@ -12722,7 +12722,7 @@ "x-appwrite": { "method": "upsertDocument", "group": "documents", - "weight": 293, + "weight": 290, "cookies": false, "type": "", "demo": "databases\/upsert-document.md", @@ -12877,7 +12877,7 @@ "x-appwrite": { "method": "updateDocument", "group": "documents", - "weight": 291, + "weight": 288, "cookies": false, "type": "", "demo": "databases\/update-document.md", @@ -12989,7 +12989,7 @@ "x-appwrite": { "method": "deleteDocument", "group": "documents", - "weight": 295, + "weight": 292, "cookies": false, "type": "", "demo": "databases\/delete-document.md", @@ -13096,7 +13096,7 @@ "x-appwrite": { "method": "listDocumentLogs", "group": "logs", - "weight": 298, + "weight": 295, "cookies": false, "type": "", "demo": "databases\/list-document-logs.md", @@ -13194,7 +13194,7 @@ "x-appwrite": { "method": "decrementDocumentAttribute", "group": "documents", - "weight": 300, + "weight": 297, "cookies": false, "type": "", "demo": "databases\/decrement-document-attribute.md", @@ -13323,7 +13323,7 @@ "x-appwrite": { "method": "incrementDocumentAttribute", "group": "documents", - "weight": 299, + "weight": 296, "cookies": false, "type": "", "demo": "databases\/increment-document-attribute.md", @@ -13452,7 +13452,7 @@ "x-appwrite": { "method": "listIndexes", "group": "indexes", - "weight": 341, + "weight": 338, "cookies": false, "type": "", "demo": "databases\/list-indexes.md", @@ -13551,7 +13551,7 @@ "x-appwrite": { "method": "createIndex", "group": "indexes", - "weight": 338, + "weight": 335, "cookies": false, "type": "", "demo": "databases\/create-index.md", @@ -13692,7 +13692,7 @@ "x-appwrite": { "method": "getIndex", "group": "indexes", - "weight": 339, + "weight": 336, "cookies": false, "type": "", "demo": "databases\/get-index.md", @@ -13769,7 +13769,7 @@ "x-appwrite": { "method": "deleteIndex", "group": "indexes", - "weight": 340, + "weight": 337, "cookies": false, "type": "", "demo": "databases\/delete-index.md", @@ -13855,7 +13855,7 @@ "x-appwrite": { "method": "listCollectionLogs", "group": "collections", - "weight": 287, + "weight": 284, "cookies": false, "type": "", "demo": "databases\/list-collection-logs.md", @@ -13943,7 +13943,7 @@ "x-appwrite": { "method": "getCollectionUsage", "group": null, - "weight": 288, + "weight": 285, "cookies": false, "type": "", "demo": "databases\/get-collection-usage.md", @@ -14040,7 +14040,7 @@ "x-appwrite": { "method": "listLogs", "group": "logs", - "weight": 279, + "weight": 276, "cookies": false, "type": "", "demo": "databases\/list-logs.md", @@ -14148,7 +14148,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 280, + "weight": 277, "cookies": false, "type": "", "demo": "databases\/get-usage.md", @@ -14265,7 +14265,7 @@ "x-appwrite": { "method": "list", "group": "functions", - "weight": 431, + "weight": 428, "cookies": false, "type": "", "demo": "functions\/list.md", @@ -14350,7 +14350,7 @@ "x-appwrite": { "method": "create", "group": "functions", - "weight": 428, + "weight": 425, "cookies": false, "type": "", "demo": "functions\/create.md", @@ -14646,7 +14646,7 @@ "x-appwrite": { "method": "listRuntimes", "group": "runtimes", - "weight": 433, + "weight": 430, "cookies": false, "type": "", "demo": "functions\/list-runtimes.md", @@ -14696,7 +14696,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "runtimes", - "weight": 434, + "weight": 431, "cookies": false, "type": "", "demo": "functions\/list-specifications.md", @@ -14746,7 +14746,7 @@ "x-appwrite": { "method": "listTemplates", "group": "templates", - "weight": 457, + "weight": 454, "cookies": false, "type": "", "demo": "functions\/list-templates.md", @@ -14939,7 +14939,7 @@ "x-appwrite": { "method": "getTemplate", "group": "templates", - "weight": 456, + "weight": 453, "cookies": false, "type": "", "demo": "functions\/get-template.md", @@ -14999,7 +14999,7 @@ "x-appwrite": { "method": "listUsage", "group": null, - "weight": 450, + "weight": 447, "cookies": false, "type": "", "demo": "functions\/list-usage.md", @@ -15071,7 +15071,7 @@ "x-appwrite": { "method": "get", "group": "functions", - "weight": 429, + "weight": 426, "cookies": false, "type": "", "demo": "functions\/get.md", @@ -15131,7 +15131,7 @@ "x-appwrite": { "method": "update", "group": "functions", - "weight": 430, + "weight": 427, "cookies": false, "type": "", "demo": "functions\/update.md", @@ -15424,7 +15424,7 @@ "x-appwrite": { "method": "delete", "group": "functions", - "weight": 432, + "weight": 429, "cookies": false, "type": "", "demo": "functions\/delete.md", @@ -15486,7 +15486,7 @@ "x-appwrite": { "method": "updateFunctionDeployment", "group": "functions", - "weight": 437, + "weight": 434, "cookies": false, "type": "", "demo": "functions\/update-function-deployment.md", @@ -15567,7 +15567,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 438, + "weight": 435, "cookies": false, "type": "", "demo": "functions\/list-deployments.md", @@ -15662,7 +15662,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 435, + "weight": 432, "cookies": false, "type": "upload", "demo": "functions\/create-deployment.md", @@ -15762,7 +15762,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 443, + "weight": 440, "cookies": false, "type": "", "demo": "functions\/create-duplicate-deployment.md", @@ -15848,7 +15848,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 440, + "weight": 437, "cookies": false, "type": "", "demo": "functions\/create-template-deployment.md", @@ -15965,7 +15965,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 441, + "weight": 438, "cookies": false, "type": "", "demo": "functions\/create-vcs-deployment.md", @@ -16063,7 +16063,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 436, + "weight": 433, "cookies": false, "type": "", "demo": "functions\/get-deployment.md", @@ -16126,7 +16126,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 439, + "weight": 436, "cookies": false, "type": "", "demo": "functions\/delete-deployment.md", @@ -16191,7 +16191,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 442, + "weight": 439, "cookies": false, "type": "location", "demo": "functions\/get-deployment-download.md", @@ -16282,7 +16282,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 444, + "weight": 441, "cookies": false, "type": "", "demo": "functions\/update-deployment-status.md", @@ -16354,7 +16354,7 @@ "x-appwrite": { "method": "listExecutions", "group": "executions", - "weight": 447, + "weight": 444, "cookies": false, "type": "", "demo": "functions\/list-executions.md", @@ -16441,7 +16441,7 @@ "x-appwrite": { "method": "createExecution", "group": "executions", - "weight": 445, + "weight": 442, "cookies": false, "type": "", "demo": "functions\/create-execution.md", @@ -16559,7 +16559,7 @@ "x-appwrite": { "method": "getExecution", "group": "executions", - "weight": 446, + "weight": 443, "cookies": false, "type": "", "demo": "functions\/get-execution.md", @@ -16625,7 +16625,7 @@ "x-appwrite": { "method": "deleteExecution", "group": "executions", - "weight": 448, + "weight": 445, "cookies": false, "type": "", "demo": "functions\/delete-execution.md", @@ -16697,7 +16697,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 449, + "weight": 446, "cookies": false, "type": "", "demo": "functions\/get-usage.md", @@ -16779,7 +16779,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 453, + "weight": 450, "cookies": false, "type": "", "demo": "functions\/list-variables.md", @@ -16839,7 +16839,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 451, + "weight": 448, "cookies": false, "type": "", "demo": "functions\/create-variable.md", @@ -16931,7 +16931,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 452, + "weight": 449, "cookies": false, "type": "", "demo": "functions\/get-variable.md", @@ -17001,7 +17001,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 454, + "weight": 451, "cookies": false, "type": "", "demo": "functions\/update-variable.md", @@ -17095,7 +17095,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 455, + "weight": 452, "cookies": false, "type": "", "demo": "functions\/delete-variable.md", @@ -17167,7 +17167,7 @@ "x-appwrite": { "method": "query", "group": "graphql", - "weight": 190, + "weight": 187, "cookies": false, "type": "graphql", "demo": "graphql\/query.md", @@ -17221,7 +17221,7 @@ "x-appwrite": { "method": "mutation", "group": "graphql", - "weight": 189, + "weight": 186, "cookies": false, "type": "graphql", "demo": "graphql\/mutation.md", @@ -17275,7 +17275,7 @@ "x-appwrite": { "method": "get", "group": "health", - "weight": 458, + "weight": 455, "cookies": false, "type": "", "demo": "health\/get.md", @@ -17326,7 +17326,7 @@ "x-appwrite": { "method": "getAntivirus", "group": "health", - "weight": 467, + "weight": 464, "cookies": false, "type": "", "demo": "health\/get-antivirus.md", @@ -17377,7 +17377,7 @@ "x-appwrite": { "method": "getCache", "group": "health", - "weight": 461, + "weight": 458, "cookies": false, "type": "", "demo": "health\/get-cache.md", @@ -17428,7 +17428,7 @@ "x-appwrite": { "method": "getCertificate", "group": "health", - "weight": 464, + "weight": 461, "cookies": false, "type": "", "demo": "health\/get-certificate.md", @@ -17490,7 +17490,7 @@ "x-appwrite": { "method": "getDB", "group": "health", - "weight": 460, + "weight": 457, "cookies": false, "type": "", "demo": "health\/get-db.md", @@ -17541,7 +17541,7 @@ "x-appwrite": { "method": "getPubSub", "group": "health", - "weight": 462, + "weight": 459, "cookies": false, "type": "", "demo": "health\/get-pub-sub.md", @@ -17592,7 +17592,7 @@ "x-appwrite": { "method": "getQueueAudits", "group": "queue", - "weight": 468, + "weight": 465, "cookies": false, "type": "", "demo": "health\/get-queue-audits.md", @@ -17656,7 +17656,7 @@ "x-appwrite": { "method": "getQueueBuilds", "group": "queue", - "weight": 472, + "weight": 469, "cookies": false, "type": "", "demo": "health\/get-queue-builds.md", @@ -17720,7 +17720,7 @@ "x-appwrite": { "method": "getQueueCertificates", "group": "queue", - "weight": 471, + "weight": 468, "cookies": false, "type": "", "demo": "health\/get-queue-certificates.md", @@ -17784,7 +17784,7 @@ "x-appwrite": { "method": "getQueueDatabases", "group": "queue", - "weight": 473, + "weight": 470, "cookies": false, "type": "", "demo": "health\/get-queue-databases.md", @@ -17859,7 +17859,7 @@ "x-appwrite": { "method": "getQueueDeletes", "group": "queue", - "weight": 474, + "weight": 471, "cookies": false, "type": "", "demo": "health\/get-queue-deletes.md", @@ -17923,7 +17923,7 @@ "x-appwrite": { "method": "getFailedJobs", "group": "queue", - "weight": 481, + "weight": 478, "cookies": false, "type": "", "demo": "health\/get-failed-jobs.md", @@ -18014,7 +18014,7 @@ "x-appwrite": { "method": "getQueueFunctions", "group": "queue", - "weight": 478, + "weight": 475, "cookies": false, "type": "", "demo": "health\/get-queue-functions.md", @@ -18078,7 +18078,7 @@ "x-appwrite": { "method": "getQueueLogs", "group": "queue", - "weight": 470, + "weight": 467, "cookies": false, "type": "", "demo": "health\/get-queue-logs.md", @@ -18142,7 +18142,7 @@ "x-appwrite": { "method": "getQueueMails", "group": "queue", - "weight": 475, + "weight": 472, "cookies": false, "type": "", "demo": "health\/get-queue-mails.md", @@ -18206,7 +18206,7 @@ "x-appwrite": { "method": "getQueueMessaging", "group": "queue", - "weight": 476, + "weight": 473, "cookies": false, "type": "", "demo": "health\/get-queue-messaging.md", @@ -18270,7 +18270,7 @@ "x-appwrite": { "method": "getQueueMigrations", "group": "queue", - "weight": 477, + "weight": 474, "cookies": false, "type": "", "demo": "health\/get-queue-migrations.md", @@ -18334,7 +18334,7 @@ "x-appwrite": { "method": "getQueueStatsResources", "group": "queue", - "weight": 479, + "weight": 476, "cookies": false, "type": "", "demo": "health\/get-queue-stats-resources.md", @@ -18398,7 +18398,7 @@ "x-appwrite": { "method": "getQueueUsage", "group": "queue", - "weight": 480, + "weight": 477, "cookies": false, "type": "", "demo": "health\/get-queue-usage.md", @@ -18462,7 +18462,7 @@ "x-appwrite": { "method": "getQueueWebhooks", "group": "queue", - "weight": 469, + "weight": 466, "cookies": false, "type": "", "demo": "health\/get-queue-webhooks.md", @@ -18526,7 +18526,7 @@ "x-appwrite": { "method": "getStorage", "group": "storage", - "weight": 466, + "weight": 463, "cookies": false, "type": "", "demo": "health\/get-storage.md", @@ -18577,7 +18577,7 @@ "x-appwrite": { "method": "getStorageLocal", "group": "storage", - "weight": 465, + "weight": 462, "cookies": false, "type": "", "demo": "health\/get-storage-local.md", @@ -18628,7 +18628,7 @@ "x-appwrite": { "method": "getTime", "group": "health", - "weight": 463, + "weight": 460, "cookies": false, "type": "", "demo": "health\/get-time.md", @@ -19111,7 +19111,7 @@ "x-appwrite": { "method": "listMessages", "group": "messages", - "weight": 245, + "weight": 242, "cookies": false, "type": "", "demo": "messaging\/list-messages.md", @@ -19199,7 +19199,7 @@ "x-appwrite": { "method": "createEmail", "group": "messages", - "weight": 242, + "weight": 239, "cookies": false, "type": "", "demo": "messaging\/create-email.md", @@ -19345,7 +19345,7 @@ "x-appwrite": { "method": "updateEmail", "group": "messages", - "weight": 249, + "weight": 246, "cookies": false, "type": "", "demo": "messaging\/update-email.md", @@ -19503,7 +19503,7 @@ "x-appwrite": { "method": "createPush", "group": "messages", - "weight": 244, + "weight": 241, "cookies": false, "type": "", "demo": "messaging\/create-push.md", @@ -19681,7 +19681,7 @@ "x-appwrite": { "method": "updatePush", "group": "messages", - "weight": 251, + "weight": 248, "cookies": false, "type": "", "demo": "messaging\/update-push.md", @@ -19879,7 +19879,7 @@ "x-appwrite": { "method": "createSms", "group": "messages", - "weight": 243, + "weight": 240, "cookies": false, "type": "", "demo": "messaging\/create-sms.md", @@ -20060,7 +20060,7 @@ "x-appwrite": { "method": "updateSms", "group": "messages", - "weight": 250, + "weight": 247, "cookies": false, "type": "", "demo": "messaging\/update-sms.md", @@ -20247,7 +20247,7 @@ "x-appwrite": { "method": "getMessage", "group": "messages", - "weight": 248, + "weight": 245, "cookies": false, "type": "", "demo": "messaging\/get-message.md", @@ -20301,7 +20301,7 @@ "x-appwrite": { "method": "delete", "group": "messages", - "weight": 252, + "weight": 249, "cookies": false, "type": "", "demo": "messaging\/delete.md", @@ -20364,7 +20364,7 @@ "x-appwrite": { "method": "listMessageLogs", "group": "logs", - "weight": 246, + "weight": 243, "cookies": false, "type": "", "demo": "messaging\/list-message-logs.md", @@ -20451,7 +20451,7 @@ "x-appwrite": { "method": "listTargets", "group": "messages", - "weight": 247, + "weight": 244, "cookies": false, "type": "", "demo": "messaging\/list-targets.md", @@ -20538,7 +20538,7 @@ "x-appwrite": { "method": "listProviders", "group": "providers", - "weight": 216, + "weight": 213, "cookies": false, "type": "", "demo": "messaging\/list-providers.md", @@ -20626,7 +20626,7 @@ "x-appwrite": { "method": "createApnsProvider", "group": "providers", - "weight": 215, + "weight": 212, "cookies": false, "type": "", "demo": "messaging\/create-apns-provider.md", @@ -20805,7 +20805,7 @@ "x-appwrite": { "method": "updateApnsProvider", "group": "providers", - "weight": 229, + "weight": 226, "cookies": false, "type": "", "demo": "messaging\/update-apns-provider.md", @@ -20986,7 +20986,7 @@ "x-appwrite": { "method": "createFcmProvider", "group": "providers", - "weight": 214, + "weight": 211, "cookies": false, "type": "", "demo": "messaging\/create-fcm-provider.md", @@ -21138,7 +21138,7 @@ "x-appwrite": { "method": "updateFcmProvider", "group": "providers", - "weight": 228, + "weight": 225, "cookies": false, "type": "", "demo": "messaging\/update-fcm-provider.md", @@ -21291,7 +21291,7 @@ "x-appwrite": { "method": "createMailgunProvider", "group": "providers", - "weight": 205, + "weight": 202, "cookies": false, "type": "", "demo": "messaging\/create-mailgun-provider.md", @@ -21411,7 +21411,7 @@ "x-appwrite": { "method": "updateMailgunProvider", "group": "providers", - "weight": 219, + "weight": 216, "cookies": false, "type": "", "demo": "messaging\/update-mailgun-provider.md", @@ -21533,7 +21533,7 @@ "x-appwrite": { "method": "createMsg91Provider", "group": "providers", - "weight": 209, + "weight": 206, "cookies": false, "type": "", "demo": "messaging\/create-msg-91-provider.md", @@ -21630,7 +21630,7 @@ "x-appwrite": { "method": "updateMsg91Provider", "group": "providers", - "weight": 223, + "weight": 220, "cookies": false, "type": "", "demo": "messaging\/update-msg-91-provider.md", @@ -21730,7 +21730,7 @@ "x-appwrite": { "method": "createResendProvider", "group": "providers", - "weight": 207, + "weight": 204, "cookies": false, "type": "", "demo": "messaging\/create-resend-provider.md", @@ -21839,7 +21839,7 @@ "x-appwrite": { "method": "updateResendProvider", "group": "providers", - "weight": 221, + "weight": 218, "cookies": false, "type": "", "demo": "messaging\/update-resend-provider.md", @@ -21950,7 +21950,7 @@ "x-appwrite": { "method": "createSendgridProvider", "group": "providers", - "weight": 206, + "weight": 203, "cookies": false, "type": "", "demo": "messaging\/create-sendgrid-provider.md", @@ -22059,7 +22059,7 @@ "x-appwrite": { "method": "updateSendgridProvider", "group": "providers", - "weight": 220, + "weight": 217, "cookies": false, "type": "", "demo": "messaging\/update-sendgrid-provider.md", @@ -22170,7 +22170,7 @@ "x-appwrite": { "method": "createSmtpProvider", "group": "providers", - "weight": 208, + "weight": 205, "cookies": false, "type": "", "demo": "messaging\/create-smtp-provider.md", @@ -22404,7 +22404,7 @@ "x-appwrite": { "method": "updateSmtpProvider", "group": "providers", - "weight": 222, + "weight": 219, "cookies": false, "type": "", "demo": "messaging\/update-smtp-provider.md", @@ -22637,7 +22637,7 @@ "x-appwrite": { "method": "createTelesignProvider", "group": "providers", - "weight": 210, + "weight": 207, "cookies": false, "type": "", "demo": "messaging\/create-telesign-provider.md", @@ -22735,7 +22735,7 @@ "x-appwrite": { "method": "updateTelesignProvider", "group": "providers", - "weight": 224, + "weight": 221, "cookies": false, "type": "", "demo": "messaging\/update-telesign-provider.md", @@ -22835,7 +22835,7 @@ "x-appwrite": { "method": "createTextmagicProvider", "group": "providers", - "weight": 211, + "weight": 208, "cookies": false, "type": "", "demo": "messaging\/create-textmagic-provider.md", @@ -22933,7 +22933,7 @@ "x-appwrite": { "method": "updateTextmagicProvider", "group": "providers", - "weight": 225, + "weight": 222, "cookies": false, "type": "", "demo": "messaging\/update-textmagic-provider.md", @@ -23033,7 +23033,7 @@ "x-appwrite": { "method": "createTwilioProvider", "group": "providers", - "weight": 212, + "weight": 209, "cookies": false, "type": "", "demo": "messaging\/create-twilio-provider.md", @@ -23131,7 +23131,7 @@ "x-appwrite": { "method": "updateTwilioProvider", "group": "providers", - "weight": 226, + "weight": 223, "cookies": false, "type": "", "demo": "messaging\/update-twilio-provider.md", @@ -23231,7 +23231,7 @@ "x-appwrite": { "method": "createVonageProvider", "group": "providers", - "weight": 213, + "weight": 210, "cookies": false, "type": "", "demo": "messaging\/create-vonage-provider.md", @@ -23329,7 +23329,7 @@ "x-appwrite": { "method": "updateVonageProvider", "group": "providers", - "weight": 227, + "weight": 224, "cookies": false, "type": "", "demo": "messaging\/update-vonage-provider.md", @@ -23429,7 +23429,7 @@ "x-appwrite": { "method": "getProvider", "group": "providers", - "weight": 218, + "weight": 215, "cookies": false, "type": "", "demo": "messaging\/get-provider.md", @@ -23483,7 +23483,7 @@ "x-appwrite": { "method": "deleteProvider", "group": "providers", - "weight": 230, + "weight": 227, "cookies": false, "type": "", "demo": "messaging\/delete-provider.md", @@ -23546,7 +23546,7 @@ "x-appwrite": { "method": "listProviderLogs", "group": "providers", - "weight": 217, + "weight": 214, "cookies": false, "type": "", "demo": "messaging\/list-provider-logs.md", @@ -23633,7 +23633,7 @@ "x-appwrite": { "method": "listSubscriberLogs", "group": "subscribers", - "weight": 239, + "weight": 236, "cookies": false, "type": "", "demo": "messaging\/list-subscriber-logs.md", @@ -23720,7 +23720,7 @@ "x-appwrite": { "method": "listTopics", "group": "topics", - "weight": 232, + "weight": 229, "cookies": false, "type": "", "demo": "messaging\/list-topics.md", @@ -23806,7 +23806,7 @@ "x-appwrite": { "method": "createTopic", "group": "topics", - "weight": 231, + "weight": 228, "cookies": false, "type": "", "demo": "messaging\/create-topic.md", @@ -23890,7 +23890,7 @@ "x-appwrite": { "method": "getTopic", "group": "topics", - "weight": 234, + "weight": 231, "cookies": false, "type": "", "demo": "messaging\/get-topic.md", @@ -23951,7 +23951,7 @@ "x-appwrite": { "method": "updateTopic", "group": "topics", - "weight": 235, + "weight": 232, "cookies": false, "type": "", "demo": "messaging\/update-topic.md", @@ -24031,7 +24031,7 @@ "x-appwrite": { "method": "deleteTopic", "group": "topics", - "weight": 236, + "weight": 233, "cookies": false, "type": "", "demo": "messaging\/delete-topic.md", @@ -24094,7 +24094,7 @@ "x-appwrite": { "method": "listTopicLogs", "group": "topics", - "weight": 233, + "weight": 230, "cookies": false, "type": "", "demo": "messaging\/list-topic-logs.md", @@ -24181,7 +24181,7 @@ "x-appwrite": { "method": "listSubscribers", "group": "subscribers", - "weight": 238, + "weight": 235, "cookies": false, "type": "", "demo": "messaging\/list-subscribers.md", @@ -24277,7 +24277,7 @@ "x-appwrite": { "method": "createSubscriber", "group": "subscribers", - "weight": 237, + "weight": 234, "cookies": false, "type": "", "demo": "messaging\/create-subscriber.md", @@ -24368,7 +24368,7 @@ "x-appwrite": { "method": "getSubscriber", "group": "subscribers", - "weight": 240, + "weight": 237, "cookies": false, "type": "", "demo": "messaging\/get-subscriber.md", @@ -24432,7 +24432,7 @@ "x-appwrite": { "method": "deleteSubscriber", "group": "subscribers", - "weight": 241, + "weight": 238, "cookies": false, "type": "", "demo": "messaging\/delete-subscriber.md", @@ -24508,7 +24508,7 @@ "x-appwrite": { "method": "list", "group": null, - "weight": 197, + "weight": 194, "cookies": false, "type": "", "demo": "migrations\/list.md", @@ -24594,7 +24594,7 @@ "x-appwrite": { "method": "createAppwriteMigration", "group": null, - "weight": 191, + "weight": 188, "cookies": false, "type": "", "demo": "migrations\/create-appwrite-migration.md", @@ -24704,7 +24704,7 @@ "x-appwrite": { "method": "getAppwriteReport", "group": null, - "weight": 199, + "weight": 196, "cookies": false, "type": "", "demo": "migrations\/get-appwrite-report.md", @@ -24818,7 +24818,7 @@ "x-appwrite": { "method": "createCSVExport", "group": null, - "weight": 196, + "weight": 193, "cookies": false, "type": "", "demo": "migrations\/create-csv-export.md", @@ -24933,7 +24933,7 @@ "x-appwrite": { "method": "createCSVImport", "group": null, - "weight": 195, + "weight": 192, "cookies": false, "type": "", "demo": "migrations\/create-csv-import.md", @@ -25018,7 +25018,7 @@ "x-appwrite": { "method": "createFirebaseMigration", "group": null, - "weight": 192, + "weight": 189, "cookies": false, "type": "", "demo": "migrations\/create-firebase-migration.md", @@ -25109,7 +25109,7 @@ "x-appwrite": { "method": "getFirebaseReport", "group": null, - "weight": 200, + "weight": 197, "cookies": false, "type": "", "demo": "migrations\/get-firebase-report.md", @@ -25196,7 +25196,7 @@ "x-appwrite": { "method": "createNHostMigration", "group": null, - "weight": 194, + "weight": 191, "cookies": false, "type": "", "demo": "migrations\/create-n-host-migration.md", @@ -25324,7 +25324,7 @@ "x-appwrite": { "method": "getNHostReport", "group": null, - "weight": 202, + "weight": 199, "cookies": false, "type": "", "demo": "migrations\/get-n-host-report.md", @@ -25473,7 +25473,7 @@ "x-appwrite": { "method": "createSupabaseMigration", "group": null, - "weight": 193, + "weight": 190, "cookies": false, "type": "", "demo": "migrations\/create-supabase-migration.md", @@ -25596,7 +25596,7 @@ "x-appwrite": { "method": "getSupabaseReport", "group": null, - "weight": 201, + "weight": 198, "cookies": false, "type": "", "demo": "migrations\/get-supabase-report.md", @@ -25736,7 +25736,7 @@ "x-appwrite": { "method": "get", "group": null, - "weight": 198, + "weight": 195, "cookies": false, "type": "", "demo": "migrations\/get.md", @@ -25795,7 +25795,7 @@ "x-appwrite": { "method": "retry", "group": null, - "weight": 203, + "weight": 200, "cookies": false, "type": "", "demo": "migrations\/retry.md", @@ -25847,7 +25847,7 @@ "x-appwrite": { "method": "delete", "group": null, - "weight": 204, + "weight": 201, "cookies": false, "type": "", "demo": "migrations\/delete.md", @@ -26326,7 +26326,7 @@ "x-appwrite": { "method": "list", "group": "projects", - "weight": 426, + "weight": 423, "cookies": false, "type": "", "demo": "projects\/list.md", @@ -27999,7 +27999,7 @@ "x-appwrite": { "method": "listDevKeys", "group": "devKeys", - "weight": 424, + "weight": 421, "cookies": false, "type": "", "demo": "projects\/list-dev-keys.md", @@ -28070,7 +28070,7 @@ "x-appwrite": { "method": "createDevKey", "group": "devKeys", - "weight": 421, + "weight": 418, "cookies": false, "type": "", "demo": "projects\/create-dev-key.md", @@ -28155,7 +28155,7 @@ "x-appwrite": { "method": "getDevKey", "group": "devKeys", - "weight": 423, + "weight": 420, "cookies": false, "type": "", "demo": "projects\/get-dev-key.md", @@ -28223,7 +28223,7 @@ "x-appwrite": { "method": "updateDevKey", "group": "devKeys", - "weight": 422, + "weight": 419, "cookies": false, "type": "", "demo": "projects\/update-dev-key.md", @@ -28309,7 +28309,7 @@ "x-appwrite": { "method": "deleteDevKey", "group": "devKeys", - "weight": 425, + "weight": 422, "cookies": false, "type": "", "demo": "projects\/delete-dev-key.md", @@ -29048,7 +29048,7 @@ "x-appwrite": { "method": "updateLabels", "group": "projects", - "weight": 427, + "weight": 424, "cookies": false, "type": "", "demo": "projects\/update-labels.md", @@ -32489,7 +32489,7 @@ "x-appwrite": { "method": "listRules", "group": null, - "weight": 528, + "weight": 525, "cookies": false, "type": "", "demo": "proxy\/list-rules.md", @@ -32574,7 +32574,7 @@ "x-appwrite": { "method": "createAPIRule", "group": null, - "weight": 523, + "weight": 520, "cookies": false, "type": "", "demo": "proxy\/create-api-rule.md", @@ -32641,7 +32641,7 @@ "x-appwrite": { "method": "createFunctionRule", "group": null, - "weight": 525, + "weight": 522, "cookies": false, "type": "", "demo": "proxy\/create-function-rule.md", @@ -32719,7 +32719,7 @@ "x-appwrite": { "method": "createRedirectRule", "group": null, - "weight": 526, + "weight": 523, "cookies": false, "type": "", "demo": "proxy\/create-redirect-rule.md", @@ -32833,7 +32833,7 @@ "x-appwrite": { "method": "createSiteRule", "group": null, - "weight": 524, + "weight": 521, "cookies": false, "type": "", "demo": "proxy\/create-site-rule.md", @@ -32911,7 +32911,7 @@ "x-appwrite": { "method": "getRule", "group": null, - "weight": 527, + "weight": 524, "cookies": false, "type": "", "demo": "proxy\/get-rule.md", @@ -32962,7 +32962,7 @@ "x-appwrite": { "method": "deleteRule", "group": null, - "weight": 529, + "weight": 526, "cookies": false, "type": "", "demo": "proxy\/delete-rule.md", @@ -33022,7 +33022,7 @@ "x-appwrite": { "method": "updateRuleVerification", "group": null, - "weight": 530, + "weight": 527, "cookies": false, "type": "", "demo": "proxy\/update-rule-verification.md", @@ -33082,7 +33082,7 @@ "x-appwrite": { "method": "list", "group": "sites", - "weight": 485, + "weight": 482, "cookies": false, "type": "", "demo": "sites\/list.md", @@ -33167,7 +33167,7 @@ "x-appwrite": { "method": "create", "group": "sites", - "weight": 483, + "weight": 480, "cookies": false, "type": "", "demo": "sites\/create.md", @@ -33421,7 +33421,7 @@ "x-appwrite": { "method": "listFrameworks", "group": "frameworks", - "weight": 488, + "weight": 485, "cookies": false, "type": "", "demo": "sites\/list-frameworks.md", @@ -33471,7 +33471,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "frameworks", - "weight": 511, + "weight": 508, "cookies": false, "type": "", "demo": "sites\/list-specifications.md", @@ -33521,7 +33521,7 @@ "x-appwrite": { "method": "listTemplates", "group": "templates", - "weight": 507, + "weight": 504, "cookies": false, "type": "", "demo": "sites\/list-templates.md", @@ -33653,7 +33653,7 @@ "x-appwrite": { "method": "getTemplate", "group": "templates", - "weight": 508, + "weight": 505, "cookies": false, "type": "", "demo": "sites\/get-template.md", @@ -33713,7 +33713,7 @@ "x-appwrite": { "method": "listUsage", "group": null, - "weight": 509, + "weight": 506, "cookies": false, "type": "", "demo": "sites\/list-usage.md", @@ -33785,7 +33785,7 @@ "x-appwrite": { "method": "get", "group": "sites", - "weight": 484, + "weight": 481, "cookies": false, "type": "", "demo": "sites\/get.md", @@ -33845,7 +33845,7 @@ "x-appwrite": { "method": "update", "group": "sites", - "weight": 486, + "weight": 483, "cookies": false, "type": "", "demo": "sites\/update.md", @@ -34095,7 +34095,7 @@ "x-appwrite": { "method": "delete", "group": "sites", - "weight": 487, + "weight": 484, "cookies": false, "type": "", "demo": "sites\/delete.md", @@ -34157,7 +34157,7 @@ "x-appwrite": { "method": "updateSiteDeployment", "group": "sites", - "weight": 494, + "weight": 491, "cookies": false, "type": "", "demo": "sites\/update-site-deployment.md", @@ -34238,7 +34238,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 493, + "weight": 490, "cookies": false, "type": "", "demo": "sites\/list-deployments.md", @@ -34333,7 +34333,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 489, + "weight": 486, "cookies": false, "type": "upload", "demo": "sites\/create-deployment.md", @@ -34439,7 +34439,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 497, + "weight": 494, "cookies": false, "type": "", "demo": "sites\/create-duplicate-deployment.md", @@ -34520,7 +34520,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 490, + "weight": 487, "cookies": false, "type": "", "demo": "sites\/create-template-deployment.md", @@ -34637,7 +34637,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 491, + "weight": 488, "cookies": false, "type": "", "demo": "sites\/create-vcs-deployment.md", @@ -34736,7 +34736,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 492, + "weight": 489, "cookies": false, "type": "", "demo": "sites\/get-deployment.md", @@ -34799,7 +34799,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 495, + "weight": 492, "cookies": false, "type": "", "demo": "sites\/delete-deployment.md", @@ -34864,7 +34864,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 496, + "weight": 493, "cookies": false, "type": "location", "demo": "sites\/get-deployment-download.md", @@ -34955,7 +34955,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 498, + "weight": 495, "cookies": false, "type": "", "demo": "sites\/update-deployment-status.md", @@ -35027,7 +35027,7 @@ "x-appwrite": { "method": "listLogs", "group": "logs", - "weight": 500, + "weight": 497, "cookies": false, "type": "", "demo": "sites\/list-logs.md", @@ -35113,7 +35113,7 @@ "x-appwrite": { "method": "getLog", "group": "logs", - "weight": 499, + "weight": 496, "cookies": false, "type": "", "demo": "sites\/get-log.md", @@ -35176,7 +35176,7 @@ "x-appwrite": { "method": "deleteLog", "group": "logs", - "weight": 501, + "weight": 498, "cookies": false, "type": "", "demo": "sites\/delete-log.md", @@ -35248,7 +35248,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 510, + "weight": 507, "cookies": false, "type": "", "demo": "sites\/get-usage.md", @@ -35330,7 +35330,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 504, + "weight": 501, "cookies": false, "type": "", "demo": "sites\/list-variables.md", @@ -35390,7 +35390,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 502, + "weight": 499, "cookies": false, "type": "", "demo": "sites\/create-variable.md", @@ -35482,7 +35482,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 503, + "weight": 500, "cookies": false, "type": "", "demo": "sites\/get-variable.md", @@ -35552,7 +35552,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 505, + "weight": 502, "cookies": false, "type": "", "demo": "sites\/update-variable.md", @@ -35646,7 +35646,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 506, + "weight": 503, "cookies": false, "type": "", "demo": "sites\/delete-variable.md", @@ -35718,7 +35718,7 @@ "x-appwrite": { "method": "listBuckets", "group": "buckets", - "weight": 538, + "weight": 535, "cookies": false, "type": "", "demo": "storage\/list-buckets.md", @@ -35804,7 +35804,7 @@ "x-appwrite": { "method": "createBucket", "group": "buckets", - "weight": 536, + "weight": 533, "cookies": false, "type": "", "demo": "storage\/create-bucket.md", @@ -35940,7 +35940,7 @@ "x-appwrite": { "method": "getBucket", "group": "buckets", - "weight": 537, + "weight": 534, "cookies": false, "type": "", "demo": "storage\/get-bucket.md", @@ -36001,7 +36001,7 @@ "x-appwrite": { "method": "updateBucket", "group": "buckets", - "weight": 539, + "weight": 536, "cookies": false, "type": "", "demo": "storage\/update-bucket.md", @@ -36134,7 +36134,7 @@ "x-appwrite": { "method": "deleteBucket", "group": "buckets", - "weight": 540, + "weight": 537, "cookies": false, "type": "", "demo": "storage\/delete-bucket.md", @@ -36197,7 +36197,7 @@ "x-appwrite": { "method": "listFiles", "group": "files", - "weight": 543, + "weight": 540, "cookies": false, "type": "", "demo": "storage\/list-files.md", @@ -36296,7 +36296,7 @@ "x-appwrite": { "method": "createFile", "group": "files", - "weight": 541, + "weight": 538, "cookies": false, "type": "upload", "demo": "storage\/create-file.md", @@ -36398,7 +36398,7 @@ "x-appwrite": { "method": "getFile", "group": "files", - "weight": 542, + "weight": 539, "cookies": false, "type": "", "demo": "storage\/get-file.md", @@ -36472,7 +36472,7 @@ "x-appwrite": { "method": "updateFile", "group": "files", - "weight": 544, + "weight": 541, "cookies": false, "type": "", "demo": "storage\/update-file.md", @@ -36564,7 +36564,7 @@ "x-appwrite": { "method": "deleteFile", "group": "files", - "weight": 545, + "weight": 542, "cookies": false, "type": "", "demo": "storage\/delete-file.md", @@ -36633,7 +36633,7 @@ "x-appwrite": { "method": "getFileDownload", "group": "files", - "weight": 547, + "weight": 544, "cookies": false, "type": "location", "demo": "storage\/get-file-download.md", @@ -36713,7 +36713,7 @@ "x-appwrite": { "method": "getFilePreview", "group": "files", - "weight": 546, + "weight": 543, "cookies": false, "type": "location", "demo": "storage\/get-file-preview.md", @@ -36943,7 +36943,7 @@ "x-appwrite": { "method": "getFileView", "group": "files", - "weight": 548, + "weight": 545, "cookies": false, "type": "location", "demo": "storage\/get-file-view.md", @@ -37030,7 +37030,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 550, + "weight": 547, "cookies": false, "type": "", "demo": "storage\/get-usage.md", @@ -37103,7 +37103,7 @@ "x-appwrite": { "method": "getBucketUsage", "group": null, - "weight": 551, + "weight": 548, "cookies": false, "type": "", "demo": "storage\/get-bucket-usage.md", @@ -37186,7 +37186,7 @@ "x-appwrite": { "method": "list", "group": "tablesdb", - "weight": 352, + "weight": 349, "cookies": false, "type": "", "demo": "tablesdb\/list.md", @@ -37272,7 +37272,7 @@ "x-appwrite": { "method": "create", "group": "tablesdb", - "weight": 348, + "weight": 345, "cookies": false, "type": "", "demo": "tablesdb\/create.md", @@ -37353,7 +37353,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 419, + "weight": 416, "cookies": false, "type": "", "demo": "tablesdb\/list-transactions.md", @@ -37423,7 +37423,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 415, + "weight": 412, "cookies": false, "type": "", "demo": "tablesdb\/create-transaction.md", @@ -37497,7 +37497,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 416, + "weight": 413, "cookies": false, "type": "", "demo": "tablesdb\/get-transaction.md", @@ -37564,7 +37564,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 417, + "weight": 414, "cookies": false, "type": "", "demo": "tablesdb\/update-transaction.md", @@ -37645,7 +37645,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 418, + "weight": 415, "cookies": false, "type": "", "demo": "tablesdb\/delete-transaction.md", @@ -37714,7 +37714,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 420, + "weight": 417, "cookies": false, "type": "", "demo": "tablesdb\/create-operations.md", @@ -37802,7 +37802,7 @@ "x-appwrite": { "method": "listUsage", "group": null, - "weight": 354, + "weight": 351, "cookies": false, "type": "", "demo": "tablesdb\/list-usage.md", @@ -37901,7 +37901,7 @@ "x-appwrite": { "method": "get", "group": "tablesdb", - "weight": 349, + "weight": 346, "cookies": false, "type": "", "demo": "tablesdb\/get.md", @@ -37962,7 +37962,7 @@ "x-appwrite": { "method": "update", "group": "tablesdb", - "weight": 350, + "weight": 347, "cookies": false, "type": "", "demo": "tablesdb\/update.md", @@ -38037,7 +38037,7 @@ "x-appwrite": { "method": "delete", "group": "tablesdb", - "weight": 351, + "weight": 348, "cookies": false, "type": "", "demo": "tablesdb\/delete.md", @@ -38100,7 +38100,7 @@ "x-appwrite": { "method": "listTables", "group": "tables", - "weight": 359, + "weight": 356, "cookies": false, "type": "", "demo": "tablesdb\/list-tables.md", @@ -38199,7 +38199,7 @@ "x-appwrite": { "method": "createTable", "group": "tables", - "weight": 355, + "weight": 352, "cookies": false, "type": "", "demo": "tablesdb\/create-table.md", @@ -38325,7 +38325,7 @@ "x-appwrite": { "method": "getTable", "group": "tables", - "weight": 356, + "weight": 353, "cookies": false, "type": "", "demo": "tablesdb\/get-table.md", @@ -38399,7 +38399,7 @@ "x-appwrite": { "method": "updateTable", "group": "tables", - "weight": 357, + "weight": 354, "cookies": false, "type": "", "demo": "tablesdb\/update-table.md", @@ -38501,7 +38501,7 @@ "x-appwrite": { "method": "deleteTable", "group": "tables", - "weight": 358, + "weight": 355, "cookies": false, "type": "", "demo": "tablesdb\/delete-table.md", @@ -38577,7 +38577,7 @@ "x-appwrite": { "method": "listColumns", "group": "columns", - "weight": 364, + "weight": 361, "cookies": false, "type": "", "demo": "tablesdb\/list-columns.md", @@ -38677,7 +38677,7 @@ "x-appwrite": { "method": "createBooleanColumn", "group": "columns", - "weight": 365, + "weight": 362, "cookies": false, "type": "", "demo": "tablesdb\/create-boolean-column.md", @@ -38789,7 +38789,7 @@ "x-appwrite": { "method": "updateBooleanColumn", "group": "columns", - "weight": 366, + "weight": 363, "cookies": false, "type": "", "demo": "tablesdb\/update-boolean-column.md", @@ -38906,7 +38906,7 @@ "x-appwrite": { "method": "createDatetimeColumn", "group": "columns", - "weight": 367, + "weight": 364, "cookies": false, "type": "", "demo": "tablesdb\/create-datetime-column.md", @@ -39018,7 +39018,7 @@ "x-appwrite": { "method": "updateDatetimeColumn", "group": "columns", - "weight": 368, + "weight": 365, "cookies": false, "type": "", "demo": "tablesdb\/update-datetime-column.md", @@ -39135,7 +39135,7 @@ "x-appwrite": { "method": "createEmailColumn", "group": "columns", - "weight": 369, + "weight": 366, "cookies": false, "type": "", "demo": "tablesdb\/create-email-column.md", @@ -39248,7 +39248,7 @@ "x-appwrite": { "method": "updateEmailColumn", "group": "columns", - "weight": 370, + "weight": 367, "cookies": false, "type": "", "demo": "tablesdb\/update-email-column.md", @@ -39366,7 +39366,7 @@ "x-appwrite": { "method": "createEnumColumn", "group": "columns", - "weight": 371, + "weight": 368, "cookies": false, "type": "", "demo": "tablesdb\/create-enum-column.md", @@ -39487,7 +39487,7 @@ "x-appwrite": { "method": "updateEnumColumn", "group": "columns", - "weight": 372, + "weight": 369, "cookies": false, "type": "", "demo": "tablesdb\/update-enum-column.md", @@ -39613,7 +39613,7 @@ "x-appwrite": { "method": "createFloatColumn", "group": "columns", - "weight": 373, + "weight": 370, "cookies": false, "type": "", "demo": "tablesdb\/create-float-column.md", @@ -39740,7 +39740,7 @@ "x-appwrite": { "method": "updateFloatColumn", "group": "columns", - "weight": 374, + "weight": 371, "cookies": false, "type": "", "demo": "tablesdb\/update-float-column.md", @@ -39872,7 +39872,7 @@ "x-appwrite": { "method": "createIntegerColumn", "group": "columns", - "weight": 375, + "weight": 372, "cookies": false, "type": "", "demo": "tablesdb\/create-integer-column.md", @@ -39999,7 +39999,7 @@ "x-appwrite": { "method": "updateIntegerColumn", "group": "columns", - "weight": 376, + "weight": 373, "cookies": false, "type": "", "demo": "tablesdb\/update-integer-column.md", @@ -40131,7 +40131,7 @@ "x-appwrite": { "method": "createIpColumn", "group": "columns", - "weight": 377, + "weight": 374, "cookies": false, "type": "", "demo": "tablesdb\/create-ip-column.md", @@ -40243,7 +40243,7 @@ "x-appwrite": { "method": "updateIpColumn", "group": "columns", - "weight": 378, + "weight": 375, "cookies": false, "type": "", "demo": "tablesdb\/update-ip-column.md", @@ -40360,7 +40360,7 @@ "x-appwrite": { "method": "createLineColumn", "group": "columns", - "weight": 379, + "weight": 376, "cookies": false, "type": "", "demo": "tablesdb\/create-line-column.md", @@ -40474,7 +40474,7 @@ "x-appwrite": { "method": "updateLineColumn", "group": "columns", - "weight": 380, + "weight": 377, "cookies": false, "type": "", "demo": "tablesdb\/update-line-column.md", @@ -40597,7 +40597,7 @@ "x-appwrite": { "method": "createLongtextColumn", "group": "columns", - "weight": 397, + "weight": 394, "cookies": false, "type": "", "demo": "tablesdb\/create-longtext-column.md", @@ -40709,7 +40709,7 @@ "x-appwrite": { "method": "updateLongtextColumn", "group": "columns", - "weight": 398, + "weight": 395, "cookies": false, "type": "", "demo": "tablesdb\/update-longtext-column.md", @@ -40826,7 +40826,7 @@ "x-appwrite": { "method": "createMediumtextColumn", "group": "columns", - "weight": 395, + "weight": 392, "cookies": false, "type": "", "demo": "tablesdb\/create-mediumtext-column.md", @@ -40938,7 +40938,7 @@ "x-appwrite": { "method": "updateMediumtextColumn", "group": "columns", - "weight": 396, + "weight": 393, "cookies": false, "type": "", "demo": "tablesdb\/update-mediumtext-column.md", @@ -41055,7 +41055,7 @@ "x-appwrite": { "method": "createPointColumn", "group": "columns", - "weight": 381, + "weight": 378, "cookies": false, "type": "", "demo": "tablesdb\/create-point-column.md", @@ -41169,7 +41169,7 @@ "x-appwrite": { "method": "updatePointColumn", "group": "columns", - "weight": 382, + "weight": 379, "cookies": false, "type": "", "demo": "tablesdb\/update-point-column.md", @@ -41292,7 +41292,7 @@ "x-appwrite": { "method": "createPolygonColumn", "group": "columns", - "weight": 383, + "weight": 380, "cookies": false, "type": "", "demo": "tablesdb\/create-polygon-column.md", @@ -41406,7 +41406,7 @@ "x-appwrite": { "method": "updatePolygonColumn", "group": "columns", - "weight": 384, + "weight": 381, "cookies": false, "type": "", "demo": "tablesdb\/update-polygon-column.md", @@ -41529,7 +41529,7 @@ "x-appwrite": { "method": "createRelationshipColumn", "group": "columns", - "weight": 385, + "weight": 382, "cookies": false, "type": "", "demo": "tablesdb\/create-relationship-column.md", @@ -41667,7 +41667,7 @@ "x-appwrite": { "method": "createStringColumn", "group": "columns", - "weight": 387, + "weight": 384, "cookies": false, "type": "", "demo": "tablesdb\/create-string-column.md", @@ -41795,7 +41795,7 @@ "x-appwrite": { "method": "updateStringColumn", "group": "columns", - "weight": 388, + "weight": 385, "cookies": false, "type": "", "demo": "tablesdb\/update-string-column.md", @@ -41923,7 +41923,7 @@ "x-appwrite": { "method": "createTextColumn", "group": "columns", - "weight": 393, + "weight": 390, "cookies": false, "type": "", "demo": "tablesdb\/create-text-column.md", @@ -42035,7 +42035,7 @@ "x-appwrite": { "method": "updateTextColumn", "group": "columns", - "weight": 394, + "weight": 391, "cookies": false, "type": "", "demo": "tablesdb\/update-text-column.md", @@ -42152,7 +42152,7 @@ "x-appwrite": { "method": "createUrlColumn", "group": "columns", - "weight": 389, + "weight": 386, "cookies": false, "type": "", "demo": "tablesdb\/create-url-column.md", @@ -42265,7 +42265,7 @@ "x-appwrite": { "method": "updateUrlColumn", "group": "columns", - "weight": 390, + "weight": 387, "cookies": false, "type": "", "demo": "tablesdb\/update-url-column.md", @@ -42383,7 +42383,7 @@ "x-appwrite": { "method": "createVarcharColumn", "group": "columns", - "weight": 391, + "weight": 388, "cookies": false, "type": "", "demo": "tablesdb\/create-varchar-column.md", @@ -42502,7 +42502,7 @@ "x-appwrite": { "method": "updateVarcharColumn", "group": "columns", - "weight": 392, + "weight": 389, "cookies": false, "type": "", "demo": "tablesdb\/update-varchar-column.md", @@ -42657,7 +42657,7 @@ "x-appwrite": { "method": "getColumn", "group": "columns", - "weight": 362, + "weight": 359, "cookies": false, "type": "", "demo": "tablesdb\/get-column.md", @@ -42733,7 +42733,7 @@ "x-appwrite": { "method": "deleteColumn", "group": "columns", - "weight": 363, + "weight": 360, "cookies": false, "type": "", "demo": "tablesdb\/delete-column.md", @@ -42818,7 +42818,7 @@ "x-appwrite": { "method": "updateRelationshipColumn", "group": "columns", - "weight": 386, + "weight": 383, "cookies": false, "type": "", "demo": "tablesdb\/update-relationship-column.md", @@ -42933,7 +42933,7 @@ "x-appwrite": { "method": "listIndexes", "group": "indexes", - "weight": 402, + "weight": 399, "cookies": false, "type": "", "demo": "tablesdb\/list-indexes.md", @@ -43031,7 +43031,7 @@ "x-appwrite": { "method": "createIndex", "group": "indexes", - "weight": 399, + "weight": 396, "cookies": false, "type": "", "demo": "tablesdb\/create-index.md", @@ -43171,7 +43171,7 @@ "x-appwrite": { "method": "getIndex", "group": "indexes", - "weight": 400, + "weight": 397, "cookies": false, "type": "", "demo": "tablesdb\/get-index.md", @@ -43247,7 +43247,7 @@ "x-appwrite": { "method": "deleteIndex", "group": "indexes", - "weight": 401, + "weight": 398, "cookies": false, "type": "", "demo": "tablesdb\/delete-index.md", @@ -43332,7 +43332,7 @@ "x-appwrite": { "method": "listTableLogs", "group": "tables", - "weight": 360, + "weight": 357, "cookies": false, "type": "", "demo": "tablesdb\/list-table-logs.md", @@ -43419,7 +43419,7 @@ "x-appwrite": { "method": "listRows", "group": "rows", - "weight": 411, + "weight": 408, "cookies": false, "type": "", "demo": "tablesdb\/list-rows.md", @@ -43530,7 +43530,7 @@ "x-appwrite": { "method": "createRow", "group": "rows", - "weight": 403, + "weight": 400, "cookies": false, "type": "", "demo": "tablesdb\/create-row.md", @@ -43712,7 +43712,7 @@ "x-appwrite": { "method": "upsertRows", "group": "rows", - "weight": 408, + "weight": 405, "cookies": false, "type": "", "demo": "tablesdb\/upsert-rows.md", @@ -43844,7 +43844,7 @@ "x-appwrite": { "method": "updateRows", "group": "rows", - "weight": 406, + "weight": 403, "cookies": false, "type": "", "demo": "tablesdb\/update-rows.md", @@ -43948,7 +43948,7 @@ "x-appwrite": { "method": "deleteRows", "group": "rows", - "weight": 410, + "weight": 407, "cookies": false, "type": "", "demo": "tablesdb\/delete-rows.md", @@ -44049,7 +44049,7 @@ "x-appwrite": { "method": "getRow", "group": "rows", - "weight": 404, + "weight": 401, "cookies": false, "type": "", "demo": "tablesdb\/get-row.md", @@ -44159,7 +44159,7 @@ "x-appwrite": { "method": "upsertRow", "group": "rows", - "weight": 407, + "weight": 404, "cookies": false, "type": "", "demo": "tablesdb\/upsert-row.md", @@ -44309,7 +44309,7 @@ "x-appwrite": { "method": "updateRow", "group": "rows", - "weight": 405, + "weight": 402, "cookies": false, "type": "", "demo": "tablesdb\/update-row.md", @@ -44420,7 +44420,7 @@ "x-appwrite": { "method": "deleteRow", "group": "rows", - "weight": 409, + "weight": 406, "cookies": false, "type": "", "demo": "tablesdb\/delete-row.md", @@ -44526,7 +44526,7 @@ "x-appwrite": { "method": "listRowLogs", "group": "logs", - "weight": 412, + "weight": 409, "cookies": false, "type": "", "demo": "tablesdb\/list-row-logs.md", @@ -44623,7 +44623,7 @@ "x-appwrite": { "method": "decrementRowColumn", "group": "rows", - "weight": 414, + "weight": 411, "cookies": false, "type": "", "demo": "tablesdb\/decrement-row-column.md", @@ -44751,7 +44751,7 @@ "x-appwrite": { "method": "incrementRowColumn", "group": "rows", - "weight": 413, + "weight": 410, "cookies": false, "type": "", "demo": "tablesdb\/increment-row-column.md", @@ -44879,7 +44879,7 @@ "x-appwrite": { "method": "getTableUsage", "group": null, - "weight": 361, + "weight": 358, "cookies": false, "type": "", "demo": "tablesdb\/get-table-usage.md", @@ -44975,7 +44975,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 353, + "weight": 350, "cookies": false, "type": "", "demo": "tablesdb\/get-usage.md", @@ -46266,7 +46266,7 @@ "x-appwrite": { "method": "list", "group": "files", - "weight": 533, + "weight": 530, "cookies": false, "type": "", "demo": "tokens\/list.md", @@ -46360,7 +46360,7 @@ "x-appwrite": { "method": "createFileToken", "group": "files", - "weight": 531, + "weight": 528, "cookies": false, "type": "", "demo": "tokens\/create-file-token.md", @@ -46449,7 +46449,7 @@ "x-appwrite": { "method": "get", "group": "tokens", - "weight": 532, + "weight": 529, "cookies": false, "type": "", "demo": "tokens\/get.md", @@ -46509,7 +46509,7 @@ "x-appwrite": { "method": "update", "group": "tokens", - "weight": 534, + "weight": 531, "cookies": false, "type": "", "demo": "tokens\/update.md", @@ -46579,7 +46579,7 @@ "x-appwrite": { "method": "delete", "group": "tokens", - "weight": 535, + "weight": 532, "cookies": false, "type": "", "demo": "tokens\/delete.md", @@ -50948,7 +50948,7 @@ "x-appwrite": { "method": "updateExternalDeployments", "group": "repositories", - "weight": 178, + "weight": 175, "cookies": false, "type": "", "demo": "vcs\/update-external-deployments.md", @@ -51038,7 +51038,7 @@ "x-appwrite": { "method": "listInstallations", "group": "installations", - "weight": 175, + "weight": 550, "cookies": false, "type": "", "demo": "vcs\/list-installations.md", @@ -51124,7 +51124,7 @@ "x-appwrite": { "method": "getInstallation", "group": "installations", - "weight": 176, + "weight": 549, "cookies": false, "type": "", "demo": "vcs\/get-installation.md", @@ -51176,7 +51176,7 @@ "x-appwrite": { "method": "deleteInstallation", "group": "installations", - "weight": 177, + "weight": 551, "cookies": false, "type": "", "demo": "vcs\/delete-installation.md", @@ -52922,6 +52922,18 @@ "$ref": "#\/components\/schemas\/index" }, "x-example": {} + }, + "bytesMax": { + "type": "integer", + "description": "Maximum document size in bytes. Returns 0 when no limit applies.", + "x-example": 65535, + "format": "int32" + }, + "bytesUsed": { + "type": "integer", + "description": "Currently used document size in bytes based on defined attributes.", + "x-example": 1500, + "format": "int32" } }, "required": [ @@ -52934,7 +52946,9 @@ "enabled", "documentSecurity", "attributes", - "indexes" + "indexes", + "bytesMax", + "bytesUsed" ], "example": { "$id": "5e5ea5c16897e", @@ -52948,7 +52962,9 @@ "enabled": false, "documentSecurity": true, "attributes": {}, - "indexes": {} + "indexes": {}, + "bytesMax": 65535, + "bytesUsed": 1500 } }, "attributeList": { @@ -54715,6 +54731,18 @@ "$ref": "#\/components\/schemas\/columnIndex" }, "x-example": {} + }, + "bytesMax": { + "type": "integer", + "description": "Maximum row size in bytes. Returns 0 when no limit applies.", + "x-example": 65535, + "format": "int32" + }, + "bytesUsed": { + "type": "integer", + "description": "Currently used row size in bytes based on defined columns.", + "x-example": 1500, + "format": "int32" } }, "required": [ @@ -54727,7 +54755,9 @@ "enabled", "rowSecurity", "columns", - "indexes" + "indexes", + "bytesMax", + "bytesUsed" ], "example": { "$id": "5e5ea5c16897e", @@ -54741,7 +54771,9 @@ "enabled": false, "rowSecurity": true, "columns": {}, - "indexes": {} + "indexes": {}, + "bytesMax": 65535, + "bytesUsed": 1500 } }, "columnList": { diff --git a/app/config/specs/open-api3-latest-server.json b/app/config/specs/open-api3-latest-server.json index f63942090c..ee2af4b70a 100644 --- a/app/config/specs/open-api3-latest-server.json +++ b/app/config/specs/open-api3-latest-server.json @@ -562,7 +562,7 @@ "x-appwrite": { "method": "updateMFA", "group": "mfa", - "weight": 253, + "weight": 250, "cookies": false, "type": "", "demo": "account\/update-mfa.md", @@ -635,7 +635,7 @@ "x-appwrite": { "method": "createMfaAuthenticator", "group": "mfa", - "weight": 255, + "weight": 252, "cookies": false, "type": "", "demo": "account\/create-mfa-authenticator.md", @@ -762,7 +762,7 @@ "x-appwrite": { "method": "updateMfaAuthenticator", "group": "mfa", - "weight": 256, + "weight": 253, "cookies": false, "type": "", "demo": "account\/update-mfa-authenticator.md", @@ -905,7 +905,7 @@ "x-appwrite": { "method": "deleteMfaAuthenticator", "group": "mfa", - "weight": 257, + "weight": 254, "cookies": false, "type": "", "demo": "account\/delete-mfa-authenticator.md", @@ -1032,7 +1032,7 @@ "x-appwrite": { "method": "createMfaChallenge", "group": "mfa", - "weight": 261, + "weight": 258, "cookies": false, "type": "", "demo": "account\/create-mfa-challenge.md", @@ -1169,7 +1169,7 @@ "x-appwrite": { "method": "updateMfaChallenge", "group": "mfa", - "weight": 262, + "weight": 259, "cookies": false, "type": "", "demo": "account\/update-mfa-challenge.md", @@ -1310,7 +1310,7 @@ "x-appwrite": { "method": "listMfaFactors", "group": "mfa", - "weight": 254, + "weight": 251, "cookies": false, "type": "", "demo": "account\/list-mfa-factors.md", @@ -1414,7 +1414,7 @@ "x-appwrite": { "method": "getMfaRecoveryCodes", "group": "mfa", - "weight": 260, + "weight": 257, "cookies": false, "type": "", "demo": "account\/get-mfa-recovery-codes.md", @@ -1516,7 +1516,7 @@ "x-appwrite": { "method": "createMfaRecoveryCodes", "group": "mfa", - "weight": 258, + "weight": 255, "cookies": false, "type": "", "demo": "account\/create-mfa-recovery-codes.md", @@ -1618,7 +1618,7 @@ "x-appwrite": { "method": "updateMfaRecoveryCodes", "group": "mfa", - "weight": 259, + "weight": 256, "cookies": false, "type": "", "demo": "account\/update-mfa-recovery-codes.md", @@ -3761,7 +3761,7 @@ "x-appwrite": { "method": "getBrowser", "group": null, - "weight": 264, + "weight": 261, "cookies": false, "type": "location", "demo": "avatars\/get-browser.md", @@ -3891,7 +3891,7 @@ "x-appwrite": { "method": "getCreditCard", "group": null, - "weight": 263, + "weight": 260, "cookies": false, "type": "location", "demo": "avatars\/get-credit-card.md", @@ -4027,7 +4027,7 @@ "x-appwrite": { "method": "getFavicon", "group": null, - "weight": 267, + "weight": 264, "cookies": false, "type": "location", "demo": "avatars\/get-favicon.md", @@ -4089,7 +4089,7 @@ "x-appwrite": { "method": "getFlag", "group": null, - "weight": 265, + "weight": 262, "cookies": false, "type": "location", "demo": "avatars\/get-flag.md", @@ -4581,7 +4581,7 @@ "x-appwrite": { "method": "getImage", "group": null, - "weight": 266, + "weight": 263, "cookies": false, "type": "location", "demo": "avatars\/get-image.md", @@ -4667,7 +4667,7 @@ "x-appwrite": { "method": "getInitials", "group": null, - "weight": 269, + "weight": 266, "cookies": false, "type": "location", "demo": "avatars\/get-initials.md", @@ -4763,7 +4763,7 @@ "x-appwrite": { "method": "getQR", "group": null, - "weight": 268, + "weight": 265, "cookies": false, "type": "location", "demo": "avatars\/get-qr.md", @@ -4859,7 +4859,7 @@ "x-appwrite": { "method": "getScreenshot", "group": null, - "weight": 270, + "weight": 267, "cookies": false, "type": "location", "demo": "avatars\/get-screenshot.md", @@ -5614,7 +5614,7 @@ "x-appwrite": { "method": "list", "group": "databases", - "weight": 278, + "weight": 275, "cookies": false, "type": "", "demo": "databases\/list.md", @@ -5735,7 +5735,7 @@ "x-appwrite": { "method": "create", "group": "databases", - "weight": 274, + "weight": 271, "cookies": false, "type": "", "demo": "databases\/create.md", @@ -5854,7 +5854,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 346, + "weight": 343, "cookies": false, "type": "", "demo": "databases\/list-transactions.md", @@ -5923,7 +5923,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 342, + "weight": 339, "cookies": false, "type": "", "demo": "databases\/create-transaction.md", @@ -5996,7 +5996,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 343, + "weight": 340, "cookies": false, "type": "", "demo": "databases\/get-transaction.md", @@ -6062,7 +6062,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 344, + "weight": 341, "cookies": false, "type": "", "demo": "databases\/update-transaction.md", @@ -6142,7 +6142,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 345, + "weight": 342, "cookies": false, "type": "", "demo": "databases\/delete-transaction.md", @@ -6210,7 +6210,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 347, + "weight": 344, "cookies": false, "type": "", "demo": "databases\/create-operations.md", @@ -6297,7 +6297,7 @@ "x-appwrite": { "method": "get", "group": "databases", - "weight": 275, + "weight": 272, "cookies": false, "type": "", "demo": "databases\/get.md", @@ -6393,7 +6393,7 @@ "x-appwrite": { "method": "update", "group": "databases", - "weight": 276, + "weight": 273, "cookies": false, "type": "", "demo": "databases\/update.md", @@ -6505,7 +6505,7 @@ "x-appwrite": { "method": "delete", "group": "databases", - "weight": 277, + "weight": 274, "cookies": false, "type": "", "demo": "databases\/delete.md", @@ -6602,7 +6602,7 @@ "x-appwrite": { "method": "listCollections", "group": "collections", - "weight": 286, + "weight": 283, "cookies": false, "type": "", "demo": "databases\/list-collections.md", @@ -6703,7 +6703,7 @@ "x-appwrite": { "method": "createCollection", "group": "collections", - "weight": 282, + "weight": 279, "cookies": false, "type": "", "demo": "databases\/create-collection.md", @@ -6831,7 +6831,7 @@ "x-appwrite": { "method": "getCollection", "group": "collections", - "weight": 283, + "weight": 280, "cookies": false, "type": "", "demo": "databases\/get-collection.md", @@ -6907,7 +6907,7 @@ "x-appwrite": { "method": "updateCollection", "group": "collections", - "weight": 284, + "weight": 281, "cookies": false, "type": "", "demo": "databases\/update-collection.md", @@ -7011,7 +7011,7 @@ "x-appwrite": { "method": "deleteCollection", "group": "collections", - "weight": 285, + "weight": 282, "cookies": false, "type": "", "demo": "databases\/delete-collection.md", @@ -7089,7 +7089,7 @@ "x-appwrite": { "method": "listAttributes", "group": "attributes", - "weight": 303, + "weight": 300, "cookies": false, "type": "", "demo": "databases\/list-attributes.md", @@ -7191,7 +7191,7 @@ "x-appwrite": { "method": "createBooleanAttribute", "group": "attributes", - "weight": 304, + "weight": 301, "cookies": false, "type": "", "demo": "databases\/create-boolean-attribute.md", @@ -7305,7 +7305,7 @@ "x-appwrite": { "method": "updateBooleanAttribute", "group": "attributes", - "weight": 305, + "weight": 302, "cookies": false, "type": "", "demo": "databases\/update-boolean-attribute.md", @@ -7424,7 +7424,7 @@ "x-appwrite": { "method": "createDatetimeAttribute", "group": "attributes", - "weight": 306, + "weight": 303, "cookies": false, "type": "", "demo": "databases\/create-datetime-attribute.md", @@ -7538,7 +7538,7 @@ "x-appwrite": { "method": "updateDatetimeAttribute", "group": "attributes", - "weight": 307, + "weight": 304, "cookies": false, "type": "", "demo": "databases\/update-datetime-attribute.md", @@ -7657,7 +7657,7 @@ "x-appwrite": { "method": "createEmailAttribute", "group": "attributes", - "weight": 308, + "weight": 305, "cookies": false, "type": "", "demo": "databases\/create-email-attribute.md", @@ -7772,7 +7772,7 @@ "x-appwrite": { "method": "updateEmailAttribute", "group": "attributes", - "weight": 309, + "weight": 306, "cookies": false, "type": "", "demo": "databases\/update-email-attribute.md", @@ -7892,7 +7892,7 @@ "x-appwrite": { "method": "createEnumAttribute", "group": "attributes", - "weight": 310, + "weight": 307, "cookies": false, "type": "", "demo": "databases\/create-enum-attribute.md", @@ -8015,7 +8015,7 @@ "x-appwrite": { "method": "updateEnumAttribute", "group": "attributes", - "weight": 311, + "weight": 308, "cookies": false, "type": "", "demo": "databases\/update-enum-attribute.md", @@ -8143,7 +8143,7 @@ "x-appwrite": { "method": "createFloatAttribute", "group": "attributes", - "weight": 312, + "weight": 309, "cookies": false, "type": "", "demo": "databases\/create-float-attribute.md", @@ -8272,7 +8272,7 @@ "x-appwrite": { "method": "updateFloatAttribute", "group": "attributes", - "weight": 313, + "weight": 310, "cookies": false, "type": "", "demo": "databases\/update-float-attribute.md", @@ -8406,7 +8406,7 @@ "x-appwrite": { "method": "createIntegerAttribute", "group": "attributes", - "weight": 314, + "weight": 311, "cookies": false, "type": "", "demo": "databases\/create-integer-attribute.md", @@ -8535,7 +8535,7 @@ "x-appwrite": { "method": "updateIntegerAttribute", "group": "attributes", - "weight": 315, + "weight": 312, "cookies": false, "type": "", "demo": "databases\/update-integer-attribute.md", @@ -8669,7 +8669,7 @@ "x-appwrite": { "method": "createIpAttribute", "group": "attributes", - "weight": 316, + "weight": 313, "cookies": false, "type": "", "demo": "databases\/create-ip-attribute.md", @@ -8783,7 +8783,7 @@ "x-appwrite": { "method": "updateIpAttribute", "group": "attributes", - "weight": 317, + "weight": 314, "cookies": false, "type": "", "demo": "databases\/update-ip-attribute.md", @@ -8902,7 +8902,7 @@ "x-appwrite": { "method": "createLineAttribute", "group": "attributes", - "weight": 318, + "weight": 315, "cookies": false, "type": "", "demo": "databases\/create-line-attribute.md", @@ -9018,7 +9018,7 @@ "x-appwrite": { "method": "updateLineAttribute", "group": "attributes", - "weight": 319, + "weight": 316, "cookies": false, "type": "", "demo": "databases\/update-line-attribute.md", @@ -9143,7 +9143,7 @@ "x-appwrite": { "method": "createLongtextAttribute", "group": "attributes", - "weight": 336, + "weight": 333, "cookies": false, "type": "", "demo": "databases\/create-longtext-attribute.md", @@ -9253,7 +9253,7 @@ "x-appwrite": { "method": "updateLongtextAttribute", "group": "attributes", - "weight": 337, + "weight": 334, "cookies": false, "type": "", "demo": "databases\/update-longtext-attribute.md", @@ -9368,7 +9368,7 @@ "x-appwrite": { "method": "createMediumtextAttribute", "group": "attributes", - "weight": 334, + "weight": 331, "cookies": false, "type": "", "demo": "databases\/create-mediumtext-attribute.md", @@ -9478,7 +9478,7 @@ "x-appwrite": { "method": "updateMediumtextAttribute", "group": "attributes", - "weight": 335, + "weight": 332, "cookies": false, "type": "", "demo": "databases\/update-mediumtext-attribute.md", @@ -9593,7 +9593,7 @@ "x-appwrite": { "method": "createPointAttribute", "group": "attributes", - "weight": 320, + "weight": 317, "cookies": false, "type": "", "demo": "databases\/create-point-attribute.md", @@ -9709,7 +9709,7 @@ "x-appwrite": { "method": "updatePointAttribute", "group": "attributes", - "weight": 321, + "weight": 318, "cookies": false, "type": "", "demo": "databases\/update-point-attribute.md", @@ -9834,7 +9834,7 @@ "x-appwrite": { "method": "createPolygonAttribute", "group": "attributes", - "weight": 322, + "weight": 319, "cookies": false, "type": "", "demo": "databases\/create-polygon-attribute.md", @@ -9950,7 +9950,7 @@ "x-appwrite": { "method": "updatePolygonAttribute", "group": "attributes", - "weight": 323, + "weight": 320, "cookies": false, "type": "", "demo": "databases\/update-polygon-attribute.md", @@ -10075,7 +10075,7 @@ "x-appwrite": { "method": "createRelationshipAttribute", "group": "attributes", - "weight": 324, + "weight": 321, "cookies": false, "type": "", "demo": "databases\/create-relationship-attribute.md", @@ -10215,7 +10215,7 @@ "x-appwrite": { "method": "createStringAttribute", "group": "attributes", - "weight": 326, + "weight": 323, "cookies": false, "type": "", "demo": "databases\/create-string-attribute.md", @@ -10341,7 +10341,7 @@ "x-appwrite": { "method": "updateStringAttribute", "group": "attributes", - "weight": 327, + "weight": 324, "cookies": false, "type": "", "demo": "databases\/update-string-attribute.md", @@ -10467,7 +10467,7 @@ "x-appwrite": { "method": "createTextAttribute", "group": "attributes", - "weight": 332, + "weight": 329, "cookies": false, "type": "", "demo": "databases\/create-text-attribute.md", @@ -10577,7 +10577,7 @@ "x-appwrite": { "method": "updateTextAttribute", "group": "attributes", - "weight": 333, + "weight": 330, "cookies": false, "type": "", "demo": "databases\/update-text-attribute.md", @@ -10692,7 +10692,7 @@ "x-appwrite": { "method": "createUrlAttribute", "group": "attributes", - "weight": 328, + "weight": 325, "cookies": false, "type": "", "demo": "databases\/create-url-attribute.md", @@ -10807,7 +10807,7 @@ "x-appwrite": { "method": "updateUrlAttribute", "group": "attributes", - "weight": 329, + "weight": 326, "cookies": false, "type": "", "demo": "databases\/update-url-attribute.md", @@ -10927,7 +10927,7 @@ "x-appwrite": { "method": "createVarcharAttribute", "group": "attributes", - "weight": 330, + "weight": 327, "cookies": false, "type": "", "demo": "databases\/create-varchar-attribute.md", @@ -11044,7 +11044,7 @@ "x-appwrite": { "method": "updateVarcharAttribute", "group": "attributes", - "weight": 331, + "weight": 328, "cookies": false, "type": "", "demo": "databases\/update-varchar-attribute.md", @@ -11197,7 +11197,7 @@ "x-appwrite": { "method": "getAttribute", "group": "attributes", - "weight": 301, + "weight": 298, "cookies": false, "type": "", "demo": "databases\/get-attribute.md", @@ -11275,7 +11275,7 @@ "x-appwrite": { "method": "deleteAttribute", "group": "attributes", - "weight": 302, + "weight": 299, "cookies": false, "type": "", "demo": "databases\/delete-attribute.md", @@ -11362,7 +11362,7 @@ "x-appwrite": { "method": "updateRelationshipAttribute", "group": "attributes", - "weight": 325, + "weight": 322, "cookies": false, "type": "", "demo": "databases\/update-relationship-attribute.md", @@ -11479,7 +11479,7 @@ "x-appwrite": { "method": "listDocuments", "group": "documents", - "weight": 297, + "weight": 294, "cookies": false, "type": "", "demo": "databases\/list-documents.md", @@ -11593,7 +11593,7 @@ "x-appwrite": { "method": "createDocument", "group": "documents", - "weight": 289, + "weight": 286, "cookies": false, "type": "", "demo": "databases\/create-document.md", @@ -11788,7 +11788,7 @@ "x-appwrite": { "method": "upsertDocuments", "group": "documents", - "weight": 294, + "weight": 291, "cookies": false, "type": "", "demo": "databases\/upsert-documents.md", @@ -11927,7 +11927,7 @@ "x-appwrite": { "method": "updateDocuments", "group": "documents", - "weight": 292, + "weight": 289, "cookies": false, "type": "", "demo": "databases\/update-documents.md", @@ -12033,7 +12033,7 @@ "x-appwrite": { "method": "deleteDocuments", "group": "documents", - "weight": 296, + "weight": 293, "cookies": false, "type": "", "demo": "databases\/delete-documents.md", @@ -12136,7 +12136,7 @@ "x-appwrite": { "method": "getDocument", "group": "documents", - "weight": 290, + "weight": 287, "cookies": false, "type": "", "demo": "databases\/get-document.md", @@ -12249,7 +12249,7 @@ "x-appwrite": { "method": "upsertDocument", "group": "documents", - "weight": 293, + "weight": 290, "cookies": false, "type": "", "demo": "databases\/upsert-document.md", @@ -12407,7 +12407,7 @@ "x-appwrite": { "method": "updateDocument", "group": "documents", - "weight": 291, + "weight": 288, "cookies": false, "type": "", "demo": "databases\/update-document.md", @@ -12521,7 +12521,7 @@ "x-appwrite": { "method": "deleteDocument", "group": "documents", - "weight": 295, + "weight": 292, "cookies": false, "type": "", "demo": "databases\/delete-document.md", @@ -12630,7 +12630,7 @@ "x-appwrite": { "method": "decrementDocumentAttribute", "group": "documents", - "weight": 300, + "weight": 297, "cookies": false, "type": "", "demo": "databases\/decrement-document-attribute.md", @@ -12761,7 +12761,7 @@ "x-appwrite": { "method": "incrementDocumentAttribute", "group": "documents", - "weight": 299, + "weight": 296, "cookies": false, "type": "", "demo": "databases\/increment-document-attribute.md", @@ -12892,7 +12892,7 @@ "x-appwrite": { "method": "listIndexes", "group": "indexes", - "weight": 341, + "weight": 338, "cookies": false, "type": "", "demo": "databases\/list-indexes.md", @@ -12992,7 +12992,7 @@ "x-appwrite": { "method": "createIndex", "group": "indexes", - "weight": 338, + "weight": 335, "cookies": false, "type": "", "demo": "databases\/create-index.md", @@ -13134,7 +13134,7 @@ "x-appwrite": { "method": "getIndex", "group": "indexes", - "weight": 339, + "weight": 336, "cookies": false, "type": "", "demo": "databases\/get-index.md", @@ -13212,7 +13212,7 @@ "x-appwrite": { "method": "deleteIndex", "group": "indexes", - "weight": 340, + "weight": 337, "cookies": false, "type": "", "demo": "databases\/delete-index.md", @@ -13299,7 +13299,7 @@ "x-appwrite": { "method": "list", "group": "functions", - "weight": 431, + "weight": 428, "cookies": false, "type": "", "demo": "functions\/list.md", @@ -13385,7 +13385,7 @@ "x-appwrite": { "method": "create", "group": "functions", - "weight": 428, + "weight": 425, "cookies": false, "type": "", "demo": "functions\/create.md", @@ -13682,7 +13682,7 @@ "x-appwrite": { "method": "listRuntimes", "group": "runtimes", - "weight": 433, + "weight": 430, "cookies": false, "type": "", "demo": "functions\/list-runtimes.md", @@ -13733,7 +13733,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "runtimes", - "weight": 434, + "weight": 431, "cookies": false, "type": "", "demo": "functions\/list-specifications.md", @@ -13784,7 +13784,7 @@ "x-appwrite": { "method": "get", "group": "functions", - "weight": 429, + "weight": 426, "cookies": false, "type": "", "demo": "functions\/get.md", @@ -13845,7 +13845,7 @@ "x-appwrite": { "method": "update", "group": "functions", - "weight": 430, + "weight": 427, "cookies": false, "type": "", "demo": "functions\/update.md", @@ -14139,7 +14139,7 @@ "x-appwrite": { "method": "delete", "group": "functions", - "weight": 432, + "weight": 429, "cookies": false, "type": "", "demo": "functions\/delete.md", @@ -14202,7 +14202,7 @@ "x-appwrite": { "method": "updateFunctionDeployment", "group": "functions", - "weight": 437, + "weight": 434, "cookies": false, "type": "", "demo": "functions\/update-function-deployment.md", @@ -14284,7 +14284,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 438, + "weight": 435, "cookies": false, "type": "", "demo": "functions\/list-deployments.md", @@ -14380,7 +14380,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 435, + "weight": 432, "cookies": false, "type": "upload", "demo": "functions\/create-deployment.md", @@ -14481,7 +14481,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 443, + "weight": 440, "cookies": false, "type": "", "demo": "functions\/create-duplicate-deployment.md", @@ -14568,7 +14568,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 440, + "weight": 437, "cookies": false, "type": "", "demo": "functions\/create-template-deployment.md", @@ -14686,7 +14686,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 441, + "weight": 438, "cookies": false, "type": "", "demo": "functions\/create-vcs-deployment.md", @@ -14785,7 +14785,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 436, + "weight": 433, "cookies": false, "type": "", "demo": "functions\/get-deployment.md", @@ -14849,7 +14849,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 439, + "weight": 436, "cookies": false, "type": "", "demo": "functions\/delete-deployment.md", @@ -14915,7 +14915,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 442, + "weight": 439, "cookies": false, "type": "location", "demo": "functions\/get-deployment-download.md", @@ -15007,7 +15007,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 444, + "weight": 441, "cookies": false, "type": "", "demo": "functions\/update-deployment-status.md", @@ -15080,7 +15080,7 @@ "x-appwrite": { "method": "listExecutions", "group": "executions", - "weight": 447, + "weight": 444, "cookies": false, "type": "", "demo": "functions\/list-executions.md", @@ -15169,7 +15169,7 @@ "x-appwrite": { "method": "createExecution", "group": "executions", - "weight": 445, + "weight": 442, "cookies": false, "type": "", "demo": "functions\/create-execution.md", @@ -15289,7 +15289,7 @@ "x-appwrite": { "method": "getExecution", "group": "executions", - "weight": 446, + "weight": 443, "cookies": false, "type": "", "demo": "functions\/get-execution.md", @@ -15357,7 +15357,7 @@ "x-appwrite": { "method": "deleteExecution", "group": "executions", - "weight": 448, + "weight": 445, "cookies": false, "type": "", "demo": "functions\/delete-execution.md", @@ -15430,7 +15430,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 453, + "weight": 450, "cookies": false, "type": "", "demo": "functions\/list-variables.md", @@ -15491,7 +15491,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 451, + "weight": 448, "cookies": false, "type": "", "demo": "functions\/create-variable.md", @@ -15584,7 +15584,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 452, + "weight": 449, "cookies": false, "type": "", "demo": "functions\/get-variable.md", @@ -15655,7 +15655,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 454, + "weight": 451, "cookies": false, "type": "", "demo": "functions\/update-variable.md", @@ -15750,7 +15750,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 455, + "weight": 452, "cookies": false, "type": "", "demo": "functions\/delete-variable.md", @@ -15823,7 +15823,7 @@ "x-appwrite": { "method": "query", "group": "graphql", - "weight": 190, + "weight": 187, "cookies": false, "type": "graphql", "demo": "graphql\/query.md", @@ -15879,7 +15879,7 @@ "x-appwrite": { "method": "mutation", "group": "graphql", - "weight": 189, + "weight": 186, "cookies": false, "type": "graphql", "demo": "graphql\/mutation.md", @@ -15935,7 +15935,7 @@ "x-appwrite": { "method": "get", "group": "health", - "weight": 458, + "weight": 455, "cookies": false, "type": "", "demo": "health\/get.md", @@ -15987,7 +15987,7 @@ "x-appwrite": { "method": "getAntivirus", "group": "health", - "weight": 467, + "weight": 464, "cookies": false, "type": "", "demo": "health\/get-antivirus.md", @@ -16039,7 +16039,7 @@ "x-appwrite": { "method": "getCache", "group": "health", - "weight": 461, + "weight": 458, "cookies": false, "type": "", "demo": "health\/get-cache.md", @@ -16091,7 +16091,7 @@ "x-appwrite": { "method": "getCertificate", "group": "health", - "weight": 464, + "weight": 461, "cookies": false, "type": "", "demo": "health\/get-certificate.md", @@ -16154,7 +16154,7 @@ "x-appwrite": { "method": "getDB", "group": "health", - "weight": 460, + "weight": 457, "cookies": false, "type": "", "demo": "health\/get-db.md", @@ -16206,7 +16206,7 @@ "x-appwrite": { "method": "getPubSub", "group": "health", - "weight": 462, + "weight": 459, "cookies": false, "type": "", "demo": "health\/get-pub-sub.md", @@ -16258,7 +16258,7 @@ "x-appwrite": { "method": "getQueueAudits", "group": "queue", - "weight": 468, + "weight": 465, "cookies": false, "type": "", "demo": "health\/get-queue-audits.md", @@ -16323,7 +16323,7 @@ "x-appwrite": { "method": "getQueueBuilds", "group": "queue", - "weight": 472, + "weight": 469, "cookies": false, "type": "", "demo": "health\/get-queue-builds.md", @@ -16388,7 +16388,7 @@ "x-appwrite": { "method": "getQueueCertificates", "group": "queue", - "weight": 471, + "weight": 468, "cookies": false, "type": "", "demo": "health\/get-queue-certificates.md", @@ -16453,7 +16453,7 @@ "x-appwrite": { "method": "getQueueDatabases", "group": "queue", - "weight": 473, + "weight": 470, "cookies": false, "type": "", "demo": "health\/get-queue-databases.md", @@ -16529,7 +16529,7 @@ "x-appwrite": { "method": "getQueueDeletes", "group": "queue", - "weight": 474, + "weight": 471, "cookies": false, "type": "", "demo": "health\/get-queue-deletes.md", @@ -16594,7 +16594,7 @@ "x-appwrite": { "method": "getFailedJobs", "group": "queue", - "weight": 481, + "weight": 478, "cookies": false, "type": "", "demo": "health\/get-failed-jobs.md", @@ -16686,7 +16686,7 @@ "x-appwrite": { "method": "getQueueFunctions", "group": "queue", - "weight": 478, + "weight": 475, "cookies": false, "type": "", "demo": "health\/get-queue-functions.md", @@ -16751,7 +16751,7 @@ "x-appwrite": { "method": "getQueueLogs", "group": "queue", - "weight": 470, + "weight": 467, "cookies": false, "type": "", "demo": "health\/get-queue-logs.md", @@ -16816,7 +16816,7 @@ "x-appwrite": { "method": "getQueueMails", "group": "queue", - "weight": 475, + "weight": 472, "cookies": false, "type": "", "demo": "health\/get-queue-mails.md", @@ -16881,7 +16881,7 @@ "x-appwrite": { "method": "getQueueMessaging", "group": "queue", - "weight": 476, + "weight": 473, "cookies": false, "type": "", "demo": "health\/get-queue-messaging.md", @@ -16946,7 +16946,7 @@ "x-appwrite": { "method": "getQueueMigrations", "group": "queue", - "weight": 477, + "weight": 474, "cookies": false, "type": "", "demo": "health\/get-queue-migrations.md", @@ -17011,7 +17011,7 @@ "x-appwrite": { "method": "getQueueStatsResources", "group": "queue", - "weight": 479, + "weight": 476, "cookies": false, "type": "", "demo": "health\/get-queue-stats-resources.md", @@ -17076,7 +17076,7 @@ "x-appwrite": { "method": "getQueueUsage", "group": "queue", - "weight": 480, + "weight": 477, "cookies": false, "type": "", "demo": "health\/get-queue-usage.md", @@ -17141,7 +17141,7 @@ "x-appwrite": { "method": "getQueueWebhooks", "group": "queue", - "weight": 469, + "weight": 466, "cookies": false, "type": "", "demo": "health\/get-queue-webhooks.md", @@ -17206,7 +17206,7 @@ "x-appwrite": { "method": "getStorage", "group": "storage", - "weight": 466, + "weight": 463, "cookies": false, "type": "", "demo": "health\/get-storage.md", @@ -17258,7 +17258,7 @@ "x-appwrite": { "method": "getStorageLocal", "group": "storage", - "weight": 465, + "weight": 462, "cookies": false, "type": "", "demo": "health\/get-storage-local.md", @@ -17310,7 +17310,7 @@ "x-appwrite": { "method": "getTime", "group": "health", - "weight": 463, + "weight": 460, "cookies": false, "type": "", "demo": "health\/get-time.md", @@ -17810,7 +17810,7 @@ "x-appwrite": { "method": "listMessages", "group": "messages", - "weight": 245, + "weight": 242, "cookies": false, "type": "", "demo": "messaging\/list-messages.md", @@ -17899,7 +17899,7 @@ "x-appwrite": { "method": "createEmail", "group": "messages", - "weight": 242, + "weight": 239, "cookies": false, "type": "", "demo": "messaging\/create-email.md", @@ -18046,7 +18046,7 @@ "x-appwrite": { "method": "updateEmail", "group": "messages", - "weight": 249, + "weight": 246, "cookies": false, "type": "", "demo": "messaging\/update-email.md", @@ -18205,7 +18205,7 @@ "x-appwrite": { "method": "createPush", "group": "messages", - "weight": 244, + "weight": 241, "cookies": false, "type": "", "demo": "messaging\/create-push.md", @@ -18384,7 +18384,7 @@ "x-appwrite": { "method": "updatePush", "group": "messages", - "weight": 251, + "weight": 248, "cookies": false, "type": "", "demo": "messaging\/update-push.md", @@ -18583,7 +18583,7 @@ "x-appwrite": { "method": "createSms", "group": "messages", - "weight": 243, + "weight": 240, "cookies": false, "type": "", "demo": "messaging\/create-sms.md", @@ -18767,7 +18767,7 @@ "x-appwrite": { "method": "updateSms", "group": "messages", - "weight": 250, + "weight": 247, "cookies": false, "type": "", "demo": "messaging\/update-sms.md", @@ -18957,7 +18957,7 @@ "x-appwrite": { "method": "getMessage", "group": "messages", - "weight": 248, + "weight": 245, "cookies": false, "type": "", "demo": "messaging\/get-message.md", @@ -19012,7 +19012,7 @@ "x-appwrite": { "method": "delete", "group": "messages", - "weight": 252, + "weight": 249, "cookies": false, "type": "", "demo": "messaging\/delete.md", @@ -19076,7 +19076,7 @@ "x-appwrite": { "method": "listMessageLogs", "group": "logs", - "weight": 246, + "weight": 243, "cookies": false, "type": "", "demo": "messaging\/list-message-logs.md", @@ -19164,7 +19164,7 @@ "x-appwrite": { "method": "listTargets", "group": "messages", - "weight": 247, + "weight": 244, "cookies": false, "type": "", "demo": "messaging\/list-targets.md", @@ -19252,7 +19252,7 @@ "x-appwrite": { "method": "listProviders", "group": "providers", - "weight": 216, + "weight": 213, "cookies": false, "type": "", "demo": "messaging\/list-providers.md", @@ -19341,7 +19341,7 @@ "x-appwrite": { "method": "createApnsProvider", "group": "providers", - "weight": 215, + "weight": 212, "cookies": false, "type": "", "demo": "messaging\/create-apns-provider.md", @@ -19523,7 +19523,7 @@ "x-appwrite": { "method": "updateApnsProvider", "group": "providers", - "weight": 229, + "weight": 226, "cookies": false, "type": "", "demo": "messaging\/update-apns-provider.md", @@ -19707,7 +19707,7 @@ "x-appwrite": { "method": "createFcmProvider", "group": "providers", - "weight": 214, + "weight": 211, "cookies": false, "type": "", "demo": "messaging\/create-fcm-provider.md", @@ -19862,7 +19862,7 @@ "x-appwrite": { "method": "updateFcmProvider", "group": "providers", - "weight": 228, + "weight": 225, "cookies": false, "type": "", "demo": "messaging\/update-fcm-provider.md", @@ -20018,7 +20018,7 @@ "x-appwrite": { "method": "createMailgunProvider", "group": "providers", - "weight": 205, + "weight": 202, "cookies": false, "type": "", "demo": "messaging\/create-mailgun-provider.md", @@ -20139,7 +20139,7 @@ "x-appwrite": { "method": "updateMailgunProvider", "group": "providers", - "weight": 219, + "weight": 216, "cookies": false, "type": "", "demo": "messaging\/update-mailgun-provider.md", @@ -20262,7 +20262,7 @@ "x-appwrite": { "method": "createMsg91Provider", "group": "providers", - "weight": 209, + "weight": 206, "cookies": false, "type": "", "demo": "messaging\/create-msg-91-provider.md", @@ -20360,7 +20360,7 @@ "x-appwrite": { "method": "updateMsg91Provider", "group": "providers", - "weight": 223, + "weight": 220, "cookies": false, "type": "", "demo": "messaging\/update-msg-91-provider.md", @@ -20461,7 +20461,7 @@ "x-appwrite": { "method": "createResendProvider", "group": "providers", - "weight": 207, + "weight": 204, "cookies": false, "type": "", "demo": "messaging\/create-resend-provider.md", @@ -20571,7 +20571,7 @@ "x-appwrite": { "method": "updateResendProvider", "group": "providers", - "weight": 221, + "weight": 218, "cookies": false, "type": "", "demo": "messaging\/update-resend-provider.md", @@ -20683,7 +20683,7 @@ "x-appwrite": { "method": "createSendgridProvider", "group": "providers", - "weight": 206, + "weight": 203, "cookies": false, "type": "", "demo": "messaging\/create-sendgrid-provider.md", @@ -20793,7 +20793,7 @@ "x-appwrite": { "method": "updateSendgridProvider", "group": "providers", - "weight": 220, + "weight": 217, "cookies": false, "type": "", "demo": "messaging\/update-sendgrid-provider.md", @@ -20905,7 +20905,7 @@ "x-appwrite": { "method": "createSmtpProvider", "group": "providers", - "weight": 208, + "weight": 205, "cookies": false, "type": "", "demo": "messaging\/create-smtp-provider.md", @@ -21142,7 +21142,7 @@ "x-appwrite": { "method": "updateSmtpProvider", "group": "providers", - "weight": 222, + "weight": 219, "cookies": false, "type": "", "demo": "messaging\/update-smtp-provider.md", @@ -21378,7 +21378,7 @@ "x-appwrite": { "method": "createTelesignProvider", "group": "providers", - "weight": 210, + "weight": 207, "cookies": false, "type": "", "demo": "messaging\/create-telesign-provider.md", @@ -21477,7 +21477,7 @@ "x-appwrite": { "method": "updateTelesignProvider", "group": "providers", - "weight": 224, + "weight": 221, "cookies": false, "type": "", "demo": "messaging\/update-telesign-provider.md", @@ -21578,7 +21578,7 @@ "x-appwrite": { "method": "createTextmagicProvider", "group": "providers", - "weight": 211, + "weight": 208, "cookies": false, "type": "", "demo": "messaging\/create-textmagic-provider.md", @@ -21677,7 +21677,7 @@ "x-appwrite": { "method": "updateTextmagicProvider", "group": "providers", - "weight": 225, + "weight": 222, "cookies": false, "type": "", "demo": "messaging\/update-textmagic-provider.md", @@ -21778,7 +21778,7 @@ "x-appwrite": { "method": "createTwilioProvider", "group": "providers", - "weight": 212, + "weight": 209, "cookies": false, "type": "", "demo": "messaging\/create-twilio-provider.md", @@ -21877,7 +21877,7 @@ "x-appwrite": { "method": "updateTwilioProvider", "group": "providers", - "weight": 226, + "weight": 223, "cookies": false, "type": "", "demo": "messaging\/update-twilio-provider.md", @@ -21978,7 +21978,7 @@ "x-appwrite": { "method": "createVonageProvider", "group": "providers", - "weight": 213, + "weight": 210, "cookies": false, "type": "", "demo": "messaging\/create-vonage-provider.md", @@ -22077,7 +22077,7 @@ "x-appwrite": { "method": "updateVonageProvider", "group": "providers", - "weight": 227, + "weight": 224, "cookies": false, "type": "", "demo": "messaging\/update-vonage-provider.md", @@ -22178,7 +22178,7 @@ "x-appwrite": { "method": "getProvider", "group": "providers", - "weight": 218, + "weight": 215, "cookies": false, "type": "", "demo": "messaging\/get-provider.md", @@ -22233,7 +22233,7 @@ "x-appwrite": { "method": "deleteProvider", "group": "providers", - "weight": 230, + "weight": 227, "cookies": false, "type": "", "demo": "messaging\/delete-provider.md", @@ -22297,7 +22297,7 @@ "x-appwrite": { "method": "listProviderLogs", "group": "providers", - "weight": 217, + "weight": 214, "cookies": false, "type": "", "demo": "messaging\/list-provider-logs.md", @@ -22385,7 +22385,7 @@ "x-appwrite": { "method": "listSubscriberLogs", "group": "subscribers", - "weight": 239, + "weight": 236, "cookies": false, "type": "", "demo": "messaging\/list-subscriber-logs.md", @@ -22473,7 +22473,7 @@ "x-appwrite": { "method": "listTopics", "group": "topics", - "weight": 232, + "weight": 229, "cookies": false, "type": "", "demo": "messaging\/list-topics.md", @@ -22560,7 +22560,7 @@ "x-appwrite": { "method": "createTopic", "group": "topics", - "weight": 231, + "weight": 228, "cookies": false, "type": "", "demo": "messaging\/create-topic.md", @@ -22645,7 +22645,7 @@ "x-appwrite": { "method": "getTopic", "group": "topics", - "weight": 234, + "weight": 231, "cookies": false, "type": "", "demo": "messaging\/get-topic.md", @@ -22707,7 +22707,7 @@ "x-appwrite": { "method": "updateTopic", "group": "topics", - "weight": 235, + "weight": 232, "cookies": false, "type": "", "demo": "messaging\/update-topic.md", @@ -22788,7 +22788,7 @@ "x-appwrite": { "method": "deleteTopic", "group": "topics", - "weight": 236, + "weight": 233, "cookies": false, "type": "", "demo": "messaging\/delete-topic.md", @@ -22852,7 +22852,7 @@ "x-appwrite": { "method": "listTopicLogs", "group": "topics", - "weight": 233, + "weight": 230, "cookies": false, "type": "", "demo": "messaging\/list-topic-logs.md", @@ -22940,7 +22940,7 @@ "x-appwrite": { "method": "listSubscribers", "group": "subscribers", - "weight": 238, + "weight": 235, "cookies": false, "type": "", "demo": "messaging\/list-subscribers.md", @@ -23037,7 +23037,7 @@ "x-appwrite": { "method": "createSubscriber", "group": "subscribers", - "weight": 237, + "weight": 234, "cookies": false, "type": "", "demo": "messaging\/create-subscriber.md", @@ -23130,7 +23130,7 @@ "x-appwrite": { "method": "getSubscriber", "group": "subscribers", - "weight": 240, + "weight": 237, "cookies": false, "type": "", "demo": "messaging\/get-subscriber.md", @@ -23195,7 +23195,7 @@ "x-appwrite": { "method": "deleteSubscriber", "group": "subscribers", - "weight": 241, + "weight": 238, "cookies": false, "type": "", "demo": "messaging\/delete-subscriber.md", @@ -23273,7 +23273,7 @@ "x-appwrite": { "method": "list", "group": "sites", - "weight": 485, + "weight": 482, "cookies": false, "type": "", "demo": "sites\/list.md", @@ -23359,7 +23359,7 @@ "x-appwrite": { "method": "create", "group": "sites", - "weight": 483, + "weight": 480, "cookies": false, "type": "", "demo": "sites\/create.md", @@ -23614,7 +23614,7 @@ "x-appwrite": { "method": "listFrameworks", "group": "frameworks", - "weight": 488, + "weight": 485, "cookies": false, "type": "", "demo": "sites\/list-frameworks.md", @@ -23665,7 +23665,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "frameworks", - "weight": 511, + "weight": 508, "cookies": false, "type": "", "demo": "sites\/list-specifications.md", @@ -23716,7 +23716,7 @@ "x-appwrite": { "method": "get", "group": "sites", - "weight": 484, + "weight": 481, "cookies": false, "type": "", "demo": "sites\/get.md", @@ -23777,7 +23777,7 @@ "x-appwrite": { "method": "update", "group": "sites", - "weight": 486, + "weight": 483, "cookies": false, "type": "", "demo": "sites\/update.md", @@ -24028,7 +24028,7 @@ "x-appwrite": { "method": "delete", "group": "sites", - "weight": 487, + "weight": 484, "cookies": false, "type": "", "demo": "sites\/delete.md", @@ -24091,7 +24091,7 @@ "x-appwrite": { "method": "updateSiteDeployment", "group": "sites", - "weight": 494, + "weight": 491, "cookies": false, "type": "", "demo": "sites\/update-site-deployment.md", @@ -24173,7 +24173,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 493, + "weight": 490, "cookies": false, "type": "", "demo": "sites\/list-deployments.md", @@ -24269,7 +24269,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 489, + "weight": 486, "cookies": false, "type": "upload", "demo": "sites\/create-deployment.md", @@ -24376,7 +24376,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 497, + "weight": 494, "cookies": false, "type": "", "demo": "sites\/create-duplicate-deployment.md", @@ -24458,7 +24458,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 490, + "weight": 487, "cookies": false, "type": "", "demo": "sites\/create-template-deployment.md", @@ -24576,7 +24576,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 491, + "weight": 488, "cookies": false, "type": "", "demo": "sites\/create-vcs-deployment.md", @@ -24676,7 +24676,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 492, + "weight": 489, "cookies": false, "type": "", "demo": "sites\/get-deployment.md", @@ -24740,7 +24740,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 495, + "weight": 492, "cookies": false, "type": "", "demo": "sites\/delete-deployment.md", @@ -24806,7 +24806,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 496, + "weight": 493, "cookies": false, "type": "location", "demo": "sites\/get-deployment-download.md", @@ -24898,7 +24898,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 498, + "weight": 495, "cookies": false, "type": "", "demo": "sites\/update-deployment-status.md", @@ -24971,7 +24971,7 @@ "x-appwrite": { "method": "listLogs", "group": "logs", - "weight": 500, + "weight": 497, "cookies": false, "type": "", "demo": "sites\/list-logs.md", @@ -25058,7 +25058,7 @@ "x-appwrite": { "method": "getLog", "group": "logs", - "weight": 499, + "weight": 496, "cookies": false, "type": "", "demo": "sites\/get-log.md", @@ -25122,7 +25122,7 @@ "x-appwrite": { "method": "deleteLog", "group": "logs", - "weight": 501, + "weight": 498, "cookies": false, "type": "", "demo": "sites\/delete-log.md", @@ -25195,7 +25195,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 504, + "weight": 501, "cookies": false, "type": "", "demo": "sites\/list-variables.md", @@ -25256,7 +25256,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 502, + "weight": 499, "cookies": false, "type": "", "demo": "sites\/create-variable.md", @@ -25349,7 +25349,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 503, + "weight": 500, "cookies": false, "type": "", "demo": "sites\/get-variable.md", @@ -25420,7 +25420,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 505, + "weight": 502, "cookies": false, "type": "", "demo": "sites\/update-variable.md", @@ -25515,7 +25515,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 506, + "weight": 503, "cookies": false, "type": "", "demo": "sites\/delete-variable.md", @@ -25588,7 +25588,7 @@ "x-appwrite": { "method": "listBuckets", "group": "buckets", - "weight": 538, + "weight": 535, "cookies": false, "type": "", "demo": "storage\/list-buckets.md", @@ -25675,7 +25675,7 @@ "x-appwrite": { "method": "createBucket", "group": "buckets", - "weight": 536, + "weight": 533, "cookies": false, "type": "", "demo": "storage\/create-bucket.md", @@ -25812,7 +25812,7 @@ "x-appwrite": { "method": "getBucket", "group": "buckets", - "weight": 537, + "weight": 534, "cookies": false, "type": "", "demo": "storage\/get-bucket.md", @@ -25874,7 +25874,7 @@ "x-appwrite": { "method": "updateBucket", "group": "buckets", - "weight": 539, + "weight": 536, "cookies": false, "type": "", "demo": "storage\/update-bucket.md", @@ -26008,7 +26008,7 @@ "x-appwrite": { "method": "deleteBucket", "group": "buckets", - "weight": 540, + "weight": 537, "cookies": false, "type": "", "demo": "storage\/delete-bucket.md", @@ -26072,7 +26072,7 @@ "x-appwrite": { "method": "listFiles", "group": "files", - "weight": 543, + "weight": 540, "cookies": false, "type": "", "demo": "storage\/list-files.md", @@ -26173,7 +26173,7 @@ "x-appwrite": { "method": "createFile", "group": "files", - "weight": 541, + "weight": 538, "cookies": false, "type": "upload", "demo": "storage\/create-file.md", @@ -26277,7 +26277,7 @@ "x-appwrite": { "method": "getFile", "group": "files", - "weight": 542, + "weight": 539, "cookies": false, "type": "", "demo": "storage\/get-file.md", @@ -26353,7 +26353,7 @@ "x-appwrite": { "method": "updateFile", "group": "files", - "weight": 544, + "weight": 541, "cookies": false, "type": "", "demo": "storage\/update-file.md", @@ -26447,7 +26447,7 @@ "x-appwrite": { "method": "deleteFile", "group": "files", - "weight": 545, + "weight": 542, "cookies": false, "type": "", "demo": "storage\/delete-file.md", @@ -26518,7 +26518,7 @@ "x-appwrite": { "method": "getFileDownload", "group": "files", - "weight": 547, + "weight": 544, "cookies": false, "type": "location", "demo": "storage\/get-file-download.md", @@ -26600,7 +26600,7 @@ "x-appwrite": { "method": "getFilePreview", "group": "files", - "weight": 546, + "weight": 543, "cookies": false, "type": "location", "demo": "storage\/get-file-preview.md", @@ -26832,7 +26832,7 @@ "x-appwrite": { "method": "getFileView", "group": "files", - "weight": 548, + "weight": 545, "cookies": false, "type": "location", "demo": "storage\/get-file-view.md", @@ -26921,7 +26921,7 @@ "x-appwrite": { "method": "list", "group": "tablesdb", - "weight": 352, + "weight": 349, "cookies": false, "type": "", "demo": "tablesdb\/list.md", @@ -27008,7 +27008,7 @@ "x-appwrite": { "method": "create", "group": "tablesdb", - "weight": 348, + "weight": 345, "cookies": false, "type": "", "demo": "tablesdb\/create.md", @@ -27090,7 +27090,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 419, + "weight": 416, "cookies": false, "type": "", "demo": "tablesdb\/list-transactions.md", @@ -27162,7 +27162,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 415, + "weight": 412, "cookies": false, "type": "", "demo": "tablesdb\/create-transaction.md", @@ -27238,7 +27238,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 416, + "weight": 413, "cookies": false, "type": "", "demo": "tablesdb\/get-transaction.md", @@ -27307,7 +27307,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 417, + "weight": 414, "cookies": false, "type": "", "demo": "tablesdb\/update-transaction.md", @@ -27390,7 +27390,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 418, + "weight": 415, "cookies": false, "type": "", "demo": "tablesdb\/delete-transaction.md", @@ -27461,7 +27461,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 420, + "weight": 417, "cookies": false, "type": "", "demo": "tablesdb\/create-operations.md", @@ -27551,7 +27551,7 @@ "x-appwrite": { "method": "get", "group": "tablesdb", - "weight": 349, + "weight": 346, "cookies": false, "type": "", "demo": "tablesdb\/get.md", @@ -27613,7 +27613,7 @@ "x-appwrite": { "method": "update", "group": "tablesdb", - "weight": 350, + "weight": 347, "cookies": false, "type": "", "demo": "tablesdb\/update.md", @@ -27689,7 +27689,7 @@ "x-appwrite": { "method": "delete", "group": "tablesdb", - "weight": 351, + "weight": 348, "cookies": false, "type": "", "demo": "tablesdb\/delete.md", @@ -27753,7 +27753,7 @@ "x-appwrite": { "method": "listTables", "group": "tables", - "weight": 359, + "weight": 356, "cookies": false, "type": "", "demo": "tablesdb\/list-tables.md", @@ -27853,7 +27853,7 @@ "x-appwrite": { "method": "createTable", "group": "tables", - "weight": 355, + "weight": 352, "cookies": false, "type": "", "demo": "tablesdb\/create-table.md", @@ -27980,7 +27980,7 @@ "x-appwrite": { "method": "getTable", "group": "tables", - "weight": 356, + "weight": 353, "cookies": false, "type": "", "demo": "tablesdb\/get-table.md", @@ -28055,7 +28055,7 @@ "x-appwrite": { "method": "updateTable", "group": "tables", - "weight": 357, + "weight": 354, "cookies": false, "type": "", "demo": "tablesdb\/update-table.md", @@ -28158,7 +28158,7 @@ "x-appwrite": { "method": "deleteTable", "group": "tables", - "weight": 358, + "weight": 355, "cookies": false, "type": "", "demo": "tablesdb\/delete-table.md", @@ -28235,7 +28235,7 @@ "x-appwrite": { "method": "listColumns", "group": "columns", - "weight": 364, + "weight": 361, "cookies": false, "type": "", "demo": "tablesdb\/list-columns.md", @@ -28336,7 +28336,7 @@ "x-appwrite": { "method": "createBooleanColumn", "group": "columns", - "weight": 365, + "weight": 362, "cookies": false, "type": "", "demo": "tablesdb\/create-boolean-column.md", @@ -28449,7 +28449,7 @@ "x-appwrite": { "method": "updateBooleanColumn", "group": "columns", - "weight": 366, + "weight": 363, "cookies": false, "type": "", "demo": "tablesdb\/update-boolean-column.md", @@ -28567,7 +28567,7 @@ "x-appwrite": { "method": "createDatetimeColumn", "group": "columns", - "weight": 367, + "weight": 364, "cookies": false, "type": "", "demo": "tablesdb\/create-datetime-column.md", @@ -28680,7 +28680,7 @@ "x-appwrite": { "method": "updateDatetimeColumn", "group": "columns", - "weight": 368, + "weight": 365, "cookies": false, "type": "", "demo": "tablesdb\/update-datetime-column.md", @@ -28798,7 +28798,7 @@ "x-appwrite": { "method": "createEmailColumn", "group": "columns", - "weight": 369, + "weight": 366, "cookies": false, "type": "", "demo": "tablesdb\/create-email-column.md", @@ -28912,7 +28912,7 @@ "x-appwrite": { "method": "updateEmailColumn", "group": "columns", - "weight": 370, + "weight": 367, "cookies": false, "type": "", "demo": "tablesdb\/update-email-column.md", @@ -29031,7 +29031,7 @@ "x-appwrite": { "method": "createEnumColumn", "group": "columns", - "weight": 371, + "weight": 368, "cookies": false, "type": "", "demo": "tablesdb\/create-enum-column.md", @@ -29153,7 +29153,7 @@ "x-appwrite": { "method": "updateEnumColumn", "group": "columns", - "weight": 372, + "weight": 369, "cookies": false, "type": "", "demo": "tablesdb\/update-enum-column.md", @@ -29280,7 +29280,7 @@ "x-appwrite": { "method": "createFloatColumn", "group": "columns", - "weight": 373, + "weight": 370, "cookies": false, "type": "", "demo": "tablesdb\/create-float-column.md", @@ -29408,7 +29408,7 @@ "x-appwrite": { "method": "updateFloatColumn", "group": "columns", - "weight": 374, + "weight": 371, "cookies": false, "type": "", "demo": "tablesdb\/update-float-column.md", @@ -29541,7 +29541,7 @@ "x-appwrite": { "method": "createIntegerColumn", "group": "columns", - "weight": 375, + "weight": 372, "cookies": false, "type": "", "demo": "tablesdb\/create-integer-column.md", @@ -29669,7 +29669,7 @@ "x-appwrite": { "method": "updateIntegerColumn", "group": "columns", - "weight": 376, + "weight": 373, "cookies": false, "type": "", "demo": "tablesdb\/update-integer-column.md", @@ -29802,7 +29802,7 @@ "x-appwrite": { "method": "createIpColumn", "group": "columns", - "weight": 377, + "weight": 374, "cookies": false, "type": "", "demo": "tablesdb\/create-ip-column.md", @@ -29915,7 +29915,7 @@ "x-appwrite": { "method": "updateIpColumn", "group": "columns", - "weight": 378, + "weight": 375, "cookies": false, "type": "", "demo": "tablesdb\/update-ip-column.md", @@ -30033,7 +30033,7 @@ "x-appwrite": { "method": "createLineColumn", "group": "columns", - "weight": 379, + "weight": 376, "cookies": false, "type": "", "demo": "tablesdb\/create-line-column.md", @@ -30148,7 +30148,7 @@ "x-appwrite": { "method": "updateLineColumn", "group": "columns", - "weight": 380, + "weight": 377, "cookies": false, "type": "", "demo": "tablesdb\/update-line-column.md", @@ -30272,7 +30272,7 @@ "x-appwrite": { "method": "createLongtextColumn", "group": "columns", - "weight": 397, + "weight": 394, "cookies": false, "type": "", "demo": "tablesdb\/create-longtext-column.md", @@ -30385,7 +30385,7 @@ "x-appwrite": { "method": "updateLongtextColumn", "group": "columns", - "weight": 398, + "weight": 395, "cookies": false, "type": "", "demo": "tablesdb\/update-longtext-column.md", @@ -30503,7 +30503,7 @@ "x-appwrite": { "method": "createMediumtextColumn", "group": "columns", - "weight": 395, + "weight": 392, "cookies": false, "type": "", "demo": "tablesdb\/create-mediumtext-column.md", @@ -30616,7 +30616,7 @@ "x-appwrite": { "method": "updateMediumtextColumn", "group": "columns", - "weight": 396, + "weight": 393, "cookies": false, "type": "", "demo": "tablesdb\/update-mediumtext-column.md", @@ -30734,7 +30734,7 @@ "x-appwrite": { "method": "createPointColumn", "group": "columns", - "weight": 381, + "weight": 378, "cookies": false, "type": "", "demo": "tablesdb\/create-point-column.md", @@ -30849,7 +30849,7 @@ "x-appwrite": { "method": "updatePointColumn", "group": "columns", - "weight": 382, + "weight": 379, "cookies": false, "type": "", "demo": "tablesdb\/update-point-column.md", @@ -30973,7 +30973,7 @@ "x-appwrite": { "method": "createPolygonColumn", "group": "columns", - "weight": 383, + "weight": 380, "cookies": false, "type": "", "demo": "tablesdb\/create-polygon-column.md", @@ -31088,7 +31088,7 @@ "x-appwrite": { "method": "updatePolygonColumn", "group": "columns", - "weight": 384, + "weight": 381, "cookies": false, "type": "", "demo": "tablesdb\/update-polygon-column.md", @@ -31212,7 +31212,7 @@ "x-appwrite": { "method": "createRelationshipColumn", "group": "columns", - "weight": 385, + "weight": 382, "cookies": false, "type": "", "demo": "tablesdb\/create-relationship-column.md", @@ -31351,7 +31351,7 @@ "x-appwrite": { "method": "createStringColumn", "group": "columns", - "weight": 387, + "weight": 384, "cookies": false, "type": "", "demo": "tablesdb\/create-string-column.md", @@ -31480,7 +31480,7 @@ "x-appwrite": { "method": "updateStringColumn", "group": "columns", - "weight": 388, + "weight": 385, "cookies": false, "type": "", "demo": "tablesdb\/update-string-column.md", @@ -31609,7 +31609,7 @@ "x-appwrite": { "method": "createTextColumn", "group": "columns", - "weight": 393, + "weight": 390, "cookies": false, "type": "", "demo": "tablesdb\/create-text-column.md", @@ -31722,7 +31722,7 @@ "x-appwrite": { "method": "updateTextColumn", "group": "columns", - "weight": 394, + "weight": 391, "cookies": false, "type": "", "demo": "tablesdb\/update-text-column.md", @@ -31840,7 +31840,7 @@ "x-appwrite": { "method": "createUrlColumn", "group": "columns", - "weight": 389, + "weight": 386, "cookies": false, "type": "", "demo": "tablesdb\/create-url-column.md", @@ -31954,7 +31954,7 @@ "x-appwrite": { "method": "updateUrlColumn", "group": "columns", - "weight": 390, + "weight": 387, "cookies": false, "type": "", "demo": "tablesdb\/update-url-column.md", @@ -32073,7 +32073,7 @@ "x-appwrite": { "method": "createVarcharColumn", "group": "columns", - "weight": 391, + "weight": 388, "cookies": false, "type": "", "demo": "tablesdb\/create-varchar-column.md", @@ -32193,7 +32193,7 @@ "x-appwrite": { "method": "updateVarcharColumn", "group": "columns", - "weight": 392, + "weight": 389, "cookies": false, "type": "", "demo": "tablesdb\/update-varchar-column.md", @@ -32349,7 +32349,7 @@ "x-appwrite": { "method": "getColumn", "group": "columns", - "weight": 362, + "weight": 359, "cookies": false, "type": "", "demo": "tablesdb\/get-column.md", @@ -32426,7 +32426,7 @@ "x-appwrite": { "method": "deleteColumn", "group": "columns", - "weight": 363, + "weight": 360, "cookies": false, "type": "", "demo": "tablesdb\/delete-column.md", @@ -32512,7 +32512,7 @@ "x-appwrite": { "method": "updateRelationshipColumn", "group": "columns", - "weight": 386, + "weight": 383, "cookies": false, "type": "", "demo": "tablesdb\/update-relationship-column.md", @@ -32628,7 +32628,7 @@ "x-appwrite": { "method": "listIndexes", "group": "indexes", - "weight": 402, + "weight": 399, "cookies": false, "type": "", "demo": "tablesdb\/list-indexes.md", @@ -32727,7 +32727,7 @@ "x-appwrite": { "method": "createIndex", "group": "indexes", - "weight": 399, + "weight": 396, "cookies": false, "type": "", "demo": "tablesdb\/create-index.md", @@ -32868,7 +32868,7 @@ "x-appwrite": { "method": "getIndex", "group": "indexes", - "weight": 400, + "weight": 397, "cookies": false, "type": "", "demo": "tablesdb\/get-index.md", @@ -32945,7 +32945,7 @@ "x-appwrite": { "method": "deleteIndex", "group": "indexes", - "weight": 401, + "weight": 398, "cookies": false, "type": "", "demo": "tablesdb\/delete-index.md", @@ -33031,7 +33031,7 @@ "x-appwrite": { "method": "listRows", "group": "rows", - "weight": 411, + "weight": 408, "cookies": false, "type": "", "demo": "tablesdb\/list-rows.md", @@ -33144,7 +33144,7 @@ "x-appwrite": { "method": "createRow", "group": "rows", - "weight": 403, + "weight": 400, "cookies": false, "type": "", "demo": "tablesdb\/create-row.md", @@ -33330,7 +33330,7 @@ "x-appwrite": { "method": "upsertRows", "group": "rows", - "weight": 408, + "weight": 405, "cookies": false, "type": "", "demo": "tablesdb\/upsert-rows.md", @@ -33464,7 +33464,7 @@ "x-appwrite": { "method": "updateRows", "group": "rows", - "weight": 406, + "weight": 403, "cookies": false, "type": "", "demo": "tablesdb\/update-rows.md", @@ -33569,7 +33569,7 @@ "x-appwrite": { "method": "deleteRows", "group": "rows", - "weight": 410, + "weight": 407, "cookies": false, "type": "", "demo": "tablesdb\/delete-rows.md", @@ -33671,7 +33671,7 @@ "x-appwrite": { "method": "getRow", "group": "rows", - "weight": 404, + "weight": 401, "cookies": false, "type": "", "demo": "tablesdb\/get-row.md", @@ -33783,7 +33783,7 @@ "x-appwrite": { "method": "upsertRow", "group": "rows", - "weight": 407, + "weight": 404, "cookies": false, "type": "", "demo": "tablesdb\/upsert-row.md", @@ -33936,7 +33936,7 @@ "x-appwrite": { "method": "updateRow", "group": "rows", - "weight": 405, + "weight": 402, "cookies": false, "type": "", "demo": "tablesdb\/update-row.md", @@ -34049,7 +34049,7 @@ "x-appwrite": { "method": "deleteRow", "group": "rows", - "weight": 409, + "weight": 406, "cookies": false, "type": "", "demo": "tablesdb\/delete-row.md", @@ -34157,7 +34157,7 @@ "x-appwrite": { "method": "decrementRowColumn", "group": "rows", - "weight": 414, + "weight": 411, "cookies": false, "type": "", "demo": "tablesdb\/decrement-row-column.md", @@ -34287,7 +34287,7 @@ "x-appwrite": { "method": "incrementRowColumn", "group": "rows", - "weight": 413, + "weight": 410, "cookies": false, "type": "", "demo": "tablesdb\/increment-row-column.md", @@ -35537,7 +35537,7 @@ "x-appwrite": { "method": "list", "group": "files", - "weight": 533, + "weight": 530, "cookies": false, "type": "", "demo": "tokens\/list.md", @@ -35632,7 +35632,7 @@ "x-appwrite": { "method": "createFileToken", "group": "files", - "weight": 531, + "weight": 528, "cookies": false, "type": "", "demo": "tokens\/create-file-token.md", @@ -35722,7 +35722,7 @@ "x-appwrite": { "method": "get", "group": "tokens", - "weight": 532, + "weight": 529, "cookies": false, "type": "", "demo": "tokens\/get.md", @@ -35783,7 +35783,7 @@ "x-appwrite": { "method": "update", "group": "tokens", - "weight": 534, + "weight": 531, "cookies": false, "type": "", "demo": "tokens\/update.md", @@ -35854,7 +35854,7 @@ "x-appwrite": { "method": "delete", "group": "tokens", - "weight": 535, + "weight": 532, "cookies": false, "type": "", "demo": "tokens\/delete.md", @@ -40988,6 +40988,18 @@ "$ref": "#\/components\/schemas\/index" }, "x-example": {} + }, + "bytesMax": { + "type": "integer", + "description": "Maximum document size in bytes. Returns 0 when no limit applies.", + "x-example": 65535, + "format": "int32" + }, + "bytesUsed": { + "type": "integer", + "description": "Currently used document size in bytes based on defined attributes.", + "x-example": 1500, + "format": "int32" } }, "required": [ @@ -41000,7 +41012,9 @@ "enabled", "documentSecurity", "attributes", - "indexes" + "indexes", + "bytesMax", + "bytesUsed" ], "example": { "$id": "5e5ea5c16897e", @@ -41014,7 +41028,9 @@ "enabled": false, "documentSecurity": true, "attributes": {}, - "indexes": {} + "indexes": {}, + "bytesMax": 65535, + "bytesUsed": 1500 } }, "attributeList": { @@ -42781,6 +42797,18 @@ "$ref": "#\/components\/schemas\/columnIndex" }, "x-example": {} + }, + "bytesMax": { + "type": "integer", + "description": "Maximum row size in bytes. Returns 0 when no limit applies.", + "x-example": 65535, + "format": "int32" + }, + "bytesUsed": { + "type": "integer", + "description": "Currently used row size in bytes based on defined columns.", + "x-example": 1500, + "format": "int32" } }, "required": [ @@ -42793,7 +42821,9 @@ "enabled", "rowSecurity", "columns", - "indexes" + "indexes", + "bytesMax", + "bytesUsed" ], "example": { "$id": "5e5ea5c16897e", @@ -42807,7 +42837,9 @@ "enabled": false, "rowSecurity": true, "columns": {}, - "indexes": {} + "indexes": {}, + "bytesMax": 65535, + "bytesUsed": 1500 } }, "columnList": { diff --git a/app/config/specs/swagger2-1.8.x-client.json b/app/config/specs/swagger2-1.8.x-client.json index e265c1fd93..868f2a7378 100644 --- a/app/config/specs/swagger2-1.8.x-client.json +++ b/app/config/specs/swagger2-1.8.x-client.json @@ -612,7 +612,7 @@ "x-appwrite": { "method": "updateMFA", "group": "mfa", - "weight": 253, + "weight": 250, "cookies": false, "type": "", "demo": "account\/update-mfa.md", @@ -687,7 +687,7 @@ "x-appwrite": { "method": "createMfaAuthenticator", "group": "mfa", - "weight": 255, + "weight": 252, "cookies": false, "type": "", "demo": "account\/create-mfa-authenticator.md", @@ -811,7 +811,7 @@ "x-appwrite": { "method": "updateMfaAuthenticator", "group": "mfa", - "weight": 256, + "weight": 253, "cookies": false, "type": "", "demo": "account\/update-mfa-authenticator.md", @@ -952,7 +952,7 @@ "x-appwrite": { "method": "deleteMfaAuthenticator", "group": "mfa", - "weight": 257, + "weight": 254, "cookies": false, "type": "", "demo": "account\/delete-mfa-authenticator.md", @@ -1076,7 +1076,7 @@ "x-appwrite": { "method": "createMfaChallenge", "group": "mfa", - "weight": 261, + "weight": 258, "cookies": false, "type": "", "demo": "account\/create-mfa-challenge.md", @@ -1213,7 +1213,7 @@ "x-appwrite": { "method": "updateMfaChallenge", "group": "mfa", - "weight": 262, + "weight": 259, "cookies": false, "type": "", "demo": "account\/update-mfa-challenge.md", @@ -1353,7 +1353,7 @@ "x-appwrite": { "method": "listMfaFactors", "group": "mfa", - "weight": 254, + "weight": 251, "cookies": false, "type": "", "demo": "account\/list-mfa-factors.md", @@ -1454,7 +1454,7 @@ "x-appwrite": { "method": "getMfaRecoveryCodes", "group": "mfa", - "weight": 260, + "weight": 257, "cookies": false, "type": "", "demo": "account\/get-mfa-recovery-codes.md", @@ -1555,7 +1555,7 @@ "x-appwrite": { "method": "createMfaRecoveryCodes", "group": "mfa", - "weight": 258, + "weight": 255, "cookies": false, "type": "", "demo": "account\/create-mfa-recovery-codes.md", @@ -1656,7 +1656,7 @@ "x-appwrite": { "method": "updateMfaRecoveryCodes", "group": "mfa", - "weight": 259, + "weight": 256, "cookies": false, "type": "", "demo": "account\/update-mfa-recovery-codes.md", @@ -4203,7 +4203,7 @@ "x-appwrite": { "method": "getBrowser", "group": null, - "weight": 264, + "weight": 261, "cookies": false, "type": "location", "demo": "avatars\/get-browser.md", @@ -4329,7 +4329,7 @@ "x-appwrite": { "method": "getCreditCard", "group": null, - "weight": 263, + "weight": 260, "cookies": false, "type": "location", "demo": "avatars\/get-credit-card.md", @@ -4461,7 +4461,7 @@ "x-appwrite": { "method": "getFavicon", "group": null, - "weight": 267, + "weight": 264, "cookies": false, "type": "location", "demo": "avatars\/get-favicon.md", @@ -4525,7 +4525,7 @@ "x-appwrite": { "method": "getFlag", "group": null, - "weight": 265, + "weight": 262, "cookies": false, "type": "location", "demo": "avatars\/get-flag.md", @@ -5013,7 +5013,7 @@ "x-appwrite": { "method": "getImage", "group": null, - "weight": 266, + "weight": 263, "cookies": false, "type": "location", "demo": "avatars\/get-image.md", @@ -5097,7 +5097,7 @@ "x-appwrite": { "method": "getInitials", "group": null, - "weight": 269, + "weight": 266, "cookies": false, "type": "location", "demo": "avatars\/get-initials.md", @@ -5189,7 +5189,7 @@ "x-appwrite": { "method": "getQR", "group": null, - "weight": 268, + "weight": 265, "cookies": false, "type": "location", "demo": "avatars\/get-qr.md", @@ -5281,7 +5281,7 @@ "x-appwrite": { "method": "getScreenshot", "group": null, - "weight": 270, + "weight": 267, "cookies": false, "type": "location", "demo": "avatars\/get-screenshot.md", @@ -5994,7 +5994,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 346, + "weight": 343, "cookies": false, "type": "", "demo": "databases\/list-transactions.md", @@ -6061,7 +6061,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 342, + "weight": 339, "cookies": false, "type": "", "demo": "databases\/create-transaction.md", @@ -6132,7 +6132,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 343, + "weight": 340, "cookies": false, "type": "", "demo": "databases\/get-transaction.md", @@ -6195,7 +6195,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 344, + "weight": 341, "cookies": false, "type": "", "demo": "databases\/update-transaction.md", @@ -6274,7 +6274,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 345, + "weight": 342, "cookies": false, "type": "", "demo": "databases\/delete-transaction.md", @@ -6339,7 +6339,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 347, + "weight": 344, "cookies": false, "type": "", "demo": "databases\/create-operations.md", @@ -6420,7 +6420,7 @@ "x-appwrite": { "method": "listDocuments", "group": "documents", - "weight": 297, + "weight": 294, "cookies": false, "type": "", "demo": "databases\/list-documents.md", @@ -6524,7 +6524,7 @@ "x-appwrite": { "method": "createDocument", "group": "documents", - "weight": 289, + "weight": 286, "cookies": false, "type": "", "demo": "databases\/create-document.md", @@ -6683,7 +6683,7 @@ "x-appwrite": { "method": "getDocument", "group": "documents", - "weight": 290, + "weight": 287, "cookies": false, "type": "", "demo": "databases\/get-document.md", @@ -6786,7 +6786,7 @@ "x-appwrite": { "method": "upsertDocument", "group": "documents", - "weight": 293, + "weight": 290, "cookies": false, "type": "", "demo": "databases\/upsert-document.md", @@ -6937,7 +6937,7 @@ "x-appwrite": { "method": "updateDocument", "group": "documents", - "weight": 291, + "weight": 288, "cookies": false, "type": "", "demo": "databases\/update-document.md", @@ -7047,7 +7047,7 @@ "x-appwrite": { "method": "deleteDocument", "group": "documents", - "weight": 295, + "weight": 292, "cookies": false, "type": "", "demo": "databases\/delete-document.md", @@ -7148,7 +7148,7 @@ "x-appwrite": { "method": "decrementDocumentAttribute", "group": "documents", - "weight": 300, + "weight": 297, "cookies": false, "type": "", "demo": "databases\/decrement-document-attribute.md", @@ -7271,7 +7271,7 @@ "x-appwrite": { "method": "incrementDocumentAttribute", "group": "documents", - "weight": 299, + "weight": 296, "cookies": false, "type": "", "demo": "databases\/increment-document-attribute.md", @@ -7392,7 +7392,7 @@ "x-appwrite": { "method": "listExecutions", "group": "executions", - "weight": 447, + "weight": 444, "cookies": false, "type": "", "demo": "functions\/list-executions.md", @@ -7475,7 +7475,7 @@ "x-appwrite": { "method": "createExecution", "group": "executions", - "weight": 445, + "weight": 442, "cookies": false, "type": "", "demo": "functions\/create-execution.md", @@ -7594,7 +7594,7 @@ "x-appwrite": { "method": "getExecution", "group": "executions", - "weight": 446, + "weight": 443, "cookies": false, "type": "", "demo": "functions\/get-execution.md", @@ -7666,7 +7666,7 @@ "x-appwrite": { "method": "query", "group": "graphql", - "weight": 190, + "weight": 187, "cookies": false, "type": "graphql", "demo": "graphql\/query.md", @@ -7741,7 +7741,7 @@ "x-appwrite": { "method": "mutation", "group": "graphql", - "weight": 189, + "weight": 186, "cookies": false, "type": "graphql", "demo": "graphql\/mutation.md", @@ -8240,7 +8240,7 @@ "x-appwrite": { "method": "createSubscriber", "group": "subscribers", - "weight": 237, + "weight": 234, "cookies": false, "type": "", "demo": "messaging\/create-subscriber.md", @@ -8325,7 +8325,7 @@ "x-appwrite": { "method": "deleteSubscriber", "group": "subscribers", - "weight": 241, + "weight": 238, "cookies": false, "type": "", "demo": "messaging\/delete-subscriber.md", @@ -8396,7 +8396,7 @@ "x-appwrite": { "method": "listFiles", "group": "files", - "weight": 543, + "weight": 540, "cookies": false, "type": "", "demo": "storage\/list-files.md", @@ -8489,7 +8489,7 @@ "x-appwrite": { "method": "createFile", "group": "files", - "weight": 541, + "weight": 538, "cookies": false, "type": "upload", "demo": "storage\/create-file.md", @@ -8580,7 +8580,7 @@ "x-appwrite": { "method": "getFile", "group": "files", - "weight": 542, + "weight": 539, "cookies": false, "type": "", "demo": "storage\/get-file.md", @@ -8651,7 +8651,7 @@ "x-appwrite": { "method": "updateFile", "group": "files", - "weight": 544, + "weight": 541, "cookies": false, "type": "", "demo": "storage\/update-file.md", @@ -8742,7 +8742,7 @@ "x-appwrite": { "method": "deleteFile", "group": "files", - "weight": 545, + "weight": 542, "cookies": false, "type": "", "demo": "storage\/delete-file.md", @@ -8813,7 +8813,7 @@ "x-appwrite": { "method": "getFileDownload", "group": "files", - "weight": 547, + "weight": 544, "cookies": false, "type": "location", "demo": "storage\/get-file-download.md", @@ -8893,7 +8893,7 @@ "x-appwrite": { "method": "getFilePreview", "group": "files", - "weight": 546, + "weight": 543, "cookies": false, "type": "location", "demo": "storage\/get-file-preview.md", @@ -9101,7 +9101,7 @@ "x-appwrite": { "method": "getFileView", "group": "files", - "weight": 548, + "weight": 545, "cookies": false, "type": "location", "demo": "storage\/get-file-view.md", @@ -9181,7 +9181,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 419, + "weight": 416, "cookies": false, "type": "", "demo": "tablesdb\/list-transactions.md", @@ -9251,7 +9251,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 415, + "weight": 412, "cookies": false, "type": "", "demo": "tablesdb\/create-transaction.md", @@ -9325,7 +9325,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 416, + "weight": 413, "cookies": false, "type": "", "demo": "tablesdb\/get-transaction.md", @@ -9391,7 +9391,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 417, + "weight": 414, "cookies": false, "type": "", "demo": "tablesdb\/update-transaction.md", @@ -9473,7 +9473,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 418, + "weight": 415, "cookies": false, "type": "", "demo": "tablesdb\/delete-transaction.md", @@ -9541,7 +9541,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 420, + "weight": 417, "cookies": false, "type": "", "demo": "tablesdb\/create-operations.md", @@ -9625,7 +9625,7 @@ "x-appwrite": { "method": "listRows", "group": "rows", - "weight": 411, + "weight": 408, "cookies": false, "type": "", "demo": "tablesdb\/list-rows.md", @@ -9728,7 +9728,7 @@ "x-appwrite": { "method": "createRow", "group": "rows", - "weight": 403, + "weight": 400, "cookies": false, "type": "", "demo": "tablesdb\/create-row.md", @@ -9882,7 +9882,7 @@ "x-appwrite": { "method": "getRow", "group": "rows", - "weight": 404, + "weight": 401, "cookies": false, "type": "", "demo": "tablesdb\/get-row.md", @@ -9984,7 +9984,7 @@ "x-appwrite": { "method": "upsertRow", "group": "rows", - "weight": 407, + "weight": 404, "cookies": false, "type": "", "demo": "tablesdb\/upsert-row.md", @@ -10130,7 +10130,7 @@ "x-appwrite": { "method": "updateRow", "group": "rows", - "weight": 405, + "weight": 402, "cookies": false, "type": "", "demo": "tablesdb\/update-row.md", @@ -10239,7 +10239,7 @@ "x-appwrite": { "method": "deleteRow", "group": "rows", - "weight": 409, + "weight": 406, "cookies": false, "type": "", "demo": "tablesdb\/delete-row.md", @@ -10339,7 +10339,7 @@ "x-appwrite": { "method": "decrementRowColumn", "group": "rows", - "weight": 414, + "weight": 411, "cookies": false, "type": "", "demo": "tablesdb\/decrement-row-column.md", @@ -10461,7 +10461,7 @@ "x-appwrite": { "method": "incrementRowColumn", "group": "rows", - "weight": 413, + "weight": 410, "cookies": false, "type": "", "demo": "tablesdb\/increment-row-column.md", diff --git a/app/config/specs/swagger2-1.8.x-console.json b/app/config/specs/swagger2-1.8.x-console.json index 037da99b91..96e771ae86 100644 --- a/app/config/specs/swagger2-1.8.x-console.json +++ b/app/config/specs/swagger2-1.8.x-console.json @@ -661,7 +661,7 @@ "x-appwrite": { "method": "updateMFA", "group": "mfa", - "weight": 253, + "weight": 250, "cookies": false, "type": "", "demo": "account\/update-mfa.md", @@ -735,7 +735,7 @@ "x-appwrite": { "method": "createMfaAuthenticator", "group": "mfa", - "weight": 255, + "weight": 252, "cookies": false, "type": "", "demo": "account\/create-mfa-authenticator.md", @@ -858,7 +858,7 @@ "x-appwrite": { "method": "updateMfaAuthenticator", "group": "mfa", - "weight": 256, + "weight": 253, "cookies": false, "type": "", "demo": "account\/update-mfa-authenticator.md", @@ -998,7 +998,7 @@ "x-appwrite": { "method": "deleteMfaAuthenticator", "group": "mfa", - "weight": 257, + "weight": 254, "cookies": false, "type": "", "demo": "account\/delete-mfa-authenticator.md", @@ -1121,7 +1121,7 @@ "x-appwrite": { "method": "createMfaChallenge", "group": "mfa", - "weight": 261, + "weight": 258, "cookies": false, "type": "", "demo": "account\/create-mfa-challenge.md", @@ -1257,7 +1257,7 @@ "x-appwrite": { "method": "updateMfaChallenge", "group": "mfa", - "weight": 262, + "weight": 259, "cookies": false, "type": "", "demo": "account\/update-mfa-challenge.md", @@ -1396,7 +1396,7 @@ "x-appwrite": { "method": "listMfaFactors", "group": "mfa", - "weight": 254, + "weight": 251, "cookies": false, "type": "", "demo": "account\/list-mfa-factors.md", @@ -1496,7 +1496,7 @@ "x-appwrite": { "method": "getMfaRecoveryCodes", "group": "mfa", - "weight": 260, + "weight": 257, "cookies": false, "type": "", "demo": "account\/get-mfa-recovery-codes.md", @@ -1596,7 +1596,7 @@ "x-appwrite": { "method": "createMfaRecoveryCodes", "group": "mfa", - "weight": 258, + "weight": 255, "cookies": false, "type": "", "demo": "account\/create-mfa-recovery-codes.md", @@ -1696,7 +1696,7 @@ "x-appwrite": { "method": "updateMfaRecoveryCodes", "group": "mfa", - "weight": 259, + "weight": 256, "cookies": false, "type": "", "demo": "account\/update-mfa-recovery-codes.md", @@ -4212,7 +4212,7 @@ "x-appwrite": { "method": "getBrowser", "group": null, - "weight": 264, + "weight": 261, "cookies": false, "type": "location", "demo": "avatars\/get-browser.md", @@ -4338,7 +4338,7 @@ "x-appwrite": { "method": "getCreditCard", "group": null, - "weight": 263, + "weight": 260, "cookies": false, "type": "location", "demo": "avatars\/get-credit-card.md", @@ -4470,7 +4470,7 @@ "x-appwrite": { "method": "getFavicon", "group": null, - "weight": 267, + "weight": 264, "cookies": false, "type": "location", "demo": "avatars\/get-favicon.md", @@ -4534,7 +4534,7 @@ "x-appwrite": { "method": "getFlag", "group": null, - "weight": 265, + "weight": 262, "cookies": false, "type": "location", "demo": "avatars\/get-flag.md", @@ -5022,7 +5022,7 @@ "x-appwrite": { "method": "getImage", "group": null, - "weight": 266, + "weight": 263, "cookies": false, "type": "location", "demo": "avatars\/get-image.md", @@ -5106,7 +5106,7 @@ "x-appwrite": { "method": "getInitials", "group": null, - "weight": 269, + "weight": 266, "cookies": false, "type": "location", "demo": "avatars\/get-initials.md", @@ -5198,7 +5198,7 @@ "x-appwrite": { "method": "getQR", "group": null, - "weight": 268, + "weight": 265, "cookies": false, "type": "location", "demo": "avatars\/get-qr.md", @@ -5290,7 +5290,7 @@ "x-appwrite": { "method": "getScreenshot", "group": null, - "weight": 270, + "weight": 267, "cookies": false, "type": "location", "demo": "avatars\/get-screenshot.md", @@ -6005,7 +6005,7 @@ "x-appwrite": { "method": "chat", "group": "console", - "weight": 513, + "weight": 510, "cookies": false, "type": "", "demo": "assistant\/chat.md", @@ -6069,7 +6069,7 @@ "x-appwrite": { "method": "getResource", "group": null, - "weight": 514, + "weight": 511, "cookies": false, "type": "", "demo": "console\/get-resource.md", @@ -6140,7 +6140,7 @@ "x-appwrite": { "method": "variables", "group": "console", - "weight": 512, + "weight": 509, "cookies": false, "type": "", "demo": "console\/variables.md", @@ -6189,7 +6189,7 @@ "x-appwrite": { "method": "list", "group": "databases", - "weight": 278, + "weight": 275, "cookies": false, "type": "", "demo": "databases\/list.md", @@ -6305,7 +6305,7 @@ "x-appwrite": { "method": "create", "group": "databases", - "weight": 274, + "weight": 271, "cookies": false, "type": "", "demo": "databases\/create.md", @@ -6425,7 +6425,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 346, + "weight": 343, "cookies": false, "type": "", "demo": "databases\/list-transactions.md", @@ -6492,7 +6492,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 342, + "weight": 339, "cookies": false, "type": "", "demo": "databases\/create-transaction.md", @@ -6563,7 +6563,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 343, + "weight": 340, "cookies": false, "type": "", "demo": "databases\/get-transaction.md", @@ -6626,7 +6626,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 344, + "weight": 341, "cookies": false, "type": "", "demo": "databases\/update-transaction.md", @@ -6705,7 +6705,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 345, + "weight": 342, "cookies": false, "type": "", "demo": "databases\/delete-transaction.md", @@ -6770,7 +6770,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 347, + "weight": 344, "cookies": false, "type": "", "demo": "databases\/create-operations.md", @@ -6851,7 +6851,7 @@ "x-appwrite": { "method": "listUsage", "group": null, - "weight": 281, + "weight": 278, "cookies": false, "type": "", "demo": "databases\/list-usage.md", @@ -6953,7 +6953,7 @@ "x-appwrite": { "method": "get", "group": "databases", - "weight": 275, + "weight": 272, "cookies": false, "type": "", "demo": "databases\/get.md", @@ -7047,7 +7047,7 @@ "x-appwrite": { "method": "update", "group": "databases", - "weight": 276, + "weight": 273, "cookies": false, "type": "", "demo": "databases\/update.md", @@ -7159,7 +7159,7 @@ "x-appwrite": { "method": "delete", "group": "databases", - "weight": 277, + "weight": 274, "cookies": false, "type": "", "demo": "databases\/delete.md", @@ -7252,7 +7252,7 @@ "x-appwrite": { "method": "listCollections", "group": "collections", - "weight": 286, + "weight": 283, "cookies": false, "type": "", "demo": "databases\/list-collections.md", @@ -7347,7 +7347,7 @@ "x-appwrite": { "method": "createCollection", "group": "collections", - "weight": 282, + "weight": 279, "cookies": false, "type": "", "demo": "databases\/create-collection.md", @@ -7477,7 +7477,7 @@ "x-appwrite": { "method": "getCollection", "group": "collections", - "weight": 283, + "weight": 280, "cookies": false, "type": "", "demo": "databases\/get-collection.md", @@ -7550,7 +7550,7 @@ "x-appwrite": { "method": "updateCollection", "group": "collections", - "weight": 284, + "weight": 281, "cookies": false, "type": "", "demo": "databases\/update-collection.md", @@ -7655,7 +7655,7 @@ "x-appwrite": { "method": "deleteCollection", "group": "collections", - "weight": 285, + "weight": 282, "cookies": false, "type": "", "demo": "databases\/delete-collection.md", @@ -7728,7 +7728,7 @@ "x-appwrite": { "method": "listAttributes", "group": "attributes", - "weight": 303, + "weight": 300, "cookies": false, "type": "", "demo": "databases\/list-attributes.md", @@ -7824,7 +7824,7 @@ "x-appwrite": { "method": "createBooleanAttribute", "group": "attributes", - "weight": 304, + "weight": 301, "cookies": false, "type": "", "demo": "databases\/create-boolean-attribute.md", @@ -7937,7 +7937,7 @@ "x-appwrite": { "method": "updateBooleanAttribute", "group": "attributes", - "weight": 305, + "weight": 302, "cookies": false, "type": "", "demo": "databases\/update-boolean-attribute.md", @@ -8052,7 +8052,7 @@ "x-appwrite": { "method": "createDatetimeAttribute", "group": "attributes", - "weight": 306, + "weight": 303, "cookies": false, "type": "", "demo": "databases\/create-datetime-attribute.md", @@ -8165,7 +8165,7 @@ "x-appwrite": { "method": "updateDatetimeAttribute", "group": "attributes", - "weight": 307, + "weight": 304, "cookies": false, "type": "", "demo": "databases\/update-datetime-attribute.md", @@ -8280,7 +8280,7 @@ "x-appwrite": { "method": "createEmailAttribute", "group": "attributes", - "weight": 308, + "weight": 305, "cookies": false, "type": "", "demo": "databases\/create-email-attribute.md", @@ -8394,7 +8394,7 @@ "x-appwrite": { "method": "updateEmailAttribute", "group": "attributes", - "weight": 309, + "weight": 306, "cookies": false, "type": "", "demo": "databases\/update-email-attribute.md", @@ -8510,7 +8510,7 @@ "x-appwrite": { "method": "createEnumAttribute", "group": "attributes", - "weight": 310, + "weight": 307, "cookies": false, "type": "", "demo": "databases\/create-enum-attribute.md", @@ -8633,7 +8633,7 @@ "x-appwrite": { "method": "updateEnumAttribute", "group": "attributes", - "weight": 311, + "weight": 308, "cookies": false, "type": "", "demo": "databases\/update-enum-attribute.md", @@ -8758,7 +8758,7 @@ "x-appwrite": { "method": "createFloatAttribute", "group": "attributes", - "weight": 312, + "weight": 309, "cookies": false, "type": "", "demo": "databases\/create-float-attribute.md", @@ -8888,7 +8888,7 @@ "x-appwrite": { "method": "updateFloatAttribute", "group": "attributes", - "weight": 313, + "weight": 310, "cookies": false, "type": "", "demo": "databases\/update-float-attribute.md", @@ -9020,7 +9020,7 @@ "x-appwrite": { "method": "createIntegerAttribute", "group": "attributes", - "weight": 314, + "weight": 311, "cookies": false, "type": "", "demo": "databases\/create-integer-attribute.md", @@ -9150,7 +9150,7 @@ "x-appwrite": { "method": "updateIntegerAttribute", "group": "attributes", - "weight": 315, + "weight": 312, "cookies": false, "type": "", "demo": "databases\/update-integer-attribute.md", @@ -9282,7 +9282,7 @@ "x-appwrite": { "method": "createIpAttribute", "group": "attributes", - "weight": 316, + "weight": 313, "cookies": false, "type": "", "demo": "databases\/create-ip-attribute.md", @@ -9395,7 +9395,7 @@ "x-appwrite": { "method": "updateIpAttribute", "group": "attributes", - "weight": 317, + "weight": 314, "cookies": false, "type": "", "demo": "databases\/update-ip-attribute.md", @@ -9510,7 +9510,7 @@ "x-appwrite": { "method": "createLineAttribute", "group": "attributes", - "weight": 318, + "weight": 315, "cookies": false, "type": "", "demo": "databases\/create-line-attribute.md", @@ -9617,7 +9617,7 @@ "x-appwrite": { "method": "updateLineAttribute", "group": "attributes", - "weight": 319, + "weight": 316, "cookies": false, "type": "", "demo": "databases\/update-line-attribute.md", @@ -9731,7 +9731,7 @@ "x-appwrite": { "method": "createLongtextAttribute", "group": "attributes", - "weight": 336, + "weight": 333, "cookies": false, "type": "", "demo": "databases\/create-longtext-attribute.md", @@ -9840,7 +9840,7 @@ "x-appwrite": { "method": "updateLongtextAttribute", "group": "attributes", - "weight": 337, + "weight": 334, "cookies": false, "type": "", "demo": "databases\/update-longtext-attribute.md", @@ -9951,7 +9951,7 @@ "x-appwrite": { "method": "createMediumtextAttribute", "group": "attributes", - "weight": 334, + "weight": 331, "cookies": false, "type": "", "demo": "databases\/create-mediumtext-attribute.md", @@ -10060,7 +10060,7 @@ "x-appwrite": { "method": "updateMediumtextAttribute", "group": "attributes", - "weight": 335, + "weight": 332, "cookies": false, "type": "", "demo": "databases\/update-mediumtext-attribute.md", @@ -10171,7 +10171,7 @@ "x-appwrite": { "method": "createPointAttribute", "group": "attributes", - "weight": 320, + "weight": 317, "cookies": false, "type": "", "demo": "databases\/create-point-attribute.md", @@ -10278,7 +10278,7 @@ "x-appwrite": { "method": "updatePointAttribute", "group": "attributes", - "weight": 321, + "weight": 318, "cookies": false, "type": "", "demo": "databases\/update-point-attribute.md", @@ -10392,7 +10392,7 @@ "x-appwrite": { "method": "createPolygonAttribute", "group": "attributes", - "weight": 322, + "weight": 319, "cookies": false, "type": "", "demo": "databases\/create-polygon-attribute.md", @@ -10499,7 +10499,7 @@ "x-appwrite": { "method": "updatePolygonAttribute", "group": "attributes", - "weight": 323, + "weight": 320, "cookies": false, "type": "", "demo": "databases\/update-polygon-attribute.md", @@ -10613,7 +10613,7 @@ "x-appwrite": { "method": "createRelationshipAttribute", "group": "attributes", - "weight": 324, + "weight": 321, "cookies": false, "type": "", "demo": "databases\/create-relationship-attribute.md", @@ -10754,7 +10754,7 @@ "x-appwrite": { "method": "createStringAttribute", "group": "attributes", - "weight": 326, + "weight": 323, "cookies": false, "type": "", "demo": "databases\/create-string-attribute.md", @@ -10881,7 +10881,7 @@ "x-appwrite": { "method": "updateStringAttribute", "group": "attributes", - "weight": 327, + "weight": 324, "cookies": false, "type": "", "demo": "databases\/update-string-attribute.md", @@ -11004,7 +11004,7 @@ "x-appwrite": { "method": "createTextAttribute", "group": "attributes", - "weight": 332, + "weight": 329, "cookies": false, "type": "", "demo": "databases\/create-text-attribute.md", @@ -11113,7 +11113,7 @@ "x-appwrite": { "method": "updateTextAttribute", "group": "attributes", - "weight": 333, + "weight": 330, "cookies": false, "type": "", "demo": "databases\/update-text-attribute.md", @@ -11224,7 +11224,7 @@ "x-appwrite": { "method": "createUrlAttribute", "group": "attributes", - "weight": 328, + "weight": 325, "cookies": false, "type": "", "demo": "databases\/create-url-attribute.md", @@ -11338,7 +11338,7 @@ "x-appwrite": { "method": "updateUrlAttribute", "group": "attributes", - "weight": 329, + "weight": 326, "cookies": false, "type": "", "demo": "databases\/update-url-attribute.md", @@ -11454,7 +11454,7 @@ "x-appwrite": { "method": "createVarcharAttribute", "group": "attributes", - "weight": 330, + "weight": 327, "cookies": false, "type": "", "demo": "databases\/create-varchar-attribute.md", @@ -11571,7 +11571,7 @@ "x-appwrite": { "method": "updateVarcharAttribute", "group": "attributes", - "weight": 331, + "weight": 328, "cookies": false, "type": "", "demo": "databases\/update-varchar-attribute.md", @@ -11719,7 +11719,7 @@ "x-appwrite": { "method": "getAttribute", "group": "attributes", - "weight": 301, + "weight": 298, "cookies": false, "type": "", "demo": "databases\/get-attribute.md", @@ -11794,7 +11794,7 @@ "x-appwrite": { "method": "deleteAttribute", "group": "attributes", - "weight": 302, + "weight": 299, "cookies": false, "type": "", "demo": "databases\/delete-attribute.md", @@ -11876,7 +11876,7 @@ "x-appwrite": { "method": "updateRelationshipAttribute", "group": "attributes", - "weight": 325, + "weight": 322, "cookies": false, "type": "", "demo": "databases\/update-relationship-attribute.md", @@ -11986,7 +11986,7 @@ "x-appwrite": { "method": "listDocuments", "group": "documents", - "weight": 297, + "weight": 294, "cookies": false, "type": "", "demo": "databases\/list-documents.md", @@ -12090,7 +12090,7 @@ "x-appwrite": { "method": "createDocument", "group": "documents", - "weight": 289, + "weight": 286, "cookies": false, "type": "", "demo": "databases\/create-document.md", @@ -12281,7 +12281,7 @@ "x-appwrite": { "method": "upsertDocuments", "group": "documents", - "weight": 294, + "weight": 291, "cookies": false, "type": "", "demo": "databases\/upsert-documents.md", @@ -12416,7 +12416,7 @@ "x-appwrite": { "method": "updateDocuments", "group": "documents", - "weight": 292, + "weight": 289, "cookies": false, "type": "", "demo": "databases\/update-documents.md", @@ -12520,7 +12520,7 @@ "x-appwrite": { "method": "deleteDocuments", "group": "documents", - "weight": 296, + "weight": 293, "cookies": false, "type": "", "demo": "databases\/delete-documents.md", @@ -12618,7 +12618,7 @@ "x-appwrite": { "method": "getDocument", "group": "documents", - "weight": 290, + "weight": 287, "cookies": false, "type": "", "demo": "databases\/get-document.md", @@ -12721,7 +12721,7 @@ "x-appwrite": { "method": "upsertDocument", "group": "documents", - "weight": 293, + "weight": 290, "cookies": false, "type": "", "demo": "databases\/upsert-document.md", @@ -12872,7 +12872,7 @@ "x-appwrite": { "method": "updateDocument", "group": "documents", - "weight": 291, + "weight": 288, "cookies": false, "type": "", "demo": "databases\/update-document.md", @@ -12982,7 +12982,7 @@ "x-appwrite": { "method": "deleteDocument", "group": "documents", - "weight": 295, + "weight": 292, "cookies": false, "type": "", "demo": "databases\/delete-document.md", @@ -13081,7 +13081,7 @@ "x-appwrite": { "method": "listDocumentLogs", "group": "logs", - "weight": 298, + "weight": 295, "cookies": false, "type": "", "demo": "databases\/list-document-logs.md", @@ -13174,7 +13174,7 @@ "x-appwrite": { "method": "decrementDocumentAttribute", "group": "documents", - "weight": 300, + "weight": 297, "cookies": false, "type": "", "demo": "databases\/decrement-document-attribute.md", @@ -13297,7 +13297,7 @@ "x-appwrite": { "method": "incrementDocumentAttribute", "group": "documents", - "weight": 299, + "weight": 296, "cookies": false, "type": "", "demo": "databases\/increment-document-attribute.md", @@ -13418,7 +13418,7 @@ "x-appwrite": { "method": "listIndexes", "group": "indexes", - "weight": 341, + "weight": 338, "cookies": false, "type": "", "demo": "databases\/list-indexes.md", @@ -13512,7 +13512,7 @@ "x-appwrite": { "method": "createIndex", "group": "indexes", - "weight": 338, + "weight": 335, "cookies": false, "type": "", "demo": "databases\/create-index.md", @@ -13652,7 +13652,7 @@ "x-appwrite": { "method": "getIndex", "group": "indexes", - "weight": 339, + "weight": 336, "cookies": false, "type": "", "demo": "databases\/get-index.md", @@ -13727,7 +13727,7 @@ "x-appwrite": { "method": "deleteIndex", "group": "indexes", - "weight": 340, + "weight": 337, "cookies": false, "type": "", "demo": "databases\/delete-index.md", @@ -13807,7 +13807,7 @@ "x-appwrite": { "method": "listCollectionLogs", "group": "collections", - "weight": 287, + "weight": 284, "cookies": false, "type": "", "demo": "databases\/list-collection-logs.md", @@ -13890,7 +13890,7 @@ "x-appwrite": { "method": "getCollectionUsage", "group": null, - "weight": 288, + "weight": 285, "cookies": false, "type": "", "demo": "databases\/get-collection-usage.md", @@ -13981,7 +13981,7 @@ "x-appwrite": { "method": "listLogs", "group": "logs", - "weight": 279, + "weight": 276, "cookies": false, "type": "", "demo": "databases\/list-logs.md", @@ -14086,7 +14086,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 280, + "weight": 277, "cookies": false, "type": "", "demo": "databases\/get-usage.md", @@ -14199,7 +14199,7 @@ "x-appwrite": { "method": "list", "group": "functions", - "weight": 431, + "weight": 428, "cookies": false, "type": "", "demo": "functions\/list.md", @@ -14281,7 +14281,7 @@ "x-appwrite": { "method": "create", "group": "functions", - "weight": 428, + "weight": 425, "cookies": false, "type": "", "demo": "functions\/create.md", @@ -14595,7 +14595,7 @@ "x-appwrite": { "method": "listRuntimes", "group": "runtimes", - "weight": 433, + "weight": 430, "cookies": false, "type": "", "demo": "functions\/list-runtimes.md", @@ -14645,7 +14645,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "runtimes", - "weight": 434, + "weight": 431, "cookies": false, "type": "", "demo": "functions\/list-specifications.md", @@ -14695,7 +14695,7 @@ "x-appwrite": { "method": "listTemplates", "group": "templates", - "weight": 457, + "weight": 454, "cookies": false, "type": "", "demo": "functions\/list-templates.md", @@ -14880,7 +14880,7 @@ "x-appwrite": { "method": "getTemplate", "group": "templates", - "weight": 456, + "weight": 453, "cookies": false, "type": "", "demo": "functions\/get-template.md", @@ -14938,7 +14938,7 @@ "x-appwrite": { "method": "listUsage", "group": null, - "weight": 450, + "weight": 447, "cookies": false, "type": "", "demo": "functions\/list-usage.md", @@ -15008,7 +15008,7 @@ "x-appwrite": { "method": "get", "group": "functions", - "weight": 429, + "weight": 426, "cookies": false, "type": "", "demo": "functions\/get.md", @@ -15068,7 +15068,7 @@ "x-appwrite": { "method": "update", "group": "functions", - "weight": 430, + "weight": 427, "cookies": false, "type": "", "demo": "functions\/update.md", @@ -15378,7 +15378,7 @@ "x-appwrite": { "method": "delete", "group": "functions", - "weight": 432, + "weight": 429, "cookies": false, "type": "", "demo": "functions\/delete.md", @@ -15440,7 +15440,7 @@ "x-appwrite": { "method": "updateFunctionDeployment", "group": "functions", - "weight": 437, + "weight": 434, "cookies": false, "type": "", "demo": "functions\/update-function-deployment.md", @@ -15518,7 +15518,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 438, + "weight": 435, "cookies": false, "type": "", "demo": "functions\/list-deployments.md", @@ -15608,7 +15608,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 435, + "weight": 432, "cookies": false, "type": "upload", "demo": "functions\/create-deployment.md", @@ -15701,7 +15701,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 443, + "weight": 440, "cookies": false, "type": "", "demo": "functions\/create-duplicate-deployment.md", @@ -15787,7 +15787,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 440, + "weight": 437, "cookies": false, "type": "", "demo": "functions\/create-template-deployment.md", @@ -15908,7 +15908,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 441, + "weight": 438, "cookies": false, "type": "", "demo": "functions\/create-vcs-deployment.md", @@ -16005,7 +16005,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 436, + "weight": 433, "cookies": false, "type": "", "demo": "functions\/get-deployment.md", @@ -16068,7 +16068,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 439, + "weight": 436, "cookies": false, "type": "", "demo": "functions\/delete-deployment.md", @@ -16136,7 +16136,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 442, + "weight": 439, "cookies": false, "type": "location", "demo": "functions\/get-deployment-download.md", @@ -16222,7 +16222,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 444, + "weight": 441, "cookies": false, "type": "", "demo": "functions\/update-deployment-status.md", @@ -16290,7 +16290,7 @@ "x-appwrite": { "method": "listExecutions", "group": "executions", - "weight": 447, + "weight": 444, "cookies": false, "type": "", "demo": "functions\/list-executions.md", @@ -16373,7 +16373,7 @@ "x-appwrite": { "method": "createExecution", "group": "executions", - "weight": 445, + "weight": 442, "cookies": false, "type": "", "demo": "functions\/create-execution.md", @@ -16492,7 +16492,7 @@ "x-appwrite": { "method": "getExecution", "group": "executions", - "weight": 446, + "weight": 443, "cookies": false, "type": "", "demo": "functions\/get-execution.md", @@ -16557,7 +16557,7 @@ "x-appwrite": { "method": "deleteExecution", "group": "executions", - "weight": 448, + "weight": 445, "cookies": false, "type": "", "demo": "functions\/delete-execution.md", @@ -16625,7 +16625,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 449, + "weight": 446, "cookies": false, "type": "", "demo": "functions\/get-usage.md", @@ -16703,7 +16703,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 453, + "weight": 450, "cookies": false, "type": "", "demo": "functions\/list-variables.md", @@ -16763,7 +16763,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 451, + "weight": 448, "cookies": false, "type": "", "demo": "functions\/create-variable.md", @@ -16854,7 +16854,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 452, + "weight": 449, "cookies": false, "type": "", "demo": "functions\/get-variable.md", @@ -16922,7 +16922,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 454, + "weight": 451, "cookies": false, "type": "", "demo": "functions\/update-variable.md", @@ -17017,7 +17017,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 455, + "weight": 452, "cookies": false, "type": "", "demo": "functions\/delete-variable.md", @@ -17087,7 +17087,7 @@ "x-appwrite": { "method": "query", "group": "graphql", - "weight": 190, + "weight": 187, "cookies": false, "type": "graphql", "demo": "graphql\/query.md", @@ -17162,7 +17162,7 @@ "x-appwrite": { "method": "mutation", "group": "graphql", - "weight": 189, + "weight": 186, "cookies": false, "type": "graphql", "demo": "graphql\/mutation.md", @@ -17235,7 +17235,7 @@ "x-appwrite": { "method": "get", "group": "health", - "weight": 458, + "weight": 455, "cookies": false, "type": "", "demo": "health\/get.md", @@ -17286,7 +17286,7 @@ "x-appwrite": { "method": "getAntivirus", "group": "health", - "weight": 467, + "weight": 464, "cookies": false, "type": "", "demo": "health\/get-antivirus.md", @@ -17337,7 +17337,7 @@ "x-appwrite": { "method": "getCache", "group": "health", - "weight": 461, + "weight": 458, "cookies": false, "type": "", "demo": "health\/get-cache.md", @@ -17388,7 +17388,7 @@ "x-appwrite": { "method": "getCertificate", "group": "health", - "weight": 464, + "weight": 461, "cookies": false, "type": "", "demo": "health\/get-certificate.md", @@ -17448,7 +17448,7 @@ "x-appwrite": { "method": "getDB", "group": "health", - "weight": 460, + "weight": 457, "cookies": false, "type": "", "demo": "health\/get-db.md", @@ -17499,7 +17499,7 @@ "x-appwrite": { "method": "getPubSub", "group": "health", - "weight": 462, + "weight": 459, "cookies": false, "type": "", "demo": "health\/get-pub-sub.md", @@ -17550,7 +17550,7 @@ "x-appwrite": { "method": "getQueueAudits", "group": "queue", - "weight": 468, + "weight": 465, "cookies": false, "type": "", "demo": "health\/get-queue-audits.md", @@ -17612,7 +17612,7 @@ "x-appwrite": { "method": "getQueueBuilds", "group": "queue", - "weight": 472, + "weight": 469, "cookies": false, "type": "", "demo": "health\/get-queue-builds.md", @@ -17674,7 +17674,7 @@ "x-appwrite": { "method": "getQueueCertificates", "group": "queue", - "weight": 471, + "weight": 468, "cookies": false, "type": "", "demo": "health\/get-queue-certificates.md", @@ -17736,7 +17736,7 @@ "x-appwrite": { "method": "getQueueDatabases", "group": "queue", - "weight": 473, + "weight": 470, "cookies": false, "type": "", "demo": "health\/get-queue-databases.md", @@ -17807,7 +17807,7 @@ "x-appwrite": { "method": "getQueueDeletes", "group": "queue", - "weight": 474, + "weight": 471, "cookies": false, "type": "", "demo": "health\/get-queue-deletes.md", @@ -17869,7 +17869,7 @@ "x-appwrite": { "method": "getFailedJobs", "group": "queue", - "weight": 481, + "weight": 478, "cookies": false, "type": "", "demo": "health\/get-failed-jobs.md", @@ -17956,7 +17956,7 @@ "x-appwrite": { "method": "getQueueFunctions", "group": "queue", - "weight": 478, + "weight": 475, "cookies": false, "type": "", "demo": "health\/get-queue-functions.md", @@ -18018,7 +18018,7 @@ "x-appwrite": { "method": "getQueueLogs", "group": "queue", - "weight": 470, + "weight": 467, "cookies": false, "type": "", "demo": "health\/get-queue-logs.md", @@ -18080,7 +18080,7 @@ "x-appwrite": { "method": "getQueueMails", "group": "queue", - "weight": 475, + "weight": 472, "cookies": false, "type": "", "demo": "health\/get-queue-mails.md", @@ -18142,7 +18142,7 @@ "x-appwrite": { "method": "getQueueMessaging", "group": "queue", - "weight": 476, + "weight": 473, "cookies": false, "type": "", "demo": "health\/get-queue-messaging.md", @@ -18204,7 +18204,7 @@ "x-appwrite": { "method": "getQueueMigrations", "group": "queue", - "weight": 477, + "weight": 474, "cookies": false, "type": "", "demo": "health\/get-queue-migrations.md", @@ -18266,7 +18266,7 @@ "x-appwrite": { "method": "getQueueStatsResources", "group": "queue", - "weight": 479, + "weight": 476, "cookies": false, "type": "", "demo": "health\/get-queue-stats-resources.md", @@ -18328,7 +18328,7 @@ "x-appwrite": { "method": "getQueueUsage", "group": "queue", - "weight": 480, + "weight": 477, "cookies": false, "type": "", "demo": "health\/get-queue-usage.md", @@ -18390,7 +18390,7 @@ "x-appwrite": { "method": "getQueueWebhooks", "group": "queue", - "weight": 469, + "weight": 466, "cookies": false, "type": "", "demo": "health\/get-queue-webhooks.md", @@ -18452,7 +18452,7 @@ "x-appwrite": { "method": "getStorage", "group": "storage", - "weight": 466, + "weight": 463, "cookies": false, "type": "", "demo": "health\/get-storage.md", @@ -18503,7 +18503,7 @@ "x-appwrite": { "method": "getStorageLocal", "group": "storage", - "weight": 465, + "weight": 462, "cookies": false, "type": "", "demo": "health\/get-storage-local.md", @@ -18554,7 +18554,7 @@ "x-appwrite": { "method": "getTime", "group": "health", - "weight": 463, + "weight": 460, "cookies": false, "type": "", "demo": "health\/get-time.md", @@ -19029,7 +19029,7 @@ "x-appwrite": { "method": "listMessages", "group": "messages", - "weight": 245, + "weight": 242, "cookies": false, "type": "", "demo": "messaging\/list-messages.md", @@ -19114,7 +19114,7 @@ "x-appwrite": { "method": "createEmail", "group": "messages", - "weight": 242, + "weight": 239, "cookies": false, "type": "", "demo": "messaging\/create-email.md", @@ -19274,7 +19274,7 @@ "x-appwrite": { "method": "updateEmail", "group": "messages", - "weight": 249, + "weight": 246, "cookies": false, "type": "", "demo": "messaging\/update-email.md", @@ -19441,7 +19441,7 @@ "x-appwrite": { "method": "createPush", "group": "messages", - "weight": 244, + "weight": 241, "cookies": false, "type": "", "demo": "messaging\/create-push.md", @@ -19640,7 +19640,7 @@ "x-appwrite": { "method": "updatePush", "group": "messages", - "weight": 251, + "weight": 248, "cookies": false, "type": "", "demo": "messaging\/update-push.md", @@ -19854,7 +19854,7 @@ "x-appwrite": { "method": "createSms", "group": "messages", - "weight": 243, + "weight": 240, "cookies": false, "type": "", "demo": "messaging\/create-sms.md", @@ -20044,7 +20044,7 @@ "x-appwrite": { "method": "updateSms", "group": "messages", - "weight": 250, + "weight": 247, "cookies": false, "type": "", "demo": "messaging\/update-sms.md", @@ -20233,7 +20233,7 @@ "x-appwrite": { "method": "getMessage", "group": "messages", - "weight": 248, + "weight": 245, "cookies": false, "type": "", "demo": "messaging\/get-message.md", @@ -20289,7 +20289,7 @@ "x-appwrite": { "method": "delete", "group": "messages", - "weight": 252, + "weight": 249, "cookies": false, "type": "", "demo": "messaging\/delete.md", @@ -20350,7 +20350,7 @@ "x-appwrite": { "method": "listMessageLogs", "group": "logs", - "weight": 246, + "weight": 243, "cookies": false, "type": "", "demo": "messaging\/list-message-logs.md", @@ -20432,7 +20432,7 @@ "x-appwrite": { "method": "listTargets", "group": "messages", - "weight": 247, + "weight": 244, "cookies": false, "type": "", "demo": "messaging\/list-targets.md", @@ -20514,7 +20514,7 @@ "x-appwrite": { "method": "listProviders", "group": "providers", - "weight": 216, + "weight": 213, "cookies": false, "type": "", "demo": "messaging\/list-providers.md", @@ -20599,7 +20599,7 @@ "x-appwrite": { "method": "createApnsProvider", "group": "providers", - "weight": 215, + "weight": 212, "cookies": false, "type": "", "demo": "messaging\/create-apns-provider.md", @@ -20788,7 +20788,7 @@ "x-appwrite": { "method": "updateApnsProvider", "group": "providers", - "weight": 229, + "weight": 226, "cookies": false, "type": "", "demo": "messaging\/update-apns-provider.md", @@ -20974,7 +20974,7 @@ "x-appwrite": { "method": "createFcmProvider", "group": "providers", - "weight": 214, + "weight": 211, "cookies": false, "type": "", "demo": "messaging\/create-fcm-provider.md", @@ -21132,7 +21132,7 @@ "x-appwrite": { "method": "updateFcmProvider", "group": "providers", - "weight": 228, + "weight": 225, "cookies": false, "type": "", "demo": "messaging\/update-fcm-provider.md", @@ -21286,7 +21286,7 @@ "x-appwrite": { "method": "createMailgunProvider", "group": "providers", - "weight": 205, + "weight": 202, "cookies": false, "type": "", "demo": "messaging\/create-mailgun-provider.md", @@ -21418,7 +21418,7 @@ "x-appwrite": { "method": "updateMailgunProvider", "group": "providers", - "weight": 219, + "weight": 216, "cookies": false, "type": "", "demo": "messaging\/update-mailgun-provider.md", @@ -21547,7 +21547,7 @@ "x-appwrite": { "method": "createMsg91Provider", "group": "providers", - "weight": 209, + "weight": 206, "cookies": false, "type": "", "demo": "messaging\/create-msg-91-provider.md", @@ -21652,7 +21652,7 @@ "x-appwrite": { "method": "updateMsg91Provider", "group": "providers", - "weight": 223, + "weight": 220, "cookies": false, "type": "", "demo": "messaging\/update-msg-91-provider.md", @@ -21755,7 +21755,7 @@ "x-appwrite": { "method": "createResendProvider", "group": "providers", - "weight": 207, + "weight": 204, "cookies": false, "type": "", "demo": "messaging\/create-resend-provider.md", @@ -21874,7 +21874,7 @@ "x-appwrite": { "method": "updateResendProvider", "group": "providers", - "weight": 221, + "weight": 218, "cookies": false, "type": "", "demo": "messaging\/update-resend-provider.md", @@ -21990,7 +21990,7 @@ "x-appwrite": { "method": "createSendgridProvider", "group": "providers", - "weight": 206, + "weight": 203, "cookies": false, "type": "", "demo": "messaging\/create-sendgrid-provider.md", @@ -22109,7 +22109,7 @@ "x-appwrite": { "method": "updateSendgridProvider", "group": "providers", - "weight": 220, + "weight": 217, "cookies": false, "type": "", "demo": "messaging\/update-sendgrid-provider.md", @@ -22225,7 +22225,7 @@ "x-appwrite": { "method": "createSmtpProvider", "group": "providers", - "weight": 208, + "weight": 205, "cookies": false, "type": "", "demo": "messaging\/create-smtp-provider.md", @@ -22475,7 +22475,7 @@ "x-appwrite": { "method": "updateSmtpProvider", "group": "providers", - "weight": 222, + "weight": 219, "cookies": false, "type": "", "demo": "messaging\/update-smtp-provider.md", @@ -22719,7 +22719,7 @@ "x-appwrite": { "method": "createTelesignProvider", "group": "providers", - "weight": 210, + "weight": 207, "cookies": false, "type": "", "demo": "messaging\/create-telesign-provider.md", @@ -22825,7 +22825,7 @@ "x-appwrite": { "method": "updateTelesignProvider", "group": "providers", - "weight": 224, + "weight": 221, "cookies": false, "type": "", "demo": "messaging\/update-telesign-provider.md", @@ -22928,7 +22928,7 @@ "x-appwrite": { "method": "createTextmagicProvider", "group": "providers", - "weight": 211, + "weight": 208, "cookies": false, "type": "", "demo": "messaging\/create-textmagic-provider.md", @@ -23034,7 +23034,7 @@ "x-appwrite": { "method": "updateTextmagicProvider", "group": "providers", - "weight": 225, + "weight": 222, "cookies": false, "type": "", "demo": "messaging\/update-textmagic-provider.md", @@ -23137,7 +23137,7 @@ "x-appwrite": { "method": "createTwilioProvider", "group": "providers", - "weight": 212, + "weight": 209, "cookies": false, "type": "", "demo": "messaging\/create-twilio-provider.md", @@ -23243,7 +23243,7 @@ "x-appwrite": { "method": "updateTwilioProvider", "group": "providers", - "weight": 226, + "weight": 223, "cookies": false, "type": "", "demo": "messaging\/update-twilio-provider.md", @@ -23346,7 +23346,7 @@ "x-appwrite": { "method": "createVonageProvider", "group": "providers", - "weight": 213, + "weight": 210, "cookies": false, "type": "", "demo": "messaging\/create-vonage-provider.md", @@ -23452,7 +23452,7 @@ "x-appwrite": { "method": "updateVonageProvider", "group": "providers", - "weight": 227, + "weight": 224, "cookies": false, "type": "", "demo": "messaging\/update-vonage-provider.md", @@ -23553,7 +23553,7 @@ "x-appwrite": { "method": "getProvider", "group": "providers", - "weight": 218, + "weight": 215, "cookies": false, "type": "", "demo": "messaging\/get-provider.md", @@ -23609,7 +23609,7 @@ "x-appwrite": { "method": "deleteProvider", "group": "providers", - "weight": 230, + "weight": 227, "cookies": false, "type": "", "demo": "messaging\/delete-provider.md", @@ -23670,7 +23670,7 @@ "x-appwrite": { "method": "listProviderLogs", "group": "providers", - "weight": 217, + "weight": 214, "cookies": false, "type": "", "demo": "messaging\/list-provider-logs.md", @@ -23752,7 +23752,7 @@ "x-appwrite": { "method": "listSubscriberLogs", "group": "subscribers", - "weight": 239, + "weight": 236, "cookies": false, "type": "", "demo": "messaging\/list-subscriber-logs.md", @@ -23834,7 +23834,7 @@ "x-appwrite": { "method": "listTopics", "group": "topics", - "weight": 232, + "weight": 229, "cookies": false, "type": "", "demo": "messaging\/list-topics.md", @@ -23917,7 +23917,7 @@ "x-appwrite": { "method": "createTopic", "group": "topics", - "weight": 231, + "weight": 228, "cookies": false, "type": "", "demo": "messaging\/create-topic.md", @@ -24006,7 +24006,7 @@ "x-appwrite": { "method": "getTopic", "group": "topics", - "weight": 234, + "weight": 231, "cookies": false, "type": "", "demo": "messaging\/get-topic.md", @@ -24067,7 +24067,7 @@ "x-appwrite": { "method": "updateTopic", "group": "topics", - "weight": 235, + "weight": 232, "cookies": false, "type": "", "demo": "messaging\/update-topic.md", @@ -24149,7 +24149,7 @@ "x-appwrite": { "method": "deleteTopic", "group": "topics", - "weight": 236, + "weight": 233, "cookies": false, "type": "", "demo": "messaging\/delete-topic.md", @@ -24210,7 +24210,7 @@ "x-appwrite": { "method": "listTopicLogs", "group": "topics", - "weight": 233, + "weight": 230, "cookies": false, "type": "", "demo": "messaging\/list-topic-logs.md", @@ -24292,7 +24292,7 @@ "x-appwrite": { "method": "listSubscribers", "group": "subscribers", - "weight": 238, + "weight": 235, "cookies": false, "type": "", "demo": "messaging\/list-subscribers.md", @@ -24383,7 +24383,7 @@ "x-appwrite": { "method": "createSubscriber", "group": "subscribers", - "weight": 237, + "weight": 234, "cookies": false, "type": "", "demo": "messaging\/create-subscriber.md", @@ -24471,7 +24471,7 @@ "x-appwrite": { "method": "getSubscriber", "group": "subscribers", - "weight": 240, + "weight": 237, "cookies": false, "type": "", "demo": "messaging\/get-subscriber.md", @@ -24535,7 +24535,7 @@ "x-appwrite": { "method": "deleteSubscriber", "group": "subscribers", - "weight": 241, + "weight": 238, "cookies": false, "type": "", "demo": "messaging\/delete-subscriber.md", @@ -24606,7 +24606,7 @@ "x-appwrite": { "method": "list", "group": null, - "weight": 197, + "weight": 194, "cookies": false, "type": "", "demo": "migrations\/list.md", @@ -24689,7 +24689,7 @@ "x-appwrite": { "method": "createAppwriteMigration", "group": null, - "weight": 191, + "weight": 188, "cookies": false, "type": "", "demo": "migrations\/create-appwrite-migration.md", @@ -24803,7 +24803,7 @@ "x-appwrite": { "method": "getAppwriteReport", "group": null, - "weight": 199, + "weight": 196, "cookies": false, "type": "", "demo": "migrations\/get-appwrite-report.md", @@ -24912,7 +24912,7 @@ "x-appwrite": { "method": "createCSVExport", "group": null, - "weight": 196, + "weight": 193, "cookies": false, "type": "", "demo": "migrations\/create-csv-export.md", @@ -25038,7 +25038,7 @@ "x-appwrite": { "method": "createCSVImport", "group": null, - "weight": 195, + "weight": 192, "cookies": false, "type": "", "demo": "migrations\/create-csv-import.md", @@ -25129,7 +25129,7 @@ "x-appwrite": { "method": "createFirebaseMigration", "group": null, - "weight": 192, + "weight": 189, "cookies": false, "type": "", "demo": "migrations\/create-firebase-migration.md", @@ -25222,7 +25222,7 @@ "x-appwrite": { "method": "getFirebaseReport", "group": null, - "weight": 200, + "weight": 197, "cookies": false, "type": "", "demo": "migrations\/get-firebase-report.md", @@ -25308,7 +25308,7 @@ "x-appwrite": { "method": "createNHostMigration", "group": null, - "weight": 194, + "weight": 191, "cookies": false, "type": "", "demo": "migrations\/create-n-host-migration.md", @@ -25444,7 +25444,7 @@ "x-appwrite": { "method": "getNHostReport", "group": null, - "weight": 202, + "weight": 199, "cookies": false, "type": "", "demo": "migrations\/get-n-host-report.md", @@ -25580,7 +25580,7 @@ "x-appwrite": { "method": "createSupabaseMigration", "group": null, - "weight": 193, + "weight": 190, "cookies": false, "type": "", "demo": "migrations\/create-supabase-migration.md", @@ -25710,7 +25710,7 @@ "x-appwrite": { "method": "getSupabaseReport", "group": null, - "weight": 201, + "weight": 198, "cookies": false, "type": "", "demo": "migrations\/get-supabase-report.md", @@ -25837,7 +25837,7 @@ "x-appwrite": { "method": "get", "group": null, - "weight": 198, + "weight": 195, "cookies": false, "type": "", "demo": "migrations\/get.md", @@ -25896,7 +25896,7 @@ "x-appwrite": { "method": "retry", "group": null, - "weight": 203, + "weight": 200, "cookies": false, "type": "", "demo": "migrations\/retry.md", @@ -25950,7 +25950,7 @@ "x-appwrite": { "method": "delete", "group": null, - "weight": 204, + "weight": 201, "cookies": false, "type": "", "demo": "migrations\/delete.md", @@ -26427,7 +26427,7 @@ "x-appwrite": { "method": "list", "group": "projects", - "weight": 426, + "weight": 423, "cookies": false, "type": "", "demo": "projects\/list.md", @@ -28106,7 +28106,7 @@ "x-appwrite": { "method": "listDevKeys", "group": "devKeys", - "weight": 424, + "weight": 421, "cookies": false, "type": "", "demo": "projects\/list-dev-keys.md", @@ -28176,7 +28176,7 @@ "x-appwrite": { "method": "createDevKey", "group": "devKeys", - "weight": 421, + "weight": 418, "cookies": false, "type": "", "demo": "projects\/create-dev-key.md", @@ -28259,7 +28259,7 @@ "x-appwrite": { "method": "getDevKey", "group": "devKeys", - "weight": 423, + "weight": 420, "cookies": false, "type": "", "demo": "projects\/get-dev-key.md", @@ -28325,7 +28325,7 @@ "x-appwrite": { "method": "updateDevKey", "group": "devKeys", - "weight": 422, + "weight": 419, "cookies": false, "type": "", "demo": "projects\/update-dev-key.md", @@ -28411,7 +28411,7 @@ "x-appwrite": { "method": "deleteDevKey", "group": "devKeys", - "weight": 425, + "weight": 422, "cookies": false, "type": "", "demo": "projects\/delete-dev-key.md", @@ -29140,7 +29140,7 @@ "x-appwrite": { "method": "updateLabels", "group": "projects", - "weight": 427, + "weight": 424, "cookies": false, "type": "", "demo": "projects\/update-labels.md", @@ -32563,7 +32563,7 @@ "x-appwrite": { "method": "listRules", "group": null, - "weight": 528, + "weight": 525, "cookies": false, "type": "", "demo": "proxy\/list-rules.md", @@ -32645,7 +32645,7 @@ "x-appwrite": { "method": "createAPIRule", "group": null, - "weight": 523, + "weight": 520, "cookies": false, "type": "", "demo": "proxy\/create-api-rule.md", @@ -32715,7 +32715,7 @@ "x-appwrite": { "method": "createFunctionRule", "group": null, - "weight": 525, + "weight": 522, "cookies": false, "type": "", "demo": "proxy\/create-function-rule.md", @@ -32798,7 +32798,7 @@ "x-appwrite": { "method": "createRedirectRule", "group": null, - "weight": 526, + "weight": 523, "cookies": false, "type": "", "demo": "proxy\/create-redirect-rule.md", @@ -32919,7 +32919,7 @@ "x-appwrite": { "method": "createSiteRule", "group": null, - "weight": 524, + "weight": 521, "cookies": false, "type": "", "demo": "proxy\/create-site-rule.md", @@ -33000,7 +33000,7 @@ "x-appwrite": { "method": "getRule", "group": null, - "weight": 527, + "weight": 524, "cookies": false, "type": "", "demo": "proxy\/get-rule.md", @@ -33053,7 +33053,7 @@ "x-appwrite": { "method": "deleteRule", "group": null, - "weight": 529, + "weight": 526, "cookies": false, "type": "", "demo": "proxy\/delete-rule.md", @@ -33113,7 +33113,7 @@ "x-appwrite": { "method": "updateRuleVerification", "group": null, - "weight": 530, + "weight": 527, "cookies": false, "type": "", "demo": "proxy\/update-rule-verification.md", @@ -33171,7 +33171,7 @@ "x-appwrite": { "method": "list", "group": "sites", - "weight": 485, + "weight": 482, "cookies": false, "type": "", "demo": "sites\/list.md", @@ -33253,7 +33253,7 @@ "x-appwrite": { "method": "create", "group": "sites", - "weight": 483, + "weight": 480, "cookies": false, "type": "", "demo": "sites\/create.md", @@ -33525,7 +33525,7 @@ "x-appwrite": { "method": "listFrameworks", "group": "frameworks", - "weight": 488, + "weight": 485, "cookies": false, "type": "", "demo": "sites\/list-frameworks.md", @@ -33575,7 +33575,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "frameworks", - "weight": 511, + "weight": 508, "cookies": false, "type": "", "demo": "sites\/list-specifications.md", @@ -33625,7 +33625,7 @@ "x-appwrite": { "method": "listTemplates", "group": "templates", - "weight": 507, + "weight": 504, "cookies": false, "type": "", "demo": "sites\/list-templates.md", @@ -33751,7 +33751,7 @@ "x-appwrite": { "method": "getTemplate", "group": "templates", - "weight": 508, + "weight": 505, "cookies": false, "type": "", "demo": "sites\/get-template.md", @@ -33809,7 +33809,7 @@ "x-appwrite": { "method": "listUsage", "group": null, - "weight": 509, + "weight": 506, "cookies": false, "type": "", "demo": "sites\/list-usage.md", @@ -33879,7 +33879,7 @@ "x-appwrite": { "method": "get", "group": "sites", - "weight": 484, + "weight": 481, "cookies": false, "type": "", "demo": "sites\/get.md", @@ -33939,7 +33939,7 @@ "x-appwrite": { "method": "update", "group": "sites", - "weight": 486, + "weight": 483, "cookies": false, "type": "", "demo": "sites\/update.md", @@ -34206,7 +34206,7 @@ "x-appwrite": { "method": "delete", "group": "sites", - "weight": 487, + "weight": 484, "cookies": false, "type": "", "demo": "sites\/delete.md", @@ -34268,7 +34268,7 @@ "x-appwrite": { "method": "updateSiteDeployment", "group": "sites", - "weight": 494, + "weight": 491, "cookies": false, "type": "", "demo": "sites\/update-site-deployment.md", @@ -34346,7 +34346,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 493, + "weight": 490, "cookies": false, "type": "", "demo": "sites\/list-deployments.md", @@ -34436,7 +34436,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 489, + "weight": 486, "cookies": false, "type": "upload", "demo": "sites\/create-deployment.md", @@ -34537,7 +34537,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 497, + "weight": 494, "cookies": false, "type": "", "demo": "sites\/create-duplicate-deployment.md", @@ -34617,7 +34617,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 490, + "weight": 487, "cookies": false, "type": "", "demo": "sites\/create-template-deployment.md", @@ -34738,7 +34738,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 491, + "weight": 488, "cookies": false, "type": "", "demo": "sites\/create-vcs-deployment.md", @@ -34836,7 +34836,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 492, + "weight": 489, "cookies": false, "type": "", "demo": "sites\/get-deployment.md", @@ -34899,7 +34899,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 495, + "weight": 492, "cookies": false, "type": "", "demo": "sites\/delete-deployment.md", @@ -34967,7 +34967,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 496, + "weight": 493, "cookies": false, "type": "location", "demo": "sites\/get-deployment-download.md", @@ -35053,7 +35053,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 498, + "weight": 495, "cookies": false, "type": "", "demo": "sites\/update-deployment-status.md", @@ -35121,7 +35121,7 @@ "x-appwrite": { "method": "listLogs", "group": "logs", - "weight": 500, + "weight": 497, "cookies": false, "type": "", "demo": "sites\/list-logs.md", @@ -35202,7 +35202,7 @@ "x-appwrite": { "method": "getLog", "group": "logs", - "weight": 499, + "weight": 496, "cookies": false, "type": "", "demo": "sites\/get-log.md", @@ -35267,7 +35267,7 @@ "x-appwrite": { "method": "deleteLog", "group": "logs", - "weight": 501, + "weight": 498, "cookies": false, "type": "", "demo": "sites\/delete-log.md", @@ -35335,7 +35335,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 510, + "weight": 507, "cookies": false, "type": "", "demo": "sites\/get-usage.md", @@ -35413,7 +35413,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 504, + "weight": 501, "cookies": false, "type": "", "demo": "sites\/list-variables.md", @@ -35473,7 +35473,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 502, + "weight": 499, "cookies": false, "type": "", "demo": "sites\/create-variable.md", @@ -35564,7 +35564,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 503, + "weight": 500, "cookies": false, "type": "", "demo": "sites\/get-variable.md", @@ -35632,7 +35632,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 505, + "weight": 502, "cookies": false, "type": "", "demo": "sites\/update-variable.md", @@ -35727,7 +35727,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 506, + "weight": 503, "cookies": false, "type": "", "demo": "sites\/delete-variable.md", @@ -35795,7 +35795,7 @@ "x-appwrite": { "method": "listBuckets", "group": "buckets", - "weight": 538, + "weight": 535, "cookies": false, "type": "", "demo": "storage\/list-buckets.md", @@ -35878,7 +35878,7 @@ "x-appwrite": { "method": "createBucket", "group": "buckets", - "weight": 536, + "weight": 533, "cookies": false, "type": "", "demo": "storage\/create-bucket.md", @@ -36025,7 +36025,7 @@ "x-appwrite": { "method": "getBucket", "group": "buckets", - "weight": 537, + "weight": 534, "cookies": false, "type": "", "demo": "storage\/get-bucket.md", @@ -36086,7 +36086,7 @@ "x-appwrite": { "method": "updateBucket", "group": "buckets", - "weight": 539, + "weight": 536, "cookies": false, "type": "", "demo": "storage\/update-bucket.md", @@ -36229,7 +36229,7 @@ "x-appwrite": { "method": "deleteBucket", "group": "buckets", - "weight": 540, + "weight": 537, "cookies": false, "type": "", "demo": "storage\/delete-bucket.md", @@ -36290,7 +36290,7 @@ "x-appwrite": { "method": "listFiles", "group": "files", - "weight": 543, + "weight": 540, "cookies": false, "type": "", "demo": "storage\/list-files.md", @@ -36383,7 +36383,7 @@ "x-appwrite": { "method": "createFile", "group": "files", - "weight": 541, + "weight": 538, "cookies": false, "type": "upload", "demo": "storage\/create-file.md", @@ -36474,7 +36474,7 @@ "x-appwrite": { "method": "getFile", "group": "files", - "weight": 542, + "weight": 539, "cookies": false, "type": "", "demo": "storage\/get-file.md", @@ -36545,7 +36545,7 @@ "x-appwrite": { "method": "updateFile", "group": "files", - "weight": 544, + "weight": 541, "cookies": false, "type": "", "demo": "storage\/update-file.md", @@ -36636,7 +36636,7 @@ "x-appwrite": { "method": "deleteFile", "group": "files", - "weight": 545, + "weight": 542, "cookies": false, "type": "", "demo": "storage\/delete-file.md", @@ -36707,7 +36707,7 @@ "x-appwrite": { "method": "getFileDownload", "group": "files", - "weight": 547, + "weight": 544, "cookies": false, "type": "location", "demo": "storage\/get-file-download.md", @@ -36787,7 +36787,7 @@ "x-appwrite": { "method": "getFilePreview", "group": "files", - "weight": 546, + "weight": 543, "cookies": false, "type": "location", "demo": "storage\/get-file-preview.md", @@ -36995,7 +36995,7 @@ "x-appwrite": { "method": "getFileView", "group": "files", - "weight": 548, + "weight": 545, "cookies": false, "type": "location", "demo": "storage\/get-file-view.md", @@ -37075,7 +37075,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 550, + "weight": 547, "cookies": false, "type": "", "demo": "storage\/get-usage.md", @@ -37146,7 +37146,7 @@ "x-appwrite": { "method": "getBucketUsage", "group": null, - "weight": 551, + "weight": 548, "cookies": false, "type": "", "demo": "storage\/get-bucket-usage.md", @@ -37225,7 +37225,7 @@ "x-appwrite": { "method": "list", "group": "tablesdb", - "weight": 352, + "weight": 349, "cookies": false, "type": "", "demo": "tablesdb\/list.md", @@ -37308,7 +37308,7 @@ "x-appwrite": { "method": "create", "group": "tablesdb", - "weight": 348, + "weight": 345, "cookies": false, "type": "", "demo": "tablesdb\/create.md", @@ -37392,7 +37392,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 419, + "weight": 416, "cookies": false, "type": "", "demo": "tablesdb\/list-transactions.md", @@ -37462,7 +37462,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 415, + "weight": 412, "cookies": false, "type": "", "demo": "tablesdb\/create-transaction.md", @@ -37536,7 +37536,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 416, + "weight": 413, "cookies": false, "type": "", "demo": "tablesdb\/get-transaction.md", @@ -37602,7 +37602,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 417, + "weight": 414, "cookies": false, "type": "", "demo": "tablesdb\/update-transaction.md", @@ -37684,7 +37684,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 418, + "weight": 415, "cookies": false, "type": "", "demo": "tablesdb\/delete-transaction.md", @@ -37752,7 +37752,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 420, + "weight": 417, "cookies": false, "type": "", "demo": "tablesdb\/create-operations.md", @@ -37836,7 +37836,7 @@ "x-appwrite": { "method": "listUsage", "group": null, - "weight": 354, + "weight": 351, "cookies": false, "type": "", "demo": "tablesdb\/list-usage.md", @@ -37933,7 +37933,7 @@ "x-appwrite": { "method": "get", "group": "tablesdb", - "weight": 349, + "weight": 346, "cookies": false, "type": "", "demo": "tablesdb\/get.md", @@ -37994,7 +37994,7 @@ "x-appwrite": { "method": "update", "group": "tablesdb", - "weight": 350, + "weight": 347, "cookies": false, "type": "", "demo": "tablesdb\/update.md", @@ -38071,7 +38071,7 @@ "x-appwrite": { "method": "delete", "group": "tablesdb", - "weight": 351, + "weight": 348, "cookies": false, "type": "", "demo": "tablesdb\/delete.md", @@ -38132,7 +38132,7 @@ "x-appwrite": { "method": "listTables", "group": "tables", - "weight": 359, + "weight": 356, "cookies": false, "type": "", "demo": "tablesdb\/list-tables.md", @@ -38226,7 +38226,7 @@ "x-appwrite": { "method": "createTable", "group": "tables", - "weight": 355, + "weight": 352, "cookies": false, "type": "", "demo": "tablesdb\/create-table.md", @@ -38355,7 +38355,7 @@ "x-appwrite": { "method": "getTable", "group": "tables", - "weight": 356, + "weight": 353, "cookies": false, "type": "", "demo": "tablesdb\/get-table.md", @@ -38427,7 +38427,7 @@ "x-appwrite": { "method": "updateTable", "group": "tables", - "weight": 357, + "weight": 354, "cookies": false, "type": "", "demo": "tablesdb\/update-table.md", @@ -38531,7 +38531,7 @@ "x-appwrite": { "method": "deleteTable", "group": "tables", - "weight": 358, + "weight": 355, "cookies": false, "type": "", "demo": "tablesdb\/delete-table.md", @@ -38603,7 +38603,7 @@ "x-appwrite": { "method": "listColumns", "group": "columns", - "weight": 364, + "weight": 361, "cookies": false, "type": "", "demo": "tablesdb\/list-columns.md", @@ -38698,7 +38698,7 @@ "x-appwrite": { "method": "createBooleanColumn", "group": "columns", - "weight": 365, + "weight": 362, "cookies": false, "type": "", "demo": "tablesdb\/create-boolean-column.md", @@ -38810,7 +38810,7 @@ "x-appwrite": { "method": "updateBooleanColumn", "group": "columns", - "weight": 366, + "weight": 363, "cookies": false, "type": "", "demo": "tablesdb\/update-boolean-column.md", @@ -38924,7 +38924,7 @@ "x-appwrite": { "method": "createDatetimeColumn", "group": "columns", - "weight": 367, + "weight": 364, "cookies": false, "type": "", "demo": "tablesdb\/create-datetime-column.md", @@ -39036,7 +39036,7 @@ "x-appwrite": { "method": "updateDatetimeColumn", "group": "columns", - "weight": 368, + "weight": 365, "cookies": false, "type": "", "demo": "tablesdb\/update-datetime-column.md", @@ -39150,7 +39150,7 @@ "x-appwrite": { "method": "createEmailColumn", "group": "columns", - "weight": 369, + "weight": 366, "cookies": false, "type": "", "demo": "tablesdb\/create-email-column.md", @@ -39263,7 +39263,7 @@ "x-appwrite": { "method": "updateEmailColumn", "group": "columns", - "weight": 370, + "weight": 367, "cookies": false, "type": "", "demo": "tablesdb\/update-email-column.md", @@ -39378,7 +39378,7 @@ "x-appwrite": { "method": "createEnumColumn", "group": "columns", - "weight": 371, + "weight": 368, "cookies": false, "type": "", "demo": "tablesdb\/create-enum-column.md", @@ -39500,7 +39500,7 @@ "x-appwrite": { "method": "updateEnumColumn", "group": "columns", - "weight": 372, + "weight": 369, "cookies": false, "type": "", "demo": "tablesdb\/update-enum-column.md", @@ -39624,7 +39624,7 @@ "x-appwrite": { "method": "createFloatColumn", "group": "columns", - "weight": 373, + "weight": 370, "cookies": false, "type": "", "demo": "tablesdb\/create-float-column.md", @@ -39753,7 +39753,7 @@ "x-appwrite": { "method": "updateFloatColumn", "group": "columns", - "weight": 374, + "weight": 371, "cookies": false, "type": "", "demo": "tablesdb\/update-float-column.md", @@ -39884,7 +39884,7 @@ "x-appwrite": { "method": "createIntegerColumn", "group": "columns", - "weight": 375, + "weight": 372, "cookies": false, "type": "", "demo": "tablesdb\/create-integer-column.md", @@ -40013,7 +40013,7 @@ "x-appwrite": { "method": "updateIntegerColumn", "group": "columns", - "weight": 376, + "weight": 373, "cookies": false, "type": "", "demo": "tablesdb\/update-integer-column.md", @@ -40144,7 +40144,7 @@ "x-appwrite": { "method": "createIpColumn", "group": "columns", - "weight": 377, + "weight": 374, "cookies": false, "type": "", "demo": "tablesdb\/create-ip-column.md", @@ -40256,7 +40256,7 @@ "x-appwrite": { "method": "updateIpColumn", "group": "columns", - "weight": 378, + "weight": 375, "cookies": false, "type": "", "demo": "tablesdb\/update-ip-column.md", @@ -40370,7 +40370,7 @@ "x-appwrite": { "method": "createLineColumn", "group": "columns", - "weight": 379, + "weight": 376, "cookies": false, "type": "", "demo": "tablesdb\/create-line-column.md", @@ -40476,7 +40476,7 @@ "x-appwrite": { "method": "updateLineColumn", "group": "columns", - "weight": 380, + "weight": 377, "cookies": false, "type": "", "demo": "tablesdb\/update-line-column.md", @@ -40589,7 +40589,7 @@ "x-appwrite": { "method": "createLongtextColumn", "group": "columns", - "weight": 397, + "weight": 394, "cookies": false, "type": "", "demo": "tablesdb\/create-longtext-column.md", @@ -40701,7 +40701,7 @@ "x-appwrite": { "method": "updateLongtextColumn", "group": "columns", - "weight": 398, + "weight": 395, "cookies": false, "type": "", "demo": "tablesdb\/update-longtext-column.md", @@ -40815,7 +40815,7 @@ "x-appwrite": { "method": "createMediumtextColumn", "group": "columns", - "weight": 395, + "weight": 392, "cookies": false, "type": "", "demo": "tablesdb\/create-mediumtext-column.md", @@ -40927,7 +40927,7 @@ "x-appwrite": { "method": "updateMediumtextColumn", "group": "columns", - "weight": 396, + "weight": 393, "cookies": false, "type": "", "demo": "tablesdb\/update-mediumtext-column.md", @@ -41041,7 +41041,7 @@ "x-appwrite": { "method": "createPointColumn", "group": "columns", - "weight": 381, + "weight": 378, "cookies": false, "type": "", "demo": "tablesdb\/create-point-column.md", @@ -41147,7 +41147,7 @@ "x-appwrite": { "method": "updatePointColumn", "group": "columns", - "weight": 382, + "weight": 379, "cookies": false, "type": "", "demo": "tablesdb\/update-point-column.md", @@ -41260,7 +41260,7 @@ "x-appwrite": { "method": "createPolygonColumn", "group": "columns", - "weight": 383, + "weight": 380, "cookies": false, "type": "", "demo": "tablesdb\/create-polygon-column.md", @@ -41366,7 +41366,7 @@ "x-appwrite": { "method": "updatePolygonColumn", "group": "columns", - "weight": 384, + "weight": 381, "cookies": false, "type": "", "demo": "tablesdb\/update-polygon-column.md", @@ -41479,7 +41479,7 @@ "x-appwrite": { "method": "createRelationshipColumn", "group": "columns", - "weight": 385, + "weight": 382, "cookies": false, "type": "", "demo": "tablesdb\/create-relationship-column.md", @@ -41619,7 +41619,7 @@ "x-appwrite": { "method": "createStringColumn", "group": "columns", - "weight": 387, + "weight": 384, "cookies": false, "type": "", "demo": "tablesdb\/create-string-column.md", @@ -41749,7 +41749,7 @@ "x-appwrite": { "method": "updateStringColumn", "group": "columns", - "weight": 388, + "weight": 385, "cookies": false, "type": "", "demo": "tablesdb\/update-string-column.md", @@ -41875,7 +41875,7 @@ "x-appwrite": { "method": "createTextColumn", "group": "columns", - "weight": 393, + "weight": 390, "cookies": false, "type": "", "demo": "tablesdb\/create-text-column.md", @@ -41987,7 +41987,7 @@ "x-appwrite": { "method": "updateTextColumn", "group": "columns", - "weight": 394, + "weight": 391, "cookies": false, "type": "", "demo": "tablesdb\/update-text-column.md", @@ -42101,7 +42101,7 @@ "x-appwrite": { "method": "createUrlColumn", "group": "columns", - "weight": 389, + "weight": 386, "cookies": false, "type": "", "demo": "tablesdb\/create-url-column.md", @@ -42214,7 +42214,7 @@ "x-appwrite": { "method": "updateUrlColumn", "group": "columns", - "weight": 390, + "weight": 387, "cookies": false, "type": "", "demo": "tablesdb\/update-url-column.md", @@ -42329,7 +42329,7 @@ "x-appwrite": { "method": "createVarcharColumn", "group": "columns", - "weight": 391, + "weight": 388, "cookies": false, "type": "", "demo": "tablesdb\/create-varchar-column.md", @@ -42449,7 +42449,7 @@ "x-appwrite": { "method": "updateVarcharColumn", "group": "columns", - "weight": 392, + "weight": 389, "cookies": false, "type": "", "demo": "tablesdb\/update-varchar-column.md", @@ -42600,7 +42600,7 @@ "x-appwrite": { "method": "getColumn", "group": "columns", - "weight": 362, + "weight": 359, "cookies": false, "type": "", "demo": "tablesdb\/get-column.md", @@ -42674,7 +42674,7 @@ "x-appwrite": { "method": "deleteColumn", "group": "columns", - "weight": 363, + "weight": 360, "cookies": false, "type": "", "demo": "tablesdb\/delete-column.md", @@ -42755,7 +42755,7 @@ "x-appwrite": { "method": "updateRelationshipColumn", "group": "columns", - "weight": 386, + "weight": 383, "cookies": false, "type": "", "demo": "tablesdb\/update-relationship-column.md", @@ -42864,7 +42864,7 @@ "x-appwrite": { "method": "listIndexes", "group": "indexes", - "weight": 402, + "weight": 399, "cookies": false, "type": "", "demo": "tablesdb\/list-indexes.md", @@ -42957,7 +42957,7 @@ "x-appwrite": { "method": "createIndex", "group": "indexes", - "weight": 399, + "weight": 396, "cookies": false, "type": "", "demo": "tablesdb\/create-index.md", @@ -43096,7 +43096,7 @@ "x-appwrite": { "method": "getIndex", "group": "indexes", - "weight": 400, + "weight": 397, "cookies": false, "type": "", "demo": "tablesdb\/get-index.md", @@ -43170,7 +43170,7 @@ "x-appwrite": { "method": "deleteIndex", "group": "indexes", - "weight": 401, + "weight": 398, "cookies": false, "type": "", "demo": "tablesdb\/delete-index.md", @@ -43249,7 +43249,7 @@ "x-appwrite": { "method": "listTableLogs", "group": "tables", - "weight": 360, + "weight": 357, "cookies": false, "type": "", "demo": "tablesdb\/list-table-logs.md", @@ -43331,7 +43331,7 @@ "x-appwrite": { "method": "listRows", "group": "rows", - "weight": 411, + "weight": 408, "cookies": false, "type": "", "demo": "tablesdb\/list-rows.md", @@ -43434,7 +43434,7 @@ "x-appwrite": { "method": "createRow", "group": "rows", - "weight": 403, + "weight": 400, "cookies": false, "type": "", "demo": "tablesdb\/create-row.md", @@ -43616,7 +43616,7 @@ "x-appwrite": { "method": "upsertRows", "group": "rows", - "weight": 408, + "weight": 405, "cookies": false, "type": "", "demo": "tablesdb\/upsert-rows.md", @@ -43746,7 +43746,7 @@ "x-appwrite": { "method": "updateRows", "group": "rows", - "weight": 406, + "weight": 403, "cookies": false, "type": "", "demo": "tablesdb\/update-rows.md", @@ -43849,7 +43849,7 @@ "x-appwrite": { "method": "deleteRows", "group": "rows", - "weight": 410, + "weight": 407, "cookies": false, "type": "", "demo": "tablesdb\/delete-rows.md", @@ -43946,7 +43946,7 @@ "x-appwrite": { "method": "getRow", "group": "rows", - "weight": 404, + "weight": 401, "cookies": false, "type": "", "demo": "tablesdb\/get-row.md", @@ -44048,7 +44048,7 @@ "x-appwrite": { "method": "upsertRow", "group": "rows", - "weight": 407, + "weight": 404, "cookies": false, "type": "", "demo": "tablesdb\/upsert-row.md", @@ -44194,7 +44194,7 @@ "x-appwrite": { "method": "updateRow", "group": "rows", - "weight": 405, + "weight": 402, "cookies": false, "type": "", "demo": "tablesdb\/update-row.md", @@ -44303,7 +44303,7 @@ "x-appwrite": { "method": "deleteRow", "group": "rows", - "weight": 409, + "weight": 406, "cookies": false, "type": "", "demo": "tablesdb\/delete-row.md", @@ -44401,7 +44401,7 @@ "x-appwrite": { "method": "listRowLogs", "group": "logs", - "weight": 412, + "weight": 409, "cookies": false, "type": "", "demo": "tablesdb\/list-row-logs.md", @@ -44493,7 +44493,7 @@ "x-appwrite": { "method": "decrementRowColumn", "group": "rows", - "weight": 414, + "weight": 411, "cookies": false, "type": "", "demo": "tablesdb\/decrement-row-column.md", @@ -44615,7 +44615,7 @@ "x-appwrite": { "method": "incrementRowColumn", "group": "rows", - "weight": 413, + "weight": 410, "cookies": false, "type": "", "demo": "tablesdb\/increment-row-column.md", @@ -44735,7 +44735,7 @@ "x-appwrite": { "method": "getTableUsage", "group": null, - "weight": 361, + "weight": 358, "cookies": false, "type": "", "demo": "tablesdb\/get-table-usage.md", @@ -44825,7 +44825,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 353, + "weight": 350, "cookies": false, "type": "", "demo": "tablesdb\/get-usage.md", @@ -46083,7 +46083,7 @@ "x-appwrite": { "method": "list", "group": "files", - "weight": 533, + "weight": 530, "cookies": false, "type": "", "demo": "tokens\/list.md", @@ -46172,7 +46172,7 @@ "x-appwrite": { "method": "createFileToken", "group": "files", - "weight": 531, + "weight": 528, "cookies": false, "type": "", "demo": "tokens\/create-file-token.md", @@ -46256,7 +46256,7 @@ "x-appwrite": { "method": "get", "group": "tokens", - "weight": 532, + "weight": 529, "cookies": false, "type": "", "demo": "tokens\/get.md", @@ -46316,7 +46316,7 @@ "x-appwrite": { "method": "update", "group": "tokens", - "weight": 534, + "weight": 531, "cookies": false, "type": "", "demo": "tokens\/update.md", @@ -46387,7 +46387,7 @@ "x-appwrite": { "method": "delete", "group": "tokens", - "weight": 535, + "weight": 532, "cookies": false, "type": "", "demo": "tokens\/delete.md", @@ -50749,7 +50749,7 @@ "x-appwrite": { "method": "updateExternalDeployments", "group": "repositories", - "weight": 178, + "weight": 175, "cookies": false, "type": "", "demo": "vcs\/update-external-deployments.md", @@ -50834,7 +50834,7 @@ "x-appwrite": { "method": "listInstallations", "group": "installations", - "weight": 175, + "weight": 550, "cookies": false, "type": "", "demo": "vcs\/list-installations.md", @@ -50915,7 +50915,7 @@ "x-appwrite": { "method": "getInstallation", "group": "installations", - "weight": 176, + "weight": 549, "cookies": false, "type": "", "demo": "vcs\/get-installation.md", @@ -50969,7 +50969,7 @@ "x-appwrite": { "method": "deleteInstallation", "group": "installations", - "weight": 177, + "weight": 551, "cookies": false, "type": "", "demo": "vcs\/delete-installation.md", @@ -52726,6 +52726,18 @@ "$ref": "#\/definitions\/index" }, "x-example": {} + }, + "bytesMax": { + "type": "integer", + "description": "Maximum document size in bytes. Returns 0 when no limit applies.", + "x-example": 65535, + "format": "int32" + }, + "bytesUsed": { + "type": "integer", + "description": "Currently used document size in bytes based on defined attributes.", + "x-example": 1500, + "format": "int32" } }, "required": [ @@ -52738,7 +52750,9 @@ "enabled", "documentSecurity", "attributes", - "indexes" + "indexes", + "bytesMax", + "bytesUsed" ], "example": { "$id": "5e5ea5c16897e", @@ -52752,7 +52766,9 @@ "enabled": false, "documentSecurity": true, "attributes": {}, - "indexes": {} + "indexes": {}, + "bytesMax": 65535, + "bytesUsed": 1500 } }, "attributeList": { @@ -54520,6 +54536,18 @@ "$ref": "#\/definitions\/columnIndex" }, "x-example": {} + }, + "bytesMax": { + "type": "integer", + "description": "Maximum row size in bytes. Returns 0 when no limit applies.", + "x-example": 65535, + "format": "int32" + }, + "bytesUsed": { + "type": "integer", + "description": "Currently used row size in bytes based on defined columns.", + "x-example": 1500, + "format": "int32" } }, "required": [ @@ -54532,7 +54560,9 @@ "enabled", "rowSecurity", "columns", - "indexes" + "indexes", + "bytesMax", + "bytesUsed" ], "example": { "$id": "5e5ea5c16897e", @@ -54546,7 +54576,9 @@ "enabled": false, "rowSecurity": true, "columns": {}, - "indexes": {} + "indexes": {}, + "bytesMax": 65535, + "bytesUsed": 1500 } }, "columnList": { diff --git a/app/config/specs/swagger2-1.8.x-server.json b/app/config/specs/swagger2-1.8.x-server.json index 83f6a7ab7e..a932ef5fba 100644 --- a/app/config/specs/swagger2-1.8.x-server.json +++ b/app/config/specs/swagger2-1.8.x-server.json @@ -628,7 +628,7 @@ "x-appwrite": { "method": "updateMFA", "group": "mfa", - "weight": 253, + "weight": 250, "cookies": false, "type": "", "demo": "account\/update-mfa.md", @@ -704,7 +704,7 @@ "x-appwrite": { "method": "createMfaAuthenticator", "group": "mfa", - "weight": 255, + "weight": 252, "cookies": false, "type": "", "demo": "account\/create-mfa-authenticator.md", @@ -831,7 +831,7 @@ "x-appwrite": { "method": "updateMfaAuthenticator", "group": "mfa", - "weight": 256, + "weight": 253, "cookies": false, "type": "", "demo": "account\/update-mfa-authenticator.md", @@ -975,7 +975,7 @@ "x-appwrite": { "method": "deleteMfaAuthenticator", "group": "mfa", - "weight": 257, + "weight": 254, "cookies": false, "type": "", "demo": "account\/delete-mfa-authenticator.md", @@ -1102,7 +1102,7 @@ "x-appwrite": { "method": "createMfaChallenge", "group": "mfa", - "weight": 261, + "weight": 258, "cookies": false, "type": "", "demo": "account\/create-mfa-challenge.md", @@ -1242,7 +1242,7 @@ "x-appwrite": { "method": "updateMfaChallenge", "group": "mfa", - "weight": 262, + "weight": 259, "cookies": false, "type": "", "demo": "account\/update-mfa-challenge.md", @@ -1385,7 +1385,7 @@ "x-appwrite": { "method": "listMfaFactors", "group": "mfa", - "weight": 254, + "weight": 251, "cookies": false, "type": "", "demo": "account\/list-mfa-factors.md", @@ -1489,7 +1489,7 @@ "x-appwrite": { "method": "getMfaRecoveryCodes", "group": "mfa", - "weight": 260, + "weight": 257, "cookies": false, "type": "", "demo": "account\/get-mfa-recovery-codes.md", @@ -1593,7 +1593,7 @@ "x-appwrite": { "method": "createMfaRecoveryCodes", "group": "mfa", - "weight": 258, + "weight": 255, "cookies": false, "type": "", "demo": "account\/create-mfa-recovery-codes.md", @@ -1697,7 +1697,7 @@ "x-appwrite": { "method": "updateMfaRecoveryCodes", "group": "mfa", - "weight": 259, + "weight": 256, "cookies": false, "type": "", "demo": "account\/update-mfa-recovery-codes.md", @@ -3919,7 +3919,7 @@ "x-appwrite": { "method": "getBrowser", "group": null, - "weight": 264, + "weight": 261, "cookies": false, "type": "location", "demo": "avatars\/get-browser.md", @@ -4047,7 +4047,7 @@ "x-appwrite": { "method": "getCreditCard", "group": null, - "weight": 263, + "weight": 260, "cookies": false, "type": "location", "demo": "avatars\/get-credit-card.md", @@ -4181,7 +4181,7 @@ "x-appwrite": { "method": "getFavicon", "group": null, - "weight": 267, + "weight": 264, "cookies": false, "type": "location", "demo": "avatars\/get-favicon.md", @@ -4247,7 +4247,7 @@ "x-appwrite": { "method": "getFlag", "group": null, - "weight": 265, + "weight": 262, "cookies": false, "type": "location", "demo": "avatars\/get-flag.md", @@ -4737,7 +4737,7 @@ "x-appwrite": { "method": "getImage", "group": null, - "weight": 266, + "weight": 263, "cookies": false, "type": "location", "demo": "avatars\/get-image.md", @@ -4823,7 +4823,7 @@ "x-appwrite": { "method": "getInitials", "group": null, - "weight": 269, + "weight": 266, "cookies": false, "type": "location", "demo": "avatars\/get-initials.md", @@ -4917,7 +4917,7 @@ "x-appwrite": { "method": "getQR", "group": null, - "weight": 268, + "weight": 265, "cookies": false, "type": "location", "demo": "avatars\/get-qr.md", @@ -5011,7 +5011,7 @@ "x-appwrite": { "method": "getScreenshot", "group": null, - "weight": 270, + "weight": 267, "cookies": false, "type": "location", "demo": "avatars\/get-screenshot.md", @@ -5726,7 +5726,7 @@ "x-appwrite": { "method": "list", "group": "databases", - "weight": 278, + "weight": 275, "cookies": false, "type": "", "demo": "databases\/list.md", @@ -5844,7 +5844,7 @@ "x-appwrite": { "method": "create", "group": "databases", - "weight": 274, + "weight": 271, "cookies": false, "type": "", "demo": "databases\/create.md", @@ -5966,7 +5966,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 346, + "weight": 343, "cookies": false, "type": "", "demo": "databases\/list-transactions.md", @@ -6035,7 +6035,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 342, + "weight": 339, "cookies": false, "type": "", "demo": "databases\/create-transaction.md", @@ -6108,7 +6108,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 343, + "weight": 340, "cookies": false, "type": "", "demo": "databases\/get-transaction.md", @@ -6173,7 +6173,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 344, + "weight": 341, "cookies": false, "type": "", "demo": "databases\/update-transaction.md", @@ -6254,7 +6254,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 345, + "weight": 342, "cookies": false, "type": "", "demo": "databases\/delete-transaction.md", @@ -6321,7 +6321,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 347, + "weight": 344, "cookies": false, "type": "", "demo": "databases\/create-operations.md", @@ -6404,7 +6404,7 @@ "x-appwrite": { "method": "get", "group": "databases", - "weight": 275, + "weight": 272, "cookies": false, "type": "", "demo": "databases\/get.md", @@ -6500,7 +6500,7 @@ "x-appwrite": { "method": "update", "group": "databases", - "weight": 276, + "weight": 273, "cookies": false, "type": "", "demo": "databases\/update.md", @@ -6614,7 +6614,7 @@ "x-appwrite": { "method": "delete", "group": "databases", - "weight": 277, + "weight": 274, "cookies": false, "type": "", "demo": "databases\/delete.md", @@ -6709,7 +6709,7 @@ "x-appwrite": { "method": "listCollections", "group": "collections", - "weight": 286, + "weight": 283, "cookies": false, "type": "", "demo": "databases\/list-collections.md", @@ -6805,7 +6805,7 @@ "x-appwrite": { "method": "createCollection", "group": "collections", - "weight": 282, + "weight": 279, "cookies": false, "type": "", "demo": "databases\/create-collection.md", @@ -6936,7 +6936,7 @@ "x-appwrite": { "method": "getCollection", "group": "collections", - "weight": 283, + "weight": 280, "cookies": false, "type": "", "demo": "databases\/get-collection.md", @@ -7010,7 +7010,7 @@ "x-appwrite": { "method": "updateCollection", "group": "collections", - "weight": 284, + "weight": 281, "cookies": false, "type": "", "demo": "databases\/update-collection.md", @@ -7116,7 +7116,7 @@ "x-appwrite": { "method": "deleteCollection", "group": "collections", - "weight": 285, + "weight": 282, "cookies": false, "type": "", "demo": "databases\/delete-collection.md", @@ -7190,7 +7190,7 @@ "x-appwrite": { "method": "listAttributes", "group": "attributes", - "weight": 303, + "weight": 300, "cookies": false, "type": "", "demo": "databases\/list-attributes.md", @@ -7287,7 +7287,7 @@ "x-appwrite": { "method": "createBooleanAttribute", "group": "attributes", - "weight": 304, + "weight": 301, "cookies": false, "type": "", "demo": "databases\/create-boolean-attribute.md", @@ -7401,7 +7401,7 @@ "x-appwrite": { "method": "updateBooleanAttribute", "group": "attributes", - "weight": 305, + "weight": 302, "cookies": false, "type": "", "demo": "databases\/update-boolean-attribute.md", @@ -7517,7 +7517,7 @@ "x-appwrite": { "method": "createDatetimeAttribute", "group": "attributes", - "weight": 306, + "weight": 303, "cookies": false, "type": "", "demo": "databases\/create-datetime-attribute.md", @@ -7631,7 +7631,7 @@ "x-appwrite": { "method": "updateDatetimeAttribute", "group": "attributes", - "weight": 307, + "weight": 304, "cookies": false, "type": "", "demo": "databases\/update-datetime-attribute.md", @@ -7747,7 +7747,7 @@ "x-appwrite": { "method": "createEmailAttribute", "group": "attributes", - "weight": 308, + "weight": 305, "cookies": false, "type": "", "demo": "databases\/create-email-attribute.md", @@ -7862,7 +7862,7 @@ "x-appwrite": { "method": "updateEmailAttribute", "group": "attributes", - "weight": 309, + "weight": 306, "cookies": false, "type": "", "demo": "databases\/update-email-attribute.md", @@ -7979,7 +7979,7 @@ "x-appwrite": { "method": "createEnumAttribute", "group": "attributes", - "weight": 310, + "weight": 307, "cookies": false, "type": "", "demo": "databases\/create-enum-attribute.md", @@ -8103,7 +8103,7 @@ "x-appwrite": { "method": "updateEnumAttribute", "group": "attributes", - "weight": 311, + "weight": 308, "cookies": false, "type": "", "demo": "databases\/update-enum-attribute.md", @@ -8229,7 +8229,7 @@ "x-appwrite": { "method": "createFloatAttribute", "group": "attributes", - "weight": 312, + "weight": 309, "cookies": false, "type": "", "demo": "databases\/create-float-attribute.md", @@ -8360,7 +8360,7 @@ "x-appwrite": { "method": "updateFloatAttribute", "group": "attributes", - "weight": 313, + "weight": 310, "cookies": false, "type": "", "demo": "databases\/update-float-attribute.md", @@ -8493,7 +8493,7 @@ "x-appwrite": { "method": "createIntegerAttribute", "group": "attributes", - "weight": 314, + "weight": 311, "cookies": false, "type": "", "demo": "databases\/create-integer-attribute.md", @@ -8624,7 +8624,7 @@ "x-appwrite": { "method": "updateIntegerAttribute", "group": "attributes", - "weight": 315, + "weight": 312, "cookies": false, "type": "", "demo": "databases\/update-integer-attribute.md", @@ -8757,7 +8757,7 @@ "x-appwrite": { "method": "createIpAttribute", "group": "attributes", - "weight": 316, + "weight": 313, "cookies": false, "type": "", "demo": "databases\/create-ip-attribute.md", @@ -8871,7 +8871,7 @@ "x-appwrite": { "method": "updateIpAttribute", "group": "attributes", - "weight": 317, + "weight": 314, "cookies": false, "type": "", "demo": "databases\/update-ip-attribute.md", @@ -8987,7 +8987,7 @@ "x-appwrite": { "method": "createLineAttribute", "group": "attributes", - "weight": 318, + "weight": 315, "cookies": false, "type": "", "demo": "databases\/create-line-attribute.md", @@ -9095,7 +9095,7 @@ "x-appwrite": { "method": "updateLineAttribute", "group": "attributes", - "weight": 319, + "weight": 316, "cookies": false, "type": "", "demo": "databases\/update-line-attribute.md", @@ -9210,7 +9210,7 @@ "x-appwrite": { "method": "createLongtextAttribute", "group": "attributes", - "weight": 336, + "weight": 333, "cookies": false, "type": "", "demo": "databases\/create-longtext-attribute.md", @@ -9320,7 +9320,7 @@ "x-appwrite": { "method": "updateLongtextAttribute", "group": "attributes", - "weight": 337, + "weight": 334, "cookies": false, "type": "", "demo": "databases\/update-longtext-attribute.md", @@ -9432,7 +9432,7 @@ "x-appwrite": { "method": "createMediumtextAttribute", "group": "attributes", - "weight": 334, + "weight": 331, "cookies": false, "type": "", "demo": "databases\/create-mediumtext-attribute.md", @@ -9542,7 +9542,7 @@ "x-appwrite": { "method": "updateMediumtextAttribute", "group": "attributes", - "weight": 335, + "weight": 332, "cookies": false, "type": "", "demo": "databases\/update-mediumtext-attribute.md", @@ -9654,7 +9654,7 @@ "x-appwrite": { "method": "createPointAttribute", "group": "attributes", - "weight": 320, + "weight": 317, "cookies": false, "type": "", "demo": "databases\/create-point-attribute.md", @@ -9762,7 +9762,7 @@ "x-appwrite": { "method": "updatePointAttribute", "group": "attributes", - "weight": 321, + "weight": 318, "cookies": false, "type": "", "demo": "databases\/update-point-attribute.md", @@ -9877,7 +9877,7 @@ "x-appwrite": { "method": "createPolygonAttribute", "group": "attributes", - "weight": 322, + "weight": 319, "cookies": false, "type": "", "demo": "databases\/create-polygon-attribute.md", @@ -9985,7 +9985,7 @@ "x-appwrite": { "method": "updatePolygonAttribute", "group": "attributes", - "weight": 323, + "weight": 320, "cookies": false, "type": "", "demo": "databases\/update-polygon-attribute.md", @@ -10100,7 +10100,7 @@ "x-appwrite": { "method": "createRelationshipAttribute", "group": "attributes", - "weight": 324, + "weight": 321, "cookies": false, "type": "", "demo": "databases\/create-relationship-attribute.md", @@ -10242,7 +10242,7 @@ "x-appwrite": { "method": "createStringAttribute", "group": "attributes", - "weight": 326, + "weight": 323, "cookies": false, "type": "", "demo": "databases\/create-string-attribute.md", @@ -10370,7 +10370,7 @@ "x-appwrite": { "method": "updateStringAttribute", "group": "attributes", - "weight": 327, + "weight": 324, "cookies": false, "type": "", "demo": "databases\/update-string-attribute.md", @@ -10494,7 +10494,7 @@ "x-appwrite": { "method": "createTextAttribute", "group": "attributes", - "weight": 332, + "weight": 329, "cookies": false, "type": "", "demo": "databases\/create-text-attribute.md", @@ -10604,7 +10604,7 @@ "x-appwrite": { "method": "updateTextAttribute", "group": "attributes", - "weight": 333, + "weight": 330, "cookies": false, "type": "", "demo": "databases\/update-text-attribute.md", @@ -10716,7 +10716,7 @@ "x-appwrite": { "method": "createUrlAttribute", "group": "attributes", - "weight": 328, + "weight": 325, "cookies": false, "type": "", "demo": "databases\/create-url-attribute.md", @@ -10831,7 +10831,7 @@ "x-appwrite": { "method": "updateUrlAttribute", "group": "attributes", - "weight": 329, + "weight": 326, "cookies": false, "type": "", "demo": "databases\/update-url-attribute.md", @@ -10948,7 +10948,7 @@ "x-appwrite": { "method": "createVarcharAttribute", "group": "attributes", - "weight": 330, + "weight": 327, "cookies": false, "type": "", "demo": "databases\/create-varchar-attribute.md", @@ -11066,7 +11066,7 @@ "x-appwrite": { "method": "updateVarcharAttribute", "group": "attributes", - "weight": 331, + "weight": 328, "cookies": false, "type": "", "demo": "databases\/update-varchar-attribute.md", @@ -11215,7 +11215,7 @@ "x-appwrite": { "method": "getAttribute", "group": "attributes", - "weight": 301, + "weight": 298, "cookies": false, "type": "", "demo": "databases\/get-attribute.md", @@ -11291,7 +11291,7 @@ "x-appwrite": { "method": "deleteAttribute", "group": "attributes", - "weight": 302, + "weight": 299, "cookies": false, "type": "", "demo": "databases\/delete-attribute.md", @@ -11374,7 +11374,7 @@ "x-appwrite": { "method": "updateRelationshipAttribute", "group": "attributes", - "weight": 325, + "weight": 322, "cookies": false, "type": "", "demo": "databases\/update-relationship-attribute.md", @@ -11485,7 +11485,7 @@ "x-appwrite": { "method": "listDocuments", "group": "documents", - "weight": 297, + "weight": 294, "cookies": false, "type": "", "demo": "databases\/list-documents.md", @@ -11591,7 +11591,7 @@ "x-appwrite": { "method": "createDocument", "group": "documents", - "weight": 289, + "weight": 286, "cookies": false, "type": "", "demo": "databases\/create-document.md", @@ -11786,7 +11786,7 @@ "x-appwrite": { "method": "upsertDocuments", "group": "documents", - "weight": 294, + "weight": 291, "cookies": false, "type": "", "demo": "databases\/upsert-documents.md", @@ -11923,7 +11923,7 @@ "x-appwrite": { "method": "updateDocuments", "group": "documents", - "weight": 292, + "weight": 289, "cookies": false, "type": "", "demo": "databases\/update-documents.md", @@ -12028,7 +12028,7 @@ "x-appwrite": { "method": "deleteDocuments", "group": "documents", - "weight": 296, + "weight": 293, "cookies": false, "type": "", "demo": "databases\/delete-documents.md", @@ -12127,7 +12127,7 @@ "x-appwrite": { "method": "getDocument", "group": "documents", - "weight": 290, + "weight": 287, "cookies": false, "type": "", "demo": "databases\/get-document.md", @@ -12232,7 +12232,7 @@ "x-appwrite": { "method": "upsertDocument", "group": "documents", - "weight": 293, + "weight": 290, "cookies": false, "type": "", "demo": "databases\/upsert-document.md", @@ -12386,7 +12386,7 @@ "x-appwrite": { "method": "updateDocument", "group": "documents", - "weight": 291, + "weight": 288, "cookies": false, "type": "", "demo": "databases\/update-document.md", @@ -12498,7 +12498,7 @@ "x-appwrite": { "method": "deleteDocument", "group": "documents", - "weight": 295, + "weight": 292, "cookies": false, "type": "", "demo": "databases\/delete-document.md", @@ -12601,7 +12601,7 @@ "x-appwrite": { "method": "decrementDocumentAttribute", "group": "documents", - "weight": 300, + "weight": 297, "cookies": false, "type": "", "demo": "databases\/decrement-document-attribute.md", @@ -12726,7 +12726,7 @@ "x-appwrite": { "method": "incrementDocumentAttribute", "group": "documents", - "weight": 299, + "weight": 296, "cookies": false, "type": "", "demo": "databases\/increment-document-attribute.md", @@ -12849,7 +12849,7 @@ "x-appwrite": { "method": "listIndexes", "group": "indexes", - "weight": 341, + "weight": 338, "cookies": false, "type": "", "demo": "databases\/list-indexes.md", @@ -12944,7 +12944,7 @@ "x-appwrite": { "method": "createIndex", "group": "indexes", - "weight": 338, + "weight": 335, "cookies": false, "type": "", "demo": "databases\/create-index.md", @@ -13085,7 +13085,7 @@ "x-appwrite": { "method": "getIndex", "group": "indexes", - "weight": 339, + "weight": 336, "cookies": false, "type": "", "demo": "databases\/get-index.md", @@ -13161,7 +13161,7 @@ "x-appwrite": { "method": "deleteIndex", "group": "indexes", - "weight": 340, + "weight": 337, "cookies": false, "type": "", "demo": "databases\/delete-index.md", @@ -13242,7 +13242,7 @@ "x-appwrite": { "method": "list", "group": "functions", - "weight": 431, + "weight": 428, "cookies": false, "type": "", "demo": "functions\/list.md", @@ -13325,7 +13325,7 @@ "x-appwrite": { "method": "create", "group": "functions", - "weight": 428, + "weight": 425, "cookies": false, "type": "", "demo": "functions\/create.md", @@ -13640,7 +13640,7 @@ "x-appwrite": { "method": "listRuntimes", "group": "runtimes", - "weight": 433, + "weight": 430, "cookies": false, "type": "", "demo": "functions\/list-runtimes.md", @@ -13691,7 +13691,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "runtimes", - "weight": 434, + "weight": 431, "cookies": false, "type": "", "demo": "functions\/list-specifications.md", @@ -13742,7 +13742,7 @@ "x-appwrite": { "method": "get", "group": "functions", - "weight": 429, + "weight": 426, "cookies": false, "type": "", "demo": "functions\/get.md", @@ -13803,7 +13803,7 @@ "x-appwrite": { "method": "update", "group": "functions", - "weight": 430, + "weight": 427, "cookies": false, "type": "", "demo": "functions\/update.md", @@ -14114,7 +14114,7 @@ "x-appwrite": { "method": "delete", "group": "functions", - "weight": 432, + "weight": 429, "cookies": false, "type": "", "demo": "functions\/delete.md", @@ -14177,7 +14177,7 @@ "x-appwrite": { "method": "updateFunctionDeployment", "group": "functions", - "weight": 437, + "weight": 434, "cookies": false, "type": "", "demo": "functions\/update-function-deployment.md", @@ -14256,7 +14256,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 438, + "weight": 435, "cookies": false, "type": "", "demo": "functions\/list-deployments.md", @@ -14347,7 +14347,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 435, + "weight": 432, "cookies": false, "type": "upload", "demo": "functions\/create-deployment.md", @@ -14441,7 +14441,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 443, + "weight": 440, "cookies": false, "type": "", "demo": "functions\/create-duplicate-deployment.md", @@ -14528,7 +14528,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 440, + "weight": 437, "cookies": false, "type": "", "demo": "functions\/create-template-deployment.md", @@ -14650,7 +14650,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 441, + "weight": 438, "cookies": false, "type": "", "demo": "functions\/create-vcs-deployment.md", @@ -14748,7 +14748,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 436, + "weight": 433, "cookies": false, "type": "", "demo": "functions\/get-deployment.md", @@ -14812,7 +14812,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 439, + "weight": 436, "cookies": false, "type": "", "demo": "functions\/delete-deployment.md", @@ -14881,7 +14881,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 442, + "weight": 439, "cookies": false, "type": "location", "demo": "functions\/get-deployment-download.md", @@ -14968,7 +14968,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 444, + "weight": 441, "cookies": false, "type": "", "demo": "functions\/update-deployment-status.md", @@ -15037,7 +15037,7 @@ "x-appwrite": { "method": "listExecutions", "group": "executions", - "weight": 447, + "weight": 444, "cookies": false, "type": "", "demo": "functions\/list-executions.md", @@ -15122,7 +15122,7 @@ "x-appwrite": { "method": "createExecution", "group": "executions", - "weight": 445, + "weight": 442, "cookies": false, "type": "", "demo": "functions\/create-execution.md", @@ -15243,7 +15243,7 @@ "x-appwrite": { "method": "getExecution", "group": "executions", - "weight": 446, + "weight": 443, "cookies": false, "type": "", "demo": "functions\/get-execution.md", @@ -15310,7 +15310,7 @@ "x-appwrite": { "method": "deleteExecution", "group": "executions", - "weight": 448, + "weight": 445, "cookies": false, "type": "", "demo": "functions\/delete-execution.md", @@ -15379,7 +15379,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 453, + "weight": 450, "cookies": false, "type": "", "demo": "functions\/list-variables.md", @@ -15440,7 +15440,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 451, + "weight": 448, "cookies": false, "type": "", "demo": "functions\/create-variable.md", @@ -15532,7 +15532,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 452, + "weight": 449, "cookies": false, "type": "", "demo": "functions\/get-variable.md", @@ -15601,7 +15601,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 454, + "weight": 451, "cookies": false, "type": "", "demo": "functions\/update-variable.md", @@ -15697,7 +15697,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 455, + "weight": 452, "cookies": false, "type": "", "demo": "functions\/delete-variable.md", @@ -15768,7 +15768,7 @@ "x-appwrite": { "method": "query", "group": "graphql", - "weight": 190, + "weight": 187, "cookies": false, "type": "graphql", "demo": "graphql\/query.md", @@ -15845,7 +15845,7 @@ "x-appwrite": { "method": "mutation", "group": "graphql", - "weight": 189, + "weight": 186, "cookies": false, "type": "graphql", "demo": "graphql\/mutation.md", @@ -15920,7 +15920,7 @@ "x-appwrite": { "method": "get", "group": "health", - "weight": 458, + "weight": 455, "cookies": false, "type": "", "demo": "health\/get.md", @@ -15972,7 +15972,7 @@ "x-appwrite": { "method": "getAntivirus", "group": "health", - "weight": 467, + "weight": 464, "cookies": false, "type": "", "demo": "health\/get-antivirus.md", @@ -16024,7 +16024,7 @@ "x-appwrite": { "method": "getCache", "group": "health", - "weight": 461, + "weight": 458, "cookies": false, "type": "", "demo": "health\/get-cache.md", @@ -16076,7 +16076,7 @@ "x-appwrite": { "method": "getCertificate", "group": "health", - "weight": 464, + "weight": 461, "cookies": false, "type": "", "demo": "health\/get-certificate.md", @@ -16137,7 +16137,7 @@ "x-appwrite": { "method": "getDB", "group": "health", - "weight": 460, + "weight": 457, "cookies": false, "type": "", "demo": "health\/get-db.md", @@ -16189,7 +16189,7 @@ "x-appwrite": { "method": "getPubSub", "group": "health", - "weight": 462, + "weight": 459, "cookies": false, "type": "", "demo": "health\/get-pub-sub.md", @@ -16241,7 +16241,7 @@ "x-appwrite": { "method": "getQueueAudits", "group": "queue", - "weight": 468, + "weight": 465, "cookies": false, "type": "", "demo": "health\/get-queue-audits.md", @@ -16304,7 +16304,7 @@ "x-appwrite": { "method": "getQueueBuilds", "group": "queue", - "weight": 472, + "weight": 469, "cookies": false, "type": "", "demo": "health\/get-queue-builds.md", @@ -16367,7 +16367,7 @@ "x-appwrite": { "method": "getQueueCertificates", "group": "queue", - "weight": 471, + "weight": 468, "cookies": false, "type": "", "demo": "health\/get-queue-certificates.md", @@ -16430,7 +16430,7 @@ "x-appwrite": { "method": "getQueueDatabases", "group": "queue", - "weight": 473, + "weight": 470, "cookies": false, "type": "", "demo": "health\/get-queue-databases.md", @@ -16502,7 +16502,7 @@ "x-appwrite": { "method": "getQueueDeletes", "group": "queue", - "weight": 474, + "weight": 471, "cookies": false, "type": "", "demo": "health\/get-queue-deletes.md", @@ -16565,7 +16565,7 @@ "x-appwrite": { "method": "getFailedJobs", "group": "queue", - "weight": 481, + "weight": 478, "cookies": false, "type": "", "demo": "health\/get-failed-jobs.md", @@ -16653,7 +16653,7 @@ "x-appwrite": { "method": "getQueueFunctions", "group": "queue", - "weight": 478, + "weight": 475, "cookies": false, "type": "", "demo": "health\/get-queue-functions.md", @@ -16716,7 +16716,7 @@ "x-appwrite": { "method": "getQueueLogs", "group": "queue", - "weight": 470, + "weight": 467, "cookies": false, "type": "", "demo": "health\/get-queue-logs.md", @@ -16779,7 +16779,7 @@ "x-appwrite": { "method": "getQueueMails", "group": "queue", - "weight": 475, + "weight": 472, "cookies": false, "type": "", "demo": "health\/get-queue-mails.md", @@ -16842,7 +16842,7 @@ "x-appwrite": { "method": "getQueueMessaging", "group": "queue", - "weight": 476, + "weight": 473, "cookies": false, "type": "", "demo": "health\/get-queue-messaging.md", @@ -16905,7 +16905,7 @@ "x-appwrite": { "method": "getQueueMigrations", "group": "queue", - "weight": 477, + "weight": 474, "cookies": false, "type": "", "demo": "health\/get-queue-migrations.md", @@ -16968,7 +16968,7 @@ "x-appwrite": { "method": "getQueueStatsResources", "group": "queue", - "weight": 479, + "weight": 476, "cookies": false, "type": "", "demo": "health\/get-queue-stats-resources.md", @@ -17031,7 +17031,7 @@ "x-appwrite": { "method": "getQueueUsage", "group": "queue", - "weight": 480, + "weight": 477, "cookies": false, "type": "", "demo": "health\/get-queue-usage.md", @@ -17094,7 +17094,7 @@ "x-appwrite": { "method": "getQueueWebhooks", "group": "queue", - "weight": 469, + "weight": 466, "cookies": false, "type": "", "demo": "health\/get-queue-webhooks.md", @@ -17157,7 +17157,7 @@ "x-appwrite": { "method": "getStorage", "group": "storage", - "weight": 466, + "weight": 463, "cookies": false, "type": "", "demo": "health\/get-storage.md", @@ -17209,7 +17209,7 @@ "x-appwrite": { "method": "getStorageLocal", "group": "storage", - "weight": 465, + "weight": 462, "cookies": false, "type": "", "demo": "health\/get-storage-local.md", @@ -17261,7 +17261,7 @@ "x-appwrite": { "method": "getTime", "group": "health", - "weight": 463, + "weight": 460, "cookies": false, "type": "", "demo": "health\/get-time.md", @@ -17753,7 +17753,7 @@ "x-appwrite": { "method": "listMessages", "group": "messages", - "weight": 245, + "weight": 242, "cookies": false, "type": "", "demo": "messaging\/list-messages.md", @@ -17839,7 +17839,7 @@ "x-appwrite": { "method": "createEmail", "group": "messages", - "weight": 242, + "weight": 239, "cookies": false, "type": "", "demo": "messaging\/create-email.md", @@ -18000,7 +18000,7 @@ "x-appwrite": { "method": "updateEmail", "group": "messages", - "weight": 249, + "weight": 246, "cookies": false, "type": "", "demo": "messaging\/update-email.md", @@ -18168,7 +18168,7 @@ "x-appwrite": { "method": "createPush", "group": "messages", - "weight": 244, + "weight": 241, "cookies": false, "type": "", "demo": "messaging\/create-push.md", @@ -18368,7 +18368,7 @@ "x-appwrite": { "method": "updatePush", "group": "messages", - "weight": 251, + "weight": 248, "cookies": false, "type": "", "demo": "messaging\/update-push.md", @@ -18583,7 +18583,7 @@ "x-appwrite": { "method": "createSms", "group": "messages", - "weight": 243, + "weight": 240, "cookies": false, "type": "", "demo": "messaging\/create-sms.md", @@ -18776,7 +18776,7 @@ "x-appwrite": { "method": "updateSms", "group": "messages", - "weight": 250, + "weight": 247, "cookies": false, "type": "", "demo": "messaging\/update-sms.md", @@ -18968,7 +18968,7 @@ "x-appwrite": { "method": "getMessage", "group": "messages", - "weight": 248, + "weight": 245, "cookies": false, "type": "", "demo": "messaging\/get-message.md", @@ -19025,7 +19025,7 @@ "x-appwrite": { "method": "delete", "group": "messages", - "weight": 252, + "weight": 249, "cookies": false, "type": "", "demo": "messaging\/delete.md", @@ -19087,7 +19087,7 @@ "x-appwrite": { "method": "listMessageLogs", "group": "logs", - "weight": 246, + "weight": 243, "cookies": false, "type": "", "demo": "messaging\/list-message-logs.md", @@ -19170,7 +19170,7 @@ "x-appwrite": { "method": "listTargets", "group": "messages", - "weight": 247, + "weight": 244, "cookies": false, "type": "", "demo": "messaging\/list-targets.md", @@ -19253,7 +19253,7 @@ "x-appwrite": { "method": "listProviders", "group": "providers", - "weight": 216, + "weight": 213, "cookies": false, "type": "", "demo": "messaging\/list-providers.md", @@ -19339,7 +19339,7 @@ "x-appwrite": { "method": "createApnsProvider", "group": "providers", - "weight": 215, + "weight": 212, "cookies": false, "type": "", "demo": "messaging\/create-apns-provider.md", @@ -19531,7 +19531,7 @@ "x-appwrite": { "method": "updateApnsProvider", "group": "providers", - "weight": 229, + "weight": 226, "cookies": false, "type": "", "demo": "messaging\/update-apns-provider.md", @@ -19720,7 +19720,7 @@ "x-appwrite": { "method": "createFcmProvider", "group": "providers", - "weight": 214, + "weight": 211, "cookies": false, "type": "", "demo": "messaging\/create-fcm-provider.md", @@ -19881,7 +19881,7 @@ "x-appwrite": { "method": "updateFcmProvider", "group": "providers", - "weight": 228, + "weight": 225, "cookies": false, "type": "", "demo": "messaging\/update-fcm-provider.md", @@ -20038,7 +20038,7 @@ "x-appwrite": { "method": "createMailgunProvider", "group": "providers", - "weight": 205, + "weight": 202, "cookies": false, "type": "", "demo": "messaging\/create-mailgun-provider.md", @@ -20171,7 +20171,7 @@ "x-appwrite": { "method": "updateMailgunProvider", "group": "providers", - "weight": 219, + "weight": 216, "cookies": false, "type": "", "demo": "messaging\/update-mailgun-provider.md", @@ -20301,7 +20301,7 @@ "x-appwrite": { "method": "createMsg91Provider", "group": "providers", - "weight": 209, + "weight": 206, "cookies": false, "type": "", "demo": "messaging\/create-msg-91-provider.md", @@ -20407,7 +20407,7 @@ "x-appwrite": { "method": "updateMsg91Provider", "group": "providers", - "weight": 223, + "weight": 220, "cookies": false, "type": "", "demo": "messaging\/update-msg-91-provider.md", @@ -20511,7 +20511,7 @@ "x-appwrite": { "method": "createResendProvider", "group": "providers", - "weight": 207, + "weight": 204, "cookies": false, "type": "", "demo": "messaging\/create-resend-provider.md", @@ -20631,7 +20631,7 @@ "x-appwrite": { "method": "updateResendProvider", "group": "providers", - "weight": 221, + "weight": 218, "cookies": false, "type": "", "demo": "messaging\/update-resend-provider.md", @@ -20748,7 +20748,7 @@ "x-appwrite": { "method": "createSendgridProvider", "group": "providers", - "weight": 206, + "weight": 203, "cookies": false, "type": "", "demo": "messaging\/create-sendgrid-provider.md", @@ -20868,7 +20868,7 @@ "x-appwrite": { "method": "updateSendgridProvider", "group": "providers", - "weight": 220, + "weight": 217, "cookies": false, "type": "", "demo": "messaging\/update-sendgrid-provider.md", @@ -20985,7 +20985,7 @@ "x-appwrite": { "method": "createSmtpProvider", "group": "providers", - "weight": 208, + "weight": 205, "cookies": false, "type": "", "demo": "messaging\/create-smtp-provider.md", @@ -21238,7 +21238,7 @@ "x-appwrite": { "method": "updateSmtpProvider", "group": "providers", - "weight": 222, + "weight": 219, "cookies": false, "type": "", "demo": "messaging\/update-smtp-provider.md", @@ -21485,7 +21485,7 @@ "x-appwrite": { "method": "createTelesignProvider", "group": "providers", - "weight": 210, + "weight": 207, "cookies": false, "type": "", "demo": "messaging\/create-telesign-provider.md", @@ -21592,7 +21592,7 @@ "x-appwrite": { "method": "updateTelesignProvider", "group": "providers", - "weight": 224, + "weight": 221, "cookies": false, "type": "", "demo": "messaging\/update-telesign-provider.md", @@ -21696,7 +21696,7 @@ "x-appwrite": { "method": "createTextmagicProvider", "group": "providers", - "weight": 211, + "weight": 208, "cookies": false, "type": "", "demo": "messaging\/create-textmagic-provider.md", @@ -21803,7 +21803,7 @@ "x-appwrite": { "method": "updateTextmagicProvider", "group": "providers", - "weight": 225, + "weight": 222, "cookies": false, "type": "", "demo": "messaging\/update-textmagic-provider.md", @@ -21907,7 +21907,7 @@ "x-appwrite": { "method": "createTwilioProvider", "group": "providers", - "weight": 212, + "weight": 209, "cookies": false, "type": "", "demo": "messaging\/create-twilio-provider.md", @@ -22014,7 +22014,7 @@ "x-appwrite": { "method": "updateTwilioProvider", "group": "providers", - "weight": 226, + "weight": 223, "cookies": false, "type": "", "demo": "messaging\/update-twilio-provider.md", @@ -22118,7 +22118,7 @@ "x-appwrite": { "method": "createVonageProvider", "group": "providers", - "weight": 213, + "weight": 210, "cookies": false, "type": "", "demo": "messaging\/create-vonage-provider.md", @@ -22225,7 +22225,7 @@ "x-appwrite": { "method": "updateVonageProvider", "group": "providers", - "weight": 227, + "weight": 224, "cookies": false, "type": "", "demo": "messaging\/update-vonage-provider.md", @@ -22327,7 +22327,7 @@ "x-appwrite": { "method": "getProvider", "group": "providers", - "weight": 218, + "weight": 215, "cookies": false, "type": "", "demo": "messaging\/get-provider.md", @@ -22384,7 +22384,7 @@ "x-appwrite": { "method": "deleteProvider", "group": "providers", - "weight": 230, + "weight": 227, "cookies": false, "type": "", "demo": "messaging\/delete-provider.md", @@ -22446,7 +22446,7 @@ "x-appwrite": { "method": "listProviderLogs", "group": "providers", - "weight": 217, + "weight": 214, "cookies": false, "type": "", "demo": "messaging\/list-provider-logs.md", @@ -22529,7 +22529,7 @@ "x-appwrite": { "method": "listSubscriberLogs", "group": "subscribers", - "weight": 239, + "weight": 236, "cookies": false, "type": "", "demo": "messaging\/list-subscriber-logs.md", @@ -22612,7 +22612,7 @@ "x-appwrite": { "method": "listTopics", "group": "topics", - "weight": 232, + "weight": 229, "cookies": false, "type": "", "demo": "messaging\/list-topics.md", @@ -22696,7 +22696,7 @@ "x-appwrite": { "method": "createTopic", "group": "topics", - "weight": 231, + "weight": 228, "cookies": false, "type": "", "demo": "messaging\/create-topic.md", @@ -22786,7 +22786,7 @@ "x-appwrite": { "method": "getTopic", "group": "topics", - "weight": 234, + "weight": 231, "cookies": false, "type": "", "demo": "messaging\/get-topic.md", @@ -22848,7 +22848,7 @@ "x-appwrite": { "method": "updateTopic", "group": "topics", - "weight": 235, + "weight": 232, "cookies": false, "type": "", "demo": "messaging\/update-topic.md", @@ -22931,7 +22931,7 @@ "x-appwrite": { "method": "deleteTopic", "group": "topics", - "weight": 236, + "weight": 233, "cookies": false, "type": "", "demo": "messaging\/delete-topic.md", @@ -22993,7 +22993,7 @@ "x-appwrite": { "method": "listTopicLogs", "group": "topics", - "weight": 233, + "weight": 230, "cookies": false, "type": "", "demo": "messaging\/list-topic-logs.md", @@ -23076,7 +23076,7 @@ "x-appwrite": { "method": "listSubscribers", "group": "subscribers", - "weight": 238, + "weight": 235, "cookies": false, "type": "", "demo": "messaging\/list-subscribers.md", @@ -23168,7 +23168,7 @@ "x-appwrite": { "method": "createSubscriber", "group": "subscribers", - "weight": 237, + "weight": 234, "cookies": false, "type": "", "demo": "messaging\/create-subscriber.md", @@ -23258,7 +23258,7 @@ "x-appwrite": { "method": "getSubscriber", "group": "subscribers", - "weight": 240, + "weight": 237, "cookies": false, "type": "", "demo": "messaging\/get-subscriber.md", @@ -23323,7 +23323,7 @@ "x-appwrite": { "method": "deleteSubscriber", "group": "subscribers", - "weight": 241, + "weight": 238, "cookies": false, "type": "", "demo": "messaging\/delete-subscriber.md", @@ -23396,7 +23396,7 @@ "x-appwrite": { "method": "list", "group": "sites", - "weight": 485, + "weight": 482, "cookies": false, "type": "", "demo": "sites\/list.md", @@ -23479,7 +23479,7 @@ "x-appwrite": { "method": "create", "group": "sites", - "weight": 483, + "weight": 480, "cookies": false, "type": "", "demo": "sites\/create.md", @@ -23752,7 +23752,7 @@ "x-appwrite": { "method": "listFrameworks", "group": "frameworks", - "weight": 488, + "weight": 485, "cookies": false, "type": "", "demo": "sites\/list-frameworks.md", @@ -23803,7 +23803,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "frameworks", - "weight": 511, + "weight": 508, "cookies": false, "type": "", "demo": "sites\/list-specifications.md", @@ -23854,7 +23854,7 @@ "x-appwrite": { "method": "get", "group": "sites", - "weight": 484, + "weight": 481, "cookies": false, "type": "", "demo": "sites\/get.md", @@ -23915,7 +23915,7 @@ "x-appwrite": { "method": "update", "group": "sites", - "weight": 486, + "weight": 483, "cookies": false, "type": "", "demo": "sites\/update.md", @@ -24183,7 +24183,7 @@ "x-appwrite": { "method": "delete", "group": "sites", - "weight": 487, + "weight": 484, "cookies": false, "type": "", "demo": "sites\/delete.md", @@ -24246,7 +24246,7 @@ "x-appwrite": { "method": "updateSiteDeployment", "group": "sites", - "weight": 494, + "weight": 491, "cookies": false, "type": "", "demo": "sites\/update-site-deployment.md", @@ -24325,7 +24325,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 493, + "weight": 490, "cookies": false, "type": "", "demo": "sites\/list-deployments.md", @@ -24416,7 +24416,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 489, + "weight": 486, "cookies": false, "type": "upload", "demo": "sites\/create-deployment.md", @@ -24518,7 +24518,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 497, + "weight": 494, "cookies": false, "type": "", "demo": "sites\/create-duplicate-deployment.md", @@ -24599,7 +24599,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 490, + "weight": 487, "cookies": false, "type": "", "demo": "sites\/create-template-deployment.md", @@ -24721,7 +24721,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 491, + "weight": 488, "cookies": false, "type": "", "demo": "sites\/create-vcs-deployment.md", @@ -24820,7 +24820,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 492, + "weight": 489, "cookies": false, "type": "", "demo": "sites\/get-deployment.md", @@ -24884,7 +24884,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 495, + "weight": 492, "cookies": false, "type": "", "demo": "sites\/delete-deployment.md", @@ -24953,7 +24953,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 496, + "weight": 493, "cookies": false, "type": "location", "demo": "sites\/get-deployment-download.md", @@ -25040,7 +25040,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 498, + "weight": 495, "cookies": false, "type": "", "demo": "sites\/update-deployment-status.md", @@ -25109,7 +25109,7 @@ "x-appwrite": { "method": "listLogs", "group": "logs", - "weight": 500, + "weight": 497, "cookies": false, "type": "", "demo": "sites\/list-logs.md", @@ -25191,7 +25191,7 @@ "x-appwrite": { "method": "getLog", "group": "logs", - "weight": 499, + "weight": 496, "cookies": false, "type": "", "demo": "sites\/get-log.md", @@ -25257,7 +25257,7 @@ "x-appwrite": { "method": "deleteLog", "group": "logs", - "weight": 501, + "weight": 498, "cookies": false, "type": "", "demo": "sites\/delete-log.md", @@ -25326,7 +25326,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 504, + "weight": 501, "cookies": false, "type": "", "demo": "sites\/list-variables.md", @@ -25387,7 +25387,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 502, + "weight": 499, "cookies": false, "type": "", "demo": "sites\/create-variable.md", @@ -25479,7 +25479,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 503, + "weight": 500, "cookies": false, "type": "", "demo": "sites\/get-variable.md", @@ -25548,7 +25548,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 505, + "weight": 502, "cookies": false, "type": "", "demo": "sites\/update-variable.md", @@ -25644,7 +25644,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 506, + "weight": 503, "cookies": false, "type": "", "demo": "sites\/delete-variable.md", @@ -25713,7 +25713,7 @@ "x-appwrite": { "method": "listBuckets", "group": "buckets", - "weight": 538, + "weight": 535, "cookies": false, "type": "", "demo": "storage\/list-buckets.md", @@ -25797,7 +25797,7 @@ "x-appwrite": { "method": "createBucket", "group": "buckets", - "weight": 536, + "weight": 533, "cookies": false, "type": "", "demo": "storage\/create-bucket.md", @@ -25945,7 +25945,7 @@ "x-appwrite": { "method": "getBucket", "group": "buckets", - "weight": 537, + "weight": 534, "cookies": false, "type": "", "demo": "storage\/get-bucket.md", @@ -26007,7 +26007,7 @@ "x-appwrite": { "method": "updateBucket", "group": "buckets", - "weight": 539, + "weight": 536, "cookies": false, "type": "", "demo": "storage\/update-bucket.md", @@ -26151,7 +26151,7 @@ "x-appwrite": { "method": "deleteBucket", "group": "buckets", - "weight": 540, + "weight": 537, "cookies": false, "type": "", "demo": "storage\/delete-bucket.md", @@ -26213,7 +26213,7 @@ "x-appwrite": { "method": "listFiles", "group": "files", - "weight": 543, + "weight": 540, "cookies": false, "type": "", "demo": "storage\/list-files.md", @@ -26308,7 +26308,7 @@ "x-appwrite": { "method": "createFile", "group": "files", - "weight": 541, + "weight": 538, "cookies": false, "type": "upload", "demo": "storage\/create-file.md", @@ -26401,7 +26401,7 @@ "x-appwrite": { "method": "getFile", "group": "files", - "weight": 542, + "weight": 539, "cookies": false, "type": "", "demo": "storage\/get-file.md", @@ -26474,7 +26474,7 @@ "x-appwrite": { "method": "updateFile", "group": "files", - "weight": 544, + "weight": 541, "cookies": false, "type": "", "demo": "storage\/update-file.md", @@ -26567,7 +26567,7 @@ "x-appwrite": { "method": "deleteFile", "group": "files", - "weight": 545, + "weight": 542, "cookies": false, "type": "", "demo": "storage\/delete-file.md", @@ -26640,7 +26640,7 @@ "x-appwrite": { "method": "getFileDownload", "group": "files", - "weight": 547, + "weight": 544, "cookies": false, "type": "location", "demo": "storage\/get-file-download.md", @@ -26722,7 +26722,7 @@ "x-appwrite": { "method": "getFilePreview", "group": "files", - "weight": 546, + "weight": 543, "cookies": false, "type": "location", "demo": "storage\/get-file-preview.md", @@ -26932,7 +26932,7 @@ "x-appwrite": { "method": "getFileView", "group": "files", - "weight": 548, + "weight": 545, "cookies": false, "type": "location", "demo": "storage\/get-file-view.md", @@ -27014,7 +27014,7 @@ "x-appwrite": { "method": "list", "group": "tablesdb", - "weight": 352, + "weight": 349, "cookies": false, "type": "", "demo": "tablesdb\/list.md", @@ -27098,7 +27098,7 @@ "x-appwrite": { "method": "create", "group": "tablesdb", - "weight": 348, + "weight": 345, "cookies": false, "type": "", "demo": "tablesdb\/create.md", @@ -27183,7 +27183,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 419, + "weight": 416, "cookies": false, "type": "", "demo": "tablesdb\/list-transactions.md", @@ -27255,7 +27255,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 415, + "weight": 412, "cookies": false, "type": "", "demo": "tablesdb\/create-transaction.md", @@ -27331,7 +27331,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 416, + "weight": 413, "cookies": false, "type": "", "demo": "tablesdb\/get-transaction.md", @@ -27399,7 +27399,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 417, + "weight": 414, "cookies": false, "type": "", "demo": "tablesdb\/update-transaction.md", @@ -27483,7 +27483,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 418, + "weight": 415, "cookies": false, "type": "", "demo": "tablesdb\/delete-transaction.md", @@ -27553,7 +27553,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 420, + "weight": 417, "cookies": false, "type": "", "demo": "tablesdb\/create-operations.md", @@ -27639,7 +27639,7 @@ "x-appwrite": { "method": "get", "group": "tablesdb", - "weight": 349, + "weight": 346, "cookies": false, "type": "", "demo": "tablesdb\/get.md", @@ -27701,7 +27701,7 @@ "x-appwrite": { "method": "update", "group": "tablesdb", - "weight": 350, + "weight": 347, "cookies": false, "type": "", "demo": "tablesdb\/update.md", @@ -27779,7 +27779,7 @@ "x-appwrite": { "method": "delete", "group": "tablesdb", - "weight": 351, + "weight": 348, "cookies": false, "type": "", "demo": "tablesdb\/delete.md", @@ -27841,7 +27841,7 @@ "x-appwrite": { "method": "listTables", "group": "tables", - "weight": 359, + "weight": 356, "cookies": false, "type": "", "demo": "tablesdb\/list-tables.md", @@ -27936,7 +27936,7 @@ "x-appwrite": { "method": "createTable", "group": "tables", - "weight": 355, + "weight": 352, "cookies": false, "type": "", "demo": "tablesdb\/create-table.md", @@ -28066,7 +28066,7 @@ "x-appwrite": { "method": "getTable", "group": "tables", - "weight": 356, + "weight": 353, "cookies": false, "type": "", "demo": "tablesdb\/get-table.md", @@ -28139,7 +28139,7 @@ "x-appwrite": { "method": "updateTable", "group": "tables", - "weight": 357, + "weight": 354, "cookies": false, "type": "", "demo": "tablesdb\/update-table.md", @@ -28244,7 +28244,7 @@ "x-appwrite": { "method": "deleteTable", "group": "tables", - "weight": 358, + "weight": 355, "cookies": false, "type": "", "demo": "tablesdb\/delete-table.md", @@ -28317,7 +28317,7 @@ "x-appwrite": { "method": "listColumns", "group": "columns", - "weight": 364, + "weight": 361, "cookies": false, "type": "", "demo": "tablesdb\/list-columns.md", @@ -28413,7 +28413,7 @@ "x-appwrite": { "method": "createBooleanColumn", "group": "columns", - "weight": 365, + "weight": 362, "cookies": false, "type": "", "demo": "tablesdb\/create-boolean-column.md", @@ -28526,7 +28526,7 @@ "x-appwrite": { "method": "updateBooleanColumn", "group": "columns", - "weight": 366, + "weight": 363, "cookies": false, "type": "", "demo": "tablesdb\/update-boolean-column.md", @@ -28641,7 +28641,7 @@ "x-appwrite": { "method": "createDatetimeColumn", "group": "columns", - "weight": 367, + "weight": 364, "cookies": false, "type": "", "demo": "tablesdb\/create-datetime-column.md", @@ -28754,7 +28754,7 @@ "x-appwrite": { "method": "updateDatetimeColumn", "group": "columns", - "weight": 368, + "weight": 365, "cookies": false, "type": "", "demo": "tablesdb\/update-datetime-column.md", @@ -28869,7 +28869,7 @@ "x-appwrite": { "method": "createEmailColumn", "group": "columns", - "weight": 369, + "weight": 366, "cookies": false, "type": "", "demo": "tablesdb\/create-email-column.md", @@ -28983,7 +28983,7 @@ "x-appwrite": { "method": "updateEmailColumn", "group": "columns", - "weight": 370, + "weight": 367, "cookies": false, "type": "", "demo": "tablesdb\/update-email-column.md", @@ -29099,7 +29099,7 @@ "x-appwrite": { "method": "createEnumColumn", "group": "columns", - "weight": 371, + "weight": 368, "cookies": false, "type": "", "demo": "tablesdb\/create-enum-column.md", @@ -29222,7 +29222,7 @@ "x-appwrite": { "method": "updateEnumColumn", "group": "columns", - "weight": 372, + "weight": 369, "cookies": false, "type": "", "demo": "tablesdb\/update-enum-column.md", @@ -29347,7 +29347,7 @@ "x-appwrite": { "method": "createFloatColumn", "group": "columns", - "weight": 373, + "weight": 370, "cookies": false, "type": "", "demo": "tablesdb\/create-float-column.md", @@ -29477,7 +29477,7 @@ "x-appwrite": { "method": "updateFloatColumn", "group": "columns", - "weight": 374, + "weight": 371, "cookies": false, "type": "", "demo": "tablesdb\/update-float-column.md", @@ -29609,7 +29609,7 @@ "x-appwrite": { "method": "createIntegerColumn", "group": "columns", - "weight": 375, + "weight": 372, "cookies": false, "type": "", "demo": "tablesdb\/create-integer-column.md", @@ -29739,7 +29739,7 @@ "x-appwrite": { "method": "updateIntegerColumn", "group": "columns", - "weight": 376, + "weight": 373, "cookies": false, "type": "", "demo": "tablesdb\/update-integer-column.md", @@ -29871,7 +29871,7 @@ "x-appwrite": { "method": "createIpColumn", "group": "columns", - "weight": 377, + "weight": 374, "cookies": false, "type": "", "demo": "tablesdb\/create-ip-column.md", @@ -29984,7 +29984,7 @@ "x-appwrite": { "method": "updateIpColumn", "group": "columns", - "weight": 378, + "weight": 375, "cookies": false, "type": "", "demo": "tablesdb\/update-ip-column.md", @@ -30099,7 +30099,7 @@ "x-appwrite": { "method": "createLineColumn", "group": "columns", - "weight": 379, + "weight": 376, "cookies": false, "type": "", "demo": "tablesdb\/create-line-column.md", @@ -30206,7 +30206,7 @@ "x-appwrite": { "method": "updateLineColumn", "group": "columns", - "weight": 380, + "weight": 377, "cookies": false, "type": "", "demo": "tablesdb\/update-line-column.md", @@ -30320,7 +30320,7 @@ "x-appwrite": { "method": "createLongtextColumn", "group": "columns", - "weight": 397, + "weight": 394, "cookies": false, "type": "", "demo": "tablesdb\/create-longtext-column.md", @@ -30433,7 +30433,7 @@ "x-appwrite": { "method": "updateLongtextColumn", "group": "columns", - "weight": 398, + "weight": 395, "cookies": false, "type": "", "demo": "tablesdb\/update-longtext-column.md", @@ -30548,7 +30548,7 @@ "x-appwrite": { "method": "createMediumtextColumn", "group": "columns", - "weight": 395, + "weight": 392, "cookies": false, "type": "", "demo": "tablesdb\/create-mediumtext-column.md", @@ -30661,7 +30661,7 @@ "x-appwrite": { "method": "updateMediumtextColumn", "group": "columns", - "weight": 396, + "weight": 393, "cookies": false, "type": "", "demo": "tablesdb\/update-mediumtext-column.md", @@ -30776,7 +30776,7 @@ "x-appwrite": { "method": "createPointColumn", "group": "columns", - "weight": 381, + "weight": 378, "cookies": false, "type": "", "demo": "tablesdb\/create-point-column.md", @@ -30883,7 +30883,7 @@ "x-appwrite": { "method": "updatePointColumn", "group": "columns", - "weight": 382, + "weight": 379, "cookies": false, "type": "", "demo": "tablesdb\/update-point-column.md", @@ -30997,7 +30997,7 @@ "x-appwrite": { "method": "createPolygonColumn", "group": "columns", - "weight": 383, + "weight": 380, "cookies": false, "type": "", "demo": "tablesdb\/create-polygon-column.md", @@ -31104,7 +31104,7 @@ "x-appwrite": { "method": "updatePolygonColumn", "group": "columns", - "weight": 384, + "weight": 381, "cookies": false, "type": "", "demo": "tablesdb\/update-polygon-column.md", @@ -31218,7 +31218,7 @@ "x-appwrite": { "method": "createRelationshipColumn", "group": "columns", - "weight": 385, + "weight": 382, "cookies": false, "type": "", "demo": "tablesdb\/create-relationship-column.md", @@ -31359,7 +31359,7 @@ "x-appwrite": { "method": "createStringColumn", "group": "columns", - "weight": 387, + "weight": 384, "cookies": false, "type": "", "demo": "tablesdb\/create-string-column.md", @@ -31490,7 +31490,7 @@ "x-appwrite": { "method": "updateStringColumn", "group": "columns", - "weight": 388, + "weight": 385, "cookies": false, "type": "", "demo": "tablesdb\/update-string-column.md", @@ -31617,7 +31617,7 @@ "x-appwrite": { "method": "createTextColumn", "group": "columns", - "weight": 393, + "weight": 390, "cookies": false, "type": "", "demo": "tablesdb\/create-text-column.md", @@ -31730,7 +31730,7 @@ "x-appwrite": { "method": "updateTextColumn", "group": "columns", - "weight": 394, + "weight": 391, "cookies": false, "type": "", "demo": "tablesdb\/update-text-column.md", @@ -31845,7 +31845,7 @@ "x-appwrite": { "method": "createUrlColumn", "group": "columns", - "weight": 389, + "weight": 386, "cookies": false, "type": "", "demo": "tablesdb\/create-url-column.md", @@ -31959,7 +31959,7 @@ "x-appwrite": { "method": "updateUrlColumn", "group": "columns", - "weight": 390, + "weight": 387, "cookies": false, "type": "", "demo": "tablesdb\/update-url-column.md", @@ -32075,7 +32075,7 @@ "x-appwrite": { "method": "createVarcharColumn", "group": "columns", - "weight": 391, + "weight": 388, "cookies": false, "type": "", "demo": "tablesdb\/create-varchar-column.md", @@ -32196,7 +32196,7 @@ "x-appwrite": { "method": "updateVarcharColumn", "group": "columns", - "weight": 392, + "weight": 389, "cookies": false, "type": "", "demo": "tablesdb\/update-varchar-column.md", @@ -32348,7 +32348,7 @@ "x-appwrite": { "method": "getColumn", "group": "columns", - "weight": 362, + "weight": 359, "cookies": false, "type": "", "demo": "tablesdb\/get-column.md", @@ -32423,7 +32423,7 @@ "x-appwrite": { "method": "deleteColumn", "group": "columns", - "weight": 363, + "weight": 360, "cookies": false, "type": "", "demo": "tablesdb\/delete-column.md", @@ -32505,7 +32505,7 @@ "x-appwrite": { "method": "updateRelationshipColumn", "group": "columns", - "weight": 386, + "weight": 383, "cookies": false, "type": "", "demo": "tablesdb\/update-relationship-column.md", @@ -32615,7 +32615,7 @@ "x-appwrite": { "method": "listIndexes", "group": "indexes", - "weight": 402, + "weight": 399, "cookies": false, "type": "", "demo": "tablesdb\/list-indexes.md", @@ -32709,7 +32709,7 @@ "x-appwrite": { "method": "createIndex", "group": "indexes", - "weight": 399, + "weight": 396, "cookies": false, "type": "", "demo": "tablesdb\/create-index.md", @@ -32849,7 +32849,7 @@ "x-appwrite": { "method": "getIndex", "group": "indexes", - "weight": 400, + "weight": 397, "cookies": false, "type": "", "demo": "tablesdb\/get-index.md", @@ -32924,7 +32924,7 @@ "x-appwrite": { "method": "deleteIndex", "group": "indexes", - "weight": 401, + "weight": 398, "cookies": false, "type": "", "demo": "tablesdb\/delete-index.md", @@ -33004,7 +33004,7 @@ "x-appwrite": { "method": "listRows", "group": "rows", - "weight": 411, + "weight": 408, "cookies": false, "type": "", "demo": "tablesdb\/list-rows.md", @@ -33109,7 +33109,7 @@ "x-appwrite": { "method": "createRow", "group": "rows", - "weight": 403, + "weight": 400, "cookies": false, "type": "", "demo": "tablesdb\/create-row.md", @@ -33295,7 +33295,7 @@ "x-appwrite": { "method": "upsertRows", "group": "rows", - "weight": 408, + "weight": 405, "cookies": false, "type": "", "demo": "tablesdb\/upsert-rows.md", @@ -33427,7 +33427,7 @@ "x-appwrite": { "method": "updateRows", "group": "rows", - "weight": 406, + "weight": 403, "cookies": false, "type": "", "demo": "tablesdb\/update-rows.md", @@ -33531,7 +33531,7 @@ "x-appwrite": { "method": "deleteRows", "group": "rows", - "weight": 410, + "weight": 407, "cookies": false, "type": "", "demo": "tablesdb\/delete-rows.md", @@ -33629,7 +33629,7 @@ "x-appwrite": { "method": "getRow", "group": "rows", - "weight": 404, + "weight": 401, "cookies": false, "type": "", "demo": "tablesdb\/get-row.md", @@ -33733,7 +33733,7 @@ "x-appwrite": { "method": "upsertRow", "group": "rows", - "weight": 407, + "weight": 404, "cookies": false, "type": "", "demo": "tablesdb\/upsert-row.md", @@ -33882,7 +33882,7 @@ "x-appwrite": { "method": "updateRow", "group": "rows", - "weight": 405, + "weight": 402, "cookies": false, "type": "", "demo": "tablesdb\/update-row.md", @@ -33993,7 +33993,7 @@ "x-appwrite": { "method": "deleteRow", "group": "rows", - "weight": 409, + "weight": 406, "cookies": false, "type": "", "demo": "tablesdb\/delete-row.md", @@ -34095,7 +34095,7 @@ "x-appwrite": { "method": "decrementRowColumn", "group": "rows", - "weight": 414, + "weight": 411, "cookies": false, "type": "", "demo": "tablesdb\/decrement-row-column.md", @@ -34219,7 +34219,7 @@ "x-appwrite": { "method": "incrementRowColumn", "group": "rows", - "weight": 413, + "weight": 410, "cookies": false, "type": "", "demo": "tablesdb\/increment-row-column.md", @@ -35437,7 +35437,7 @@ "x-appwrite": { "method": "list", "group": "files", - "weight": 533, + "weight": 530, "cookies": false, "type": "", "demo": "tokens\/list.md", @@ -35527,7 +35527,7 @@ "x-appwrite": { "method": "createFileToken", "group": "files", - "weight": 531, + "weight": 528, "cookies": false, "type": "", "demo": "tokens\/create-file-token.md", @@ -35612,7 +35612,7 @@ "x-appwrite": { "method": "get", "group": "tokens", - "weight": 532, + "weight": 529, "cookies": false, "type": "", "demo": "tokens\/get.md", @@ -35673,7 +35673,7 @@ "x-appwrite": { "method": "update", "group": "tokens", - "weight": 534, + "weight": 531, "cookies": false, "type": "", "demo": "tokens\/update.md", @@ -35745,7 +35745,7 @@ "x-appwrite": { "method": "delete", "group": "tokens", - "weight": 535, + "weight": 532, "cookies": false, "type": "", "demo": "tokens\/delete.md", @@ -40889,6 +40889,18 @@ "$ref": "#\/definitions\/index" }, "x-example": {} + }, + "bytesMax": { + "type": "integer", + "description": "Maximum document size in bytes. Returns 0 when no limit applies.", + "x-example": 65535, + "format": "int32" + }, + "bytesUsed": { + "type": "integer", + "description": "Currently used document size in bytes based on defined attributes.", + "x-example": 1500, + "format": "int32" } }, "required": [ @@ -40901,7 +40913,9 @@ "enabled", "documentSecurity", "attributes", - "indexes" + "indexes", + "bytesMax", + "bytesUsed" ], "example": { "$id": "5e5ea5c16897e", @@ -40915,7 +40929,9 @@ "enabled": false, "documentSecurity": true, "attributes": {}, - "indexes": {} + "indexes": {}, + "bytesMax": 65535, + "bytesUsed": 1500 } }, "attributeList": { @@ -42683,6 +42699,18 @@ "$ref": "#\/definitions\/columnIndex" }, "x-example": {} + }, + "bytesMax": { + "type": "integer", + "description": "Maximum row size in bytes. Returns 0 when no limit applies.", + "x-example": 65535, + "format": "int32" + }, + "bytesUsed": { + "type": "integer", + "description": "Currently used row size in bytes based on defined columns.", + "x-example": 1500, + "format": "int32" } }, "required": [ @@ -42695,7 +42723,9 @@ "enabled", "rowSecurity", "columns", - "indexes" + "indexes", + "bytesMax", + "bytesUsed" ], "example": { "$id": "5e5ea5c16897e", @@ -42709,7 +42739,9 @@ "enabled": false, "rowSecurity": true, "columns": {}, - "indexes": {} + "indexes": {}, + "bytesMax": 65535, + "bytesUsed": 1500 } }, "columnList": { diff --git a/app/config/specs/swagger2-latest-client.json b/app/config/specs/swagger2-latest-client.json index e265c1fd93..868f2a7378 100644 --- a/app/config/specs/swagger2-latest-client.json +++ b/app/config/specs/swagger2-latest-client.json @@ -612,7 +612,7 @@ "x-appwrite": { "method": "updateMFA", "group": "mfa", - "weight": 253, + "weight": 250, "cookies": false, "type": "", "demo": "account\/update-mfa.md", @@ -687,7 +687,7 @@ "x-appwrite": { "method": "createMfaAuthenticator", "group": "mfa", - "weight": 255, + "weight": 252, "cookies": false, "type": "", "demo": "account\/create-mfa-authenticator.md", @@ -811,7 +811,7 @@ "x-appwrite": { "method": "updateMfaAuthenticator", "group": "mfa", - "weight": 256, + "weight": 253, "cookies": false, "type": "", "demo": "account\/update-mfa-authenticator.md", @@ -952,7 +952,7 @@ "x-appwrite": { "method": "deleteMfaAuthenticator", "group": "mfa", - "weight": 257, + "weight": 254, "cookies": false, "type": "", "demo": "account\/delete-mfa-authenticator.md", @@ -1076,7 +1076,7 @@ "x-appwrite": { "method": "createMfaChallenge", "group": "mfa", - "weight": 261, + "weight": 258, "cookies": false, "type": "", "demo": "account\/create-mfa-challenge.md", @@ -1213,7 +1213,7 @@ "x-appwrite": { "method": "updateMfaChallenge", "group": "mfa", - "weight": 262, + "weight": 259, "cookies": false, "type": "", "demo": "account\/update-mfa-challenge.md", @@ -1353,7 +1353,7 @@ "x-appwrite": { "method": "listMfaFactors", "group": "mfa", - "weight": 254, + "weight": 251, "cookies": false, "type": "", "demo": "account\/list-mfa-factors.md", @@ -1454,7 +1454,7 @@ "x-appwrite": { "method": "getMfaRecoveryCodes", "group": "mfa", - "weight": 260, + "weight": 257, "cookies": false, "type": "", "demo": "account\/get-mfa-recovery-codes.md", @@ -1555,7 +1555,7 @@ "x-appwrite": { "method": "createMfaRecoveryCodes", "group": "mfa", - "weight": 258, + "weight": 255, "cookies": false, "type": "", "demo": "account\/create-mfa-recovery-codes.md", @@ -1656,7 +1656,7 @@ "x-appwrite": { "method": "updateMfaRecoveryCodes", "group": "mfa", - "weight": 259, + "weight": 256, "cookies": false, "type": "", "demo": "account\/update-mfa-recovery-codes.md", @@ -4203,7 +4203,7 @@ "x-appwrite": { "method": "getBrowser", "group": null, - "weight": 264, + "weight": 261, "cookies": false, "type": "location", "demo": "avatars\/get-browser.md", @@ -4329,7 +4329,7 @@ "x-appwrite": { "method": "getCreditCard", "group": null, - "weight": 263, + "weight": 260, "cookies": false, "type": "location", "demo": "avatars\/get-credit-card.md", @@ -4461,7 +4461,7 @@ "x-appwrite": { "method": "getFavicon", "group": null, - "weight": 267, + "weight": 264, "cookies": false, "type": "location", "demo": "avatars\/get-favicon.md", @@ -4525,7 +4525,7 @@ "x-appwrite": { "method": "getFlag", "group": null, - "weight": 265, + "weight": 262, "cookies": false, "type": "location", "demo": "avatars\/get-flag.md", @@ -5013,7 +5013,7 @@ "x-appwrite": { "method": "getImage", "group": null, - "weight": 266, + "weight": 263, "cookies": false, "type": "location", "demo": "avatars\/get-image.md", @@ -5097,7 +5097,7 @@ "x-appwrite": { "method": "getInitials", "group": null, - "weight": 269, + "weight": 266, "cookies": false, "type": "location", "demo": "avatars\/get-initials.md", @@ -5189,7 +5189,7 @@ "x-appwrite": { "method": "getQR", "group": null, - "weight": 268, + "weight": 265, "cookies": false, "type": "location", "demo": "avatars\/get-qr.md", @@ -5281,7 +5281,7 @@ "x-appwrite": { "method": "getScreenshot", "group": null, - "weight": 270, + "weight": 267, "cookies": false, "type": "location", "demo": "avatars\/get-screenshot.md", @@ -5994,7 +5994,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 346, + "weight": 343, "cookies": false, "type": "", "demo": "databases\/list-transactions.md", @@ -6061,7 +6061,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 342, + "weight": 339, "cookies": false, "type": "", "demo": "databases\/create-transaction.md", @@ -6132,7 +6132,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 343, + "weight": 340, "cookies": false, "type": "", "demo": "databases\/get-transaction.md", @@ -6195,7 +6195,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 344, + "weight": 341, "cookies": false, "type": "", "demo": "databases\/update-transaction.md", @@ -6274,7 +6274,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 345, + "weight": 342, "cookies": false, "type": "", "demo": "databases\/delete-transaction.md", @@ -6339,7 +6339,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 347, + "weight": 344, "cookies": false, "type": "", "demo": "databases\/create-operations.md", @@ -6420,7 +6420,7 @@ "x-appwrite": { "method": "listDocuments", "group": "documents", - "weight": 297, + "weight": 294, "cookies": false, "type": "", "demo": "databases\/list-documents.md", @@ -6524,7 +6524,7 @@ "x-appwrite": { "method": "createDocument", "group": "documents", - "weight": 289, + "weight": 286, "cookies": false, "type": "", "demo": "databases\/create-document.md", @@ -6683,7 +6683,7 @@ "x-appwrite": { "method": "getDocument", "group": "documents", - "weight": 290, + "weight": 287, "cookies": false, "type": "", "demo": "databases\/get-document.md", @@ -6786,7 +6786,7 @@ "x-appwrite": { "method": "upsertDocument", "group": "documents", - "weight": 293, + "weight": 290, "cookies": false, "type": "", "demo": "databases\/upsert-document.md", @@ -6937,7 +6937,7 @@ "x-appwrite": { "method": "updateDocument", "group": "documents", - "weight": 291, + "weight": 288, "cookies": false, "type": "", "demo": "databases\/update-document.md", @@ -7047,7 +7047,7 @@ "x-appwrite": { "method": "deleteDocument", "group": "documents", - "weight": 295, + "weight": 292, "cookies": false, "type": "", "demo": "databases\/delete-document.md", @@ -7148,7 +7148,7 @@ "x-appwrite": { "method": "decrementDocumentAttribute", "group": "documents", - "weight": 300, + "weight": 297, "cookies": false, "type": "", "demo": "databases\/decrement-document-attribute.md", @@ -7271,7 +7271,7 @@ "x-appwrite": { "method": "incrementDocumentAttribute", "group": "documents", - "weight": 299, + "weight": 296, "cookies": false, "type": "", "demo": "databases\/increment-document-attribute.md", @@ -7392,7 +7392,7 @@ "x-appwrite": { "method": "listExecutions", "group": "executions", - "weight": 447, + "weight": 444, "cookies": false, "type": "", "demo": "functions\/list-executions.md", @@ -7475,7 +7475,7 @@ "x-appwrite": { "method": "createExecution", "group": "executions", - "weight": 445, + "weight": 442, "cookies": false, "type": "", "demo": "functions\/create-execution.md", @@ -7594,7 +7594,7 @@ "x-appwrite": { "method": "getExecution", "group": "executions", - "weight": 446, + "weight": 443, "cookies": false, "type": "", "demo": "functions\/get-execution.md", @@ -7666,7 +7666,7 @@ "x-appwrite": { "method": "query", "group": "graphql", - "weight": 190, + "weight": 187, "cookies": false, "type": "graphql", "demo": "graphql\/query.md", @@ -7741,7 +7741,7 @@ "x-appwrite": { "method": "mutation", "group": "graphql", - "weight": 189, + "weight": 186, "cookies": false, "type": "graphql", "demo": "graphql\/mutation.md", @@ -8240,7 +8240,7 @@ "x-appwrite": { "method": "createSubscriber", "group": "subscribers", - "weight": 237, + "weight": 234, "cookies": false, "type": "", "demo": "messaging\/create-subscriber.md", @@ -8325,7 +8325,7 @@ "x-appwrite": { "method": "deleteSubscriber", "group": "subscribers", - "weight": 241, + "weight": 238, "cookies": false, "type": "", "demo": "messaging\/delete-subscriber.md", @@ -8396,7 +8396,7 @@ "x-appwrite": { "method": "listFiles", "group": "files", - "weight": 543, + "weight": 540, "cookies": false, "type": "", "demo": "storage\/list-files.md", @@ -8489,7 +8489,7 @@ "x-appwrite": { "method": "createFile", "group": "files", - "weight": 541, + "weight": 538, "cookies": false, "type": "upload", "demo": "storage\/create-file.md", @@ -8580,7 +8580,7 @@ "x-appwrite": { "method": "getFile", "group": "files", - "weight": 542, + "weight": 539, "cookies": false, "type": "", "demo": "storage\/get-file.md", @@ -8651,7 +8651,7 @@ "x-appwrite": { "method": "updateFile", "group": "files", - "weight": 544, + "weight": 541, "cookies": false, "type": "", "demo": "storage\/update-file.md", @@ -8742,7 +8742,7 @@ "x-appwrite": { "method": "deleteFile", "group": "files", - "weight": 545, + "weight": 542, "cookies": false, "type": "", "demo": "storage\/delete-file.md", @@ -8813,7 +8813,7 @@ "x-appwrite": { "method": "getFileDownload", "group": "files", - "weight": 547, + "weight": 544, "cookies": false, "type": "location", "demo": "storage\/get-file-download.md", @@ -8893,7 +8893,7 @@ "x-appwrite": { "method": "getFilePreview", "group": "files", - "weight": 546, + "weight": 543, "cookies": false, "type": "location", "demo": "storage\/get-file-preview.md", @@ -9101,7 +9101,7 @@ "x-appwrite": { "method": "getFileView", "group": "files", - "weight": 548, + "weight": 545, "cookies": false, "type": "location", "demo": "storage\/get-file-view.md", @@ -9181,7 +9181,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 419, + "weight": 416, "cookies": false, "type": "", "demo": "tablesdb\/list-transactions.md", @@ -9251,7 +9251,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 415, + "weight": 412, "cookies": false, "type": "", "demo": "tablesdb\/create-transaction.md", @@ -9325,7 +9325,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 416, + "weight": 413, "cookies": false, "type": "", "demo": "tablesdb\/get-transaction.md", @@ -9391,7 +9391,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 417, + "weight": 414, "cookies": false, "type": "", "demo": "tablesdb\/update-transaction.md", @@ -9473,7 +9473,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 418, + "weight": 415, "cookies": false, "type": "", "demo": "tablesdb\/delete-transaction.md", @@ -9541,7 +9541,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 420, + "weight": 417, "cookies": false, "type": "", "demo": "tablesdb\/create-operations.md", @@ -9625,7 +9625,7 @@ "x-appwrite": { "method": "listRows", "group": "rows", - "weight": 411, + "weight": 408, "cookies": false, "type": "", "demo": "tablesdb\/list-rows.md", @@ -9728,7 +9728,7 @@ "x-appwrite": { "method": "createRow", "group": "rows", - "weight": 403, + "weight": 400, "cookies": false, "type": "", "demo": "tablesdb\/create-row.md", @@ -9882,7 +9882,7 @@ "x-appwrite": { "method": "getRow", "group": "rows", - "weight": 404, + "weight": 401, "cookies": false, "type": "", "demo": "tablesdb\/get-row.md", @@ -9984,7 +9984,7 @@ "x-appwrite": { "method": "upsertRow", "group": "rows", - "weight": 407, + "weight": 404, "cookies": false, "type": "", "demo": "tablesdb\/upsert-row.md", @@ -10130,7 +10130,7 @@ "x-appwrite": { "method": "updateRow", "group": "rows", - "weight": 405, + "weight": 402, "cookies": false, "type": "", "demo": "tablesdb\/update-row.md", @@ -10239,7 +10239,7 @@ "x-appwrite": { "method": "deleteRow", "group": "rows", - "weight": 409, + "weight": 406, "cookies": false, "type": "", "demo": "tablesdb\/delete-row.md", @@ -10339,7 +10339,7 @@ "x-appwrite": { "method": "decrementRowColumn", "group": "rows", - "weight": 414, + "weight": 411, "cookies": false, "type": "", "demo": "tablesdb\/decrement-row-column.md", @@ -10461,7 +10461,7 @@ "x-appwrite": { "method": "incrementRowColumn", "group": "rows", - "weight": 413, + "weight": 410, "cookies": false, "type": "", "demo": "tablesdb\/increment-row-column.md", diff --git a/app/config/specs/swagger2-latest-console.json b/app/config/specs/swagger2-latest-console.json index 037da99b91..96e771ae86 100644 --- a/app/config/specs/swagger2-latest-console.json +++ b/app/config/specs/swagger2-latest-console.json @@ -661,7 +661,7 @@ "x-appwrite": { "method": "updateMFA", "group": "mfa", - "weight": 253, + "weight": 250, "cookies": false, "type": "", "demo": "account\/update-mfa.md", @@ -735,7 +735,7 @@ "x-appwrite": { "method": "createMfaAuthenticator", "group": "mfa", - "weight": 255, + "weight": 252, "cookies": false, "type": "", "demo": "account\/create-mfa-authenticator.md", @@ -858,7 +858,7 @@ "x-appwrite": { "method": "updateMfaAuthenticator", "group": "mfa", - "weight": 256, + "weight": 253, "cookies": false, "type": "", "demo": "account\/update-mfa-authenticator.md", @@ -998,7 +998,7 @@ "x-appwrite": { "method": "deleteMfaAuthenticator", "group": "mfa", - "weight": 257, + "weight": 254, "cookies": false, "type": "", "demo": "account\/delete-mfa-authenticator.md", @@ -1121,7 +1121,7 @@ "x-appwrite": { "method": "createMfaChallenge", "group": "mfa", - "weight": 261, + "weight": 258, "cookies": false, "type": "", "demo": "account\/create-mfa-challenge.md", @@ -1257,7 +1257,7 @@ "x-appwrite": { "method": "updateMfaChallenge", "group": "mfa", - "weight": 262, + "weight": 259, "cookies": false, "type": "", "demo": "account\/update-mfa-challenge.md", @@ -1396,7 +1396,7 @@ "x-appwrite": { "method": "listMfaFactors", "group": "mfa", - "weight": 254, + "weight": 251, "cookies": false, "type": "", "demo": "account\/list-mfa-factors.md", @@ -1496,7 +1496,7 @@ "x-appwrite": { "method": "getMfaRecoveryCodes", "group": "mfa", - "weight": 260, + "weight": 257, "cookies": false, "type": "", "demo": "account\/get-mfa-recovery-codes.md", @@ -1596,7 +1596,7 @@ "x-appwrite": { "method": "createMfaRecoveryCodes", "group": "mfa", - "weight": 258, + "weight": 255, "cookies": false, "type": "", "demo": "account\/create-mfa-recovery-codes.md", @@ -1696,7 +1696,7 @@ "x-appwrite": { "method": "updateMfaRecoveryCodes", "group": "mfa", - "weight": 259, + "weight": 256, "cookies": false, "type": "", "demo": "account\/update-mfa-recovery-codes.md", @@ -4212,7 +4212,7 @@ "x-appwrite": { "method": "getBrowser", "group": null, - "weight": 264, + "weight": 261, "cookies": false, "type": "location", "demo": "avatars\/get-browser.md", @@ -4338,7 +4338,7 @@ "x-appwrite": { "method": "getCreditCard", "group": null, - "weight": 263, + "weight": 260, "cookies": false, "type": "location", "demo": "avatars\/get-credit-card.md", @@ -4470,7 +4470,7 @@ "x-appwrite": { "method": "getFavicon", "group": null, - "weight": 267, + "weight": 264, "cookies": false, "type": "location", "demo": "avatars\/get-favicon.md", @@ -4534,7 +4534,7 @@ "x-appwrite": { "method": "getFlag", "group": null, - "weight": 265, + "weight": 262, "cookies": false, "type": "location", "demo": "avatars\/get-flag.md", @@ -5022,7 +5022,7 @@ "x-appwrite": { "method": "getImage", "group": null, - "weight": 266, + "weight": 263, "cookies": false, "type": "location", "demo": "avatars\/get-image.md", @@ -5106,7 +5106,7 @@ "x-appwrite": { "method": "getInitials", "group": null, - "weight": 269, + "weight": 266, "cookies": false, "type": "location", "demo": "avatars\/get-initials.md", @@ -5198,7 +5198,7 @@ "x-appwrite": { "method": "getQR", "group": null, - "weight": 268, + "weight": 265, "cookies": false, "type": "location", "demo": "avatars\/get-qr.md", @@ -5290,7 +5290,7 @@ "x-appwrite": { "method": "getScreenshot", "group": null, - "weight": 270, + "weight": 267, "cookies": false, "type": "location", "demo": "avatars\/get-screenshot.md", @@ -6005,7 +6005,7 @@ "x-appwrite": { "method": "chat", "group": "console", - "weight": 513, + "weight": 510, "cookies": false, "type": "", "demo": "assistant\/chat.md", @@ -6069,7 +6069,7 @@ "x-appwrite": { "method": "getResource", "group": null, - "weight": 514, + "weight": 511, "cookies": false, "type": "", "demo": "console\/get-resource.md", @@ -6140,7 +6140,7 @@ "x-appwrite": { "method": "variables", "group": "console", - "weight": 512, + "weight": 509, "cookies": false, "type": "", "demo": "console\/variables.md", @@ -6189,7 +6189,7 @@ "x-appwrite": { "method": "list", "group": "databases", - "weight": 278, + "weight": 275, "cookies": false, "type": "", "demo": "databases\/list.md", @@ -6305,7 +6305,7 @@ "x-appwrite": { "method": "create", "group": "databases", - "weight": 274, + "weight": 271, "cookies": false, "type": "", "demo": "databases\/create.md", @@ -6425,7 +6425,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 346, + "weight": 343, "cookies": false, "type": "", "demo": "databases\/list-transactions.md", @@ -6492,7 +6492,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 342, + "weight": 339, "cookies": false, "type": "", "demo": "databases\/create-transaction.md", @@ -6563,7 +6563,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 343, + "weight": 340, "cookies": false, "type": "", "demo": "databases\/get-transaction.md", @@ -6626,7 +6626,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 344, + "weight": 341, "cookies": false, "type": "", "demo": "databases\/update-transaction.md", @@ -6705,7 +6705,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 345, + "weight": 342, "cookies": false, "type": "", "demo": "databases\/delete-transaction.md", @@ -6770,7 +6770,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 347, + "weight": 344, "cookies": false, "type": "", "demo": "databases\/create-operations.md", @@ -6851,7 +6851,7 @@ "x-appwrite": { "method": "listUsage", "group": null, - "weight": 281, + "weight": 278, "cookies": false, "type": "", "demo": "databases\/list-usage.md", @@ -6953,7 +6953,7 @@ "x-appwrite": { "method": "get", "group": "databases", - "weight": 275, + "weight": 272, "cookies": false, "type": "", "demo": "databases\/get.md", @@ -7047,7 +7047,7 @@ "x-appwrite": { "method": "update", "group": "databases", - "weight": 276, + "weight": 273, "cookies": false, "type": "", "demo": "databases\/update.md", @@ -7159,7 +7159,7 @@ "x-appwrite": { "method": "delete", "group": "databases", - "weight": 277, + "weight": 274, "cookies": false, "type": "", "demo": "databases\/delete.md", @@ -7252,7 +7252,7 @@ "x-appwrite": { "method": "listCollections", "group": "collections", - "weight": 286, + "weight": 283, "cookies": false, "type": "", "demo": "databases\/list-collections.md", @@ -7347,7 +7347,7 @@ "x-appwrite": { "method": "createCollection", "group": "collections", - "weight": 282, + "weight": 279, "cookies": false, "type": "", "demo": "databases\/create-collection.md", @@ -7477,7 +7477,7 @@ "x-appwrite": { "method": "getCollection", "group": "collections", - "weight": 283, + "weight": 280, "cookies": false, "type": "", "demo": "databases\/get-collection.md", @@ -7550,7 +7550,7 @@ "x-appwrite": { "method": "updateCollection", "group": "collections", - "weight": 284, + "weight": 281, "cookies": false, "type": "", "demo": "databases\/update-collection.md", @@ -7655,7 +7655,7 @@ "x-appwrite": { "method": "deleteCollection", "group": "collections", - "weight": 285, + "weight": 282, "cookies": false, "type": "", "demo": "databases\/delete-collection.md", @@ -7728,7 +7728,7 @@ "x-appwrite": { "method": "listAttributes", "group": "attributes", - "weight": 303, + "weight": 300, "cookies": false, "type": "", "demo": "databases\/list-attributes.md", @@ -7824,7 +7824,7 @@ "x-appwrite": { "method": "createBooleanAttribute", "group": "attributes", - "weight": 304, + "weight": 301, "cookies": false, "type": "", "demo": "databases\/create-boolean-attribute.md", @@ -7937,7 +7937,7 @@ "x-appwrite": { "method": "updateBooleanAttribute", "group": "attributes", - "weight": 305, + "weight": 302, "cookies": false, "type": "", "demo": "databases\/update-boolean-attribute.md", @@ -8052,7 +8052,7 @@ "x-appwrite": { "method": "createDatetimeAttribute", "group": "attributes", - "weight": 306, + "weight": 303, "cookies": false, "type": "", "demo": "databases\/create-datetime-attribute.md", @@ -8165,7 +8165,7 @@ "x-appwrite": { "method": "updateDatetimeAttribute", "group": "attributes", - "weight": 307, + "weight": 304, "cookies": false, "type": "", "demo": "databases\/update-datetime-attribute.md", @@ -8280,7 +8280,7 @@ "x-appwrite": { "method": "createEmailAttribute", "group": "attributes", - "weight": 308, + "weight": 305, "cookies": false, "type": "", "demo": "databases\/create-email-attribute.md", @@ -8394,7 +8394,7 @@ "x-appwrite": { "method": "updateEmailAttribute", "group": "attributes", - "weight": 309, + "weight": 306, "cookies": false, "type": "", "demo": "databases\/update-email-attribute.md", @@ -8510,7 +8510,7 @@ "x-appwrite": { "method": "createEnumAttribute", "group": "attributes", - "weight": 310, + "weight": 307, "cookies": false, "type": "", "demo": "databases\/create-enum-attribute.md", @@ -8633,7 +8633,7 @@ "x-appwrite": { "method": "updateEnumAttribute", "group": "attributes", - "weight": 311, + "weight": 308, "cookies": false, "type": "", "demo": "databases\/update-enum-attribute.md", @@ -8758,7 +8758,7 @@ "x-appwrite": { "method": "createFloatAttribute", "group": "attributes", - "weight": 312, + "weight": 309, "cookies": false, "type": "", "demo": "databases\/create-float-attribute.md", @@ -8888,7 +8888,7 @@ "x-appwrite": { "method": "updateFloatAttribute", "group": "attributes", - "weight": 313, + "weight": 310, "cookies": false, "type": "", "demo": "databases\/update-float-attribute.md", @@ -9020,7 +9020,7 @@ "x-appwrite": { "method": "createIntegerAttribute", "group": "attributes", - "weight": 314, + "weight": 311, "cookies": false, "type": "", "demo": "databases\/create-integer-attribute.md", @@ -9150,7 +9150,7 @@ "x-appwrite": { "method": "updateIntegerAttribute", "group": "attributes", - "weight": 315, + "weight": 312, "cookies": false, "type": "", "demo": "databases\/update-integer-attribute.md", @@ -9282,7 +9282,7 @@ "x-appwrite": { "method": "createIpAttribute", "group": "attributes", - "weight": 316, + "weight": 313, "cookies": false, "type": "", "demo": "databases\/create-ip-attribute.md", @@ -9395,7 +9395,7 @@ "x-appwrite": { "method": "updateIpAttribute", "group": "attributes", - "weight": 317, + "weight": 314, "cookies": false, "type": "", "demo": "databases\/update-ip-attribute.md", @@ -9510,7 +9510,7 @@ "x-appwrite": { "method": "createLineAttribute", "group": "attributes", - "weight": 318, + "weight": 315, "cookies": false, "type": "", "demo": "databases\/create-line-attribute.md", @@ -9617,7 +9617,7 @@ "x-appwrite": { "method": "updateLineAttribute", "group": "attributes", - "weight": 319, + "weight": 316, "cookies": false, "type": "", "demo": "databases\/update-line-attribute.md", @@ -9731,7 +9731,7 @@ "x-appwrite": { "method": "createLongtextAttribute", "group": "attributes", - "weight": 336, + "weight": 333, "cookies": false, "type": "", "demo": "databases\/create-longtext-attribute.md", @@ -9840,7 +9840,7 @@ "x-appwrite": { "method": "updateLongtextAttribute", "group": "attributes", - "weight": 337, + "weight": 334, "cookies": false, "type": "", "demo": "databases\/update-longtext-attribute.md", @@ -9951,7 +9951,7 @@ "x-appwrite": { "method": "createMediumtextAttribute", "group": "attributes", - "weight": 334, + "weight": 331, "cookies": false, "type": "", "demo": "databases\/create-mediumtext-attribute.md", @@ -10060,7 +10060,7 @@ "x-appwrite": { "method": "updateMediumtextAttribute", "group": "attributes", - "weight": 335, + "weight": 332, "cookies": false, "type": "", "demo": "databases\/update-mediumtext-attribute.md", @@ -10171,7 +10171,7 @@ "x-appwrite": { "method": "createPointAttribute", "group": "attributes", - "weight": 320, + "weight": 317, "cookies": false, "type": "", "demo": "databases\/create-point-attribute.md", @@ -10278,7 +10278,7 @@ "x-appwrite": { "method": "updatePointAttribute", "group": "attributes", - "weight": 321, + "weight": 318, "cookies": false, "type": "", "demo": "databases\/update-point-attribute.md", @@ -10392,7 +10392,7 @@ "x-appwrite": { "method": "createPolygonAttribute", "group": "attributes", - "weight": 322, + "weight": 319, "cookies": false, "type": "", "demo": "databases\/create-polygon-attribute.md", @@ -10499,7 +10499,7 @@ "x-appwrite": { "method": "updatePolygonAttribute", "group": "attributes", - "weight": 323, + "weight": 320, "cookies": false, "type": "", "demo": "databases\/update-polygon-attribute.md", @@ -10613,7 +10613,7 @@ "x-appwrite": { "method": "createRelationshipAttribute", "group": "attributes", - "weight": 324, + "weight": 321, "cookies": false, "type": "", "demo": "databases\/create-relationship-attribute.md", @@ -10754,7 +10754,7 @@ "x-appwrite": { "method": "createStringAttribute", "group": "attributes", - "weight": 326, + "weight": 323, "cookies": false, "type": "", "demo": "databases\/create-string-attribute.md", @@ -10881,7 +10881,7 @@ "x-appwrite": { "method": "updateStringAttribute", "group": "attributes", - "weight": 327, + "weight": 324, "cookies": false, "type": "", "demo": "databases\/update-string-attribute.md", @@ -11004,7 +11004,7 @@ "x-appwrite": { "method": "createTextAttribute", "group": "attributes", - "weight": 332, + "weight": 329, "cookies": false, "type": "", "demo": "databases\/create-text-attribute.md", @@ -11113,7 +11113,7 @@ "x-appwrite": { "method": "updateTextAttribute", "group": "attributes", - "weight": 333, + "weight": 330, "cookies": false, "type": "", "demo": "databases\/update-text-attribute.md", @@ -11224,7 +11224,7 @@ "x-appwrite": { "method": "createUrlAttribute", "group": "attributes", - "weight": 328, + "weight": 325, "cookies": false, "type": "", "demo": "databases\/create-url-attribute.md", @@ -11338,7 +11338,7 @@ "x-appwrite": { "method": "updateUrlAttribute", "group": "attributes", - "weight": 329, + "weight": 326, "cookies": false, "type": "", "demo": "databases\/update-url-attribute.md", @@ -11454,7 +11454,7 @@ "x-appwrite": { "method": "createVarcharAttribute", "group": "attributes", - "weight": 330, + "weight": 327, "cookies": false, "type": "", "demo": "databases\/create-varchar-attribute.md", @@ -11571,7 +11571,7 @@ "x-appwrite": { "method": "updateVarcharAttribute", "group": "attributes", - "weight": 331, + "weight": 328, "cookies": false, "type": "", "demo": "databases\/update-varchar-attribute.md", @@ -11719,7 +11719,7 @@ "x-appwrite": { "method": "getAttribute", "group": "attributes", - "weight": 301, + "weight": 298, "cookies": false, "type": "", "demo": "databases\/get-attribute.md", @@ -11794,7 +11794,7 @@ "x-appwrite": { "method": "deleteAttribute", "group": "attributes", - "weight": 302, + "weight": 299, "cookies": false, "type": "", "demo": "databases\/delete-attribute.md", @@ -11876,7 +11876,7 @@ "x-appwrite": { "method": "updateRelationshipAttribute", "group": "attributes", - "weight": 325, + "weight": 322, "cookies": false, "type": "", "demo": "databases\/update-relationship-attribute.md", @@ -11986,7 +11986,7 @@ "x-appwrite": { "method": "listDocuments", "group": "documents", - "weight": 297, + "weight": 294, "cookies": false, "type": "", "demo": "databases\/list-documents.md", @@ -12090,7 +12090,7 @@ "x-appwrite": { "method": "createDocument", "group": "documents", - "weight": 289, + "weight": 286, "cookies": false, "type": "", "demo": "databases\/create-document.md", @@ -12281,7 +12281,7 @@ "x-appwrite": { "method": "upsertDocuments", "group": "documents", - "weight": 294, + "weight": 291, "cookies": false, "type": "", "demo": "databases\/upsert-documents.md", @@ -12416,7 +12416,7 @@ "x-appwrite": { "method": "updateDocuments", "group": "documents", - "weight": 292, + "weight": 289, "cookies": false, "type": "", "demo": "databases\/update-documents.md", @@ -12520,7 +12520,7 @@ "x-appwrite": { "method": "deleteDocuments", "group": "documents", - "weight": 296, + "weight": 293, "cookies": false, "type": "", "demo": "databases\/delete-documents.md", @@ -12618,7 +12618,7 @@ "x-appwrite": { "method": "getDocument", "group": "documents", - "weight": 290, + "weight": 287, "cookies": false, "type": "", "demo": "databases\/get-document.md", @@ -12721,7 +12721,7 @@ "x-appwrite": { "method": "upsertDocument", "group": "documents", - "weight": 293, + "weight": 290, "cookies": false, "type": "", "demo": "databases\/upsert-document.md", @@ -12872,7 +12872,7 @@ "x-appwrite": { "method": "updateDocument", "group": "documents", - "weight": 291, + "weight": 288, "cookies": false, "type": "", "demo": "databases\/update-document.md", @@ -12982,7 +12982,7 @@ "x-appwrite": { "method": "deleteDocument", "group": "documents", - "weight": 295, + "weight": 292, "cookies": false, "type": "", "demo": "databases\/delete-document.md", @@ -13081,7 +13081,7 @@ "x-appwrite": { "method": "listDocumentLogs", "group": "logs", - "weight": 298, + "weight": 295, "cookies": false, "type": "", "demo": "databases\/list-document-logs.md", @@ -13174,7 +13174,7 @@ "x-appwrite": { "method": "decrementDocumentAttribute", "group": "documents", - "weight": 300, + "weight": 297, "cookies": false, "type": "", "demo": "databases\/decrement-document-attribute.md", @@ -13297,7 +13297,7 @@ "x-appwrite": { "method": "incrementDocumentAttribute", "group": "documents", - "weight": 299, + "weight": 296, "cookies": false, "type": "", "demo": "databases\/increment-document-attribute.md", @@ -13418,7 +13418,7 @@ "x-appwrite": { "method": "listIndexes", "group": "indexes", - "weight": 341, + "weight": 338, "cookies": false, "type": "", "demo": "databases\/list-indexes.md", @@ -13512,7 +13512,7 @@ "x-appwrite": { "method": "createIndex", "group": "indexes", - "weight": 338, + "weight": 335, "cookies": false, "type": "", "demo": "databases\/create-index.md", @@ -13652,7 +13652,7 @@ "x-appwrite": { "method": "getIndex", "group": "indexes", - "weight": 339, + "weight": 336, "cookies": false, "type": "", "demo": "databases\/get-index.md", @@ -13727,7 +13727,7 @@ "x-appwrite": { "method": "deleteIndex", "group": "indexes", - "weight": 340, + "weight": 337, "cookies": false, "type": "", "demo": "databases\/delete-index.md", @@ -13807,7 +13807,7 @@ "x-appwrite": { "method": "listCollectionLogs", "group": "collections", - "weight": 287, + "weight": 284, "cookies": false, "type": "", "demo": "databases\/list-collection-logs.md", @@ -13890,7 +13890,7 @@ "x-appwrite": { "method": "getCollectionUsage", "group": null, - "weight": 288, + "weight": 285, "cookies": false, "type": "", "demo": "databases\/get-collection-usage.md", @@ -13981,7 +13981,7 @@ "x-appwrite": { "method": "listLogs", "group": "logs", - "weight": 279, + "weight": 276, "cookies": false, "type": "", "demo": "databases\/list-logs.md", @@ -14086,7 +14086,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 280, + "weight": 277, "cookies": false, "type": "", "demo": "databases\/get-usage.md", @@ -14199,7 +14199,7 @@ "x-appwrite": { "method": "list", "group": "functions", - "weight": 431, + "weight": 428, "cookies": false, "type": "", "demo": "functions\/list.md", @@ -14281,7 +14281,7 @@ "x-appwrite": { "method": "create", "group": "functions", - "weight": 428, + "weight": 425, "cookies": false, "type": "", "demo": "functions\/create.md", @@ -14595,7 +14595,7 @@ "x-appwrite": { "method": "listRuntimes", "group": "runtimes", - "weight": 433, + "weight": 430, "cookies": false, "type": "", "demo": "functions\/list-runtimes.md", @@ -14645,7 +14645,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "runtimes", - "weight": 434, + "weight": 431, "cookies": false, "type": "", "demo": "functions\/list-specifications.md", @@ -14695,7 +14695,7 @@ "x-appwrite": { "method": "listTemplates", "group": "templates", - "weight": 457, + "weight": 454, "cookies": false, "type": "", "demo": "functions\/list-templates.md", @@ -14880,7 +14880,7 @@ "x-appwrite": { "method": "getTemplate", "group": "templates", - "weight": 456, + "weight": 453, "cookies": false, "type": "", "demo": "functions\/get-template.md", @@ -14938,7 +14938,7 @@ "x-appwrite": { "method": "listUsage", "group": null, - "weight": 450, + "weight": 447, "cookies": false, "type": "", "demo": "functions\/list-usage.md", @@ -15008,7 +15008,7 @@ "x-appwrite": { "method": "get", "group": "functions", - "weight": 429, + "weight": 426, "cookies": false, "type": "", "demo": "functions\/get.md", @@ -15068,7 +15068,7 @@ "x-appwrite": { "method": "update", "group": "functions", - "weight": 430, + "weight": 427, "cookies": false, "type": "", "demo": "functions\/update.md", @@ -15378,7 +15378,7 @@ "x-appwrite": { "method": "delete", "group": "functions", - "weight": 432, + "weight": 429, "cookies": false, "type": "", "demo": "functions\/delete.md", @@ -15440,7 +15440,7 @@ "x-appwrite": { "method": "updateFunctionDeployment", "group": "functions", - "weight": 437, + "weight": 434, "cookies": false, "type": "", "demo": "functions\/update-function-deployment.md", @@ -15518,7 +15518,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 438, + "weight": 435, "cookies": false, "type": "", "demo": "functions\/list-deployments.md", @@ -15608,7 +15608,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 435, + "weight": 432, "cookies": false, "type": "upload", "demo": "functions\/create-deployment.md", @@ -15701,7 +15701,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 443, + "weight": 440, "cookies": false, "type": "", "demo": "functions\/create-duplicate-deployment.md", @@ -15787,7 +15787,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 440, + "weight": 437, "cookies": false, "type": "", "demo": "functions\/create-template-deployment.md", @@ -15908,7 +15908,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 441, + "weight": 438, "cookies": false, "type": "", "demo": "functions\/create-vcs-deployment.md", @@ -16005,7 +16005,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 436, + "weight": 433, "cookies": false, "type": "", "demo": "functions\/get-deployment.md", @@ -16068,7 +16068,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 439, + "weight": 436, "cookies": false, "type": "", "demo": "functions\/delete-deployment.md", @@ -16136,7 +16136,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 442, + "weight": 439, "cookies": false, "type": "location", "demo": "functions\/get-deployment-download.md", @@ -16222,7 +16222,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 444, + "weight": 441, "cookies": false, "type": "", "demo": "functions\/update-deployment-status.md", @@ -16290,7 +16290,7 @@ "x-appwrite": { "method": "listExecutions", "group": "executions", - "weight": 447, + "weight": 444, "cookies": false, "type": "", "demo": "functions\/list-executions.md", @@ -16373,7 +16373,7 @@ "x-appwrite": { "method": "createExecution", "group": "executions", - "weight": 445, + "weight": 442, "cookies": false, "type": "", "demo": "functions\/create-execution.md", @@ -16492,7 +16492,7 @@ "x-appwrite": { "method": "getExecution", "group": "executions", - "weight": 446, + "weight": 443, "cookies": false, "type": "", "demo": "functions\/get-execution.md", @@ -16557,7 +16557,7 @@ "x-appwrite": { "method": "deleteExecution", "group": "executions", - "weight": 448, + "weight": 445, "cookies": false, "type": "", "demo": "functions\/delete-execution.md", @@ -16625,7 +16625,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 449, + "weight": 446, "cookies": false, "type": "", "demo": "functions\/get-usage.md", @@ -16703,7 +16703,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 453, + "weight": 450, "cookies": false, "type": "", "demo": "functions\/list-variables.md", @@ -16763,7 +16763,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 451, + "weight": 448, "cookies": false, "type": "", "demo": "functions\/create-variable.md", @@ -16854,7 +16854,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 452, + "weight": 449, "cookies": false, "type": "", "demo": "functions\/get-variable.md", @@ -16922,7 +16922,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 454, + "weight": 451, "cookies": false, "type": "", "demo": "functions\/update-variable.md", @@ -17017,7 +17017,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 455, + "weight": 452, "cookies": false, "type": "", "demo": "functions\/delete-variable.md", @@ -17087,7 +17087,7 @@ "x-appwrite": { "method": "query", "group": "graphql", - "weight": 190, + "weight": 187, "cookies": false, "type": "graphql", "demo": "graphql\/query.md", @@ -17162,7 +17162,7 @@ "x-appwrite": { "method": "mutation", "group": "graphql", - "weight": 189, + "weight": 186, "cookies": false, "type": "graphql", "demo": "graphql\/mutation.md", @@ -17235,7 +17235,7 @@ "x-appwrite": { "method": "get", "group": "health", - "weight": 458, + "weight": 455, "cookies": false, "type": "", "demo": "health\/get.md", @@ -17286,7 +17286,7 @@ "x-appwrite": { "method": "getAntivirus", "group": "health", - "weight": 467, + "weight": 464, "cookies": false, "type": "", "demo": "health\/get-antivirus.md", @@ -17337,7 +17337,7 @@ "x-appwrite": { "method": "getCache", "group": "health", - "weight": 461, + "weight": 458, "cookies": false, "type": "", "demo": "health\/get-cache.md", @@ -17388,7 +17388,7 @@ "x-appwrite": { "method": "getCertificate", "group": "health", - "weight": 464, + "weight": 461, "cookies": false, "type": "", "demo": "health\/get-certificate.md", @@ -17448,7 +17448,7 @@ "x-appwrite": { "method": "getDB", "group": "health", - "weight": 460, + "weight": 457, "cookies": false, "type": "", "demo": "health\/get-db.md", @@ -17499,7 +17499,7 @@ "x-appwrite": { "method": "getPubSub", "group": "health", - "weight": 462, + "weight": 459, "cookies": false, "type": "", "demo": "health\/get-pub-sub.md", @@ -17550,7 +17550,7 @@ "x-appwrite": { "method": "getQueueAudits", "group": "queue", - "weight": 468, + "weight": 465, "cookies": false, "type": "", "demo": "health\/get-queue-audits.md", @@ -17612,7 +17612,7 @@ "x-appwrite": { "method": "getQueueBuilds", "group": "queue", - "weight": 472, + "weight": 469, "cookies": false, "type": "", "demo": "health\/get-queue-builds.md", @@ -17674,7 +17674,7 @@ "x-appwrite": { "method": "getQueueCertificates", "group": "queue", - "weight": 471, + "weight": 468, "cookies": false, "type": "", "demo": "health\/get-queue-certificates.md", @@ -17736,7 +17736,7 @@ "x-appwrite": { "method": "getQueueDatabases", "group": "queue", - "weight": 473, + "weight": 470, "cookies": false, "type": "", "demo": "health\/get-queue-databases.md", @@ -17807,7 +17807,7 @@ "x-appwrite": { "method": "getQueueDeletes", "group": "queue", - "weight": 474, + "weight": 471, "cookies": false, "type": "", "demo": "health\/get-queue-deletes.md", @@ -17869,7 +17869,7 @@ "x-appwrite": { "method": "getFailedJobs", "group": "queue", - "weight": 481, + "weight": 478, "cookies": false, "type": "", "demo": "health\/get-failed-jobs.md", @@ -17956,7 +17956,7 @@ "x-appwrite": { "method": "getQueueFunctions", "group": "queue", - "weight": 478, + "weight": 475, "cookies": false, "type": "", "demo": "health\/get-queue-functions.md", @@ -18018,7 +18018,7 @@ "x-appwrite": { "method": "getQueueLogs", "group": "queue", - "weight": 470, + "weight": 467, "cookies": false, "type": "", "demo": "health\/get-queue-logs.md", @@ -18080,7 +18080,7 @@ "x-appwrite": { "method": "getQueueMails", "group": "queue", - "weight": 475, + "weight": 472, "cookies": false, "type": "", "demo": "health\/get-queue-mails.md", @@ -18142,7 +18142,7 @@ "x-appwrite": { "method": "getQueueMessaging", "group": "queue", - "weight": 476, + "weight": 473, "cookies": false, "type": "", "demo": "health\/get-queue-messaging.md", @@ -18204,7 +18204,7 @@ "x-appwrite": { "method": "getQueueMigrations", "group": "queue", - "weight": 477, + "weight": 474, "cookies": false, "type": "", "demo": "health\/get-queue-migrations.md", @@ -18266,7 +18266,7 @@ "x-appwrite": { "method": "getQueueStatsResources", "group": "queue", - "weight": 479, + "weight": 476, "cookies": false, "type": "", "demo": "health\/get-queue-stats-resources.md", @@ -18328,7 +18328,7 @@ "x-appwrite": { "method": "getQueueUsage", "group": "queue", - "weight": 480, + "weight": 477, "cookies": false, "type": "", "demo": "health\/get-queue-usage.md", @@ -18390,7 +18390,7 @@ "x-appwrite": { "method": "getQueueWebhooks", "group": "queue", - "weight": 469, + "weight": 466, "cookies": false, "type": "", "demo": "health\/get-queue-webhooks.md", @@ -18452,7 +18452,7 @@ "x-appwrite": { "method": "getStorage", "group": "storage", - "weight": 466, + "weight": 463, "cookies": false, "type": "", "demo": "health\/get-storage.md", @@ -18503,7 +18503,7 @@ "x-appwrite": { "method": "getStorageLocal", "group": "storage", - "weight": 465, + "weight": 462, "cookies": false, "type": "", "demo": "health\/get-storage-local.md", @@ -18554,7 +18554,7 @@ "x-appwrite": { "method": "getTime", "group": "health", - "weight": 463, + "weight": 460, "cookies": false, "type": "", "demo": "health\/get-time.md", @@ -19029,7 +19029,7 @@ "x-appwrite": { "method": "listMessages", "group": "messages", - "weight": 245, + "weight": 242, "cookies": false, "type": "", "demo": "messaging\/list-messages.md", @@ -19114,7 +19114,7 @@ "x-appwrite": { "method": "createEmail", "group": "messages", - "weight": 242, + "weight": 239, "cookies": false, "type": "", "demo": "messaging\/create-email.md", @@ -19274,7 +19274,7 @@ "x-appwrite": { "method": "updateEmail", "group": "messages", - "weight": 249, + "weight": 246, "cookies": false, "type": "", "demo": "messaging\/update-email.md", @@ -19441,7 +19441,7 @@ "x-appwrite": { "method": "createPush", "group": "messages", - "weight": 244, + "weight": 241, "cookies": false, "type": "", "demo": "messaging\/create-push.md", @@ -19640,7 +19640,7 @@ "x-appwrite": { "method": "updatePush", "group": "messages", - "weight": 251, + "weight": 248, "cookies": false, "type": "", "demo": "messaging\/update-push.md", @@ -19854,7 +19854,7 @@ "x-appwrite": { "method": "createSms", "group": "messages", - "weight": 243, + "weight": 240, "cookies": false, "type": "", "demo": "messaging\/create-sms.md", @@ -20044,7 +20044,7 @@ "x-appwrite": { "method": "updateSms", "group": "messages", - "weight": 250, + "weight": 247, "cookies": false, "type": "", "demo": "messaging\/update-sms.md", @@ -20233,7 +20233,7 @@ "x-appwrite": { "method": "getMessage", "group": "messages", - "weight": 248, + "weight": 245, "cookies": false, "type": "", "demo": "messaging\/get-message.md", @@ -20289,7 +20289,7 @@ "x-appwrite": { "method": "delete", "group": "messages", - "weight": 252, + "weight": 249, "cookies": false, "type": "", "demo": "messaging\/delete.md", @@ -20350,7 +20350,7 @@ "x-appwrite": { "method": "listMessageLogs", "group": "logs", - "weight": 246, + "weight": 243, "cookies": false, "type": "", "demo": "messaging\/list-message-logs.md", @@ -20432,7 +20432,7 @@ "x-appwrite": { "method": "listTargets", "group": "messages", - "weight": 247, + "weight": 244, "cookies": false, "type": "", "demo": "messaging\/list-targets.md", @@ -20514,7 +20514,7 @@ "x-appwrite": { "method": "listProviders", "group": "providers", - "weight": 216, + "weight": 213, "cookies": false, "type": "", "demo": "messaging\/list-providers.md", @@ -20599,7 +20599,7 @@ "x-appwrite": { "method": "createApnsProvider", "group": "providers", - "weight": 215, + "weight": 212, "cookies": false, "type": "", "demo": "messaging\/create-apns-provider.md", @@ -20788,7 +20788,7 @@ "x-appwrite": { "method": "updateApnsProvider", "group": "providers", - "weight": 229, + "weight": 226, "cookies": false, "type": "", "demo": "messaging\/update-apns-provider.md", @@ -20974,7 +20974,7 @@ "x-appwrite": { "method": "createFcmProvider", "group": "providers", - "weight": 214, + "weight": 211, "cookies": false, "type": "", "demo": "messaging\/create-fcm-provider.md", @@ -21132,7 +21132,7 @@ "x-appwrite": { "method": "updateFcmProvider", "group": "providers", - "weight": 228, + "weight": 225, "cookies": false, "type": "", "demo": "messaging\/update-fcm-provider.md", @@ -21286,7 +21286,7 @@ "x-appwrite": { "method": "createMailgunProvider", "group": "providers", - "weight": 205, + "weight": 202, "cookies": false, "type": "", "demo": "messaging\/create-mailgun-provider.md", @@ -21418,7 +21418,7 @@ "x-appwrite": { "method": "updateMailgunProvider", "group": "providers", - "weight": 219, + "weight": 216, "cookies": false, "type": "", "demo": "messaging\/update-mailgun-provider.md", @@ -21547,7 +21547,7 @@ "x-appwrite": { "method": "createMsg91Provider", "group": "providers", - "weight": 209, + "weight": 206, "cookies": false, "type": "", "demo": "messaging\/create-msg-91-provider.md", @@ -21652,7 +21652,7 @@ "x-appwrite": { "method": "updateMsg91Provider", "group": "providers", - "weight": 223, + "weight": 220, "cookies": false, "type": "", "demo": "messaging\/update-msg-91-provider.md", @@ -21755,7 +21755,7 @@ "x-appwrite": { "method": "createResendProvider", "group": "providers", - "weight": 207, + "weight": 204, "cookies": false, "type": "", "demo": "messaging\/create-resend-provider.md", @@ -21874,7 +21874,7 @@ "x-appwrite": { "method": "updateResendProvider", "group": "providers", - "weight": 221, + "weight": 218, "cookies": false, "type": "", "demo": "messaging\/update-resend-provider.md", @@ -21990,7 +21990,7 @@ "x-appwrite": { "method": "createSendgridProvider", "group": "providers", - "weight": 206, + "weight": 203, "cookies": false, "type": "", "demo": "messaging\/create-sendgrid-provider.md", @@ -22109,7 +22109,7 @@ "x-appwrite": { "method": "updateSendgridProvider", "group": "providers", - "weight": 220, + "weight": 217, "cookies": false, "type": "", "demo": "messaging\/update-sendgrid-provider.md", @@ -22225,7 +22225,7 @@ "x-appwrite": { "method": "createSmtpProvider", "group": "providers", - "weight": 208, + "weight": 205, "cookies": false, "type": "", "demo": "messaging\/create-smtp-provider.md", @@ -22475,7 +22475,7 @@ "x-appwrite": { "method": "updateSmtpProvider", "group": "providers", - "weight": 222, + "weight": 219, "cookies": false, "type": "", "demo": "messaging\/update-smtp-provider.md", @@ -22719,7 +22719,7 @@ "x-appwrite": { "method": "createTelesignProvider", "group": "providers", - "weight": 210, + "weight": 207, "cookies": false, "type": "", "demo": "messaging\/create-telesign-provider.md", @@ -22825,7 +22825,7 @@ "x-appwrite": { "method": "updateTelesignProvider", "group": "providers", - "weight": 224, + "weight": 221, "cookies": false, "type": "", "demo": "messaging\/update-telesign-provider.md", @@ -22928,7 +22928,7 @@ "x-appwrite": { "method": "createTextmagicProvider", "group": "providers", - "weight": 211, + "weight": 208, "cookies": false, "type": "", "demo": "messaging\/create-textmagic-provider.md", @@ -23034,7 +23034,7 @@ "x-appwrite": { "method": "updateTextmagicProvider", "group": "providers", - "weight": 225, + "weight": 222, "cookies": false, "type": "", "demo": "messaging\/update-textmagic-provider.md", @@ -23137,7 +23137,7 @@ "x-appwrite": { "method": "createTwilioProvider", "group": "providers", - "weight": 212, + "weight": 209, "cookies": false, "type": "", "demo": "messaging\/create-twilio-provider.md", @@ -23243,7 +23243,7 @@ "x-appwrite": { "method": "updateTwilioProvider", "group": "providers", - "weight": 226, + "weight": 223, "cookies": false, "type": "", "demo": "messaging\/update-twilio-provider.md", @@ -23346,7 +23346,7 @@ "x-appwrite": { "method": "createVonageProvider", "group": "providers", - "weight": 213, + "weight": 210, "cookies": false, "type": "", "demo": "messaging\/create-vonage-provider.md", @@ -23452,7 +23452,7 @@ "x-appwrite": { "method": "updateVonageProvider", "group": "providers", - "weight": 227, + "weight": 224, "cookies": false, "type": "", "demo": "messaging\/update-vonage-provider.md", @@ -23553,7 +23553,7 @@ "x-appwrite": { "method": "getProvider", "group": "providers", - "weight": 218, + "weight": 215, "cookies": false, "type": "", "demo": "messaging\/get-provider.md", @@ -23609,7 +23609,7 @@ "x-appwrite": { "method": "deleteProvider", "group": "providers", - "weight": 230, + "weight": 227, "cookies": false, "type": "", "demo": "messaging\/delete-provider.md", @@ -23670,7 +23670,7 @@ "x-appwrite": { "method": "listProviderLogs", "group": "providers", - "weight": 217, + "weight": 214, "cookies": false, "type": "", "demo": "messaging\/list-provider-logs.md", @@ -23752,7 +23752,7 @@ "x-appwrite": { "method": "listSubscriberLogs", "group": "subscribers", - "weight": 239, + "weight": 236, "cookies": false, "type": "", "demo": "messaging\/list-subscriber-logs.md", @@ -23834,7 +23834,7 @@ "x-appwrite": { "method": "listTopics", "group": "topics", - "weight": 232, + "weight": 229, "cookies": false, "type": "", "demo": "messaging\/list-topics.md", @@ -23917,7 +23917,7 @@ "x-appwrite": { "method": "createTopic", "group": "topics", - "weight": 231, + "weight": 228, "cookies": false, "type": "", "demo": "messaging\/create-topic.md", @@ -24006,7 +24006,7 @@ "x-appwrite": { "method": "getTopic", "group": "topics", - "weight": 234, + "weight": 231, "cookies": false, "type": "", "demo": "messaging\/get-topic.md", @@ -24067,7 +24067,7 @@ "x-appwrite": { "method": "updateTopic", "group": "topics", - "weight": 235, + "weight": 232, "cookies": false, "type": "", "demo": "messaging\/update-topic.md", @@ -24149,7 +24149,7 @@ "x-appwrite": { "method": "deleteTopic", "group": "topics", - "weight": 236, + "weight": 233, "cookies": false, "type": "", "demo": "messaging\/delete-topic.md", @@ -24210,7 +24210,7 @@ "x-appwrite": { "method": "listTopicLogs", "group": "topics", - "weight": 233, + "weight": 230, "cookies": false, "type": "", "demo": "messaging\/list-topic-logs.md", @@ -24292,7 +24292,7 @@ "x-appwrite": { "method": "listSubscribers", "group": "subscribers", - "weight": 238, + "weight": 235, "cookies": false, "type": "", "demo": "messaging\/list-subscribers.md", @@ -24383,7 +24383,7 @@ "x-appwrite": { "method": "createSubscriber", "group": "subscribers", - "weight": 237, + "weight": 234, "cookies": false, "type": "", "demo": "messaging\/create-subscriber.md", @@ -24471,7 +24471,7 @@ "x-appwrite": { "method": "getSubscriber", "group": "subscribers", - "weight": 240, + "weight": 237, "cookies": false, "type": "", "demo": "messaging\/get-subscriber.md", @@ -24535,7 +24535,7 @@ "x-appwrite": { "method": "deleteSubscriber", "group": "subscribers", - "weight": 241, + "weight": 238, "cookies": false, "type": "", "demo": "messaging\/delete-subscriber.md", @@ -24606,7 +24606,7 @@ "x-appwrite": { "method": "list", "group": null, - "weight": 197, + "weight": 194, "cookies": false, "type": "", "demo": "migrations\/list.md", @@ -24689,7 +24689,7 @@ "x-appwrite": { "method": "createAppwriteMigration", "group": null, - "weight": 191, + "weight": 188, "cookies": false, "type": "", "demo": "migrations\/create-appwrite-migration.md", @@ -24803,7 +24803,7 @@ "x-appwrite": { "method": "getAppwriteReport", "group": null, - "weight": 199, + "weight": 196, "cookies": false, "type": "", "demo": "migrations\/get-appwrite-report.md", @@ -24912,7 +24912,7 @@ "x-appwrite": { "method": "createCSVExport", "group": null, - "weight": 196, + "weight": 193, "cookies": false, "type": "", "demo": "migrations\/create-csv-export.md", @@ -25038,7 +25038,7 @@ "x-appwrite": { "method": "createCSVImport", "group": null, - "weight": 195, + "weight": 192, "cookies": false, "type": "", "demo": "migrations\/create-csv-import.md", @@ -25129,7 +25129,7 @@ "x-appwrite": { "method": "createFirebaseMigration", "group": null, - "weight": 192, + "weight": 189, "cookies": false, "type": "", "demo": "migrations\/create-firebase-migration.md", @@ -25222,7 +25222,7 @@ "x-appwrite": { "method": "getFirebaseReport", "group": null, - "weight": 200, + "weight": 197, "cookies": false, "type": "", "demo": "migrations\/get-firebase-report.md", @@ -25308,7 +25308,7 @@ "x-appwrite": { "method": "createNHostMigration", "group": null, - "weight": 194, + "weight": 191, "cookies": false, "type": "", "demo": "migrations\/create-n-host-migration.md", @@ -25444,7 +25444,7 @@ "x-appwrite": { "method": "getNHostReport", "group": null, - "weight": 202, + "weight": 199, "cookies": false, "type": "", "demo": "migrations\/get-n-host-report.md", @@ -25580,7 +25580,7 @@ "x-appwrite": { "method": "createSupabaseMigration", "group": null, - "weight": 193, + "weight": 190, "cookies": false, "type": "", "demo": "migrations\/create-supabase-migration.md", @@ -25710,7 +25710,7 @@ "x-appwrite": { "method": "getSupabaseReport", "group": null, - "weight": 201, + "weight": 198, "cookies": false, "type": "", "demo": "migrations\/get-supabase-report.md", @@ -25837,7 +25837,7 @@ "x-appwrite": { "method": "get", "group": null, - "weight": 198, + "weight": 195, "cookies": false, "type": "", "demo": "migrations\/get.md", @@ -25896,7 +25896,7 @@ "x-appwrite": { "method": "retry", "group": null, - "weight": 203, + "weight": 200, "cookies": false, "type": "", "demo": "migrations\/retry.md", @@ -25950,7 +25950,7 @@ "x-appwrite": { "method": "delete", "group": null, - "weight": 204, + "weight": 201, "cookies": false, "type": "", "demo": "migrations\/delete.md", @@ -26427,7 +26427,7 @@ "x-appwrite": { "method": "list", "group": "projects", - "weight": 426, + "weight": 423, "cookies": false, "type": "", "demo": "projects\/list.md", @@ -28106,7 +28106,7 @@ "x-appwrite": { "method": "listDevKeys", "group": "devKeys", - "weight": 424, + "weight": 421, "cookies": false, "type": "", "demo": "projects\/list-dev-keys.md", @@ -28176,7 +28176,7 @@ "x-appwrite": { "method": "createDevKey", "group": "devKeys", - "weight": 421, + "weight": 418, "cookies": false, "type": "", "demo": "projects\/create-dev-key.md", @@ -28259,7 +28259,7 @@ "x-appwrite": { "method": "getDevKey", "group": "devKeys", - "weight": 423, + "weight": 420, "cookies": false, "type": "", "demo": "projects\/get-dev-key.md", @@ -28325,7 +28325,7 @@ "x-appwrite": { "method": "updateDevKey", "group": "devKeys", - "weight": 422, + "weight": 419, "cookies": false, "type": "", "demo": "projects\/update-dev-key.md", @@ -28411,7 +28411,7 @@ "x-appwrite": { "method": "deleteDevKey", "group": "devKeys", - "weight": 425, + "weight": 422, "cookies": false, "type": "", "demo": "projects\/delete-dev-key.md", @@ -29140,7 +29140,7 @@ "x-appwrite": { "method": "updateLabels", "group": "projects", - "weight": 427, + "weight": 424, "cookies": false, "type": "", "demo": "projects\/update-labels.md", @@ -32563,7 +32563,7 @@ "x-appwrite": { "method": "listRules", "group": null, - "weight": 528, + "weight": 525, "cookies": false, "type": "", "demo": "proxy\/list-rules.md", @@ -32645,7 +32645,7 @@ "x-appwrite": { "method": "createAPIRule", "group": null, - "weight": 523, + "weight": 520, "cookies": false, "type": "", "demo": "proxy\/create-api-rule.md", @@ -32715,7 +32715,7 @@ "x-appwrite": { "method": "createFunctionRule", "group": null, - "weight": 525, + "weight": 522, "cookies": false, "type": "", "demo": "proxy\/create-function-rule.md", @@ -32798,7 +32798,7 @@ "x-appwrite": { "method": "createRedirectRule", "group": null, - "weight": 526, + "weight": 523, "cookies": false, "type": "", "demo": "proxy\/create-redirect-rule.md", @@ -32919,7 +32919,7 @@ "x-appwrite": { "method": "createSiteRule", "group": null, - "weight": 524, + "weight": 521, "cookies": false, "type": "", "demo": "proxy\/create-site-rule.md", @@ -33000,7 +33000,7 @@ "x-appwrite": { "method": "getRule", "group": null, - "weight": 527, + "weight": 524, "cookies": false, "type": "", "demo": "proxy\/get-rule.md", @@ -33053,7 +33053,7 @@ "x-appwrite": { "method": "deleteRule", "group": null, - "weight": 529, + "weight": 526, "cookies": false, "type": "", "demo": "proxy\/delete-rule.md", @@ -33113,7 +33113,7 @@ "x-appwrite": { "method": "updateRuleVerification", "group": null, - "weight": 530, + "weight": 527, "cookies": false, "type": "", "demo": "proxy\/update-rule-verification.md", @@ -33171,7 +33171,7 @@ "x-appwrite": { "method": "list", "group": "sites", - "weight": 485, + "weight": 482, "cookies": false, "type": "", "demo": "sites\/list.md", @@ -33253,7 +33253,7 @@ "x-appwrite": { "method": "create", "group": "sites", - "weight": 483, + "weight": 480, "cookies": false, "type": "", "demo": "sites\/create.md", @@ -33525,7 +33525,7 @@ "x-appwrite": { "method": "listFrameworks", "group": "frameworks", - "weight": 488, + "weight": 485, "cookies": false, "type": "", "demo": "sites\/list-frameworks.md", @@ -33575,7 +33575,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "frameworks", - "weight": 511, + "weight": 508, "cookies": false, "type": "", "demo": "sites\/list-specifications.md", @@ -33625,7 +33625,7 @@ "x-appwrite": { "method": "listTemplates", "group": "templates", - "weight": 507, + "weight": 504, "cookies": false, "type": "", "demo": "sites\/list-templates.md", @@ -33751,7 +33751,7 @@ "x-appwrite": { "method": "getTemplate", "group": "templates", - "weight": 508, + "weight": 505, "cookies": false, "type": "", "demo": "sites\/get-template.md", @@ -33809,7 +33809,7 @@ "x-appwrite": { "method": "listUsage", "group": null, - "weight": 509, + "weight": 506, "cookies": false, "type": "", "demo": "sites\/list-usage.md", @@ -33879,7 +33879,7 @@ "x-appwrite": { "method": "get", "group": "sites", - "weight": 484, + "weight": 481, "cookies": false, "type": "", "demo": "sites\/get.md", @@ -33939,7 +33939,7 @@ "x-appwrite": { "method": "update", "group": "sites", - "weight": 486, + "weight": 483, "cookies": false, "type": "", "demo": "sites\/update.md", @@ -34206,7 +34206,7 @@ "x-appwrite": { "method": "delete", "group": "sites", - "weight": 487, + "weight": 484, "cookies": false, "type": "", "demo": "sites\/delete.md", @@ -34268,7 +34268,7 @@ "x-appwrite": { "method": "updateSiteDeployment", "group": "sites", - "weight": 494, + "weight": 491, "cookies": false, "type": "", "demo": "sites\/update-site-deployment.md", @@ -34346,7 +34346,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 493, + "weight": 490, "cookies": false, "type": "", "demo": "sites\/list-deployments.md", @@ -34436,7 +34436,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 489, + "weight": 486, "cookies": false, "type": "upload", "demo": "sites\/create-deployment.md", @@ -34537,7 +34537,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 497, + "weight": 494, "cookies": false, "type": "", "demo": "sites\/create-duplicate-deployment.md", @@ -34617,7 +34617,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 490, + "weight": 487, "cookies": false, "type": "", "demo": "sites\/create-template-deployment.md", @@ -34738,7 +34738,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 491, + "weight": 488, "cookies": false, "type": "", "demo": "sites\/create-vcs-deployment.md", @@ -34836,7 +34836,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 492, + "weight": 489, "cookies": false, "type": "", "demo": "sites\/get-deployment.md", @@ -34899,7 +34899,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 495, + "weight": 492, "cookies": false, "type": "", "demo": "sites\/delete-deployment.md", @@ -34967,7 +34967,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 496, + "weight": 493, "cookies": false, "type": "location", "demo": "sites\/get-deployment-download.md", @@ -35053,7 +35053,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 498, + "weight": 495, "cookies": false, "type": "", "demo": "sites\/update-deployment-status.md", @@ -35121,7 +35121,7 @@ "x-appwrite": { "method": "listLogs", "group": "logs", - "weight": 500, + "weight": 497, "cookies": false, "type": "", "demo": "sites\/list-logs.md", @@ -35202,7 +35202,7 @@ "x-appwrite": { "method": "getLog", "group": "logs", - "weight": 499, + "weight": 496, "cookies": false, "type": "", "demo": "sites\/get-log.md", @@ -35267,7 +35267,7 @@ "x-appwrite": { "method": "deleteLog", "group": "logs", - "weight": 501, + "weight": 498, "cookies": false, "type": "", "demo": "sites\/delete-log.md", @@ -35335,7 +35335,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 510, + "weight": 507, "cookies": false, "type": "", "demo": "sites\/get-usage.md", @@ -35413,7 +35413,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 504, + "weight": 501, "cookies": false, "type": "", "demo": "sites\/list-variables.md", @@ -35473,7 +35473,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 502, + "weight": 499, "cookies": false, "type": "", "demo": "sites\/create-variable.md", @@ -35564,7 +35564,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 503, + "weight": 500, "cookies": false, "type": "", "demo": "sites\/get-variable.md", @@ -35632,7 +35632,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 505, + "weight": 502, "cookies": false, "type": "", "demo": "sites\/update-variable.md", @@ -35727,7 +35727,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 506, + "weight": 503, "cookies": false, "type": "", "demo": "sites\/delete-variable.md", @@ -35795,7 +35795,7 @@ "x-appwrite": { "method": "listBuckets", "group": "buckets", - "weight": 538, + "weight": 535, "cookies": false, "type": "", "demo": "storage\/list-buckets.md", @@ -35878,7 +35878,7 @@ "x-appwrite": { "method": "createBucket", "group": "buckets", - "weight": 536, + "weight": 533, "cookies": false, "type": "", "demo": "storage\/create-bucket.md", @@ -36025,7 +36025,7 @@ "x-appwrite": { "method": "getBucket", "group": "buckets", - "weight": 537, + "weight": 534, "cookies": false, "type": "", "demo": "storage\/get-bucket.md", @@ -36086,7 +36086,7 @@ "x-appwrite": { "method": "updateBucket", "group": "buckets", - "weight": 539, + "weight": 536, "cookies": false, "type": "", "demo": "storage\/update-bucket.md", @@ -36229,7 +36229,7 @@ "x-appwrite": { "method": "deleteBucket", "group": "buckets", - "weight": 540, + "weight": 537, "cookies": false, "type": "", "demo": "storage\/delete-bucket.md", @@ -36290,7 +36290,7 @@ "x-appwrite": { "method": "listFiles", "group": "files", - "weight": 543, + "weight": 540, "cookies": false, "type": "", "demo": "storage\/list-files.md", @@ -36383,7 +36383,7 @@ "x-appwrite": { "method": "createFile", "group": "files", - "weight": 541, + "weight": 538, "cookies": false, "type": "upload", "demo": "storage\/create-file.md", @@ -36474,7 +36474,7 @@ "x-appwrite": { "method": "getFile", "group": "files", - "weight": 542, + "weight": 539, "cookies": false, "type": "", "demo": "storage\/get-file.md", @@ -36545,7 +36545,7 @@ "x-appwrite": { "method": "updateFile", "group": "files", - "weight": 544, + "weight": 541, "cookies": false, "type": "", "demo": "storage\/update-file.md", @@ -36636,7 +36636,7 @@ "x-appwrite": { "method": "deleteFile", "group": "files", - "weight": 545, + "weight": 542, "cookies": false, "type": "", "demo": "storage\/delete-file.md", @@ -36707,7 +36707,7 @@ "x-appwrite": { "method": "getFileDownload", "group": "files", - "weight": 547, + "weight": 544, "cookies": false, "type": "location", "demo": "storage\/get-file-download.md", @@ -36787,7 +36787,7 @@ "x-appwrite": { "method": "getFilePreview", "group": "files", - "weight": 546, + "weight": 543, "cookies": false, "type": "location", "demo": "storage\/get-file-preview.md", @@ -36995,7 +36995,7 @@ "x-appwrite": { "method": "getFileView", "group": "files", - "weight": 548, + "weight": 545, "cookies": false, "type": "location", "demo": "storage\/get-file-view.md", @@ -37075,7 +37075,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 550, + "weight": 547, "cookies": false, "type": "", "demo": "storage\/get-usage.md", @@ -37146,7 +37146,7 @@ "x-appwrite": { "method": "getBucketUsage", "group": null, - "weight": 551, + "weight": 548, "cookies": false, "type": "", "demo": "storage\/get-bucket-usage.md", @@ -37225,7 +37225,7 @@ "x-appwrite": { "method": "list", "group": "tablesdb", - "weight": 352, + "weight": 349, "cookies": false, "type": "", "demo": "tablesdb\/list.md", @@ -37308,7 +37308,7 @@ "x-appwrite": { "method": "create", "group": "tablesdb", - "weight": 348, + "weight": 345, "cookies": false, "type": "", "demo": "tablesdb\/create.md", @@ -37392,7 +37392,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 419, + "weight": 416, "cookies": false, "type": "", "demo": "tablesdb\/list-transactions.md", @@ -37462,7 +37462,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 415, + "weight": 412, "cookies": false, "type": "", "demo": "tablesdb\/create-transaction.md", @@ -37536,7 +37536,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 416, + "weight": 413, "cookies": false, "type": "", "demo": "tablesdb\/get-transaction.md", @@ -37602,7 +37602,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 417, + "weight": 414, "cookies": false, "type": "", "demo": "tablesdb\/update-transaction.md", @@ -37684,7 +37684,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 418, + "weight": 415, "cookies": false, "type": "", "demo": "tablesdb\/delete-transaction.md", @@ -37752,7 +37752,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 420, + "weight": 417, "cookies": false, "type": "", "demo": "tablesdb\/create-operations.md", @@ -37836,7 +37836,7 @@ "x-appwrite": { "method": "listUsage", "group": null, - "weight": 354, + "weight": 351, "cookies": false, "type": "", "demo": "tablesdb\/list-usage.md", @@ -37933,7 +37933,7 @@ "x-appwrite": { "method": "get", "group": "tablesdb", - "weight": 349, + "weight": 346, "cookies": false, "type": "", "demo": "tablesdb\/get.md", @@ -37994,7 +37994,7 @@ "x-appwrite": { "method": "update", "group": "tablesdb", - "weight": 350, + "weight": 347, "cookies": false, "type": "", "demo": "tablesdb\/update.md", @@ -38071,7 +38071,7 @@ "x-appwrite": { "method": "delete", "group": "tablesdb", - "weight": 351, + "weight": 348, "cookies": false, "type": "", "demo": "tablesdb\/delete.md", @@ -38132,7 +38132,7 @@ "x-appwrite": { "method": "listTables", "group": "tables", - "weight": 359, + "weight": 356, "cookies": false, "type": "", "demo": "tablesdb\/list-tables.md", @@ -38226,7 +38226,7 @@ "x-appwrite": { "method": "createTable", "group": "tables", - "weight": 355, + "weight": 352, "cookies": false, "type": "", "demo": "tablesdb\/create-table.md", @@ -38355,7 +38355,7 @@ "x-appwrite": { "method": "getTable", "group": "tables", - "weight": 356, + "weight": 353, "cookies": false, "type": "", "demo": "tablesdb\/get-table.md", @@ -38427,7 +38427,7 @@ "x-appwrite": { "method": "updateTable", "group": "tables", - "weight": 357, + "weight": 354, "cookies": false, "type": "", "demo": "tablesdb\/update-table.md", @@ -38531,7 +38531,7 @@ "x-appwrite": { "method": "deleteTable", "group": "tables", - "weight": 358, + "weight": 355, "cookies": false, "type": "", "demo": "tablesdb\/delete-table.md", @@ -38603,7 +38603,7 @@ "x-appwrite": { "method": "listColumns", "group": "columns", - "weight": 364, + "weight": 361, "cookies": false, "type": "", "demo": "tablesdb\/list-columns.md", @@ -38698,7 +38698,7 @@ "x-appwrite": { "method": "createBooleanColumn", "group": "columns", - "weight": 365, + "weight": 362, "cookies": false, "type": "", "demo": "tablesdb\/create-boolean-column.md", @@ -38810,7 +38810,7 @@ "x-appwrite": { "method": "updateBooleanColumn", "group": "columns", - "weight": 366, + "weight": 363, "cookies": false, "type": "", "demo": "tablesdb\/update-boolean-column.md", @@ -38924,7 +38924,7 @@ "x-appwrite": { "method": "createDatetimeColumn", "group": "columns", - "weight": 367, + "weight": 364, "cookies": false, "type": "", "demo": "tablesdb\/create-datetime-column.md", @@ -39036,7 +39036,7 @@ "x-appwrite": { "method": "updateDatetimeColumn", "group": "columns", - "weight": 368, + "weight": 365, "cookies": false, "type": "", "demo": "tablesdb\/update-datetime-column.md", @@ -39150,7 +39150,7 @@ "x-appwrite": { "method": "createEmailColumn", "group": "columns", - "weight": 369, + "weight": 366, "cookies": false, "type": "", "demo": "tablesdb\/create-email-column.md", @@ -39263,7 +39263,7 @@ "x-appwrite": { "method": "updateEmailColumn", "group": "columns", - "weight": 370, + "weight": 367, "cookies": false, "type": "", "demo": "tablesdb\/update-email-column.md", @@ -39378,7 +39378,7 @@ "x-appwrite": { "method": "createEnumColumn", "group": "columns", - "weight": 371, + "weight": 368, "cookies": false, "type": "", "demo": "tablesdb\/create-enum-column.md", @@ -39500,7 +39500,7 @@ "x-appwrite": { "method": "updateEnumColumn", "group": "columns", - "weight": 372, + "weight": 369, "cookies": false, "type": "", "demo": "tablesdb\/update-enum-column.md", @@ -39624,7 +39624,7 @@ "x-appwrite": { "method": "createFloatColumn", "group": "columns", - "weight": 373, + "weight": 370, "cookies": false, "type": "", "demo": "tablesdb\/create-float-column.md", @@ -39753,7 +39753,7 @@ "x-appwrite": { "method": "updateFloatColumn", "group": "columns", - "weight": 374, + "weight": 371, "cookies": false, "type": "", "demo": "tablesdb\/update-float-column.md", @@ -39884,7 +39884,7 @@ "x-appwrite": { "method": "createIntegerColumn", "group": "columns", - "weight": 375, + "weight": 372, "cookies": false, "type": "", "demo": "tablesdb\/create-integer-column.md", @@ -40013,7 +40013,7 @@ "x-appwrite": { "method": "updateIntegerColumn", "group": "columns", - "weight": 376, + "weight": 373, "cookies": false, "type": "", "demo": "tablesdb\/update-integer-column.md", @@ -40144,7 +40144,7 @@ "x-appwrite": { "method": "createIpColumn", "group": "columns", - "weight": 377, + "weight": 374, "cookies": false, "type": "", "demo": "tablesdb\/create-ip-column.md", @@ -40256,7 +40256,7 @@ "x-appwrite": { "method": "updateIpColumn", "group": "columns", - "weight": 378, + "weight": 375, "cookies": false, "type": "", "demo": "tablesdb\/update-ip-column.md", @@ -40370,7 +40370,7 @@ "x-appwrite": { "method": "createLineColumn", "group": "columns", - "weight": 379, + "weight": 376, "cookies": false, "type": "", "demo": "tablesdb\/create-line-column.md", @@ -40476,7 +40476,7 @@ "x-appwrite": { "method": "updateLineColumn", "group": "columns", - "weight": 380, + "weight": 377, "cookies": false, "type": "", "demo": "tablesdb\/update-line-column.md", @@ -40589,7 +40589,7 @@ "x-appwrite": { "method": "createLongtextColumn", "group": "columns", - "weight": 397, + "weight": 394, "cookies": false, "type": "", "demo": "tablesdb\/create-longtext-column.md", @@ -40701,7 +40701,7 @@ "x-appwrite": { "method": "updateLongtextColumn", "group": "columns", - "weight": 398, + "weight": 395, "cookies": false, "type": "", "demo": "tablesdb\/update-longtext-column.md", @@ -40815,7 +40815,7 @@ "x-appwrite": { "method": "createMediumtextColumn", "group": "columns", - "weight": 395, + "weight": 392, "cookies": false, "type": "", "demo": "tablesdb\/create-mediumtext-column.md", @@ -40927,7 +40927,7 @@ "x-appwrite": { "method": "updateMediumtextColumn", "group": "columns", - "weight": 396, + "weight": 393, "cookies": false, "type": "", "demo": "tablesdb\/update-mediumtext-column.md", @@ -41041,7 +41041,7 @@ "x-appwrite": { "method": "createPointColumn", "group": "columns", - "weight": 381, + "weight": 378, "cookies": false, "type": "", "demo": "tablesdb\/create-point-column.md", @@ -41147,7 +41147,7 @@ "x-appwrite": { "method": "updatePointColumn", "group": "columns", - "weight": 382, + "weight": 379, "cookies": false, "type": "", "demo": "tablesdb\/update-point-column.md", @@ -41260,7 +41260,7 @@ "x-appwrite": { "method": "createPolygonColumn", "group": "columns", - "weight": 383, + "weight": 380, "cookies": false, "type": "", "demo": "tablesdb\/create-polygon-column.md", @@ -41366,7 +41366,7 @@ "x-appwrite": { "method": "updatePolygonColumn", "group": "columns", - "weight": 384, + "weight": 381, "cookies": false, "type": "", "demo": "tablesdb\/update-polygon-column.md", @@ -41479,7 +41479,7 @@ "x-appwrite": { "method": "createRelationshipColumn", "group": "columns", - "weight": 385, + "weight": 382, "cookies": false, "type": "", "demo": "tablesdb\/create-relationship-column.md", @@ -41619,7 +41619,7 @@ "x-appwrite": { "method": "createStringColumn", "group": "columns", - "weight": 387, + "weight": 384, "cookies": false, "type": "", "demo": "tablesdb\/create-string-column.md", @@ -41749,7 +41749,7 @@ "x-appwrite": { "method": "updateStringColumn", "group": "columns", - "weight": 388, + "weight": 385, "cookies": false, "type": "", "demo": "tablesdb\/update-string-column.md", @@ -41875,7 +41875,7 @@ "x-appwrite": { "method": "createTextColumn", "group": "columns", - "weight": 393, + "weight": 390, "cookies": false, "type": "", "demo": "tablesdb\/create-text-column.md", @@ -41987,7 +41987,7 @@ "x-appwrite": { "method": "updateTextColumn", "group": "columns", - "weight": 394, + "weight": 391, "cookies": false, "type": "", "demo": "tablesdb\/update-text-column.md", @@ -42101,7 +42101,7 @@ "x-appwrite": { "method": "createUrlColumn", "group": "columns", - "weight": 389, + "weight": 386, "cookies": false, "type": "", "demo": "tablesdb\/create-url-column.md", @@ -42214,7 +42214,7 @@ "x-appwrite": { "method": "updateUrlColumn", "group": "columns", - "weight": 390, + "weight": 387, "cookies": false, "type": "", "demo": "tablesdb\/update-url-column.md", @@ -42329,7 +42329,7 @@ "x-appwrite": { "method": "createVarcharColumn", "group": "columns", - "weight": 391, + "weight": 388, "cookies": false, "type": "", "demo": "tablesdb\/create-varchar-column.md", @@ -42449,7 +42449,7 @@ "x-appwrite": { "method": "updateVarcharColumn", "group": "columns", - "weight": 392, + "weight": 389, "cookies": false, "type": "", "demo": "tablesdb\/update-varchar-column.md", @@ -42600,7 +42600,7 @@ "x-appwrite": { "method": "getColumn", "group": "columns", - "weight": 362, + "weight": 359, "cookies": false, "type": "", "demo": "tablesdb\/get-column.md", @@ -42674,7 +42674,7 @@ "x-appwrite": { "method": "deleteColumn", "group": "columns", - "weight": 363, + "weight": 360, "cookies": false, "type": "", "demo": "tablesdb\/delete-column.md", @@ -42755,7 +42755,7 @@ "x-appwrite": { "method": "updateRelationshipColumn", "group": "columns", - "weight": 386, + "weight": 383, "cookies": false, "type": "", "demo": "tablesdb\/update-relationship-column.md", @@ -42864,7 +42864,7 @@ "x-appwrite": { "method": "listIndexes", "group": "indexes", - "weight": 402, + "weight": 399, "cookies": false, "type": "", "demo": "tablesdb\/list-indexes.md", @@ -42957,7 +42957,7 @@ "x-appwrite": { "method": "createIndex", "group": "indexes", - "weight": 399, + "weight": 396, "cookies": false, "type": "", "demo": "tablesdb\/create-index.md", @@ -43096,7 +43096,7 @@ "x-appwrite": { "method": "getIndex", "group": "indexes", - "weight": 400, + "weight": 397, "cookies": false, "type": "", "demo": "tablesdb\/get-index.md", @@ -43170,7 +43170,7 @@ "x-appwrite": { "method": "deleteIndex", "group": "indexes", - "weight": 401, + "weight": 398, "cookies": false, "type": "", "demo": "tablesdb\/delete-index.md", @@ -43249,7 +43249,7 @@ "x-appwrite": { "method": "listTableLogs", "group": "tables", - "weight": 360, + "weight": 357, "cookies": false, "type": "", "demo": "tablesdb\/list-table-logs.md", @@ -43331,7 +43331,7 @@ "x-appwrite": { "method": "listRows", "group": "rows", - "weight": 411, + "weight": 408, "cookies": false, "type": "", "demo": "tablesdb\/list-rows.md", @@ -43434,7 +43434,7 @@ "x-appwrite": { "method": "createRow", "group": "rows", - "weight": 403, + "weight": 400, "cookies": false, "type": "", "demo": "tablesdb\/create-row.md", @@ -43616,7 +43616,7 @@ "x-appwrite": { "method": "upsertRows", "group": "rows", - "weight": 408, + "weight": 405, "cookies": false, "type": "", "demo": "tablesdb\/upsert-rows.md", @@ -43746,7 +43746,7 @@ "x-appwrite": { "method": "updateRows", "group": "rows", - "weight": 406, + "weight": 403, "cookies": false, "type": "", "demo": "tablesdb\/update-rows.md", @@ -43849,7 +43849,7 @@ "x-appwrite": { "method": "deleteRows", "group": "rows", - "weight": 410, + "weight": 407, "cookies": false, "type": "", "demo": "tablesdb\/delete-rows.md", @@ -43946,7 +43946,7 @@ "x-appwrite": { "method": "getRow", "group": "rows", - "weight": 404, + "weight": 401, "cookies": false, "type": "", "demo": "tablesdb\/get-row.md", @@ -44048,7 +44048,7 @@ "x-appwrite": { "method": "upsertRow", "group": "rows", - "weight": 407, + "weight": 404, "cookies": false, "type": "", "demo": "tablesdb\/upsert-row.md", @@ -44194,7 +44194,7 @@ "x-appwrite": { "method": "updateRow", "group": "rows", - "weight": 405, + "weight": 402, "cookies": false, "type": "", "demo": "tablesdb\/update-row.md", @@ -44303,7 +44303,7 @@ "x-appwrite": { "method": "deleteRow", "group": "rows", - "weight": 409, + "weight": 406, "cookies": false, "type": "", "demo": "tablesdb\/delete-row.md", @@ -44401,7 +44401,7 @@ "x-appwrite": { "method": "listRowLogs", "group": "logs", - "weight": 412, + "weight": 409, "cookies": false, "type": "", "demo": "tablesdb\/list-row-logs.md", @@ -44493,7 +44493,7 @@ "x-appwrite": { "method": "decrementRowColumn", "group": "rows", - "weight": 414, + "weight": 411, "cookies": false, "type": "", "demo": "tablesdb\/decrement-row-column.md", @@ -44615,7 +44615,7 @@ "x-appwrite": { "method": "incrementRowColumn", "group": "rows", - "weight": 413, + "weight": 410, "cookies": false, "type": "", "demo": "tablesdb\/increment-row-column.md", @@ -44735,7 +44735,7 @@ "x-appwrite": { "method": "getTableUsage", "group": null, - "weight": 361, + "weight": 358, "cookies": false, "type": "", "demo": "tablesdb\/get-table-usage.md", @@ -44825,7 +44825,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 353, + "weight": 350, "cookies": false, "type": "", "demo": "tablesdb\/get-usage.md", @@ -46083,7 +46083,7 @@ "x-appwrite": { "method": "list", "group": "files", - "weight": 533, + "weight": 530, "cookies": false, "type": "", "demo": "tokens\/list.md", @@ -46172,7 +46172,7 @@ "x-appwrite": { "method": "createFileToken", "group": "files", - "weight": 531, + "weight": 528, "cookies": false, "type": "", "demo": "tokens\/create-file-token.md", @@ -46256,7 +46256,7 @@ "x-appwrite": { "method": "get", "group": "tokens", - "weight": 532, + "weight": 529, "cookies": false, "type": "", "demo": "tokens\/get.md", @@ -46316,7 +46316,7 @@ "x-appwrite": { "method": "update", "group": "tokens", - "weight": 534, + "weight": 531, "cookies": false, "type": "", "demo": "tokens\/update.md", @@ -46387,7 +46387,7 @@ "x-appwrite": { "method": "delete", "group": "tokens", - "weight": 535, + "weight": 532, "cookies": false, "type": "", "demo": "tokens\/delete.md", @@ -50749,7 +50749,7 @@ "x-appwrite": { "method": "updateExternalDeployments", "group": "repositories", - "weight": 178, + "weight": 175, "cookies": false, "type": "", "demo": "vcs\/update-external-deployments.md", @@ -50834,7 +50834,7 @@ "x-appwrite": { "method": "listInstallations", "group": "installations", - "weight": 175, + "weight": 550, "cookies": false, "type": "", "demo": "vcs\/list-installations.md", @@ -50915,7 +50915,7 @@ "x-appwrite": { "method": "getInstallation", "group": "installations", - "weight": 176, + "weight": 549, "cookies": false, "type": "", "demo": "vcs\/get-installation.md", @@ -50969,7 +50969,7 @@ "x-appwrite": { "method": "deleteInstallation", "group": "installations", - "weight": 177, + "weight": 551, "cookies": false, "type": "", "demo": "vcs\/delete-installation.md", @@ -52726,6 +52726,18 @@ "$ref": "#\/definitions\/index" }, "x-example": {} + }, + "bytesMax": { + "type": "integer", + "description": "Maximum document size in bytes. Returns 0 when no limit applies.", + "x-example": 65535, + "format": "int32" + }, + "bytesUsed": { + "type": "integer", + "description": "Currently used document size in bytes based on defined attributes.", + "x-example": 1500, + "format": "int32" } }, "required": [ @@ -52738,7 +52750,9 @@ "enabled", "documentSecurity", "attributes", - "indexes" + "indexes", + "bytesMax", + "bytesUsed" ], "example": { "$id": "5e5ea5c16897e", @@ -52752,7 +52766,9 @@ "enabled": false, "documentSecurity": true, "attributes": {}, - "indexes": {} + "indexes": {}, + "bytesMax": 65535, + "bytesUsed": 1500 } }, "attributeList": { @@ -54520,6 +54536,18 @@ "$ref": "#\/definitions\/columnIndex" }, "x-example": {} + }, + "bytesMax": { + "type": "integer", + "description": "Maximum row size in bytes. Returns 0 when no limit applies.", + "x-example": 65535, + "format": "int32" + }, + "bytesUsed": { + "type": "integer", + "description": "Currently used row size in bytes based on defined columns.", + "x-example": 1500, + "format": "int32" } }, "required": [ @@ -54532,7 +54560,9 @@ "enabled", "rowSecurity", "columns", - "indexes" + "indexes", + "bytesMax", + "bytesUsed" ], "example": { "$id": "5e5ea5c16897e", @@ -54546,7 +54576,9 @@ "enabled": false, "rowSecurity": true, "columns": {}, - "indexes": {} + "indexes": {}, + "bytesMax": 65535, + "bytesUsed": 1500 } }, "columnList": { diff --git a/app/config/specs/swagger2-latest-server.json b/app/config/specs/swagger2-latest-server.json index 83f6a7ab7e..a932ef5fba 100644 --- a/app/config/specs/swagger2-latest-server.json +++ b/app/config/specs/swagger2-latest-server.json @@ -628,7 +628,7 @@ "x-appwrite": { "method": "updateMFA", "group": "mfa", - "weight": 253, + "weight": 250, "cookies": false, "type": "", "demo": "account\/update-mfa.md", @@ -704,7 +704,7 @@ "x-appwrite": { "method": "createMfaAuthenticator", "group": "mfa", - "weight": 255, + "weight": 252, "cookies": false, "type": "", "demo": "account\/create-mfa-authenticator.md", @@ -831,7 +831,7 @@ "x-appwrite": { "method": "updateMfaAuthenticator", "group": "mfa", - "weight": 256, + "weight": 253, "cookies": false, "type": "", "demo": "account\/update-mfa-authenticator.md", @@ -975,7 +975,7 @@ "x-appwrite": { "method": "deleteMfaAuthenticator", "group": "mfa", - "weight": 257, + "weight": 254, "cookies": false, "type": "", "demo": "account\/delete-mfa-authenticator.md", @@ -1102,7 +1102,7 @@ "x-appwrite": { "method": "createMfaChallenge", "group": "mfa", - "weight": 261, + "weight": 258, "cookies": false, "type": "", "demo": "account\/create-mfa-challenge.md", @@ -1242,7 +1242,7 @@ "x-appwrite": { "method": "updateMfaChallenge", "group": "mfa", - "weight": 262, + "weight": 259, "cookies": false, "type": "", "demo": "account\/update-mfa-challenge.md", @@ -1385,7 +1385,7 @@ "x-appwrite": { "method": "listMfaFactors", "group": "mfa", - "weight": 254, + "weight": 251, "cookies": false, "type": "", "demo": "account\/list-mfa-factors.md", @@ -1489,7 +1489,7 @@ "x-appwrite": { "method": "getMfaRecoveryCodes", "group": "mfa", - "weight": 260, + "weight": 257, "cookies": false, "type": "", "demo": "account\/get-mfa-recovery-codes.md", @@ -1593,7 +1593,7 @@ "x-appwrite": { "method": "createMfaRecoveryCodes", "group": "mfa", - "weight": 258, + "weight": 255, "cookies": false, "type": "", "demo": "account\/create-mfa-recovery-codes.md", @@ -1697,7 +1697,7 @@ "x-appwrite": { "method": "updateMfaRecoveryCodes", "group": "mfa", - "weight": 259, + "weight": 256, "cookies": false, "type": "", "demo": "account\/update-mfa-recovery-codes.md", @@ -3919,7 +3919,7 @@ "x-appwrite": { "method": "getBrowser", "group": null, - "weight": 264, + "weight": 261, "cookies": false, "type": "location", "demo": "avatars\/get-browser.md", @@ -4047,7 +4047,7 @@ "x-appwrite": { "method": "getCreditCard", "group": null, - "weight": 263, + "weight": 260, "cookies": false, "type": "location", "demo": "avatars\/get-credit-card.md", @@ -4181,7 +4181,7 @@ "x-appwrite": { "method": "getFavicon", "group": null, - "weight": 267, + "weight": 264, "cookies": false, "type": "location", "demo": "avatars\/get-favicon.md", @@ -4247,7 +4247,7 @@ "x-appwrite": { "method": "getFlag", "group": null, - "weight": 265, + "weight": 262, "cookies": false, "type": "location", "demo": "avatars\/get-flag.md", @@ -4737,7 +4737,7 @@ "x-appwrite": { "method": "getImage", "group": null, - "weight": 266, + "weight": 263, "cookies": false, "type": "location", "demo": "avatars\/get-image.md", @@ -4823,7 +4823,7 @@ "x-appwrite": { "method": "getInitials", "group": null, - "weight": 269, + "weight": 266, "cookies": false, "type": "location", "demo": "avatars\/get-initials.md", @@ -4917,7 +4917,7 @@ "x-appwrite": { "method": "getQR", "group": null, - "weight": 268, + "weight": 265, "cookies": false, "type": "location", "demo": "avatars\/get-qr.md", @@ -5011,7 +5011,7 @@ "x-appwrite": { "method": "getScreenshot", "group": null, - "weight": 270, + "weight": 267, "cookies": false, "type": "location", "demo": "avatars\/get-screenshot.md", @@ -5726,7 +5726,7 @@ "x-appwrite": { "method": "list", "group": "databases", - "weight": 278, + "weight": 275, "cookies": false, "type": "", "demo": "databases\/list.md", @@ -5844,7 +5844,7 @@ "x-appwrite": { "method": "create", "group": "databases", - "weight": 274, + "weight": 271, "cookies": false, "type": "", "demo": "databases\/create.md", @@ -5966,7 +5966,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 346, + "weight": 343, "cookies": false, "type": "", "demo": "databases\/list-transactions.md", @@ -6035,7 +6035,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 342, + "weight": 339, "cookies": false, "type": "", "demo": "databases\/create-transaction.md", @@ -6108,7 +6108,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 343, + "weight": 340, "cookies": false, "type": "", "demo": "databases\/get-transaction.md", @@ -6173,7 +6173,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 344, + "weight": 341, "cookies": false, "type": "", "demo": "databases\/update-transaction.md", @@ -6254,7 +6254,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 345, + "weight": 342, "cookies": false, "type": "", "demo": "databases\/delete-transaction.md", @@ -6321,7 +6321,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 347, + "weight": 344, "cookies": false, "type": "", "demo": "databases\/create-operations.md", @@ -6404,7 +6404,7 @@ "x-appwrite": { "method": "get", "group": "databases", - "weight": 275, + "weight": 272, "cookies": false, "type": "", "demo": "databases\/get.md", @@ -6500,7 +6500,7 @@ "x-appwrite": { "method": "update", "group": "databases", - "weight": 276, + "weight": 273, "cookies": false, "type": "", "demo": "databases\/update.md", @@ -6614,7 +6614,7 @@ "x-appwrite": { "method": "delete", "group": "databases", - "weight": 277, + "weight": 274, "cookies": false, "type": "", "demo": "databases\/delete.md", @@ -6709,7 +6709,7 @@ "x-appwrite": { "method": "listCollections", "group": "collections", - "weight": 286, + "weight": 283, "cookies": false, "type": "", "demo": "databases\/list-collections.md", @@ -6805,7 +6805,7 @@ "x-appwrite": { "method": "createCollection", "group": "collections", - "weight": 282, + "weight": 279, "cookies": false, "type": "", "demo": "databases\/create-collection.md", @@ -6936,7 +6936,7 @@ "x-appwrite": { "method": "getCollection", "group": "collections", - "weight": 283, + "weight": 280, "cookies": false, "type": "", "demo": "databases\/get-collection.md", @@ -7010,7 +7010,7 @@ "x-appwrite": { "method": "updateCollection", "group": "collections", - "weight": 284, + "weight": 281, "cookies": false, "type": "", "demo": "databases\/update-collection.md", @@ -7116,7 +7116,7 @@ "x-appwrite": { "method": "deleteCollection", "group": "collections", - "weight": 285, + "weight": 282, "cookies": false, "type": "", "demo": "databases\/delete-collection.md", @@ -7190,7 +7190,7 @@ "x-appwrite": { "method": "listAttributes", "group": "attributes", - "weight": 303, + "weight": 300, "cookies": false, "type": "", "demo": "databases\/list-attributes.md", @@ -7287,7 +7287,7 @@ "x-appwrite": { "method": "createBooleanAttribute", "group": "attributes", - "weight": 304, + "weight": 301, "cookies": false, "type": "", "demo": "databases\/create-boolean-attribute.md", @@ -7401,7 +7401,7 @@ "x-appwrite": { "method": "updateBooleanAttribute", "group": "attributes", - "weight": 305, + "weight": 302, "cookies": false, "type": "", "demo": "databases\/update-boolean-attribute.md", @@ -7517,7 +7517,7 @@ "x-appwrite": { "method": "createDatetimeAttribute", "group": "attributes", - "weight": 306, + "weight": 303, "cookies": false, "type": "", "demo": "databases\/create-datetime-attribute.md", @@ -7631,7 +7631,7 @@ "x-appwrite": { "method": "updateDatetimeAttribute", "group": "attributes", - "weight": 307, + "weight": 304, "cookies": false, "type": "", "demo": "databases\/update-datetime-attribute.md", @@ -7747,7 +7747,7 @@ "x-appwrite": { "method": "createEmailAttribute", "group": "attributes", - "weight": 308, + "weight": 305, "cookies": false, "type": "", "demo": "databases\/create-email-attribute.md", @@ -7862,7 +7862,7 @@ "x-appwrite": { "method": "updateEmailAttribute", "group": "attributes", - "weight": 309, + "weight": 306, "cookies": false, "type": "", "demo": "databases\/update-email-attribute.md", @@ -7979,7 +7979,7 @@ "x-appwrite": { "method": "createEnumAttribute", "group": "attributes", - "weight": 310, + "weight": 307, "cookies": false, "type": "", "demo": "databases\/create-enum-attribute.md", @@ -8103,7 +8103,7 @@ "x-appwrite": { "method": "updateEnumAttribute", "group": "attributes", - "weight": 311, + "weight": 308, "cookies": false, "type": "", "demo": "databases\/update-enum-attribute.md", @@ -8229,7 +8229,7 @@ "x-appwrite": { "method": "createFloatAttribute", "group": "attributes", - "weight": 312, + "weight": 309, "cookies": false, "type": "", "demo": "databases\/create-float-attribute.md", @@ -8360,7 +8360,7 @@ "x-appwrite": { "method": "updateFloatAttribute", "group": "attributes", - "weight": 313, + "weight": 310, "cookies": false, "type": "", "demo": "databases\/update-float-attribute.md", @@ -8493,7 +8493,7 @@ "x-appwrite": { "method": "createIntegerAttribute", "group": "attributes", - "weight": 314, + "weight": 311, "cookies": false, "type": "", "demo": "databases\/create-integer-attribute.md", @@ -8624,7 +8624,7 @@ "x-appwrite": { "method": "updateIntegerAttribute", "group": "attributes", - "weight": 315, + "weight": 312, "cookies": false, "type": "", "demo": "databases\/update-integer-attribute.md", @@ -8757,7 +8757,7 @@ "x-appwrite": { "method": "createIpAttribute", "group": "attributes", - "weight": 316, + "weight": 313, "cookies": false, "type": "", "demo": "databases\/create-ip-attribute.md", @@ -8871,7 +8871,7 @@ "x-appwrite": { "method": "updateIpAttribute", "group": "attributes", - "weight": 317, + "weight": 314, "cookies": false, "type": "", "demo": "databases\/update-ip-attribute.md", @@ -8987,7 +8987,7 @@ "x-appwrite": { "method": "createLineAttribute", "group": "attributes", - "weight": 318, + "weight": 315, "cookies": false, "type": "", "demo": "databases\/create-line-attribute.md", @@ -9095,7 +9095,7 @@ "x-appwrite": { "method": "updateLineAttribute", "group": "attributes", - "weight": 319, + "weight": 316, "cookies": false, "type": "", "demo": "databases\/update-line-attribute.md", @@ -9210,7 +9210,7 @@ "x-appwrite": { "method": "createLongtextAttribute", "group": "attributes", - "weight": 336, + "weight": 333, "cookies": false, "type": "", "demo": "databases\/create-longtext-attribute.md", @@ -9320,7 +9320,7 @@ "x-appwrite": { "method": "updateLongtextAttribute", "group": "attributes", - "weight": 337, + "weight": 334, "cookies": false, "type": "", "demo": "databases\/update-longtext-attribute.md", @@ -9432,7 +9432,7 @@ "x-appwrite": { "method": "createMediumtextAttribute", "group": "attributes", - "weight": 334, + "weight": 331, "cookies": false, "type": "", "demo": "databases\/create-mediumtext-attribute.md", @@ -9542,7 +9542,7 @@ "x-appwrite": { "method": "updateMediumtextAttribute", "group": "attributes", - "weight": 335, + "weight": 332, "cookies": false, "type": "", "demo": "databases\/update-mediumtext-attribute.md", @@ -9654,7 +9654,7 @@ "x-appwrite": { "method": "createPointAttribute", "group": "attributes", - "weight": 320, + "weight": 317, "cookies": false, "type": "", "demo": "databases\/create-point-attribute.md", @@ -9762,7 +9762,7 @@ "x-appwrite": { "method": "updatePointAttribute", "group": "attributes", - "weight": 321, + "weight": 318, "cookies": false, "type": "", "demo": "databases\/update-point-attribute.md", @@ -9877,7 +9877,7 @@ "x-appwrite": { "method": "createPolygonAttribute", "group": "attributes", - "weight": 322, + "weight": 319, "cookies": false, "type": "", "demo": "databases\/create-polygon-attribute.md", @@ -9985,7 +9985,7 @@ "x-appwrite": { "method": "updatePolygonAttribute", "group": "attributes", - "weight": 323, + "weight": 320, "cookies": false, "type": "", "demo": "databases\/update-polygon-attribute.md", @@ -10100,7 +10100,7 @@ "x-appwrite": { "method": "createRelationshipAttribute", "group": "attributes", - "weight": 324, + "weight": 321, "cookies": false, "type": "", "demo": "databases\/create-relationship-attribute.md", @@ -10242,7 +10242,7 @@ "x-appwrite": { "method": "createStringAttribute", "group": "attributes", - "weight": 326, + "weight": 323, "cookies": false, "type": "", "demo": "databases\/create-string-attribute.md", @@ -10370,7 +10370,7 @@ "x-appwrite": { "method": "updateStringAttribute", "group": "attributes", - "weight": 327, + "weight": 324, "cookies": false, "type": "", "demo": "databases\/update-string-attribute.md", @@ -10494,7 +10494,7 @@ "x-appwrite": { "method": "createTextAttribute", "group": "attributes", - "weight": 332, + "weight": 329, "cookies": false, "type": "", "demo": "databases\/create-text-attribute.md", @@ -10604,7 +10604,7 @@ "x-appwrite": { "method": "updateTextAttribute", "group": "attributes", - "weight": 333, + "weight": 330, "cookies": false, "type": "", "demo": "databases\/update-text-attribute.md", @@ -10716,7 +10716,7 @@ "x-appwrite": { "method": "createUrlAttribute", "group": "attributes", - "weight": 328, + "weight": 325, "cookies": false, "type": "", "demo": "databases\/create-url-attribute.md", @@ -10831,7 +10831,7 @@ "x-appwrite": { "method": "updateUrlAttribute", "group": "attributes", - "weight": 329, + "weight": 326, "cookies": false, "type": "", "demo": "databases\/update-url-attribute.md", @@ -10948,7 +10948,7 @@ "x-appwrite": { "method": "createVarcharAttribute", "group": "attributes", - "weight": 330, + "weight": 327, "cookies": false, "type": "", "demo": "databases\/create-varchar-attribute.md", @@ -11066,7 +11066,7 @@ "x-appwrite": { "method": "updateVarcharAttribute", "group": "attributes", - "weight": 331, + "weight": 328, "cookies": false, "type": "", "demo": "databases\/update-varchar-attribute.md", @@ -11215,7 +11215,7 @@ "x-appwrite": { "method": "getAttribute", "group": "attributes", - "weight": 301, + "weight": 298, "cookies": false, "type": "", "demo": "databases\/get-attribute.md", @@ -11291,7 +11291,7 @@ "x-appwrite": { "method": "deleteAttribute", "group": "attributes", - "weight": 302, + "weight": 299, "cookies": false, "type": "", "demo": "databases\/delete-attribute.md", @@ -11374,7 +11374,7 @@ "x-appwrite": { "method": "updateRelationshipAttribute", "group": "attributes", - "weight": 325, + "weight": 322, "cookies": false, "type": "", "demo": "databases\/update-relationship-attribute.md", @@ -11485,7 +11485,7 @@ "x-appwrite": { "method": "listDocuments", "group": "documents", - "weight": 297, + "weight": 294, "cookies": false, "type": "", "demo": "databases\/list-documents.md", @@ -11591,7 +11591,7 @@ "x-appwrite": { "method": "createDocument", "group": "documents", - "weight": 289, + "weight": 286, "cookies": false, "type": "", "demo": "databases\/create-document.md", @@ -11786,7 +11786,7 @@ "x-appwrite": { "method": "upsertDocuments", "group": "documents", - "weight": 294, + "weight": 291, "cookies": false, "type": "", "demo": "databases\/upsert-documents.md", @@ -11923,7 +11923,7 @@ "x-appwrite": { "method": "updateDocuments", "group": "documents", - "weight": 292, + "weight": 289, "cookies": false, "type": "", "demo": "databases\/update-documents.md", @@ -12028,7 +12028,7 @@ "x-appwrite": { "method": "deleteDocuments", "group": "documents", - "weight": 296, + "weight": 293, "cookies": false, "type": "", "demo": "databases\/delete-documents.md", @@ -12127,7 +12127,7 @@ "x-appwrite": { "method": "getDocument", "group": "documents", - "weight": 290, + "weight": 287, "cookies": false, "type": "", "demo": "databases\/get-document.md", @@ -12232,7 +12232,7 @@ "x-appwrite": { "method": "upsertDocument", "group": "documents", - "weight": 293, + "weight": 290, "cookies": false, "type": "", "demo": "databases\/upsert-document.md", @@ -12386,7 +12386,7 @@ "x-appwrite": { "method": "updateDocument", "group": "documents", - "weight": 291, + "weight": 288, "cookies": false, "type": "", "demo": "databases\/update-document.md", @@ -12498,7 +12498,7 @@ "x-appwrite": { "method": "deleteDocument", "group": "documents", - "weight": 295, + "weight": 292, "cookies": false, "type": "", "demo": "databases\/delete-document.md", @@ -12601,7 +12601,7 @@ "x-appwrite": { "method": "decrementDocumentAttribute", "group": "documents", - "weight": 300, + "weight": 297, "cookies": false, "type": "", "demo": "databases\/decrement-document-attribute.md", @@ -12726,7 +12726,7 @@ "x-appwrite": { "method": "incrementDocumentAttribute", "group": "documents", - "weight": 299, + "weight": 296, "cookies": false, "type": "", "demo": "databases\/increment-document-attribute.md", @@ -12849,7 +12849,7 @@ "x-appwrite": { "method": "listIndexes", "group": "indexes", - "weight": 341, + "weight": 338, "cookies": false, "type": "", "demo": "databases\/list-indexes.md", @@ -12944,7 +12944,7 @@ "x-appwrite": { "method": "createIndex", "group": "indexes", - "weight": 338, + "weight": 335, "cookies": false, "type": "", "demo": "databases\/create-index.md", @@ -13085,7 +13085,7 @@ "x-appwrite": { "method": "getIndex", "group": "indexes", - "weight": 339, + "weight": 336, "cookies": false, "type": "", "demo": "databases\/get-index.md", @@ -13161,7 +13161,7 @@ "x-appwrite": { "method": "deleteIndex", "group": "indexes", - "weight": 340, + "weight": 337, "cookies": false, "type": "", "demo": "databases\/delete-index.md", @@ -13242,7 +13242,7 @@ "x-appwrite": { "method": "list", "group": "functions", - "weight": 431, + "weight": 428, "cookies": false, "type": "", "demo": "functions\/list.md", @@ -13325,7 +13325,7 @@ "x-appwrite": { "method": "create", "group": "functions", - "weight": 428, + "weight": 425, "cookies": false, "type": "", "demo": "functions\/create.md", @@ -13640,7 +13640,7 @@ "x-appwrite": { "method": "listRuntimes", "group": "runtimes", - "weight": 433, + "weight": 430, "cookies": false, "type": "", "demo": "functions\/list-runtimes.md", @@ -13691,7 +13691,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "runtimes", - "weight": 434, + "weight": 431, "cookies": false, "type": "", "demo": "functions\/list-specifications.md", @@ -13742,7 +13742,7 @@ "x-appwrite": { "method": "get", "group": "functions", - "weight": 429, + "weight": 426, "cookies": false, "type": "", "demo": "functions\/get.md", @@ -13803,7 +13803,7 @@ "x-appwrite": { "method": "update", "group": "functions", - "weight": 430, + "weight": 427, "cookies": false, "type": "", "demo": "functions\/update.md", @@ -14114,7 +14114,7 @@ "x-appwrite": { "method": "delete", "group": "functions", - "weight": 432, + "weight": 429, "cookies": false, "type": "", "demo": "functions\/delete.md", @@ -14177,7 +14177,7 @@ "x-appwrite": { "method": "updateFunctionDeployment", "group": "functions", - "weight": 437, + "weight": 434, "cookies": false, "type": "", "demo": "functions\/update-function-deployment.md", @@ -14256,7 +14256,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 438, + "weight": 435, "cookies": false, "type": "", "demo": "functions\/list-deployments.md", @@ -14347,7 +14347,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 435, + "weight": 432, "cookies": false, "type": "upload", "demo": "functions\/create-deployment.md", @@ -14441,7 +14441,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 443, + "weight": 440, "cookies": false, "type": "", "demo": "functions\/create-duplicate-deployment.md", @@ -14528,7 +14528,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 440, + "weight": 437, "cookies": false, "type": "", "demo": "functions\/create-template-deployment.md", @@ -14650,7 +14650,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 441, + "weight": 438, "cookies": false, "type": "", "demo": "functions\/create-vcs-deployment.md", @@ -14748,7 +14748,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 436, + "weight": 433, "cookies": false, "type": "", "demo": "functions\/get-deployment.md", @@ -14812,7 +14812,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 439, + "weight": 436, "cookies": false, "type": "", "demo": "functions\/delete-deployment.md", @@ -14881,7 +14881,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 442, + "weight": 439, "cookies": false, "type": "location", "demo": "functions\/get-deployment-download.md", @@ -14968,7 +14968,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 444, + "weight": 441, "cookies": false, "type": "", "demo": "functions\/update-deployment-status.md", @@ -15037,7 +15037,7 @@ "x-appwrite": { "method": "listExecutions", "group": "executions", - "weight": 447, + "weight": 444, "cookies": false, "type": "", "demo": "functions\/list-executions.md", @@ -15122,7 +15122,7 @@ "x-appwrite": { "method": "createExecution", "group": "executions", - "weight": 445, + "weight": 442, "cookies": false, "type": "", "demo": "functions\/create-execution.md", @@ -15243,7 +15243,7 @@ "x-appwrite": { "method": "getExecution", "group": "executions", - "weight": 446, + "weight": 443, "cookies": false, "type": "", "demo": "functions\/get-execution.md", @@ -15310,7 +15310,7 @@ "x-appwrite": { "method": "deleteExecution", "group": "executions", - "weight": 448, + "weight": 445, "cookies": false, "type": "", "demo": "functions\/delete-execution.md", @@ -15379,7 +15379,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 453, + "weight": 450, "cookies": false, "type": "", "demo": "functions\/list-variables.md", @@ -15440,7 +15440,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 451, + "weight": 448, "cookies": false, "type": "", "demo": "functions\/create-variable.md", @@ -15532,7 +15532,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 452, + "weight": 449, "cookies": false, "type": "", "demo": "functions\/get-variable.md", @@ -15601,7 +15601,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 454, + "weight": 451, "cookies": false, "type": "", "demo": "functions\/update-variable.md", @@ -15697,7 +15697,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 455, + "weight": 452, "cookies": false, "type": "", "demo": "functions\/delete-variable.md", @@ -15768,7 +15768,7 @@ "x-appwrite": { "method": "query", "group": "graphql", - "weight": 190, + "weight": 187, "cookies": false, "type": "graphql", "demo": "graphql\/query.md", @@ -15845,7 +15845,7 @@ "x-appwrite": { "method": "mutation", "group": "graphql", - "weight": 189, + "weight": 186, "cookies": false, "type": "graphql", "demo": "graphql\/mutation.md", @@ -15920,7 +15920,7 @@ "x-appwrite": { "method": "get", "group": "health", - "weight": 458, + "weight": 455, "cookies": false, "type": "", "demo": "health\/get.md", @@ -15972,7 +15972,7 @@ "x-appwrite": { "method": "getAntivirus", "group": "health", - "weight": 467, + "weight": 464, "cookies": false, "type": "", "demo": "health\/get-antivirus.md", @@ -16024,7 +16024,7 @@ "x-appwrite": { "method": "getCache", "group": "health", - "weight": 461, + "weight": 458, "cookies": false, "type": "", "demo": "health\/get-cache.md", @@ -16076,7 +16076,7 @@ "x-appwrite": { "method": "getCertificate", "group": "health", - "weight": 464, + "weight": 461, "cookies": false, "type": "", "demo": "health\/get-certificate.md", @@ -16137,7 +16137,7 @@ "x-appwrite": { "method": "getDB", "group": "health", - "weight": 460, + "weight": 457, "cookies": false, "type": "", "demo": "health\/get-db.md", @@ -16189,7 +16189,7 @@ "x-appwrite": { "method": "getPubSub", "group": "health", - "weight": 462, + "weight": 459, "cookies": false, "type": "", "demo": "health\/get-pub-sub.md", @@ -16241,7 +16241,7 @@ "x-appwrite": { "method": "getQueueAudits", "group": "queue", - "weight": 468, + "weight": 465, "cookies": false, "type": "", "demo": "health\/get-queue-audits.md", @@ -16304,7 +16304,7 @@ "x-appwrite": { "method": "getQueueBuilds", "group": "queue", - "weight": 472, + "weight": 469, "cookies": false, "type": "", "demo": "health\/get-queue-builds.md", @@ -16367,7 +16367,7 @@ "x-appwrite": { "method": "getQueueCertificates", "group": "queue", - "weight": 471, + "weight": 468, "cookies": false, "type": "", "demo": "health\/get-queue-certificates.md", @@ -16430,7 +16430,7 @@ "x-appwrite": { "method": "getQueueDatabases", "group": "queue", - "weight": 473, + "weight": 470, "cookies": false, "type": "", "demo": "health\/get-queue-databases.md", @@ -16502,7 +16502,7 @@ "x-appwrite": { "method": "getQueueDeletes", "group": "queue", - "weight": 474, + "weight": 471, "cookies": false, "type": "", "demo": "health\/get-queue-deletes.md", @@ -16565,7 +16565,7 @@ "x-appwrite": { "method": "getFailedJobs", "group": "queue", - "weight": 481, + "weight": 478, "cookies": false, "type": "", "demo": "health\/get-failed-jobs.md", @@ -16653,7 +16653,7 @@ "x-appwrite": { "method": "getQueueFunctions", "group": "queue", - "weight": 478, + "weight": 475, "cookies": false, "type": "", "demo": "health\/get-queue-functions.md", @@ -16716,7 +16716,7 @@ "x-appwrite": { "method": "getQueueLogs", "group": "queue", - "weight": 470, + "weight": 467, "cookies": false, "type": "", "demo": "health\/get-queue-logs.md", @@ -16779,7 +16779,7 @@ "x-appwrite": { "method": "getQueueMails", "group": "queue", - "weight": 475, + "weight": 472, "cookies": false, "type": "", "demo": "health\/get-queue-mails.md", @@ -16842,7 +16842,7 @@ "x-appwrite": { "method": "getQueueMessaging", "group": "queue", - "weight": 476, + "weight": 473, "cookies": false, "type": "", "demo": "health\/get-queue-messaging.md", @@ -16905,7 +16905,7 @@ "x-appwrite": { "method": "getQueueMigrations", "group": "queue", - "weight": 477, + "weight": 474, "cookies": false, "type": "", "demo": "health\/get-queue-migrations.md", @@ -16968,7 +16968,7 @@ "x-appwrite": { "method": "getQueueStatsResources", "group": "queue", - "weight": 479, + "weight": 476, "cookies": false, "type": "", "demo": "health\/get-queue-stats-resources.md", @@ -17031,7 +17031,7 @@ "x-appwrite": { "method": "getQueueUsage", "group": "queue", - "weight": 480, + "weight": 477, "cookies": false, "type": "", "demo": "health\/get-queue-usage.md", @@ -17094,7 +17094,7 @@ "x-appwrite": { "method": "getQueueWebhooks", "group": "queue", - "weight": 469, + "weight": 466, "cookies": false, "type": "", "demo": "health\/get-queue-webhooks.md", @@ -17157,7 +17157,7 @@ "x-appwrite": { "method": "getStorage", "group": "storage", - "weight": 466, + "weight": 463, "cookies": false, "type": "", "demo": "health\/get-storage.md", @@ -17209,7 +17209,7 @@ "x-appwrite": { "method": "getStorageLocal", "group": "storage", - "weight": 465, + "weight": 462, "cookies": false, "type": "", "demo": "health\/get-storage-local.md", @@ -17261,7 +17261,7 @@ "x-appwrite": { "method": "getTime", "group": "health", - "weight": 463, + "weight": 460, "cookies": false, "type": "", "demo": "health\/get-time.md", @@ -17753,7 +17753,7 @@ "x-appwrite": { "method": "listMessages", "group": "messages", - "weight": 245, + "weight": 242, "cookies": false, "type": "", "demo": "messaging\/list-messages.md", @@ -17839,7 +17839,7 @@ "x-appwrite": { "method": "createEmail", "group": "messages", - "weight": 242, + "weight": 239, "cookies": false, "type": "", "demo": "messaging\/create-email.md", @@ -18000,7 +18000,7 @@ "x-appwrite": { "method": "updateEmail", "group": "messages", - "weight": 249, + "weight": 246, "cookies": false, "type": "", "demo": "messaging\/update-email.md", @@ -18168,7 +18168,7 @@ "x-appwrite": { "method": "createPush", "group": "messages", - "weight": 244, + "weight": 241, "cookies": false, "type": "", "demo": "messaging\/create-push.md", @@ -18368,7 +18368,7 @@ "x-appwrite": { "method": "updatePush", "group": "messages", - "weight": 251, + "weight": 248, "cookies": false, "type": "", "demo": "messaging\/update-push.md", @@ -18583,7 +18583,7 @@ "x-appwrite": { "method": "createSms", "group": "messages", - "weight": 243, + "weight": 240, "cookies": false, "type": "", "demo": "messaging\/create-sms.md", @@ -18776,7 +18776,7 @@ "x-appwrite": { "method": "updateSms", "group": "messages", - "weight": 250, + "weight": 247, "cookies": false, "type": "", "demo": "messaging\/update-sms.md", @@ -18968,7 +18968,7 @@ "x-appwrite": { "method": "getMessage", "group": "messages", - "weight": 248, + "weight": 245, "cookies": false, "type": "", "demo": "messaging\/get-message.md", @@ -19025,7 +19025,7 @@ "x-appwrite": { "method": "delete", "group": "messages", - "weight": 252, + "weight": 249, "cookies": false, "type": "", "demo": "messaging\/delete.md", @@ -19087,7 +19087,7 @@ "x-appwrite": { "method": "listMessageLogs", "group": "logs", - "weight": 246, + "weight": 243, "cookies": false, "type": "", "demo": "messaging\/list-message-logs.md", @@ -19170,7 +19170,7 @@ "x-appwrite": { "method": "listTargets", "group": "messages", - "weight": 247, + "weight": 244, "cookies": false, "type": "", "demo": "messaging\/list-targets.md", @@ -19253,7 +19253,7 @@ "x-appwrite": { "method": "listProviders", "group": "providers", - "weight": 216, + "weight": 213, "cookies": false, "type": "", "demo": "messaging\/list-providers.md", @@ -19339,7 +19339,7 @@ "x-appwrite": { "method": "createApnsProvider", "group": "providers", - "weight": 215, + "weight": 212, "cookies": false, "type": "", "demo": "messaging\/create-apns-provider.md", @@ -19531,7 +19531,7 @@ "x-appwrite": { "method": "updateApnsProvider", "group": "providers", - "weight": 229, + "weight": 226, "cookies": false, "type": "", "demo": "messaging\/update-apns-provider.md", @@ -19720,7 +19720,7 @@ "x-appwrite": { "method": "createFcmProvider", "group": "providers", - "weight": 214, + "weight": 211, "cookies": false, "type": "", "demo": "messaging\/create-fcm-provider.md", @@ -19881,7 +19881,7 @@ "x-appwrite": { "method": "updateFcmProvider", "group": "providers", - "weight": 228, + "weight": 225, "cookies": false, "type": "", "demo": "messaging\/update-fcm-provider.md", @@ -20038,7 +20038,7 @@ "x-appwrite": { "method": "createMailgunProvider", "group": "providers", - "weight": 205, + "weight": 202, "cookies": false, "type": "", "demo": "messaging\/create-mailgun-provider.md", @@ -20171,7 +20171,7 @@ "x-appwrite": { "method": "updateMailgunProvider", "group": "providers", - "weight": 219, + "weight": 216, "cookies": false, "type": "", "demo": "messaging\/update-mailgun-provider.md", @@ -20301,7 +20301,7 @@ "x-appwrite": { "method": "createMsg91Provider", "group": "providers", - "weight": 209, + "weight": 206, "cookies": false, "type": "", "demo": "messaging\/create-msg-91-provider.md", @@ -20407,7 +20407,7 @@ "x-appwrite": { "method": "updateMsg91Provider", "group": "providers", - "weight": 223, + "weight": 220, "cookies": false, "type": "", "demo": "messaging\/update-msg-91-provider.md", @@ -20511,7 +20511,7 @@ "x-appwrite": { "method": "createResendProvider", "group": "providers", - "weight": 207, + "weight": 204, "cookies": false, "type": "", "demo": "messaging\/create-resend-provider.md", @@ -20631,7 +20631,7 @@ "x-appwrite": { "method": "updateResendProvider", "group": "providers", - "weight": 221, + "weight": 218, "cookies": false, "type": "", "demo": "messaging\/update-resend-provider.md", @@ -20748,7 +20748,7 @@ "x-appwrite": { "method": "createSendgridProvider", "group": "providers", - "weight": 206, + "weight": 203, "cookies": false, "type": "", "demo": "messaging\/create-sendgrid-provider.md", @@ -20868,7 +20868,7 @@ "x-appwrite": { "method": "updateSendgridProvider", "group": "providers", - "weight": 220, + "weight": 217, "cookies": false, "type": "", "demo": "messaging\/update-sendgrid-provider.md", @@ -20985,7 +20985,7 @@ "x-appwrite": { "method": "createSmtpProvider", "group": "providers", - "weight": 208, + "weight": 205, "cookies": false, "type": "", "demo": "messaging\/create-smtp-provider.md", @@ -21238,7 +21238,7 @@ "x-appwrite": { "method": "updateSmtpProvider", "group": "providers", - "weight": 222, + "weight": 219, "cookies": false, "type": "", "demo": "messaging\/update-smtp-provider.md", @@ -21485,7 +21485,7 @@ "x-appwrite": { "method": "createTelesignProvider", "group": "providers", - "weight": 210, + "weight": 207, "cookies": false, "type": "", "demo": "messaging\/create-telesign-provider.md", @@ -21592,7 +21592,7 @@ "x-appwrite": { "method": "updateTelesignProvider", "group": "providers", - "weight": 224, + "weight": 221, "cookies": false, "type": "", "demo": "messaging\/update-telesign-provider.md", @@ -21696,7 +21696,7 @@ "x-appwrite": { "method": "createTextmagicProvider", "group": "providers", - "weight": 211, + "weight": 208, "cookies": false, "type": "", "demo": "messaging\/create-textmagic-provider.md", @@ -21803,7 +21803,7 @@ "x-appwrite": { "method": "updateTextmagicProvider", "group": "providers", - "weight": 225, + "weight": 222, "cookies": false, "type": "", "demo": "messaging\/update-textmagic-provider.md", @@ -21907,7 +21907,7 @@ "x-appwrite": { "method": "createTwilioProvider", "group": "providers", - "weight": 212, + "weight": 209, "cookies": false, "type": "", "demo": "messaging\/create-twilio-provider.md", @@ -22014,7 +22014,7 @@ "x-appwrite": { "method": "updateTwilioProvider", "group": "providers", - "weight": 226, + "weight": 223, "cookies": false, "type": "", "demo": "messaging\/update-twilio-provider.md", @@ -22118,7 +22118,7 @@ "x-appwrite": { "method": "createVonageProvider", "group": "providers", - "weight": 213, + "weight": 210, "cookies": false, "type": "", "demo": "messaging\/create-vonage-provider.md", @@ -22225,7 +22225,7 @@ "x-appwrite": { "method": "updateVonageProvider", "group": "providers", - "weight": 227, + "weight": 224, "cookies": false, "type": "", "demo": "messaging\/update-vonage-provider.md", @@ -22327,7 +22327,7 @@ "x-appwrite": { "method": "getProvider", "group": "providers", - "weight": 218, + "weight": 215, "cookies": false, "type": "", "demo": "messaging\/get-provider.md", @@ -22384,7 +22384,7 @@ "x-appwrite": { "method": "deleteProvider", "group": "providers", - "weight": 230, + "weight": 227, "cookies": false, "type": "", "demo": "messaging\/delete-provider.md", @@ -22446,7 +22446,7 @@ "x-appwrite": { "method": "listProviderLogs", "group": "providers", - "weight": 217, + "weight": 214, "cookies": false, "type": "", "demo": "messaging\/list-provider-logs.md", @@ -22529,7 +22529,7 @@ "x-appwrite": { "method": "listSubscriberLogs", "group": "subscribers", - "weight": 239, + "weight": 236, "cookies": false, "type": "", "demo": "messaging\/list-subscriber-logs.md", @@ -22612,7 +22612,7 @@ "x-appwrite": { "method": "listTopics", "group": "topics", - "weight": 232, + "weight": 229, "cookies": false, "type": "", "demo": "messaging\/list-topics.md", @@ -22696,7 +22696,7 @@ "x-appwrite": { "method": "createTopic", "group": "topics", - "weight": 231, + "weight": 228, "cookies": false, "type": "", "demo": "messaging\/create-topic.md", @@ -22786,7 +22786,7 @@ "x-appwrite": { "method": "getTopic", "group": "topics", - "weight": 234, + "weight": 231, "cookies": false, "type": "", "demo": "messaging\/get-topic.md", @@ -22848,7 +22848,7 @@ "x-appwrite": { "method": "updateTopic", "group": "topics", - "weight": 235, + "weight": 232, "cookies": false, "type": "", "demo": "messaging\/update-topic.md", @@ -22931,7 +22931,7 @@ "x-appwrite": { "method": "deleteTopic", "group": "topics", - "weight": 236, + "weight": 233, "cookies": false, "type": "", "demo": "messaging\/delete-topic.md", @@ -22993,7 +22993,7 @@ "x-appwrite": { "method": "listTopicLogs", "group": "topics", - "weight": 233, + "weight": 230, "cookies": false, "type": "", "demo": "messaging\/list-topic-logs.md", @@ -23076,7 +23076,7 @@ "x-appwrite": { "method": "listSubscribers", "group": "subscribers", - "weight": 238, + "weight": 235, "cookies": false, "type": "", "demo": "messaging\/list-subscribers.md", @@ -23168,7 +23168,7 @@ "x-appwrite": { "method": "createSubscriber", "group": "subscribers", - "weight": 237, + "weight": 234, "cookies": false, "type": "", "demo": "messaging\/create-subscriber.md", @@ -23258,7 +23258,7 @@ "x-appwrite": { "method": "getSubscriber", "group": "subscribers", - "weight": 240, + "weight": 237, "cookies": false, "type": "", "demo": "messaging\/get-subscriber.md", @@ -23323,7 +23323,7 @@ "x-appwrite": { "method": "deleteSubscriber", "group": "subscribers", - "weight": 241, + "weight": 238, "cookies": false, "type": "", "demo": "messaging\/delete-subscriber.md", @@ -23396,7 +23396,7 @@ "x-appwrite": { "method": "list", "group": "sites", - "weight": 485, + "weight": 482, "cookies": false, "type": "", "demo": "sites\/list.md", @@ -23479,7 +23479,7 @@ "x-appwrite": { "method": "create", "group": "sites", - "weight": 483, + "weight": 480, "cookies": false, "type": "", "demo": "sites\/create.md", @@ -23752,7 +23752,7 @@ "x-appwrite": { "method": "listFrameworks", "group": "frameworks", - "weight": 488, + "weight": 485, "cookies": false, "type": "", "demo": "sites\/list-frameworks.md", @@ -23803,7 +23803,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "frameworks", - "weight": 511, + "weight": 508, "cookies": false, "type": "", "demo": "sites\/list-specifications.md", @@ -23854,7 +23854,7 @@ "x-appwrite": { "method": "get", "group": "sites", - "weight": 484, + "weight": 481, "cookies": false, "type": "", "demo": "sites\/get.md", @@ -23915,7 +23915,7 @@ "x-appwrite": { "method": "update", "group": "sites", - "weight": 486, + "weight": 483, "cookies": false, "type": "", "demo": "sites\/update.md", @@ -24183,7 +24183,7 @@ "x-appwrite": { "method": "delete", "group": "sites", - "weight": 487, + "weight": 484, "cookies": false, "type": "", "demo": "sites\/delete.md", @@ -24246,7 +24246,7 @@ "x-appwrite": { "method": "updateSiteDeployment", "group": "sites", - "weight": 494, + "weight": 491, "cookies": false, "type": "", "demo": "sites\/update-site-deployment.md", @@ -24325,7 +24325,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 493, + "weight": 490, "cookies": false, "type": "", "demo": "sites\/list-deployments.md", @@ -24416,7 +24416,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 489, + "weight": 486, "cookies": false, "type": "upload", "demo": "sites\/create-deployment.md", @@ -24518,7 +24518,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 497, + "weight": 494, "cookies": false, "type": "", "demo": "sites\/create-duplicate-deployment.md", @@ -24599,7 +24599,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 490, + "weight": 487, "cookies": false, "type": "", "demo": "sites\/create-template-deployment.md", @@ -24721,7 +24721,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 491, + "weight": 488, "cookies": false, "type": "", "demo": "sites\/create-vcs-deployment.md", @@ -24820,7 +24820,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 492, + "weight": 489, "cookies": false, "type": "", "demo": "sites\/get-deployment.md", @@ -24884,7 +24884,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 495, + "weight": 492, "cookies": false, "type": "", "demo": "sites\/delete-deployment.md", @@ -24953,7 +24953,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 496, + "weight": 493, "cookies": false, "type": "location", "demo": "sites\/get-deployment-download.md", @@ -25040,7 +25040,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 498, + "weight": 495, "cookies": false, "type": "", "demo": "sites\/update-deployment-status.md", @@ -25109,7 +25109,7 @@ "x-appwrite": { "method": "listLogs", "group": "logs", - "weight": 500, + "weight": 497, "cookies": false, "type": "", "demo": "sites\/list-logs.md", @@ -25191,7 +25191,7 @@ "x-appwrite": { "method": "getLog", "group": "logs", - "weight": 499, + "weight": 496, "cookies": false, "type": "", "demo": "sites\/get-log.md", @@ -25257,7 +25257,7 @@ "x-appwrite": { "method": "deleteLog", "group": "logs", - "weight": 501, + "weight": 498, "cookies": false, "type": "", "demo": "sites\/delete-log.md", @@ -25326,7 +25326,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 504, + "weight": 501, "cookies": false, "type": "", "demo": "sites\/list-variables.md", @@ -25387,7 +25387,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 502, + "weight": 499, "cookies": false, "type": "", "demo": "sites\/create-variable.md", @@ -25479,7 +25479,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 503, + "weight": 500, "cookies": false, "type": "", "demo": "sites\/get-variable.md", @@ -25548,7 +25548,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 505, + "weight": 502, "cookies": false, "type": "", "demo": "sites\/update-variable.md", @@ -25644,7 +25644,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 506, + "weight": 503, "cookies": false, "type": "", "demo": "sites\/delete-variable.md", @@ -25713,7 +25713,7 @@ "x-appwrite": { "method": "listBuckets", "group": "buckets", - "weight": 538, + "weight": 535, "cookies": false, "type": "", "demo": "storage\/list-buckets.md", @@ -25797,7 +25797,7 @@ "x-appwrite": { "method": "createBucket", "group": "buckets", - "weight": 536, + "weight": 533, "cookies": false, "type": "", "demo": "storage\/create-bucket.md", @@ -25945,7 +25945,7 @@ "x-appwrite": { "method": "getBucket", "group": "buckets", - "weight": 537, + "weight": 534, "cookies": false, "type": "", "demo": "storage\/get-bucket.md", @@ -26007,7 +26007,7 @@ "x-appwrite": { "method": "updateBucket", "group": "buckets", - "weight": 539, + "weight": 536, "cookies": false, "type": "", "demo": "storage\/update-bucket.md", @@ -26151,7 +26151,7 @@ "x-appwrite": { "method": "deleteBucket", "group": "buckets", - "weight": 540, + "weight": 537, "cookies": false, "type": "", "demo": "storage\/delete-bucket.md", @@ -26213,7 +26213,7 @@ "x-appwrite": { "method": "listFiles", "group": "files", - "weight": 543, + "weight": 540, "cookies": false, "type": "", "demo": "storage\/list-files.md", @@ -26308,7 +26308,7 @@ "x-appwrite": { "method": "createFile", "group": "files", - "weight": 541, + "weight": 538, "cookies": false, "type": "upload", "demo": "storage\/create-file.md", @@ -26401,7 +26401,7 @@ "x-appwrite": { "method": "getFile", "group": "files", - "weight": 542, + "weight": 539, "cookies": false, "type": "", "demo": "storage\/get-file.md", @@ -26474,7 +26474,7 @@ "x-appwrite": { "method": "updateFile", "group": "files", - "weight": 544, + "weight": 541, "cookies": false, "type": "", "demo": "storage\/update-file.md", @@ -26567,7 +26567,7 @@ "x-appwrite": { "method": "deleteFile", "group": "files", - "weight": 545, + "weight": 542, "cookies": false, "type": "", "demo": "storage\/delete-file.md", @@ -26640,7 +26640,7 @@ "x-appwrite": { "method": "getFileDownload", "group": "files", - "weight": 547, + "weight": 544, "cookies": false, "type": "location", "demo": "storage\/get-file-download.md", @@ -26722,7 +26722,7 @@ "x-appwrite": { "method": "getFilePreview", "group": "files", - "weight": 546, + "weight": 543, "cookies": false, "type": "location", "demo": "storage\/get-file-preview.md", @@ -26932,7 +26932,7 @@ "x-appwrite": { "method": "getFileView", "group": "files", - "weight": 548, + "weight": 545, "cookies": false, "type": "location", "demo": "storage\/get-file-view.md", @@ -27014,7 +27014,7 @@ "x-appwrite": { "method": "list", "group": "tablesdb", - "weight": 352, + "weight": 349, "cookies": false, "type": "", "demo": "tablesdb\/list.md", @@ -27098,7 +27098,7 @@ "x-appwrite": { "method": "create", "group": "tablesdb", - "weight": 348, + "weight": 345, "cookies": false, "type": "", "demo": "tablesdb\/create.md", @@ -27183,7 +27183,7 @@ "x-appwrite": { "method": "listTransactions", "group": "transactions", - "weight": 419, + "weight": 416, "cookies": false, "type": "", "demo": "tablesdb\/list-transactions.md", @@ -27255,7 +27255,7 @@ "x-appwrite": { "method": "createTransaction", "group": "transactions", - "weight": 415, + "weight": 412, "cookies": false, "type": "", "demo": "tablesdb\/create-transaction.md", @@ -27331,7 +27331,7 @@ "x-appwrite": { "method": "getTransaction", "group": "transactions", - "weight": 416, + "weight": 413, "cookies": false, "type": "", "demo": "tablesdb\/get-transaction.md", @@ -27399,7 +27399,7 @@ "x-appwrite": { "method": "updateTransaction", "group": "transactions", - "weight": 417, + "weight": 414, "cookies": false, "type": "", "demo": "tablesdb\/update-transaction.md", @@ -27483,7 +27483,7 @@ "x-appwrite": { "method": "deleteTransaction", "group": "transactions", - "weight": 418, + "weight": 415, "cookies": false, "type": "", "demo": "tablesdb\/delete-transaction.md", @@ -27553,7 +27553,7 @@ "x-appwrite": { "method": "createOperations", "group": "transactions", - "weight": 420, + "weight": 417, "cookies": false, "type": "", "demo": "tablesdb\/create-operations.md", @@ -27639,7 +27639,7 @@ "x-appwrite": { "method": "get", "group": "tablesdb", - "weight": 349, + "weight": 346, "cookies": false, "type": "", "demo": "tablesdb\/get.md", @@ -27701,7 +27701,7 @@ "x-appwrite": { "method": "update", "group": "tablesdb", - "weight": 350, + "weight": 347, "cookies": false, "type": "", "demo": "tablesdb\/update.md", @@ -27779,7 +27779,7 @@ "x-appwrite": { "method": "delete", "group": "tablesdb", - "weight": 351, + "weight": 348, "cookies": false, "type": "", "demo": "tablesdb\/delete.md", @@ -27841,7 +27841,7 @@ "x-appwrite": { "method": "listTables", "group": "tables", - "weight": 359, + "weight": 356, "cookies": false, "type": "", "demo": "tablesdb\/list-tables.md", @@ -27936,7 +27936,7 @@ "x-appwrite": { "method": "createTable", "group": "tables", - "weight": 355, + "weight": 352, "cookies": false, "type": "", "demo": "tablesdb\/create-table.md", @@ -28066,7 +28066,7 @@ "x-appwrite": { "method": "getTable", "group": "tables", - "weight": 356, + "weight": 353, "cookies": false, "type": "", "demo": "tablesdb\/get-table.md", @@ -28139,7 +28139,7 @@ "x-appwrite": { "method": "updateTable", "group": "tables", - "weight": 357, + "weight": 354, "cookies": false, "type": "", "demo": "tablesdb\/update-table.md", @@ -28244,7 +28244,7 @@ "x-appwrite": { "method": "deleteTable", "group": "tables", - "weight": 358, + "weight": 355, "cookies": false, "type": "", "demo": "tablesdb\/delete-table.md", @@ -28317,7 +28317,7 @@ "x-appwrite": { "method": "listColumns", "group": "columns", - "weight": 364, + "weight": 361, "cookies": false, "type": "", "demo": "tablesdb\/list-columns.md", @@ -28413,7 +28413,7 @@ "x-appwrite": { "method": "createBooleanColumn", "group": "columns", - "weight": 365, + "weight": 362, "cookies": false, "type": "", "demo": "tablesdb\/create-boolean-column.md", @@ -28526,7 +28526,7 @@ "x-appwrite": { "method": "updateBooleanColumn", "group": "columns", - "weight": 366, + "weight": 363, "cookies": false, "type": "", "demo": "tablesdb\/update-boolean-column.md", @@ -28641,7 +28641,7 @@ "x-appwrite": { "method": "createDatetimeColumn", "group": "columns", - "weight": 367, + "weight": 364, "cookies": false, "type": "", "demo": "tablesdb\/create-datetime-column.md", @@ -28754,7 +28754,7 @@ "x-appwrite": { "method": "updateDatetimeColumn", "group": "columns", - "weight": 368, + "weight": 365, "cookies": false, "type": "", "demo": "tablesdb\/update-datetime-column.md", @@ -28869,7 +28869,7 @@ "x-appwrite": { "method": "createEmailColumn", "group": "columns", - "weight": 369, + "weight": 366, "cookies": false, "type": "", "demo": "tablesdb\/create-email-column.md", @@ -28983,7 +28983,7 @@ "x-appwrite": { "method": "updateEmailColumn", "group": "columns", - "weight": 370, + "weight": 367, "cookies": false, "type": "", "demo": "tablesdb\/update-email-column.md", @@ -29099,7 +29099,7 @@ "x-appwrite": { "method": "createEnumColumn", "group": "columns", - "weight": 371, + "weight": 368, "cookies": false, "type": "", "demo": "tablesdb\/create-enum-column.md", @@ -29222,7 +29222,7 @@ "x-appwrite": { "method": "updateEnumColumn", "group": "columns", - "weight": 372, + "weight": 369, "cookies": false, "type": "", "demo": "tablesdb\/update-enum-column.md", @@ -29347,7 +29347,7 @@ "x-appwrite": { "method": "createFloatColumn", "group": "columns", - "weight": 373, + "weight": 370, "cookies": false, "type": "", "demo": "tablesdb\/create-float-column.md", @@ -29477,7 +29477,7 @@ "x-appwrite": { "method": "updateFloatColumn", "group": "columns", - "weight": 374, + "weight": 371, "cookies": false, "type": "", "demo": "tablesdb\/update-float-column.md", @@ -29609,7 +29609,7 @@ "x-appwrite": { "method": "createIntegerColumn", "group": "columns", - "weight": 375, + "weight": 372, "cookies": false, "type": "", "demo": "tablesdb\/create-integer-column.md", @@ -29739,7 +29739,7 @@ "x-appwrite": { "method": "updateIntegerColumn", "group": "columns", - "weight": 376, + "weight": 373, "cookies": false, "type": "", "demo": "tablesdb\/update-integer-column.md", @@ -29871,7 +29871,7 @@ "x-appwrite": { "method": "createIpColumn", "group": "columns", - "weight": 377, + "weight": 374, "cookies": false, "type": "", "demo": "tablesdb\/create-ip-column.md", @@ -29984,7 +29984,7 @@ "x-appwrite": { "method": "updateIpColumn", "group": "columns", - "weight": 378, + "weight": 375, "cookies": false, "type": "", "demo": "tablesdb\/update-ip-column.md", @@ -30099,7 +30099,7 @@ "x-appwrite": { "method": "createLineColumn", "group": "columns", - "weight": 379, + "weight": 376, "cookies": false, "type": "", "demo": "tablesdb\/create-line-column.md", @@ -30206,7 +30206,7 @@ "x-appwrite": { "method": "updateLineColumn", "group": "columns", - "weight": 380, + "weight": 377, "cookies": false, "type": "", "demo": "tablesdb\/update-line-column.md", @@ -30320,7 +30320,7 @@ "x-appwrite": { "method": "createLongtextColumn", "group": "columns", - "weight": 397, + "weight": 394, "cookies": false, "type": "", "demo": "tablesdb\/create-longtext-column.md", @@ -30433,7 +30433,7 @@ "x-appwrite": { "method": "updateLongtextColumn", "group": "columns", - "weight": 398, + "weight": 395, "cookies": false, "type": "", "demo": "tablesdb\/update-longtext-column.md", @@ -30548,7 +30548,7 @@ "x-appwrite": { "method": "createMediumtextColumn", "group": "columns", - "weight": 395, + "weight": 392, "cookies": false, "type": "", "demo": "tablesdb\/create-mediumtext-column.md", @@ -30661,7 +30661,7 @@ "x-appwrite": { "method": "updateMediumtextColumn", "group": "columns", - "weight": 396, + "weight": 393, "cookies": false, "type": "", "demo": "tablesdb\/update-mediumtext-column.md", @@ -30776,7 +30776,7 @@ "x-appwrite": { "method": "createPointColumn", "group": "columns", - "weight": 381, + "weight": 378, "cookies": false, "type": "", "demo": "tablesdb\/create-point-column.md", @@ -30883,7 +30883,7 @@ "x-appwrite": { "method": "updatePointColumn", "group": "columns", - "weight": 382, + "weight": 379, "cookies": false, "type": "", "demo": "tablesdb\/update-point-column.md", @@ -30997,7 +30997,7 @@ "x-appwrite": { "method": "createPolygonColumn", "group": "columns", - "weight": 383, + "weight": 380, "cookies": false, "type": "", "demo": "tablesdb\/create-polygon-column.md", @@ -31104,7 +31104,7 @@ "x-appwrite": { "method": "updatePolygonColumn", "group": "columns", - "weight": 384, + "weight": 381, "cookies": false, "type": "", "demo": "tablesdb\/update-polygon-column.md", @@ -31218,7 +31218,7 @@ "x-appwrite": { "method": "createRelationshipColumn", "group": "columns", - "weight": 385, + "weight": 382, "cookies": false, "type": "", "demo": "tablesdb\/create-relationship-column.md", @@ -31359,7 +31359,7 @@ "x-appwrite": { "method": "createStringColumn", "group": "columns", - "weight": 387, + "weight": 384, "cookies": false, "type": "", "demo": "tablesdb\/create-string-column.md", @@ -31490,7 +31490,7 @@ "x-appwrite": { "method": "updateStringColumn", "group": "columns", - "weight": 388, + "weight": 385, "cookies": false, "type": "", "demo": "tablesdb\/update-string-column.md", @@ -31617,7 +31617,7 @@ "x-appwrite": { "method": "createTextColumn", "group": "columns", - "weight": 393, + "weight": 390, "cookies": false, "type": "", "demo": "tablesdb\/create-text-column.md", @@ -31730,7 +31730,7 @@ "x-appwrite": { "method": "updateTextColumn", "group": "columns", - "weight": 394, + "weight": 391, "cookies": false, "type": "", "demo": "tablesdb\/update-text-column.md", @@ -31845,7 +31845,7 @@ "x-appwrite": { "method": "createUrlColumn", "group": "columns", - "weight": 389, + "weight": 386, "cookies": false, "type": "", "demo": "tablesdb\/create-url-column.md", @@ -31959,7 +31959,7 @@ "x-appwrite": { "method": "updateUrlColumn", "group": "columns", - "weight": 390, + "weight": 387, "cookies": false, "type": "", "demo": "tablesdb\/update-url-column.md", @@ -32075,7 +32075,7 @@ "x-appwrite": { "method": "createVarcharColumn", "group": "columns", - "weight": 391, + "weight": 388, "cookies": false, "type": "", "demo": "tablesdb\/create-varchar-column.md", @@ -32196,7 +32196,7 @@ "x-appwrite": { "method": "updateVarcharColumn", "group": "columns", - "weight": 392, + "weight": 389, "cookies": false, "type": "", "demo": "tablesdb\/update-varchar-column.md", @@ -32348,7 +32348,7 @@ "x-appwrite": { "method": "getColumn", "group": "columns", - "weight": 362, + "weight": 359, "cookies": false, "type": "", "demo": "tablesdb\/get-column.md", @@ -32423,7 +32423,7 @@ "x-appwrite": { "method": "deleteColumn", "group": "columns", - "weight": 363, + "weight": 360, "cookies": false, "type": "", "demo": "tablesdb\/delete-column.md", @@ -32505,7 +32505,7 @@ "x-appwrite": { "method": "updateRelationshipColumn", "group": "columns", - "weight": 386, + "weight": 383, "cookies": false, "type": "", "demo": "tablesdb\/update-relationship-column.md", @@ -32615,7 +32615,7 @@ "x-appwrite": { "method": "listIndexes", "group": "indexes", - "weight": 402, + "weight": 399, "cookies": false, "type": "", "demo": "tablesdb\/list-indexes.md", @@ -32709,7 +32709,7 @@ "x-appwrite": { "method": "createIndex", "group": "indexes", - "weight": 399, + "weight": 396, "cookies": false, "type": "", "demo": "tablesdb\/create-index.md", @@ -32849,7 +32849,7 @@ "x-appwrite": { "method": "getIndex", "group": "indexes", - "weight": 400, + "weight": 397, "cookies": false, "type": "", "demo": "tablesdb\/get-index.md", @@ -32924,7 +32924,7 @@ "x-appwrite": { "method": "deleteIndex", "group": "indexes", - "weight": 401, + "weight": 398, "cookies": false, "type": "", "demo": "tablesdb\/delete-index.md", @@ -33004,7 +33004,7 @@ "x-appwrite": { "method": "listRows", "group": "rows", - "weight": 411, + "weight": 408, "cookies": false, "type": "", "demo": "tablesdb\/list-rows.md", @@ -33109,7 +33109,7 @@ "x-appwrite": { "method": "createRow", "group": "rows", - "weight": 403, + "weight": 400, "cookies": false, "type": "", "demo": "tablesdb\/create-row.md", @@ -33295,7 +33295,7 @@ "x-appwrite": { "method": "upsertRows", "group": "rows", - "weight": 408, + "weight": 405, "cookies": false, "type": "", "demo": "tablesdb\/upsert-rows.md", @@ -33427,7 +33427,7 @@ "x-appwrite": { "method": "updateRows", "group": "rows", - "weight": 406, + "weight": 403, "cookies": false, "type": "", "demo": "tablesdb\/update-rows.md", @@ -33531,7 +33531,7 @@ "x-appwrite": { "method": "deleteRows", "group": "rows", - "weight": 410, + "weight": 407, "cookies": false, "type": "", "demo": "tablesdb\/delete-rows.md", @@ -33629,7 +33629,7 @@ "x-appwrite": { "method": "getRow", "group": "rows", - "weight": 404, + "weight": 401, "cookies": false, "type": "", "demo": "tablesdb\/get-row.md", @@ -33733,7 +33733,7 @@ "x-appwrite": { "method": "upsertRow", "group": "rows", - "weight": 407, + "weight": 404, "cookies": false, "type": "", "demo": "tablesdb\/upsert-row.md", @@ -33882,7 +33882,7 @@ "x-appwrite": { "method": "updateRow", "group": "rows", - "weight": 405, + "weight": 402, "cookies": false, "type": "", "demo": "tablesdb\/update-row.md", @@ -33993,7 +33993,7 @@ "x-appwrite": { "method": "deleteRow", "group": "rows", - "weight": 409, + "weight": 406, "cookies": false, "type": "", "demo": "tablesdb\/delete-row.md", @@ -34095,7 +34095,7 @@ "x-appwrite": { "method": "decrementRowColumn", "group": "rows", - "weight": 414, + "weight": 411, "cookies": false, "type": "", "demo": "tablesdb\/decrement-row-column.md", @@ -34219,7 +34219,7 @@ "x-appwrite": { "method": "incrementRowColumn", "group": "rows", - "weight": 413, + "weight": 410, "cookies": false, "type": "", "demo": "tablesdb\/increment-row-column.md", @@ -35437,7 +35437,7 @@ "x-appwrite": { "method": "list", "group": "files", - "weight": 533, + "weight": 530, "cookies": false, "type": "", "demo": "tokens\/list.md", @@ -35527,7 +35527,7 @@ "x-appwrite": { "method": "createFileToken", "group": "files", - "weight": 531, + "weight": 528, "cookies": false, "type": "", "demo": "tokens\/create-file-token.md", @@ -35612,7 +35612,7 @@ "x-appwrite": { "method": "get", "group": "tokens", - "weight": 532, + "weight": 529, "cookies": false, "type": "", "demo": "tokens\/get.md", @@ -35673,7 +35673,7 @@ "x-appwrite": { "method": "update", "group": "tokens", - "weight": 534, + "weight": 531, "cookies": false, "type": "", "demo": "tokens\/update.md", @@ -35745,7 +35745,7 @@ "x-appwrite": { "method": "delete", "group": "tokens", - "weight": 535, + "weight": 532, "cookies": false, "type": "", "demo": "tokens\/delete.md", @@ -40889,6 +40889,18 @@ "$ref": "#\/definitions\/index" }, "x-example": {} + }, + "bytesMax": { + "type": "integer", + "description": "Maximum document size in bytes. Returns 0 when no limit applies.", + "x-example": 65535, + "format": "int32" + }, + "bytesUsed": { + "type": "integer", + "description": "Currently used document size in bytes based on defined attributes.", + "x-example": 1500, + "format": "int32" } }, "required": [ @@ -40901,7 +40913,9 @@ "enabled", "documentSecurity", "attributes", - "indexes" + "indexes", + "bytesMax", + "bytesUsed" ], "example": { "$id": "5e5ea5c16897e", @@ -40915,7 +40929,9 @@ "enabled": false, "documentSecurity": true, "attributes": {}, - "indexes": {} + "indexes": {}, + "bytesMax": 65535, + "bytesUsed": 1500 } }, "attributeList": { @@ -42683,6 +42699,18 @@ "$ref": "#\/definitions\/columnIndex" }, "x-example": {} + }, + "bytesMax": { + "type": "integer", + "description": "Maximum row size in bytes. Returns 0 when no limit applies.", + "x-example": 65535, + "format": "int32" + }, + "bytesUsed": { + "type": "integer", + "description": "Currently used row size in bytes based on defined columns.", + "x-example": 1500, + "format": "int32" } }, "required": [ @@ -42695,7 +42723,9 @@ "enabled", "rowSecurity", "columns", - "indexes" + "indexes", + "bytesMax", + "bytesUsed" ], "example": { "$id": "5e5ea5c16897e", @@ -42709,7 +42739,9 @@ "enabled": false, "rowSecurity": true, "columns": {}, - "indexes": {} + "indexes": {}, + "bytesMax": 65535, + "bytesUsed": 1500 } }, "columnList": { From af5c0da1d92a510524df77a703534e5e176bc5fb Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Thu, 5 Feb 2026 17:05:22 +0530 Subject: [PATCH 44/65] release cli sdk 13.3.0 --- app/config/sdks.php | 2 +- composer.lock | 14 +++++++------- docs/sdks/cli/CHANGELOG.md | 5 +++++ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/app/config/sdks.php b/app/config/sdks.php index df1db80e5d..de69acb984 100644 --- a/app/config/sdks.php +++ b/app/config/sdks.php @@ -227,7 +227,7 @@ return [ [ 'key' => 'cli', 'name' => 'Command Line', - 'version' => '13.2.1', + 'version' => '13.3.0', 'url' => 'https://github.com/appwrite/sdk-for-cli', 'package' => 'https://www.npmjs.com/package/appwrite-cli', 'enabled' => true, diff --git a/composer.lock b/composer.lock index e18149bd34..180f4095b2 100644 --- a/composer.lock +++ b/composer.lock @@ -5654,16 +5654,16 @@ "packages-dev": [ { "name": "appwrite/sdk-generator", - "version": "1.8.24", + "version": "1.8.25", "source": { "type": "git", "url": "https://github.com/appwrite/sdk-generator.git", - "reference": "6bfe521d2b6762d1da94c234f6ef4eab54e5e269" + "reference": "5c75fda3410fe97387ef8e1920b583ef48849d7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/6bfe521d2b6762d1da94c234f6ef4eab54e5e269", - "reference": "6bfe521d2b6762d1da94c234f6ef4eab54e5e269", + "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/5c75fda3410fe97387ef8e1920b583ef48849d7d", + "reference": "5c75fda3410fe97387ef8e1920b583ef48849d7d", "shasum": "" }, "require": { @@ -5699,9 +5699,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/1.8.24" + "source": "https://github.com/appwrite/sdk-generator/tree/1.8.25" }, - "time": "2026-02-04T04:42:05+00:00" + "time": "2026-02-05T09:40:07+00:00" }, { "name": "doctrine/annotations", @@ -9184,5 +9184,5 @@ "platform-overrides": { "php": "8.3" }, - "plugin-api-version": "2.9.0" + "plugin-api-version": "2.6.0" } diff --git a/docs/sdks/cli/CHANGELOG.md b/docs/sdks/cli/CHANGELOG.md index fb78f638c0..b22a2ecaec 100644 --- a/docs/sdks/cli/CHANGELOG.md +++ b/docs/sdks/cli/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log +## 13.3.0 + +- Support type generation for text/varchar/mediumtext/longtext attributes +- Improve CLI session switch and logout UX + ## 13.2.1 - Fix site domain construction From 45e74d7b3db615b8050e27f4b62a673b1aefda4a Mon Sep 17 00:00:00 2001 From: Hemachandar Date: Fri, 6 Feb 2026 00:14:15 +0530 Subject: [PATCH 45/65] rule --- src/Appwrite/Platform/Tasks/SSL.php | 79 +++++++++++++++-------------- 1 file changed, 41 insertions(+), 38 deletions(-) diff --git a/src/Appwrite/Platform/Tasks/SSL.php b/src/Appwrite/Platform/Tasks/SSL.php index 514e2b670a..699a09972e 100644 --- a/src/Appwrite/Platform/Tasks/SSL.php +++ b/src/Appwrite/Platform/Tasks/SSL.php @@ -50,51 +50,54 @@ class SSL extends Action Query::equal('domain', [$domain->get()]), ]); - if (!$rule->isEmpty()) { - Console::warning('Rule ' . $rule->getId() . ' already exists for domain: ' . $domain->get()); - return; - } + if ($rule->isEmpty()) { + $owner = ''; - $owner = ''; - - // Mark owner as Appwrite if its appwrite-owned domain - $appwriteDomains = []; - $appwriteDomainEnvs = [ - System::getEnv('_APP_DOMAIN_FUNCTIONS_FALLBACK', ''), - System::getEnv('_APP_DOMAIN_FUNCTIONS', ''), - System::getEnv('_APP_DOMAIN_SITES', ''), - ]; - foreach ($appwriteDomainEnvs as $appwriteDomainEnv) { - foreach (\explode(',', $appwriteDomainEnv) as $appwriteDomain) { - if (empty($appwriteDomain)) { - continue; + // Mark owner as Appwrite if its appwrite-owned domain + $appwriteDomains = []; + $appwriteDomainEnvs = [ + System::getEnv('_APP_DOMAIN_FUNCTIONS_FALLBACK', ''), + System::getEnv('_APP_DOMAIN_FUNCTIONS', ''), + System::getEnv('_APP_DOMAIN_SITES', ''), + ]; + foreach ($appwriteDomainEnvs as $appwriteDomainEnv) { + foreach (\explode(',', $appwriteDomainEnv) as $appwriteDomain) { + if (empty($appwriteDomain)) { + continue; + } + $appwriteDomains[] = $appwriteDomain; } - $appwriteDomains[] = $appwriteDomain; } - } - foreach ($appwriteDomains as $appwriteDomain) { - if (\str_ends_with($domain->get(), $appwriteDomain)) { - $owner = 'Appwrite'; - break; + foreach ($appwriteDomains as $appwriteDomain) { + if (\str_ends_with($domain->get(), $appwriteDomain)) { + $owner = 'Appwrite'; + break; + } } + + $ruleId = $isMd5 ? md5($domain->get()) : ID::unique(); + $rule = $dbForPlatform->createDocument('rules', new Document([ + '$id' => $ruleId, + 'domain' => $domain->get(), + 'type' => 'api', + 'status' => RULE_STATUS_CERTIFICATE_GENERATING, + 'projectId' => $console->getId(), + 'projectInternalId' => $console->getSequence(), + 'search' => implode(' ', [$ruleId, $domain->get()]), + 'owner' => $owner, + 'region' => $console->getAttribute('region') + ])); + + Console::info('Rule ' . $rule->getId() . ' created for domain: ' . $domain->get()); + } else { + $rule = $dbForPlatform->updateDocument('rules', $rule->getId(), new Document([ + 'status' => RULE_STATUS_CERTIFICATE_GENERATING, + ])); + + Console::info('Updated existing rule ' . $rule->getId() . ' for domain: ' . $domain->get()); } - $ruleId = $isMd5 ? md5($domain->get()) : ID::unique(); - $rule = $dbForPlatform->createDocument('rules', new Document([ - '$id' => $ruleId, - 'domain' => $domain->get(), - 'type' => 'api', - 'status' => RULE_STATUS_CERTIFICATE_GENERATING, - 'projectId' => $console->getId(), - 'projectInternalId' => $console->getSequence(), - 'search' => implode(' ', [$ruleId, $domain->get()]), - 'owner' => $owner, - 'region' => $console->getAttribute('region') - ])); - - Console::info('Rule ' . $rule->getId() . ' created for domain: ' . $domain->get()); - $queueForCertificates ->setDomain(new Document([ 'domain' => $domain->get() From 90f10ce685e79386150ada9859cbf3fee231d756 Mon Sep 17 00:00:00 2001 From: fogelito Date: Fri, 6 Feb 2026 07:13:39 +0200 Subject: [PATCH 46/65] Use https --- src/Appwrite/Platform/Workers/Migrations.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Appwrite/Platform/Workers/Migrations.php b/src/Appwrite/Platform/Workers/Migrations.php index 7f112e2414..649f62609b 100644 --- a/src/Appwrite/Platform/Workers/Migrations.php +++ b/src/Appwrite/Platform/Workers/Migrations.php @@ -481,7 +481,6 @@ class Migrations extends Action array $platform, Authorization $authorization, ): void { - $credentials = $migration->getAttribute('credentials', []); $options = $migration->getAttribute('options', []); $bucketId = 'default'; // Always use platform default bucket $filename = $options['filename'] ?? 'export_' . \time(); @@ -577,8 +576,11 @@ class Migrations extends Action ]); // Generate download URL with JWT + $endpoint = System::getEnv('_APP_DOMAIN', ''); + $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS', 'disabled') === 'enabled' ? 'https' : 'http'; + + $downloadUrl = "{$protocol}://{$endpoint}/v1/storage/buckets/{$bucketId}/files/{$fileId}/push?project={$project->getId()}&jwt={$jwt}"; - $downloadUrl = "{$credentials['endpoint']}/storage/buckets/{$bucketId}/files/{$fileId}/push?project={$project->getId()}&jwt={$jwt}"; $options['downloadUrl'] = $downloadUrl; $migration->setAttribute('options', $options); $this->updateMigrationDocument($migration, $project, $queueForRealtime); From 455004a536d2be46d9986c36a2a7f462e4582226 Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Fri, 6 Feb 2026 15:04:29 +0530 Subject: [PATCH 47/65] chore: upgrade spomky-labs/otphp to latest --- app/http.php | 2 +- composer.json | 2 +- composer.lock | 333 +++++++++++++------------------------------------- 3 files changed, 88 insertions(+), 249 deletions(-) diff --git a/app/http.php b/app/http.php index 333f6d4de2..ae3f6c5341 100644 --- a/app/http.php +++ b/app/http.php @@ -181,7 +181,7 @@ $http->on(Constant::EVENT_AFTER_RELOAD, function ($server) { include __DIR__ . '/controllers/general.php'; -function createDatabase(Http $app, string $resourceKey, string $dbName, array $collections, mixed $pools, callable $extraSetup = null): void +function createDatabase(Http $app, string $resourceKey, string $dbName, array $collections, mixed $pools, ?callable $extraSetup = null): void { $max = 10; $sleep = 1; diff --git a/composer.json b/composer.json index d42dcc63c4..b68c632796 100644 --- a/composer.json +++ b/composer.json @@ -82,7 +82,7 @@ "phpmailer/phpmailer": "6.9.*", "chillerlan/php-qrcode": "4.4.*", "adhocore/jwt": "1.1.*", - "spomky-labs/otphp": "10.0.*", + "spomky-labs/otphp": "^11.4.2", "webonyx/graphql-php": "14.11.*", "league/csv": "9.24.*", "enshrined/svg-sanitize": "0.22.*" diff --git a/composer.lock b/composer.lock index 180f4095b2..477bae6a31 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": "78db79de4948322d4e6307f9eb9a74a6", + "content-hash": "647d248df5990c3470fe85b7cce60498", "packages": [ { "name": "adhocore/jwt", @@ -214,73 +214,6 @@ }, "time": "2025-11-11T13:44:44+00:00" }, - { - "name": "beberlei/assert", - "version": "v3.3.3", - "source": { - "type": "git", - "url": "https://github.com/beberlei/assert.git", - "reference": "b5fd8eacd8915a1b627b8bfc027803f1939734dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/b5fd8eacd8915a1b627b8bfc027803f1939734dd", - "reference": "b5fd8eacd8915a1b627b8bfc027803f1939734dd", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-json": "*", - "ext-mbstring": "*", - "ext-simplexml": "*", - "php": "^7.1 || ^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.3" - }, - "time": "2024-07-15T13:18:35+00:00" - }, { "name": "brick/math", "version": "0.14.6", @@ -1708,24 +1641,26 @@ }, { "name": "paragonie/constant_time_encoding", - "version": "v2.8.2", + "version": "v3.1.3", "source": { "type": "git", "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "e30811f7bc69e4b5b6d5783e712c06c8eabf0226" + "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/e30811f7bc69e4b5b6d5783e712c06c8eabf0226", - "reference": "e30811f7bc69e4b5b6d5783e712c06c8eabf0226", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", + "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", "shasum": "" }, "require": { - "php": "^7|^8" + "php": "^8" }, "require-dev": { - "phpunit/phpunit": "^6|^7|^8|^9", - "vimeo/psalm": "^1|^2|^3|^4" + "infection/infection": "^0", + "nikic/php-fuzzer": "^0", + "phpunit/phpunit": "^9|^10|^11", + "vimeo/psalm": "^4|^5|^6" }, "type": "library", "autoload": { @@ -1771,7 +1706,7 @@ "issues": "https://github.com/paragonie/constant_time_encoding/issues", "source": "https://github.com/paragonie/constant_time_encoding" }, - "time": "2025-09-24T15:12:37+00:00" + "time": "2025-09-24T15:06:41+00:00" }, { "name": "paragonie/random_compat", @@ -2174,6 +2109,54 @@ ], "time": "2026-01-27T09:17:28+00:00" }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, { "name": "psr/container", "version": "2.0.2", @@ -2593,43 +2576,28 @@ }, { "name": "spomky-labs/otphp", - "version": "v10.0.3", + "version": "11.4.2", "source": { "type": "git", "url": "https://github.com/Spomky-Labs/otphp.git", - "reference": "9784d9f7c790eed26e102d6c78f12c754036c366" + "reference": "2a1b503fd1c1a5c751ab3c5cd37f2d2d26ab74ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/9784d9f7c790eed26e102d6c78f12c754036c366", - "reference": "9784d9f7c790eed26e102d6c78f12c754036c366", + "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/2a1b503fd1c1a5c751ab3c5cd37f2d2d26ab74ad", + "reference": "2a1b503fd1c1a5c751ab3c5cd37f2d2d26ab74ad", "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" + "paragonie/constant_time_encoding": "^2.0 || ^3.0", + "php": ">=8.1", + "psr/clock": "^1.0", + "symfony/deprecation-contracts": "^3.2" }, "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" + "symfony/error-handler": "^6.4|^7.0|^8.0" }, "type": "library", - "extra": { - "branch-alias": { - "v8.3": "8.3.x-dev", - "v9.0": "9.0.x-dev", - "v10.0": "10.0.x-dev" - } - }, "autoload": { "psr-4": { "OTPHP\\": "src/" @@ -2662,9 +2630,19 @@ ], "support": { "issues": "https://github.com/Spomky-Labs/otphp/issues", - "source": "https://github.com/Spomky-Labs/otphp/tree/v10.0.3" + "source": "https://github.com/Spomky-Labs/otphp/tree/11.4.2" }, - "time": "2022-03-17T08:00:35+00:00" + "funding": [ + { + "url": "https://github.com/Spomky", + "type": "github" + }, + { + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" + } + ], + "time": "2026-01-23T10:53:01+00:00" }, { "name": "symfony/deprecation-contracts", @@ -3376,145 +3354,6 @@ }, "time": "2025-06-29T15:42:06+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": "1.2.2", @@ -4626,16 +4465,16 @@ }, { "name": "utopia-php/migration", - "version": "1.5.0", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/utopia-php/migration.git", - "reference": "0d6e77748ca7d9302a88953751bd89d577610afd" + "reference": "b5fe19804b41d5bdd85571e7cdb83a268b6859e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/migration/zipball/0d6e77748ca7d9302a88953751bd89d577610afd", - "reference": "0d6e77748ca7d9302a88953751bd89d577610afd", + "url": "https://api.github.com/repos/utopia-php/migration/zipball/b5fe19804b41d5bdd85571e7cdb83a268b6859e2", + "reference": "b5fe19804b41d5bdd85571e7cdb83a268b6859e2", "shasum": "" }, "require": { @@ -4676,9 +4515,9 @@ ], "support": { "issues": "https://github.com/utopia-php/migration/issues", - "source": "https://github.com/utopia-php/migration/tree/1.5.0" + "source": "https://github.com/utopia-php/migration/tree/1.5.1" }, - "time": "2026-02-02T10:42:04+00:00" + "time": "2026-02-05T11:32:03+00:00" }, { "name": "utopia-php/mongo", From ec418e60b77d77a45fc0590e828c9a520f947bd4 Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Fri, 6 Feb 2026 09:32:01 +0000 Subject: [PATCH 48/65] chore: remove auth skip from workers --- src/Appwrite/Platform/Workers/Certificates.php | 12 ++++++------ src/Appwrite/Platform/Workers/Migrations.php | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Appwrite/Platform/Workers/Certificates.php b/src/Appwrite/Platform/Workers/Certificates.php index 4f898c7e98..a726647ec4 100644 --- a/src/Appwrite/Platform/Workers/Certificates.php +++ b/src/Appwrite/Platform/Workers/Certificates.php @@ -153,11 +153,11 @@ class Certificates extends Action ): void { // Get rule $rule = System::getEnv('_APP_RULES_FORMAT') === 'md5' - ? $authorization->skip(fn () => $dbForPlatform->getDocument('rules', md5($domain->get()))) - : $authorization->skip(fn () => $dbForPlatform->findOne('rules', [ + ? $dbForPlatform->getDocument('rules', md5($domain->get())) + : $dbForPlatform->findOne('rules', [ Query::equal('domain', [$domain->get()]), Query::limit(1), - ])); + ]); // Skip if rule is not desired state (created but not verified yet). if ($rule->getAttribute('status', '') !== RULE_STATUS_CREATED) { @@ -269,11 +269,11 @@ class Certificates extends Action // Get rule document for domain // TODO: (@Meldiron) Remove after 1.7.x migration $rule = System::getEnv('_APP_RULES_FORMAT') === 'md5' - ? $authorization->skip(fn () => $dbForPlatform->getDocument('rules', md5($domain->get()))) - : $authorization->skip(fn () => $dbForPlatform->findOne('rules', [ + ? $dbForPlatform->getDocument('rules', md5($domain->get())) + : $dbForPlatform->findOne('rules', [ Query::equal('domain', [$domain->get()]), Query::limit(1), - ])); + ]); // Rule not found (or) not in the expected state if ($rule->isEmpty() || !\in_array($rule->getAttribute('status'), [RULE_STATUS_CERTIFICATE_GENERATING, RULE_STATUS_VERIFIED])) { diff --git a/src/Appwrite/Platform/Workers/Migrations.php b/src/Appwrite/Platform/Workers/Migrations.php index 649f62609b..edda34cf5a 100644 --- a/src/Appwrite/Platform/Workers/Migrations.php +++ b/src/Appwrite/Platform/Workers/Migrations.php @@ -493,7 +493,7 @@ class Migrations extends Action throw new \Exception('User ' . $userInternalId . ' not found'); } - $bucket = $authorization->skip(fn () => $this->dbForPlatform->getDocument('buckets', $bucketId)); + $bucket = $this->dbForPlatform->getDocument('buckets', $bucketId); if ($bucket->isEmpty()) { throw new \Exception('Bucket not found'); } From da7f5b7336839af93063dfae7f547353dd263d78 Mon Sep 17 00:00:00 2001 From: Hemachandar <132386067+hmacr@users.noreply.github.com> Date: Fri, 6 Feb 2026 15:22:44 +0530 Subject: [PATCH 49/65] Move VCS repository APIs to Modules (#11259) * Move VCS repository APIs to Modules * add to http * lint * strategy fix * rename to detections --- app/controllers/api/vcs.php | 803 ------------------ .../Repositories/Branches/XList.php | 95 +++ .../Repositories/Contents/Get.php | 110 +++ .../Installations/Repositories/Create.php | 158 ++++ .../Repositories/Detections/Create.php | 315 +++++++ .../Http/Installations/Repositories/Get.php | 96 +++ .../Http/Installations/Repositories/XList.php | 319 +++++++ .../Platform/Modules/VCS/Services/Http.php | 14 + 8 files changed, 1107 insertions(+), 803 deletions(-) create mode 100644 src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/Branches/XList.php create mode 100644 src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/Contents/Get.php create mode 100644 src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/Create.php create mode 100644 src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/Detections/Create.php create mode 100644 src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/Get.php create mode 100644 src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/XList.php diff --git a/app/controllers/api/vcs.php b/app/controllers/api/vcs.php index 373f413304..6571032a62 100644 --- a/app/controllers/api/vcs.php +++ b/app/controllers/api/vcs.php @@ -11,11 +11,7 @@ use Appwrite\SDK\Response as SDKResponse; use Appwrite\Utopia\Request; use Appwrite\Utopia\Response; use Appwrite\Vcs\Comment; -use Swoole\Coroutine\WaitGroup; use Utopia\CLI\Console; -use Utopia\Config\Adapters\Dotenv as ConfigDotenv; -use Utopia\Config\Config; -use Utopia\Config\Exceptions\Parse; use Utopia\Database\Database; use Utopia\Database\DateTime; use Utopia\Database\Document; @@ -25,52 +21,12 @@ use Utopia\Database\Helpers\Permission; use Utopia\Database\Helpers\Role; use Utopia\Database\Query; use Utopia\Database\Validator\Authorization; -use Utopia\Database\Validator\Queries; -use Utopia\Database\Validator\Query\Limit; -use Utopia\Database\Validator\Query\Offset; -use Utopia\Detector\Detection\Framework\Analog; -use Utopia\Detector\Detection\Framework\Angular; -use Utopia\Detector\Detection\Framework\Astro; -use Utopia\Detector\Detection\Framework\Flutter; -use Utopia\Detector\Detection\Framework\Lynx; -use Utopia\Detector\Detection\Framework\NextJs; -use Utopia\Detector\Detection\Framework\Nuxt; -use Utopia\Detector\Detection\Framework\React; -use Utopia\Detector\Detection\Framework\ReactNative; -use Utopia\Detector\Detection\Framework\Remix; -use Utopia\Detector\Detection\Framework\Svelte; -use Utopia\Detector\Detection\Framework\SvelteKit; -use Utopia\Detector\Detection\Framework\TanStackStart; -use Utopia\Detector\Detection\Framework\Vue; -use Utopia\Detector\Detection\Packager\NPM; -use Utopia\Detector\Detection\Packager\PNPM; -use Utopia\Detector\Detection\Packager\Yarn; -use Utopia\Detector\Detection\Runtime\Bun; -use Utopia\Detector\Detection\Runtime\CPP; -use Utopia\Detector\Detection\Runtime\Dart; -use Utopia\Detector\Detection\Runtime\Deno; -use Utopia\Detector\Detection\Runtime\Dotnet; -use Utopia\Detector\Detection\Runtime\Java; -use Utopia\Detector\Detection\Runtime\Node; -use Utopia\Detector\Detection\Runtime\PHP; -use Utopia\Detector\Detection\Runtime\Python; -use Utopia\Detector\Detection\Runtime\Ruby; -use Utopia\Detector\Detection\Runtime\Swift; -use Utopia\Detector\Detector\Framework; -use Utopia\Detector\Detector\Packager; -use Utopia\Detector\Detector\Runtime; -use Utopia\Detector\Detector\Strategy; use Utopia\Http; use Utopia\System\System; -use Utopia\Validator\Boolean; use Utopia\Validator\Text; -use Utopia\Validator\WhiteList; use Utopia\VCS\Adapter\Git\GitHub; -use Utopia\VCS\Exception\FileNotFound; use Utopia\VCS\Exception\RepositoryNotFound; -use function Swoole\Coroutine\batch; - $createGitDeployments = function (GitHub $github, string $providerInstallationId, array $repositories, string $providerBranch, string $providerBranchUrl, string $providerRepositoryName, string $providerRepositoryUrl, string $providerRepositoryOwner, string $providerCommitHash, string $providerCommitAuthor, string $providerCommitAuthorUrl, string $providerCommitMessage, string $providerCommitUrl, string $providerPullRequestId, bool $external, Database $dbForPlatform, Authorization $authorization, Build $queueForBuilds, callable $getProjectDB, Request $request, array $platform) { $errors = []; foreach ($repositories as $repository) { @@ -705,765 +661,6 @@ Http::get('/v1/vcs/github/callback') ->redirect($redirectSuccess); }); -Http::get('/v1/vcs/github/installations/:installationId/providerRepositories/:providerRepositoryId/contents') - ->desc('Get files and directories of a VCS repository') - ->groups(['api', 'vcs']) - ->label('scope', 'vcs.read') - ->label('sdk', new Method( - namespace: 'vcs', - group: 'repositories', - name: 'getRepositoryContents', - description: '/docs/references/vcs/get-repository-contents.md', - auth: [AuthType::ADMIN], - responses: [ - new SDKResponse( - code: Response::STATUS_CODE_OK, - model: Response::MODEL_VCS_CONTENT_LIST, - ) - ] - )) - ->param('installationId', '', new Text(256), 'Installation Id') - ->param('providerRepositoryId', '', new Text(256), 'Repository Id') - ->param('providerRootDirectory', '', new Text(256, 0), 'Path to get contents of nested directory', true) - ->param('providerReference', '', new Text(256, 0), 'Git reference (branch, tag, commit) to get contents from', true) - ->inject('gitHub') - ->inject('response') - ->inject('project') - ->inject('dbForPlatform') - ->action(function (string $installationId, string $providerRepositoryId, string $providerRootDirectory, string $providerReference, GitHub $github, Response $response, Document $project, Database $dbForPlatform) { - $installation = $dbForPlatform->getDocument('installations', $installationId); - - if ($installation->isEmpty()) { - throw new Exception(Exception::INSTALLATION_NOT_FOUND); - } - - $providerInstallationId = $installation->getAttribute('providerInstallationId'); - $privateKey = System::getEnv('_APP_VCS_GITHUB_PRIVATE_KEY'); - $githubAppId = System::getEnv('_APP_VCS_GITHUB_APP_ID'); - $github->initializeVariables($providerInstallationId, $privateKey, $githubAppId); - - $owner = $github->getOwnerName($providerInstallationId); - try { - $repositoryName = $github->getRepositoryName($providerRepositoryId) ?? ''; - if (empty($repositoryName)) { - throw new Exception(Exception::PROVIDER_REPOSITORY_NOT_FOUND); - } - } catch (RepositoryNotFound $e) { - throw new Exception(Exception::PROVIDER_REPOSITORY_NOT_FOUND); - } - - $contents = $github->listRepositoryContents($owner, $repositoryName, $providerRootDirectory, $providerReference); - - $vcsContents = []; - foreach ($contents as $content) { - $isDirectory = false; - if ($content['type'] === GitHub::CONTENTS_DIRECTORY) { - $isDirectory = true; - } - - $vcsContents[] = new Document([ - 'isDirectory' => $isDirectory, - 'name' => $content['name'] ?? '', - 'size' => $content['size'] ?? 0 - ]); - } - - $response->dynamic(new Document([ - 'contents' => $vcsContents - ]), Response::MODEL_VCS_CONTENT_LIST); - }); - -Http::post('/v1/vcs/github/installations/:installationId/detections') - ->alias('/v1/vcs/github/installations/:installationId/providerRepositories/:providerRepositoryId/detection') - ->desc('Create repository detection') - ->groups(['api', 'vcs']) - ->label('scope', 'vcs.write') - ->label('sdk', new Method( - namespace: 'vcs', - group: 'repositories', - name: 'createRepositoryDetection', - description: '/docs/references/vcs/create-repository-detection.md', - auth: [AuthType::ADMIN], - responses: [ - new SDKResponse( - code: Response::STATUS_CODE_OK, - model: Response::MODEL_DETECTION_RUNTIME, - ), - new SDKResponse( - code: Response::STATUS_CODE_OK, - model: Response::MODEL_DETECTION_FRAMEWORK, - ) - ] - )) - ->param('installationId', '', new Text(256), 'Installation Id') - ->param('providerRepositoryId', '', new Text(256), 'Repository Id') - ->param('type', '', new WhiteList(['runtime', 'framework']), 'Detector type. Must be one of the following: runtime, framework') - ->param('providerRootDirectory', '', new Text(256, 0), 'Path to Root Directory', true) - ->inject('gitHub') - ->inject('response') - ->inject('dbForPlatform') - ->action(function (string $installationId, string $providerRepositoryId, string $type, string $providerRootDirectory, GitHub $github, Response $response, Database $dbForPlatform) { - $installation = $dbForPlatform->getDocument('installations', $installationId); - - if ($installation->isEmpty()) { - throw new Exception(Exception::INSTALLATION_NOT_FOUND); - } - - $providerInstallationId = $installation->getAttribute('providerInstallationId'); - $privateKey = System::getEnv('_APP_VCS_GITHUB_PRIVATE_KEY'); - $githubAppId = System::getEnv('_APP_VCS_GITHUB_APP_ID'); - $github->initializeVariables($providerInstallationId, $privateKey, $githubAppId); - - $owner = $github->getOwnerName($providerInstallationId); - try { - $repositoryName = $github->getRepositoryName($providerRepositoryId) ?? ''; - if (empty($repositoryName)) { - throw new Exception(Exception::PROVIDER_REPOSITORY_NOT_FOUND); - } - } catch (RepositoryNotFound $e) { - throw new Exception(Exception::PROVIDER_REPOSITORY_NOT_FOUND); - } - - $files = $github->listRepositoryContents($owner, $repositoryName, $providerRootDirectory); - $files = \array_column($files, 'name'); - $languages = $github->listRepositoryLanguages($owner, $repositoryName); - - $detector = new Packager(); - foreach ($files as $file) { - $detector->addInput($file); - } - $detector - ->addOption(new Yarn()) - ->addOption(new PNPM()) - ->addOption(new NPM()); - $detection = $detector->detect(); - - $packager = !\is_null($detection) ? $detection->getName() : 'npm'; - - if ($type === 'framework') { - $packages = ''; - try { - $contentResponse = $github->getRepositoryContent($owner, $repositoryName, \rtrim($providerRootDirectory, '/') . '/package.json'); - $packages = $contentResponse['content'] ?? ''; - } catch (FileNotFound $e) { - // Continue detection without package.json - } - - $output = new Document([ - 'framework' => '', - 'installCommand' => '', - 'buildCommand' => '', - 'outputDirectory' => '', - ]); - - $detector = new Framework($packager); - $detector->addInput($packages, Framework::INPUT_PACKAGES); - foreach ($files as $file) { - $detector->addInput($file, Framework::INPUT_FILE); - } - - $detector - ->addOption(new Analog()) - ->addOption(new Angular()) - ->addOption(new Astro()) - ->addOption(new Flutter()) - ->addOption(new Lynx()) - ->addOption(new NextJs()) - ->addOption(new Nuxt()) - ->addOption(new React()) - ->addOption(new ReactNative()) - ->addOption(new Remix()) - ->addOption(new Svelte()) - ->addOption(new SvelteKit()) - ->addOption(new TanStackStart()) - ->addOption(new Vue()); - - $framework = $detector->detect(); - - if (!\is_null($framework)) { - $output->setAttribute('installCommand', $framework->getInstallCommand()); - $output->setAttribute('buildCommand', $framework->getBuildCommand()); - $output->setAttribute('outputDirectory', $framework->getOutputDirectory()); - $framework = $framework->getName(); - } else { - $framework = 'other'; - $output->setAttribute('installCommand', ''); - $output->setAttribute('buildCommand', ''); - $output->setAttribute('outputDirectory', ''); - } - - $frameworks = Config::getParam('frameworks'); - if (!\in_array($framework, \array_keys($frameworks), true)) { - $framework = 'other'; - } - $output->setAttribute('framework', $framework); - } else { - $output = new Document([ - 'runtime' => '', - 'commands' => '', - 'entrypoint' => '', - ]); - - $strategies = [ - new Strategy(Strategy::FILEMATCH), - new Strategy(Strategy::LANGUAGES), - new Strategy(Strategy::EXTENSION), - ]; - - foreach ($strategies as $strategy) { - $detector = new Runtime($strategy, $packager); - - if ($strategy === Strategy::LANGUAGES) { - foreach ($languages as $language) { - $detector->addInput($language); - } - } else { - foreach ($files as $file) { - $detector->addInput($file); - } - } - - $detector - ->addOption(new Node()) - ->addOption(new Bun()) - ->addOption(new Deno()) - ->addOption(new PHP()) - ->addOption(new Python()) - ->addOption(new Dart()) - ->addOption(new Swift()) - ->addOption(new Ruby()) - ->addOption(new Java()) - ->addOption(new CPP()) - ->addOption(new Dotnet()); - - $runtime = $detector->detect(); - - if (!\is_null($runtime)) { - $output->setAttribute('commands', $runtime->getCommands()); - $output->setAttribute('entrypoint', $runtime->getEntrypoint()); - $runtime = $runtime->getName(); - break; - } - } - - if (!empty($runtime)) { - $runtimes = Config::getParam('runtimes'); - $runtimeWithVersion = ''; - foreach ($runtimes as $runtimeKey => $runtimeConfig) { - if ($runtimeConfig['key'] === $runtime) { - $runtimeWithVersion = $runtimeKey; - } - } - - if (empty($runtimeWithVersion)) { - throw new Exception(Exception::FUNCTION_RUNTIME_NOT_DETECTED); - } - - $output->setAttribute('runtime', $runtimeWithVersion); - } else { - throw new Exception(Exception::FUNCTION_RUNTIME_NOT_DETECTED); - } - } - - $wg = new WaitGroup(); - $envs = []; - foreach ($files as $file) { - if (!(\str_starts_with($file, '.env'))) { - continue; - } - - $wg->add(); - go(function () use ($github, $owner, $repositoryName, $providerRootDirectory, $file, $wg, &$envs) { - try { - $contentResponse = $github->getRepositoryContent($owner, $repositoryName, \rtrim($providerRootDirectory, '/') . '/' . $file); - $envFile = $contentResponse['content'] ?? ''; - - $configAdapter = new ConfigDotenv(); - try { - $envObject = $configAdapter->parse($envFile); - foreach ($envObject as $envName => $envValue) { - $envs[$envName] = $envValue; - } - } catch (Parse $err) { - // Silence error, so rest of endpoint can return - } - } finally { - $wg->done(); - } - }); - } - $wg->wait(); - - $variables = []; - foreach ($envs as $key => $value) { - $variables[] = [ - 'name' => $key, - 'value' => $value, - ]; - } - - $output->setAttribute('variables', $variables); - - $response->dynamic($output, $type === 'framework' ? Response::MODEL_DETECTION_FRAMEWORK : Response::MODEL_DETECTION_RUNTIME); - }); - -Http::get('/v1/vcs/github/installations/:installationId/providerRepositories') - ->desc('List repositories') - ->groups(['api', 'vcs']) - ->label('scope', 'vcs.read') - ->label('sdk', new Method( - namespace: 'vcs', - group: 'repositories', - name: 'listRepositories', - description: '/docs/references/vcs/list-repositories.md', - auth: [AuthType::ADMIN], - responses: [ - new SDKResponse( - code: Response::STATUS_CODE_OK, - model: Response::MODEL_PROVIDER_REPOSITORY_RUNTIME_LIST, - ), - new SDKResponse( - code: Response::STATUS_CODE_OK, - model: Response::MODEL_PROVIDER_REPOSITORY_FRAMEWORK_LIST, - ) - ] - )) - ->param('installationId', '', new Text(256), 'Installation Id') - ->param('type', '', new WhiteList(['runtime', 'framework']), 'Detector type. Must be one of the following: runtime, framework') - ->param('search', '', new Text(256), 'Search term to filter your list results. Max length: 256 chars.', true) - ->param('queries', [], new Queries([new Limit(), new Offset()]), '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', true) - ->inject('gitHub') - ->inject('response') - ->inject('dbForPlatform') - ->action(function (string $installationId, string $type, string $search, array $queries, GitHub $github, Response $response, Database $dbForPlatform) { - if (empty($search)) { - $search = ""; - } - - $installation = $dbForPlatform->getDocument('installations', $installationId); - - if ($installation->isEmpty()) { - throw new Exception(Exception::INSTALLATION_NOT_FOUND); - } - - $providerInstallationId = $installation->getAttribute('providerInstallationId'); - $privateKey = System::getEnv('_APP_VCS_GITHUB_PRIVATE_KEY'); - $githubAppId = System::getEnv('_APP_VCS_GITHUB_APP_ID'); - $github->initializeVariables($providerInstallationId, $privateKey, $githubAppId); - - $queries = Query::parseQueries($queries); - $limitQuery = current(array_filter($queries, fn ($query) => $query->getMethod() === Query::TYPE_LIMIT)); - $offsetQuery = current(array_filter($queries, fn ($query) => $query->getMethod() === Query::TYPE_OFFSET)); - - $limit = !empty($limitQuery) ? $limitQuery->getValue() : 4; - $offset = !empty($offsetQuery) ? $offsetQuery->getValue() : 0; - - if ($offset % $limit !== 0) { - throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'offset must be a multiple of the limit'); - } - - $page = ($offset / $limit) + 1; - $owner = $github->getOwnerName($providerInstallationId); - ['items' => $repos, 'total' => $total] = $github->searchRepositories($owner, $page, $limit, $search); - - $repos = \array_map(function ($repo) use ($installation) { - $repo['id'] = \strval($repo['id'] ?? ''); - $repo['pushedAt'] = $repo['pushed_at'] ?? null; - $repo['provider'] = $installation->getAttribute('provider', '') ?? ''; - $repo['organization'] = $installation->getAttribute('organization', '') ?? ''; - return $repo; - }, $repos); - - $repos = batch(\array_map(function ($repo) use ($type, $github) { - return function () use ($repo, $type, $github) { - $files = $github->listRepositoryContents($repo['organization'], $repo['name'], ''); - $files = \array_column($files, 'name'); - - $detector = new Packager(); - foreach ($files as $file) { - $detector->addInput($file); - } - $detector - ->addOption(new Yarn()) - ->addOption(new PNPM()) - ->addOption(new NPM()); - $detection = $detector->detect(); - - $packager = !\is_null($detection) ? $detection->getName() : 'npm'; - - if ($type === 'framework') { - $packages = ''; - try { - $contentResponse = $github->getRepositoryContent($repo['organization'], $repo['name'], 'package.json'); - $packages = $contentResponse['content'] ?? ''; - } catch (FileNotFound $e) { - // Continue detection without package.json - } - - $frameworkDetector = new Framework($packager); - $frameworkDetector->addInput($packages, Framework::INPUT_PACKAGES); - foreach ($files as $file) { - $frameworkDetector->addInput($file, Framework::INPUT_FILE); - } - - $frameworkDetector - ->addOption(new Analog()) - ->addOption(new Angular()) - ->addOption(new Astro()) - ->addOption(new Flutter()) - ->addOption(new Lynx()) - ->addOption(new NextJs()) - ->addOption(new Nuxt()) - ->addOption(new React()) - ->addOption(new ReactNative()) - ->addOption(new Remix()) - ->addOption(new Svelte()) - ->addOption(new SvelteKit()) - ->addOption(new TanStackStart()) - ->addOption(new Vue()); - - $detectedFramework = $frameworkDetector->detect(); - - if (!\is_null($detectedFramework)) { - $framework = $detectedFramework->getName(); - } else { - $framework = 'other'; - } - - $frameworks = Config::getParam('frameworks'); - if (!\in_array($framework, \array_keys($frameworks), true)) { - $framework = 'other'; - } - $repo['framework'] = $framework; - } else { - $languages = $github->listRepositoryLanguages($repo['organization'], $repo['name']); - - $strategies = [ - new Strategy(Strategy::FILEMATCH), - new Strategy(Strategy::LANGUAGES), - new Strategy(Strategy::EXTENSION), - ]; - - foreach ($strategies as $strategy) { - $detector = new Runtime($strategy, $packager); - if ($strategy === Strategy::LANGUAGES) { - foreach ($languages as $language) { - $detector->addInput($language); - } - } else { - foreach ($files as $file) { - $detector->addInput($file); - } - } - $detector - ->addOption(new Node()) - ->addOption(new Bun()) - ->addOption(new Deno()) - ->addOption(new PHP()) - ->addOption(new Python()) - ->addOption(new Dart()) - ->addOption(new Swift()) - ->addOption(new Ruby()) - ->addOption(new Java()) - ->addOption(new CPP()) - ->addOption(new Dotnet()); - - $runtime = $detector->detect(); - - if (!\is_null($runtime)) { - $runtime = $runtime->getName(); - break; - } - } - - if (!empty($runtime)) { - $runtimes = Config::getParam('runtimes'); - $runtimeWithVersion = ''; - foreach ($runtimes as $runtimeKey => $runtimeConfig) { - if ($runtimeConfig['key'] === $runtime) { - $runtimeWithVersion = $runtimeKey; - } - } - - $repo['runtime'] = $runtimeWithVersion ?? ''; - } - } - - $wg = new WaitGroup(); - $envs = []; - foreach ($files as $file) { - if (!(\str_starts_with($file, '.env'))) { - continue; - } - - $wg->add(); - go(function () use ($github, $repo, $file, $wg, &$envs) { - try { - $contentResponse = $github->getRepositoryContent($repo['organization'], $repo['name'], $file); - $envFile = $contentResponse['content'] ?? ''; - - $configAdapter = new ConfigDotenv(); - try { - $envObject = $configAdapter->parse($envFile); - foreach ($envObject as $envName => $envValue) { - $envs[$envName] = $envValue; - } - } catch (Parse) { - // Silence error, so rest of endpoint can return - } - } finally { - $wg->done(); - } - }); - } - $wg->wait(); - - $repo['variables'] = []; - foreach ($envs as $key => $value) { - $repo['variables'][] = [ - 'name' => $key, - 'value' => $value, - ]; - } - - return $repo; - }; - }, $repos)); - - $repos = \array_map(function ($repo) { - return new Document($repo); - }, $repos); - - $response->dynamic(new Document([ - $type === 'framework' ? 'frameworkProviderRepositories' : 'runtimeProviderRepositories' => $repos, - 'total' => $total, - ]), ($type === 'framework') ? Response::MODEL_PROVIDER_REPOSITORY_FRAMEWORK_LIST : Response::MODEL_PROVIDER_REPOSITORY_RUNTIME_LIST); - }); - -Http::post('/v1/vcs/github/installations/:installationId/providerRepositories') - ->desc('Create repository') - ->groups(['api', 'vcs']) - ->label('scope', 'vcs.write') - ->label('sdk', new Method( - namespace: 'vcs', - group: 'repositories', - name: 'createRepository', - description: '/docs/references/vcs/create-repository.md', - auth: [AuthType::ADMIN], - responses: [ - new SDKResponse( - code: Response::STATUS_CODE_OK, - model: Response::MODEL_PROVIDER_REPOSITORY, - ) - ] - )) - ->param('installationId', '', new Text(256), 'Installation Id') - ->param('name', '', new Text(256), 'Repository name (slug)') - ->param('private', '', new Boolean(false), 'Mark repository public or private') - ->inject('gitHub') - ->inject('user') - ->inject('response') - ->inject('project') - ->inject('dbForPlatform') - ->action(function (string $installationId, string $name, bool $private, GitHub $github, Document $user, Response $response, Document $project, Database $dbForPlatform) { - $installation = $dbForPlatform->getDocument('installations', $installationId); - - if ($installation->isEmpty()) { - throw new Exception(Exception::INSTALLATION_NOT_FOUND); - } - - if ($installation->getAttribute('personal', false) === true) { - $oauth2 = new OAuth2Github(System::getEnv('_APP_VCS_GITHUB_CLIENT_ID', ''), System::getEnv('_APP_VCS_GITHUB_CLIENT_SECRET', ''), ""); - - $accessToken = $installation->getAttribute('personalAccessToken'); - $refreshToken = $installation->getAttribute('personalRefreshToken'); - $accessTokenExpiry = $installation->getAttribute('personalAccessTokenExpiry'); - - if (empty($accessToken) || empty($refreshToken) || empty($accessTokenExpiry)) { - $identity = $dbForPlatform->findOne('identities', [ - Query::equal('provider', ['github']), - Query::equal('userInternalId', [$user->getSequence()]), - ]); - if ($identity->isEmpty()) { - throw new Exception(Exception::USER_IDENTITY_NOT_FOUND); - } - - $accessToken = $accessToken ?? $identity->getAttribute('providerAccessToken'); - $refreshToken = $refreshToken ?? $identity->getAttribute('providerRefreshToken'); - $accessTokenExpiry = $accessTokenExpiry ?? $identity->getAttribute('providerAccessTokenExpiry'); - } - - $isExpired = new \DateTime($accessTokenExpiry) < new \DateTime('now'); - if ($isExpired) { - $oauth2->refreshTokens($refreshToken); - - $accessToken = $oauth2->getAccessToken(''); - $refreshToken = $oauth2->getRefreshToken(''); - - $verificationId = $oauth2->getUserID($accessToken); - - if (empty($verificationId)) { - throw new Exception(Exception::GENERAL_RATE_LIMIT_EXCEEDED, "Another request is currently refreshing OAuth token. Please try again."); - } - - $installation = $installation - ->setAttribute('personalAccessToken', $accessToken) - ->setAttribute('personalRefreshToken', $refreshToken) - ->setAttribute('personalAccessTokenExpiry', DateTime::addSeconds(new \DateTime(), (int)$oauth2->getAccessTokenExpiry(''))); - - $dbForPlatform->updateDocument('installations', $installation->getId(), $installation); - } - - try { - $repository = $oauth2->createRepository($accessToken, $name, $private); - } catch (Exception $exception) { - throw new Exception(Exception::GENERAL_PROVIDER_FAILURE, "GitHub failed to process the request: " . $exception->getMessage()); - } - } else { - $providerInstallationId = $installation->getAttribute('providerInstallationId'); - $privateKey = System::getEnv('_APP_VCS_GITHUB_PRIVATE_KEY'); - $githubAppId = System::getEnv('_APP_VCS_GITHUB_APP_ID'); - $github->initializeVariables($providerInstallationId, $privateKey, $githubAppId); - $owner = $github->getOwnerName($providerInstallationId); - - try { - $repository = $github->createRepository($owner, $name, $private); - } catch (Exception $exception) { - throw new Exception(Exception::GENERAL_PROVIDER_FAILURE, "GitHub failed to process the request: " . $exception->getMessage()); - } - } - - if (isset($repository['errors'])) { - $message = $repository['message'] ?? 'Unknown error.'; - if (isset($repository['errors'][0])) { - $message .= ' ' . $repository['errors'][0]['message']; - } - throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'Provider Error: ' . $message); - } - - if (isset($repository['message'])) { - throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'Provider Error: ' . $repository['message']); - } - - $repository['id'] = \strval($repository['id']) ?? ''; - $repository['pushedAt'] = $repository['pushed_at'] ?? ''; - $repository['organization'] = $installation->getAttribute('organization', ''); - $repository['provider'] = $installation->getAttribute('provider', ''); - - $response->dynamic(new Document($repository), Response::MODEL_PROVIDER_REPOSITORY); - }); - -Http::get('/v1/vcs/github/installations/:installationId/providerRepositories/:providerRepositoryId') - ->desc('Get repository') - ->groups(['api', 'vcs']) - ->label('scope', 'vcs.read') - ->label('sdk', new Method( - namespace: 'vcs', - group: 'repositories', - name: 'getRepository', - description: '/docs/references/vcs/get-repository.md', - auth: [AuthType::ADMIN], - responses: [ - new SDKResponse( - code: Response::STATUS_CODE_OK, - model: Response::MODEL_PROVIDER_REPOSITORY, - ) - ] - )) - ->param('installationId', '', new Text(256), 'Installation Id') - ->param('providerRepositoryId', '', new Text(256), 'Repository Id') - ->inject('gitHub') - ->inject('response') - ->inject('project') - ->inject('dbForPlatform') - ->action(function (string $installationId, string $providerRepositoryId, GitHub $github, Response $response, Document $project, Database $dbForPlatform) { - $installation = $dbForPlatform->getDocument('installations', $installationId); - - if ($installation->isEmpty()) { - throw new Exception(Exception::INSTALLATION_NOT_FOUND); - } - - $providerInstallationId = $installation->getAttribute('providerInstallationId'); - $privateKey = System::getEnv('_APP_VCS_GITHUB_PRIVATE_KEY'); - $githubAppId = System::getEnv('_APP_VCS_GITHUB_APP_ID'); - $github->initializeVariables($providerInstallationId, $privateKey, $githubAppId); - - $owner = $github->getOwnerName($providerInstallationId) ?? ''; - try { - $repositoryName = $github->getRepositoryName($providerRepositoryId) ?? ''; - if (empty($repositoryName)) { - throw new Exception(Exception::PROVIDER_REPOSITORY_NOT_FOUND); - } - } catch (RepositoryNotFound $e) { - throw new Exception(Exception::PROVIDER_REPOSITORY_NOT_FOUND); - } - - $repository = $github->getRepository($owner, $repositoryName); - - $repository['id'] = \strval($repository['id']) ?? ''; - $repository['pushedAt'] = $repository['pushed_at'] ?? ''; - $repository['organization'] = $installation->getAttribute('organization', ''); - $repository['provider'] = $installation->getAttribute('provider', ''); - $repository['defaultBranch'] = $repository['default_branch'] ?? ''; - - $response->dynamic(new Document($repository), Response::MODEL_PROVIDER_REPOSITORY); - }); - -Http::get('/v1/vcs/github/installations/:installationId/providerRepositories/:providerRepositoryId/branches') - ->desc('List repository branches') - ->groups(['api', 'vcs']) - ->label('scope', 'vcs.read') - ->label('sdk', new Method( - namespace: 'vcs', - group: 'repositories', - name: 'listRepositoryBranches', - description: '/docs/references/vcs/list-repository-branches.md', - auth: [AuthType::ADMIN], - responses: [ - new SDKResponse( - code: Response::STATUS_CODE_OK, - model: Response::MODEL_BRANCH_LIST, - ) - ] - )) - ->param('installationId', '', new Text(256), 'Installation Id') - ->param('providerRepositoryId', '', new Text(256), 'Repository Id') - ->inject('gitHub') - ->inject('response') - ->inject('project') - ->inject('dbForPlatform') - ->action(function (string $installationId, string $providerRepositoryId, GitHub $github, Response $response, Document $project, Database $dbForPlatform) { - $installation = $dbForPlatform->getDocument('installations', $installationId); - - if ($installation->isEmpty()) { - throw new Exception(Exception::INSTALLATION_NOT_FOUND); - } - - $providerInstallationId = $installation->getAttribute('providerInstallationId'); - $privateKey = System::getEnv('_APP_VCS_GITHUB_PRIVATE_KEY'); - $githubAppId = System::getEnv('_APP_VCS_GITHUB_APP_ID'); - $github->initializeVariables($providerInstallationId, $privateKey, $githubAppId); - - $owner = $github->getOwnerName($providerInstallationId) ?? ''; - try { - $repositoryName = $github->getRepositoryName($providerRepositoryId) ?? ''; - if (empty($repositoryName)) { - throw new Exception(Exception::PROVIDER_REPOSITORY_NOT_FOUND); - } - } catch (RepositoryNotFound $e) { - throw new Exception(Exception::PROVIDER_REPOSITORY_NOT_FOUND); - } - - $branches = $github->listBranches($owner, $repositoryName) ?? []; - - $response->dynamic(new Document([ - 'branches' => \array_map(function ($branch) { - return new Document(['name' => $branch]); - }, $branches), - 'total' => \count($branches), - ]), Response::MODEL_BRANCH_LIST); - }); - Http::post('/v1/vcs/github/events') ->desc('Create event') ->groups(['api', 'vcs']) diff --git a/src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/Branches/XList.php b/src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/Branches/XList.php new file mode 100644 index 0000000000..4ed4241d25 --- /dev/null +++ b/src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/Branches/XList.php @@ -0,0 +1,95 @@ +setHttpMethod(Action::HTTP_REQUEST_METHOD_GET) + ->setHttpPath('/v1/vcs/github/installations/:installationId/providerRepositories/:providerRepositoryId/branches') + ->desc('List repository branches') + ->groups(['api', 'vcs']) + ->label('scope', 'vcs.read') + ->label('resourceType', RESOURCE_TYPE_VCS) + ->label('sdk', new Method( + namespace: 'vcs', + group: 'repositories', + name: 'listRepositoryBranches', + description: '/docs/references/vcs/list-repository-branches.md', + auth: [AuthType::ADMIN], + responses: [ + new SDKResponse( + code: Response::STATUS_CODE_OK, + model: Response::MODEL_BRANCH_LIST, + ) + ] + )) + ->param('installationId', '', new Text(256), 'Installation Id') + ->param('providerRepositoryId', '', new Text(256), 'Repository Id') + ->inject('gitHub') + ->inject('response') + ->inject('dbForPlatform') + ->callback($this->action(...)); + } + + public function action( + string $installationId, + string $providerRepositoryId, + GitHub $github, + Response $response, + Database $dbForPlatform + ) { + $installation = $dbForPlatform->getDocument('installations', $installationId); + + if ($installation->isEmpty()) { + throw new Exception(Exception::INSTALLATION_NOT_FOUND); + } + + $providerInstallationId = $installation->getAttribute('providerInstallationId'); + $privateKey = System::getEnv('_APP_VCS_GITHUB_PRIVATE_KEY'); + $githubAppId = System::getEnv('_APP_VCS_GITHUB_APP_ID'); + $github->initializeVariables($providerInstallationId, $privateKey, $githubAppId); + + $owner = $github->getOwnerName($providerInstallationId) ?? ''; + try { + $repositoryName = $github->getRepositoryName($providerRepositoryId) ?? ''; + if (empty($repositoryName)) { + throw new Exception(Exception::PROVIDER_REPOSITORY_NOT_FOUND); + } + } catch (RepositoryNotFound $e) { + throw new Exception(Exception::PROVIDER_REPOSITORY_NOT_FOUND); + } + + $branches = $github->listBranches($owner, $repositoryName) ?? []; + + $response->dynamic(new Document([ + 'branches' => \array_map(function ($branch) { + return new Document(['name' => $branch]); + }, $branches), + 'total' => \count($branches), + ]), Response::MODEL_BRANCH_LIST); + } +} diff --git a/src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/Contents/Get.php b/src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/Contents/Get.php new file mode 100644 index 0000000000..a0dcec8590 --- /dev/null +++ b/src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/Contents/Get.php @@ -0,0 +1,110 @@ +setHttpMethod(Action::HTTP_REQUEST_METHOD_GET) + ->setHttpPath('/v1/vcs/github/installations/:installationId/providerRepositories/:providerRepositoryId/contents') + ->desc('Get files and directories of a VCS repository') + ->groups(['api', 'vcs']) + ->label('scope', 'vcs.read') + ->label('resourceType', RESOURCE_TYPE_VCS) + ->label('sdk', new Method( + namespace: 'vcs', + group: 'repositories', + name: 'getRepositoryContents', + description: '/docs/references/vcs/get-repository-contents.md', + auth: [AuthType::ADMIN], + responses: [ + new SDKResponse( + code: Response::STATUS_CODE_OK, + model: Response::MODEL_VCS_CONTENT_LIST, + ) + ] + )) + ->param('installationId', '', new Text(256), 'Installation Id') + ->param('providerRepositoryId', '', new Text(256), 'Repository Id') + ->param('providerRootDirectory', '', new Text(256, 0), 'Path to get contents of nested directory', true) + ->param('providerReference', '', new Text(256, 0), 'Git reference (branch, tag, commit) to get contents from', true) + ->inject('gitHub') + ->inject('response') + ->inject('dbForPlatform') + ->callback($this->action(...)); + } + + public function action( + string $installationId, + string $providerRepositoryId, + string $providerRootDirectory, + string $providerReference, + GitHub $github, + Response $response, + Database $dbForPlatform + ) { + $installation = $dbForPlatform->getDocument('installations', $installationId); + + if ($installation->isEmpty()) { + throw new Exception(Exception::INSTALLATION_NOT_FOUND); + } + + $providerInstallationId = $installation->getAttribute('providerInstallationId'); + $privateKey = System::getEnv('_APP_VCS_GITHUB_PRIVATE_KEY'); + $githubAppId = System::getEnv('_APP_VCS_GITHUB_APP_ID'); + $github->initializeVariables($providerInstallationId, $privateKey, $githubAppId); + + $owner = $github->getOwnerName($providerInstallationId); + try { + $repositoryName = $github->getRepositoryName($providerRepositoryId) ?? ''; + if (empty($repositoryName)) { + throw new Exception(Exception::PROVIDER_REPOSITORY_NOT_FOUND); + } + } catch (RepositoryNotFound $e) { + throw new Exception(Exception::PROVIDER_REPOSITORY_NOT_FOUND); + } + + $contents = $github->listRepositoryContents($owner, $repositoryName, $providerRootDirectory, $providerReference); + + $vcsContents = []; + foreach ($contents as $content) { + $isDirectory = false; + if ($content['type'] === GitHub::CONTENTS_DIRECTORY) { + $isDirectory = true; + } + + $vcsContents[] = new Document([ + 'isDirectory' => $isDirectory, + 'name' => $content['name'] ?? '', + 'size' => $content['size'] ?? 0 + ]); + } + + $response->dynamic(new Document([ + 'contents' => $vcsContents + ]), Response::MODEL_VCS_CONTENT_LIST); + } +} diff --git a/src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/Create.php b/src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/Create.php new file mode 100644 index 0000000000..e357d1d5fa --- /dev/null +++ b/src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/Create.php @@ -0,0 +1,158 @@ +setHttpMethod(Action::HTTP_REQUEST_METHOD_POST) + ->setHttpPath('/v1/vcs/github/installations/:installationId/providerRepositories') + ->desc('Create repository') + ->groups(['api', 'vcs']) + ->label('scope', 'vcs.write') + ->label('resourceType', RESOURCE_TYPE_VCS) + ->label('sdk', new Method( + namespace: 'vcs', + group: 'repositories', + name: 'createRepository', + description: '/docs/references/vcs/create-repository.md', + auth: [AuthType::ADMIN], + responses: [ + new SDKResponse( + code: Response::STATUS_CODE_OK, + model: Response::MODEL_PROVIDER_REPOSITORY, + ) + ] + )) + ->param('installationId', '', new Text(256), 'Installation Id') + ->param('name', '', new Text(256), 'Repository name (slug)') + ->param('private', '', new Boolean(false), 'Mark repository public or private') + ->inject('gitHub') + ->inject('user') + ->inject('response') + ->inject('dbForPlatform') + ->callback($this->action(...)); + } + + public function action( + string $installationId, + string $name, + bool $private, + GitHub $github, + Document $user, + Response $response, + Database $dbForPlatform + ) { + $installation = $dbForPlatform->getDocument('installations', $installationId); + + if ($installation->isEmpty()) { + throw new Exception(Exception::INSTALLATION_NOT_FOUND); + } + + if ($installation->getAttribute('personal', false) === true) { + $oauth2 = new OAuth2Github(System::getEnv('_APP_VCS_GITHUB_CLIENT_ID', ''), System::getEnv('_APP_VCS_GITHUB_CLIENT_SECRET', ''), ""); + + $accessToken = $installation->getAttribute('personalAccessToken'); + $refreshToken = $installation->getAttribute('personalRefreshToken'); + $accessTokenExpiry = $installation->getAttribute('personalAccessTokenExpiry'); + + if (empty($accessToken) || empty($refreshToken) || empty($accessTokenExpiry)) { + $identity = $dbForPlatform->findOne('identities', [ + Query::equal('provider', ['github']), + Query::equal('userInternalId', [$user->getSequence()]), + ]); + if ($identity->isEmpty()) { + throw new Exception(Exception::USER_IDENTITY_NOT_FOUND); + } + + $accessToken = $accessToken ?? $identity->getAttribute('providerAccessToken'); + $refreshToken = $refreshToken ?? $identity->getAttribute('providerRefreshToken'); + $accessTokenExpiry = $accessTokenExpiry ?? $identity->getAttribute('providerAccessTokenExpiry'); + } + + $isExpired = new \DateTime($accessTokenExpiry) < new \DateTime('now'); + if ($isExpired) { + $oauth2->refreshTokens($refreshToken); + + $accessToken = $oauth2->getAccessToken(''); + $refreshToken = $oauth2->getRefreshToken(''); + + $verificationId = $oauth2->getUserID($accessToken); + + if (empty($verificationId)) { + throw new Exception(Exception::GENERAL_RATE_LIMIT_EXCEEDED, "Another request is currently refreshing OAuth token. Please try again."); + } + + $installation = $installation + ->setAttribute('personalAccessToken', $accessToken) + ->setAttribute('personalRefreshToken', $refreshToken) + ->setAttribute('personalAccessTokenExpiry', DateTime::addSeconds(new \DateTime(), (int)$oauth2->getAccessTokenExpiry(''))); + + $dbForPlatform->updateDocument('installations', $installation->getId(), $installation); + } + + try { + $repository = $oauth2->createRepository($accessToken, $name, $private); + } catch (Exception $exception) { + throw new Exception(Exception::GENERAL_PROVIDER_FAILURE, "GitHub failed to process the request: " . $exception->getMessage()); + } + } else { + $providerInstallationId = $installation->getAttribute('providerInstallationId'); + $privateKey = System::getEnv('_APP_VCS_GITHUB_PRIVATE_KEY'); + $githubAppId = System::getEnv('_APP_VCS_GITHUB_APP_ID'); + $github->initializeVariables($providerInstallationId, $privateKey, $githubAppId); + $owner = $github->getOwnerName($providerInstallationId); + + try { + $repository = $github->createRepository($owner, $name, $private); + } catch (Exception $exception) { + throw new Exception(Exception::GENERAL_PROVIDER_FAILURE, "GitHub failed to process the request: " . $exception->getMessage()); + } + } + + if (isset($repository['errors'])) { + $message = $repository['message'] ?? 'Unknown error.'; + if (isset($repository['errors'][0])) { + $message .= ' ' . $repository['errors'][0]['message']; + } + throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'Provider Error: ' . $message); + } + + if (isset($repository['message'])) { + throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'Provider Error: ' . $repository['message']); + } + + $repository['id'] = \strval($repository['id']) ?? ''; + $repository['pushedAt'] = $repository['pushed_at'] ?? ''; + $repository['organization'] = $installation->getAttribute('organization', ''); + $repository['provider'] = $installation->getAttribute('provider', ''); + + $response->dynamic(new Document($repository), Response::MODEL_PROVIDER_REPOSITORY); + } +} diff --git a/src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/Detections/Create.php b/src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/Detections/Create.php new file mode 100644 index 0000000000..bada6d98bb --- /dev/null +++ b/src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/Detections/Create.php @@ -0,0 +1,315 @@ +setHttpMethod(Action::HTTP_REQUEST_METHOD_POST) + ->setHttpPath('/v1/vcs/github/installations/:installationId/detections') + ->httpAlias('/v1/vcs/github/installations/:installationId/providerRepositories/:providerRepositoryId/detection') + ->desc('Create repository detection') + ->groups(['api', 'vcs']) + ->label('scope', 'vcs.write') + ->label('resourceType', RESOURCE_TYPE_VCS) + ->label('sdk', new Method( + namespace: 'vcs', + group: 'repositories', + name: 'createRepositoryDetection', + description: '/docs/references/vcs/create-repository-detection.md', + auth: [AuthType::ADMIN], + responses: [ + new SDKResponse( + code: Response::STATUS_CODE_OK, + model: Response::MODEL_DETECTION_RUNTIME, + ), + new SDKResponse( + code: Response::STATUS_CODE_OK, + model: Response::MODEL_DETECTION_FRAMEWORK, + ) + ] + )) + ->param('installationId', '', new Text(256), 'Installation Id') + ->param('providerRepositoryId', '', new Text(256), 'Repository Id') + ->param('type', '', new WhiteList(['runtime', 'framework']), 'Detector type. Must be one of the following: runtime, framework') + ->param('providerRootDirectory', '', new Text(256, 0), 'Path to Root Directory', true) + ->inject('gitHub') + ->inject('response') + ->inject('dbForPlatform') + ->callback($this->action(...)); + } + + public function action( + string $installationId, + string $providerRepositoryId, + string $type, + string $providerRootDirectory, + GitHub $github, + Response $response, + Database $dbForPlatform + ) { + $installation = $dbForPlatform->getDocument('installations', $installationId); + + if ($installation->isEmpty()) { + throw new Exception(Exception::INSTALLATION_NOT_FOUND); + } + + $providerInstallationId = $installation->getAttribute('providerInstallationId'); + $privateKey = System::getEnv('_APP_VCS_GITHUB_PRIVATE_KEY'); + $githubAppId = System::getEnv('_APP_VCS_GITHUB_APP_ID'); + $github->initializeVariables($providerInstallationId, $privateKey, $githubAppId); + + $owner = $github->getOwnerName($providerInstallationId); + try { + $repositoryName = $github->getRepositoryName($providerRepositoryId) ?? ''; + if (empty($repositoryName)) { + throw new Exception(Exception::PROVIDER_REPOSITORY_NOT_FOUND); + } + } catch (RepositoryNotFound $e) { + throw new Exception(Exception::PROVIDER_REPOSITORY_NOT_FOUND); + } + + $files = $github->listRepositoryContents($owner, $repositoryName, $providerRootDirectory); + $files = \array_column($files, 'name'); + $languages = $github->listRepositoryLanguages($owner, $repositoryName); + + $detector = new Packager(); + foreach ($files as $file) { + $detector->addInput($file); + } + $detector + ->addOption(new Yarn()) + ->addOption(new PNPM()) + ->addOption(new NPM()); + $detection = $detector->detect(); + + $packager = !\is_null($detection) ? $detection->getName() : 'npm'; + + if ($type === 'framework') { + $packages = ''; + try { + $contentResponse = $github->getRepositoryContent($owner, $repositoryName, \rtrim($providerRootDirectory, '/') . '/package.json'); + $packages = $contentResponse['content'] ?? ''; + } catch (FileNotFound $e) { + // Continue detection without package.json + } + + $output = new Document([ + 'framework' => '', + 'installCommand' => '', + 'buildCommand' => '', + 'outputDirectory' => '', + ]); + + $detector = new Framework($packager); + $detector->addInput($packages, Framework::INPUT_PACKAGES); + foreach ($files as $file) { + $detector->addInput($file, Framework::INPUT_FILE); + } + + $detector + ->addOption(new Analog()) + ->addOption(new Angular()) + ->addOption(new Astro()) + ->addOption(new Flutter()) + ->addOption(new Lynx()) + ->addOption(new NextJs()) + ->addOption(new Nuxt()) + ->addOption(new React()) + ->addOption(new ReactNative()) + ->addOption(new Remix()) + ->addOption(new Svelte()) + ->addOption(new SvelteKit()) + ->addOption(new TanStackStart()) + ->addOption(new Vue()); + + $framework = $detector->detect(); + + if (!\is_null($framework)) { + $output->setAttribute('installCommand', $framework->getInstallCommand()); + $output->setAttribute('buildCommand', $framework->getBuildCommand()); + $output->setAttribute('outputDirectory', $framework->getOutputDirectory()); + $framework = $framework->getName(); + } else { + $framework = 'other'; + $output->setAttribute('installCommand', ''); + $output->setAttribute('buildCommand', ''); + $output->setAttribute('outputDirectory', ''); + } + + $frameworks = Config::getParam('frameworks'); + if (!\in_array($framework, \array_keys($frameworks), true)) { + $framework = 'other'; + } + $output->setAttribute('framework', $framework); + } else { + $output = new Document([ + 'runtime' => '', + 'commands' => '', + 'entrypoint' => '', + ]); + + $strategies = [ + new Strategy(Strategy::FILEMATCH), + new Strategy(Strategy::LANGUAGES), + new Strategy(Strategy::EXTENSION), + ]; + + foreach ($strategies as $strategy) { + $detector = new Runtime($strategy, $packager); + + if ($strategy->getValue() === Strategy::LANGUAGES) { + foreach ($languages as $language) { + $detector->addInput($language); + } + } else { + foreach ($files as $file) { + $detector->addInput($file); + } + } + + $detector + ->addOption(new Node()) + ->addOption(new Bun()) + ->addOption(new Deno()) + ->addOption(new PHP()) + ->addOption(new Python()) + ->addOption(new Dart()) + ->addOption(new Swift()) + ->addOption(new Ruby()) + ->addOption(new Java()) + ->addOption(new CPP()) + ->addOption(new Dotnet()); + + $runtime = $detector->detect(); + + if (!\is_null($runtime)) { + $output->setAttribute('commands', $runtime->getCommands()); + $output->setAttribute('entrypoint', $runtime->getEntrypoint()); + $runtime = $runtime->getName(); + break; + } + } + + if (!empty($runtime)) { + $runtimes = Config::getParam('runtimes'); + $runtimeWithVersion = ''; + foreach ($runtimes as $runtimeKey => $runtimeConfig) { + if ($runtimeConfig['key'] === $runtime) { + $runtimeWithVersion = $runtimeKey; + } + } + + if (empty($runtimeWithVersion)) { + throw new Exception(Exception::FUNCTION_RUNTIME_NOT_DETECTED); + } + + $output->setAttribute('runtime', $runtimeWithVersion); + } else { + throw new Exception(Exception::FUNCTION_RUNTIME_NOT_DETECTED); + } + } + + $wg = new WaitGroup(); + $envs = []; + foreach ($files as $file) { + if (!(\str_starts_with($file, '.env'))) { + continue; + } + + $wg->add(); + go(function () use ($github, $owner, $repositoryName, $providerRootDirectory, $file, $wg, &$envs) { + try { + $contentResponse = $github->getRepositoryContent($owner, $repositoryName, \rtrim($providerRootDirectory, '/') . '/' . $file); + $envFile = $contentResponse['content'] ?? ''; + + $configAdapter = new ConfigDotenv(); + try { + $envObject = $configAdapter->parse($envFile); + foreach ($envObject as $envName => $envValue) { + $envs[$envName] = $envValue; + } + } catch (Parse $err) { + // Silence error, so rest of endpoint can return + } + } finally { + $wg->done(); + } + }); + } + $wg->wait(); + + $variables = []; + foreach ($envs as $key => $value) { + $variables[] = [ + 'name' => $key, + 'value' => $value, + ]; + } + + $output->setAttribute('variables', $variables); + + $response->dynamic($output, $type === 'framework' ? Response::MODEL_DETECTION_FRAMEWORK : Response::MODEL_DETECTION_RUNTIME); + } +} diff --git a/src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/Get.php b/src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/Get.php new file mode 100644 index 0000000000..4dee84752b --- /dev/null +++ b/src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/Get.php @@ -0,0 +1,96 @@ +setHttpMethod(Action::HTTP_REQUEST_METHOD_GET) + ->setHttpPath('/v1/vcs/github/installations/:installationId/providerRepositories/:providerRepositoryId') + ->desc('Get repository') + ->groups(['api', 'vcs']) + ->label('scope', 'vcs.read') + ->label('resourceType', RESOURCE_TYPE_VCS) + ->label('sdk', new Method( + namespace: 'vcs', + group: 'repositories', + name: 'getRepository', + description: '/docs/references/vcs/get-repository.md', + auth: [AuthType::ADMIN], + responses: [ + new SDKResponse( + code: Response::STATUS_CODE_OK, + model: Response::MODEL_PROVIDER_REPOSITORY, + ) + ] + )) + ->param('installationId', '', new Text(256), 'Installation Id') + ->param('providerRepositoryId', '', new Text(256), 'Repository Id') + ->inject('gitHub') + ->inject('response') + ->inject('dbForPlatform') + ->callback($this->action(...)); + } + + public function action( + string $installationId, + string $providerRepositoryId, + GitHub $github, + Response $response, + Database $dbForPlatform + ) { + $installation = $dbForPlatform->getDocument('installations', $installationId); + + if ($installation->isEmpty()) { + throw new Exception(Exception::INSTALLATION_NOT_FOUND); + } + + $providerInstallationId = $installation->getAttribute('providerInstallationId'); + $privateKey = System::getEnv('_APP_VCS_GITHUB_PRIVATE_KEY'); + $githubAppId = System::getEnv('_APP_VCS_GITHUB_APP_ID'); + $github->initializeVariables($providerInstallationId, $privateKey, $githubAppId); + + $owner = $github->getOwnerName($providerInstallationId) ?? ''; + try { + $repositoryName = $github->getRepositoryName($providerRepositoryId) ?? ''; + if (empty($repositoryName)) { + throw new Exception(Exception::PROVIDER_REPOSITORY_NOT_FOUND); + } + } catch (RepositoryNotFound $e) { + throw new Exception(Exception::PROVIDER_REPOSITORY_NOT_FOUND); + } + + $repository = $github->getRepository($owner, $repositoryName); + + $repository['id'] = \strval($repository['id']) ?? ''; + $repository['pushedAt'] = $repository['pushed_at'] ?? ''; + $repository['organization'] = $installation->getAttribute('organization', ''); + $repository['provider'] = $installation->getAttribute('provider', ''); + $repository['defaultBranch'] = $repository['default_branch'] ?? ''; + + $response->dynamic(new Document($repository), Response::MODEL_PROVIDER_REPOSITORY); + } +} diff --git a/src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/XList.php b/src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/XList.php new file mode 100644 index 0000000000..9acc77e1f2 --- /dev/null +++ b/src/Appwrite/Platform/Modules/VCS/Http/Installations/Repositories/XList.php @@ -0,0 +1,319 @@ +setHttpMethod(Action::HTTP_REQUEST_METHOD_GET) + ->setHttpPath('/v1/vcs/github/installations/:installationId/providerRepositories') + ->desc('List repositories') + ->groups(['api', 'vcs']) + ->label('scope', 'vcs.read') + ->label('resourceType', RESOURCE_TYPE_VCS) + ->label('sdk', new Method( + namespace: 'vcs', + group: 'repositories', + name: 'listRepositories', + description: '/docs/references/vcs/list-repositories.md', + auth: [AuthType::ADMIN], + responses: [ + new SDKResponse( + code: Response::STATUS_CODE_OK, + model: Response::MODEL_PROVIDER_REPOSITORY_RUNTIME_LIST, + ), + new SDKResponse( + code: Response::STATUS_CODE_OK, + model: Response::MODEL_PROVIDER_REPOSITORY_FRAMEWORK_LIST, + ) + ] + )) + ->param('installationId', '', new Text(256), 'Installation Id') + ->param('type', '', new WhiteList(['runtime', 'framework']), 'Detector type. Must be one of the following: runtime, framework') + ->param('search', '', new Text(256), 'Search term to filter your list results. Max length: 256 chars.', true) + ->param('queries', [], new Queries([new Limit(), new Offset()]), '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', true) + ->inject('gitHub') + ->inject('response') + ->inject('dbForPlatform') + ->callback($this->action(...)); + } + + public function action( + string $installationId, + string $type, + string $search, + array $queries, + GitHub $github, + Response $response, + Database $dbForPlatform + ) { + if (empty($search)) { + $search = ""; + } + + $installation = $dbForPlatform->getDocument('installations', $installationId); + + if ($installation->isEmpty()) { + throw new Exception(Exception::INSTALLATION_NOT_FOUND); + } + + $providerInstallationId = $installation->getAttribute('providerInstallationId'); + $privateKey = System::getEnv('_APP_VCS_GITHUB_PRIVATE_KEY'); + $githubAppId = System::getEnv('_APP_VCS_GITHUB_APP_ID'); + $github->initializeVariables($providerInstallationId, $privateKey, $githubAppId); + + $queries = Query::parseQueries($queries); + $limitQuery = current(array_filter($queries, fn ($query) => $query->getMethod() === Query::TYPE_LIMIT)); + $offsetQuery = current(array_filter($queries, fn ($query) => $query->getMethod() === Query::TYPE_OFFSET)); + + $limit = !empty($limitQuery) ? $limitQuery->getValue() : 4; + $offset = !empty($offsetQuery) ? $offsetQuery->getValue() : 0; + + if ($offset % $limit !== 0) { + throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'offset must be a multiple of the limit'); + } + + $page = ($offset / $limit) + 1; + $owner = $github->getOwnerName($providerInstallationId); + ['items' => $repos, 'total' => $total] = $github->searchRepositories($owner, $page, $limit, $search); + + $repos = \array_map(function ($repo) use ($installation) { + $repo['id'] = \strval($repo['id'] ?? ''); + $repo['pushedAt'] = $repo['pushed_at'] ?? null; + $repo['provider'] = $installation->getAttribute('provider', '') ?? ''; + $repo['organization'] = $installation->getAttribute('organization', '') ?? ''; + return $repo; + }, $repos); + + $repos = batch(\array_map(function ($repo) use ($type, $github) { + return function () use ($repo, $type, $github) { + $files = $github->listRepositoryContents($repo['organization'], $repo['name'], ''); + $files = \array_column($files, 'name'); + + $detector = new Packager(); + foreach ($files as $file) { + $detector->addInput($file); + } + $detector + ->addOption(new Yarn()) + ->addOption(new PNPM()) + ->addOption(new NPM()); + $detection = $detector->detect(); + + $packager = !\is_null($detection) ? $detection->getName() : 'npm'; + + if ($type === 'framework') { + $packages = ''; + try { + $contentResponse = $github->getRepositoryContent($repo['organization'], $repo['name'], 'package.json'); + $packages = $contentResponse['content'] ?? ''; + } catch (FileNotFound $e) { + // Continue detection without package.json + } + + $frameworkDetector = new Framework($packager); + $frameworkDetector->addInput($packages, Framework::INPUT_PACKAGES); + foreach ($files as $file) { + $frameworkDetector->addInput($file, Framework::INPUT_FILE); + } + + $frameworkDetector + ->addOption(new Analog()) + ->addOption(new Angular()) + ->addOption(new Astro()) + ->addOption(new Flutter()) + ->addOption(new Lynx()) + ->addOption(new NextJs()) + ->addOption(new Nuxt()) + ->addOption(new React()) + ->addOption(new ReactNative()) + ->addOption(new Remix()) + ->addOption(new Svelte()) + ->addOption(new SvelteKit()) + ->addOption(new TanStackStart()) + ->addOption(new Vue()); + + $detectedFramework = $frameworkDetector->detect(); + + if (!\is_null($detectedFramework)) { + $framework = $detectedFramework->getName(); + } else { + $framework = 'other'; + } + + $frameworks = Config::getParam('frameworks'); + if (!\in_array($framework, \array_keys($frameworks), true)) { + $framework = 'other'; + } + $repo['framework'] = $framework; + } else { + $languages = $github->listRepositoryLanguages($repo['organization'], $repo['name']); + + $strategies = [ + new Strategy(Strategy::FILEMATCH), + new Strategy(Strategy::LANGUAGES), + new Strategy(Strategy::EXTENSION), + ]; + + foreach ($strategies as $strategy) { + $detector = new Runtime($strategy, $packager); + if ($strategy->getValue() === Strategy::LANGUAGES) { + foreach ($languages as $language) { + $detector->addInput($language); + } + } else { + foreach ($files as $file) { + $detector->addInput($file); + } + } + $detector + ->addOption(new Node()) + ->addOption(new Bun()) + ->addOption(new Deno()) + ->addOption(new PHP()) + ->addOption(new Python()) + ->addOption(new Dart()) + ->addOption(new Swift()) + ->addOption(new Ruby()) + ->addOption(new Java()) + ->addOption(new CPP()) + ->addOption(new Dotnet()); + + $runtime = $detector->detect(); + + if (!\is_null($runtime)) { + $runtime = $runtime->getName(); + break; + } + } + + if (!empty($runtime)) { + $runtimes = Config::getParam('runtimes'); + $runtimeWithVersion = ''; + foreach ($runtimes as $runtimeKey => $runtimeConfig) { + if ($runtimeConfig['key'] === $runtime) { + $runtimeWithVersion = $runtimeKey; + } + } + + $repo['runtime'] = $runtimeWithVersion ?? ''; + } + } + + $wg = new WaitGroup(); + $envs = []; + foreach ($files as $file) { + if (!(\str_starts_with($file, '.env'))) { + continue; + } + + $wg->add(); + go(function () use ($github, $repo, $file, $wg, &$envs) { + try { + $contentResponse = $github->getRepositoryContent($repo['organization'], $repo['name'], $file); + $envFile = $contentResponse['content'] ?? ''; + + $configAdapter = new ConfigDotenv(); + try { + $envObject = $configAdapter->parse($envFile); + foreach ($envObject as $envName => $envValue) { + $envs[$envName] = $envValue; + } + } catch (Parse) { + // Silence error, so rest of endpoint can return + } + } finally { + $wg->done(); + } + }); + } + $wg->wait(); + + $repo['variables'] = []; + foreach ($envs as $key => $value) { + $repo['variables'][] = [ + 'name' => $key, + 'value' => $value, + ]; + } + + return $repo; + }; + }, $repos)); + + $repos = \array_map(function ($repo) { + return new Document($repo); + }, $repos); + + $response->dynamic(new Document([ + $type === 'framework' ? 'frameworkProviderRepositories' : 'runtimeProviderRepositories' => $repos, + 'total' => $total, + ]), ($type === 'framework') ? Response::MODEL_PROVIDER_REPOSITORY_FRAMEWORK_LIST : Response::MODEL_PROVIDER_REPOSITORY_RUNTIME_LIST); + } +} diff --git a/src/Appwrite/Platform/Modules/VCS/Services/Http.php b/src/Appwrite/Platform/Modules/VCS/Services/Http.php index 3630a5b32f..11e26be0d5 100644 --- a/src/Appwrite/Platform/Modules/VCS/Services/Http.php +++ b/src/Appwrite/Platform/Modules/VCS/Services/Http.php @@ -4,6 +4,12 @@ namespace Appwrite\Platform\Modules\VCS\Services; use Appwrite\Platform\Modules\VCS\Http\Installations\Delete as DeleteInstallation; use Appwrite\Platform\Modules\VCS\Http\Installations\Get as GetInstallation; +use Appwrite\Platform\Modules\VCS\Http\Installations\Repositories\Branches\XList as ListRepositoryBranches; +use Appwrite\Platform\Modules\VCS\Http\Installations\Repositories\Contents\Get as GetRepositoryContents; +use Appwrite\Platform\Modules\VCS\Http\Installations\Repositories\Create as CreateRepository; +use Appwrite\Platform\Modules\VCS\Http\Installations\Repositories\Detections\Create as CreateRepositoryDetections; +use Appwrite\Platform\Modules\VCS\Http\Installations\Repositories\Get as GetRepository; +use Appwrite\Platform\Modules\VCS\Http\Installations\Repositories\XList as ListRepositories; use Appwrite\Platform\Modules\VCS\Http\Installations\XList as ListInstallations; use Utopia\Platform\Service; @@ -17,5 +23,13 @@ class Http extends Service $this->addAction(GetInstallation::getName(), new GetInstallation()); $this->addAction(ListInstallations::getName(), new ListInstallations()); $this->addAction(DeleteInstallation::getName(), new DeleteInstallation()); + + // Repositories + $this->addAction(CreateRepository::getName(), new CreateRepository()); + $this->addAction(GetRepository::getName(), new GetRepository()); + $this->addAction(ListRepositories::getName(), new ListRepositories()); + $this->addAction(ListRepositoryBranches::getName(), new ListRepositoryBranches()); + $this->addAction(GetRepositoryContents::getName(), new GetRepositoryContents()); + $this->addAction(CreateRepositoryDetections::getName(), new CreateRepositoryDetections()); } } From 1219391c766f75d9b3098682a2565f26ae1a3517 Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Fri, 6 Feb 2026 15:27:42 +0530 Subject: [PATCH 50/65] update composer --- composer.lock | 71 ++++++++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 38 deletions(-) diff --git a/composer.lock b/composer.lock index 477bae6a31..e202fdf305 100644 --- a/composer.lock +++ b/composer.lock @@ -606,16 +606,16 @@ }, { "name": "giggsey/libphonenumber-for-php-lite", - "version": "8.13.36", + "version": "9.0.23", "source": { "type": "git", "url": "https://github.com/giggsey/libphonenumber-for-php-lite.git", - "reference": "144bbe70d67664b5245910a475c7190ff140ab4b" + "reference": "e8f6f896c1bef398136849934a934904bd9bf072" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php-lite/zipball/144bbe70d67664b5245910a475c7190ff140ab4b", - "reference": "144bbe70d67664b5245910a475c7190ff140ab4b", + "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php-lite/zipball/e8f6f896c1bef398136849934a934904bd9bf072", + "reference": "e8f6f896c1bef398136849934a934904bd9bf072", "shasum": "" }, "require": { @@ -627,18 +627,19 @@ }, "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" + "friendsofphp/php-cs-fixer": "^3.71", + "infection/infection": "^0.29|^0.31.0", + "nette/php-generator": "^4.1", + "php-coveralls/php-coveralls": "^2.7", + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^2.1.7", + "phpstan/phpstan-deprecation-rules": "^2.0.1", + "phpstan/phpstan-phpunit": "^2.0.4", + "phpstan/phpstan-strict-rules": "^2.0.3", + "phpunit/phpunit": "^10.5.45", + "symfony/console": "^6.4", + "symfony/filesystem": "^6.4", + "symfony/process": "^6.4" }, "suggest": { "giggsey/libphonenumber-for-php": "Use libphonenumber-for-php for geocoding, carriers, timezones and matching" @@ -646,19 +647,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "8.x-dev" + "dev-master": "9.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": [ @@ -685,7 +680,7 @@ "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" + "time": "2026-01-30T12:33:03+00:00" }, { "name": "google/protobuf", @@ -3610,16 +3605,16 @@ }, { "name": "utopia-php/cli", - "version": "0.15.2", + "version": "0.15.4", "source": { "type": "git", "url": "https://github.com/utopia-php/cli.git", - "reference": "da00ff6b8b29a826a1794002ae43442cdf3a0f5f" + "reference": "cc873548dcab4329f2d56ca35f2edf3ae9d70f51" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/cli/zipball/da00ff6b8b29a826a1794002ae43442cdf3a0f5f", - "reference": "da00ff6b8b29a826a1794002ae43442cdf3a0f5f", + "url": "https://api.github.com/repos/utopia-php/cli/zipball/cc873548dcab4329f2d56ca35f2edf3ae9d70f51", + "reference": "cc873548dcab4329f2d56ca35f2edf3ae9d70f51", "shasum": "" }, "require": { @@ -3653,9 +3648,9 @@ ], "support": { "issues": "https://github.com/utopia-php/cli/issues", - "source": "https://github.com/utopia-php/cli/tree/0.15.2" + "source": "https://github.com/utopia-php/cli/tree/0.15.4" }, - "time": "2025-04-15T10:08:48+00:00" + "time": "2026-02-06T09:49:09+00:00" }, { "name": "utopia-php/compression", @@ -4414,22 +4409,22 @@ }, { "name": "utopia-php/messaging", - "version": "0.20.0", + "version": "0.20.1", "source": { "type": "git", "url": "https://github.com/utopia-php/messaging.git", - "reference": "6c5be4588d97e3732a1907ecb13cd8a098eade96" + "reference": "fcb4c3c46a48008a677957690bd45ec934dd33b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/messaging/zipball/6c5be4588d97e3732a1907ecb13cd8a098eade96", - "reference": "6c5be4588d97e3732a1907ecb13cd8a098eade96", + "url": "https://api.github.com/repos/utopia-php/messaging/zipball/fcb4c3c46a48008a677957690bd45ec934dd33b0", + "reference": "fcb4c3c46a48008a677957690bd45ec934dd33b0", "shasum": "" }, "require": { "ext-curl": "*", "ext-openssl": "*", - "giggsey/libphonenumber-for-php-lite": "8.13.36", + "giggsey/libphonenumber-for-php-lite": "9.0.23", "php": ">=8.0.0", "phpmailer/phpmailer": "6.9.1" }, @@ -4459,9 +4454,9 @@ ], "support": { "issues": "https://github.com/utopia-php/messaging/issues", - "source": "https://github.com/utopia-php/messaging/tree/0.20.0" + "source": "https://github.com/utopia-php/messaging/tree/0.20.1" }, - "time": "2025-10-22T04:27:37+00:00" + "time": "2026-02-06T09:56:06+00:00" }, { "name": "utopia-php/migration", From ab3580637242e47155b0a0822652338c378d5bfb Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Fri, 6 Feb 2026 15:43:59 +0530 Subject: [PATCH 51/65] update system lib --- composer.json | 2 +- composer.lock | 44 ++++++++++++++++++++++---------------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/composer.json b/composer.json index b68c632796..356723ec8d 100644 --- a/composer.json +++ b/composer.json @@ -73,7 +73,7 @@ "utopia-php/registry": "0.5.*", "utopia-php/storage": "0.18.*", "utopia-php/swoole": "1.*", - "utopia-php/system": "0.9.*", + "utopia-php/system": "0.10.*", "utopia-php/telemetry": "0.2.*", "utopia-php/vcs": "1.*", "utopia-php/websocket": "0.3.*", diff --git a/composer.lock b/composer.lock index e202fdf305..6041a4984a 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": "647d248df5990c3470fe85b7cce60498", + "content-hash": "917f9050c673379c91e46814c7c07f64", "packages": [ { "name": "adhocore/jwt", @@ -161,21 +161,21 @@ }, { "name": "appwrite/php-runtimes", - "version": "0.19.2", + "version": "0.19.3", "source": { "type": "git", "url": "https://github.com/appwrite/runtimes.git", - "reference": "e5c142519df5aced37de9c302971c29c079ce3d9" + "reference": "bfe9f3c730c8c203c5e2d80bd5a81c9b1579714e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/appwrite/runtimes/zipball/e5c142519df5aced37de9c302971c29c079ce3d9", - "reference": "e5c142519df5aced37de9c302971c29c079ce3d9", + "url": "https://api.github.com/repos/appwrite/runtimes/zipball/bfe9f3c730c8c203c5e2d80bd5a81c9b1579714e", + "reference": "bfe9f3c730c8c203c5e2d80bd5a81c9b1579714e", "shasum": "" }, "require": { "php": ">=8.0", - "utopia-php/system": "0.9.*" + "utopia-php/system": "0.10.*" }, "require-dev": { "laravel/pint": "^1.15", @@ -210,9 +210,9 @@ ], "support": { "issues": "https://github.com/appwrite/runtimes/issues", - "source": "https://github.com/appwrite/runtimes/tree/0.19.2" + "source": "https://github.com/appwrite/runtimes/tree/0.19.3" }, - "time": "2025-11-11T13:44:44+00:00" + "time": "2026-02-06T10:08:18+00:00" }, { "name": "brick/math", @@ -5109,16 +5109,16 @@ }, { "name": "utopia-php/system", - "version": "0.9.0", + "version": "0.10.0", "source": { "type": "git", "url": "https://github.com/utopia-php/system.git", - "reference": "8e4a7edaf2dfeb4c9524e9f766d27754f2c4b64d" + "reference": "6441a9c180958a373e5ddb330264dd638539dfdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/system/zipball/8e4a7edaf2dfeb4c9524e9f766d27754f2c4b64d", - "reference": "8e4a7edaf2dfeb4c9524e9f766d27754f2c4b64d", + "url": "https://api.github.com/repos/utopia-php/system/zipball/6441a9c180958a373e5ddb330264dd638539dfdb", + "reference": "6441a9c180958a373e5ddb330264dd638539dfdb", "shasum": "" }, "require": { @@ -5126,7 +5126,7 @@ }, "require-dev": { "laravel/pint": "1.13.*", - "phpstan/phpstan": "1.10.*", + "phpstan/phpstan": "1.12.*", "phpunit/phpunit": "9.6.*" }, "type": "library", @@ -5159,9 +5159,9 @@ ], "support": { "issues": "https://github.com/utopia-php/system/issues", - "source": "https://github.com/utopia-php/system/tree/0.9.0" + "source": "https://github.com/utopia-php/system/tree/0.10.0" }, - "time": "2024-10-09T14:44:01+00:00" + "time": "2025-10-15T19:12:00+00:00" }, { "name": "utopia-php/telemetry", @@ -5265,16 +5265,16 @@ }, { "name": "utopia-php/vcs", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/utopia-php/vcs.git", - "reference": "3a427529dae09c0794541adac19062603d441e28" + "reference": "0f942f667319bb22cd420431e4e79107b41061f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/vcs/zipball/3a427529dae09c0794541adac19062603d441e28", - "reference": "3a427529dae09c0794541adac19062603d441e28", + "url": "https://api.github.com/repos/utopia-php/vcs/zipball/0f942f667319bb22cd420431e4e79107b41061f3", + "reference": "0f942f667319bb22cd420431e4e79107b41061f3", "shasum": "" }, "require": { @@ -5282,7 +5282,7 @@ "php": ">=8.0", "utopia-php/cache": "1.0.*", "utopia-php/framework": "0.*.*", - "utopia-php/system": "0.9.*" + "utopia-php/system": "0.10.*" }, "require-dev": { "laravel/pint": "1.*.*", @@ -5308,9 +5308,9 @@ ], "support": { "issues": "https://github.com/utopia-php/vcs/issues", - "source": "https://github.com/utopia-php/vcs/tree/1.0.0" + "source": "https://github.com/utopia-php/vcs/tree/1.0.1" }, - "time": "2026-01-30T06:18:24+00:00" + "time": "2026-02-06T10:11:58+00:00" }, { "name": "utopia-php/websocket", From d864a61f9390819ebe1150a07a769e463324dbd2 Mon Sep 17 00:00:00 2001 From: loks0n <22452787+loks0n@users.noreply.github.com> Date: Fri, 6 Feb 2026 19:16:37 +0000 Subject: [PATCH 52/65] chore: upgrade traefik --- app/views/install/compose.phtml | 2 +- docker-compose.yml | 2 +- tests/resources/docker/docker-compose.yml | 2 +- tests/unit/Docker/ComposeTest.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/views/install/compose.phtml b/app/views/install/compose.phtml index 16af33ca3a..0104a9d5a5 100644 --- a/app/views/install/compose.phtml +++ b/app/views/install/compose.phtml @@ -14,7 +14,7 @@ $image = $this->getParam('image', ''); $enableAssistant = $this->getParam('enableAssistant', false); ?>services: traefik: - image: traefik:2.11 + image: traefik:3.6 container_name: appwrite-traefik <<: *x-logging command: diff --git a/docker-compose.yml b/docker-compose.yml index 349a81e2de..37305055e5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,7 +12,7 @@ x-logging: &x-logging services: traefik: - image: traefik:2.11 + image: traefik:3.6 <<: *x-logging container_name: appwrite-traefik command: diff --git a/tests/resources/docker/docker-compose.yml b/tests/resources/docker/docker-compose.yml index 039ffb731a..c648b2f4c3 100644 --- a/tests/resources/docker/docker-compose.yml +++ b/tests/resources/docker/docker-compose.yml @@ -1,6 +1,6 @@ services: traefik: - image: traefik:2.2 + image: traefik:3.6 container_name: appwrite-traefik command: - --log.level=DEBUG diff --git a/tests/unit/Docker/ComposeTest.php b/tests/unit/Docker/ComposeTest.php index 93e0204264..74779230ac 100644 --- a/tests/unit/Docker/ComposeTest.php +++ b/tests/unit/Docker/ComposeTest.php @@ -26,7 +26,7 @@ class ComposeTest extends TestCase $this->assertCount(15, $this->object->getServices()); $this->assertEquals('appwrite', $this->object->getService('appwrite')->getContainerName()); $this->assertEquals('', $this->object->getService('appwrite')->getImageVersion()); - $this->assertEquals('2.2', $this->object->getService('traefik')->getImageVersion()); + $this->assertEquals('3.6', $this->object->getService('traefik')->getImageVersion()); $this->assertEquals(['2080' => '80', '2443' => '443', '8080' => '8080'], $this->object->getService('traefik')->getPorts()); } From a520a67da893b918ea1a38d00f34526af14f2cc1 Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Sat, 7 Feb 2026 21:19:00 +0530 Subject: [PATCH 53/65] fix: disable execution document writes for nyc region Temporarily skip all execution createDocument and updateDocument calls in the Functions worker when _APP_REGION is set to 'nyc' to reduce database load. Marked with TODO comments for removal. --- src/Appwrite/Platform/Workers/Functions.php | 42 +++++++++++++-------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/src/Appwrite/Platform/Workers/Functions.php b/src/Appwrite/Platform/Workers/Functions.php index a0f4b65763..98e846aa4d 100644 --- a/src/Appwrite/Platform/Workers/Functions.php +++ b/src/Appwrite/Platform/Workers/Functions.php @@ -80,7 +80,9 @@ class Functions extends Action // Short-term solution to offhand write operation from API container if ($type === Func::TYPE_ASYNC_WRITE) { $execution = new Document($payload['execution'] ?? []); - $dbForProject->createDocument('executions', $execution); + if (System::getEnv('_APP_REGION') !== 'nyc') { // TODO: Remove region check + $dbForProject->createDocument('executions', $execution); + } return; } @@ -309,10 +311,12 @@ class Functions extends Action 'duration' => 0.0, ]); - $execution = $dbForProject->createDocument('executions', $execution); + if (System::getEnv('_APP_REGION') !== 'nyc') { // TODO: Remove region check + $execution = $dbForProject->createDocument('executions', $execution); - if ($execution->isEmpty()) { - throw new Exception('Failed to create execution'); + if ($execution->isEmpty()) { + throw new Exception('Failed to create execution'); + } } } @@ -451,22 +455,26 @@ class Functions extends Action 'duration' => 0.0, ]); - $execution = $dbForProject->createDocument('executions', $execution); + if (System::getEnv('_APP_REGION') !== 'nyc') { // TODO: Remove region check + $execution = $dbForProject->createDocument('executions', $execution); - // TODO: @Meldiron Trigger executions.create event here + // TODO: @Meldiron Trigger executions.create event here - if ($execution->isEmpty()) { - throw new Exception('Failed to create or read execution'); + if ($execution->isEmpty()) { + throw new Exception('Failed to create or read execution'); + } } } if ($execution->getAttribute('status') !== 'processing') { $execution->setAttribute('status', 'processing'); - try { - $execution = $dbForProject->updateDocument('executions', $executionId, $execution); - } catch (\Throwable $e) { - $log->addExtra('updateError', $e->getMessage()); + if (System::getEnv('_APP_REGION') !== 'nyc') { // TODO: Remove region check + try { + $execution = $dbForProject->updateDocument('executions', $executionId, $execution); + } catch (\Throwable $e) { + $log->addExtra('updateError', $e->getMessage()); + } } } @@ -611,10 +619,12 @@ class Functions extends Action $errorCode = $th->getCode(); } finally { /** Update execution status */ - try { - $execution = $dbForProject->updateDocument('executions', $executionId, $execution); - } catch (\Throwable $e) { - $log->addExtra('updateError', $e->getMessage()); + if (System::getEnv('_APP_REGION') !== 'nyc') { // TODO: Remove region check + try { + $execution = $dbForProject->updateDocument('executions', $executionId, $execution); + } catch (\Throwable $e) { + $log->addExtra('updateError', $e->getMessage()); + } } /** Trigger usage queue */ From f1639e0b67e933f864b9ddf6be597586a61f9064 Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Sat, 7 Feb 2026 21:42:10 +0530 Subject: [PATCH 54/65] fix: disable execution document writes for nyc region in API Temporarily skip execution createDocument calls in the Executions Create handler when _APP_REGION is set to 'nyc' to reduce database load. Marked with TODO comments for removal. --- .../Modules/Functions/Http/Executions/Create.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Appwrite/Platform/Modules/Functions/Http/Executions/Create.php b/src/Appwrite/Platform/Modules/Functions/Http/Executions/Create.php index 6d2048b233..9265d72b48 100644 --- a/src/Appwrite/Platform/Modules/Functions/Http/Executions/Create.php +++ b/src/Appwrite/Platform/Modules/Functions/Http/Executions/Create.php @@ -301,7 +301,9 @@ class Create extends Base if ($async) { if (is_null($scheduledAt)) { - $execution = $authorization->skip(fn () => $dbForProject->createDocument('executions', $execution)); + if (System::getEnv('_APP_REGION') !== 'nyc') { // TODO: Remove region check + $execution = $authorization->skip(fn () => $dbForProject->createDocument('executions', $execution)); + } $queueForFunctions ->setType('http') ->setExecution($execution) @@ -342,7 +344,9 @@ class Create extends Base ->setAttribute('scheduleInternalId', $schedule->getSequence()) ->setAttribute('scheduledAt', $scheduledAt); - $execution = $authorization->skip(fn () => $dbForProject->createDocument('executions', $execution)); + if (System::getEnv('_APP_REGION') !== 'nyc') { // TODO: Remove region check + $execution = $authorization->skip(fn () => $dbForProject->createDocument('executions', $execution)); + } } $this->enqueueDeletes( @@ -501,7 +505,9 @@ class Create extends Base ->addMetric(str_replace(['{resourceType}', '{resourceInternalId}'], [RESOURCE_TYPE_FUNCTIONS, $function->getSequence()], METRIC_RESOURCE_TYPE_ID_EXECUTIONS_MB_SECONDS), (int)(($spec['memory'] ?? APP_COMPUTE_MEMORY_DEFAULT) * $execution->getAttribute('duration', 0) * ($spec['cpus'] ?? APP_COMPUTE_CPUS_DEFAULT))) ; - $execution = $authorization->skip(fn () => $dbForProject->createDocument('executions', $execution)); + if (System::getEnv('_APP_REGION') !== 'nyc') { // TODO: Remove region check + $execution = $authorization->skip(fn () => $dbForProject->createDocument('executions', $execution)); + } } $executionResponse['headers']['x-appwrite-execution-id'] = $execution->getId(); From bed46a6bef1709002eb25c08e8673de31a21b7b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Sun, 8 Feb 2026 14:12:23 +0100 Subject: [PATCH 55/65] Fix redirect url approval for oauth flow --- app/init/resources.php | 77 +++++++++++++++++++++++++++--------------- 1 file changed, 50 insertions(+), 27 deletions(-) diff --git a/app/init/resources.php b/app/init/resources.php index ccbb703f50..9227b0fe99 100644 --- a/app/init/resources.php +++ b/app/init/resources.php @@ -236,45 +236,68 @@ Http::setResource('allowedSchemes', function (Document $project) { * Rule associated with a request origin. */ Http::setResource('rule', function (Request $request, Database $dbForPlatform, Document $project, Authorization $authorization) { - $domain = \parse_url($request->getOrigin(), PHP_URL_HOST); - if (empty($domain)) { + $domains = []; + + $originDomain = \parse_url($request->getOrigin(), PHP_URL_HOST); + if (!empty($originDomain)) { + $domains[] = $originDomain; + } + + $refererDomain = \parse_url($request->getReferer(), PHP_URL_HOST); + if (!empty($refererDomain)) { + $domains[] = $refererDomain; + } + + if (\count($domains) === 0) { return new Document(); } - // TODO: (@Meldiron) Remove after 1.7.x migration - $isMd5 = System::getEnv('_APP_RULES_FORMAT') === 'md5'; - $rule = $authorization->skip(function () use ($dbForPlatform, $domain, $isMd5) { - if ($isMd5) { - return $dbForPlatform->getDocument('rules', md5($domain)); - } + $permittedRule = null; - return $dbForPlatform->findOne('rules', [ - Query::equal('domain', [$domain]), - ]) ?? new Document(); - }); - - $permitsCurrentProject = $rule->getAttribute('projectInternalId', '') === $project->getSequence(); - - // Temporary implementation until custom wildcard domains are an official feature - // Allow trusted projects; Used for Console (website) previews - if (!$permitsCurrentProject && !$rule->isEmpty() && !empty($rule->getAttribute('projectId', ''))) { - $trustedProjects = []; - foreach (\explode(',', System::getEnv('_APP_CONSOLE_TRUSTED_PROJECTS', '')) as $trustedProject) { - if (empty($trustedProject)) { - continue; + foreach ($domains as $domain) { + // TODO: (@Meldiron) Remove after 1.7.x migration + $isMd5 = System::getEnv('_APP_RULES_FORMAT') === 'md5'; + $rule = $authorization->skip(function () use ($dbForPlatform, $domain, $isMd5) { + if ($isMd5) { + return $dbForPlatform->getDocument('rules', md5($domain)); } - $trustedProjects[] = $trustedProject; + + return $dbForPlatform->findOne('rules', [ + Query::equal('domain', [$domain]), + ]) ?? new Document(); + }); + + if ($rule->isEmpty()) { + continue; } - if (\in_array($rule->getAttribute('projectId', ''), $trustedProjects)) { - $permitsCurrentProject = true; + + $permitsCurrentProject = $rule->getAttribute('projectInternalId', '') === $project->getSequence(); + + // Temporary implementation until custom wildcard domains are an official feature + // Allow trusted projects; Used for Console (website) previews + if (!$permitsCurrentProject && !$rule->isEmpty() && !empty($rule->getAttribute('projectId', ''))) { + $trustedProjects = []; + foreach (\explode(',', System::getEnv('_APP_CONSOLE_TRUSTED_PROJECTS', '')) as $trustedProject) { + if (empty($trustedProject)) { + continue; + } + $trustedProjects[] = $trustedProject; + } + if (\in_array($rule->getAttribute('projectId', ''), $trustedProjects)) { + $permitsCurrentProject = true; + } + } + + if ($permitsCurrentProject) { + $permittedRule = $rule; } } - if (!$permitsCurrentProject) { + if (\is_null($permittedRule)) { return new Document(); } - return $rule; + return $permittedRule; }, ['request', 'dbForPlatform', 'project', 'authorization']); /** From 3a0dc60a4cc638012338946a76e3b48bc9ce16ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Sun, 8 Feb 2026 14:36:34 +0100 Subject: [PATCH 56/65] Add test; fix implementation; pr reviews --- app/init/resources.php | 90 +++++++++---------- .../Projects/ProjectsConsoleClientTest.php | 85 ++++++++++++++++++ 2 files changed, 126 insertions(+), 49 deletions(-) diff --git a/app/init/resources.php b/app/init/resources.php index 9227b0fe99..9fdfdedeba 100644 --- a/app/init/resources.php +++ b/app/init/resources.php @@ -198,15 +198,26 @@ Http::setResource('allowedHostnames', function (array $platform, Document $proje } $originHostname = parse_url($request->getOrigin(), PHP_URL_HOST); + $refererHostname = parse_url($request->getReferer(), PHP_URL_HOST); + + $hostname = $originHostname; + if (empty($hostname)) { + $hostname = $refererHostname; + } /* Add request hostname for preflight requests */ if ($request->getMethod() === 'OPTIONS') { - $allowed[] = $originHostname; + $allowed[] = $hostname; } - /* Allow the request origin if a dev key or rule is found */ - if ((!$rule->isEmpty() || !$devKey->isEmpty()) && !empty($originHostname)) { - $allowed[] = $originHostname; + /* Allow the request origin of rule */ + if (!$rule->isEmpty() && !empty($rule->getAttribute('domain', ''))) { + $allowed[] = $rule->getAttribute('domain', ''); + } + + /* Allow the request origin if a dev key is found */ + if (!$devKey->isEmpty() && !empty($hostname)) { + $allowed[] = $hostname; } return array_unique($allowed); @@ -236,68 +247,49 @@ Http::setResource('allowedSchemes', function (Document $project) { * Rule associated with a request origin. */ Http::setResource('rule', function (Request $request, Database $dbForPlatform, Document $project, Authorization $authorization) { - $domains = []; + $domain = \parse_url($request->getOrigin(), PHP_URL_HOST); - $originDomain = \parse_url($request->getOrigin(), PHP_URL_HOST); - if (!empty($originDomain)) { - $domains[] = $originDomain; + if (empty($domain)) { + $domain = \parse_url($request->getReferer(), PHP_URL_HOST); } - $refererDomain = \parse_url($request->getReferer(), PHP_URL_HOST); - if (!empty($refererDomain)) { - $domains[] = $refererDomain; - } - - if (\count($domains) === 0) { + if (empty($domain)) { return new Document(); } - $permittedRule = null; - - foreach ($domains as $domain) { - // TODO: (@Meldiron) Remove after 1.7.x migration - $isMd5 = System::getEnv('_APP_RULES_FORMAT') === 'md5'; - $rule = $authorization->skip(function () use ($dbForPlatform, $domain, $isMd5) { - if ($isMd5) { - return $dbForPlatform->getDocument('rules', md5($domain)); - } - - return $dbForPlatform->findOne('rules', [ - Query::equal('domain', [$domain]), - ]) ?? new Document(); - }); - - if ($rule->isEmpty()) { - continue; + $isMd5 = System::getEnv('_APP_RULES_FORMAT') === 'md5'; + $rule = $authorization->skip(function () use ($dbForPlatform, $domain, $isMd5) { + if ($isMd5) { + return $dbForPlatform->getDocument('rules', md5($domain)); } - $permitsCurrentProject = $rule->getAttribute('projectInternalId', '') === $project->getSequence(); + return $dbForPlatform->findOne('rules', [ + Query::equal('domain', [$domain]), + ]) ?? new Document(); + }); - // Temporary implementation until custom wildcard domains are an official feature - // Allow trusted projects; Used for Console (website) previews - if (!$permitsCurrentProject && !$rule->isEmpty() && !empty($rule->getAttribute('projectId', ''))) { - $trustedProjects = []; - foreach (\explode(',', System::getEnv('_APP_CONSOLE_TRUSTED_PROJECTS', '')) as $trustedProject) { - if (empty($trustedProject)) { - continue; - } - $trustedProjects[] = $trustedProject; - } - if (\in_array($rule->getAttribute('projectId', ''), $trustedProjects)) { - $permitsCurrentProject = true; + $permitsCurrentProject = $rule->getAttribute('projectInternalId', '') === $project->getSequence(); + + // Temporary implementation until custom wildcard domains are an official feature + // Allow trusted projects; Used for Console (website) previews + if (!$permitsCurrentProject && !$rule->isEmpty() && !empty($rule->getAttribute('projectId', ''))) { + $trustedProjects = []; + foreach (\explode(',', System::getEnv('_APP_CONSOLE_TRUSTED_PROJECTS', '')) as $trustedProject) { + if (empty($trustedProject)) { + continue; } + $trustedProjects[] = $trustedProject; } - - if ($permitsCurrentProject) { - $permittedRule = $rule; + if (\in_array($rule->getAttribute('projectId', ''), $trustedProjects)) { + $permitsCurrentProject = true; } } - if (\is_null($permittedRule)) { + if (!$permitsCurrentProject) { return new Document(); } - return $permittedRule; + return $rule; }, ['request', 'dbForPlatform', 'project', 'authorization']); /** diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index 559ffe9f1d..460c9e365a 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -5116,6 +5116,91 @@ class ProjectsConsoleClientTest extends Scope $this->assertEquals(201, $response['headers']['status-code']); } + public function testRuleOAuthRedirect(): void + { + // Prepare project + $projectId = $this->setupProject([ + 'projectId' => ID::unique(), + 'name' => 'testRuleOAuthRedirect', + 'region' => System::getEnv('_APP_REGION', 'default') + ]); + + $provider = 'mock'; + $appId = '1'; + $secret = '123456'; + + // Prepare OAuth provider + $response = $this->client->call(Client::METHOD_PATCH, '/projects/' . $projectId . '/oauth2', array_merge([ + 'origin' => 'http://localhost', + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'provider' => $provider, + 'appId' => $appId, + 'secret' => $secret, + 'enabled' => true, + ]); + $this->assertEquals(200, $response['headers']['status-code']); + + // Prepare rule. In reality this is site rule, but for testing, API rule is enough, and faster to prepare + $domain = \uniqid() . '-with-rule.custom.localhost'; + $rule = $this->client->call(Client::METHOD_POST, '/proxy/rules/api', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $projectId, + 'x-appwrite-mode' => 'admin', + ], $this->getHeaders()), [ + 'domain' => $domain + ]); + + $this->assertEquals(201, $rule['headers']['status-code']); + + // Ensure unknown domain cannot be redirect URL + $response = $this->client->call(Client::METHOD_GET, '/account/sessions/oauth2/' . $provider, [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $projectId, + 'referer' => 'https://' . $domain, + ], [ + 'success' => 'https://domain-without-rule.com', + 'failure' => 'https://domain-without-rule.com' + ], followRedirects: false); + $this->assertEquals(400, $response['headers']['status-code']); + + // Ensure rule's domain can be redirect URL + $response = $this->client->call(Client::METHOD_GET, '/account/sessions/oauth2/' . $provider, [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $projectId, + 'referer' => 'https://' . $domain, + ], [ + 'success' => 'https://' . $domain, + 'failure' => 'https://' . $domain + ], followRedirects: false); + $this->assertEquals(301, $response['headers']['status-code']); + + // Ensure unknown domain cannot be redirect URL + $response = $this->client->call(Client::METHOD_POST, '/account/sessions/magic-url', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $projectId, + 'referer' => 'https://' . $domain, + ], [ + 'userId' => ID::unique(), + 'email' => 'user@appwrite.io', + 'url' => 'https://domain-without-rule.com', + ]); + $this->assertEquals(400, $response['headers']['status-code']); + + // Ensure rule's domain can be redirect URL + $response = $this->client->call(Client::METHOD_POST, '/account/sessions/magic-url', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $projectId, + 'referer' => 'https://' . $domain, + ], [ + 'userId' => ID::unique(), + 'email' => 'user@appwrite.io', + 'url' => 'https://' . $domain, + ]); + $this->assertEquals(201, $response['headers']['status-code']); + } + /** * @group abuseEnabled */ From fd323feae8d78596c03fbebd9ee3d83acc524df5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Sun, 8 Feb 2026 14:37:35 +0100 Subject: [PATCH 57/65] Simplify diff --- app/init/resources.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/init/resources.php b/app/init/resources.php index 9fdfdedeba..8f78df1573 100644 --- a/app/init/resources.php +++ b/app/init/resources.php @@ -257,6 +257,7 @@ Http::setResource('rule', function (Request $request, Database $dbForPlatform, D return new Document(); } + // TODO: (@Meldiron) Remove after 1.7.x migration $isMd5 = System::getEnv('_APP_RULES_FORMAT') === 'md5'; $rule = $authorization->skip(function () use ($dbForPlatform, $domain, $isMd5) { if ($isMd5) { From 94581adfcb2085a3abf1d3345ed9735034210fd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Sun, 8 Feb 2026 14:44:21 +0100 Subject: [PATCH 58/65] Improve dev key tests --- .../Projects/ProjectsConsoleClientTest.php | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index 460c9e365a..9c9b93d43b 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -5091,6 +5091,31 @@ class ProjectsConsoleClientTest extends Scope 'failure' => 'https://example.com' ]); $this->assertEquals(200, $response['headers']['status-code']); + + /** Ensure any hostname is allowed */ + $response = $this->client->call(Client::METHOD_GET, '/account/sessions/oauth2/' . $provider, [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $projectId, + 'x-appwrite-dev-key' => $devKey['secret'], + 'origin' => '', + 'referer' => 'https://domain-without-rule.com' + ], [ + 'success' => 'https://domain-without-rule.com', + 'failure' => 'https://domain-without-rule.com' + ], followRedirects: false); + $this->assertEquals(301, $response['headers']['status-code']); + + $response = $this->client->call(Client::METHOD_GET, '/account/sessions/oauth2/' . $provider, [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $projectId, + 'x-appwrite-dev-key' => $devKey['secret'], + 'referer' => '', + 'origin' => 'https://domain-without-rule.com' + ], [ + 'success' => 'https://domain-without-rule.com', + 'failure' => 'https://domain-without-rule.com' + ], followRedirects: false); + $this->assertEquals(301, $response['headers']['status-code']); /** Test hostname in Magic URL */ $response = $this->client->call(Client::METHOD_POST, '/account/sessions/magic-url', [ @@ -5159,6 +5184,7 @@ class ProjectsConsoleClientTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $projectId, 'referer' => 'https://' . $domain, + 'origin' => '', ], [ 'success' => 'https://domain-without-rule.com', 'failure' => 'https://domain-without-rule.com' @@ -5170,6 +5196,7 @@ class ProjectsConsoleClientTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $projectId, 'referer' => 'https://' . $domain, + 'origin' => '', ], [ 'success' => 'https://' . $domain, 'failure' => 'https://' . $domain @@ -5181,6 +5208,7 @@ class ProjectsConsoleClientTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $projectId, 'referer' => 'https://' . $domain, + 'origin' => '', ], [ 'userId' => ID::unique(), 'email' => 'user@appwrite.io', @@ -5193,6 +5221,7 @@ class ProjectsConsoleClientTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $projectId, 'referer' => 'https://' . $domain, + 'origin' => '', ], [ 'userId' => ID::unique(), 'email' => 'user@appwrite.io', From 801707c4072bc90c2a20b4a5b9924d9379252054 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Sun, 8 Feb 2026 14:47:47 +0100 Subject: [PATCH 59/65] Linter fix --- tests/e2e/Services/Projects/ProjectsConsoleClientTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index 9c9b93d43b..e2e5621662 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -5091,7 +5091,7 @@ class ProjectsConsoleClientTest extends Scope 'failure' => 'https://example.com' ]); $this->assertEquals(200, $response['headers']['status-code']); - + /** Ensure any hostname is allowed */ $response = $this->client->call(Client::METHOD_GET, '/account/sessions/oauth2/' . $provider, [ 'content-type' => 'application/json', @@ -5104,7 +5104,7 @@ class ProjectsConsoleClientTest extends Scope 'failure' => 'https://domain-without-rule.com' ], followRedirects: false); $this->assertEquals(301, $response['headers']['status-code']); - + $response = $this->client->call(Client::METHOD_GET, '/account/sessions/oauth2/' . $provider, [ 'content-type' => 'application/json', 'x-appwrite-project' => $projectId, From 494ce5fc6a5d7f58a9ef8fd28afea66e12c055bd Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Mon, 9 Feb 2026 13:14:28 +0530 Subject: [PATCH 60/65] chore: release cli 13.3.1 --- app/config/sdks.php | 2 +- composer.lock | 48 +++++++++++++++++++------------------- docs/sdks/cli/CHANGELOG.md | 4 ++++ 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/app/config/sdks.php b/app/config/sdks.php index de69acb984..3476e9d224 100644 --- a/app/config/sdks.php +++ b/app/config/sdks.php @@ -227,7 +227,7 @@ return [ [ 'key' => 'cli', 'name' => 'Command Line', - 'version' => '13.3.0', + 'version' => '13.3.1', 'url' => 'https://github.com/appwrite/sdk-for-cli', 'package' => 'https://www.npmjs.com/package/appwrite-cli', 'enabled' => true, diff --git a/composer.lock b/composer.lock index 6041a4984a..ce40ffa7a9 100644 --- a/composer.lock +++ b/composer.lock @@ -216,16 +216,16 @@ }, { "name": "brick/math", - "version": "0.14.6", + "version": "0.14.7", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "32498d5e1897e7642c0b961ace2df6d7dc9a3bc3" + "reference": "07ff363b16ef8aca9692bba3be9e73fe63f34e50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/32498d5e1897e7642c0b961ace2df6d7dc9a3bc3", - "reference": "32498d5e1897e7642c0b961ace2df6d7dc9a3bc3", + "url": "https://api.github.com/repos/brick/math/zipball/07ff363b16ef8aca9692bba3be9e73fe63f34e50", + "reference": "07ff363b16ef8aca9692bba3be9e73fe63f34e50", "shasum": "" }, "require": { @@ -264,7 +264,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.14.6" + "source": "https://github.com/brick/math/tree/0.14.7" }, "funding": [ { @@ -272,7 +272,7 @@ "type": "github" } ], - "time": "2026-02-05T07:59:58+00:00" + "time": "2026-02-07T10:57:35+00:00" }, { "name": "chillerlan/php-qrcode", @@ -3795,16 +3795,16 @@ }, { "name": "utopia-php/database", - "version": "5.0.1", + "version": "5.0.2", "source": { "type": "git", "url": "https://github.com/utopia-php/database.git", - "reference": "2783f07e74ddd86dda6e711d79212dd34158540d" + "reference": "aa80f86f5bf3f0d8c13abd3213bf1649f542d366" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/database/zipball/2783f07e74ddd86dda6e711d79212dd34158540d", - "reference": "2783f07e74ddd86dda6e711d79212dd34158540d", + "url": "https://api.github.com/repos/utopia-php/database/zipball/aa80f86f5bf3f0d8c13abd3213bf1649f542d366", + "reference": "aa80f86f5bf3f0d8c13abd3213bf1649f542d366", "shasum": "" }, "require": { @@ -3847,9 +3847,9 @@ ], "support": { "issues": "https://github.com/utopia-php/database/issues", - "source": "https://github.com/utopia-php/database/tree/5.0.1" + "source": "https://github.com/utopia-php/database/tree/5.0.2" }, - "time": "2026-02-03T10:31:12+00:00" + "time": "2026-02-08T05:23:42+00:00" }, { "name": "utopia-php/detector", @@ -4003,16 +4003,16 @@ }, { "name": "utopia-php/domains", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/utopia-php/domains.git", - "reference": "ecac82392e83d4a8ede76c3c94258d868d82f709" + "reference": "20b6a6868234d766fef35a47814dccc66906c2af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/domains/zipball/ecac82392e83d4a8ede76c3c94258d868d82f709", - "reference": "ecac82392e83d4a8ede76c3c94258d868d82f709", + "url": "https://api.github.com/repos/utopia-php/domains/zipball/20b6a6868234d766fef35a47814dccc66906c2af", + "reference": "20b6a6868234d766fef35a47814dccc66906c2af", "shasum": "" }, "require": { @@ -4059,9 +4059,9 @@ ], "support": { "issues": "https://github.com/utopia-php/domains/issues", - "source": "https://github.com/utopia-php/domains/tree/1.0.0" + "source": "https://github.com/utopia-php/domains/tree/1.0.1" }, - "time": "2026-01-30T06:15:50+00:00" + "time": "2026-02-06T12:45:12+00:00" }, { "name": "utopia-php/dsn", @@ -5488,16 +5488,16 @@ "packages-dev": [ { "name": "appwrite/sdk-generator", - "version": "1.8.25", + "version": "1.8.26", "source": { "type": "git", "url": "https://github.com/appwrite/sdk-generator.git", - "reference": "5c75fda3410fe97387ef8e1920b583ef48849d7d" + "reference": "ce65854069a1af8ef0757650da5848168cca5f02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/5c75fda3410fe97387ef8e1920b583ef48849d7d", - "reference": "5c75fda3410fe97387ef8e1920b583ef48849d7d", + "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/ce65854069a1af8ef0757650da5848168cca5f02", + "reference": "ce65854069a1af8ef0757650da5848168cca5f02", "shasum": "" }, "require": { @@ -5533,9 +5533,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/1.8.25" + "source": "https://github.com/appwrite/sdk-generator/tree/1.8.26" }, - "time": "2026-02-05T09:40:07+00:00" + "time": "2026-02-08T07:41:27+00:00" }, { "name": "doctrine/annotations", diff --git a/docs/sdks/cli/CHANGELOG.md b/docs/sdks/cli/CHANGELOG.md index b22a2ecaec..1e8b2177c0 100644 --- a/docs/sdks/cli/CHANGELOG.md +++ b/docs/sdks/cli/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +## 13.3.1 + +- Fix generated TS imports to auto-detect ESM vs non-ESM + ## 13.3.0 - Support type generation for text/varchar/mediumtext/longtext attributes From f7ab8e46d3be011d5785f8171441ee7faf2a6ca8 Mon Sep 17 00:00:00 2001 From: Hemachandar <132386067+hmacr@users.noreply.github.com> Date: Mon, 9 Feb 2026 15:45:41 +0530 Subject: [PATCH 61/65] Improve certificate dns failure logs (#11268) * Better logs for DNS failures * some more * appwrite exception * type * refactor * tiny * better logs --- .../Platform/Workers/Certificates.php | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Appwrite/Platform/Workers/Certificates.php b/src/Appwrite/Platform/Workers/Certificates.php index a726647ec4..cbfa865e88 100644 --- a/src/Appwrite/Platform/Workers/Certificates.php +++ b/src/Appwrite/Platform/Workers/Certificates.php @@ -177,7 +177,10 @@ class Certificates extends Action Console::success('Domain verification succeeded.'); } catch (AppwriteException $err) { Console::warning('Domain verification failed: ' . $err->getMessage()); - $rule->setAttribute('logs', $err->getMessage()); + $date = \date('H:i:s'); + $logs = "\033[90m[{$date}] \033[31mDNS verification failed: \033[0m\n"; + $logs .= \mb_strcut($err->getMessage(), 0, 500000); // Limit to 500kb + $rule->setAttribute('logs', $logs); } finally { // Update rule and emit events $this->updateRuleAndSendEvents($rule, $dbForPlatform, $queueForEvents, $queueForWebhooks, $queueForFunctions, $queueForRealtime); @@ -474,11 +477,20 @@ class Certificates extends Action { $mainDomain = $validationDomain ?? $this->getMainDomain(); $isMainDomain = !isset($mainDomain) || $domain->get() === $mainDomain; - if (!$isMainDomain) { - $this->verifyRule($rule, $log); - } else { + + if ($isMainDomain) { // Main domain validation // TODO: Would be awesome to check A/AAAA record here. Maybe dry run? + return; + } + + try { + $this->verifyRule($rule, $log); + } catch (AppwriteException $err) { + $msg = $err->getMessage() . "\n"; + $msg .= "Verify your DNS records are correctly configured and try again.\n"; + $msg .= "If they're correct and it still fails, please retry after sometime. DNS records can take up to 48 hours to propagate.\n"; + throw new AppwriteException($err->getType(), $msg); } } From 353b7f2a497cfdf938816414236df92e65082fdf Mon Sep 17 00:00:00 2001 From: Hemachandar <132386067+hmacr@users.noreply.github.com> Date: Mon, 9 Feb 2026 15:55:37 +0530 Subject: [PATCH 62/65] Move VCS auth & callback APIs to Modules (#11274) * Move VCS auth & callback APIs to Modules * lint * rename --- app/controllers/api/vcs.php | 193 ------------------ .../Modules/VCS/Http/GitHub/Authorize/Get.php | 90 ++++++++ .../Modules/VCS/Http/GitHub/Callback/Get.php | 182 +++++++++++++++++ .../Platform/Modules/VCS/Services/Http.php | 6 + 4 files changed, 278 insertions(+), 193 deletions(-) create mode 100644 src/Appwrite/Platform/Modules/VCS/Http/GitHub/Authorize/Get.php create mode 100644 src/Appwrite/Platform/Modules/VCS/Http/GitHub/Callback/Get.php diff --git a/app/controllers/api/vcs.php b/app/controllers/api/vcs.php index 6571032a62..bff12b00d2 100644 --- a/app/controllers/api/vcs.php +++ b/app/controllers/api/vcs.php @@ -1,19 +1,15 @@ desc('Create GitHub app installation') - ->groups(['api', 'vcs']) - ->label('scope', 'vcs.read') - ->label('error', __DIR__ . '/../../views/general/error.phtml') - ->label('sdk', new Method( - namespace: 'vcs', - group: 'installations', - name: 'createGitHubInstallation', - description: '/docs/references/vcs/create-github-installation.md', - auth: [AuthType::ADMIN], - responses: [ - new SDKResponse( - code: Response::STATUS_CODE_MOVED_PERMANENTLY, - model: Response::MODEL_NONE, - ) - ], - contentType: ContentType::HTML, - type: MethodType::WEBAUTH, - hide: true, - )) - ->param('success', '', fn ($redirectValidator) => $redirectValidator, 'URL to redirect back to console after a successful installation attempt.', true, ['redirectValidator']) - ->param('failure', '', fn ($redirectValidator) => $redirectValidator, 'URL to redirect back to console after a failed installation attempt.', true, ['redirectValidator']) - ->inject('response') - ->inject('project') - ->inject('platform') - ->action(function (string $success, string $failure, Response $response, Document $project, array $platform) { - $state = \json_encode([ - 'projectId' => $project->getId(), - 'success' => $success, - 'failure' => $failure, - ]); - - $appName = System::getEnv('_APP_VCS_GITHUB_APP_NAME'); - $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') === 'disabled' ? 'http' : 'https'; - $hostname = $platform['consoleHostname'] ?? ''; - - if (empty($appName)) { - throw new Exception(Exception::GENERAL_SERVER_ERROR, 'GitHub App name is not configured. Please configure VCS (Version Control System) variables in .env file.'); - } - - $url = "https://github.com/apps/$appName/installations/new?" . \http_build_query([ - 'state' => $state, - 'redirect_uri' => $protocol . '://' . $hostname . "/v1/vcs/github/callback" - ]); - - $response - ->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') - ->addHeader('Pragma', 'no-cache') - ->redirect($url); - }); - -Http::get('/v1/vcs/github/callback') - ->desc('Get installation and authorization from GitHub app') - ->groups(['api', 'vcs']) - ->label('scope', 'public') - ->label('error', __DIR__ . '/../../views/general/error.phtml') - ->param('installation_id', '', new Text(256, 0), 'GitHub installation ID', true) - ->param('setup_action', '', new Text(256, 0), 'GitHub setup action type', true) - ->param('state', '', new Text(2048), 'GitHub state. Contains info sent when starting authorization flow.', true) - ->param('code', '', new Text(2048, 0), 'OAuth2 code. This is a temporary code that the will be later exchanged for an access token.', true) - ->inject('gitHub') - ->inject('user') - ->inject('project') - ->inject('response') - ->inject('dbForPlatform') - ->inject('platform') - ->action(function (string $providerInstallationId, string $setupAction, string $state, string $code, GitHub $github, Document $user, Document $project, Response $response, Database $dbForPlatform, array $platform) { - if (empty($state)) { - $error = 'Installation requests from organisation members for the Appwrite GitHub App are currently unsupported. To proceed with the installation, login to the Appwrite Console and install the GitHub App.'; - throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, $error); - } - - $state = \json_decode($state, true); - $projectId = $state['projectId'] ?? ''; - - $project = $dbForPlatform->getDocument('projects', $projectId); - - if ($project->isEmpty()) { - $error = 'Project with the ID from state could not be found.'; - - if (!empty($redirectFailure)) { - $separator = \str_contains($redirectFailure, '?') ? '&' : ':'; - return $response - ->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') - ->addHeader('Pragma', 'no-cache') - ->redirect($redirectFailure . $separator . \http_build_query(['error' => $error])); - } - - throw new Exception(Exception::PROJECT_NOT_FOUND, $error); - } - - $region = $project->getAttribute('region', 'default'); - $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') === 'disabled' ? 'http' : 'https'; - $hostname = $platform['consoleHostname'] ?? ''; - - $defaultState = [ - 'success' => $protocol . '://' . $hostname . "/console/project-$region-$projectId/settings/git-installations", - 'failure' => $protocol . '://' . $hostname . "/console/project-$region-$projectId/settings/git-installations", - ]; - - $state = \array_merge($defaultState, $state ?? []); - - $redirectSuccess = $state['success'] ?? ''; - $redirectFailure = $state['failure'] ?? ''; - - // Create / Update installation - if (!empty($providerInstallationId)) { - $privateKey = System::getEnv('_APP_VCS_GITHUB_PRIVATE_KEY'); - $githubAppId = System::getEnv('_APP_VCS_GITHUB_APP_ID'); - $github->initializeVariables($providerInstallationId, $privateKey, $githubAppId); - $owner = $github->getOwnerName($providerInstallationId) ?? ''; - - $projectInternalId = $project->getSequence(); - - $installation = $dbForPlatform->findOne('installations', [ - Query::equal('providerInstallationId', [$providerInstallationId]), - Query::equal('projectInternalId', [$projectInternalId]) - ]); - - $personal = false; - $refreshToken = null; - $accessToken = null; - $accessTokenExpiry = null; - - if (!empty($code)) { - $oauth2 = new OAuth2Github(System::getEnv('_APP_VCS_GITHUB_CLIENT_ID', ''), System::getEnv('_APP_VCS_GITHUB_CLIENT_SECRET', ''), ""); - - $accessToken = $oauth2->getAccessToken($code) ?? ''; - $refreshToken = $oauth2->getRefreshToken($code) ?? ''; - $accessTokenExpiry = DateTime::addSeconds(new \DateTime(), \intval($oauth2->getAccessTokenExpiry($code))); - - $personalSlug = $oauth2->getUserSlug($accessToken) ?? ''; - $personal = $personalSlug === $owner; - } - - if ($installation->isEmpty()) { - $teamId = $project->getAttribute('teamId', ''); - - $installation = new Document([ - '$id' => ID::unique(), - '$permissions' => [ - Permission::read(Role::team(ID::custom($teamId))), - Permission::update(Role::team(ID::custom($teamId), 'owner')), - Permission::update(Role::team(ID::custom($teamId), 'developer')), - Permission::delete(Role::team(ID::custom($teamId), 'owner')), - Permission::delete(Role::team(ID::custom($teamId), 'developer')), - ], - 'providerInstallationId' => $providerInstallationId, - 'projectId' => $projectId, - 'projectInternalId' => $projectInternalId, - 'provider' => 'github', - 'organization' => $owner, - 'personal' => $personal, - 'personalRefreshToken' => $refreshToken, - 'personalAccessToken' => $accessToken, - 'personalAccessTokenExpiry' => $accessTokenExpiry, - ]); - - $installation = $dbForPlatform->createDocument('installations', $installation); - } else { - $installation = $installation - ->setAttribute('organization', $owner) - ->setAttribute('personal', $personal) - ->setAttribute('personalRefreshToken', $refreshToken) - ->setAttribute('personalAccessToken', $accessToken) - ->setAttribute('personalAccessTokenExpiry', $accessTokenExpiry); - $installation = $dbForPlatform->updateDocument('installations', $installation->getId(), $installation); - } - } else { - $error = 'Installation of the Appwrite GitHub App on organization accounts is restricted to organization owners. As a member of the organization, you do not have the necessary permissions to install this GitHub App. Please contact the organization owner to create the installation from the Appwrite console.'; - - if (!empty($redirectFailure)) { - $separator = \str_contains($redirectFailure, '?') ? '&' : ':'; - return $response - ->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') - ->addHeader('Pragma', 'no-cache') - ->redirect($redirectFailure . $separator . \http_build_query(['error' => $error])); - } - - throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, $error); - } - - $response - ->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') - ->addHeader('Pragma', 'no-cache') - ->redirect($redirectSuccess); - }); - Http::post('/v1/vcs/github/events') ->desc('Create event') ->groups(['api', 'vcs']) diff --git a/src/Appwrite/Platform/Modules/VCS/Http/GitHub/Authorize/Get.php b/src/Appwrite/Platform/Modules/VCS/Http/GitHub/Authorize/Get.php new file mode 100644 index 0000000000..5db6cb6e43 --- /dev/null +++ b/src/Appwrite/Platform/Modules/VCS/Http/GitHub/Authorize/Get.php @@ -0,0 +1,90 @@ +setHttpMethod(Action::HTTP_REQUEST_METHOD_GET) + ->setHttpPath('/v1/vcs/github/authorize') + ->desc('Create GitHub app installation') + ->groups(['api', 'vcs']) + ->label('scope', 'vcs.read') + ->label('error', __DIR__ . '/../../views/general/error.phtml') + ->label('sdk', new Method( + namespace: 'vcs', + group: 'installations', + name: 'createGitHubInstallation', + description: '/docs/references/vcs/create-github-installation.md', + auth: [AuthType::ADMIN], + responses: [ + new SDKResponse( + code: Response::STATUS_CODE_MOVED_PERMANENTLY, + model: Response::MODEL_NONE, + ) + ], + contentType: ContentType::HTML, + type: MethodType::WEBAUTH, + hide: true, + )) + ->param('success', '', fn ($redirectValidator) => $redirectValidator, 'URL to redirect back to console after a successful installation attempt.', true, ['redirectValidator']) + ->param('failure', '', fn ($redirectValidator) => $redirectValidator, 'URL to redirect back to console after a failed installation attempt.', true, ['redirectValidator']) + ->inject('response') + ->inject('project') + ->inject('platform') + ->callback($this->action(...)); + } + + public function action( + string $success, + string $failure, + Response $response, + Document $project, + array $platform + ) { + $state = \json_encode([ + 'projectId' => $project->getId(), + 'success' => $success, + 'failure' => $failure, + ]); + + $appName = System::getEnv('_APP_VCS_GITHUB_APP_NAME'); + $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') === 'disabled' ? 'http' : 'https'; + $hostname = $platform['consoleHostname'] ?? ''; + + if (empty($appName)) { + throw new Exception(Exception::GENERAL_SERVER_ERROR, 'GitHub App name is not configured. Please configure VCS (Version Control System) variables in .env file.'); + } + + $url = "https://github.com/apps/$appName/installations/new?" . \http_build_query([ + 'state' => $state, + 'redirect_uri' => $protocol . '://' . $hostname . "/v1/vcs/github/callback" + ]); + + $response + ->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') + ->addHeader('Pragma', 'no-cache') + ->redirect($url); + } +} diff --git a/src/Appwrite/Platform/Modules/VCS/Http/GitHub/Callback/Get.php b/src/Appwrite/Platform/Modules/VCS/Http/GitHub/Callback/Get.php new file mode 100644 index 0000000000..535f26e0cd --- /dev/null +++ b/src/Appwrite/Platform/Modules/VCS/Http/GitHub/Callback/Get.php @@ -0,0 +1,182 @@ +setHttpMethod(Action::HTTP_REQUEST_METHOD_GET) + ->setHttpPath('/v1/vcs/github/callback') + ->desc('Get installation and authorization from GitHub app') + ->groups(['api', 'vcs']) + ->label('scope', 'public') + ->label('error', __DIR__ . '/../../views/general/error.phtml') + ->param('installation_id', '', new Text(256, 0), 'GitHub installation ID', true) + ->param('setup_action', '', new Text(256, 0), 'GitHub setup action type', true) + ->param('state', '', new Text(2048), 'GitHub state. Contains info sent when starting authorization flow.', true) + ->param('code', '', new Text(2048, 0), 'OAuth2 code. This is a temporary code that the will be later exchanged for an access token.', true) + ->inject('gitHub') + ->inject('project') + ->inject('response') + ->inject('dbForPlatform') + ->inject('platform') + ->callback($this->action(...)); + } + + public function action( + string $providerInstallationId, + string $setupAction, + string $state, + string $code, + GitHub $github, + Document $project, + Response $response, + Database $dbForPlatform, + array $platform + ) { + if (empty($state)) { + $error = 'Installation requests from organisation members for the Appwrite GitHub App are currently unsupported. To proceed with the installation, login to the Appwrite Console and install the GitHub App.'; + throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, $error); + } + + $state = \json_decode($state, true); + $projectId = $state['projectId'] ?? ''; + + $project = $dbForPlatform->getDocument('projects', $projectId); + + if ($project->isEmpty()) { + $error = 'Project with the ID from state could not be found.'; + + if (!empty($redirectFailure)) { + $separator = \str_contains($redirectFailure, '?') ? '&' : ':'; + return $response + ->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') + ->addHeader('Pragma', 'no-cache') + ->redirect($redirectFailure . $separator . \http_build_query(['error' => $error])); + } + + throw new Exception(Exception::PROJECT_NOT_FOUND, $error); + } + + $region = $project->getAttribute('region', 'default'); + $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') === 'disabled' ? 'http' : 'https'; + $hostname = $platform['consoleHostname'] ?? ''; + + $defaultState = [ + 'success' => $protocol . '://' . $hostname . "/console/project-$region-$projectId/settings/git-installations", + 'failure' => $protocol . '://' . $hostname . "/console/project-$region-$projectId/settings/git-installations", + ]; + + $state = \array_merge($defaultState, $state ?? []); + + $redirectSuccess = $state['success'] ?? ''; + $redirectFailure = $state['failure'] ?? ''; + + // Create / Update installation + if (!empty($providerInstallationId)) { + $privateKey = System::getEnv('_APP_VCS_GITHUB_PRIVATE_KEY'); + $githubAppId = System::getEnv('_APP_VCS_GITHUB_APP_ID'); + $github->initializeVariables($providerInstallationId, $privateKey, $githubAppId); + $owner = $github->getOwnerName($providerInstallationId) ?? ''; + + $projectInternalId = $project->getSequence(); + + $installation = $dbForPlatform->findOne('installations', [ + Query::equal('providerInstallationId', [$providerInstallationId]), + Query::equal('projectInternalId', [$projectInternalId]) + ]); + + $personal = false; + $refreshToken = null; + $accessToken = null; + $accessTokenExpiry = null; + + if (!empty($code)) { + $oauth2 = new OAuth2Github(System::getEnv('_APP_VCS_GITHUB_CLIENT_ID', ''), System::getEnv('_APP_VCS_GITHUB_CLIENT_SECRET', ''), ""); + + $accessToken = $oauth2->getAccessToken($code) ?? ''; + $refreshToken = $oauth2->getRefreshToken($code) ?? ''; + $accessTokenExpiry = DateTime::addSeconds(new \DateTime(), \intval($oauth2->getAccessTokenExpiry($code))); + + $personalSlug = $oauth2->getUserSlug($accessToken) ?? ''; + $personal = $personalSlug === $owner; + } + + if ($installation->isEmpty()) { + $teamId = $project->getAttribute('teamId', ''); + + $installation = new Document([ + '$id' => ID::unique(), + '$permissions' => [ + Permission::read(Role::team(ID::custom($teamId))), + Permission::update(Role::team(ID::custom($teamId), 'owner')), + Permission::update(Role::team(ID::custom($teamId), 'developer')), + Permission::delete(Role::team(ID::custom($teamId), 'owner')), + Permission::delete(Role::team(ID::custom($teamId), 'developer')), + ], + 'providerInstallationId' => $providerInstallationId, + 'projectId' => $projectId, + 'projectInternalId' => $projectInternalId, + 'provider' => 'github', + 'organization' => $owner, + 'personal' => $personal, + 'personalRefreshToken' => $refreshToken, + 'personalAccessToken' => $accessToken, + 'personalAccessTokenExpiry' => $accessTokenExpiry, + ]); + + $installation = $dbForPlatform->createDocument('installations', $installation); + } else { + $installation = $installation + ->setAttribute('organization', $owner) + ->setAttribute('personal', $personal) + ->setAttribute('personalRefreshToken', $refreshToken) + ->setAttribute('personalAccessToken', $accessToken) + ->setAttribute('personalAccessTokenExpiry', $accessTokenExpiry); + $installation = $dbForPlatform->updateDocument('installations', $installation->getId(), $installation); + } + } else { + $error = 'Installation of the Appwrite GitHub App on organization accounts is restricted to organization owners. As a member of the organization, you do not have the necessary permissions to install this GitHub App. Please contact the organization owner to create the installation from the Appwrite console.'; + + if (!empty($redirectFailure)) { + $separator = \str_contains($redirectFailure, '?') ? '&' : ':'; + return $response + ->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') + ->addHeader('Pragma', 'no-cache') + ->redirect($redirectFailure . $separator . \http_build_query(['error' => $error])); + } + + throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, $error); + } + + $response + ->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') + ->addHeader('Pragma', 'no-cache') + ->redirect($redirectSuccess); + } +} diff --git a/src/Appwrite/Platform/Modules/VCS/Services/Http.php b/src/Appwrite/Platform/Modules/VCS/Services/Http.php index 11e26be0d5..8bd2314f9e 100644 --- a/src/Appwrite/Platform/Modules/VCS/Services/Http.php +++ b/src/Appwrite/Platform/Modules/VCS/Services/Http.php @@ -2,6 +2,8 @@ namespace Appwrite\Platform\Modules\VCS\Services; +use Appwrite\Platform\Modules\VCS\Http\GitHub\Authorize\Get as GetGitHubAuthorize; +use Appwrite\Platform\Modules\VCS\Http\GitHub\Callback\Get as GetGitHubCallback; use Appwrite\Platform\Modules\VCS\Http\Installations\Delete as DeleteInstallation; use Appwrite\Platform\Modules\VCS\Http\Installations\Get as GetInstallation; use Appwrite\Platform\Modules\VCS\Http\Installations\Repositories\Branches\XList as ListRepositoryBranches; @@ -19,6 +21,10 @@ class Http extends Service { $this->type = Service::TYPE_HTTP; + // GitHub Authorization & Callback + $this->addAction(GetGitHubAuthorize::getName(), new GetGitHubAuthorize()); + $this->addAction(GetGitHubCallback::getName(), new GetGitHubCallback()); + // Installations $this->addAction(GetInstallation::getName(), new GetInstallation()); $this->addAction(ListInstallations::getName(), new ListInstallations()); From e13f4c8545d6dd3bfb0e15446d0e604d95b9bcde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Mon, 9 Feb 2026 13:26:33 +0100 Subject: [PATCH 63/65] Fix VCS template flow --- src/Appwrite/Platform/Modules/Compute/Base.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Appwrite/Platform/Modules/Compute/Base.php b/src/Appwrite/Platform/Modules/Compute/Base.php index db0cfe7daf..e69cfd2fdc 100644 --- a/src/Appwrite/Platform/Modules/Compute/Base.php +++ b/src/Appwrite/Platform/Modules/Compute/Base.php @@ -109,6 +109,12 @@ class Base extends Action } catch (\Throwable $error) { // Ignore; deployment can continue } + } else { + // Fallback till we have tag support here + // Goal is to set providerBranch, so build worker knows what to clone as base + // Without this, clone command would be cloning empty branch, and failing + $providerBranch = empty($reference) ? $function->getAttribute('providerBranch', 'main') : $reference; + $branchUrl = "https://github.com/$owner/$repositoryName/tree/$providerBranch"; } $repositoryUrl = "https://github.com/$owner/$repositoryName"; From 96e1221a5f76593f82a462e0039410d38731f30d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Mon, 9 Feb 2026 13:27:31 +0100 Subject: [PATCH 64/65] Fix implementation --- src/Appwrite/Platform/Modules/Compute/Base.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Appwrite/Platform/Modules/Compute/Base.php b/src/Appwrite/Platform/Modules/Compute/Base.php index e69cfd2fdc..ad467b5488 100644 --- a/src/Appwrite/Platform/Modules/Compute/Base.php +++ b/src/Appwrite/Platform/Modules/Compute/Base.php @@ -113,7 +113,7 @@ class Base extends Action // Fallback till we have tag support here // Goal is to set providerBranch, so build worker knows what to clone as base // Without this, clone command would be cloning empty branch, and failing - $providerBranch = empty($reference) ? $function->getAttribute('providerBranch', 'main') : $reference; + $providerBranch = $function->getAttribute('providerBranch', 'main'); $branchUrl = "https://github.com/$owner/$repositoryName/tree/$providerBranch"; } From e09dd98f360b680bbcbaea24101dc63de3f21740 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Mon, 9 Feb 2026 13:30:46 +0100 Subject: [PATCH 65/65] Fix site vcs deployment bug too --- src/Appwrite/Platform/Modules/Compute/Base.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Appwrite/Platform/Modules/Compute/Base.php b/src/Appwrite/Platform/Modules/Compute/Base.php index ad467b5488..45c839df3b 100644 --- a/src/Appwrite/Platform/Modules/Compute/Base.php +++ b/src/Appwrite/Platform/Modules/Compute/Base.php @@ -205,6 +205,12 @@ class Base extends Action } catch (\Throwable $error) { // Ignore; deployment can continue } + } else { + // Fallback till we have tag support here + // Goal is to set providerBranch, so build worker knows what to clone as base + // Without this, clone command would be cloning empty branch, and failing + $providerBranch = $site->getAttribute('providerBranch', 'main'); + $branchUrl = "https://github.com/$owner/$repositoryName/tree/$providerBranch"; } $repositoryUrl = "https://github.com/$owner/$repositoryName";