diff --git a/.env b/.env index c10c12613b..5ea2ba2852 100644 --- a/.env +++ b/.env @@ -15,6 +15,7 @@ _APP_SYSTEM_TEAM_EMAIL=team@appwrite.io _APP_EMAIL_SECURITY=security@appwrite.io _APP_EMAIL_CERTIFICATES=certificates@appwrite.io _APP_SYSTEM_RESPONSE_FORMAT= +_APP_CUSTOM_DOMAIN_DENY_LIST= _APP_OPTIONS_ABUSE=disabled _APP_OPTIONS_ROUTER_PROTECTION=disabled _APP_OPTIONS_FORCE_HTTPS=disabled diff --git a/.gitpod.yml b/.gitpod.yml index 478b62fc8d..78375bb1f0 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -7,6 +7,7 @@ tasks: docker pull composer command: | docker run --rm --interactive --tty \ + --user "$(id -u):$(id -g)" \ --volume $PWD:/app \ composer install \ --ignore-platform-reqs \ @@ -23,11 +24,3 @@ vscode: extensions: - ms-azuretools.vscode-docker - zobo.php-intellisense - -github: - # https://www.gitpod.io/docs/prebuilds#github-specific-configuration - prebuilds: - # enable for pull requests coming from forks (defaults to false) - pullRequestsFromForks: true - # add a check to pull requests (defaults to true) - addCheck: false diff --git a/Dockerfile b/Dockerfile index 88d5ed030b..2f1ea6f279 100755 --- a/Dockerfile +++ b/Dockerfile @@ -86,7 +86,6 @@ RUN chmod +x /usr/local/bin/doctor && \ chmod +x /usr/local/bin/worker-migrations && \ chmod +x /usr/local/bin/worker-webhooks && \ chmod +x /usr/local/bin/worker-stats-usage && \ - chmod +x /usr/local/bin/worker-stats-usage-dump && \ chmod +x /usr/local/bin/stats-resources && \ chmod +x /usr/local/bin/worker-stats-resources diff --git a/app/cli.php b/app/cli.php index f080217365..3a4fb844a1 100644 --- a/app/cli.php +++ b/app/cli.php @@ -9,6 +9,7 @@ use Appwrite\Event\StatsResources; use Appwrite\Event\StatsUsage; use Appwrite\Platform\Appwrite; use Appwrite\Runtimes\Runtimes; +use Executor\Executor; use Utopia\Cache\Adapter\Sharding; use Utopia\Cache\Cache; use Utopia\CLI\CLI; @@ -218,6 +219,13 @@ CLI::setResource('queueForCertificates', function (Publisher $publisher) { }, ['publisher']); CLI::setResource('logError', function (Registry $register) { return function (Throwable $error, string $namespace, string $action) use ($register) { + Console::error('[Error] Timestamp: ' . date('c', time())); + Console::error('[Error] Type: ' . get_class($error)); + Console::error('[Error] Message: ' . $error->getMessage()); + Console::error('[Error] File: ' . $error->getFile()); + Console::error('[Error] Line: ' . $error->getLine()); + Console::error('[Error] Trace: ' . $error->getTraceAsString()); + $logger = $register->get('logger'); if ($logger) { @@ -236,6 +244,7 @@ CLI::setResource('logError', function (Registry $register) { $log->addExtra('file', $error->getFile()); $log->addExtra('line', $error->getLine()); $log->addExtra('trace', $error->getTraceAsString()); + $log->addExtra('detailedTrace', $error->getTrace()); $log->setAction($action); @@ -249,22 +258,34 @@ CLI::setResource('logError', function (Registry $register) { Console::error('Error pushing log: ' . $th->getMessage()); } } - - Console::warning("Failed: {$error->getMessage()}"); - Console::warning($error->getTraceAsString()); }; }, ['register']); -$platform = new Appwrite(); -$platform->init(Service::TYPE_TASK); +CLI::setResource('executor', fn () => new Executor(fn (string $projectId, string $deploymentId) => System::getEnv('_APP_EXECUTOR_HOST'))); +$platform = new Appwrite(); +$args = $platform->getEnv('argv'); + +if (!isset($args[0])) { + Console::error('Missing task name'); + Console::exit(1); +} + +\array_shift($args); +$taskName = $args[0]; +$platform->init(Service::TYPE_TASK); $cli = $platform->getCli(); $cli ->error() ->inject('error') - ->action(function (Throwable $error) { - Console::error($error->getMessage()); + ->inject('logError') + ->action(function (Throwable $error, callable $logError) use ($taskName) { + call_user_func_array($logError, [ + $error, + 'Task', + $taskName, + ]); }); $cli->run(); diff --git a/app/config/errors.php b/app/config/errors.php index 7c7f6dc9ec..4b2e58b08b 100644 --- a/app/config/errors.php +++ b/app/config/errors.php @@ -593,6 +593,11 @@ return [ 'description' => 'Database timed out. Try adjusting your queries or adding an index.', 'code' => 408 ], + Exception::DATABASE_QUERY_ORDER_NULL => [ + 'name' => Exception::DATABASE_QUERY_ORDER_NULL, + 'description' => 'The order attribute had a null value. Cursor pagination requires all documents order attribute values are non-null.', + 'code' => 400, + ], /** Collections */ Exception::COLLECTION_NOT_FOUND => [ diff --git a/app/config/oAuthProviders.php b/app/config/oAuthProviders.php index 9d7efc2f1e..261df5c07e 100644 --- a/app/config/oAuthProviders.php +++ b/app/config/oAuthProviders.php @@ -142,6 +142,16 @@ return [ 'beta' => false, 'mock' => false, ], + 'figma' => [ + 'name' => 'Figma', + 'developers' => 'https://www.figma.com/developers/api#oauth2', + 'icon' => 'icon-figma', + 'enabled' => true, + 'sandbox' => false, + 'form' => false, + 'beta' => false, + 'mock' => false, + ], 'github' => [ 'name' => 'GitHub', 'developers' => 'https://developer.github.com/', diff --git a/app/config/specs/open-api3-1.6.x-client.json b/app/config/specs/open-api3-1.6.x-client.json index 316fe13116..8f0979c103 100644 --- a/app/config/specs/open-api3-1.6.x-client.json +++ b/app/config/specs/open-api3-1.6.x-client.json @@ -1,7 +1,7 @@ { "openapi": "3.0.0", "info": { - "version": "1.6.1", + "version": "1.6.2", "title": "Appwrite", "description": "Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)", "termsOfService": "https:\/\/appwrite.io\/policy\/terms", @@ -43,6 +43,7 @@ }, "x-appwrite": { "method": "get", + "group": "account", "weight": 9, "cookies": false, "type": "", @@ -91,6 +92,7 @@ }, "x-appwrite": { "method": "create", + "group": "account", "weight": 8, "cookies": false, "type": "", @@ -175,6 +177,7 @@ }, "x-appwrite": { "method": "updateEmail", + "group": "account", "weight": 34, "cookies": false, "type": "", @@ -250,6 +253,7 @@ }, "x-appwrite": { "method": "listIdentities", + "group": "identities", "weight": 57, "cookies": false, "type": "", @@ -308,6 +312,7 @@ }, "x-appwrite": { "method": "deleteIdentity", + "group": "identities", "weight": 58, "cookies": false, "type": "", @@ -370,6 +375,7 @@ }, "x-appwrite": { "method": "createJWT", + "group": "tokens", "weight": 29, "cookies": false, "type": "", @@ -418,6 +424,7 @@ }, "x-appwrite": { "method": "listLogs", + "group": "logs", "weight": 31, "cookies": false, "type": "", @@ -483,6 +490,7 @@ }, "x-appwrite": { "method": "updateMFA", + "group": "mfa", "weight": 44, "cookies": false, "type": "", @@ -552,6 +560,7 @@ }, "x-appwrite": { "method": "createMfaAuthenticator", + "group": "mfa", "weight": 46, "cookies": false, "type": "", @@ -597,7 +606,7 @@ ] }, "put": { - "summary": "Verify authenticator", + "summary": "Update authenticator (confirmation)", "operationId": "accountUpdateMfaAuthenticator", "tags": [ "account" @@ -617,6 +626,7 @@ }, "x-appwrite": { "method": "updateMfaAuthenticator", + "group": "mfa", "weight": 47, "cookies": false, "type": "", @@ -694,6 +704,7 @@ }, "x-appwrite": { "method": "deleteMfaAuthenticator", + "group": "mfa", "weight": 51, "cookies": false, "type": "", @@ -761,6 +772,7 @@ }, "x-appwrite": { "method": "createMfaChallenge", + "group": "mfa", "weight": 52, "cookies": false, "type": "", @@ -814,7 +826,7 @@ } }, "put": { - "summary": "Create MFA challenge (confirmation)", + "summary": "Update MFA challenge (confirmation)", "operationId": "accountUpdateMfaChallenge", "tags": [ "account" @@ -834,6 +846,7 @@ }, "x-appwrite": { "method": "updateMfaChallenge", + "group": "mfa", "weight": 53, "cookies": false, "type": "", @@ -909,6 +922,7 @@ }, "x-appwrite": { "method": "listMfaFactors", + "group": "mfa", "weight": 45, "cookies": false, "type": "", @@ -939,7 +953,7 @@ }, "\/account\/mfa\/recovery-codes": { "get": { - "summary": "Get MFA recovery codes", + "summary": "List MFA recovery codes", "operationId": "accountGetMfaRecoveryCodes", "tags": [ "account" @@ -959,6 +973,7 @@ }, "x-appwrite": { "method": "getMfaRecoveryCodes", + "group": "mfa", "weight": 50, "cookies": false, "type": "", @@ -1007,6 +1022,7 @@ }, "x-appwrite": { "method": "createMfaRecoveryCodes", + "group": "mfa", "weight": 48, "cookies": false, "type": "", @@ -1035,7 +1051,7 @@ ] }, "patch": { - "summary": "Regenerate MFA recovery codes", + "summary": "Update MFA recovery codes (regenerate)", "operationId": "accountUpdateMfaRecoveryCodes", "tags": [ "account" @@ -1055,6 +1071,7 @@ }, "x-appwrite": { "method": "updateMfaRecoveryCodes", + "group": "mfa", "weight": 49, "cookies": false, "type": "", @@ -1105,6 +1122,7 @@ }, "x-appwrite": { "method": "updateName", + "group": "account", "weight": 32, "cookies": false, "type": "", @@ -1174,6 +1192,7 @@ }, "x-appwrite": { "method": "updatePassword", + "group": "account", "weight": 33, "cookies": false, "type": "", @@ -1248,6 +1267,7 @@ }, "x-appwrite": { "method": "updatePhone", + "group": "account", "weight": 35, "cookies": false, "type": "", @@ -1323,6 +1343,7 @@ }, "x-appwrite": { "method": "getPrefs", + "group": "account", "weight": 30, "cookies": false, "type": "", @@ -1371,6 +1392,7 @@ }, "x-appwrite": { "method": "updatePrefs", + "group": "account", "weight": 36, "cookies": false, "type": "", @@ -1440,6 +1462,7 @@ }, "x-appwrite": { "method": "createRecovery", + "group": "recovery", "weight": 38, "cookies": false, "type": "", @@ -1496,7 +1519,7 @@ } }, "put": { - "summary": "Create password recovery (confirmation)", + "summary": "Update password recovery (confirmation)", "operationId": "accountUpdateRecovery", "tags": [ "account" @@ -1516,6 +1539,7 @@ }, "x-appwrite": { "method": "updateRecovery", + "group": "recovery", "weight": 39, "cookies": false, "type": "", @@ -1597,6 +1621,7 @@ }, "x-appwrite": { "method": "listSessions", + "group": "sessions", "weight": 11, "cookies": false, "type": "", @@ -1638,6 +1663,7 @@ }, "x-appwrite": { "method": "deleteSessions", + "group": "sessions", "weight": 12, "cookies": false, "type": "", @@ -1688,6 +1714,7 @@ }, "x-appwrite": { "method": "createAnonymousSession", + "group": "sessions", "weight": 17, "cookies": false, "type": "", @@ -1736,6 +1763,7 @@ }, "x-appwrite": { "method": "createEmailPasswordSession", + "group": "sessions", "weight": 16, "cookies": false, "type": "", @@ -1809,6 +1837,7 @@ }, "x-appwrite": { "method": "updateMagicURLSession", + "group": "sessions", "weight": 26, "cookies": false, "type": "", @@ -1875,6 +1904,7 @@ }, "x-appwrite": { "method": "createOAuth2Session", + "group": "sessions", "weight": 19, "cookies": false, "type": "webAuth", @@ -1902,7 +1932,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", "required": true, "schema": { "type": "string", @@ -1922,6 +1952,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -2015,6 +2046,7 @@ }, "x-appwrite": { "method": "updatePhoneSession", + "group": "sessions", "weight": 27, "cookies": false, "type": "", @@ -2088,6 +2120,7 @@ }, "x-appwrite": { "method": "createSession", + "group": "sessions", "weight": 18, "cookies": false, "type": "", @@ -2161,6 +2194,7 @@ }, "x-appwrite": { "method": "getSession", + "group": "sessions", "weight": 13, "cookies": false, "type": "", @@ -2221,6 +2255,7 @@ }, "x-appwrite": { "method": "updateSession", + "group": "sessions", "weight": 15, "cookies": false, "type": "", @@ -2274,6 +2309,7 @@ }, "x-appwrite": { "method": "deleteSession", + "group": "sessions", "weight": 14, "cookies": false, "type": "", @@ -2336,6 +2372,7 @@ }, "x-appwrite": { "method": "updateStatus", + "group": "account", "weight": 37, "cookies": false, "type": "", @@ -2386,6 +2423,7 @@ }, "x-appwrite": { "method": "createPushTarget", + "group": "pushTargets", "weight": 54, "cookies": false, "type": "", @@ -2464,6 +2502,7 @@ }, "x-appwrite": { "method": "updatePushTarget", + "group": "pushTargets", "weight": 55, "cookies": false, "type": "", @@ -2534,6 +2573,7 @@ }, "x-appwrite": { "method": "deletePushTarget", + "group": "pushTargets", "weight": 56, "cookies": false, "type": "", @@ -2594,6 +2634,7 @@ }, "x-appwrite": { "method": "createEmailToken", + "group": "tokens", "weight": 25, "cookies": false, "type": "", @@ -2672,6 +2713,7 @@ }, "x-appwrite": { "method": "createMagicURLToken", + "group": "tokens", "weight": 24, "cookies": false, "type": "", @@ -2751,6 +2793,7 @@ }, "x-appwrite": { "method": "createOAuth2Token", + "group": "tokens", "weight": 23, "cookies": false, "type": "webAuth", @@ -2778,7 +2821,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", "required": true, "schema": { "type": "string", @@ -2798,6 +2841,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -2891,6 +2935,7 @@ }, "x-appwrite": { "method": "createPhoneToken", + "group": "tokens", "weight": 28, "cookies": false, "type": "", @@ -2967,6 +3012,7 @@ }, "x-appwrite": { "method": "createVerification", + "group": "verification", "weight": 40, "cookies": false, "type": "", @@ -3014,7 +3060,7 @@ } }, "put": { - "summary": "Create email verification (confirmation)", + "summary": "Update email verification (confirmation)", "operationId": "accountUpdateVerification", "tags": [ "account" @@ -3034,6 +3080,7 @@ }, "x-appwrite": { "method": "updateVerification", + "group": "verification", "weight": 41, "cookies": false, "type": "", @@ -3109,6 +3156,7 @@ }, "x-appwrite": { "method": "createPhoneVerification", + "group": "verification", "weight": 42, "cookies": false, "type": "", @@ -3160,6 +3208,7 @@ }, "x-appwrite": { "method": "updatePhoneVerification", + "group": "verification", "weight": 43, "cookies": false, "type": "", @@ -3228,6 +3277,7 @@ }, "x-appwrite": { "method": "getBrowser", + "group": null, "weight": 60, "cookies": false, "type": "location", @@ -3353,6 +3403,7 @@ }, "x-appwrite": { "method": "getCreditCard", + "group": null, "weight": 59, "cookies": false, "type": "location", @@ -3484,6 +3535,7 @@ }, "x-appwrite": { "method": "getFavicon", + "group": null, "weight": 63, "cookies": false, "type": "location", @@ -3541,6 +3593,7 @@ }, "x-appwrite": { "method": "getFlag", + "group": null, "weight": 61, "cookies": false, "type": "location", @@ -4028,6 +4081,7 @@ }, "x-appwrite": { "method": "getImage", + "group": null, "weight": 62, "cookies": false, "type": "location", @@ -4109,6 +4163,7 @@ }, "x-appwrite": { "method": "getInitials", + "group": null, "weight": 65, "cookies": false, "type": "location", @@ -4200,6 +4255,7 @@ }, "x-appwrite": { "method": "getQR", + "group": null, "weight": 64, "cookies": false, "type": "location", @@ -4298,6 +4354,7 @@ }, "x-appwrite": { "method": "listDocuments", + "group": "documents", "weight": 109, "cookies": false, "type": "", @@ -4382,6 +4439,7 @@ }, "x-appwrite": { "method": "createDocument", + "group": "documents", "weight": 108, "cookies": false, "type": "", @@ -4488,6 +4546,7 @@ }, "x-appwrite": { "method": "getDocument", + "group": "documents", "weight": 110, "cookies": false, "type": "", @@ -4582,6 +4641,7 @@ }, "x-appwrite": { "method": "updateDocument", + "group": "documents", "weight": 112, "cookies": false, "type": "", @@ -4680,6 +4740,7 @@ }, "x-appwrite": { "method": "deleteDocument", + "group": "documents", "weight": 113, "cookies": false, "type": "", @@ -4763,7 +4824,8 @@ }, "x-appwrite": { "method": "listExecutions", - "weight": 306, + "group": "executions", + "weight": 305, "cookies": false, "type": "", "deprecated": false, @@ -4848,7 +4910,8 @@ }, "x-appwrite": { "method": "createExecution", - "weight": 305, + "group": "executions", + "weight": 304, "cookies": false, "type": "", "deprecated": false, @@ -4962,7 +5025,8 @@ }, "x-appwrite": { "method": "getExecution", - "weight": 307, + "group": "executions", + "weight": 306, "cookies": false, "type": "", "deprecated": false, @@ -5035,7 +5099,8 @@ }, "x-appwrite": { "method": "query", - "weight": 331, + "group": "graphql", + "weight": 330, "cookies": false, "type": "graphql", "deprecated": false, @@ -5086,7 +5151,8 @@ }, "x-appwrite": { "method": "mutation", - "weight": 330, + "group": "graphql", + "weight": 329, "cookies": false, "type": "graphql", "deprecated": false, @@ -5137,6 +5203,7 @@ }, "x-appwrite": { "method": "get", + "group": null, "weight": 117, "cookies": false, "type": "", @@ -5188,6 +5255,7 @@ }, "x-appwrite": { "method": "listCodes", + "group": null, "weight": 118, "cookies": false, "type": "", @@ -5239,6 +5307,7 @@ }, "x-appwrite": { "method": "listContinents", + "group": null, "weight": 122, "cookies": false, "type": "", @@ -5290,6 +5359,7 @@ }, "x-appwrite": { "method": "listCountries", + "group": null, "weight": 119, "cookies": false, "type": "", @@ -5341,6 +5411,7 @@ }, "x-appwrite": { "method": "listCountriesEU", + "group": null, "weight": 120, "cookies": false, "type": "", @@ -5392,6 +5463,7 @@ }, "x-appwrite": { "method": "listCountriesPhones", + "group": null, "weight": 121, "cookies": false, "type": "", @@ -5443,6 +5515,7 @@ }, "x-appwrite": { "method": "listCurrencies", + "group": null, "weight": 123, "cookies": false, "type": "", @@ -5494,6 +5567,7 @@ }, "x-appwrite": { "method": "listLanguages", + "group": null, "weight": 124, "cookies": false, "type": "", @@ -5545,7 +5619,8 @@ }, "x-appwrite": { "method": "createSubscriber", - "weight": 376, + "group": "subscribers", + "weight": 375, "cookies": false, "type": "", "deprecated": false, @@ -5627,7 +5702,8 @@ }, "x-appwrite": { "method": "deleteSubscriber", - "weight": 380, + "group": "subscribers", + "weight": 379, "cookies": false, "type": "", "deprecated": false, @@ -5701,7 +5777,8 @@ }, "x-appwrite": { "method": "listFiles", - "weight": 208, + "group": "files", + "weight": 207, "cookies": false, "type": "", "deprecated": false, @@ -5786,7 +5863,8 @@ }, "x-appwrite": { "method": "createFile", - "weight": 207, + "group": "files", + "weight": 206, "cookies": false, "type": "upload", "deprecated": false, @@ -5883,7 +5961,8 @@ }, "x-appwrite": { "method": "getFile", - "weight": 209, + "group": "files", + "weight": 208, "cookies": false, "type": "", "deprecated": false, @@ -5954,7 +6033,8 @@ }, "x-appwrite": { "method": "updateFile", - "weight": 214, + "group": "files", + "weight": 213, "cookies": false, "type": "", "deprecated": false, @@ -6042,7 +6122,8 @@ }, "x-appwrite": { "method": "deleteFile", - "weight": 215, + "group": "files", + "weight": 214, "cookies": false, "type": "", "deprecated": false, @@ -6108,7 +6189,8 @@ }, "x-appwrite": { "method": "getFileDownload", - "weight": 211, + "group": "files", + "weight": 210, "cookies": false, "type": "location", "deprecated": false, @@ -6174,7 +6256,8 @@ }, "x-appwrite": { "method": "getFilePreview", - "weight": 210, + "group": "files", + "weight": 209, "cookies": false, "type": "location", "deprecated": false, @@ -6390,7 +6473,8 @@ }, "x-appwrite": { "method": "getFileView", - "weight": 212, + "group": "files", + "weight": 211, "cookies": false, "type": "location", "deprecated": false, @@ -6463,7 +6547,8 @@ }, "x-appwrite": { "method": "list", - "weight": 219, + "group": "teams", + "weight": 218, "cookies": false, "type": "", "deprecated": false, @@ -6538,7 +6623,8 @@ }, "x-appwrite": { "method": "create", - "weight": 218, + "group": "teams", + "weight": 217, "cookies": false, "type": "", "deprecated": false, @@ -6622,7 +6708,8 @@ }, "x-appwrite": { "method": "get", - "weight": 220, + "group": "teams", + "weight": 219, "cookies": false, "type": "", "deprecated": false, @@ -6683,7 +6770,8 @@ }, "x-appwrite": { "method": "updateName", - "weight": 222, + "group": "teams", + "weight": 221, "cookies": false, "type": "", "deprecated": false, @@ -6756,7 +6844,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 224, + "group": "teams", + "weight": 223, "cookies": false, "type": "", "deprecated": false, @@ -6819,7 +6908,8 @@ }, "x-appwrite": { "method": "listMemberships", - "weight": 226, + "group": "memberships", + "weight": 225, "cookies": false, "type": "", "deprecated": false, @@ -6904,7 +6994,8 @@ }, "x-appwrite": { "method": "createMembership", - "weight": 225, + "group": "memberships", + "weight": 224, "cookies": false, "type": "", "deprecated": false, @@ -7014,7 +7105,8 @@ }, "x-appwrite": { "method": "getMembership", - "weight": 227, + "group": "memberships", + "weight": 226, "cookies": false, "type": "", "deprecated": false, @@ -7085,7 +7177,8 @@ }, "x-appwrite": { "method": "updateMembership", - "weight": 228, + "group": "memberships", + "weight": 227, "cookies": false, "type": "", "deprecated": false, @@ -7171,7 +7264,8 @@ }, "x-appwrite": { "method": "deleteMembership", - "weight": 230, + "group": "memberships", + "weight": 229, "cookies": false, "type": "", "deprecated": false, @@ -7244,7 +7338,8 @@ }, "x-appwrite": { "method": "updateMembershipStatus", - "weight": 229, + "group": "memberships", + "weight": 228, "cookies": false, "type": "", "deprecated": false, @@ -7341,7 +7436,8 @@ }, "x-appwrite": { "method": "getPrefs", - "weight": 221, + "group": "teams", + "weight": 220, "cookies": false, "type": "", "deprecated": false, @@ -7401,7 +7497,8 @@ }, "x-appwrite": { "method": "updatePrefs", - "weight": 223, + "group": "teams", + "weight": 222, "cookies": false, "type": "", "deprecated": false, diff --git a/app/config/specs/open-api3-1.6.x-console.json b/app/config/specs/open-api3-1.6.x-console.json index 54161c4262..f2a5986e6e 100644 --- a/app/config/specs/open-api3-1.6.x-console.json +++ b/app/config/specs/open-api3-1.6.x-console.json @@ -1,7 +1,7 @@ { "openapi": "3.0.0", "info": { - "version": "1.6.1", + "version": "1.6.2", "title": "Appwrite", "description": "Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)", "termsOfService": "https:\/\/appwrite.io\/policy\/terms", @@ -43,6 +43,7 @@ }, "x-appwrite": { "method": "get", + "group": "account", "weight": 9, "cookies": false, "type": "", @@ -90,6 +91,7 @@ }, "x-appwrite": { "method": "create", + "group": "account", "weight": 8, "cookies": false, "type": "", @@ -165,6 +167,7 @@ }, "x-appwrite": { "method": "delete", + "group": "account", "weight": 10, "cookies": false, "type": "", @@ -212,6 +215,7 @@ }, "x-appwrite": { "method": "updateEmail", + "group": "account", "weight": 34, "cookies": false, "type": "", @@ -286,6 +290,7 @@ }, "x-appwrite": { "method": "listIdentities", + "group": "identities", "weight": 57, "cookies": false, "type": "", @@ -343,6 +348,7 @@ }, "x-appwrite": { "method": "deleteIdentity", + "group": "identities", "weight": 58, "cookies": false, "type": "", @@ -404,6 +410,7 @@ }, "x-appwrite": { "method": "createJWT", + "group": "tokens", "weight": 29, "cookies": false, "type": "", @@ -452,6 +459,7 @@ }, "x-appwrite": { "method": "listLogs", + "group": "logs", "weight": 31, "cookies": false, "type": "", @@ -516,6 +524,7 @@ }, "x-appwrite": { "method": "updateMFA", + "group": "mfa", "weight": 44, "cookies": false, "type": "", @@ -584,6 +593,7 @@ }, "x-appwrite": { "method": "createMfaAuthenticator", + "group": "mfa", "weight": 46, "cookies": false, "type": "", @@ -628,7 +638,7 @@ ] }, "put": { - "summary": "Verify authenticator", + "summary": "Update authenticator (confirmation)", "operationId": "accountUpdateMfaAuthenticator", "tags": [ "account" @@ -648,6 +658,7 @@ }, "x-appwrite": { "method": "updateMfaAuthenticator", + "group": "mfa", "weight": 47, "cookies": false, "type": "", @@ -724,6 +735,7 @@ }, "x-appwrite": { "method": "deleteMfaAuthenticator", + "group": "mfa", "weight": 51, "cookies": false, "type": "", @@ -790,6 +802,7 @@ }, "x-appwrite": { "method": "createMfaChallenge", + "group": "mfa", "weight": 52, "cookies": false, "type": "", @@ -843,7 +856,7 @@ } }, "put": { - "summary": "Create MFA challenge (confirmation)", + "summary": "Update MFA challenge (confirmation)", "operationId": "accountUpdateMfaChallenge", "tags": [ "account" @@ -863,6 +876,7 @@ }, "x-appwrite": { "method": "updateMfaChallenge", + "group": "mfa", "weight": 53, "cookies": false, "type": "", @@ -937,6 +951,7 @@ }, "x-appwrite": { "method": "listMfaFactors", + "group": "mfa", "weight": 45, "cookies": false, "type": "", @@ -966,7 +981,7 @@ }, "\/account\/mfa\/recovery-codes": { "get": { - "summary": "Get MFA recovery codes", + "summary": "List MFA recovery codes", "operationId": "accountGetMfaRecoveryCodes", "tags": [ "account" @@ -986,6 +1001,7 @@ }, "x-appwrite": { "method": "getMfaRecoveryCodes", + "group": "mfa", "weight": 50, "cookies": false, "type": "", @@ -1033,6 +1049,7 @@ }, "x-appwrite": { "method": "createMfaRecoveryCodes", + "group": "mfa", "weight": 48, "cookies": false, "type": "", @@ -1060,7 +1077,7 @@ ] }, "patch": { - "summary": "Regenerate MFA recovery codes", + "summary": "Update MFA recovery codes (regenerate)", "operationId": "accountUpdateMfaRecoveryCodes", "tags": [ "account" @@ -1080,6 +1097,7 @@ }, "x-appwrite": { "method": "updateMfaRecoveryCodes", + "group": "mfa", "weight": 49, "cookies": false, "type": "", @@ -1129,6 +1147,7 @@ }, "x-appwrite": { "method": "updateName", + "group": "account", "weight": 32, "cookies": false, "type": "", @@ -1197,6 +1216,7 @@ }, "x-appwrite": { "method": "updatePassword", + "group": "account", "weight": 33, "cookies": false, "type": "", @@ -1270,6 +1290,7 @@ }, "x-appwrite": { "method": "updatePhone", + "group": "account", "weight": 35, "cookies": false, "type": "", @@ -1344,6 +1365,7 @@ }, "x-appwrite": { "method": "getPrefs", + "group": "account", "weight": 30, "cookies": false, "type": "", @@ -1391,6 +1413,7 @@ }, "x-appwrite": { "method": "updatePrefs", + "group": "account", "weight": 36, "cookies": false, "type": "", @@ -1459,6 +1482,7 @@ }, "x-appwrite": { "method": "createRecovery", + "group": "recovery", "weight": 38, "cookies": false, "type": "", @@ -1514,7 +1538,7 @@ } }, "put": { - "summary": "Create password recovery (confirmation)", + "summary": "Update password recovery (confirmation)", "operationId": "accountUpdateRecovery", "tags": [ "account" @@ -1534,6 +1558,7 @@ }, "x-appwrite": { "method": "updateRecovery", + "group": "recovery", "weight": 39, "cookies": false, "type": "", @@ -1614,6 +1639,7 @@ }, "x-appwrite": { "method": "listSessions", + "group": "sessions", "weight": 11, "cookies": false, "type": "", @@ -1654,6 +1680,7 @@ }, "x-appwrite": { "method": "deleteSessions", + "group": "sessions", "weight": 12, "cookies": false, "type": "", @@ -1703,6 +1730,7 @@ }, "x-appwrite": { "method": "createAnonymousSession", + "group": "sessions", "weight": 17, "cookies": false, "type": "", @@ -1751,6 +1779,7 @@ }, "x-appwrite": { "method": "createEmailPasswordSession", + "group": "sessions", "weight": 16, "cookies": false, "type": "", @@ -1824,6 +1853,7 @@ }, "x-appwrite": { "method": "updateMagicURLSession", + "group": "sessions", "weight": 26, "cookies": false, "type": "", @@ -1890,6 +1920,7 @@ }, "x-appwrite": { "method": "createOAuth2Session", + "group": "sessions", "weight": 19, "cookies": false, "type": "webAuth", @@ -1917,7 +1948,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", "required": true, "schema": { "type": "string", @@ -1937,6 +1968,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -2030,6 +2062,7 @@ }, "x-appwrite": { "method": "updatePhoneSession", + "group": "sessions", "weight": 27, "cookies": false, "type": "", @@ -2103,6 +2136,7 @@ }, "x-appwrite": { "method": "createSession", + "group": "sessions", "weight": 18, "cookies": false, "type": "", @@ -2176,6 +2210,7 @@ }, "x-appwrite": { "method": "getSession", + "group": "sessions", "weight": 13, "cookies": false, "type": "", @@ -2235,6 +2270,7 @@ }, "x-appwrite": { "method": "updateSession", + "group": "sessions", "weight": 15, "cookies": false, "type": "", @@ -2287,6 +2323,7 @@ }, "x-appwrite": { "method": "deleteSession", + "group": "sessions", "weight": 14, "cookies": false, "type": "", @@ -2348,6 +2385,7 @@ }, "x-appwrite": { "method": "updateStatus", + "group": "account", "weight": 37, "cookies": false, "type": "", @@ -2397,6 +2435,7 @@ }, "x-appwrite": { "method": "createPushTarget", + "group": "pushTargets", "weight": 54, "cookies": false, "type": "", @@ -2474,6 +2513,7 @@ }, "x-appwrite": { "method": "updatePushTarget", + "group": "pushTargets", "weight": 55, "cookies": false, "type": "", @@ -2543,6 +2583,7 @@ }, "x-appwrite": { "method": "deletePushTarget", + "group": "pushTargets", "weight": 56, "cookies": false, "type": "", @@ -2602,6 +2643,7 @@ }, "x-appwrite": { "method": "createEmailToken", + "group": "tokens", "weight": 25, "cookies": false, "type": "", @@ -2680,6 +2722,7 @@ }, "x-appwrite": { "method": "createMagicURLToken", + "group": "tokens", "weight": 24, "cookies": false, "type": "", @@ -2759,6 +2802,7 @@ }, "x-appwrite": { "method": "createOAuth2Token", + "group": "tokens", "weight": 23, "cookies": false, "type": "webAuth", @@ -2786,7 +2830,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", "required": true, "schema": { "type": "string", @@ -2806,6 +2850,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -2899,6 +2944,7 @@ }, "x-appwrite": { "method": "createPhoneToken", + "group": "tokens", "weight": 28, "cookies": false, "type": "", @@ -2975,6 +3021,7 @@ }, "x-appwrite": { "method": "createVerification", + "group": "verification", "weight": 40, "cookies": false, "type": "", @@ -3021,7 +3068,7 @@ } }, "put": { - "summary": "Create email verification (confirmation)", + "summary": "Update email verification (confirmation)", "operationId": "accountUpdateVerification", "tags": [ "account" @@ -3041,6 +3088,7 @@ }, "x-appwrite": { "method": "updateVerification", + "group": "verification", "weight": 41, "cookies": false, "type": "", @@ -3115,6 +3163,7 @@ }, "x-appwrite": { "method": "createPhoneVerification", + "group": "verification", "weight": 42, "cookies": false, "type": "", @@ -3165,6 +3214,7 @@ }, "x-appwrite": { "method": "updatePhoneVerification", + "group": "verification", "weight": 43, "cookies": false, "type": "", @@ -3232,6 +3282,7 @@ }, "x-appwrite": { "method": "getBrowser", + "group": null, "weight": 60, "cookies": false, "type": "location", @@ -3357,6 +3408,7 @@ }, "x-appwrite": { "method": "getCreditCard", + "group": null, "weight": 59, "cookies": false, "type": "location", @@ -3488,6 +3540,7 @@ }, "x-appwrite": { "method": "getFavicon", + "group": null, "weight": 63, "cookies": false, "type": "location", @@ -3545,6 +3598,7 @@ }, "x-appwrite": { "method": "getFlag", + "group": null, "weight": 61, "cookies": false, "type": "location", @@ -4032,6 +4086,7 @@ }, "x-appwrite": { "method": "getImage", + "group": null, "weight": 62, "cookies": false, "type": "location", @@ -4113,6 +4168,7 @@ }, "x-appwrite": { "method": "getInitials", + "group": null, "weight": 65, "cookies": false, "type": "location", @@ -4204,6 +4260,7 @@ }, "x-appwrite": { "method": "getQR", + "group": null, "weight": 64, "cookies": false, "type": "location", @@ -4282,7 +4339,7 @@ }, "\/console\/assistant": { "post": { - "summary": "Ask query", + "summary": "Create assistant query", "operationId": "assistantChat", "tags": [ "assistant" @@ -4295,7 +4352,8 @@ }, "x-appwrite": { "method": "chat", - "weight": 333, + "group": "console", + "weight": 332, "cookies": false, "type": "", "deprecated": false, @@ -4361,7 +4419,8 @@ }, "x-appwrite": { "method": "variables", - "weight": 332, + "group": "console", + "weight": 331, "cookies": false, "type": "", "deprecated": false, @@ -4408,6 +4467,7 @@ }, "x-appwrite": { "method": "list", + "group": "databases", "weight": 70, "cookies": false, "type": "", @@ -4480,6 +4540,7 @@ }, "x-appwrite": { "method": "create", + "group": "databases", "weight": 69, "cookies": false, "type": "", @@ -4558,6 +4619,7 @@ }, "x-appwrite": { "method": "getUsage", + "group": null, "weight": 114, "cookies": false, "type": "", @@ -4629,6 +4691,7 @@ }, "x-appwrite": { "method": "get", + "group": "databases", "weight": 71, "cookies": false, "type": "", @@ -4687,6 +4750,7 @@ }, "x-appwrite": { "method": "update", + "group": "databases", "weight": 73, "cookies": false, "type": "", @@ -4762,6 +4826,7 @@ }, "x-appwrite": { "method": "delete", + "group": "databases", "weight": 74, "cookies": false, "type": "", @@ -4822,6 +4887,7 @@ }, "x-appwrite": { "method": "listCollections", + "group": "collections", "weight": 76, "cookies": false, "type": "", @@ -4904,6 +4970,7 @@ }, "x-appwrite": { "method": "createCollection", + "group": "collections", "weight": 75, "cookies": false, "type": "", @@ -5007,6 +5074,7 @@ }, "x-appwrite": { "method": "getCollection", + "group": "collections", "weight": 77, "cookies": false, "type": "", @@ -5075,6 +5143,7 @@ }, "x-appwrite": { "method": "updateCollection", + "group": "collections", "weight": 79, "cookies": false, "type": "", @@ -5173,6 +5242,7 @@ }, "x-appwrite": { "method": "deleteCollection", + "group": "collections", "weight": 80, "cookies": false, "type": "", @@ -5243,6 +5313,7 @@ }, "x-appwrite": { "method": "listAttributes", + "group": "attributes", "weight": 91, "cookies": false, "type": "", @@ -5326,6 +5397,7 @@ }, "x-appwrite": { "method": "createBooleanAttribute", + "group": "attributes", "weight": 88, "cookies": false, "type": "", @@ -5431,6 +5503,7 @@ }, "x-appwrite": { "method": "updateBooleanAttribute", + "group": "attributes", "weight": 100, "cookies": false, "type": "", @@ -5541,6 +5614,7 @@ }, "x-appwrite": { "method": "createDatetimeAttribute", + "group": "attributes", "weight": 89, "cookies": false, "type": "", @@ -5646,6 +5720,7 @@ }, "x-appwrite": { "method": "updateDatetimeAttribute", + "group": "attributes", "weight": 101, "cookies": false, "type": "", @@ -5756,6 +5831,7 @@ }, "x-appwrite": { "method": "createEmailAttribute", + "group": "attributes", "weight": 82, "cookies": false, "type": "", @@ -5861,6 +5937,7 @@ }, "x-appwrite": { "method": "updateEmailAttribute", + "group": "attributes", "weight": 94, "cookies": false, "type": "", @@ -5971,6 +6048,7 @@ }, "x-appwrite": { "method": "createEnumAttribute", + "group": "attributes", "weight": 83, "cookies": false, "type": "", @@ -6085,6 +6163,7 @@ }, "x-appwrite": { "method": "updateEnumAttribute", + "group": "attributes", "weight": 95, "cookies": false, "type": "", @@ -6204,6 +6283,7 @@ }, "x-appwrite": { "method": "createFloatAttribute", + "group": "attributes", "weight": 87, "cookies": false, "type": "", @@ -6319,6 +6399,7 @@ }, "x-appwrite": { "method": "updateFloatAttribute", + "group": "attributes", "weight": 99, "cookies": false, "type": "", @@ -6439,6 +6520,7 @@ }, "x-appwrite": { "method": "createIntegerAttribute", + "group": "attributes", "weight": 86, "cookies": false, "type": "", @@ -6554,6 +6636,7 @@ }, "x-appwrite": { "method": "updateIntegerAttribute", + "group": "attributes", "weight": 98, "cookies": false, "type": "", @@ -6674,6 +6757,7 @@ }, "x-appwrite": { "method": "createIpAttribute", + "group": "attributes", "weight": 84, "cookies": false, "type": "", @@ -6779,6 +6863,7 @@ }, "x-appwrite": { "method": "updateIpAttribute", + "group": "attributes", "weight": 96, "cookies": false, "type": "", @@ -6889,6 +6974,7 @@ }, "x-appwrite": { "method": "createRelationshipAttribute", + "group": "attributes", "weight": 90, "cookies": false, "type": "", @@ -7019,6 +7105,7 @@ }, "x-appwrite": { "method": "createStringAttribute", + "group": "attributes", "weight": 81, "cookies": false, "type": "", @@ -7135,6 +7222,7 @@ }, "x-appwrite": { "method": "updateStringAttribute", + "group": "attributes", "weight": 93, "cookies": false, "type": "", @@ -7250,6 +7338,7 @@ }, "x-appwrite": { "method": "createUrlAttribute", + "group": "attributes", "weight": 85, "cookies": false, "type": "", @@ -7355,6 +7444,7 @@ }, "x-appwrite": { "method": "updateUrlAttribute", + "group": "attributes", "weight": 97, "cookies": false, "type": "", @@ -7496,6 +7586,7 @@ }, "x-appwrite": { "method": "getAttribute", + "group": "attributes", "weight": 92, "cookies": false, "type": "", @@ -7566,6 +7657,7 @@ }, "x-appwrite": { "method": "deleteAttribute", + "group": "attributes", "weight": 103, "cookies": false, "type": "", @@ -7645,6 +7737,7 @@ }, "x-appwrite": { "method": "updateRelationshipAttribute", + "group": "attributes", "weight": 102, "cookies": false, "type": "", @@ -7752,6 +7845,7 @@ }, "x-appwrite": { "method": "listDocuments", + "group": "documents", "weight": 109, "cookies": false, "type": "", @@ -7836,6 +7930,7 @@ }, "x-appwrite": { "method": "createDocument", + "group": "documents", "weight": 108, "cookies": false, "type": "", @@ -7942,6 +8037,7 @@ }, "x-appwrite": { "method": "getDocument", + "group": "documents", "weight": 110, "cookies": false, "type": "", @@ -8036,6 +8132,7 @@ }, "x-appwrite": { "method": "updateDocument", + "group": "documents", "weight": 112, "cookies": false, "type": "", @@ -8134,6 +8231,7 @@ }, "x-appwrite": { "method": "deleteDocument", + "group": "documents", "weight": 113, "cookies": false, "type": "", @@ -8217,6 +8315,7 @@ }, "x-appwrite": { "method": "listDocumentLogs", + "group": "logs", "weight": 111, "cookies": false, "type": "", @@ -8309,6 +8408,7 @@ }, "x-appwrite": { "method": "listIndexes", + "group": "indexes", "weight": 105, "cookies": false, "type": "", @@ -8390,6 +8490,7 @@ }, "x-appwrite": { "method": "createIndex", + "group": "collections", "weight": 104, "cookies": false, "type": "", @@ -8509,6 +8610,7 @@ }, "x-appwrite": { "method": "getIndex", + "group": "indexes", "weight": 106, "cookies": false, "type": "", @@ -8579,6 +8681,7 @@ }, "x-appwrite": { "method": "deleteIndex", + "group": "indexes", "weight": 107, "cookies": false, "type": "", @@ -8658,6 +8761,7 @@ }, "x-appwrite": { "method": "listCollectionLogs", + "group": "collections", "weight": 78, "cookies": false, "type": "", @@ -8740,6 +8844,7 @@ }, "x-appwrite": { "method": "getCollectionUsage", + "group": null, "weight": 116, "cookies": false, "type": "", @@ -8831,6 +8936,7 @@ }, "x-appwrite": { "method": "listLogs", + "group": "logs", "weight": 72, "cookies": false, "type": "", @@ -8903,6 +9009,7 @@ }, "x-appwrite": { "method": "getDatabaseUsage", + "group": null, "weight": 115, "cookies": false, "type": "", @@ -8984,7 +9091,8 @@ }, "x-appwrite": { "method": "list", - "weight": 289, + "group": "functions", + "weight": 288, "cookies": false, "type": "", "deprecated": false, @@ -9056,7 +9164,8 @@ }, "x-appwrite": { "method": "create", - "weight": 288, + "group": "functions", + "weight": 287, "cookies": false, "type": "", "deprecated": false, @@ -9302,7 +9411,8 @@ }, "x-appwrite": { "method": "listRuntimes", - "weight": 290, + "group": "runtimes", + "weight": 289, "cookies": false, "type": "", "deprecated": false, @@ -9350,7 +9460,8 @@ }, "x-appwrite": { "method": "listSpecifications", - "weight": 291, + "group": "runtimes", + "weight": 290, "cookies": false, "type": "", "deprecated": false, @@ -9399,7 +9510,8 @@ }, "x-appwrite": { "method": "listTemplates", - "weight": 314, + "group": "templates", + "weight": 313, "cookies": false, "type": "", "deprecated": false, @@ -9498,7 +9610,8 @@ }, "x-appwrite": { "method": "getTemplate", - "weight": 315, + "group": "templates", + "weight": 314, "cookies": false, "type": "", "deprecated": false, @@ -9557,7 +9670,8 @@ }, "x-appwrite": { "method": "getUsage", - "weight": 294, + "group": null, + "weight": 293, "cookies": false, "type": "", "deprecated": false, @@ -9628,7 +9742,8 @@ }, "x-appwrite": { "method": "get", - "weight": 292, + "group": "functions", + "weight": 291, "cookies": false, "type": "", "deprecated": false, @@ -9686,7 +9801,8 @@ }, "x-appwrite": { "method": "update", - "weight": 295, + "group": "functions", + "weight": 294, "cookies": false, "type": "", "deprecated": false, @@ -9909,7 +10025,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 298, + "group": "functions", + "weight": 297, "cookies": false, "type": "", "deprecated": false, @@ -9969,7 +10086,8 @@ }, "x-appwrite": { "method": "listDeployments", - "weight": 300, + "group": "deployments", + "weight": 299, "cookies": false, "type": "", "deprecated": false, @@ -10051,7 +10169,8 @@ }, "x-appwrite": { "method": "createDeployment", - "weight": 299, + "group": "deployments", + "weight": 298, "cookies": false, "type": "upload", "deprecated": false, @@ -10146,7 +10265,8 @@ }, "x-appwrite": { "method": "getDeployment", - "weight": 301, + "group": "deployments", + "weight": 300, "cookies": false, "type": "", "deprecated": false, @@ -10214,7 +10334,8 @@ }, "x-appwrite": { "method": "updateDeployment", - "weight": 297, + "group": "deployments", + "weight": 296, "cookies": false, "type": "", "deprecated": false, @@ -10275,7 +10396,8 @@ }, "x-appwrite": { "method": "deleteDeployment", - "weight": 302, + "group": "deployments", + "weight": 301, "cookies": false, "type": "", "deprecated": false, @@ -10325,7 +10447,7 @@ }, "\/functions\/{functionId}\/deployments\/{deploymentId}\/build": { "post": { - "summary": "Rebuild deployment", + "summary": "Create deployment build", "operationId": "functionsCreateBuild", "tags": [ "functions" @@ -10338,7 +10460,8 @@ }, "x-appwrite": { "method": "createBuild", - "weight": 303, + "group": "deployments", + "weight": 302, "cookies": false, "type": "", "deprecated": false, @@ -10422,7 +10545,8 @@ }, "x-appwrite": { "method": "updateDeploymentBuild", - "weight": 304, + "group": "deployments", + "weight": 303, "cookies": false, "type": "", "deprecated": false, @@ -10472,7 +10596,7 @@ }, "\/functions\/{functionId}\/deployments\/{deploymentId}\/download": { "get": { - "summary": "Download deployment", + "summary": "Get deployment download", "operationId": "functionsGetDeploymentDownload", "tags": [ "functions" @@ -10485,7 +10609,8 @@ }, "x-appwrite": { "method": "getDeploymentDownload", - "weight": 296, + "group": "deployments", + "weight": 295, "cookies": false, "type": "location", "deprecated": false, @@ -10557,7 +10682,8 @@ }, "x-appwrite": { "method": "listExecutions", - "weight": 306, + "group": "executions", + "weight": 305, "cookies": false, "type": "", "deprecated": false, @@ -10642,7 +10768,8 @@ }, "x-appwrite": { "method": "createExecution", - "weight": 305, + "group": "executions", + "weight": 304, "cookies": false, "type": "", "deprecated": false, @@ -10756,7 +10883,8 @@ }, "x-appwrite": { "method": "getExecution", - "weight": 307, + "group": "executions", + "weight": 306, "cookies": false, "type": "", "deprecated": false, @@ -10820,7 +10948,8 @@ }, "x-appwrite": { "method": "deleteExecution", - "weight": 308, + "group": "executions", + "weight": 307, "cookies": false, "type": "", "deprecated": false, @@ -10890,7 +11019,8 @@ }, "x-appwrite": { "method": "getFunctionUsage", - "weight": 293, + "group": null, + "weight": 292, "cookies": false, "type": "", "deprecated": false, @@ -10971,7 +11101,8 @@ }, "x-appwrite": { "method": "listVariables", - "weight": 310, + "group": "variables", + "weight": 309, "cookies": false, "type": "", "deprecated": false, @@ -11029,7 +11160,8 @@ }, "x-appwrite": { "method": "createVariable", - "weight": 309, + "group": "variables", + "weight": 308, "cookies": false, "type": "", "deprecated": false, @@ -11114,7 +11246,8 @@ }, "x-appwrite": { "method": "getVariable", - "weight": 311, + "group": "variables", + "weight": 310, "cookies": false, "type": "", "deprecated": false, @@ -11182,7 +11315,8 @@ }, "x-appwrite": { "method": "updateVariable", - "weight": 312, + "group": "variables", + "weight": 311, "cookies": false, "type": "", "deprecated": false, @@ -11267,7 +11401,8 @@ }, "x-appwrite": { "method": "deleteVariable", - "weight": 313, + "group": "variables", + "weight": 312, "cookies": false, "type": "", "deprecated": false, @@ -11337,7 +11472,8 @@ }, "x-appwrite": { "method": "query", - "weight": 331, + "group": "graphql", + "weight": 330, "cookies": false, "type": "graphql", "deprecated": false, @@ -11388,7 +11524,8 @@ }, "x-appwrite": { "method": "mutation", - "weight": 330, + "group": "graphql", + "weight": 329, "cookies": false, "type": "graphql", "deprecated": false, @@ -11439,6 +11576,7 @@ }, "x-appwrite": { "method": "get", + "group": "health", "weight": 125, "cookies": false, "type": "", @@ -11487,7 +11625,8 @@ }, "x-appwrite": { "method": "getAntivirus", - "weight": 147, + "group": "health", + "weight": 146, "cookies": false, "type": "", "deprecated": false, @@ -11535,6 +11674,7 @@ }, "x-appwrite": { "method": "getCache", + "group": "health", "weight": 128, "cookies": false, "type": "", @@ -11583,6 +11723,7 @@ }, "x-appwrite": { "method": "getCertificate", + "group": "health", "weight": 133, "cookies": false, "type": "", @@ -11642,6 +11783,7 @@ }, "x-appwrite": { "method": "getDB", + "group": "health", "weight": 127, "cookies": false, "type": "", @@ -11690,6 +11832,7 @@ }, "x-appwrite": { "method": "getPubSub", + "group": "health", "weight": 129, "cookies": false, "type": "", @@ -11738,6 +11881,7 @@ }, "x-appwrite": { "method": "getQueueBuilds", + "group": "queue", "weight": 135, "cookies": false, "type": "", @@ -11799,6 +11943,7 @@ }, "x-appwrite": { "method": "getQueueCertificates", + "group": "queue", "weight": 134, "cookies": false, "type": "", @@ -11860,6 +12005,7 @@ }, "x-appwrite": { "method": "getQueueDatabases", + "group": "queue", "weight": 136, "cookies": false, "type": "", @@ -11932,6 +12078,7 @@ }, "x-appwrite": { "method": "getQueueDeletes", + "group": "queue", "weight": 137, "cookies": false, "type": "", @@ -11993,7 +12140,8 @@ }, "x-appwrite": { "method": "getFailedJobs", - "weight": 148, + "group": "queue", + "weight": 147, "cookies": false, "type": "", "deprecated": false, @@ -12033,7 +12181,6 @@ "v1-functions", "v1-stats-resources", "v1-stats-usage", - "v1-stats-usage-dump", "v1-webhooks", "v1-certificates", "v1-builds", @@ -12081,6 +12228,7 @@ }, "x-appwrite": { "method": "getQueueFunctions", + "group": "queue", "weight": 141, "cookies": false, "type": "", @@ -12142,6 +12290,7 @@ }, "x-appwrite": { "method": "getQueueLogs", + "group": "queue", "weight": 132, "cookies": false, "type": "", @@ -12203,6 +12352,7 @@ }, "x-appwrite": { "method": "getQueueMails", + "group": "queue", "weight": 138, "cookies": false, "type": "", @@ -12264,6 +12414,7 @@ }, "x-appwrite": { "method": "getQueueMessaging", + "group": "queue", "weight": 139, "cookies": false, "type": "", @@ -12325,6 +12476,7 @@ }, "x-appwrite": { "method": "getQueueMigrations", + "group": "queue", "weight": 140, "cookies": false, "type": "", @@ -12386,6 +12538,7 @@ }, "x-appwrite": { "method": "getQueueStatsResources", + "group": "queue", "weight": 142, "cookies": false, "type": "", @@ -12447,6 +12600,7 @@ }, "x-appwrite": { "method": "getQueueUsage", + "group": "queue", "weight": 143, "cookies": false, "type": "", @@ -12486,67 +12640,6 @@ ] } }, - "\/health\/queue\/stats-usage-dump": { - "get": { - "summary": "Get usage dump queue", - "operationId": "healthGetQueueStatsUsageDump", - "tags": [ - "health" - ], - "description": "Get the number of projects containing metrics that are waiting to be processed in the Appwrite internal queue server.", - "responses": { - "200": { - "description": "Health Queue", - "content": { - "application\/json": { - "schema": { - "$ref": "#\/components\/schemas\/healthQueue" - } - } - } - } - }, - "x-appwrite": { - "method": "getQueueStatsUsageDump", - "weight": 144, - "cookies": false, - "type": "", - "deprecated": false, - "demo": "health\/get-queue-stats-usage-dump.md", - "edit": "https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-stats-usage-dump.md", - "rate-limit": 0, - "rate-time": 3600, - "rate-key": "url:{url},ip:{ip}", - "scope": "health.read", - "platforms": [ - "server" - ], - "packaging": false, - "auth": { - "Project": [] - } - }, - "security": [ - { - "Project": [], - "Key": [] - } - ], - "parameters": [ - { - "name": "threshold", - "description": "Queue size threshold. When hit (equal or higher), endpoint returns server error. Default value is 5000.", - "required": false, - "schema": { - "type": "integer", - "format": "int32", - "default": 5000 - }, - "in": "query" - } - ] - } - }, "\/health\/queue\/webhooks": { "get": { "summary": "Get webhooks queue", @@ -12569,6 +12662,7 @@ }, "x-appwrite": { "method": "getQueueWebhooks", + "group": "queue", "weight": 131, "cookies": false, "type": "", @@ -12630,7 +12724,8 @@ }, "x-appwrite": { "method": "getStorage", - "weight": 146, + "group": "storage", + "weight": 145, "cookies": false, "type": "", "deprecated": false, @@ -12678,7 +12773,8 @@ }, "x-appwrite": { "method": "getStorageLocal", - "weight": 145, + "group": "storage", + "weight": 144, "cookies": false, "type": "", "deprecated": false, @@ -12726,6 +12822,7 @@ }, "x-appwrite": { "method": "getTime", + "group": "health", "weight": 130, "cookies": false, "type": "", @@ -12774,6 +12871,7 @@ }, "x-appwrite": { "method": "get", + "group": null, "weight": 117, "cookies": false, "type": "", @@ -12825,6 +12923,7 @@ }, "x-appwrite": { "method": "listCodes", + "group": null, "weight": 118, "cookies": false, "type": "", @@ -12876,6 +12975,7 @@ }, "x-appwrite": { "method": "listContinents", + "group": null, "weight": 122, "cookies": false, "type": "", @@ -12927,6 +13027,7 @@ }, "x-appwrite": { "method": "listCountries", + "group": null, "weight": 119, "cookies": false, "type": "", @@ -12978,6 +13079,7 @@ }, "x-appwrite": { "method": "listCountriesEU", + "group": null, "weight": 120, "cookies": false, "type": "", @@ -13029,6 +13131,7 @@ }, "x-appwrite": { "method": "listCountriesPhones", + "group": null, "weight": 121, "cookies": false, "type": "", @@ -13080,6 +13183,7 @@ }, "x-appwrite": { "method": "listCurrencies", + "group": null, "weight": 123, "cookies": false, "type": "", @@ -13131,6 +13235,7 @@ }, "x-appwrite": { "method": "listLanguages", + "group": null, "weight": 124, "cookies": false, "type": "", @@ -13182,7 +13287,8 @@ }, "x-appwrite": { "method": "listMessages", - "weight": 384, + "group": "messages", + "weight": 383, "cookies": false, "type": "", "deprecated": false, @@ -13257,7 +13363,8 @@ }, "x-appwrite": { "method": "createEmail", - "weight": 381, + "group": "messages", + "weight": 380, "cookies": false, "type": "", "deprecated": false, @@ -13400,7 +13507,8 @@ }, "x-appwrite": { "method": "updateEmail", - "weight": 388, + "group": "messages", + "weight": 387, "cookies": false, "type": "", "deprecated": false, @@ -13545,7 +13653,8 @@ }, "x-appwrite": { "method": "createPush", - "weight": 383, + "group": "messages", + "weight": 382, "cookies": false, "type": "", "deprecated": false, @@ -13718,7 +13827,8 @@ }, "x-appwrite": { "method": "updatePush", - "weight": 390, + "group": "messages", + "weight": 389, "cookies": false, "type": "", "deprecated": false, @@ -13895,7 +14005,8 @@ }, "x-appwrite": { "method": "createSms", - "weight": 382, + "group": "messages", + "weight": 381, "cookies": false, "type": "", "deprecated": false, @@ -14003,7 +14114,8 @@ }, "x-appwrite": { "method": "updateSms", - "weight": 389, + "group": "messages", + "weight": 388, "cookies": false, "type": "", "deprecated": false, @@ -14114,7 +14226,8 @@ }, "x-appwrite": { "method": "getMessage", - "weight": 387, + "group": "messages", + "weight": 386, "cookies": false, "type": "", "deprecated": false, @@ -14166,7 +14279,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 391, + "group": "messages", + "weight": 390, "cookies": false, "type": "", "deprecated": false, @@ -14227,7 +14341,8 @@ }, "x-appwrite": { "method": "listMessageLogs", - "weight": 385, + "group": "logs", + "weight": 384, "cookies": false, "type": "", "deprecated": false, @@ -14301,7 +14416,8 @@ }, "x-appwrite": { "method": "listTargets", - "weight": 386, + "group": "messages", + "weight": 385, "cookies": false, "type": "", "deprecated": false, @@ -14375,7 +14491,8 @@ }, "x-appwrite": { "method": "listProviders", - "weight": 356, + "group": "providers", + "weight": 355, "cookies": false, "type": "", "deprecated": false, @@ -14450,7 +14567,8 @@ }, "x-appwrite": { "method": "createApnsProvider", - "weight": 355, + "group": "providers", + "weight": 354, "cookies": false, "type": "", "deprecated": false, @@ -14554,7 +14672,8 @@ }, "x-appwrite": { "method": "updateApnsProvider", - "weight": 368, + "group": "providers", + "weight": 367, "cookies": false, "type": "", "deprecated": false, @@ -14661,7 +14780,8 @@ }, "x-appwrite": { "method": "createFcmProvider", - "weight": 354, + "group": "providers", + "weight": 353, "cookies": false, "type": "", "deprecated": false, @@ -14745,7 +14865,8 @@ }, "x-appwrite": { "method": "updateFcmProvider", - "weight": 367, + "group": "providers", + "weight": 366, "cookies": false, "type": "", "deprecated": false, @@ -14832,7 +14953,8 @@ }, "x-appwrite": { "method": "createMailgunProvider", - "weight": 346, + "group": "providers", + "weight": 345, "cookies": false, "type": "", "deprecated": false, @@ -14946,7 +15068,8 @@ }, "x-appwrite": { "method": "updateMailgunProvider", - "weight": 359, + "group": "providers", + "weight": 358, "cookies": false, "type": "", "deprecated": false, @@ -15063,7 +15186,8 @@ }, "x-appwrite": { "method": "createMsg91Provider", - "weight": 349, + "group": "providers", + "weight": 348, "cookies": false, "type": "", "deprecated": false, @@ -15157,7 +15281,8 @@ }, "x-appwrite": { "method": "updateMsg91Provider", - "weight": 362, + "group": "providers", + "weight": 361, "cookies": false, "type": "", "deprecated": false, @@ -15254,7 +15379,8 @@ }, "x-appwrite": { "method": "createSendgridProvider", - "weight": 347, + "group": "providers", + "weight": 346, "cookies": false, "type": "", "deprecated": false, @@ -15358,7 +15484,8 @@ }, "x-appwrite": { "method": "updateSendgridProvider", - "weight": 360, + "group": "providers", + "weight": 359, "cookies": false, "type": "", "deprecated": false, @@ -15465,7 +15592,8 @@ }, "x-appwrite": { "method": "createSmtpProvider", - "weight": 348, + "group": "providers", + "weight": 347, "cookies": false, "type": "", "deprecated": false, @@ -15607,7 +15735,8 @@ }, "x-appwrite": { "method": "updateSmtpProvider", - "weight": 361, + "group": "providers", + "weight": 360, "cookies": false, "type": "", "deprecated": false, @@ -15751,7 +15880,8 @@ }, "x-appwrite": { "method": "createTelesignProvider", - "weight": 350, + "group": "providers", + "weight": 349, "cookies": false, "type": "", "deprecated": false, @@ -15845,7 +15975,8 @@ }, "x-appwrite": { "method": "updateTelesignProvider", - "weight": 363, + "group": "providers", + "weight": 362, "cookies": false, "type": "", "deprecated": false, @@ -15942,7 +16073,8 @@ }, "x-appwrite": { "method": "createTextmagicProvider", - "weight": 351, + "group": "providers", + "weight": 350, "cookies": false, "type": "", "deprecated": false, @@ -16036,7 +16168,8 @@ }, "x-appwrite": { "method": "updateTextmagicProvider", - "weight": 364, + "group": "providers", + "weight": 363, "cookies": false, "type": "", "deprecated": false, @@ -16133,7 +16266,8 @@ }, "x-appwrite": { "method": "createTwilioProvider", - "weight": 352, + "group": "providers", + "weight": 351, "cookies": false, "type": "", "deprecated": false, @@ -16227,7 +16361,8 @@ }, "x-appwrite": { "method": "updateTwilioProvider", - "weight": 365, + "group": "providers", + "weight": 364, "cookies": false, "type": "", "deprecated": false, @@ -16324,7 +16459,8 @@ }, "x-appwrite": { "method": "createVonageProvider", - "weight": 353, + "group": "providers", + "weight": 352, "cookies": false, "type": "", "deprecated": false, @@ -16418,7 +16554,8 @@ }, "x-appwrite": { "method": "updateVonageProvider", - "weight": 366, + "group": "providers", + "weight": 365, "cookies": false, "type": "", "deprecated": false, @@ -16515,7 +16652,8 @@ }, "x-appwrite": { "method": "getProvider", - "weight": 358, + "group": "providers", + "weight": 357, "cookies": false, "type": "", "deprecated": false, @@ -16567,7 +16705,8 @@ }, "x-appwrite": { "method": "deleteProvider", - "weight": 369, + "group": "providers", + "weight": 368, "cookies": false, "type": "", "deprecated": false, @@ -16628,7 +16767,8 @@ }, "x-appwrite": { "method": "listProviderLogs", - "weight": 357, + "group": "providers", + "weight": 356, "cookies": false, "type": "", "deprecated": false, @@ -16702,7 +16842,8 @@ }, "x-appwrite": { "method": "listSubscriberLogs", - "weight": 378, + "group": "subscribers", + "weight": 377, "cookies": false, "type": "", "deprecated": false, @@ -16776,7 +16917,8 @@ }, "x-appwrite": { "method": "listTopics", - "weight": 371, + "group": "topics", + "weight": 370, "cookies": false, "type": "", "deprecated": false, @@ -16849,7 +16991,8 @@ }, "x-appwrite": { "method": "createTopic", - "weight": 370, + "group": "topics", + "weight": 369, "cookies": false, "type": "", "deprecated": false, @@ -16931,7 +17074,8 @@ }, "x-appwrite": { "method": "getTopic", - "weight": 373, + "group": "topics", + "weight": 372, "cookies": false, "type": "", "deprecated": false, @@ -16990,7 +17134,8 @@ }, "x-appwrite": { "method": "updateTopic", - "weight": 374, + "group": "topics", + "weight": 373, "cookies": false, "type": "", "deprecated": false, @@ -17066,7 +17211,8 @@ }, "x-appwrite": { "method": "deleteTopic", - "weight": 375, + "group": "topics", + "weight": 374, "cookies": false, "type": "", "deprecated": false, @@ -17127,7 +17273,8 @@ }, "x-appwrite": { "method": "listTopicLogs", - "weight": 372, + "group": "topics", + "weight": 371, "cookies": false, "type": "", "deprecated": false, @@ -17201,7 +17348,8 @@ }, "x-appwrite": { "method": "listSubscribers", - "weight": 377, + "group": "subscribers", + "weight": 376, "cookies": false, "type": "", "deprecated": false, @@ -17284,7 +17432,8 @@ }, "x-appwrite": { "method": "createSubscriber", - "weight": 376, + "group": "subscribers", + "weight": 375, "cookies": false, "type": "", "deprecated": false, @@ -17373,7 +17522,8 @@ }, "x-appwrite": { "method": "getSubscriber", - "weight": 379, + "group": "subscribers", + "weight": 378, "cookies": false, "type": "", "deprecated": false, @@ -17435,7 +17585,8 @@ }, "x-appwrite": { "method": "deleteSubscriber", - "weight": 380, + "group": "subscribers", + "weight": 379, "cookies": false, "type": "", "deprecated": false, @@ -17509,7 +17660,8 @@ }, "x-appwrite": { "method": "list", - "weight": 338, + "group": null, + "weight": 337, "cookies": false, "type": "", "deprecated": false, @@ -17562,7 +17714,7 @@ }, "\/migrations\/appwrite": { "post": { - "summary": "Migrate Appwrite data", + "summary": "Create Appwrite migration", "operationId": "migrationsCreateAppwriteMigration", "tags": [ "migrations" @@ -17582,7 +17734,8 @@ }, "x-appwrite": { "method": "createAppwriteMigration", - "weight": 334, + "group": null, + "weight": 333, "cookies": false, "type": "", "deprecated": false, @@ -17649,7 +17802,7 @@ }, "\/migrations\/appwrite\/report": { "get": { - "summary": "Generate a report on Appwrite data", + "summary": "Get Appwrite migration report", "operationId": "migrationsGetAppwriteReport", "tags": [ "migrations" @@ -17669,7 +17822,8 @@ }, "x-appwrite": { "method": "getAppwriteReport", - "weight": 340, + "group": null, + "weight": 339, "cookies": false, "type": "", "deprecated": false, @@ -17741,7 +17895,7 @@ }, "\/migrations\/firebase": { "post": { - "summary": "Migrate Firebase data", + "summary": "Create Firebase migration", "operationId": "migrationsCreateFirebaseMigration", "tags": [ "migrations" @@ -17761,7 +17915,8 @@ }, "x-appwrite": { "method": "createFirebaseMigration", - "weight": 335, + "group": null, + "weight": 334, "cookies": false, "type": "", "deprecated": false, @@ -17816,7 +17971,7 @@ }, "\/migrations\/firebase\/report": { "get": { - "summary": "Generate a report on Firebase data", + "summary": "Get Firebase migration report", "operationId": "migrationsGetFirebaseReport", "tags": [ "migrations" @@ -17836,7 +17991,8 @@ }, "x-appwrite": { "method": "getFirebaseReport", - "weight": 341, + "group": null, + "weight": 340, "cookies": false, "type": "", "deprecated": false, @@ -17887,7 +18043,7 @@ }, "\/migrations\/nhost": { "post": { - "summary": "Migrate NHost data", + "summary": "Create NHost migration", "operationId": "migrationsCreateNHostMigration", "tags": [ "migrations" @@ -17907,7 +18063,8 @@ }, "x-appwrite": { "method": "createNHostMigration", - "weight": 337, + "group": null, + "weight": 336, "cookies": false, "type": "", "deprecated": false, @@ -17997,7 +18154,7 @@ }, "\/migrations\/nhost\/report": { "get": { - "summary": "Generate a report on NHost Data", + "summary": "Get NHost migration report", "operationId": "migrationsGetNHostReport", "tags": [ "migrations" @@ -18017,7 +18174,8 @@ }, "x-appwrite": { "method": "getNHostReport", - "weight": 343, + "group": null, + "weight": 342, "cookies": false, "type": "", "deprecated": false, @@ -18129,7 +18287,7 @@ }, "\/migrations\/supabase": { "post": { - "summary": "Migrate Supabase data", + "summary": "Create Supabase migration", "operationId": "migrationsCreateSupabaseMigration", "tags": [ "migrations" @@ -18149,7 +18307,8 @@ }, "x-appwrite": { "method": "createSupabaseMigration", - "weight": 336, + "group": null, + "weight": 335, "cookies": false, "type": "", "deprecated": false, @@ -18233,7 +18392,7 @@ }, "\/migrations\/supabase\/report": { "get": { - "summary": "Generate a report on Supabase Data", + "summary": "Get Supabase migration report", "operationId": "migrationsGetSupabaseReport", "tags": [ "migrations" @@ -18253,7 +18412,8 @@ }, "x-appwrite": { "method": "getSupabaseReport", - "weight": 342, + "group": null, + "weight": 341, "cookies": false, "type": "", "deprecated": false, @@ -18376,7 +18536,8 @@ }, "x-appwrite": { "method": "get", - "weight": 339, + "group": null, + "weight": 338, "cookies": false, "type": "", "deprecated": false, @@ -18413,7 +18574,7 @@ ] }, "patch": { - "summary": "Retry migration", + "summary": "Update retry migration", "operationId": "migrationsRetry", "tags": [ "migrations" @@ -18433,7 +18594,8 @@ }, "x-appwrite": { "method": "retry", - "weight": 344, + "group": null, + "weight": 343, "cookies": false, "type": "", "deprecated": false, @@ -18483,7 +18645,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 345, + "group": null, + "weight": 344, "cookies": false, "type": "", "deprecated": false, @@ -18542,7 +18705,8 @@ }, "x-appwrite": { "method": "getUsage", - "weight": 196, + "group": null, + "weight": 195, "cookies": false, "type": "", "deprecated": false, @@ -18629,7 +18793,8 @@ }, "x-appwrite": { "method": "listVariables", - "weight": 198, + "group": null, + "weight": 197, "cookies": false, "type": "", "deprecated": false, @@ -18674,7 +18839,8 @@ }, "x-appwrite": { "method": "createVariable", - "weight": 197, + "group": null, + "weight": 196, "cookies": false, "type": "", "deprecated": false, @@ -18746,7 +18912,8 @@ }, "x-appwrite": { "method": "getVariable", - "weight": 199, + "group": null, + "weight": 198, "cookies": false, "type": "", "deprecated": false, @@ -18803,7 +18970,8 @@ }, "x-appwrite": { "method": "updateVariable", - "weight": 200, + "group": null, + "weight": 199, "cookies": false, "type": "", "deprecated": false, @@ -18877,7 +19045,8 @@ }, "x-appwrite": { "method": "deleteVariable", - "weight": 201, + "group": null, + "weight": 200, "cookies": false, "type": "", "deprecated": false, @@ -18936,7 +19105,8 @@ }, "x-appwrite": { "method": "list", - "weight": 151, + "group": "projects", + "weight": 150, "cookies": false, "type": "", "deprecated": false, @@ -19007,7 +19177,8 @@ }, "x-appwrite": { "method": "create", - "weight": 150, + "group": "projects", + "weight": 149, "cookies": false, "type": "", "deprecated": false, @@ -19056,8 +19227,7 @@ "description": "Project Region.", "x-example": "default", "enum": [ - "default", - "fra" + "default" ], "x-enum-name": null, "x-enum-keys": [] @@ -19141,7 +19311,8 @@ }, "x-appwrite": { "method": "get", - "weight": 152, + "group": "projects", + "weight": 151, "cookies": false, "type": "", "deprecated": false, @@ -19198,7 +19369,8 @@ }, "x-appwrite": { "method": "update", - "weight": 153, + "group": "projects", + "weight": 152, "cookies": false, "type": "", "deprecated": false, @@ -19312,7 +19484,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 170, + "group": "projects", + "weight": 169, "cookies": false, "type": "", "deprecated": false, @@ -19371,7 +19544,8 @@ }, "x-appwrite": { "method": "updateApiStatus", - "weight": 157, + "group": "projects", + "weight": 156, "cookies": false, "type": "", "deprecated": false, @@ -19462,7 +19636,8 @@ }, "x-appwrite": { "method": "updateApiStatusAll", - "weight": 158, + "group": "projects", + "weight": 157, "cookies": false, "type": "", "deprecated": false, @@ -19540,7 +19715,8 @@ }, "x-appwrite": { "method": "updateAuthDuration", - "weight": 163, + "group": "auth", + "weight": 162, "cookies": false, "type": "", "deprecated": false, @@ -19618,7 +19794,8 @@ }, "x-appwrite": { "method": "updateAuthLimit", - "weight": 162, + "group": "auth", + "weight": 161, "cookies": false, "type": "", "deprecated": false, @@ -19696,7 +19873,8 @@ }, "x-appwrite": { "method": "updateAuthSessionsLimit", - "weight": 168, + "group": "auth", + "weight": 167, "cookies": false, "type": "", "deprecated": false, @@ -19774,7 +19952,8 @@ }, "x-appwrite": { "method": "updateMembershipsPrivacy", - "weight": 161, + "group": "auth", + "weight": 160, "cookies": false, "type": "", "deprecated": false, @@ -19864,7 +20043,8 @@ }, "x-appwrite": { "method": "updateMockNumbers", - "weight": 169, + "group": "auth", + "weight": 168, "cookies": false, "type": "", "deprecated": false, @@ -19945,7 +20125,8 @@ }, "x-appwrite": { "method": "updateAuthPasswordDictionary", - "weight": 166, + "group": "auth", + "weight": 165, "cookies": false, "type": "", "deprecated": false, @@ -20023,7 +20204,8 @@ }, "x-appwrite": { "method": "updateAuthPasswordHistory", - "weight": 165, + "group": "auth", + "weight": 164, "cookies": false, "type": "", "deprecated": false, @@ -20081,7 +20263,7 @@ }, "\/projects\/{projectId}\/auth\/personal-data": { "patch": { - "summary": "Enable or disable checking user passwords for similarity with their personal data.", + "summary": "Update personal data check", "operationId": "projectsUpdatePersonalDataCheck", "tags": [ "projects" @@ -20101,7 +20283,8 @@ }, "x-appwrite": { "method": "updatePersonalDataCheck", - "weight": 167, + "group": "auth", + "weight": 166, "cookies": false, "type": "", "deprecated": false, @@ -20179,7 +20362,8 @@ }, "x-appwrite": { "method": "updateSessionAlerts", - "weight": 160, + "group": "auth", + "weight": 159, "cookies": false, "type": "", "deprecated": false, @@ -20257,7 +20441,8 @@ }, "x-appwrite": { "method": "updateAuthStatus", - "weight": 164, + "group": "auth", + "weight": 163, "cookies": false, "type": "", "deprecated": false, @@ -20356,7 +20541,8 @@ }, "x-appwrite": { "method": "createJWT", - "weight": 182, + "group": "auth", + "weight": 181, "cookies": false, "type": "", "deprecated": false, @@ -20442,7 +20628,8 @@ }, "x-appwrite": { "method": "listKeys", - "weight": 178, + "group": "keys", + "weight": 177, "cookies": false, "type": "", "deprecated": false, @@ -20499,7 +20686,8 @@ }, "x-appwrite": { "method": "createKey", - "weight": 177, + "group": "keys", + "weight": 176, "cookies": false, "type": "", "deprecated": false, @@ -20591,7 +20779,8 @@ }, "x-appwrite": { "method": "getKey", - "weight": 179, + "group": "keys", + "weight": 178, "cookies": false, "type": "", "deprecated": false, @@ -20658,7 +20847,8 @@ }, "x-appwrite": { "method": "updateKey", - "weight": 180, + "group": "keys", + "weight": 179, "cookies": false, "type": "", "deprecated": false, @@ -20751,7 +20941,8 @@ }, "x-appwrite": { "method": "deleteKey", - "weight": 181, + "group": "keys", + "weight": 180, "cookies": false, "type": "", "deprecated": false, @@ -20820,7 +21011,8 @@ }, "x-appwrite": { "method": "updateOAuth2", - "weight": 159, + "group": "auth", + "weight": 158, "cookies": false, "type": "", "deprecated": false, @@ -20880,6 +21072,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -20956,7 +21149,8 @@ }, "x-appwrite": { "method": "listPlatforms", - "weight": 184, + "group": "platforms", + "weight": 183, "cookies": false, "type": "", "deprecated": false, @@ -21013,7 +21207,8 @@ }, "x-appwrite": { "method": "createPlatform", - "weight": 183, + "group": "platforms", + "weight": 182, "cookies": false, "type": "", "deprecated": false, @@ -21131,7 +21326,8 @@ }, "x-appwrite": { "method": "getPlatform", - "weight": 185, + "group": "platforms", + "weight": 184, "cookies": false, "type": "", "deprecated": false, @@ -21198,7 +21394,8 @@ }, "x-appwrite": { "method": "updatePlatform", - "weight": 186, + "group": "platforms", + "weight": 185, "cookies": false, "type": "", "deprecated": false, @@ -21292,7 +21489,8 @@ }, "x-appwrite": { "method": "deletePlatform", - "weight": 187, + "group": "platforms", + "weight": 186, "cookies": false, "type": "", "deprecated": false, @@ -21361,7 +21559,8 @@ }, "x-appwrite": { "method": "updateServiceStatus", - "weight": 155, + "group": "projects", + "weight": 154, "cookies": false, "type": "", "deprecated": false, @@ -21460,7 +21659,8 @@ }, "x-appwrite": { "method": "updateServiceStatusAll", - "weight": 156, + "group": "projects", + "weight": 155, "cookies": false, "type": "", "deprecated": false, @@ -21538,7 +21738,8 @@ }, "x-appwrite": { "method": "updateSmtp", - "weight": 188, + "group": "templates", + "weight": 187, "cookies": false, "type": "", "deprecated": false, @@ -21655,7 +21856,8 @@ }, "x-appwrite": { "method": "createSmtpTest", - "weight": 189, + "group": "templates", + "weight": 188, "cookies": false, "type": "", "deprecated": false, @@ -21785,7 +21987,8 @@ }, "x-appwrite": { "method": "updateTeam", - "weight": 154, + "group": "projects", + "weight": 153, "cookies": false, "type": "", "deprecated": false, @@ -21863,7 +22066,8 @@ }, "x-appwrite": { "method": "getEmailTemplate", - "weight": 191, + "group": "templates", + "weight": 190, "cookies": false, "type": "", "deprecated": false, @@ -22086,7 +22290,8 @@ }, "x-appwrite": { "method": "updateEmailTemplate", - "weight": 193, + "group": "templates", + "weight": 192, "cookies": false, "type": "", "deprecated": false, @@ -22329,7 +22534,7 @@ } }, "delete": { - "summary": "Reset custom email template", + "summary": "Delete custom email template", "operationId": "projectsDeleteEmailTemplate", "tags": [ "projects" @@ -22349,7 +22554,8 @@ }, "x-appwrite": { "method": "deleteEmailTemplate", - "weight": 195, + "group": "templates", + "weight": 194, "cookies": false, "type": "", "deprecated": false, @@ -22574,7 +22780,8 @@ }, "x-appwrite": { "method": "getSmsTemplate", - "weight": 190, + "group": "templates", + "weight": 189, "cookies": false, "type": "", "deprecated": false, @@ -22794,7 +23001,8 @@ }, "x-appwrite": { "method": "updateSmsTemplate", - "weight": 192, + "group": "templates", + "weight": 191, "cookies": false, "type": "", "deprecated": false, @@ -23033,7 +23241,8 @@ }, "x-appwrite": { "method": "deleteSmsTemplate", - "weight": 194, + "group": "templates", + "weight": 193, "cookies": false, "type": "", "deprecated": false, @@ -23255,7 +23464,8 @@ }, "x-appwrite": { "method": "listWebhooks", - "weight": 172, + "group": "webhooks", + "weight": 171, "cookies": false, "type": "", "deprecated": false, @@ -23312,7 +23522,8 @@ }, "x-appwrite": { "method": "createWebhook", - "weight": 171, + "group": "webhooks", + "weight": 170, "cookies": false, "type": "", "deprecated": false, @@ -23426,7 +23637,8 @@ }, "x-appwrite": { "method": "getWebhook", - "weight": 173, + "group": "webhooks", + "weight": 172, "cookies": false, "type": "", "deprecated": false, @@ -23493,7 +23705,8 @@ }, "x-appwrite": { "method": "updateWebhook", - "weight": 174, + "group": "webhooks", + "weight": 173, "cookies": false, "type": "", "deprecated": false, @@ -23608,7 +23821,8 @@ }, "x-appwrite": { "method": "deleteWebhook", - "weight": 176, + "group": "webhooks", + "weight": 175, "cookies": false, "type": "", "deprecated": false, @@ -23677,7 +23891,8 @@ }, "x-appwrite": { "method": "updateWebhookSignature", - "weight": 175, + "group": "webhooks", + "weight": 174, "cookies": false, "type": "", "deprecated": false, @@ -23746,7 +23961,8 @@ }, "x-appwrite": { "method": "listRules", - "weight": 317, + "group": null, + "weight": 316, "cookies": false, "type": "", "deprecated": false, @@ -23817,7 +24033,8 @@ }, "x-appwrite": { "method": "createRule", - "weight": 316, + "group": null, + "weight": 315, "cookies": false, "type": "", "deprecated": false, @@ -23900,7 +24117,8 @@ }, "x-appwrite": { "method": "getRule", - "weight": 318, + "group": null, + "weight": 317, "cookies": false, "type": "", "deprecated": false, @@ -23950,7 +24168,8 @@ }, "x-appwrite": { "method": "deleteRule", - "weight": 319, + "group": null, + "weight": 318, "cookies": false, "type": "", "deprecated": false, @@ -24009,7 +24228,8 @@ }, "x-appwrite": { "method": "updateRuleVerification", - "weight": 320, + "group": null, + "weight": 319, "cookies": false, "type": "", "deprecated": false, @@ -24068,7 +24288,8 @@ }, "x-appwrite": { "method": "listBuckets", - "weight": 203, + "group": "buckets", + "weight": 202, "cookies": false, "type": "", "deprecated": false, @@ -24140,7 +24361,8 @@ }, "x-appwrite": { "method": "createBucket", - "weight": 202, + "group": "buckets", + "weight": 201, "cookies": false, "type": "", "deprecated": false, @@ -24266,7 +24488,8 @@ }, "x-appwrite": { "method": "getBucket", - "weight": 204, + "group": "buckets", + "weight": 203, "cookies": false, "type": "", "deprecated": false, @@ -24324,7 +24547,8 @@ }, "x-appwrite": { "method": "updateBucket", - "weight": 205, + "group": "buckets", + "weight": 204, "cookies": false, "type": "", "deprecated": false, @@ -24447,7 +24671,8 @@ }, "x-appwrite": { "method": "deleteBucket", - "weight": 206, + "group": "buckets", + "weight": 205, "cookies": false, "type": "", "deprecated": false, @@ -24507,7 +24732,8 @@ }, "x-appwrite": { "method": "listFiles", - "weight": 208, + "group": "files", + "weight": 207, "cookies": false, "type": "", "deprecated": false, @@ -24592,7 +24818,8 @@ }, "x-appwrite": { "method": "createFile", - "weight": 207, + "group": "files", + "weight": 206, "cookies": false, "type": "upload", "deprecated": false, @@ -24689,7 +24916,8 @@ }, "x-appwrite": { "method": "getFile", - "weight": 209, + "group": "files", + "weight": 208, "cookies": false, "type": "", "deprecated": false, @@ -24760,7 +24988,8 @@ }, "x-appwrite": { "method": "updateFile", - "weight": 214, + "group": "files", + "weight": 213, "cookies": false, "type": "", "deprecated": false, @@ -24848,7 +25077,8 @@ }, "x-appwrite": { "method": "deleteFile", - "weight": 215, + "group": "files", + "weight": 214, "cookies": false, "type": "", "deprecated": false, @@ -24914,7 +25144,8 @@ }, "x-appwrite": { "method": "getFileDownload", - "weight": 211, + "group": "files", + "weight": 210, "cookies": false, "type": "location", "deprecated": false, @@ -24980,7 +25211,8 @@ }, "x-appwrite": { "method": "getFilePreview", - "weight": 210, + "group": "files", + "weight": 209, "cookies": false, "type": "location", "deprecated": false, @@ -25196,7 +25428,8 @@ }, "x-appwrite": { "method": "getFileView", - "weight": 212, + "group": "files", + "weight": 211, "cookies": false, "type": "location", "deprecated": false, @@ -25269,7 +25502,8 @@ }, "x-appwrite": { "method": "getUsage", - "weight": 216, + "group": null, + "weight": 215, "cookies": false, "type": "", "deprecated": false, @@ -25340,7 +25574,8 @@ }, "x-appwrite": { "method": "getBucketUsage", - "weight": 217, + "group": null, + "weight": 216, "cookies": false, "type": "", "deprecated": false, @@ -25421,7 +25656,8 @@ }, "x-appwrite": { "method": "list", - "weight": 219, + "group": "teams", + "weight": 218, "cookies": false, "type": "", "deprecated": false, @@ -25496,7 +25732,8 @@ }, "x-appwrite": { "method": "create", - "weight": 218, + "group": "teams", + "weight": 217, "cookies": false, "type": "", "deprecated": false, @@ -25580,7 +25817,8 @@ }, "x-appwrite": { "method": "get", - "weight": 220, + "group": "teams", + "weight": 219, "cookies": false, "type": "", "deprecated": false, @@ -25641,7 +25879,8 @@ }, "x-appwrite": { "method": "updateName", - "weight": 222, + "group": "teams", + "weight": 221, "cookies": false, "type": "", "deprecated": false, @@ -25714,7 +25953,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 224, + "group": "teams", + "weight": 223, "cookies": false, "type": "", "deprecated": false, @@ -25777,7 +26017,8 @@ }, "x-appwrite": { "method": "listLogs", - "weight": 231, + "group": "logs", + "weight": 230, "cookies": false, "type": "", "deprecated": false, @@ -25849,7 +26090,8 @@ }, "x-appwrite": { "method": "listMemberships", - "weight": 226, + "group": "memberships", + "weight": 225, "cookies": false, "type": "", "deprecated": false, @@ -25934,7 +26176,8 @@ }, "x-appwrite": { "method": "createMembership", - "weight": 225, + "group": "memberships", + "weight": 224, "cookies": false, "type": "", "deprecated": false, @@ -26044,7 +26287,8 @@ }, "x-appwrite": { "method": "getMembership", - "weight": 227, + "group": "memberships", + "weight": 226, "cookies": false, "type": "", "deprecated": false, @@ -26115,7 +26359,8 @@ }, "x-appwrite": { "method": "updateMembership", - "weight": 228, + "group": "memberships", + "weight": 227, "cookies": false, "type": "", "deprecated": false, @@ -26201,7 +26446,8 @@ }, "x-appwrite": { "method": "deleteMembership", - "weight": 230, + "group": "memberships", + "weight": 229, "cookies": false, "type": "", "deprecated": false, @@ -26274,7 +26520,8 @@ }, "x-appwrite": { "method": "updateMembershipStatus", - "weight": 229, + "group": "memberships", + "weight": 228, "cookies": false, "type": "", "deprecated": false, @@ -26370,7 +26617,8 @@ }, "x-appwrite": { "method": "getPrefs", - "weight": 221, + "group": "teams", + "weight": 220, "cookies": false, "type": "", "deprecated": false, @@ -26429,7 +26677,8 @@ }, "x-appwrite": { "method": "updatePrefs", - "weight": 223, + "group": "teams", + "weight": 222, "cookies": false, "type": "", "deprecated": false, @@ -26509,7 +26758,8 @@ }, "x-appwrite": { "method": "list", - "weight": 241, + "group": "users", + "weight": 240, "cookies": false, "type": "", "deprecated": false, @@ -26581,7 +26831,8 @@ }, "x-appwrite": { "method": "create", - "weight": 232, + "group": "users", + "weight": 231, "cookies": false, "type": "", "deprecated": false, @@ -26668,7 +26919,8 @@ }, "x-appwrite": { "method": "createArgon2User", - "weight": 235, + "group": "users", + "weight": 234, "cookies": false, "type": "", "deprecated": false, @@ -26752,7 +27004,8 @@ }, "x-appwrite": { "method": "createBcryptUser", - "weight": 233, + "group": "users", + "weight": 232, "cookies": false, "type": "", "deprecated": false, @@ -26836,7 +27089,8 @@ }, "x-appwrite": { "method": "listIdentities", - "weight": 249, + "group": "identities", + "weight": 248, "cookies": false, "type": "", "deprecated": false, @@ -26903,7 +27157,8 @@ }, "x-appwrite": { "method": "deleteIdentity", - "weight": 272, + "group": "identities", + "weight": 271, "cookies": false, "type": "", "deprecated": false, @@ -26963,7 +27218,8 @@ }, "x-appwrite": { "method": "createMD5User", - "weight": 234, + "group": "users", + "weight": 233, "cookies": false, "type": "", "deprecated": false, @@ -27047,7 +27303,8 @@ }, "x-appwrite": { "method": "createPHPassUser", - "weight": 237, + "group": "users", + "weight": 236, "cookies": false, "type": "", "deprecated": false, @@ -27131,7 +27388,8 @@ }, "x-appwrite": { "method": "createScryptUser", - "weight": 238, + "group": "users", + "weight": 237, "cookies": false, "type": "", "deprecated": false, @@ -27245,7 +27503,8 @@ }, "x-appwrite": { "method": "createScryptModifiedUser", - "weight": 239, + "group": "users", + "weight": 238, "cookies": false, "type": "", "deprecated": false, @@ -27347,7 +27606,8 @@ }, "x-appwrite": { "method": "createSHAUser", - "weight": 236, + "group": "users", + "weight": 235, "cookies": false, "type": "", "deprecated": false, @@ -27451,7 +27711,8 @@ }, "x-appwrite": { "method": "getUsage", - "weight": 274, + "group": null, + "weight": 273, "cookies": false, "type": "", "deprecated": false, @@ -27522,7 +27783,8 @@ }, "x-appwrite": { "method": "get", - "weight": 242, + "group": "users", + "weight": 241, "cookies": false, "type": "", "deprecated": false, @@ -27573,7 +27835,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 270, + "group": "users", + "weight": 269, "cookies": false, "type": "", "deprecated": false, @@ -27633,7 +27896,8 @@ }, "x-appwrite": { "method": "updateEmail", - "weight": 255, + "group": "users", + "weight": 254, "cookies": false, "type": "", "deprecated": false, @@ -27712,7 +27976,8 @@ }, "x-appwrite": { "method": "createJWT", - "weight": 273, + "group": "sessions", + "weight": 272, "cookies": false, "type": "", "deprecated": false, @@ -27793,7 +28058,8 @@ }, "x-appwrite": { "method": "updateLabels", - "weight": 251, + "group": "users", + "weight": 250, "cookies": false, "type": "", "deprecated": false, @@ -27875,7 +28141,8 @@ }, "x-appwrite": { "method": "listLogs", - "weight": 247, + "group": "logs", + "weight": 246, "cookies": false, "type": "", "deprecated": false, @@ -27948,7 +28215,8 @@ }, "x-appwrite": { "method": "listMemberships", - "weight": 246, + "group": "memberships", + "weight": 245, "cookies": false, "type": "", "deprecated": false, @@ -28008,7 +28276,8 @@ }, "x-appwrite": { "method": "updateMfa", - "weight": 260, + "group": "users", + "weight": 259, "cookies": false, "type": "", "deprecated": false, @@ -28080,7 +28349,8 @@ }, "x-appwrite": { "method": "deleteMfaAuthenticator", - "weight": 265, + "group": "mfa", + "weight": 264, "cookies": false, "type": "", "deprecated": false, @@ -28155,7 +28425,8 @@ }, "x-appwrite": { "method": "listMfaFactors", - "weight": 261, + "group": "mfa", + "weight": 260, "cookies": false, "type": "", "deprecated": false, @@ -28215,7 +28486,8 @@ }, "x-appwrite": { "method": "getMfaRecoveryCodes", - "weight": 262, + "group": "mfa", + "weight": 261, "cookies": false, "type": "", "deprecated": false, @@ -28253,7 +28525,7 @@ ] }, "put": { - "summary": "Regenerate MFA recovery codes", + "summary": "Update MFA recovery codes (regenerate)", "operationId": "usersUpdateMfaRecoveryCodes", "tags": [ "users" @@ -28273,7 +28545,8 @@ }, "x-appwrite": { "method": "updateMfaRecoveryCodes", - "weight": 264, + "group": "mfa", + "weight": 263, "cookies": false, "type": "", "deprecated": false, @@ -28331,7 +28604,8 @@ }, "x-appwrite": { "method": "createMfaRecoveryCodes", - "weight": 263, + "group": "mfa", + "weight": 262, "cookies": false, "type": "", "deprecated": false, @@ -28391,7 +28665,8 @@ }, "x-appwrite": { "method": "updateName", - "weight": 253, + "group": "users", + "weight": 252, "cookies": false, "type": "", "deprecated": false, @@ -28470,7 +28745,8 @@ }, "x-appwrite": { "method": "updatePassword", - "weight": 254, + "group": "users", + "weight": 253, "cookies": false, "type": "", "deprecated": false, @@ -28549,7 +28825,8 @@ }, "x-appwrite": { "method": "updatePhone", - "weight": 256, + "group": "users", + "weight": 255, "cookies": false, "type": "", "deprecated": false, @@ -28628,7 +28905,8 @@ }, "x-appwrite": { "method": "getPrefs", - "weight": 243, + "group": "users", + "weight": 242, "cookies": false, "type": "", "deprecated": false, @@ -28686,7 +28964,8 @@ }, "x-appwrite": { "method": "updatePrefs", - "weight": 258, + "group": "users", + "weight": 257, "cookies": false, "type": "", "deprecated": false, @@ -28765,7 +29044,8 @@ }, "x-appwrite": { "method": "listSessions", - "weight": 245, + "group": "sessions", + "weight": 244, "cookies": false, "type": "", "deprecated": false, @@ -28823,7 +29103,8 @@ }, "x-appwrite": { "method": "createSession", - "weight": 266, + "group": "sessions", + "weight": 265, "cookies": false, "type": "", "deprecated": false, @@ -28874,7 +29155,8 @@ }, "x-appwrite": { "method": "deleteSessions", - "weight": 269, + "group": "sessions", + "weight": 268, "cookies": false, "type": "", "deprecated": false, @@ -28927,7 +29209,8 @@ }, "x-appwrite": { "method": "deleteSession", - "weight": 268, + "group": "sessions", + "weight": 267, "cookies": false, "type": "", "deprecated": false, @@ -28997,7 +29280,8 @@ }, "x-appwrite": { "method": "updateStatus", - "weight": 250, + "group": "users", + "weight": 249, "cookies": false, "type": "", "deprecated": false, @@ -29076,7 +29360,8 @@ }, "x-appwrite": { "method": "listTargets", - "weight": 248, + "group": "targets", + "weight": 247, "cookies": false, "type": "", "deprecated": false, @@ -29148,7 +29433,8 @@ }, "x-appwrite": { "method": "createTarget", - "weight": 240, + "group": "targets", + "weight": 239, "cookies": false, "type": "", "deprecated": false, @@ -29257,7 +29543,8 @@ }, "x-appwrite": { "method": "getTarget", - "weight": 244, + "group": "targets", + "weight": 243, "cookies": false, "type": "", "deprecated": false, @@ -29326,7 +29613,8 @@ }, "x-appwrite": { "method": "updateTarget", - "weight": 259, + "group": "targets", + "weight": 258, "cookies": false, "type": "", "deprecated": false, @@ -29414,7 +29702,8 @@ }, "x-appwrite": { "method": "deleteTarget", - "weight": 271, + "group": "targets", + "weight": 270, "cookies": false, "type": "", "deprecated": false, @@ -29485,7 +29774,8 @@ }, "x-appwrite": { "method": "createToken", - "weight": 267, + "group": "sessions", + "weight": 266, "cookies": false, "type": "", "deprecated": false, @@ -29566,7 +29856,8 @@ }, "x-appwrite": { "method": "updateEmailVerification", - "weight": 257, + "group": "users", + "weight": 256, "cookies": false, "type": "", "deprecated": false, @@ -29645,7 +29936,8 @@ }, "x-appwrite": { "method": "updatePhoneVerification", - "weight": 252, + "group": "users", + "weight": 251, "cookies": false, "type": "", "deprecated": false, @@ -29724,7 +30016,8 @@ }, "x-appwrite": { "method": "listRepositories", - "weight": 279, + "group": "repositories", + "weight": 278, "cookies": false, "type": "", "deprecated": false, @@ -29792,7 +30085,8 @@ }, "x-appwrite": { "method": "createRepository", - "weight": 280, + "group": "repositories", + "weight": 279, "cookies": false, "type": "", "deprecated": false, @@ -29876,7 +30170,8 @@ }, "x-appwrite": { "method": "getRepository", - "weight": 281, + "group": "repositories", + "weight": 280, "cookies": false, "type": "", "deprecated": false, @@ -29945,7 +30240,8 @@ }, "x-appwrite": { "method": "listRepositoryBranches", - "weight": 282, + "group": "repositories", + "weight": 281, "cookies": false, "type": "", "deprecated": false, @@ -30014,7 +30310,8 @@ }, "x-appwrite": { "method": "getRepositoryContents", - "weight": 277, + "group": "repositories", + "weight": 276, "cookies": false, "type": "", "deprecated": false, @@ -30074,7 +30371,7 @@ }, "\/vcs\/github\/installations\/{installationId}\/providerRepositories\/{providerRepositoryId}\/detection": { "post": { - "summary": "Detect runtime settings from source code", + "summary": "Create runtime settings detection", "operationId": "vcsCreateRepositoryDetection", "tags": [ "vcs" @@ -30094,7 +30391,8 @@ }, "x-appwrite": { "method": "createRepositoryDetection", - "weight": 278, + "group": "repositories", + "weight": 277, "cookies": false, "type": "", "deprecated": false, @@ -30159,7 +30457,7 @@ }, "\/vcs\/github\/installations\/{installationId}\/repositories\/{repositoryId}": { "patch": { - "summary": "Authorize external deployment", + "summary": "Update external deployment (authorize)", "operationId": "vcsUpdateExternalDeployments", "tags": [ "vcs" @@ -30172,7 +30470,8 @@ }, "x-appwrite": { "method": "updateExternalDeployments", - "weight": 287, + "group": "repositories", + "weight": 286, "cookies": false, "type": "", "deprecated": false, @@ -30260,7 +30559,8 @@ }, "x-appwrite": { "method": "listInstallations", - "weight": 284, + "group": "installations", + "weight": 283, "cookies": false, "type": "", "deprecated": false, @@ -30333,7 +30633,8 @@ }, "x-appwrite": { "method": "getInstallation", - "weight": 285, + "group": "installations", + "weight": 284, "cookies": false, "type": "", "deprecated": false, @@ -30383,7 +30684,8 @@ }, "x-appwrite": { "method": "deleteInstallation", - "weight": 286, + "group": "installations", + "weight": 285, "cookies": false, "type": "", "deprecated": false, diff --git a/app/config/specs/open-api3-1.6.x-server.json b/app/config/specs/open-api3-1.6.x-server.json index 3d32d3e978..e3eeb7b42f 100644 --- a/app/config/specs/open-api3-1.6.x-server.json +++ b/app/config/specs/open-api3-1.6.x-server.json @@ -1,7 +1,7 @@ { "openapi": "3.0.0", "info": { - "version": "1.6.1", + "version": "1.6.2", "title": "Appwrite", "description": "Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)", "termsOfService": "https:\/\/appwrite.io\/policy\/terms", @@ -43,6 +43,7 @@ }, "x-appwrite": { "method": "get", + "group": "account", "weight": 9, "cookies": false, "type": "", @@ -92,6 +93,7 @@ }, "x-appwrite": { "method": "create", + "group": "account", "weight": 8, "cookies": false, "type": "", @@ -176,6 +178,7 @@ }, "x-appwrite": { "method": "updateEmail", + "group": "account", "weight": 34, "cookies": false, "type": "", @@ -252,6 +255,7 @@ }, "x-appwrite": { "method": "listIdentities", + "group": "identities", "weight": 57, "cookies": false, "type": "", @@ -311,6 +315,7 @@ }, "x-appwrite": { "method": "deleteIdentity", + "group": "identities", "weight": 58, "cookies": false, "type": "", @@ -374,6 +379,7 @@ }, "x-appwrite": { "method": "createJWT", + "group": "tokens", "weight": 29, "cookies": false, "type": "", @@ -422,6 +428,7 @@ }, "x-appwrite": { "method": "listLogs", + "group": "logs", "weight": 31, "cookies": false, "type": "", @@ -488,6 +495,7 @@ }, "x-appwrite": { "method": "updateMFA", + "group": "mfa", "weight": 44, "cookies": false, "type": "", @@ -558,6 +566,7 @@ }, "x-appwrite": { "method": "createMfaAuthenticator", + "group": "mfa", "weight": 46, "cookies": false, "type": "", @@ -604,7 +613,7 @@ ] }, "put": { - "summary": "Verify authenticator", + "summary": "Update authenticator (confirmation)", "operationId": "accountUpdateMfaAuthenticator", "tags": [ "account" @@ -624,6 +633,7 @@ }, "x-appwrite": { "method": "updateMfaAuthenticator", + "group": "mfa", "weight": 47, "cookies": false, "type": "", @@ -702,6 +712,7 @@ }, "x-appwrite": { "method": "deleteMfaAuthenticator", + "group": "mfa", "weight": 51, "cookies": false, "type": "", @@ -770,6 +781,7 @@ }, "x-appwrite": { "method": "createMfaChallenge", + "group": "mfa", "weight": 52, "cookies": false, "type": "", @@ -823,7 +835,7 @@ } }, "put": { - "summary": "Create MFA challenge (confirmation)", + "summary": "Update MFA challenge (confirmation)", "operationId": "accountUpdateMfaChallenge", "tags": [ "account" @@ -843,6 +855,7 @@ }, "x-appwrite": { "method": "updateMfaChallenge", + "group": "mfa", "weight": 53, "cookies": false, "type": "", @@ -919,6 +932,7 @@ }, "x-appwrite": { "method": "listMfaFactors", + "group": "mfa", "weight": 45, "cookies": false, "type": "", @@ -950,7 +964,7 @@ }, "\/account\/mfa\/recovery-codes": { "get": { - "summary": "Get MFA recovery codes", + "summary": "List MFA recovery codes", "operationId": "accountGetMfaRecoveryCodes", "tags": [ "account" @@ -970,6 +984,7 @@ }, "x-appwrite": { "method": "getMfaRecoveryCodes", + "group": "mfa", "weight": 50, "cookies": false, "type": "", @@ -1019,6 +1034,7 @@ }, "x-appwrite": { "method": "createMfaRecoveryCodes", + "group": "mfa", "weight": 48, "cookies": false, "type": "", @@ -1048,7 +1064,7 @@ ] }, "patch": { - "summary": "Regenerate MFA recovery codes", + "summary": "Update MFA recovery codes (regenerate)", "operationId": "accountUpdateMfaRecoveryCodes", "tags": [ "account" @@ -1068,6 +1084,7 @@ }, "x-appwrite": { "method": "updateMfaRecoveryCodes", + "group": "mfa", "weight": 49, "cookies": false, "type": "", @@ -1119,6 +1136,7 @@ }, "x-appwrite": { "method": "updateName", + "group": "account", "weight": 32, "cookies": false, "type": "", @@ -1189,6 +1207,7 @@ }, "x-appwrite": { "method": "updatePassword", + "group": "account", "weight": 33, "cookies": false, "type": "", @@ -1264,6 +1283,7 @@ }, "x-appwrite": { "method": "updatePhone", + "group": "account", "weight": 35, "cookies": false, "type": "", @@ -1340,6 +1360,7 @@ }, "x-appwrite": { "method": "getPrefs", + "group": "account", "weight": 30, "cookies": false, "type": "", @@ -1389,6 +1410,7 @@ }, "x-appwrite": { "method": "updatePrefs", + "group": "account", "weight": 36, "cookies": false, "type": "", @@ -1459,6 +1481,7 @@ }, "x-appwrite": { "method": "createRecovery", + "group": "recovery", "weight": 38, "cookies": false, "type": "", @@ -1516,7 +1539,7 @@ } }, "put": { - "summary": "Create password recovery (confirmation)", + "summary": "Update password recovery (confirmation)", "operationId": "accountUpdateRecovery", "tags": [ "account" @@ -1536,6 +1559,7 @@ }, "x-appwrite": { "method": "updateRecovery", + "group": "recovery", "weight": 39, "cookies": false, "type": "", @@ -1618,6 +1642,7 @@ }, "x-appwrite": { "method": "listSessions", + "group": "sessions", "weight": 11, "cookies": false, "type": "", @@ -1660,6 +1685,7 @@ }, "x-appwrite": { "method": "deleteSessions", + "group": "sessions", "weight": 12, "cookies": false, "type": "", @@ -1711,6 +1737,7 @@ }, "x-appwrite": { "method": "createAnonymousSession", + "group": "sessions", "weight": 17, "cookies": false, "type": "", @@ -1759,6 +1786,7 @@ }, "x-appwrite": { "method": "createEmailPasswordSession", + "group": "sessions", "weight": 16, "cookies": false, "type": "", @@ -1832,6 +1860,7 @@ }, "x-appwrite": { "method": "updateMagicURLSession", + "group": "sessions", "weight": 26, "cookies": false, "type": "", @@ -1905,6 +1934,7 @@ }, "x-appwrite": { "method": "updatePhoneSession", + "group": "sessions", "weight": 27, "cookies": false, "type": "", @@ -1978,6 +2008,7 @@ }, "x-appwrite": { "method": "createSession", + "group": "sessions", "weight": 18, "cookies": false, "type": "", @@ -2051,6 +2082,7 @@ }, "x-appwrite": { "method": "getSession", + "group": "sessions", "weight": 13, "cookies": false, "type": "", @@ -2112,6 +2144,7 @@ }, "x-appwrite": { "method": "updateSession", + "group": "sessions", "weight": 15, "cookies": false, "type": "", @@ -2166,6 +2199,7 @@ }, "x-appwrite": { "method": "deleteSession", + "group": "sessions", "weight": 14, "cookies": false, "type": "", @@ -2229,6 +2263,7 @@ }, "x-appwrite": { "method": "updateStatus", + "group": "account", "weight": 37, "cookies": false, "type": "", @@ -2280,6 +2315,7 @@ }, "x-appwrite": { "method": "createEmailToken", + "group": "tokens", "weight": 25, "cookies": false, "type": "", @@ -2358,6 +2394,7 @@ }, "x-appwrite": { "method": "createMagicURLToken", + "group": "tokens", "weight": 24, "cookies": false, "type": "", @@ -2437,6 +2474,7 @@ }, "x-appwrite": { "method": "createOAuth2Token", + "group": "tokens", "weight": 23, "cookies": false, "type": "webAuth", @@ -2464,7 +2502,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", "required": true, "schema": { "type": "string", @@ -2484,6 +2522,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -2577,6 +2616,7 @@ }, "x-appwrite": { "method": "createPhoneToken", + "group": "tokens", "weight": 28, "cookies": false, "type": "", @@ -2653,6 +2693,7 @@ }, "x-appwrite": { "method": "createVerification", + "group": "verification", "weight": 40, "cookies": false, "type": "", @@ -2701,7 +2742,7 @@ } }, "put": { - "summary": "Create email verification (confirmation)", + "summary": "Update email verification (confirmation)", "operationId": "accountUpdateVerification", "tags": [ "account" @@ -2721,6 +2762,7 @@ }, "x-appwrite": { "method": "updateVerification", + "group": "verification", "weight": 41, "cookies": false, "type": "", @@ -2797,6 +2839,7 @@ }, "x-appwrite": { "method": "createPhoneVerification", + "group": "verification", "weight": 42, "cookies": false, "type": "", @@ -2849,6 +2892,7 @@ }, "x-appwrite": { "method": "updatePhoneVerification", + "group": "verification", "weight": 43, "cookies": false, "type": "", @@ -2918,6 +2962,7 @@ }, "x-appwrite": { "method": "getBrowser", + "group": null, "weight": 60, "cookies": false, "type": "location", @@ -3045,6 +3090,7 @@ }, "x-appwrite": { "method": "getCreditCard", + "group": null, "weight": 59, "cookies": false, "type": "location", @@ -3178,6 +3224,7 @@ }, "x-appwrite": { "method": "getFavicon", + "group": null, "weight": 63, "cookies": false, "type": "location", @@ -3237,6 +3284,7 @@ }, "x-appwrite": { "method": "getFlag", + "group": null, "weight": 61, "cookies": false, "type": "location", @@ -3726,6 +3774,7 @@ }, "x-appwrite": { "method": "getImage", + "group": null, "weight": 62, "cookies": false, "type": "location", @@ -3809,6 +3858,7 @@ }, "x-appwrite": { "method": "getInitials", + "group": null, "weight": 65, "cookies": false, "type": "location", @@ -3902,6 +3952,7 @@ }, "x-appwrite": { "method": "getQR", + "group": null, "weight": 64, "cookies": false, "type": "location", @@ -4002,6 +4053,7 @@ }, "x-appwrite": { "method": "list", + "group": "databases", "weight": 70, "cookies": false, "type": "", @@ -4075,6 +4127,7 @@ }, "x-appwrite": { "method": "create", + "group": "databases", "weight": 69, "cookies": false, "type": "", @@ -4154,6 +4207,7 @@ }, "x-appwrite": { "method": "get", + "group": "databases", "weight": 71, "cookies": false, "type": "", @@ -4213,6 +4267,7 @@ }, "x-appwrite": { "method": "update", + "group": "databases", "weight": 73, "cookies": false, "type": "", @@ -4289,6 +4344,7 @@ }, "x-appwrite": { "method": "delete", + "group": "databases", "weight": 74, "cookies": false, "type": "", @@ -4350,6 +4406,7 @@ }, "x-appwrite": { "method": "listCollections", + "group": "collections", "weight": 76, "cookies": false, "type": "", @@ -4433,6 +4490,7 @@ }, "x-appwrite": { "method": "createCollection", + "group": "collections", "weight": 75, "cookies": false, "type": "", @@ -4537,6 +4595,7 @@ }, "x-appwrite": { "method": "getCollection", + "group": "collections", "weight": 77, "cookies": false, "type": "", @@ -4606,6 +4665,7 @@ }, "x-appwrite": { "method": "updateCollection", + "group": "collections", "weight": 79, "cookies": false, "type": "", @@ -4705,6 +4765,7 @@ }, "x-appwrite": { "method": "deleteCollection", + "group": "collections", "weight": 80, "cookies": false, "type": "", @@ -4776,6 +4837,7 @@ }, "x-appwrite": { "method": "listAttributes", + "group": "attributes", "weight": 91, "cookies": false, "type": "", @@ -4860,6 +4922,7 @@ }, "x-appwrite": { "method": "createBooleanAttribute", + "group": "attributes", "weight": 88, "cookies": false, "type": "", @@ -4966,6 +5029,7 @@ }, "x-appwrite": { "method": "updateBooleanAttribute", + "group": "attributes", "weight": 100, "cookies": false, "type": "", @@ -5077,6 +5141,7 @@ }, "x-appwrite": { "method": "createDatetimeAttribute", + "group": "attributes", "weight": 89, "cookies": false, "type": "", @@ -5183,6 +5248,7 @@ }, "x-appwrite": { "method": "updateDatetimeAttribute", + "group": "attributes", "weight": 101, "cookies": false, "type": "", @@ -5294,6 +5360,7 @@ }, "x-appwrite": { "method": "createEmailAttribute", + "group": "attributes", "weight": 82, "cookies": false, "type": "", @@ -5400,6 +5467,7 @@ }, "x-appwrite": { "method": "updateEmailAttribute", + "group": "attributes", "weight": 94, "cookies": false, "type": "", @@ -5511,6 +5579,7 @@ }, "x-appwrite": { "method": "createEnumAttribute", + "group": "attributes", "weight": 83, "cookies": false, "type": "", @@ -5626,6 +5695,7 @@ }, "x-appwrite": { "method": "updateEnumAttribute", + "group": "attributes", "weight": 95, "cookies": false, "type": "", @@ -5746,6 +5816,7 @@ }, "x-appwrite": { "method": "createFloatAttribute", + "group": "attributes", "weight": 87, "cookies": false, "type": "", @@ -5862,6 +5933,7 @@ }, "x-appwrite": { "method": "updateFloatAttribute", + "group": "attributes", "weight": 99, "cookies": false, "type": "", @@ -5983,6 +6055,7 @@ }, "x-appwrite": { "method": "createIntegerAttribute", + "group": "attributes", "weight": 86, "cookies": false, "type": "", @@ -6099,6 +6172,7 @@ }, "x-appwrite": { "method": "updateIntegerAttribute", + "group": "attributes", "weight": 98, "cookies": false, "type": "", @@ -6220,6 +6294,7 @@ }, "x-appwrite": { "method": "createIpAttribute", + "group": "attributes", "weight": 84, "cookies": false, "type": "", @@ -6326,6 +6401,7 @@ }, "x-appwrite": { "method": "updateIpAttribute", + "group": "attributes", "weight": 96, "cookies": false, "type": "", @@ -6437,6 +6513,7 @@ }, "x-appwrite": { "method": "createRelationshipAttribute", + "group": "attributes", "weight": 90, "cookies": false, "type": "", @@ -6568,6 +6645,7 @@ }, "x-appwrite": { "method": "createStringAttribute", + "group": "attributes", "weight": 81, "cookies": false, "type": "", @@ -6685,6 +6763,7 @@ }, "x-appwrite": { "method": "updateStringAttribute", + "group": "attributes", "weight": 93, "cookies": false, "type": "", @@ -6801,6 +6880,7 @@ }, "x-appwrite": { "method": "createUrlAttribute", + "group": "attributes", "weight": 85, "cookies": false, "type": "", @@ -6907,6 +6987,7 @@ }, "x-appwrite": { "method": "updateUrlAttribute", + "group": "attributes", "weight": 97, "cookies": false, "type": "", @@ -7049,6 +7130,7 @@ }, "x-appwrite": { "method": "getAttribute", + "group": "attributes", "weight": 92, "cookies": false, "type": "", @@ -7120,6 +7202,7 @@ }, "x-appwrite": { "method": "deleteAttribute", + "group": "attributes", "weight": 103, "cookies": false, "type": "", @@ -7200,6 +7283,7 @@ }, "x-appwrite": { "method": "updateRelationshipAttribute", + "group": "attributes", "weight": 102, "cookies": false, "type": "", @@ -7308,6 +7392,7 @@ }, "x-appwrite": { "method": "listDocuments", + "group": "documents", "weight": 109, "cookies": false, "type": "", @@ -7394,6 +7479,7 @@ }, "x-appwrite": { "method": "createDocument", + "group": "documents", "weight": 108, "cookies": false, "type": "", @@ -7502,6 +7588,7 @@ }, "x-appwrite": { "method": "getDocument", + "group": "documents", "weight": 110, "cookies": false, "type": "", @@ -7598,6 +7685,7 @@ }, "x-appwrite": { "method": "updateDocument", + "group": "documents", "weight": 112, "cookies": false, "type": "", @@ -7698,6 +7786,7 @@ }, "x-appwrite": { "method": "deleteDocument", + "group": "documents", "weight": 113, "cookies": false, "type": "", @@ -7783,6 +7872,7 @@ }, "x-appwrite": { "method": "listIndexes", + "group": "indexes", "weight": 105, "cookies": false, "type": "", @@ -7865,6 +7955,7 @@ }, "x-appwrite": { "method": "createIndex", + "group": "collections", "weight": 104, "cookies": false, "type": "", @@ -7985,6 +8076,7 @@ }, "x-appwrite": { "method": "getIndex", + "group": "indexes", "weight": 106, "cookies": false, "type": "", @@ -8056,6 +8148,7 @@ }, "x-appwrite": { "method": "deleteIndex", + "group": "indexes", "weight": 107, "cookies": false, "type": "", @@ -8136,7 +8229,8 @@ }, "x-appwrite": { "method": "list", - "weight": 289, + "group": "functions", + "weight": 288, "cookies": false, "type": "", "deprecated": false, @@ -8209,7 +8303,8 @@ }, "x-appwrite": { "method": "create", - "weight": 288, + "group": "functions", + "weight": 287, "cookies": false, "type": "", "deprecated": false, @@ -8456,7 +8551,8 @@ }, "x-appwrite": { "method": "listRuntimes", - "weight": 290, + "group": "runtimes", + "weight": 289, "cookies": false, "type": "", "deprecated": false, @@ -8505,7 +8601,8 @@ }, "x-appwrite": { "method": "listSpecifications", - "weight": 291, + "group": "runtimes", + "weight": 290, "cookies": false, "type": "", "deprecated": false, @@ -8555,7 +8652,8 @@ }, "x-appwrite": { "method": "get", - "weight": 292, + "group": "functions", + "weight": 291, "cookies": false, "type": "", "deprecated": false, @@ -8614,7 +8712,8 @@ }, "x-appwrite": { "method": "update", - "weight": 295, + "group": "functions", + "weight": 294, "cookies": false, "type": "", "deprecated": false, @@ -8838,7 +8937,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 298, + "group": "functions", + "weight": 297, "cookies": false, "type": "", "deprecated": false, @@ -8899,7 +8999,8 @@ }, "x-appwrite": { "method": "listDeployments", - "weight": 300, + "group": "deployments", + "weight": 299, "cookies": false, "type": "", "deprecated": false, @@ -8982,7 +9083,8 @@ }, "x-appwrite": { "method": "createDeployment", - "weight": 299, + "group": "deployments", + "weight": 298, "cookies": false, "type": "upload", "deprecated": false, @@ -9078,7 +9180,8 @@ }, "x-appwrite": { "method": "getDeployment", - "weight": 301, + "group": "deployments", + "weight": 300, "cookies": false, "type": "", "deprecated": false, @@ -9147,7 +9250,8 @@ }, "x-appwrite": { "method": "updateDeployment", - "weight": 297, + "group": "deployments", + "weight": 296, "cookies": false, "type": "", "deprecated": false, @@ -9209,7 +9313,8 @@ }, "x-appwrite": { "method": "deleteDeployment", - "weight": 302, + "group": "deployments", + "weight": 301, "cookies": false, "type": "", "deprecated": false, @@ -9260,7 +9365,7 @@ }, "\/functions\/{functionId}\/deployments\/{deploymentId}\/build": { "post": { - "summary": "Rebuild deployment", + "summary": "Create deployment build", "operationId": "functionsCreateBuild", "tags": [ "functions" @@ -9273,7 +9378,8 @@ }, "x-appwrite": { "method": "createBuild", - "weight": 303, + "group": "deployments", + "weight": 302, "cookies": false, "type": "", "deprecated": false, @@ -9358,7 +9464,8 @@ }, "x-appwrite": { "method": "updateDeploymentBuild", - "weight": 304, + "group": "deployments", + "weight": 303, "cookies": false, "type": "", "deprecated": false, @@ -9409,7 +9516,7 @@ }, "\/functions\/{functionId}\/deployments\/{deploymentId}\/download": { "get": { - "summary": "Download deployment", + "summary": "Get deployment download", "operationId": "functionsGetDeploymentDownload", "tags": [ "functions" @@ -9422,7 +9529,8 @@ }, "x-appwrite": { "method": "getDeploymentDownload", - "weight": 296, + "group": "deployments", + "weight": 295, "cookies": false, "type": "location", "deprecated": false, @@ -9495,7 +9603,8 @@ }, "x-appwrite": { "method": "listExecutions", - "weight": 306, + "group": "executions", + "weight": 305, "cookies": false, "type": "", "deprecated": false, @@ -9582,7 +9691,8 @@ }, "x-appwrite": { "method": "createExecution", - "weight": 305, + "group": "executions", + "weight": 304, "cookies": false, "type": "", "deprecated": false, @@ -9698,7 +9808,8 @@ }, "x-appwrite": { "method": "getExecution", - "weight": 307, + "group": "executions", + "weight": 306, "cookies": false, "type": "", "deprecated": false, @@ -9764,7 +9875,8 @@ }, "x-appwrite": { "method": "deleteExecution", - "weight": 308, + "group": "executions", + "weight": 307, "cookies": false, "type": "", "deprecated": false, @@ -9835,7 +9947,8 @@ }, "x-appwrite": { "method": "listVariables", - "weight": 310, + "group": "variables", + "weight": 309, "cookies": false, "type": "", "deprecated": false, @@ -9894,7 +10007,8 @@ }, "x-appwrite": { "method": "createVariable", - "weight": 309, + "group": "variables", + "weight": 308, "cookies": false, "type": "", "deprecated": false, @@ -9980,7 +10094,8 @@ }, "x-appwrite": { "method": "getVariable", - "weight": 311, + "group": "variables", + "weight": 310, "cookies": false, "type": "", "deprecated": false, @@ -10049,7 +10164,8 @@ }, "x-appwrite": { "method": "updateVariable", - "weight": 312, + "group": "variables", + "weight": 311, "cookies": false, "type": "", "deprecated": false, @@ -10135,7 +10251,8 @@ }, "x-appwrite": { "method": "deleteVariable", - "weight": 313, + "group": "variables", + "weight": 312, "cookies": false, "type": "", "deprecated": false, @@ -10206,7 +10323,8 @@ }, "x-appwrite": { "method": "query", - "weight": 331, + "group": "graphql", + "weight": 330, "cookies": false, "type": "graphql", "deprecated": false, @@ -10259,7 +10377,8 @@ }, "x-appwrite": { "method": "mutation", - "weight": 330, + "group": "graphql", + "weight": 329, "cookies": false, "type": "graphql", "deprecated": false, @@ -10312,6 +10431,7 @@ }, "x-appwrite": { "method": "get", + "group": "health", "weight": 125, "cookies": false, "type": "", @@ -10361,7 +10481,8 @@ }, "x-appwrite": { "method": "getAntivirus", - "weight": 147, + "group": "health", + "weight": 146, "cookies": false, "type": "", "deprecated": false, @@ -10410,6 +10531,7 @@ }, "x-appwrite": { "method": "getCache", + "group": "health", "weight": 128, "cookies": false, "type": "", @@ -10459,6 +10581,7 @@ }, "x-appwrite": { "method": "getCertificate", + "group": "health", "weight": 133, "cookies": false, "type": "", @@ -10519,6 +10642,7 @@ }, "x-appwrite": { "method": "getDB", + "group": "health", "weight": 127, "cookies": false, "type": "", @@ -10568,6 +10692,7 @@ }, "x-appwrite": { "method": "getPubSub", + "group": "health", "weight": 129, "cookies": false, "type": "", @@ -10617,6 +10742,7 @@ }, "x-appwrite": { "method": "getQueueBuilds", + "group": "queue", "weight": 135, "cookies": false, "type": "", @@ -10679,6 +10805,7 @@ }, "x-appwrite": { "method": "getQueueCertificates", + "group": "queue", "weight": 134, "cookies": false, "type": "", @@ -10741,6 +10868,7 @@ }, "x-appwrite": { "method": "getQueueDatabases", + "group": "queue", "weight": 136, "cookies": false, "type": "", @@ -10814,6 +10942,7 @@ }, "x-appwrite": { "method": "getQueueDeletes", + "group": "queue", "weight": 137, "cookies": false, "type": "", @@ -10876,7 +11005,8 @@ }, "x-appwrite": { "method": "getFailedJobs", - "weight": 148, + "group": "queue", + "weight": 147, "cookies": false, "type": "", "deprecated": false, @@ -10917,7 +11047,6 @@ "v1-functions", "v1-stats-resources", "v1-stats-usage", - "v1-stats-usage-dump", "v1-webhooks", "v1-certificates", "v1-builds", @@ -10965,6 +11094,7 @@ }, "x-appwrite": { "method": "getQueueFunctions", + "group": "queue", "weight": 141, "cookies": false, "type": "", @@ -11027,6 +11157,7 @@ }, "x-appwrite": { "method": "getQueueLogs", + "group": "queue", "weight": 132, "cookies": false, "type": "", @@ -11089,6 +11220,7 @@ }, "x-appwrite": { "method": "getQueueMails", + "group": "queue", "weight": 138, "cookies": false, "type": "", @@ -11151,6 +11283,7 @@ }, "x-appwrite": { "method": "getQueueMessaging", + "group": "queue", "weight": 139, "cookies": false, "type": "", @@ -11213,6 +11346,7 @@ }, "x-appwrite": { "method": "getQueueMigrations", + "group": "queue", "weight": 140, "cookies": false, "type": "", @@ -11275,6 +11409,7 @@ }, "x-appwrite": { "method": "getQueueStatsResources", + "group": "queue", "weight": 142, "cookies": false, "type": "", @@ -11337,6 +11472,7 @@ }, "x-appwrite": { "method": "getQueueUsage", + "group": "queue", "weight": 143, "cookies": false, "type": "", @@ -11377,68 +11513,6 @@ ] } }, - "\/health\/queue\/stats-usage-dump": { - "get": { - "summary": "Get usage dump queue", - "operationId": "healthGetQueueStatsUsageDump", - "tags": [ - "health" - ], - "description": "Get the number of projects containing metrics that are waiting to be processed in the Appwrite internal queue server.", - "responses": { - "200": { - "description": "Health Queue", - "content": { - "application\/json": { - "schema": { - "$ref": "#\/components\/schemas\/healthQueue" - } - } - } - } - }, - "x-appwrite": { - "method": "getQueueStatsUsageDump", - "weight": 144, - "cookies": false, - "type": "", - "deprecated": false, - "demo": "health\/get-queue-stats-usage-dump.md", - "edit": "https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-stats-usage-dump.md", - "rate-limit": 0, - "rate-time": 3600, - "rate-key": "url:{url},ip:{ip}", - "scope": "health.read", - "platforms": [ - "server" - ], - "packaging": false, - "auth": { - "Project": [], - "Key": [] - } - }, - "security": [ - { - "Project": [], - "Key": [] - } - ], - "parameters": [ - { - "name": "threshold", - "description": "Queue size threshold. When hit (equal or higher), endpoint returns server error. Default value is 5000.", - "required": false, - "schema": { - "type": "integer", - "format": "int32", - "default": 5000 - }, - "in": "query" - } - ] - } - }, "\/health\/queue\/webhooks": { "get": { "summary": "Get webhooks queue", @@ -11461,6 +11535,7 @@ }, "x-appwrite": { "method": "getQueueWebhooks", + "group": "queue", "weight": 131, "cookies": false, "type": "", @@ -11523,7 +11598,8 @@ }, "x-appwrite": { "method": "getStorage", - "weight": 146, + "group": "storage", + "weight": 145, "cookies": false, "type": "", "deprecated": false, @@ -11572,7 +11648,8 @@ }, "x-appwrite": { "method": "getStorageLocal", - "weight": 145, + "group": "storage", + "weight": 144, "cookies": false, "type": "", "deprecated": false, @@ -11621,6 +11698,7 @@ }, "x-appwrite": { "method": "getTime", + "group": "health", "weight": 130, "cookies": false, "type": "", @@ -11670,6 +11748,7 @@ }, "x-appwrite": { "method": "get", + "group": null, "weight": 117, "cookies": false, "type": "", @@ -11723,6 +11802,7 @@ }, "x-appwrite": { "method": "listCodes", + "group": null, "weight": 118, "cookies": false, "type": "", @@ -11776,6 +11856,7 @@ }, "x-appwrite": { "method": "listContinents", + "group": null, "weight": 122, "cookies": false, "type": "", @@ -11829,6 +11910,7 @@ }, "x-appwrite": { "method": "listCountries", + "group": null, "weight": 119, "cookies": false, "type": "", @@ -11882,6 +11964,7 @@ }, "x-appwrite": { "method": "listCountriesEU", + "group": null, "weight": 120, "cookies": false, "type": "", @@ -11935,6 +12018,7 @@ }, "x-appwrite": { "method": "listCountriesPhones", + "group": null, "weight": 121, "cookies": false, "type": "", @@ -11988,6 +12072,7 @@ }, "x-appwrite": { "method": "listCurrencies", + "group": null, "weight": 123, "cookies": false, "type": "", @@ -12041,6 +12126,7 @@ }, "x-appwrite": { "method": "listLanguages", + "group": null, "weight": 124, "cookies": false, "type": "", @@ -12094,7 +12180,8 @@ }, "x-appwrite": { "method": "listMessages", - "weight": 384, + "group": "messages", + "weight": 383, "cookies": false, "type": "", "deprecated": false, @@ -12170,7 +12257,8 @@ }, "x-appwrite": { "method": "createEmail", - "weight": 381, + "group": "messages", + "weight": 380, "cookies": false, "type": "", "deprecated": false, @@ -12314,7 +12402,8 @@ }, "x-appwrite": { "method": "updateEmail", - "weight": 388, + "group": "messages", + "weight": 387, "cookies": false, "type": "", "deprecated": false, @@ -12460,7 +12549,8 @@ }, "x-appwrite": { "method": "createPush", - "weight": 383, + "group": "messages", + "weight": 382, "cookies": false, "type": "", "deprecated": false, @@ -12634,7 +12724,8 @@ }, "x-appwrite": { "method": "updatePush", - "weight": 390, + "group": "messages", + "weight": 389, "cookies": false, "type": "", "deprecated": false, @@ -12812,7 +12903,8 @@ }, "x-appwrite": { "method": "createSms", - "weight": 382, + "group": "messages", + "weight": 381, "cookies": false, "type": "", "deprecated": false, @@ -12921,7 +13013,8 @@ }, "x-appwrite": { "method": "updateSms", - "weight": 389, + "group": "messages", + "weight": 388, "cookies": false, "type": "", "deprecated": false, @@ -13033,7 +13126,8 @@ }, "x-appwrite": { "method": "getMessage", - "weight": 387, + "group": "messages", + "weight": 386, "cookies": false, "type": "", "deprecated": false, @@ -13086,7 +13180,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 391, + "group": "messages", + "weight": 390, "cookies": false, "type": "", "deprecated": false, @@ -13148,7 +13243,8 @@ }, "x-appwrite": { "method": "listMessageLogs", - "weight": 385, + "group": "logs", + "weight": 384, "cookies": false, "type": "", "deprecated": false, @@ -13223,7 +13319,8 @@ }, "x-appwrite": { "method": "listTargets", - "weight": 386, + "group": "messages", + "weight": 385, "cookies": false, "type": "", "deprecated": false, @@ -13298,7 +13395,8 @@ }, "x-appwrite": { "method": "listProviders", - "weight": 356, + "group": "providers", + "weight": 355, "cookies": false, "type": "", "deprecated": false, @@ -13374,7 +13472,8 @@ }, "x-appwrite": { "method": "createApnsProvider", - "weight": 355, + "group": "providers", + "weight": 354, "cookies": false, "type": "", "deprecated": false, @@ -13479,7 +13578,8 @@ }, "x-appwrite": { "method": "updateApnsProvider", - "weight": 368, + "group": "providers", + "weight": 367, "cookies": false, "type": "", "deprecated": false, @@ -13587,7 +13687,8 @@ }, "x-appwrite": { "method": "createFcmProvider", - "weight": 354, + "group": "providers", + "weight": 353, "cookies": false, "type": "", "deprecated": false, @@ -13672,7 +13773,8 @@ }, "x-appwrite": { "method": "updateFcmProvider", - "weight": 367, + "group": "providers", + "weight": 366, "cookies": false, "type": "", "deprecated": false, @@ -13760,7 +13862,8 @@ }, "x-appwrite": { "method": "createMailgunProvider", - "weight": 346, + "group": "providers", + "weight": 345, "cookies": false, "type": "", "deprecated": false, @@ -13875,7 +13978,8 @@ }, "x-appwrite": { "method": "updateMailgunProvider", - "weight": 359, + "group": "providers", + "weight": 358, "cookies": false, "type": "", "deprecated": false, @@ -13993,7 +14097,8 @@ }, "x-appwrite": { "method": "createMsg91Provider", - "weight": 349, + "group": "providers", + "weight": 348, "cookies": false, "type": "", "deprecated": false, @@ -14088,7 +14193,8 @@ }, "x-appwrite": { "method": "updateMsg91Provider", - "weight": 362, + "group": "providers", + "weight": 361, "cookies": false, "type": "", "deprecated": false, @@ -14186,7 +14292,8 @@ }, "x-appwrite": { "method": "createSendgridProvider", - "weight": 347, + "group": "providers", + "weight": 346, "cookies": false, "type": "", "deprecated": false, @@ -14291,7 +14398,8 @@ }, "x-appwrite": { "method": "updateSendgridProvider", - "weight": 360, + "group": "providers", + "weight": 359, "cookies": false, "type": "", "deprecated": false, @@ -14399,7 +14507,8 @@ }, "x-appwrite": { "method": "createSmtpProvider", - "weight": 348, + "group": "providers", + "weight": 347, "cookies": false, "type": "", "deprecated": false, @@ -14542,7 +14651,8 @@ }, "x-appwrite": { "method": "updateSmtpProvider", - "weight": 361, + "group": "providers", + "weight": 360, "cookies": false, "type": "", "deprecated": false, @@ -14687,7 +14797,8 @@ }, "x-appwrite": { "method": "createTelesignProvider", - "weight": 350, + "group": "providers", + "weight": 349, "cookies": false, "type": "", "deprecated": false, @@ -14782,7 +14893,8 @@ }, "x-appwrite": { "method": "updateTelesignProvider", - "weight": 363, + "group": "providers", + "weight": 362, "cookies": false, "type": "", "deprecated": false, @@ -14880,7 +14992,8 @@ }, "x-appwrite": { "method": "createTextmagicProvider", - "weight": 351, + "group": "providers", + "weight": 350, "cookies": false, "type": "", "deprecated": false, @@ -14975,7 +15088,8 @@ }, "x-appwrite": { "method": "updateTextmagicProvider", - "weight": 364, + "group": "providers", + "weight": 363, "cookies": false, "type": "", "deprecated": false, @@ -15073,7 +15187,8 @@ }, "x-appwrite": { "method": "createTwilioProvider", - "weight": 352, + "group": "providers", + "weight": 351, "cookies": false, "type": "", "deprecated": false, @@ -15168,7 +15283,8 @@ }, "x-appwrite": { "method": "updateTwilioProvider", - "weight": 365, + "group": "providers", + "weight": 364, "cookies": false, "type": "", "deprecated": false, @@ -15266,7 +15382,8 @@ }, "x-appwrite": { "method": "createVonageProvider", - "weight": 353, + "group": "providers", + "weight": 352, "cookies": false, "type": "", "deprecated": false, @@ -15361,7 +15478,8 @@ }, "x-appwrite": { "method": "updateVonageProvider", - "weight": 366, + "group": "providers", + "weight": 365, "cookies": false, "type": "", "deprecated": false, @@ -15459,7 +15577,8 @@ }, "x-appwrite": { "method": "getProvider", - "weight": 358, + "group": "providers", + "weight": 357, "cookies": false, "type": "", "deprecated": false, @@ -15512,7 +15631,8 @@ }, "x-appwrite": { "method": "deleteProvider", - "weight": 369, + "group": "providers", + "weight": 368, "cookies": false, "type": "", "deprecated": false, @@ -15574,7 +15694,8 @@ }, "x-appwrite": { "method": "listProviderLogs", - "weight": 357, + "group": "providers", + "weight": 356, "cookies": false, "type": "", "deprecated": false, @@ -15649,7 +15770,8 @@ }, "x-appwrite": { "method": "listSubscriberLogs", - "weight": 378, + "group": "subscribers", + "weight": 377, "cookies": false, "type": "", "deprecated": false, @@ -15724,7 +15846,8 @@ }, "x-appwrite": { "method": "listTopics", - "weight": 371, + "group": "topics", + "weight": 370, "cookies": false, "type": "", "deprecated": false, @@ -15798,7 +15921,8 @@ }, "x-appwrite": { "method": "createTopic", - "weight": 370, + "group": "topics", + "weight": 369, "cookies": false, "type": "", "deprecated": false, @@ -15881,7 +16005,8 @@ }, "x-appwrite": { "method": "getTopic", - "weight": 373, + "group": "topics", + "weight": 372, "cookies": false, "type": "", "deprecated": false, @@ -15941,7 +16066,8 @@ }, "x-appwrite": { "method": "updateTopic", - "weight": 374, + "group": "topics", + "weight": 373, "cookies": false, "type": "", "deprecated": false, @@ -16018,7 +16144,8 @@ }, "x-appwrite": { "method": "deleteTopic", - "weight": 375, + "group": "topics", + "weight": 374, "cookies": false, "type": "", "deprecated": false, @@ -16080,7 +16207,8 @@ }, "x-appwrite": { "method": "listTopicLogs", - "weight": 372, + "group": "topics", + "weight": 371, "cookies": false, "type": "", "deprecated": false, @@ -16155,7 +16283,8 @@ }, "x-appwrite": { "method": "listSubscribers", - "weight": 377, + "group": "subscribers", + "weight": 376, "cookies": false, "type": "", "deprecated": false, @@ -16239,7 +16368,8 @@ }, "x-appwrite": { "method": "createSubscriber", - "weight": 376, + "group": "subscribers", + "weight": 375, "cookies": false, "type": "", "deprecated": false, @@ -16330,7 +16460,8 @@ }, "x-appwrite": { "method": "getSubscriber", - "weight": 379, + "group": "subscribers", + "weight": 378, "cookies": false, "type": "", "deprecated": false, @@ -16393,7 +16524,8 @@ }, "x-appwrite": { "method": "deleteSubscriber", - "weight": 380, + "group": "subscribers", + "weight": 379, "cookies": false, "type": "", "deprecated": false, @@ -16469,7 +16601,8 @@ }, "x-appwrite": { "method": "listBuckets", - "weight": 203, + "group": "buckets", + "weight": 202, "cookies": false, "type": "", "deprecated": false, @@ -16542,7 +16675,8 @@ }, "x-appwrite": { "method": "createBucket", - "weight": 202, + "group": "buckets", + "weight": 201, "cookies": false, "type": "", "deprecated": false, @@ -16669,7 +16803,8 @@ }, "x-appwrite": { "method": "getBucket", - "weight": 204, + "group": "buckets", + "weight": 203, "cookies": false, "type": "", "deprecated": false, @@ -16728,7 +16863,8 @@ }, "x-appwrite": { "method": "updateBucket", - "weight": 205, + "group": "buckets", + "weight": 204, "cookies": false, "type": "", "deprecated": false, @@ -16852,7 +16988,8 @@ }, "x-appwrite": { "method": "deleteBucket", - "weight": 206, + "group": "buckets", + "weight": 205, "cookies": false, "type": "", "deprecated": false, @@ -16913,7 +17050,8 @@ }, "x-appwrite": { "method": "listFiles", - "weight": 208, + "group": "files", + "weight": 207, "cookies": false, "type": "", "deprecated": false, @@ -17000,7 +17138,8 @@ }, "x-appwrite": { "method": "createFile", - "weight": 207, + "group": "files", + "weight": 206, "cookies": false, "type": "upload", "deprecated": false, @@ -17099,7 +17238,8 @@ }, "x-appwrite": { "method": "getFile", - "weight": 209, + "group": "files", + "weight": 208, "cookies": false, "type": "", "deprecated": false, @@ -17172,7 +17312,8 @@ }, "x-appwrite": { "method": "updateFile", - "weight": 214, + "group": "files", + "weight": 213, "cookies": false, "type": "", "deprecated": false, @@ -17262,7 +17403,8 @@ }, "x-appwrite": { "method": "deleteFile", - "weight": 215, + "group": "files", + "weight": 214, "cookies": false, "type": "", "deprecated": false, @@ -17330,7 +17472,8 @@ }, "x-appwrite": { "method": "getFileDownload", - "weight": 211, + "group": "files", + "weight": 210, "cookies": false, "type": "location", "deprecated": false, @@ -17398,7 +17541,8 @@ }, "x-appwrite": { "method": "getFilePreview", - "weight": 210, + "group": "files", + "weight": 209, "cookies": false, "type": "location", "deprecated": false, @@ -17616,7 +17760,8 @@ }, "x-appwrite": { "method": "getFileView", - "weight": 212, + "group": "files", + "weight": 211, "cookies": false, "type": "location", "deprecated": false, @@ -17691,7 +17836,8 @@ }, "x-appwrite": { "method": "list", - "weight": 219, + "group": "teams", + "weight": 218, "cookies": false, "type": "", "deprecated": false, @@ -17768,7 +17914,8 @@ }, "x-appwrite": { "method": "create", - "weight": 218, + "group": "teams", + "weight": 217, "cookies": false, "type": "", "deprecated": false, @@ -17854,7 +18001,8 @@ }, "x-appwrite": { "method": "get", - "weight": 220, + "group": "teams", + "weight": 219, "cookies": false, "type": "", "deprecated": false, @@ -17917,7 +18065,8 @@ }, "x-appwrite": { "method": "updateName", - "weight": 222, + "group": "teams", + "weight": 221, "cookies": false, "type": "", "deprecated": false, @@ -17992,7 +18141,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 224, + "group": "teams", + "weight": 223, "cookies": false, "type": "", "deprecated": false, @@ -18057,7 +18207,8 @@ }, "x-appwrite": { "method": "listMemberships", - "weight": 226, + "group": "memberships", + "weight": 225, "cookies": false, "type": "", "deprecated": false, @@ -18144,7 +18295,8 @@ }, "x-appwrite": { "method": "createMembership", - "weight": 225, + "group": "memberships", + "weight": 224, "cookies": false, "type": "", "deprecated": false, @@ -18256,7 +18408,8 @@ }, "x-appwrite": { "method": "getMembership", - "weight": 227, + "group": "memberships", + "weight": 226, "cookies": false, "type": "", "deprecated": false, @@ -18329,7 +18482,8 @@ }, "x-appwrite": { "method": "updateMembership", - "weight": 228, + "group": "memberships", + "weight": 227, "cookies": false, "type": "", "deprecated": false, @@ -18417,7 +18571,8 @@ }, "x-appwrite": { "method": "deleteMembership", - "weight": 230, + "group": "memberships", + "weight": 229, "cookies": false, "type": "", "deprecated": false, @@ -18492,7 +18647,8 @@ }, "x-appwrite": { "method": "updateMembershipStatus", - "weight": 229, + "group": "memberships", + "weight": 228, "cookies": false, "type": "", "deprecated": false, @@ -18590,7 +18746,8 @@ }, "x-appwrite": { "method": "getPrefs", - "weight": 221, + "group": "teams", + "weight": 220, "cookies": false, "type": "", "deprecated": false, @@ -18651,7 +18808,8 @@ }, "x-appwrite": { "method": "updatePrefs", - "weight": 223, + "group": "teams", + "weight": 222, "cookies": false, "type": "", "deprecated": false, @@ -18733,7 +18891,8 @@ }, "x-appwrite": { "method": "list", - "weight": 241, + "group": "users", + "weight": 240, "cookies": false, "type": "", "deprecated": false, @@ -18806,7 +18965,8 @@ }, "x-appwrite": { "method": "create", - "weight": 232, + "group": "users", + "weight": 231, "cookies": false, "type": "", "deprecated": false, @@ -18894,7 +19054,8 @@ }, "x-appwrite": { "method": "createArgon2User", - "weight": 235, + "group": "users", + "weight": 234, "cookies": false, "type": "", "deprecated": false, @@ -18979,7 +19140,8 @@ }, "x-appwrite": { "method": "createBcryptUser", - "weight": 233, + "group": "users", + "weight": 232, "cookies": false, "type": "", "deprecated": false, @@ -19064,7 +19226,8 @@ }, "x-appwrite": { "method": "listIdentities", - "weight": 249, + "group": "identities", + "weight": 248, "cookies": false, "type": "", "deprecated": false, @@ -19132,7 +19295,8 @@ }, "x-appwrite": { "method": "deleteIdentity", - "weight": 272, + "group": "identities", + "weight": 271, "cookies": false, "type": "", "deprecated": false, @@ -19193,7 +19357,8 @@ }, "x-appwrite": { "method": "createMD5User", - "weight": 234, + "group": "users", + "weight": 233, "cookies": false, "type": "", "deprecated": false, @@ -19278,7 +19443,8 @@ }, "x-appwrite": { "method": "createPHPassUser", - "weight": 237, + "group": "users", + "weight": 236, "cookies": false, "type": "", "deprecated": false, @@ -19363,7 +19529,8 @@ }, "x-appwrite": { "method": "createScryptUser", - "weight": 238, + "group": "users", + "weight": 237, "cookies": false, "type": "", "deprecated": false, @@ -19478,7 +19645,8 @@ }, "x-appwrite": { "method": "createScryptModifiedUser", - "weight": 239, + "group": "users", + "weight": 238, "cookies": false, "type": "", "deprecated": false, @@ -19581,7 +19749,8 @@ }, "x-appwrite": { "method": "createSHAUser", - "weight": 236, + "group": "users", + "weight": 235, "cookies": false, "type": "", "deprecated": false, @@ -19686,7 +19855,8 @@ }, "x-appwrite": { "method": "get", - "weight": 242, + "group": "users", + "weight": 241, "cookies": false, "type": "", "deprecated": false, @@ -19738,7 +19908,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 270, + "group": "users", + "weight": 269, "cookies": false, "type": "", "deprecated": false, @@ -19799,7 +19970,8 @@ }, "x-appwrite": { "method": "updateEmail", - "weight": 255, + "group": "users", + "weight": 254, "cookies": false, "type": "", "deprecated": false, @@ -19879,7 +20051,8 @@ }, "x-appwrite": { "method": "createJWT", - "weight": 273, + "group": "sessions", + "weight": 272, "cookies": false, "type": "", "deprecated": false, @@ -19961,7 +20134,8 @@ }, "x-appwrite": { "method": "updateLabels", - "weight": 251, + "group": "users", + "weight": 250, "cookies": false, "type": "", "deprecated": false, @@ -20044,7 +20218,8 @@ }, "x-appwrite": { "method": "listLogs", - "weight": 247, + "group": "logs", + "weight": 246, "cookies": false, "type": "", "deprecated": false, @@ -20118,7 +20293,8 @@ }, "x-appwrite": { "method": "listMemberships", - "weight": 246, + "group": "memberships", + "weight": 245, "cookies": false, "type": "", "deprecated": false, @@ -20179,7 +20355,8 @@ }, "x-appwrite": { "method": "updateMfa", - "weight": 260, + "group": "users", + "weight": 259, "cookies": false, "type": "", "deprecated": false, @@ -20252,7 +20429,8 @@ }, "x-appwrite": { "method": "deleteMfaAuthenticator", - "weight": 265, + "group": "mfa", + "weight": 264, "cookies": false, "type": "", "deprecated": false, @@ -20328,7 +20506,8 @@ }, "x-appwrite": { "method": "listMfaFactors", - "weight": 261, + "group": "mfa", + "weight": 260, "cookies": false, "type": "", "deprecated": false, @@ -20389,7 +20568,8 @@ }, "x-appwrite": { "method": "getMfaRecoveryCodes", - "weight": 262, + "group": "mfa", + "weight": 261, "cookies": false, "type": "", "deprecated": false, @@ -20428,7 +20608,7 @@ ] }, "put": { - "summary": "Regenerate MFA recovery codes", + "summary": "Update MFA recovery codes (regenerate)", "operationId": "usersUpdateMfaRecoveryCodes", "tags": [ "users" @@ -20448,7 +20628,8 @@ }, "x-appwrite": { "method": "updateMfaRecoveryCodes", - "weight": 264, + "group": "mfa", + "weight": 263, "cookies": false, "type": "", "deprecated": false, @@ -20507,7 +20688,8 @@ }, "x-appwrite": { "method": "createMfaRecoveryCodes", - "weight": 263, + "group": "mfa", + "weight": 262, "cookies": false, "type": "", "deprecated": false, @@ -20568,7 +20750,8 @@ }, "x-appwrite": { "method": "updateName", - "weight": 253, + "group": "users", + "weight": 252, "cookies": false, "type": "", "deprecated": false, @@ -20648,7 +20831,8 @@ }, "x-appwrite": { "method": "updatePassword", - "weight": 254, + "group": "users", + "weight": 253, "cookies": false, "type": "", "deprecated": false, @@ -20728,7 +20912,8 @@ }, "x-appwrite": { "method": "updatePhone", - "weight": 256, + "group": "users", + "weight": 255, "cookies": false, "type": "", "deprecated": false, @@ -20808,7 +20993,8 @@ }, "x-appwrite": { "method": "getPrefs", - "weight": 243, + "group": "users", + "weight": 242, "cookies": false, "type": "", "deprecated": false, @@ -20867,7 +21053,8 @@ }, "x-appwrite": { "method": "updatePrefs", - "weight": 258, + "group": "users", + "weight": 257, "cookies": false, "type": "", "deprecated": false, @@ -20947,7 +21134,8 @@ }, "x-appwrite": { "method": "listSessions", - "weight": 245, + "group": "sessions", + "weight": 244, "cookies": false, "type": "", "deprecated": false, @@ -21006,7 +21194,8 @@ }, "x-appwrite": { "method": "createSession", - "weight": 266, + "group": "sessions", + "weight": 265, "cookies": false, "type": "", "deprecated": false, @@ -21058,7 +21247,8 @@ }, "x-appwrite": { "method": "deleteSessions", - "weight": 269, + "group": "sessions", + "weight": 268, "cookies": false, "type": "", "deprecated": false, @@ -21112,7 +21302,8 @@ }, "x-appwrite": { "method": "deleteSession", - "weight": 268, + "group": "sessions", + "weight": 267, "cookies": false, "type": "", "deprecated": false, @@ -21183,7 +21374,8 @@ }, "x-appwrite": { "method": "updateStatus", - "weight": 250, + "group": "users", + "weight": 249, "cookies": false, "type": "", "deprecated": false, @@ -21263,7 +21455,8 @@ }, "x-appwrite": { "method": "listTargets", - "weight": 248, + "group": "targets", + "weight": 247, "cookies": false, "type": "", "deprecated": false, @@ -21336,7 +21529,8 @@ }, "x-appwrite": { "method": "createTarget", - "weight": 240, + "group": "targets", + "weight": 239, "cookies": false, "type": "", "deprecated": false, @@ -21446,7 +21640,8 @@ }, "x-appwrite": { "method": "getTarget", - "weight": 244, + "group": "targets", + "weight": 243, "cookies": false, "type": "", "deprecated": false, @@ -21516,7 +21711,8 @@ }, "x-appwrite": { "method": "updateTarget", - "weight": 259, + "group": "targets", + "weight": 258, "cookies": false, "type": "", "deprecated": false, @@ -21605,7 +21801,8 @@ }, "x-appwrite": { "method": "deleteTarget", - "weight": 271, + "group": "targets", + "weight": 270, "cookies": false, "type": "", "deprecated": false, @@ -21677,7 +21874,8 @@ }, "x-appwrite": { "method": "createToken", - "weight": 267, + "group": "sessions", + "weight": 266, "cookies": false, "type": "", "deprecated": false, @@ -21759,7 +21957,8 @@ }, "x-appwrite": { "method": "updateEmailVerification", - "weight": 257, + "group": "users", + "weight": 256, "cookies": false, "type": "", "deprecated": false, @@ -21839,7 +22038,8 @@ }, "x-appwrite": { "method": "updatePhoneVerification", - "weight": 252, + "group": "users", + "weight": 251, "cookies": false, "type": "", "deprecated": false, diff --git a/app/config/specs/open-api3-latest-client.json b/app/config/specs/open-api3-latest-client.json index 316fe13116..8f0979c103 100644 --- a/app/config/specs/open-api3-latest-client.json +++ b/app/config/specs/open-api3-latest-client.json @@ -1,7 +1,7 @@ { "openapi": "3.0.0", "info": { - "version": "1.6.1", + "version": "1.6.2", "title": "Appwrite", "description": "Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)", "termsOfService": "https:\/\/appwrite.io\/policy\/terms", @@ -43,6 +43,7 @@ }, "x-appwrite": { "method": "get", + "group": "account", "weight": 9, "cookies": false, "type": "", @@ -91,6 +92,7 @@ }, "x-appwrite": { "method": "create", + "group": "account", "weight": 8, "cookies": false, "type": "", @@ -175,6 +177,7 @@ }, "x-appwrite": { "method": "updateEmail", + "group": "account", "weight": 34, "cookies": false, "type": "", @@ -250,6 +253,7 @@ }, "x-appwrite": { "method": "listIdentities", + "group": "identities", "weight": 57, "cookies": false, "type": "", @@ -308,6 +312,7 @@ }, "x-appwrite": { "method": "deleteIdentity", + "group": "identities", "weight": 58, "cookies": false, "type": "", @@ -370,6 +375,7 @@ }, "x-appwrite": { "method": "createJWT", + "group": "tokens", "weight": 29, "cookies": false, "type": "", @@ -418,6 +424,7 @@ }, "x-appwrite": { "method": "listLogs", + "group": "logs", "weight": 31, "cookies": false, "type": "", @@ -483,6 +490,7 @@ }, "x-appwrite": { "method": "updateMFA", + "group": "mfa", "weight": 44, "cookies": false, "type": "", @@ -552,6 +560,7 @@ }, "x-appwrite": { "method": "createMfaAuthenticator", + "group": "mfa", "weight": 46, "cookies": false, "type": "", @@ -597,7 +606,7 @@ ] }, "put": { - "summary": "Verify authenticator", + "summary": "Update authenticator (confirmation)", "operationId": "accountUpdateMfaAuthenticator", "tags": [ "account" @@ -617,6 +626,7 @@ }, "x-appwrite": { "method": "updateMfaAuthenticator", + "group": "mfa", "weight": 47, "cookies": false, "type": "", @@ -694,6 +704,7 @@ }, "x-appwrite": { "method": "deleteMfaAuthenticator", + "group": "mfa", "weight": 51, "cookies": false, "type": "", @@ -761,6 +772,7 @@ }, "x-appwrite": { "method": "createMfaChallenge", + "group": "mfa", "weight": 52, "cookies": false, "type": "", @@ -814,7 +826,7 @@ } }, "put": { - "summary": "Create MFA challenge (confirmation)", + "summary": "Update MFA challenge (confirmation)", "operationId": "accountUpdateMfaChallenge", "tags": [ "account" @@ -834,6 +846,7 @@ }, "x-appwrite": { "method": "updateMfaChallenge", + "group": "mfa", "weight": 53, "cookies": false, "type": "", @@ -909,6 +922,7 @@ }, "x-appwrite": { "method": "listMfaFactors", + "group": "mfa", "weight": 45, "cookies": false, "type": "", @@ -939,7 +953,7 @@ }, "\/account\/mfa\/recovery-codes": { "get": { - "summary": "Get MFA recovery codes", + "summary": "List MFA recovery codes", "operationId": "accountGetMfaRecoveryCodes", "tags": [ "account" @@ -959,6 +973,7 @@ }, "x-appwrite": { "method": "getMfaRecoveryCodes", + "group": "mfa", "weight": 50, "cookies": false, "type": "", @@ -1007,6 +1022,7 @@ }, "x-appwrite": { "method": "createMfaRecoveryCodes", + "group": "mfa", "weight": 48, "cookies": false, "type": "", @@ -1035,7 +1051,7 @@ ] }, "patch": { - "summary": "Regenerate MFA recovery codes", + "summary": "Update MFA recovery codes (regenerate)", "operationId": "accountUpdateMfaRecoveryCodes", "tags": [ "account" @@ -1055,6 +1071,7 @@ }, "x-appwrite": { "method": "updateMfaRecoveryCodes", + "group": "mfa", "weight": 49, "cookies": false, "type": "", @@ -1105,6 +1122,7 @@ }, "x-appwrite": { "method": "updateName", + "group": "account", "weight": 32, "cookies": false, "type": "", @@ -1174,6 +1192,7 @@ }, "x-appwrite": { "method": "updatePassword", + "group": "account", "weight": 33, "cookies": false, "type": "", @@ -1248,6 +1267,7 @@ }, "x-appwrite": { "method": "updatePhone", + "group": "account", "weight": 35, "cookies": false, "type": "", @@ -1323,6 +1343,7 @@ }, "x-appwrite": { "method": "getPrefs", + "group": "account", "weight": 30, "cookies": false, "type": "", @@ -1371,6 +1392,7 @@ }, "x-appwrite": { "method": "updatePrefs", + "group": "account", "weight": 36, "cookies": false, "type": "", @@ -1440,6 +1462,7 @@ }, "x-appwrite": { "method": "createRecovery", + "group": "recovery", "weight": 38, "cookies": false, "type": "", @@ -1496,7 +1519,7 @@ } }, "put": { - "summary": "Create password recovery (confirmation)", + "summary": "Update password recovery (confirmation)", "operationId": "accountUpdateRecovery", "tags": [ "account" @@ -1516,6 +1539,7 @@ }, "x-appwrite": { "method": "updateRecovery", + "group": "recovery", "weight": 39, "cookies": false, "type": "", @@ -1597,6 +1621,7 @@ }, "x-appwrite": { "method": "listSessions", + "group": "sessions", "weight": 11, "cookies": false, "type": "", @@ -1638,6 +1663,7 @@ }, "x-appwrite": { "method": "deleteSessions", + "group": "sessions", "weight": 12, "cookies": false, "type": "", @@ -1688,6 +1714,7 @@ }, "x-appwrite": { "method": "createAnonymousSession", + "group": "sessions", "weight": 17, "cookies": false, "type": "", @@ -1736,6 +1763,7 @@ }, "x-appwrite": { "method": "createEmailPasswordSession", + "group": "sessions", "weight": 16, "cookies": false, "type": "", @@ -1809,6 +1837,7 @@ }, "x-appwrite": { "method": "updateMagicURLSession", + "group": "sessions", "weight": 26, "cookies": false, "type": "", @@ -1875,6 +1904,7 @@ }, "x-appwrite": { "method": "createOAuth2Session", + "group": "sessions", "weight": 19, "cookies": false, "type": "webAuth", @@ -1902,7 +1932,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", "required": true, "schema": { "type": "string", @@ -1922,6 +1952,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -2015,6 +2046,7 @@ }, "x-appwrite": { "method": "updatePhoneSession", + "group": "sessions", "weight": 27, "cookies": false, "type": "", @@ -2088,6 +2120,7 @@ }, "x-appwrite": { "method": "createSession", + "group": "sessions", "weight": 18, "cookies": false, "type": "", @@ -2161,6 +2194,7 @@ }, "x-appwrite": { "method": "getSession", + "group": "sessions", "weight": 13, "cookies": false, "type": "", @@ -2221,6 +2255,7 @@ }, "x-appwrite": { "method": "updateSession", + "group": "sessions", "weight": 15, "cookies": false, "type": "", @@ -2274,6 +2309,7 @@ }, "x-appwrite": { "method": "deleteSession", + "group": "sessions", "weight": 14, "cookies": false, "type": "", @@ -2336,6 +2372,7 @@ }, "x-appwrite": { "method": "updateStatus", + "group": "account", "weight": 37, "cookies": false, "type": "", @@ -2386,6 +2423,7 @@ }, "x-appwrite": { "method": "createPushTarget", + "group": "pushTargets", "weight": 54, "cookies": false, "type": "", @@ -2464,6 +2502,7 @@ }, "x-appwrite": { "method": "updatePushTarget", + "group": "pushTargets", "weight": 55, "cookies": false, "type": "", @@ -2534,6 +2573,7 @@ }, "x-appwrite": { "method": "deletePushTarget", + "group": "pushTargets", "weight": 56, "cookies": false, "type": "", @@ -2594,6 +2634,7 @@ }, "x-appwrite": { "method": "createEmailToken", + "group": "tokens", "weight": 25, "cookies": false, "type": "", @@ -2672,6 +2713,7 @@ }, "x-appwrite": { "method": "createMagicURLToken", + "group": "tokens", "weight": 24, "cookies": false, "type": "", @@ -2751,6 +2793,7 @@ }, "x-appwrite": { "method": "createOAuth2Token", + "group": "tokens", "weight": 23, "cookies": false, "type": "webAuth", @@ -2778,7 +2821,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", "required": true, "schema": { "type": "string", @@ -2798,6 +2841,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -2891,6 +2935,7 @@ }, "x-appwrite": { "method": "createPhoneToken", + "group": "tokens", "weight": 28, "cookies": false, "type": "", @@ -2967,6 +3012,7 @@ }, "x-appwrite": { "method": "createVerification", + "group": "verification", "weight": 40, "cookies": false, "type": "", @@ -3014,7 +3060,7 @@ } }, "put": { - "summary": "Create email verification (confirmation)", + "summary": "Update email verification (confirmation)", "operationId": "accountUpdateVerification", "tags": [ "account" @@ -3034,6 +3080,7 @@ }, "x-appwrite": { "method": "updateVerification", + "group": "verification", "weight": 41, "cookies": false, "type": "", @@ -3109,6 +3156,7 @@ }, "x-appwrite": { "method": "createPhoneVerification", + "group": "verification", "weight": 42, "cookies": false, "type": "", @@ -3160,6 +3208,7 @@ }, "x-appwrite": { "method": "updatePhoneVerification", + "group": "verification", "weight": 43, "cookies": false, "type": "", @@ -3228,6 +3277,7 @@ }, "x-appwrite": { "method": "getBrowser", + "group": null, "weight": 60, "cookies": false, "type": "location", @@ -3353,6 +3403,7 @@ }, "x-appwrite": { "method": "getCreditCard", + "group": null, "weight": 59, "cookies": false, "type": "location", @@ -3484,6 +3535,7 @@ }, "x-appwrite": { "method": "getFavicon", + "group": null, "weight": 63, "cookies": false, "type": "location", @@ -3541,6 +3593,7 @@ }, "x-appwrite": { "method": "getFlag", + "group": null, "weight": 61, "cookies": false, "type": "location", @@ -4028,6 +4081,7 @@ }, "x-appwrite": { "method": "getImage", + "group": null, "weight": 62, "cookies": false, "type": "location", @@ -4109,6 +4163,7 @@ }, "x-appwrite": { "method": "getInitials", + "group": null, "weight": 65, "cookies": false, "type": "location", @@ -4200,6 +4255,7 @@ }, "x-appwrite": { "method": "getQR", + "group": null, "weight": 64, "cookies": false, "type": "location", @@ -4298,6 +4354,7 @@ }, "x-appwrite": { "method": "listDocuments", + "group": "documents", "weight": 109, "cookies": false, "type": "", @@ -4382,6 +4439,7 @@ }, "x-appwrite": { "method": "createDocument", + "group": "documents", "weight": 108, "cookies": false, "type": "", @@ -4488,6 +4546,7 @@ }, "x-appwrite": { "method": "getDocument", + "group": "documents", "weight": 110, "cookies": false, "type": "", @@ -4582,6 +4641,7 @@ }, "x-appwrite": { "method": "updateDocument", + "group": "documents", "weight": 112, "cookies": false, "type": "", @@ -4680,6 +4740,7 @@ }, "x-appwrite": { "method": "deleteDocument", + "group": "documents", "weight": 113, "cookies": false, "type": "", @@ -4763,7 +4824,8 @@ }, "x-appwrite": { "method": "listExecutions", - "weight": 306, + "group": "executions", + "weight": 305, "cookies": false, "type": "", "deprecated": false, @@ -4848,7 +4910,8 @@ }, "x-appwrite": { "method": "createExecution", - "weight": 305, + "group": "executions", + "weight": 304, "cookies": false, "type": "", "deprecated": false, @@ -4962,7 +5025,8 @@ }, "x-appwrite": { "method": "getExecution", - "weight": 307, + "group": "executions", + "weight": 306, "cookies": false, "type": "", "deprecated": false, @@ -5035,7 +5099,8 @@ }, "x-appwrite": { "method": "query", - "weight": 331, + "group": "graphql", + "weight": 330, "cookies": false, "type": "graphql", "deprecated": false, @@ -5086,7 +5151,8 @@ }, "x-appwrite": { "method": "mutation", - "weight": 330, + "group": "graphql", + "weight": 329, "cookies": false, "type": "graphql", "deprecated": false, @@ -5137,6 +5203,7 @@ }, "x-appwrite": { "method": "get", + "group": null, "weight": 117, "cookies": false, "type": "", @@ -5188,6 +5255,7 @@ }, "x-appwrite": { "method": "listCodes", + "group": null, "weight": 118, "cookies": false, "type": "", @@ -5239,6 +5307,7 @@ }, "x-appwrite": { "method": "listContinents", + "group": null, "weight": 122, "cookies": false, "type": "", @@ -5290,6 +5359,7 @@ }, "x-appwrite": { "method": "listCountries", + "group": null, "weight": 119, "cookies": false, "type": "", @@ -5341,6 +5411,7 @@ }, "x-appwrite": { "method": "listCountriesEU", + "group": null, "weight": 120, "cookies": false, "type": "", @@ -5392,6 +5463,7 @@ }, "x-appwrite": { "method": "listCountriesPhones", + "group": null, "weight": 121, "cookies": false, "type": "", @@ -5443,6 +5515,7 @@ }, "x-appwrite": { "method": "listCurrencies", + "group": null, "weight": 123, "cookies": false, "type": "", @@ -5494,6 +5567,7 @@ }, "x-appwrite": { "method": "listLanguages", + "group": null, "weight": 124, "cookies": false, "type": "", @@ -5545,7 +5619,8 @@ }, "x-appwrite": { "method": "createSubscriber", - "weight": 376, + "group": "subscribers", + "weight": 375, "cookies": false, "type": "", "deprecated": false, @@ -5627,7 +5702,8 @@ }, "x-appwrite": { "method": "deleteSubscriber", - "weight": 380, + "group": "subscribers", + "weight": 379, "cookies": false, "type": "", "deprecated": false, @@ -5701,7 +5777,8 @@ }, "x-appwrite": { "method": "listFiles", - "weight": 208, + "group": "files", + "weight": 207, "cookies": false, "type": "", "deprecated": false, @@ -5786,7 +5863,8 @@ }, "x-appwrite": { "method": "createFile", - "weight": 207, + "group": "files", + "weight": 206, "cookies": false, "type": "upload", "deprecated": false, @@ -5883,7 +5961,8 @@ }, "x-appwrite": { "method": "getFile", - "weight": 209, + "group": "files", + "weight": 208, "cookies": false, "type": "", "deprecated": false, @@ -5954,7 +6033,8 @@ }, "x-appwrite": { "method": "updateFile", - "weight": 214, + "group": "files", + "weight": 213, "cookies": false, "type": "", "deprecated": false, @@ -6042,7 +6122,8 @@ }, "x-appwrite": { "method": "deleteFile", - "weight": 215, + "group": "files", + "weight": 214, "cookies": false, "type": "", "deprecated": false, @@ -6108,7 +6189,8 @@ }, "x-appwrite": { "method": "getFileDownload", - "weight": 211, + "group": "files", + "weight": 210, "cookies": false, "type": "location", "deprecated": false, @@ -6174,7 +6256,8 @@ }, "x-appwrite": { "method": "getFilePreview", - "weight": 210, + "group": "files", + "weight": 209, "cookies": false, "type": "location", "deprecated": false, @@ -6390,7 +6473,8 @@ }, "x-appwrite": { "method": "getFileView", - "weight": 212, + "group": "files", + "weight": 211, "cookies": false, "type": "location", "deprecated": false, @@ -6463,7 +6547,8 @@ }, "x-appwrite": { "method": "list", - "weight": 219, + "group": "teams", + "weight": 218, "cookies": false, "type": "", "deprecated": false, @@ -6538,7 +6623,8 @@ }, "x-appwrite": { "method": "create", - "weight": 218, + "group": "teams", + "weight": 217, "cookies": false, "type": "", "deprecated": false, @@ -6622,7 +6708,8 @@ }, "x-appwrite": { "method": "get", - "weight": 220, + "group": "teams", + "weight": 219, "cookies": false, "type": "", "deprecated": false, @@ -6683,7 +6770,8 @@ }, "x-appwrite": { "method": "updateName", - "weight": 222, + "group": "teams", + "weight": 221, "cookies": false, "type": "", "deprecated": false, @@ -6756,7 +6844,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 224, + "group": "teams", + "weight": 223, "cookies": false, "type": "", "deprecated": false, @@ -6819,7 +6908,8 @@ }, "x-appwrite": { "method": "listMemberships", - "weight": 226, + "group": "memberships", + "weight": 225, "cookies": false, "type": "", "deprecated": false, @@ -6904,7 +6994,8 @@ }, "x-appwrite": { "method": "createMembership", - "weight": 225, + "group": "memberships", + "weight": 224, "cookies": false, "type": "", "deprecated": false, @@ -7014,7 +7105,8 @@ }, "x-appwrite": { "method": "getMembership", - "weight": 227, + "group": "memberships", + "weight": 226, "cookies": false, "type": "", "deprecated": false, @@ -7085,7 +7177,8 @@ }, "x-appwrite": { "method": "updateMembership", - "weight": 228, + "group": "memberships", + "weight": 227, "cookies": false, "type": "", "deprecated": false, @@ -7171,7 +7264,8 @@ }, "x-appwrite": { "method": "deleteMembership", - "weight": 230, + "group": "memberships", + "weight": 229, "cookies": false, "type": "", "deprecated": false, @@ -7244,7 +7338,8 @@ }, "x-appwrite": { "method": "updateMembershipStatus", - "weight": 229, + "group": "memberships", + "weight": 228, "cookies": false, "type": "", "deprecated": false, @@ -7341,7 +7436,8 @@ }, "x-appwrite": { "method": "getPrefs", - "weight": 221, + "group": "teams", + "weight": 220, "cookies": false, "type": "", "deprecated": false, @@ -7401,7 +7497,8 @@ }, "x-appwrite": { "method": "updatePrefs", - "weight": 223, + "group": "teams", + "weight": 222, "cookies": false, "type": "", "deprecated": false, diff --git a/app/config/specs/open-api3-latest-console.json b/app/config/specs/open-api3-latest-console.json index 54161c4262..f2a5986e6e 100644 --- a/app/config/specs/open-api3-latest-console.json +++ b/app/config/specs/open-api3-latest-console.json @@ -1,7 +1,7 @@ { "openapi": "3.0.0", "info": { - "version": "1.6.1", + "version": "1.6.2", "title": "Appwrite", "description": "Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)", "termsOfService": "https:\/\/appwrite.io\/policy\/terms", @@ -43,6 +43,7 @@ }, "x-appwrite": { "method": "get", + "group": "account", "weight": 9, "cookies": false, "type": "", @@ -90,6 +91,7 @@ }, "x-appwrite": { "method": "create", + "group": "account", "weight": 8, "cookies": false, "type": "", @@ -165,6 +167,7 @@ }, "x-appwrite": { "method": "delete", + "group": "account", "weight": 10, "cookies": false, "type": "", @@ -212,6 +215,7 @@ }, "x-appwrite": { "method": "updateEmail", + "group": "account", "weight": 34, "cookies": false, "type": "", @@ -286,6 +290,7 @@ }, "x-appwrite": { "method": "listIdentities", + "group": "identities", "weight": 57, "cookies": false, "type": "", @@ -343,6 +348,7 @@ }, "x-appwrite": { "method": "deleteIdentity", + "group": "identities", "weight": 58, "cookies": false, "type": "", @@ -404,6 +410,7 @@ }, "x-appwrite": { "method": "createJWT", + "group": "tokens", "weight": 29, "cookies": false, "type": "", @@ -452,6 +459,7 @@ }, "x-appwrite": { "method": "listLogs", + "group": "logs", "weight": 31, "cookies": false, "type": "", @@ -516,6 +524,7 @@ }, "x-appwrite": { "method": "updateMFA", + "group": "mfa", "weight": 44, "cookies": false, "type": "", @@ -584,6 +593,7 @@ }, "x-appwrite": { "method": "createMfaAuthenticator", + "group": "mfa", "weight": 46, "cookies": false, "type": "", @@ -628,7 +638,7 @@ ] }, "put": { - "summary": "Verify authenticator", + "summary": "Update authenticator (confirmation)", "operationId": "accountUpdateMfaAuthenticator", "tags": [ "account" @@ -648,6 +658,7 @@ }, "x-appwrite": { "method": "updateMfaAuthenticator", + "group": "mfa", "weight": 47, "cookies": false, "type": "", @@ -724,6 +735,7 @@ }, "x-appwrite": { "method": "deleteMfaAuthenticator", + "group": "mfa", "weight": 51, "cookies": false, "type": "", @@ -790,6 +802,7 @@ }, "x-appwrite": { "method": "createMfaChallenge", + "group": "mfa", "weight": 52, "cookies": false, "type": "", @@ -843,7 +856,7 @@ } }, "put": { - "summary": "Create MFA challenge (confirmation)", + "summary": "Update MFA challenge (confirmation)", "operationId": "accountUpdateMfaChallenge", "tags": [ "account" @@ -863,6 +876,7 @@ }, "x-appwrite": { "method": "updateMfaChallenge", + "group": "mfa", "weight": 53, "cookies": false, "type": "", @@ -937,6 +951,7 @@ }, "x-appwrite": { "method": "listMfaFactors", + "group": "mfa", "weight": 45, "cookies": false, "type": "", @@ -966,7 +981,7 @@ }, "\/account\/mfa\/recovery-codes": { "get": { - "summary": "Get MFA recovery codes", + "summary": "List MFA recovery codes", "operationId": "accountGetMfaRecoveryCodes", "tags": [ "account" @@ -986,6 +1001,7 @@ }, "x-appwrite": { "method": "getMfaRecoveryCodes", + "group": "mfa", "weight": 50, "cookies": false, "type": "", @@ -1033,6 +1049,7 @@ }, "x-appwrite": { "method": "createMfaRecoveryCodes", + "group": "mfa", "weight": 48, "cookies": false, "type": "", @@ -1060,7 +1077,7 @@ ] }, "patch": { - "summary": "Regenerate MFA recovery codes", + "summary": "Update MFA recovery codes (regenerate)", "operationId": "accountUpdateMfaRecoveryCodes", "tags": [ "account" @@ -1080,6 +1097,7 @@ }, "x-appwrite": { "method": "updateMfaRecoveryCodes", + "group": "mfa", "weight": 49, "cookies": false, "type": "", @@ -1129,6 +1147,7 @@ }, "x-appwrite": { "method": "updateName", + "group": "account", "weight": 32, "cookies": false, "type": "", @@ -1197,6 +1216,7 @@ }, "x-appwrite": { "method": "updatePassword", + "group": "account", "weight": 33, "cookies": false, "type": "", @@ -1270,6 +1290,7 @@ }, "x-appwrite": { "method": "updatePhone", + "group": "account", "weight": 35, "cookies": false, "type": "", @@ -1344,6 +1365,7 @@ }, "x-appwrite": { "method": "getPrefs", + "group": "account", "weight": 30, "cookies": false, "type": "", @@ -1391,6 +1413,7 @@ }, "x-appwrite": { "method": "updatePrefs", + "group": "account", "weight": 36, "cookies": false, "type": "", @@ -1459,6 +1482,7 @@ }, "x-appwrite": { "method": "createRecovery", + "group": "recovery", "weight": 38, "cookies": false, "type": "", @@ -1514,7 +1538,7 @@ } }, "put": { - "summary": "Create password recovery (confirmation)", + "summary": "Update password recovery (confirmation)", "operationId": "accountUpdateRecovery", "tags": [ "account" @@ -1534,6 +1558,7 @@ }, "x-appwrite": { "method": "updateRecovery", + "group": "recovery", "weight": 39, "cookies": false, "type": "", @@ -1614,6 +1639,7 @@ }, "x-appwrite": { "method": "listSessions", + "group": "sessions", "weight": 11, "cookies": false, "type": "", @@ -1654,6 +1680,7 @@ }, "x-appwrite": { "method": "deleteSessions", + "group": "sessions", "weight": 12, "cookies": false, "type": "", @@ -1703,6 +1730,7 @@ }, "x-appwrite": { "method": "createAnonymousSession", + "group": "sessions", "weight": 17, "cookies": false, "type": "", @@ -1751,6 +1779,7 @@ }, "x-appwrite": { "method": "createEmailPasswordSession", + "group": "sessions", "weight": 16, "cookies": false, "type": "", @@ -1824,6 +1853,7 @@ }, "x-appwrite": { "method": "updateMagicURLSession", + "group": "sessions", "weight": 26, "cookies": false, "type": "", @@ -1890,6 +1920,7 @@ }, "x-appwrite": { "method": "createOAuth2Session", + "group": "sessions", "weight": 19, "cookies": false, "type": "webAuth", @@ -1917,7 +1948,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", "required": true, "schema": { "type": "string", @@ -1937,6 +1968,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -2030,6 +2062,7 @@ }, "x-appwrite": { "method": "updatePhoneSession", + "group": "sessions", "weight": 27, "cookies": false, "type": "", @@ -2103,6 +2136,7 @@ }, "x-appwrite": { "method": "createSession", + "group": "sessions", "weight": 18, "cookies": false, "type": "", @@ -2176,6 +2210,7 @@ }, "x-appwrite": { "method": "getSession", + "group": "sessions", "weight": 13, "cookies": false, "type": "", @@ -2235,6 +2270,7 @@ }, "x-appwrite": { "method": "updateSession", + "group": "sessions", "weight": 15, "cookies": false, "type": "", @@ -2287,6 +2323,7 @@ }, "x-appwrite": { "method": "deleteSession", + "group": "sessions", "weight": 14, "cookies": false, "type": "", @@ -2348,6 +2385,7 @@ }, "x-appwrite": { "method": "updateStatus", + "group": "account", "weight": 37, "cookies": false, "type": "", @@ -2397,6 +2435,7 @@ }, "x-appwrite": { "method": "createPushTarget", + "group": "pushTargets", "weight": 54, "cookies": false, "type": "", @@ -2474,6 +2513,7 @@ }, "x-appwrite": { "method": "updatePushTarget", + "group": "pushTargets", "weight": 55, "cookies": false, "type": "", @@ -2543,6 +2583,7 @@ }, "x-appwrite": { "method": "deletePushTarget", + "group": "pushTargets", "weight": 56, "cookies": false, "type": "", @@ -2602,6 +2643,7 @@ }, "x-appwrite": { "method": "createEmailToken", + "group": "tokens", "weight": 25, "cookies": false, "type": "", @@ -2680,6 +2722,7 @@ }, "x-appwrite": { "method": "createMagicURLToken", + "group": "tokens", "weight": 24, "cookies": false, "type": "", @@ -2759,6 +2802,7 @@ }, "x-appwrite": { "method": "createOAuth2Token", + "group": "tokens", "weight": 23, "cookies": false, "type": "webAuth", @@ -2786,7 +2830,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", "required": true, "schema": { "type": "string", @@ -2806,6 +2850,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -2899,6 +2944,7 @@ }, "x-appwrite": { "method": "createPhoneToken", + "group": "tokens", "weight": 28, "cookies": false, "type": "", @@ -2975,6 +3021,7 @@ }, "x-appwrite": { "method": "createVerification", + "group": "verification", "weight": 40, "cookies": false, "type": "", @@ -3021,7 +3068,7 @@ } }, "put": { - "summary": "Create email verification (confirmation)", + "summary": "Update email verification (confirmation)", "operationId": "accountUpdateVerification", "tags": [ "account" @@ -3041,6 +3088,7 @@ }, "x-appwrite": { "method": "updateVerification", + "group": "verification", "weight": 41, "cookies": false, "type": "", @@ -3115,6 +3163,7 @@ }, "x-appwrite": { "method": "createPhoneVerification", + "group": "verification", "weight": 42, "cookies": false, "type": "", @@ -3165,6 +3214,7 @@ }, "x-appwrite": { "method": "updatePhoneVerification", + "group": "verification", "weight": 43, "cookies": false, "type": "", @@ -3232,6 +3282,7 @@ }, "x-appwrite": { "method": "getBrowser", + "group": null, "weight": 60, "cookies": false, "type": "location", @@ -3357,6 +3408,7 @@ }, "x-appwrite": { "method": "getCreditCard", + "group": null, "weight": 59, "cookies": false, "type": "location", @@ -3488,6 +3540,7 @@ }, "x-appwrite": { "method": "getFavicon", + "group": null, "weight": 63, "cookies": false, "type": "location", @@ -3545,6 +3598,7 @@ }, "x-appwrite": { "method": "getFlag", + "group": null, "weight": 61, "cookies": false, "type": "location", @@ -4032,6 +4086,7 @@ }, "x-appwrite": { "method": "getImage", + "group": null, "weight": 62, "cookies": false, "type": "location", @@ -4113,6 +4168,7 @@ }, "x-appwrite": { "method": "getInitials", + "group": null, "weight": 65, "cookies": false, "type": "location", @@ -4204,6 +4260,7 @@ }, "x-appwrite": { "method": "getQR", + "group": null, "weight": 64, "cookies": false, "type": "location", @@ -4282,7 +4339,7 @@ }, "\/console\/assistant": { "post": { - "summary": "Ask query", + "summary": "Create assistant query", "operationId": "assistantChat", "tags": [ "assistant" @@ -4295,7 +4352,8 @@ }, "x-appwrite": { "method": "chat", - "weight": 333, + "group": "console", + "weight": 332, "cookies": false, "type": "", "deprecated": false, @@ -4361,7 +4419,8 @@ }, "x-appwrite": { "method": "variables", - "weight": 332, + "group": "console", + "weight": 331, "cookies": false, "type": "", "deprecated": false, @@ -4408,6 +4467,7 @@ }, "x-appwrite": { "method": "list", + "group": "databases", "weight": 70, "cookies": false, "type": "", @@ -4480,6 +4540,7 @@ }, "x-appwrite": { "method": "create", + "group": "databases", "weight": 69, "cookies": false, "type": "", @@ -4558,6 +4619,7 @@ }, "x-appwrite": { "method": "getUsage", + "group": null, "weight": 114, "cookies": false, "type": "", @@ -4629,6 +4691,7 @@ }, "x-appwrite": { "method": "get", + "group": "databases", "weight": 71, "cookies": false, "type": "", @@ -4687,6 +4750,7 @@ }, "x-appwrite": { "method": "update", + "group": "databases", "weight": 73, "cookies": false, "type": "", @@ -4762,6 +4826,7 @@ }, "x-appwrite": { "method": "delete", + "group": "databases", "weight": 74, "cookies": false, "type": "", @@ -4822,6 +4887,7 @@ }, "x-appwrite": { "method": "listCollections", + "group": "collections", "weight": 76, "cookies": false, "type": "", @@ -4904,6 +4970,7 @@ }, "x-appwrite": { "method": "createCollection", + "group": "collections", "weight": 75, "cookies": false, "type": "", @@ -5007,6 +5074,7 @@ }, "x-appwrite": { "method": "getCollection", + "group": "collections", "weight": 77, "cookies": false, "type": "", @@ -5075,6 +5143,7 @@ }, "x-appwrite": { "method": "updateCollection", + "group": "collections", "weight": 79, "cookies": false, "type": "", @@ -5173,6 +5242,7 @@ }, "x-appwrite": { "method": "deleteCollection", + "group": "collections", "weight": 80, "cookies": false, "type": "", @@ -5243,6 +5313,7 @@ }, "x-appwrite": { "method": "listAttributes", + "group": "attributes", "weight": 91, "cookies": false, "type": "", @@ -5326,6 +5397,7 @@ }, "x-appwrite": { "method": "createBooleanAttribute", + "group": "attributes", "weight": 88, "cookies": false, "type": "", @@ -5431,6 +5503,7 @@ }, "x-appwrite": { "method": "updateBooleanAttribute", + "group": "attributes", "weight": 100, "cookies": false, "type": "", @@ -5541,6 +5614,7 @@ }, "x-appwrite": { "method": "createDatetimeAttribute", + "group": "attributes", "weight": 89, "cookies": false, "type": "", @@ -5646,6 +5720,7 @@ }, "x-appwrite": { "method": "updateDatetimeAttribute", + "group": "attributes", "weight": 101, "cookies": false, "type": "", @@ -5756,6 +5831,7 @@ }, "x-appwrite": { "method": "createEmailAttribute", + "group": "attributes", "weight": 82, "cookies": false, "type": "", @@ -5861,6 +5937,7 @@ }, "x-appwrite": { "method": "updateEmailAttribute", + "group": "attributes", "weight": 94, "cookies": false, "type": "", @@ -5971,6 +6048,7 @@ }, "x-appwrite": { "method": "createEnumAttribute", + "group": "attributes", "weight": 83, "cookies": false, "type": "", @@ -6085,6 +6163,7 @@ }, "x-appwrite": { "method": "updateEnumAttribute", + "group": "attributes", "weight": 95, "cookies": false, "type": "", @@ -6204,6 +6283,7 @@ }, "x-appwrite": { "method": "createFloatAttribute", + "group": "attributes", "weight": 87, "cookies": false, "type": "", @@ -6319,6 +6399,7 @@ }, "x-appwrite": { "method": "updateFloatAttribute", + "group": "attributes", "weight": 99, "cookies": false, "type": "", @@ -6439,6 +6520,7 @@ }, "x-appwrite": { "method": "createIntegerAttribute", + "group": "attributes", "weight": 86, "cookies": false, "type": "", @@ -6554,6 +6636,7 @@ }, "x-appwrite": { "method": "updateIntegerAttribute", + "group": "attributes", "weight": 98, "cookies": false, "type": "", @@ -6674,6 +6757,7 @@ }, "x-appwrite": { "method": "createIpAttribute", + "group": "attributes", "weight": 84, "cookies": false, "type": "", @@ -6779,6 +6863,7 @@ }, "x-appwrite": { "method": "updateIpAttribute", + "group": "attributes", "weight": 96, "cookies": false, "type": "", @@ -6889,6 +6974,7 @@ }, "x-appwrite": { "method": "createRelationshipAttribute", + "group": "attributes", "weight": 90, "cookies": false, "type": "", @@ -7019,6 +7105,7 @@ }, "x-appwrite": { "method": "createStringAttribute", + "group": "attributes", "weight": 81, "cookies": false, "type": "", @@ -7135,6 +7222,7 @@ }, "x-appwrite": { "method": "updateStringAttribute", + "group": "attributes", "weight": 93, "cookies": false, "type": "", @@ -7250,6 +7338,7 @@ }, "x-appwrite": { "method": "createUrlAttribute", + "group": "attributes", "weight": 85, "cookies": false, "type": "", @@ -7355,6 +7444,7 @@ }, "x-appwrite": { "method": "updateUrlAttribute", + "group": "attributes", "weight": 97, "cookies": false, "type": "", @@ -7496,6 +7586,7 @@ }, "x-appwrite": { "method": "getAttribute", + "group": "attributes", "weight": 92, "cookies": false, "type": "", @@ -7566,6 +7657,7 @@ }, "x-appwrite": { "method": "deleteAttribute", + "group": "attributes", "weight": 103, "cookies": false, "type": "", @@ -7645,6 +7737,7 @@ }, "x-appwrite": { "method": "updateRelationshipAttribute", + "group": "attributes", "weight": 102, "cookies": false, "type": "", @@ -7752,6 +7845,7 @@ }, "x-appwrite": { "method": "listDocuments", + "group": "documents", "weight": 109, "cookies": false, "type": "", @@ -7836,6 +7930,7 @@ }, "x-appwrite": { "method": "createDocument", + "group": "documents", "weight": 108, "cookies": false, "type": "", @@ -7942,6 +8037,7 @@ }, "x-appwrite": { "method": "getDocument", + "group": "documents", "weight": 110, "cookies": false, "type": "", @@ -8036,6 +8132,7 @@ }, "x-appwrite": { "method": "updateDocument", + "group": "documents", "weight": 112, "cookies": false, "type": "", @@ -8134,6 +8231,7 @@ }, "x-appwrite": { "method": "deleteDocument", + "group": "documents", "weight": 113, "cookies": false, "type": "", @@ -8217,6 +8315,7 @@ }, "x-appwrite": { "method": "listDocumentLogs", + "group": "logs", "weight": 111, "cookies": false, "type": "", @@ -8309,6 +8408,7 @@ }, "x-appwrite": { "method": "listIndexes", + "group": "indexes", "weight": 105, "cookies": false, "type": "", @@ -8390,6 +8490,7 @@ }, "x-appwrite": { "method": "createIndex", + "group": "collections", "weight": 104, "cookies": false, "type": "", @@ -8509,6 +8610,7 @@ }, "x-appwrite": { "method": "getIndex", + "group": "indexes", "weight": 106, "cookies": false, "type": "", @@ -8579,6 +8681,7 @@ }, "x-appwrite": { "method": "deleteIndex", + "group": "indexes", "weight": 107, "cookies": false, "type": "", @@ -8658,6 +8761,7 @@ }, "x-appwrite": { "method": "listCollectionLogs", + "group": "collections", "weight": 78, "cookies": false, "type": "", @@ -8740,6 +8844,7 @@ }, "x-appwrite": { "method": "getCollectionUsage", + "group": null, "weight": 116, "cookies": false, "type": "", @@ -8831,6 +8936,7 @@ }, "x-appwrite": { "method": "listLogs", + "group": "logs", "weight": 72, "cookies": false, "type": "", @@ -8903,6 +9009,7 @@ }, "x-appwrite": { "method": "getDatabaseUsage", + "group": null, "weight": 115, "cookies": false, "type": "", @@ -8984,7 +9091,8 @@ }, "x-appwrite": { "method": "list", - "weight": 289, + "group": "functions", + "weight": 288, "cookies": false, "type": "", "deprecated": false, @@ -9056,7 +9164,8 @@ }, "x-appwrite": { "method": "create", - "weight": 288, + "group": "functions", + "weight": 287, "cookies": false, "type": "", "deprecated": false, @@ -9302,7 +9411,8 @@ }, "x-appwrite": { "method": "listRuntimes", - "weight": 290, + "group": "runtimes", + "weight": 289, "cookies": false, "type": "", "deprecated": false, @@ -9350,7 +9460,8 @@ }, "x-appwrite": { "method": "listSpecifications", - "weight": 291, + "group": "runtimes", + "weight": 290, "cookies": false, "type": "", "deprecated": false, @@ -9399,7 +9510,8 @@ }, "x-appwrite": { "method": "listTemplates", - "weight": 314, + "group": "templates", + "weight": 313, "cookies": false, "type": "", "deprecated": false, @@ -9498,7 +9610,8 @@ }, "x-appwrite": { "method": "getTemplate", - "weight": 315, + "group": "templates", + "weight": 314, "cookies": false, "type": "", "deprecated": false, @@ -9557,7 +9670,8 @@ }, "x-appwrite": { "method": "getUsage", - "weight": 294, + "group": null, + "weight": 293, "cookies": false, "type": "", "deprecated": false, @@ -9628,7 +9742,8 @@ }, "x-appwrite": { "method": "get", - "weight": 292, + "group": "functions", + "weight": 291, "cookies": false, "type": "", "deprecated": false, @@ -9686,7 +9801,8 @@ }, "x-appwrite": { "method": "update", - "weight": 295, + "group": "functions", + "weight": 294, "cookies": false, "type": "", "deprecated": false, @@ -9909,7 +10025,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 298, + "group": "functions", + "weight": 297, "cookies": false, "type": "", "deprecated": false, @@ -9969,7 +10086,8 @@ }, "x-appwrite": { "method": "listDeployments", - "weight": 300, + "group": "deployments", + "weight": 299, "cookies": false, "type": "", "deprecated": false, @@ -10051,7 +10169,8 @@ }, "x-appwrite": { "method": "createDeployment", - "weight": 299, + "group": "deployments", + "weight": 298, "cookies": false, "type": "upload", "deprecated": false, @@ -10146,7 +10265,8 @@ }, "x-appwrite": { "method": "getDeployment", - "weight": 301, + "group": "deployments", + "weight": 300, "cookies": false, "type": "", "deprecated": false, @@ -10214,7 +10334,8 @@ }, "x-appwrite": { "method": "updateDeployment", - "weight": 297, + "group": "deployments", + "weight": 296, "cookies": false, "type": "", "deprecated": false, @@ -10275,7 +10396,8 @@ }, "x-appwrite": { "method": "deleteDeployment", - "weight": 302, + "group": "deployments", + "weight": 301, "cookies": false, "type": "", "deprecated": false, @@ -10325,7 +10447,7 @@ }, "\/functions\/{functionId}\/deployments\/{deploymentId}\/build": { "post": { - "summary": "Rebuild deployment", + "summary": "Create deployment build", "operationId": "functionsCreateBuild", "tags": [ "functions" @@ -10338,7 +10460,8 @@ }, "x-appwrite": { "method": "createBuild", - "weight": 303, + "group": "deployments", + "weight": 302, "cookies": false, "type": "", "deprecated": false, @@ -10422,7 +10545,8 @@ }, "x-appwrite": { "method": "updateDeploymentBuild", - "weight": 304, + "group": "deployments", + "weight": 303, "cookies": false, "type": "", "deprecated": false, @@ -10472,7 +10596,7 @@ }, "\/functions\/{functionId}\/deployments\/{deploymentId}\/download": { "get": { - "summary": "Download deployment", + "summary": "Get deployment download", "operationId": "functionsGetDeploymentDownload", "tags": [ "functions" @@ -10485,7 +10609,8 @@ }, "x-appwrite": { "method": "getDeploymentDownload", - "weight": 296, + "group": "deployments", + "weight": 295, "cookies": false, "type": "location", "deprecated": false, @@ -10557,7 +10682,8 @@ }, "x-appwrite": { "method": "listExecutions", - "weight": 306, + "group": "executions", + "weight": 305, "cookies": false, "type": "", "deprecated": false, @@ -10642,7 +10768,8 @@ }, "x-appwrite": { "method": "createExecution", - "weight": 305, + "group": "executions", + "weight": 304, "cookies": false, "type": "", "deprecated": false, @@ -10756,7 +10883,8 @@ }, "x-appwrite": { "method": "getExecution", - "weight": 307, + "group": "executions", + "weight": 306, "cookies": false, "type": "", "deprecated": false, @@ -10820,7 +10948,8 @@ }, "x-appwrite": { "method": "deleteExecution", - "weight": 308, + "group": "executions", + "weight": 307, "cookies": false, "type": "", "deprecated": false, @@ -10890,7 +11019,8 @@ }, "x-appwrite": { "method": "getFunctionUsage", - "weight": 293, + "group": null, + "weight": 292, "cookies": false, "type": "", "deprecated": false, @@ -10971,7 +11101,8 @@ }, "x-appwrite": { "method": "listVariables", - "weight": 310, + "group": "variables", + "weight": 309, "cookies": false, "type": "", "deprecated": false, @@ -11029,7 +11160,8 @@ }, "x-appwrite": { "method": "createVariable", - "weight": 309, + "group": "variables", + "weight": 308, "cookies": false, "type": "", "deprecated": false, @@ -11114,7 +11246,8 @@ }, "x-appwrite": { "method": "getVariable", - "weight": 311, + "group": "variables", + "weight": 310, "cookies": false, "type": "", "deprecated": false, @@ -11182,7 +11315,8 @@ }, "x-appwrite": { "method": "updateVariable", - "weight": 312, + "group": "variables", + "weight": 311, "cookies": false, "type": "", "deprecated": false, @@ -11267,7 +11401,8 @@ }, "x-appwrite": { "method": "deleteVariable", - "weight": 313, + "group": "variables", + "weight": 312, "cookies": false, "type": "", "deprecated": false, @@ -11337,7 +11472,8 @@ }, "x-appwrite": { "method": "query", - "weight": 331, + "group": "graphql", + "weight": 330, "cookies": false, "type": "graphql", "deprecated": false, @@ -11388,7 +11524,8 @@ }, "x-appwrite": { "method": "mutation", - "weight": 330, + "group": "graphql", + "weight": 329, "cookies": false, "type": "graphql", "deprecated": false, @@ -11439,6 +11576,7 @@ }, "x-appwrite": { "method": "get", + "group": "health", "weight": 125, "cookies": false, "type": "", @@ -11487,7 +11625,8 @@ }, "x-appwrite": { "method": "getAntivirus", - "weight": 147, + "group": "health", + "weight": 146, "cookies": false, "type": "", "deprecated": false, @@ -11535,6 +11674,7 @@ }, "x-appwrite": { "method": "getCache", + "group": "health", "weight": 128, "cookies": false, "type": "", @@ -11583,6 +11723,7 @@ }, "x-appwrite": { "method": "getCertificate", + "group": "health", "weight": 133, "cookies": false, "type": "", @@ -11642,6 +11783,7 @@ }, "x-appwrite": { "method": "getDB", + "group": "health", "weight": 127, "cookies": false, "type": "", @@ -11690,6 +11832,7 @@ }, "x-appwrite": { "method": "getPubSub", + "group": "health", "weight": 129, "cookies": false, "type": "", @@ -11738,6 +11881,7 @@ }, "x-appwrite": { "method": "getQueueBuilds", + "group": "queue", "weight": 135, "cookies": false, "type": "", @@ -11799,6 +11943,7 @@ }, "x-appwrite": { "method": "getQueueCertificates", + "group": "queue", "weight": 134, "cookies": false, "type": "", @@ -11860,6 +12005,7 @@ }, "x-appwrite": { "method": "getQueueDatabases", + "group": "queue", "weight": 136, "cookies": false, "type": "", @@ -11932,6 +12078,7 @@ }, "x-appwrite": { "method": "getQueueDeletes", + "group": "queue", "weight": 137, "cookies": false, "type": "", @@ -11993,7 +12140,8 @@ }, "x-appwrite": { "method": "getFailedJobs", - "weight": 148, + "group": "queue", + "weight": 147, "cookies": false, "type": "", "deprecated": false, @@ -12033,7 +12181,6 @@ "v1-functions", "v1-stats-resources", "v1-stats-usage", - "v1-stats-usage-dump", "v1-webhooks", "v1-certificates", "v1-builds", @@ -12081,6 +12228,7 @@ }, "x-appwrite": { "method": "getQueueFunctions", + "group": "queue", "weight": 141, "cookies": false, "type": "", @@ -12142,6 +12290,7 @@ }, "x-appwrite": { "method": "getQueueLogs", + "group": "queue", "weight": 132, "cookies": false, "type": "", @@ -12203,6 +12352,7 @@ }, "x-appwrite": { "method": "getQueueMails", + "group": "queue", "weight": 138, "cookies": false, "type": "", @@ -12264,6 +12414,7 @@ }, "x-appwrite": { "method": "getQueueMessaging", + "group": "queue", "weight": 139, "cookies": false, "type": "", @@ -12325,6 +12476,7 @@ }, "x-appwrite": { "method": "getQueueMigrations", + "group": "queue", "weight": 140, "cookies": false, "type": "", @@ -12386,6 +12538,7 @@ }, "x-appwrite": { "method": "getQueueStatsResources", + "group": "queue", "weight": 142, "cookies": false, "type": "", @@ -12447,6 +12600,7 @@ }, "x-appwrite": { "method": "getQueueUsage", + "group": "queue", "weight": 143, "cookies": false, "type": "", @@ -12486,67 +12640,6 @@ ] } }, - "\/health\/queue\/stats-usage-dump": { - "get": { - "summary": "Get usage dump queue", - "operationId": "healthGetQueueStatsUsageDump", - "tags": [ - "health" - ], - "description": "Get the number of projects containing metrics that are waiting to be processed in the Appwrite internal queue server.", - "responses": { - "200": { - "description": "Health Queue", - "content": { - "application\/json": { - "schema": { - "$ref": "#\/components\/schemas\/healthQueue" - } - } - } - } - }, - "x-appwrite": { - "method": "getQueueStatsUsageDump", - "weight": 144, - "cookies": false, - "type": "", - "deprecated": false, - "demo": "health\/get-queue-stats-usage-dump.md", - "edit": "https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-stats-usage-dump.md", - "rate-limit": 0, - "rate-time": 3600, - "rate-key": "url:{url},ip:{ip}", - "scope": "health.read", - "platforms": [ - "server" - ], - "packaging": false, - "auth": { - "Project": [] - } - }, - "security": [ - { - "Project": [], - "Key": [] - } - ], - "parameters": [ - { - "name": "threshold", - "description": "Queue size threshold. When hit (equal or higher), endpoint returns server error. Default value is 5000.", - "required": false, - "schema": { - "type": "integer", - "format": "int32", - "default": 5000 - }, - "in": "query" - } - ] - } - }, "\/health\/queue\/webhooks": { "get": { "summary": "Get webhooks queue", @@ -12569,6 +12662,7 @@ }, "x-appwrite": { "method": "getQueueWebhooks", + "group": "queue", "weight": 131, "cookies": false, "type": "", @@ -12630,7 +12724,8 @@ }, "x-appwrite": { "method": "getStorage", - "weight": 146, + "group": "storage", + "weight": 145, "cookies": false, "type": "", "deprecated": false, @@ -12678,7 +12773,8 @@ }, "x-appwrite": { "method": "getStorageLocal", - "weight": 145, + "group": "storage", + "weight": 144, "cookies": false, "type": "", "deprecated": false, @@ -12726,6 +12822,7 @@ }, "x-appwrite": { "method": "getTime", + "group": "health", "weight": 130, "cookies": false, "type": "", @@ -12774,6 +12871,7 @@ }, "x-appwrite": { "method": "get", + "group": null, "weight": 117, "cookies": false, "type": "", @@ -12825,6 +12923,7 @@ }, "x-appwrite": { "method": "listCodes", + "group": null, "weight": 118, "cookies": false, "type": "", @@ -12876,6 +12975,7 @@ }, "x-appwrite": { "method": "listContinents", + "group": null, "weight": 122, "cookies": false, "type": "", @@ -12927,6 +13027,7 @@ }, "x-appwrite": { "method": "listCountries", + "group": null, "weight": 119, "cookies": false, "type": "", @@ -12978,6 +13079,7 @@ }, "x-appwrite": { "method": "listCountriesEU", + "group": null, "weight": 120, "cookies": false, "type": "", @@ -13029,6 +13131,7 @@ }, "x-appwrite": { "method": "listCountriesPhones", + "group": null, "weight": 121, "cookies": false, "type": "", @@ -13080,6 +13183,7 @@ }, "x-appwrite": { "method": "listCurrencies", + "group": null, "weight": 123, "cookies": false, "type": "", @@ -13131,6 +13235,7 @@ }, "x-appwrite": { "method": "listLanguages", + "group": null, "weight": 124, "cookies": false, "type": "", @@ -13182,7 +13287,8 @@ }, "x-appwrite": { "method": "listMessages", - "weight": 384, + "group": "messages", + "weight": 383, "cookies": false, "type": "", "deprecated": false, @@ -13257,7 +13363,8 @@ }, "x-appwrite": { "method": "createEmail", - "weight": 381, + "group": "messages", + "weight": 380, "cookies": false, "type": "", "deprecated": false, @@ -13400,7 +13507,8 @@ }, "x-appwrite": { "method": "updateEmail", - "weight": 388, + "group": "messages", + "weight": 387, "cookies": false, "type": "", "deprecated": false, @@ -13545,7 +13653,8 @@ }, "x-appwrite": { "method": "createPush", - "weight": 383, + "group": "messages", + "weight": 382, "cookies": false, "type": "", "deprecated": false, @@ -13718,7 +13827,8 @@ }, "x-appwrite": { "method": "updatePush", - "weight": 390, + "group": "messages", + "weight": 389, "cookies": false, "type": "", "deprecated": false, @@ -13895,7 +14005,8 @@ }, "x-appwrite": { "method": "createSms", - "weight": 382, + "group": "messages", + "weight": 381, "cookies": false, "type": "", "deprecated": false, @@ -14003,7 +14114,8 @@ }, "x-appwrite": { "method": "updateSms", - "weight": 389, + "group": "messages", + "weight": 388, "cookies": false, "type": "", "deprecated": false, @@ -14114,7 +14226,8 @@ }, "x-appwrite": { "method": "getMessage", - "weight": 387, + "group": "messages", + "weight": 386, "cookies": false, "type": "", "deprecated": false, @@ -14166,7 +14279,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 391, + "group": "messages", + "weight": 390, "cookies": false, "type": "", "deprecated": false, @@ -14227,7 +14341,8 @@ }, "x-appwrite": { "method": "listMessageLogs", - "weight": 385, + "group": "logs", + "weight": 384, "cookies": false, "type": "", "deprecated": false, @@ -14301,7 +14416,8 @@ }, "x-appwrite": { "method": "listTargets", - "weight": 386, + "group": "messages", + "weight": 385, "cookies": false, "type": "", "deprecated": false, @@ -14375,7 +14491,8 @@ }, "x-appwrite": { "method": "listProviders", - "weight": 356, + "group": "providers", + "weight": 355, "cookies": false, "type": "", "deprecated": false, @@ -14450,7 +14567,8 @@ }, "x-appwrite": { "method": "createApnsProvider", - "weight": 355, + "group": "providers", + "weight": 354, "cookies": false, "type": "", "deprecated": false, @@ -14554,7 +14672,8 @@ }, "x-appwrite": { "method": "updateApnsProvider", - "weight": 368, + "group": "providers", + "weight": 367, "cookies": false, "type": "", "deprecated": false, @@ -14661,7 +14780,8 @@ }, "x-appwrite": { "method": "createFcmProvider", - "weight": 354, + "group": "providers", + "weight": 353, "cookies": false, "type": "", "deprecated": false, @@ -14745,7 +14865,8 @@ }, "x-appwrite": { "method": "updateFcmProvider", - "weight": 367, + "group": "providers", + "weight": 366, "cookies": false, "type": "", "deprecated": false, @@ -14832,7 +14953,8 @@ }, "x-appwrite": { "method": "createMailgunProvider", - "weight": 346, + "group": "providers", + "weight": 345, "cookies": false, "type": "", "deprecated": false, @@ -14946,7 +15068,8 @@ }, "x-appwrite": { "method": "updateMailgunProvider", - "weight": 359, + "group": "providers", + "weight": 358, "cookies": false, "type": "", "deprecated": false, @@ -15063,7 +15186,8 @@ }, "x-appwrite": { "method": "createMsg91Provider", - "weight": 349, + "group": "providers", + "weight": 348, "cookies": false, "type": "", "deprecated": false, @@ -15157,7 +15281,8 @@ }, "x-appwrite": { "method": "updateMsg91Provider", - "weight": 362, + "group": "providers", + "weight": 361, "cookies": false, "type": "", "deprecated": false, @@ -15254,7 +15379,8 @@ }, "x-appwrite": { "method": "createSendgridProvider", - "weight": 347, + "group": "providers", + "weight": 346, "cookies": false, "type": "", "deprecated": false, @@ -15358,7 +15484,8 @@ }, "x-appwrite": { "method": "updateSendgridProvider", - "weight": 360, + "group": "providers", + "weight": 359, "cookies": false, "type": "", "deprecated": false, @@ -15465,7 +15592,8 @@ }, "x-appwrite": { "method": "createSmtpProvider", - "weight": 348, + "group": "providers", + "weight": 347, "cookies": false, "type": "", "deprecated": false, @@ -15607,7 +15735,8 @@ }, "x-appwrite": { "method": "updateSmtpProvider", - "weight": 361, + "group": "providers", + "weight": 360, "cookies": false, "type": "", "deprecated": false, @@ -15751,7 +15880,8 @@ }, "x-appwrite": { "method": "createTelesignProvider", - "weight": 350, + "group": "providers", + "weight": 349, "cookies": false, "type": "", "deprecated": false, @@ -15845,7 +15975,8 @@ }, "x-appwrite": { "method": "updateTelesignProvider", - "weight": 363, + "group": "providers", + "weight": 362, "cookies": false, "type": "", "deprecated": false, @@ -15942,7 +16073,8 @@ }, "x-appwrite": { "method": "createTextmagicProvider", - "weight": 351, + "group": "providers", + "weight": 350, "cookies": false, "type": "", "deprecated": false, @@ -16036,7 +16168,8 @@ }, "x-appwrite": { "method": "updateTextmagicProvider", - "weight": 364, + "group": "providers", + "weight": 363, "cookies": false, "type": "", "deprecated": false, @@ -16133,7 +16266,8 @@ }, "x-appwrite": { "method": "createTwilioProvider", - "weight": 352, + "group": "providers", + "weight": 351, "cookies": false, "type": "", "deprecated": false, @@ -16227,7 +16361,8 @@ }, "x-appwrite": { "method": "updateTwilioProvider", - "weight": 365, + "group": "providers", + "weight": 364, "cookies": false, "type": "", "deprecated": false, @@ -16324,7 +16459,8 @@ }, "x-appwrite": { "method": "createVonageProvider", - "weight": 353, + "group": "providers", + "weight": 352, "cookies": false, "type": "", "deprecated": false, @@ -16418,7 +16554,8 @@ }, "x-appwrite": { "method": "updateVonageProvider", - "weight": 366, + "group": "providers", + "weight": 365, "cookies": false, "type": "", "deprecated": false, @@ -16515,7 +16652,8 @@ }, "x-appwrite": { "method": "getProvider", - "weight": 358, + "group": "providers", + "weight": 357, "cookies": false, "type": "", "deprecated": false, @@ -16567,7 +16705,8 @@ }, "x-appwrite": { "method": "deleteProvider", - "weight": 369, + "group": "providers", + "weight": 368, "cookies": false, "type": "", "deprecated": false, @@ -16628,7 +16767,8 @@ }, "x-appwrite": { "method": "listProviderLogs", - "weight": 357, + "group": "providers", + "weight": 356, "cookies": false, "type": "", "deprecated": false, @@ -16702,7 +16842,8 @@ }, "x-appwrite": { "method": "listSubscriberLogs", - "weight": 378, + "group": "subscribers", + "weight": 377, "cookies": false, "type": "", "deprecated": false, @@ -16776,7 +16917,8 @@ }, "x-appwrite": { "method": "listTopics", - "weight": 371, + "group": "topics", + "weight": 370, "cookies": false, "type": "", "deprecated": false, @@ -16849,7 +16991,8 @@ }, "x-appwrite": { "method": "createTopic", - "weight": 370, + "group": "topics", + "weight": 369, "cookies": false, "type": "", "deprecated": false, @@ -16931,7 +17074,8 @@ }, "x-appwrite": { "method": "getTopic", - "weight": 373, + "group": "topics", + "weight": 372, "cookies": false, "type": "", "deprecated": false, @@ -16990,7 +17134,8 @@ }, "x-appwrite": { "method": "updateTopic", - "weight": 374, + "group": "topics", + "weight": 373, "cookies": false, "type": "", "deprecated": false, @@ -17066,7 +17211,8 @@ }, "x-appwrite": { "method": "deleteTopic", - "weight": 375, + "group": "topics", + "weight": 374, "cookies": false, "type": "", "deprecated": false, @@ -17127,7 +17273,8 @@ }, "x-appwrite": { "method": "listTopicLogs", - "weight": 372, + "group": "topics", + "weight": 371, "cookies": false, "type": "", "deprecated": false, @@ -17201,7 +17348,8 @@ }, "x-appwrite": { "method": "listSubscribers", - "weight": 377, + "group": "subscribers", + "weight": 376, "cookies": false, "type": "", "deprecated": false, @@ -17284,7 +17432,8 @@ }, "x-appwrite": { "method": "createSubscriber", - "weight": 376, + "group": "subscribers", + "weight": 375, "cookies": false, "type": "", "deprecated": false, @@ -17373,7 +17522,8 @@ }, "x-appwrite": { "method": "getSubscriber", - "weight": 379, + "group": "subscribers", + "weight": 378, "cookies": false, "type": "", "deprecated": false, @@ -17435,7 +17585,8 @@ }, "x-appwrite": { "method": "deleteSubscriber", - "weight": 380, + "group": "subscribers", + "weight": 379, "cookies": false, "type": "", "deprecated": false, @@ -17509,7 +17660,8 @@ }, "x-appwrite": { "method": "list", - "weight": 338, + "group": null, + "weight": 337, "cookies": false, "type": "", "deprecated": false, @@ -17562,7 +17714,7 @@ }, "\/migrations\/appwrite": { "post": { - "summary": "Migrate Appwrite data", + "summary": "Create Appwrite migration", "operationId": "migrationsCreateAppwriteMigration", "tags": [ "migrations" @@ -17582,7 +17734,8 @@ }, "x-appwrite": { "method": "createAppwriteMigration", - "weight": 334, + "group": null, + "weight": 333, "cookies": false, "type": "", "deprecated": false, @@ -17649,7 +17802,7 @@ }, "\/migrations\/appwrite\/report": { "get": { - "summary": "Generate a report on Appwrite data", + "summary": "Get Appwrite migration report", "operationId": "migrationsGetAppwriteReport", "tags": [ "migrations" @@ -17669,7 +17822,8 @@ }, "x-appwrite": { "method": "getAppwriteReport", - "weight": 340, + "group": null, + "weight": 339, "cookies": false, "type": "", "deprecated": false, @@ -17741,7 +17895,7 @@ }, "\/migrations\/firebase": { "post": { - "summary": "Migrate Firebase data", + "summary": "Create Firebase migration", "operationId": "migrationsCreateFirebaseMigration", "tags": [ "migrations" @@ -17761,7 +17915,8 @@ }, "x-appwrite": { "method": "createFirebaseMigration", - "weight": 335, + "group": null, + "weight": 334, "cookies": false, "type": "", "deprecated": false, @@ -17816,7 +17971,7 @@ }, "\/migrations\/firebase\/report": { "get": { - "summary": "Generate a report on Firebase data", + "summary": "Get Firebase migration report", "operationId": "migrationsGetFirebaseReport", "tags": [ "migrations" @@ -17836,7 +17991,8 @@ }, "x-appwrite": { "method": "getFirebaseReport", - "weight": 341, + "group": null, + "weight": 340, "cookies": false, "type": "", "deprecated": false, @@ -17887,7 +18043,7 @@ }, "\/migrations\/nhost": { "post": { - "summary": "Migrate NHost data", + "summary": "Create NHost migration", "operationId": "migrationsCreateNHostMigration", "tags": [ "migrations" @@ -17907,7 +18063,8 @@ }, "x-appwrite": { "method": "createNHostMigration", - "weight": 337, + "group": null, + "weight": 336, "cookies": false, "type": "", "deprecated": false, @@ -17997,7 +18154,7 @@ }, "\/migrations\/nhost\/report": { "get": { - "summary": "Generate a report on NHost Data", + "summary": "Get NHost migration report", "operationId": "migrationsGetNHostReport", "tags": [ "migrations" @@ -18017,7 +18174,8 @@ }, "x-appwrite": { "method": "getNHostReport", - "weight": 343, + "group": null, + "weight": 342, "cookies": false, "type": "", "deprecated": false, @@ -18129,7 +18287,7 @@ }, "\/migrations\/supabase": { "post": { - "summary": "Migrate Supabase data", + "summary": "Create Supabase migration", "operationId": "migrationsCreateSupabaseMigration", "tags": [ "migrations" @@ -18149,7 +18307,8 @@ }, "x-appwrite": { "method": "createSupabaseMigration", - "weight": 336, + "group": null, + "weight": 335, "cookies": false, "type": "", "deprecated": false, @@ -18233,7 +18392,7 @@ }, "\/migrations\/supabase\/report": { "get": { - "summary": "Generate a report on Supabase Data", + "summary": "Get Supabase migration report", "operationId": "migrationsGetSupabaseReport", "tags": [ "migrations" @@ -18253,7 +18412,8 @@ }, "x-appwrite": { "method": "getSupabaseReport", - "weight": 342, + "group": null, + "weight": 341, "cookies": false, "type": "", "deprecated": false, @@ -18376,7 +18536,8 @@ }, "x-appwrite": { "method": "get", - "weight": 339, + "group": null, + "weight": 338, "cookies": false, "type": "", "deprecated": false, @@ -18413,7 +18574,7 @@ ] }, "patch": { - "summary": "Retry migration", + "summary": "Update retry migration", "operationId": "migrationsRetry", "tags": [ "migrations" @@ -18433,7 +18594,8 @@ }, "x-appwrite": { "method": "retry", - "weight": 344, + "group": null, + "weight": 343, "cookies": false, "type": "", "deprecated": false, @@ -18483,7 +18645,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 345, + "group": null, + "weight": 344, "cookies": false, "type": "", "deprecated": false, @@ -18542,7 +18705,8 @@ }, "x-appwrite": { "method": "getUsage", - "weight": 196, + "group": null, + "weight": 195, "cookies": false, "type": "", "deprecated": false, @@ -18629,7 +18793,8 @@ }, "x-appwrite": { "method": "listVariables", - "weight": 198, + "group": null, + "weight": 197, "cookies": false, "type": "", "deprecated": false, @@ -18674,7 +18839,8 @@ }, "x-appwrite": { "method": "createVariable", - "weight": 197, + "group": null, + "weight": 196, "cookies": false, "type": "", "deprecated": false, @@ -18746,7 +18912,8 @@ }, "x-appwrite": { "method": "getVariable", - "weight": 199, + "group": null, + "weight": 198, "cookies": false, "type": "", "deprecated": false, @@ -18803,7 +18970,8 @@ }, "x-appwrite": { "method": "updateVariable", - "weight": 200, + "group": null, + "weight": 199, "cookies": false, "type": "", "deprecated": false, @@ -18877,7 +19045,8 @@ }, "x-appwrite": { "method": "deleteVariable", - "weight": 201, + "group": null, + "weight": 200, "cookies": false, "type": "", "deprecated": false, @@ -18936,7 +19105,8 @@ }, "x-appwrite": { "method": "list", - "weight": 151, + "group": "projects", + "weight": 150, "cookies": false, "type": "", "deprecated": false, @@ -19007,7 +19177,8 @@ }, "x-appwrite": { "method": "create", - "weight": 150, + "group": "projects", + "weight": 149, "cookies": false, "type": "", "deprecated": false, @@ -19056,8 +19227,7 @@ "description": "Project Region.", "x-example": "default", "enum": [ - "default", - "fra" + "default" ], "x-enum-name": null, "x-enum-keys": [] @@ -19141,7 +19311,8 @@ }, "x-appwrite": { "method": "get", - "weight": 152, + "group": "projects", + "weight": 151, "cookies": false, "type": "", "deprecated": false, @@ -19198,7 +19369,8 @@ }, "x-appwrite": { "method": "update", - "weight": 153, + "group": "projects", + "weight": 152, "cookies": false, "type": "", "deprecated": false, @@ -19312,7 +19484,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 170, + "group": "projects", + "weight": 169, "cookies": false, "type": "", "deprecated": false, @@ -19371,7 +19544,8 @@ }, "x-appwrite": { "method": "updateApiStatus", - "weight": 157, + "group": "projects", + "weight": 156, "cookies": false, "type": "", "deprecated": false, @@ -19462,7 +19636,8 @@ }, "x-appwrite": { "method": "updateApiStatusAll", - "weight": 158, + "group": "projects", + "weight": 157, "cookies": false, "type": "", "deprecated": false, @@ -19540,7 +19715,8 @@ }, "x-appwrite": { "method": "updateAuthDuration", - "weight": 163, + "group": "auth", + "weight": 162, "cookies": false, "type": "", "deprecated": false, @@ -19618,7 +19794,8 @@ }, "x-appwrite": { "method": "updateAuthLimit", - "weight": 162, + "group": "auth", + "weight": 161, "cookies": false, "type": "", "deprecated": false, @@ -19696,7 +19873,8 @@ }, "x-appwrite": { "method": "updateAuthSessionsLimit", - "weight": 168, + "group": "auth", + "weight": 167, "cookies": false, "type": "", "deprecated": false, @@ -19774,7 +19952,8 @@ }, "x-appwrite": { "method": "updateMembershipsPrivacy", - "weight": 161, + "group": "auth", + "weight": 160, "cookies": false, "type": "", "deprecated": false, @@ -19864,7 +20043,8 @@ }, "x-appwrite": { "method": "updateMockNumbers", - "weight": 169, + "group": "auth", + "weight": 168, "cookies": false, "type": "", "deprecated": false, @@ -19945,7 +20125,8 @@ }, "x-appwrite": { "method": "updateAuthPasswordDictionary", - "weight": 166, + "group": "auth", + "weight": 165, "cookies": false, "type": "", "deprecated": false, @@ -20023,7 +20204,8 @@ }, "x-appwrite": { "method": "updateAuthPasswordHistory", - "weight": 165, + "group": "auth", + "weight": 164, "cookies": false, "type": "", "deprecated": false, @@ -20081,7 +20263,7 @@ }, "\/projects\/{projectId}\/auth\/personal-data": { "patch": { - "summary": "Enable or disable checking user passwords for similarity with their personal data.", + "summary": "Update personal data check", "operationId": "projectsUpdatePersonalDataCheck", "tags": [ "projects" @@ -20101,7 +20283,8 @@ }, "x-appwrite": { "method": "updatePersonalDataCheck", - "weight": 167, + "group": "auth", + "weight": 166, "cookies": false, "type": "", "deprecated": false, @@ -20179,7 +20362,8 @@ }, "x-appwrite": { "method": "updateSessionAlerts", - "weight": 160, + "group": "auth", + "weight": 159, "cookies": false, "type": "", "deprecated": false, @@ -20257,7 +20441,8 @@ }, "x-appwrite": { "method": "updateAuthStatus", - "weight": 164, + "group": "auth", + "weight": 163, "cookies": false, "type": "", "deprecated": false, @@ -20356,7 +20541,8 @@ }, "x-appwrite": { "method": "createJWT", - "weight": 182, + "group": "auth", + "weight": 181, "cookies": false, "type": "", "deprecated": false, @@ -20442,7 +20628,8 @@ }, "x-appwrite": { "method": "listKeys", - "weight": 178, + "group": "keys", + "weight": 177, "cookies": false, "type": "", "deprecated": false, @@ -20499,7 +20686,8 @@ }, "x-appwrite": { "method": "createKey", - "weight": 177, + "group": "keys", + "weight": 176, "cookies": false, "type": "", "deprecated": false, @@ -20591,7 +20779,8 @@ }, "x-appwrite": { "method": "getKey", - "weight": 179, + "group": "keys", + "weight": 178, "cookies": false, "type": "", "deprecated": false, @@ -20658,7 +20847,8 @@ }, "x-appwrite": { "method": "updateKey", - "weight": 180, + "group": "keys", + "weight": 179, "cookies": false, "type": "", "deprecated": false, @@ -20751,7 +20941,8 @@ }, "x-appwrite": { "method": "deleteKey", - "weight": 181, + "group": "keys", + "weight": 180, "cookies": false, "type": "", "deprecated": false, @@ -20820,7 +21011,8 @@ }, "x-appwrite": { "method": "updateOAuth2", - "weight": 159, + "group": "auth", + "weight": 158, "cookies": false, "type": "", "deprecated": false, @@ -20880,6 +21072,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -20956,7 +21149,8 @@ }, "x-appwrite": { "method": "listPlatforms", - "weight": 184, + "group": "platforms", + "weight": 183, "cookies": false, "type": "", "deprecated": false, @@ -21013,7 +21207,8 @@ }, "x-appwrite": { "method": "createPlatform", - "weight": 183, + "group": "platforms", + "weight": 182, "cookies": false, "type": "", "deprecated": false, @@ -21131,7 +21326,8 @@ }, "x-appwrite": { "method": "getPlatform", - "weight": 185, + "group": "platforms", + "weight": 184, "cookies": false, "type": "", "deprecated": false, @@ -21198,7 +21394,8 @@ }, "x-appwrite": { "method": "updatePlatform", - "weight": 186, + "group": "platforms", + "weight": 185, "cookies": false, "type": "", "deprecated": false, @@ -21292,7 +21489,8 @@ }, "x-appwrite": { "method": "deletePlatform", - "weight": 187, + "group": "platforms", + "weight": 186, "cookies": false, "type": "", "deprecated": false, @@ -21361,7 +21559,8 @@ }, "x-appwrite": { "method": "updateServiceStatus", - "weight": 155, + "group": "projects", + "weight": 154, "cookies": false, "type": "", "deprecated": false, @@ -21460,7 +21659,8 @@ }, "x-appwrite": { "method": "updateServiceStatusAll", - "weight": 156, + "group": "projects", + "weight": 155, "cookies": false, "type": "", "deprecated": false, @@ -21538,7 +21738,8 @@ }, "x-appwrite": { "method": "updateSmtp", - "weight": 188, + "group": "templates", + "weight": 187, "cookies": false, "type": "", "deprecated": false, @@ -21655,7 +21856,8 @@ }, "x-appwrite": { "method": "createSmtpTest", - "weight": 189, + "group": "templates", + "weight": 188, "cookies": false, "type": "", "deprecated": false, @@ -21785,7 +21987,8 @@ }, "x-appwrite": { "method": "updateTeam", - "weight": 154, + "group": "projects", + "weight": 153, "cookies": false, "type": "", "deprecated": false, @@ -21863,7 +22066,8 @@ }, "x-appwrite": { "method": "getEmailTemplate", - "weight": 191, + "group": "templates", + "weight": 190, "cookies": false, "type": "", "deprecated": false, @@ -22086,7 +22290,8 @@ }, "x-appwrite": { "method": "updateEmailTemplate", - "weight": 193, + "group": "templates", + "weight": 192, "cookies": false, "type": "", "deprecated": false, @@ -22329,7 +22534,7 @@ } }, "delete": { - "summary": "Reset custom email template", + "summary": "Delete custom email template", "operationId": "projectsDeleteEmailTemplate", "tags": [ "projects" @@ -22349,7 +22554,8 @@ }, "x-appwrite": { "method": "deleteEmailTemplate", - "weight": 195, + "group": "templates", + "weight": 194, "cookies": false, "type": "", "deprecated": false, @@ -22574,7 +22780,8 @@ }, "x-appwrite": { "method": "getSmsTemplate", - "weight": 190, + "group": "templates", + "weight": 189, "cookies": false, "type": "", "deprecated": false, @@ -22794,7 +23001,8 @@ }, "x-appwrite": { "method": "updateSmsTemplate", - "weight": 192, + "group": "templates", + "weight": 191, "cookies": false, "type": "", "deprecated": false, @@ -23033,7 +23241,8 @@ }, "x-appwrite": { "method": "deleteSmsTemplate", - "weight": 194, + "group": "templates", + "weight": 193, "cookies": false, "type": "", "deprecated": false, @@ -23255,7 +23464,8 @@ }, "x-appwrite": { "method": "listWebhooks", - "weight": 172, + "group": "webhooks", + "weight": 171, "cookies": false, "type": "", "deprecated": false, @@ -23312,7 +23522,8 @@ }, "x-appwrite": { "method": "createWebhook", - "weight": 171, + "group": "webhooks", + "weight": 170, "cookies": false, "type": "", "deprecated": false, @@ -23426,7 +23637,8 @@ }, "x-appwrite": { "method": "getWebhook", - "weight": 173, + "group": "webhooks", + "weight": 172, "cookies": false, "type": "", "deprecated": false, @@ -23493,7 +23705,8 @@ }, "x-appwrite": { "method": "updateWebhook", - "weight": 174, + "group": "webhooks", + "weight": 173, "cookies": false, "type": "", "deprecated": false, @@ -23608,7 +23821,8 @@ }, "x-appwrite": { "method": "deleteWebhook", - "weight": 176, + "group": "webhooks", + "weight": 175, "cookies": false, "type": "", "deprecated": false, @@ -23677,7 +23891,8 @@ }, "x-appwrite": { "method": "updateWebhookSignature", - "weight": 175, + "group": "webhooks", + "weight": 174, "cookies": false, "type": "", "deprecated": false, @@ -23746,7 +23961,8 @@ }, "x-appwrite": { "method": "listRules", - "weight": 317, + "group": null, + "weight": 316, "cookies": false, "type": "", "deprecated": false, @@ -23817,7 +24033,8 @@ }, "x-appwrite": { "method": "createRule", - "weight": 316, + "group": null, + "weight": 315, "cookies": false, "type": "", "deprecated": false, @@ -23900,7 +24117,8 @@ }, "x-appwrite": { "method": "getRule", - "weight": 318, + "group": null, + "weight": 317, "cookies": false, "type": "", "deprecated": false, @@ -23950,7 +24168,8 @@ }, "x-appwrite": { "method": "deleteRule", - "weight": 319, + "group": null, + "weight": 318, "cookies": false, "type": "", "deprecated": false, @@ -24009,7 +24228,8 @@ }, "x-appwrite": { "method": "updateRuleVerification", - "weight": 320, + "group": null, + "weight": 319, "cookies": false, "type": "", "deprecated": false, @@ -24068,7 +24288,8 @@ }, "x-appwrite": { "method": "listBuckets", - "weight": 203, + "group": "buckets", + "weight": 202, "cookies": false, "type": "", "deprecated": false, @@ -24140,7 +24361,8 @@ }, "x-appwrite": { "method": "createBucket", - "weight": 202, + "group": "buckets", + "weight": 201, "cookies": false, "type": "", "deprecated": false, @@ -24266,7 +24488,8 @@ }, "x-appwrite": { "method": "getBucket", - "weight": 204, + "group": "buckets", + "weight": 203, "cookies": false, "type": "", "deprecated": false, @@ -24324,7 +24547,8 @@ }, "x-appwrite": { "method": "updateBucket", - "weight": 205, + "group": "buckets", + "weight": 204, "cookies": false, "type": "", "deprecated": false, @@ -24447,7 +24671,8 @@ }, "x-appwrite": { "method": "deleteBucket", - "weight": 206, + "group": "buckets", + "weight": 205, "cookies": false, "type": "", "deprecated": false, @@ -24507,7 +24732,8 @@ }, "x-appwrite": { "method": "listFiles", - "weight": 208, + "group": "files", + "weight": 207, "cookies": false, "type": "", "deprecated": false, @@ -24592,7 +24818,8 @@ }, "x-appwrite": { "method": "createFile", - "weight": 207, + "group": "files", + "weight": 206, "cookies": false, "type": "upload", "deprecated": false, @@ -24689,7 +24916,8 @@ }, "x-appwrite": { "method": "getFile", - "weight": 209, + "group": "files", + "weight": 208, "cookies": false, "type": "", "deprecated": false, @@ -24760,7 +24988,8 @@ }, "x-appwrite": { "method": "updateFile", - "weight": 214, + "group": "files", + "weight": 213, "cookies": false, "type": "", "deprecated": false, @@ -24848,7 +25077,8 @@ }, "x-appwrite": { "method": "deleteFile", - "weight": 215, + "group": "files", + "weight": 214, "cookies": false, "type": "", "deprecated": false, @@ -24914,7 +25144,8 @@ }, "x-appwrite": { "method": "getFileDownload", - "weight": 211, + "group": "files", + "weight": 210, "cookies": false, "type": "location", "deprecated": false, @@ -24980,7 +25211,8 @@ }, "x-appwrite": { "method": "getFilePreview", - "weight": 210, + "group": "files", + "weight": 209, "cookies": false, "type": "location", "deprecated": false, @@ -25196,7 +25428,8 @@ }, "x-appwrite": { "method": "getFileView", - "weight": 212, + "group": "files", + "weight": 211, "cookies": false, "type": "location", "deprecated": false, @@ -25269,7 +25502,8 @@ }, "x-appwrite": { "method": "getUsage", - "weight": 216, + "group": null, + "weight": 215, "cookies": false, "type": "", "deprecated": false, @@ -25340,7 +25574,8 @@ }, "x-appwrite": { "method": "getBucketUsage", - "weight": 217, + "group": null, + "weight": 216, "cookies": false, "type": "", "deprecated": false, @@ -25421,7 +25656,8 @@ }, "x-appwrite": { "method": "list", - "weight": 219, + "group": "teams", + "weight": 218, "cookies": false, "type": "", "deprecated": false, @@ -25496,7 +25732,8 @@ }, "x-appwrite": { "method": "create", - "weight": 218, + "group": "teams", + "weight": 217, "cookies": false, "type": "", "deprecated": false, @@ -25580,7 +25817,8 @@ }, "x-appwrite": { "method": "get", - "weight": 220, + "group": "teams", + "weight": 219, "cookies": false, "type": "", "deprecated": false, @@ -25641,7 +25879,8 @@ }, "x-appwrite": { "method": "updateName", - "weight": 222, + "group": "teams", + "weight": 221, "cookies": false, "type": "", "deprecated": false, @@ -25714,7 +25953,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 224, + "group": "teams", + "weight": 223, "cookies": false, "type": "", "deprecated": false, @@ -25777,7 +26017,8 @@ }, "x-appwrite": { "method": "listLogs", - "weight": 231, + "group": "logs", + "weight": 230, "cookies": false, "type": "", "deprecated": false, @@ -25849,7 +26090,8 @@ }, "x-appwrite": { "method": "listMemberships", - "weight": 226, + "group": "memberships", + "weight": 225, "cookies": false, "type": "", "deprecated": false, @@ -25934,7 +26176,8 @@ }, "x-appwrite": { "method": "createMembership", - "weight": 225, + "group": "memberships", + "weight": 224, "cookies": false, "type": "", "deprecated": false, @@ -26044,7 +26287,8 @@ }, "x-appwrite": { "method": "getMembership", - "weight": 227, + "group": "memberships", + "weight": 226, "cookies": false, "type": "", "deprecated": false, @@ -26115,7 +26359,8 @@ }, "x-appwrite": { "method": "updateMembership", - "weight": 228, + "group": "memberships", + "weight": 227, "cookies": false, "type": "", "deprecated": false, @@ -26201,7 +26446,8 @@ }, "x-appwrite": { "method": "deleteMembership", - "weight": 230, + "group": "memberships", + "weight": 229, "cookies": false, "type": "", "deprecated": false, @@ -26274,7 +26520,8 @@ }, "x-appwrite": { "method": "updateMembershipStatus", - "weight": 229, + "group": "memberships", + "weight": 228, "cookies": false, "type": "", "deprecated": false, @@ -26370,7 +26617,8 @@ }, "x-appwrite": { "method": "getPrefs", - "weight": 221, + "group": "teams", + "weight": 220, "cookies": false, "type": "", "deprecated": false, @@ -26429,7 +26677,8 @@ }, "x-appwrite": { "method": "updatePrefs", - "weight": 223, + "group": "teams", + "weight": 222, "cookies": false, "type": "", "deprecated": false, @@ -26509,7 +26758,8 @@ }, "x-appwrite": { "method": "list", - "weight": 241, + "group": "users", + "weight": 240, "cookies": false, "type": "", "deprecated": false, @@ -26581,7 +26831,8 @@ }, "x-appwrite": { "method": "create", - "weight": 232, + "group": "users", + "weight": 231, "cookies": false, "type": "", "deprecated": false, @@ -26668,7 +26919,8 @@ }, "x-appwrite": { "method": "createArgon2User", - "weight": 235, + "group": "users", + "weight": 234, "cookies": false, "type": "", "deprecated": false, @@ -26752,7 +27004,8 @@ }, "x-appwrite": { "method": "createBcryptUser", - "weight": 233, + "group": "users", + "weight": 232, "cookies": false, "type": "", "deprecated": false, @@ -26836,7 +27089,8 @@ }, "x-appwrite": { "method": "listIdentities", - "weight": 249, + "group": "identities", + "weight": 248, "cookies": false, "type": "", "deprecated": false, @@ -26903,7 +27157,8 @@ }, "x-appwrite": { "method": "deleteIdentity", - "weight": 272, + "group": "identities", + "weight": 271, "cookies": false, "type": "", "deprecated": false, @@ -26963,7 +27218,8 @@ }, "x-appwrite": { "method": "createMD5User", - "weight": 234, + "group": "users", + "weight": 233, "cookies": false, "type": "", "deprecated": false, @@ -27047,7 +27303,8 @@ }, "x-appwrite": { "method": "createPHPassUser", - "weight": 237, + "group": "users", + "weight": 236, "cookies": false, "type": "", "deprecated": false, @@ -27131,7 +27388,8 @@ }, "x-appwrite": { "method": "createScryptUser", - "weight": 238, + "group": "users", + "weight": 237, "cookies": false, "type": "", "deprecated": false, @@ -27245,7 +27503,8 @@ }, "x-appwrite": { "method": "createScryptModifiedUser", - "weight": 239, + "group": "users", + "weight": 238, "cookies": false, "type": "", "deprecated": false, @@ -27347,7 +27606,8 @@ }, "x-appwrite": { "method": "createSHAUser", - "weight": 236, + "group": "users", + "weight": 235, "cookies": false, "type": "", "deprecated": false, @@ -27451,7 +27711,8 @@ }, "x-appwrite": { "method": "getUsage", - "weight": 274, + "group": null, + "weight": 273, "cookies": false, "type": "", "deprecated": false, @@ -27522,7 +27783,8 @@ }, "x-appwrite": { "method": "get", - "weight": 242, + "group": "users", + "weight": 241, "cookies": false, "type": "", "deprecated": false, @@ -27573,7 +27835,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 270, + "group": "users", + "weight": 269, "cookies": false, "type": "", "deprecated": false, @@ -27633,7 +27896,8 @@ }, "x-appwrite": { "method": "updateEmail", - "weight": 255, + "group": "users", + "weight": 254, "cookies": false, "type": "", "deprecated": false, @@ -27712,7 +27976,8 @@ }, "x-appwrite": { "method": "createJWT", - "weight": 273, + "group": "sessions", + "weight": 272, "cookies": false, "type": "", "deprecated": false, @@ -27793,7 +28058,8 @@ }, "x-appwrite": { "method": "updateLabels", - "weight": 251, + "group": "users", + "weight": 250, "cookies": false, "type": "", "deprecated": false, @@ -27875,7 +28141,8 @@ }, "x-appwrite": { "method": "listLogs", - "weight": 247, + "group": "logs", + "weight": 246, "cookies": false, "type": "", "deprecated": false, @@ -27948,7 +28215,8 @@ }, "x-appwrite": { "method": "listMemberships", - "weight": 246, + "group": "memberships", + "weight": 245, "cookies": false, "type": "", "deprecated": false, @@ -28008,7 +28276,8 @@ }, "x-appwrite": { "method": "updateMfa", - "weight": 260, + "group": "users", + "weight": 259, "cookies": false, "type": "", "deprecated": false, @@ -28080,7 +28349,8 @@ }, "x-appwrite": { "method": "deleteMfaAuthenticator", - "weight": 265, + "group": "mfa", + "weight": 264, "cookies": false, "type": "", "deprecated": false, @@ -28155,7 +28425,8 @@ }, "x-appwrite": { "method": "listMfaFactors", - "weight": 261, + "group": "mfa", + "weight": 260, "cookies": false, "type": "", "deprecated": false, @@ -28215,7 +28486,8 @@ }, "x-appwrite": { "method": "getMfaRecoveryCodes", - "weight": 262, + "group": "mfa", + "weight": 261, "cookies": false, "type": "", "deprecated": false, @@ -28253,7 +28525,7 @@ ] }, "put": { - "summary": "Regenerate MFA recovery codes", + "summary": "Update MFA recovery codes (regenerate)", "operationId": "usersUpdateMfaRecoveryCodes", "tags": [ "users" @@ -28273,7 +28545,8 @@ }, "x-appwrite": { "method": "updateMfaRecoveryCodes", - "weight": 264, + "group": "mfa", + "weight": 263, "cookies": false, "type": "", "deprecated": false, @@ -28331,7 +28604,8 @@ }, "x-appwrite": { "method": "createMfaRecoveryCodes", - "weight": 263, + "group": "mfa", + "weight": 262, "cookies": false, "type": "", "deprecated": false, @@ -28391,7 +28665,8 @@ }, "x-appwrite": { "method": "updateName", - "weight": 253, + "group": "users", + "weight": 252, "cookies": false, "type": "", "deprecated": false, @@ -28470,7 +28745,8 @@ }, "x-appwrite": { "method": "updatePassword", - "weight": 254, + "group": "users", + "weight": 253, "cookies": false, "type": "", "deprecated": false, @@ -28549,7 +28825,8 @@ }, "x-appwrite": { "method": "updatePhone", - "weight": 256, + "group": "users", + "weight": 255, "cookies": false, "type": "", "deprecated": false, @@ -28628,7 +28905,8 @@ }, "x-appwrite": { "method": "getPrefs", - "weight": 243, + "group": "users", + "weight": 242, "cookies": false, "type": "", "deprecated": false, @@ -28686,7 +28964,8 @@ }, "x-appwrite": { "method": "updatePrefs", - "weight": 258, + "group": "users", + "weight": 257, "cookies": false, "type": "", "deprecated": false, @@ -28765,7 +29044,8 @@ }, "x-appwrite": { "method": "listSessions", - "weight": 245, + "group": "sessions", + "weight": 244, "cookies": false, "type": "", "deprecated": false, @@ -28823,7 +29103,8 @@ }, "x-appwrite": { "method": "createSession", - "weight": 266, + "group": "sessions", + "weight": 265, "cookies": false, "type": "", "deprecated": false, @@ -28874,7 +29155,8 @@ }, "x-appwrite": { "method": "deleteSessions", - "weight": 269, + "group": "sessions", + "weight": 268, "cookies": false, "type": "", "deprecated": false, @@ -28927,7 +29209,8 @@ }, "x-appwrite": { "method": "deleteSession", - "weight": 268, + "group": "sessions", + "weight": 267, "cookies": false, "type": "", "deprecated": false, @@ -28997,7 +29280,8 @@ }, "x-appwrite": { "method": "updateStatus", - "weight": 250, + "group": "users", + "weight": 249, "cookies": false, "type": "", "deprecated": false, @@ -29076,7 +29360,8 @@ }, "x-appwrite": { "method": "listTargets", - "weight": 248, + "group": "targets", + "weight": 247, "cookies": false, "type": "", "deprecated": false, @@ -29148,7 +29433,8 @@ }, "x-appwrite": { "method": "createTarget", - "weight": 240, + "group": "targets", + "weight": 239, "cookies": false, "type": "", "deprecated": false, @@ -29257,7 +29543,8 @@ }, "x-appwrite": { "method": "getTarget", - "weight": 244, + "group": "targets", + "weight": 243, "cookies": false, "type": "", "deprecated": false, @@ -29326,7 +29613,8 @@ }, "x-appwrite": { "method": "updateTarget", - "weight": 259, + "group": "targets", + "weight": 258, "cookies": false, "type": "", "deprecated": false, @@ -29414,7 +29702,8 @@ }, "x-appwrite": { "method": "deleteTarget", - "weight": 271, + "group": "targets", + "weight": 270, "cookies": false, "type": "", "deprecated": false, @@ -29485,7 +29774,8 @@ }, "x-appwrite": { "method": "createToken", - "weight": 267, + "group": "sessions", + "weight": 266, "cookies": false, "type": "", "deprecated": false, @@ -29566,7 +29856,8 @@ }, "x-appwrite": { "method": "updateEmailVerification", - "weight": 257, + "group": "users", + "weight": 256, "cookies": false, "type": "", "deprecated": false, @@ -29645,7 +29936,8 @@ }, "x-appwrite": { "method": "updatePhoneVerification", - "weight": 252, + "group": "users", + "weight": 251, "cookies": false, "type": "", "deprecated": false, @@ -29724,7 +30016,8 @@ }, "x-appwrite": { "method": "listRepositories", - "weight": 279, + "group": "repositories", + "weight": 278, "cookies": false, "type": "", "deprecated": false, @@ -29792,7 +30085,8 @@ }, "x-appwrite": { "method": "createRepository", - "weight": 280, + "group": "repositories", + "weight": 279, "cookies": false, "type": "", "deprecated": false, @@ -29876,7 +30170,8 @@ }, "x-appwrite": { "method": "getRepository", - "weight": 281, + "group": "repositories", + "weight": 280, "cookies": false, "type": "", "deprecated": false, @@ -29945,7 +30240,8 @@ }, "x-appwrite": { "method": "listRepositoryBranches", - "weight": 282, + "group": "repositories", + "weight": 281, "cookies": false, "type": "", "deprecated": false, @@ -30014,7 +30310,8 @@ }, "x-appwrite": { "method": "getRepositoryContents", - "weight": 277, + "group": "repositories", + "weight": 276, "cookies": false, "type": "", "deprecated": false, @@ -30074,7 +30371,7 @@ }, "\/vcs\/github\/installations\/{installationId}\/providerRepositories\/{providerRepositoryId}\/detection": { "post": { - "summary": "Detect runtime settings from source code", + "summary": "Create runtime settings detection", "operationId": "vcsCreateRepositoryDetection", "tags": [ "vcs" @@ -30094,7 +30391,8 @@ }, "x-appwrite": { "method": "createRepositoryDetection", - "weight": 278, + "group": "repositories", + "weight": 277, "cookies": false, "type": "", "deprecated": false, @@ -30159,7 +30457,7 @@ }, "\/vcs\/github\/installations\/{installationId}\/repositories\/{repositoryId}": { "patch": { - "summary": "Authorize external deployment", + "summary": "Update external deployment (authorize)", "operationId": "vcsUpdateExternalDeployments", "tags": [ "vcs" @@ -30172,7 +30470,8 @@ }, "x-appwrite": { "method": "updateExternalDeployments", - "weight": 287, + "group": "repositories", + "weight": 286, "cookies": false, "type": "", "deprecated": false, @@ -30260,7 +30559,8 @@ }, "x-appwrite": { "method": "listInstallations", - "weight": 284, + "group": "installations", + "weight": 283, "cookies": false, "type": "", "deprecated": false, @@ -30333,7 +30633,8 @@ }, "x-appwrite": { "method": "getInstallation", - "weight": 285, + "group": "installations", + "weight": 284, "cookies": false, "type": "", "deprecated": false, @@ -30383,7 +30684,8 @@ }, "x-appwrite": { "method": "deleteInstallation", - "weight": 286, + "group": "installations", + "weight": 285, "cookies": false, "type": "", "deprecated": false, diff --git a/app/config/specs/open-api3-latest-server.json b/app/config/specs/open-api3-latest-server.json index 3d32d3e978..e3eeb7b42f 100644 --- a/app/config/specs/open-api3-latest-server.json +++ b/app/config/specs/open-api3-latest-server.json @@ -1,7 +1,7 @@ { "openapi": "3.0.0", "info": { - "version": "1.6.1", + "version": "1.6.2", "title": "Appwrite", "description": "Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)", "termsOfService": "https:\/\/appwrite.io\/policy\/terms", @@ -43,6 +43,7 @@ }, "x-appwrite": { "method": "get", + "group": "account", "weight": 9, "cookies": false, "type": "", @@ -92,6 +93,7 @@ }, "x-appwrite": { "method": "create", + "group": "account", "weight": 8, "cookies": false, "type": "", @@ -176,6 +178,7 @@ }, "x-appwrite": { "method": "updateEmail", + "group": "account", "weight": 34, "cookies": false, "type": "", @@ -252,6 +255,7 @@ }, "x-appwrite": { "method": "listIdentities", + "group": "identities", "weight": 57, "cookies": false, "type": "", @@ -311,6 +315,7 @@ }, "x-appwrite": { "method": "deleteIdentity", + "group": "identities", "weight": 58, "cookies": false, "type": "", @@ -374,6 +379,7 @@ }, "x-appwrite": { "method": "createJWT", + "group": "tokens", "weight": 29, "cookies": false, "type": "", @@ -422,6 +428,7 @@ }, "x-appwrite": { "method": "listLogs", + "group": "logs", "weight": 31, "cookies": false, "type": "", @@ -488,6 +495,7 @@ }, "x-appwrite": { "method": "updateMFA", + "group": "mfa", "weight": 44, "cookies": false, "type": "", @@ -558,6 +566,7 @@ }, "x-appwrite": { "method": "createMfaAuthenticator", + "group": "mfa", "weight": 46, "cookies": false, "type": "", @@ -604,7 +613,7 @@ ] }, "put": { - "summary": "Verify authenticator", + "summary": "Update authenticator (confirmation)", "operationId": "accountUpdateMfaAuthenticator", "tags": [ "account" @@ -624,6 +633,7 @@ }, "x-appwrite": { "method": "updateMfaAuthenticator", + "group": "mfa", "weight": 47, "cookies": false, "type": "", @@ -702,6 +712,7 @@ }, "x-appwrite": { "method": "deleteMfaAuthenticator", + "group": "mfa", "weight": 51, "cookies": false, "type": "", @@ -770,6 +781,7 @@ }, "x-appwrite": { "method": "createMfaChallenge", + "group": "mfa", "weight": 52, "cookies": false, "type": "", @@ -823,7 +835,7 @@ } }, "put": { - "summary": "Create MFA challenge (confirmation)", + "summary": "Update MFA challenge (confirmation)", "operationId": "accountUpdateMfaChallenge", "tags": [ "account" @@ -843,6 +855,7 @@ }, "x-appwrite": { "method": "updateMfaChallenge", + "group": "mfa", "weight": 53, "cookies": false, "type": "", @@ -919,6 +932,7 @@ }, "x-appwrite": { "method": "listMfaFactors", + "group": "mfa", "weight": 45, "cookies": false, "type": "", @@ -950,7 +964,7 @@ }, "\/account\/mfa\/recovery-codes": { "get": { - "summary": "Get MFA recovery codes", + "summary": "List MFA recovery codes", "operationId": "accountGetMfaRecoveryCodes", "tags": [ "account" @@ -970,6 +984,7 @@ }, "x-appwrite": { "method": "getMfaRecoveryCodes", + "group": "mfa", "weight": 50, "cookies": false, "type": "", @@ -1019,6 +1034,7 @@ }, "x-appwrite": { "method": "createMfaRecoveryCodes", + "group": "mfa", "weight": 48, "cookies": false, "type": "", @@ -1048,7 +1064,7 @@ ] }, "patch": { - "summary": "Regenerate MFA recovery codes", + "summary": "Update MFA recovery codes (regenerate)", "operationId": "accountUpdateMfaRecoveryCodes", "tags": [ "account" @@ -1068,6 +1084,7 @@ }, "x-appwrite": { "method": "updateMfaRecoveryCodes", + "group": "mfa", "weight": 49, "cookies": false, "type": "", @@ -1119,6 +1136,7 @@ }, "x-appwrite": { "method": "updateName", + "group": "account", "weight": 32, "cookies": false, "type": "", @@ -1189,6 +1207,7 @@ }, "x-appwrite": { "method": "updatePassword", + "group": "account", "weight": 33, "cookies": false, "type": "", @@ -1264,6 +1283,7 @@ }, "x-appwrite": { "method": "updatePhone", + "group": "account", "weight": 35, "cookies": false, "type": "", @@ -1340,6 +1360,7 @@ }, "x-appwrite": { "method": "getPrefs", + "group": "account", "weight": 30, "cookies": false, "type": "", @@ -1389,6 +1410,7 @@ }, "x-appwrite": { "method": "updatePrefs", + "group": "account", "weight": 36, "cookies": false, "type": "", @@ -1459,6 +1481,7 @@ }, "x-appwrite": { "method": "createRecovery", + "group": "recovery", "weight": 38, "cookies": false, "type": "", @@ -1516,7 +1539,7 @@ } }, "put": { - "summary": "Create password recovery (confirmation)", + "summary": "Update password recovery (confirmation)", "operationId": "accountUpdateRecovery", "tags": [ "account" @@ -1536,6 +1559,7 @@ }, "x-appwrite": { "method": "updateRecovery", + "group": "recovery", "weight": 39, "cookies": false, "type": "", @@ -1618,6 +1642,7 @@ }, "x-appwrite": { "method": "listSessions", + "group": "sessions", "weight": 11, "cookies": false, "type": "", @@ -1660,6 +1685,7 @@ }, "x-appwrite": { "method": "deleteSessions", + "group": "sessions", "weight": 12, "cookies": false, "type": "", @@ -1711,6 +1737,7 @@ }, "x-appwrite": { "method": "createAnonymousSession", + "group": "sessions", "weight": 17, "cookies": false, "type": "", @@ -1759,6 +1786,7 @@ }, "x-appwrite": { "method": "createEmailPasswordSession", + "group": "sessions", "weight": 16, "cookies": false, "type": "", @@ -1832,6 +1860,7 @@ }, "x-appwrite": { "method": "updateMagicURLSession", + "group": "sessions", "weight": 26, "cookies": false, "type": "", @@ -1905,6 +1934,7 @@ }, "x-appwrite": { "method": "updatePhoneSession", + "group": "sessions", "weight": 27, "cookies": false, "type": "", @@ -1978,6 +2008,7 @@ }, "x-appwrite": { "method": "createSession", + "group": "sessions", "weight": 18, "cookies": false, "type": "", @@ -2051,6 +2082,7 @@ }, "x-appwrite": { "method": "getSession", + "group": "sessions", "weight": 13, "cookies": false, "type": "", @@ -2112,6 +2144,7 @@ }, "x-appwrite": { "method": "updateSession", + "group": "sessions", "weight": 15, "cookies": false, "type": "", @@ -2166,6 +2199,7 @@ }, "x-appwrite": { "method": "deleteSession", + "group": "sessions", "weight": 14, "cookies": false, "type": "", @@ -2229,6 +2263,7 @@ }, "x-appwrite": { "method": "updateStatus", + "group": "account", "weight": 37, "cookies": false, "type": "", @@ -2280,6 +2315,7 @@ }, "x-appwrite": { "method": "createEmailToken", + "group": "tokens", "weight": 25, "cookies": false, "type": "", @@ -2358,6 +2394,7 @@ }, "x-appwrite": { "method": "createMagicURLToken", + "group": "tokens", "weight": 24, "cookies": false, "type": "", @@ -2437,6 +2474,7 @@ }, "x-appwrite": { "method": "createOAuth2Token", + "group": "tokens", "weight": 23, "cookies": false, "type": "webAuth", @@ -2464,7 +2502,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", "required": true, "schema": { "type": "string", @@ -2484,6 +2522,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -2577,6 +2616,7 @@ }, "x-appwrite": { "method": "createPhoneToken", + "group": "tokens", "weight": 28, "cookies": false, "type": "", @@ -2653,6 +2693,7 @@ }, "x-appwrite": { "method": "createVerification", + "group": "verification", "weight": 40, "cookies": false, "type": "", @@ -2701,7 +2742,7 @@ } }, "put": { - "summary": "Create email verification (confirmation)", + "summary": "Update email verification (confirmation)", "operationId": "accountUpdateVerification", "tags": [ "account" @@ -2721,6 +2762,7 @@ }, "x-appwrite": { "method": "updateVerification", + "group": "verification", "weight": 41, "cookies": false, "type": "", @@ -2797,6 +2839,7 @@ }, "x-appwrite": { "method": "createPhoneVerification", + "group": "verification", "weight": 42, "cookies": false, "type": "", @@ -2849,6 +2892,7 @@ }, "x-appwrite": { "method": "updatePhoneVerification", + "group": "verification", "weight": 43, "cookies": false, "type": "", @@ -2918,6 +2962,7 @@ }, "x-appwrite": { "method": "getBrowser", + "group": null, "weight": 60, "cookies": false, "type": "location", @@ -3045,6 +3090,7 @@ }, "x-appwrite": { "method": "getCreditCard", + "group": null, "weight": 59, "cookies": false, "type": "location", @@ -3178,6 +3224,7 @@ }, "x-appwrite": { "method": "getFavicon", + "group": null, "weight": 63, "cookies": false, "type": "location", @@ -3237,6 +3284,7 @@ }, "x-appwrite": { "method": "getFlag", + "group": null, "weight": 61, "cookies": false, "type": "location", @@ -3726,6 +3774,7 @@ }, "x-appwrite": { "method": "getImage", + "group": null, "weight": 62, "cookies": false, "type": "location", @@ -3809,6 +3858,7 @@ }, "x-appwrite": { "method": "getInitials", + "group": null, "weight": 65, "cookies": false, "type": "location", @@ -3902,6 +3952,7 @@ }, "x-appwrite": { "method": "getQR", + "group": null, "weight": 64, "cookies": false, "type": "location", @@ -4002,6 +4053,7 @@ }, "x-appwrite": { "method": "list", + "group": "databases", "weight": 70, "cookies": false, "type": "", @@ -4075,6 +4127,7 @@ }, "x-appwrite": { "method": "create", + "group": "databases", "weight": 69, "cookies": false, "type": "", @@ -4154,6 +4207,7 @@ }, "x-appwrite": { "method": "get", + "group": "databases", "weight": 71, "cookies": false, "type": "", @@ -4213,6 +4267,7 @@ }, "x-appwrite": { "method": "update", + "group": "databases", "weight": 73, "cookies": false, "type": "", @@ -4289,6 +4344,7 @@ }, "x-appwrite": { "method": "delete", + "group": "databases", "weight": 74, "cookies": false, "type": "", @@ -4350,6 +4406,7 @@ }, "x-appwrite": { "method": "listCollections", + "group": "collections", "weight": 76, "cookies": false, "type": "", @@ -4433,6 +4490,7 @@ }, "x-appwrite": { "method": "createCollection", + "group": "collections", "weight": 75, "cookies": false, "type": "", @@ -4537,6 +4595,7 @@ }, "x-appwrite": { "method": "getCollection", + "group": "collections", "weight": 77, "cookies": false, "type": "", @@ -4606,6 +4665,7 @@ }, "x-appwrite": { "method": "updateCollection", + "group": "collections", "weight": 79, "cookies": false, "type": "", @@ -4705,6 +4765,7 @@ }, "x-appwrite": { "method": "deleteCollection", + "group": "collections", "weight": 80, "cookies": false, "type": "", @@ -4776,6 +4837,7 @@ }, "x-appwrite": { "method": "listAttributes", + "group": "attributes", "weight": 91, "cookies": false, "type": "", @@ -4860,6 +4922,7 @@ }, "x-appwrite": { "method": "createBooleanAttribute", + "group": "attributes", "weight": 88, "cookies": false, "type": "", @@ -4966,6 +5029,7 @@ }, "x-appwrite": { "method": "updateBooleanAttribute", + "group": "attributes", "weight": 100, "cookies": false, "type": "", @@ -5077,6 +5141,7 @@ }, "x-appwrite": { "method": "createDatetimeAttribute", + "group": "attributes", "weight": 89, "cookies": false, "type": "", @@ -5183,6 +5248,7 @@ }, "x-appwrite": { "method": "updateDatetimeAttribute", + "group": "attributes", "weight": 101, "cookies": false, "type": "", @@ -5294,6 +5360,7 @@ }, "x-appwrite": { "method": "createEmailAttribute", + "group": "attributes", "weight": 82, "cookies": false, "type": "", @@ -5400,6 +5467,7 @@ }, "x-appwrite": { "method": "updateEmailAttribute", + "group": "attributes", "weight": 94, "cookies": false, "type": "", @@ -5511,6 +5579,7 @@ }, "x-appwrite": { "method": "createEnumAttribute", + "group": "attributes", "weight": 83, "cookies": false, "type": "", @@ -5626,6 +5695,7 @@ }, "x-appwrite": { "method": "updateEnumAttribute", + "group": "attributes", "weight": 95, "cookies": false, "type": "", @@ -5746,6 +5816,7 @@ }, "x-appwrite": { "method": "createFloatAttribute", + "group": "attributes", "weight": 87, "cookies": false, "type": "", @@ -5862,6 +5933,7 @@ }, "x-appwrite": { "method": "updateFloatAttribute", + "group": "attributes", "weight": 99, "cookies": false, "type": "", @@ -5983,6 +6055,7 @@ }, "x-appwrite": { "method": "createIntegerAttribute", + "group": "attributes", "weight": 86, "cookies": false, "type": "", @@ -6099,6 +6172,7 @@ }, "x-appwrite": { "method": "updateIntegerAttribute", + "group": "attributes", "weight": 98, "cookies": false, "type": "", @@ -6220,6 +6294,7 @@ }, "x-appwrite": { "method": "createIpAttribute", + "group": "attributes", "weight": 84, "cookies": false, "type": "", @@ -6326,6 +6401,7 @@ }, "x-appwrite": { "method": "updateIpAttribute", + "group": "attributes", "weight": 96, "cookies": false, "type": "", @@ -6437,6 +6513,7 @@ }, "x-appwrite": { "method": "createRelationshipAttribute", + "group": "attributes", "weight": 90, "cookies": false, "type": "", @@ -6568,6 +6645,7 @@ }, "x-appwrite": { "method": "createStringAttribute", + "group": "attributes", "weight": 81, "cookies": false, "type": "", @@ -6685,6 +6763,7 @@ }, "x-appwrite": { "method": "updateStringAttribute", + "group": "attributes", "weight": 93, "cookies": false, "type": "", @@ -6801,6 +6880,7 @@ }, "x-appwrite": { "method": "createUrlAttribute", + "group": "attributes", "weight": 85, "cookies": false, "type": "", @@ -6907,6 +6987,7 @@ }, "x-appwrite": { "method": "updateUrlAttribute", + "group": "attributes", "weight": 97, "cookies": false, "type": "", @@ -7049,6 +7130,7 @@ }, "x-appwrite": { "method": "getAttribute", + "group": "attributes", "weight": 92, "cookies": false, "type": "", @@ -7120,6 +7202,7 @@ }, "x-appwrite": { "method": "deleteAttribute", + "group": "attributes", "weight": 103, "cookies": false, "type": "", @@ -7200,6 +7283,7 @@ }, "x-appwrite": { "method": "updateRelationshipAttribute", + "group": "attributes", "weight": 102, "cookies": false, "type": "", @@ -7308,6 +7392,7 @@ }, "x-appwrite": { "method": "listDocuments", + "group": "documents", "weight": 109, "cookies": false, "type": "", @@ -7394,6 +7479,7 @@ }, "x-appwrite": { "method": "createDocument", + "group": "documents", "weight": 108, "cookies": false, "type": "", @@ -7502,6 +7588,7 @@ }, "x-appwrite": { "method": "getDocument", + "group": "documents", "weight": 110, "cookies": false, "type": "", @@ -7598,6 +7685,7 @@ }, "x-appwrite": { "method": "updateDocument", + "group": "documents", "weight": 112, "cookies": false, "type": "", @@ -7698,6 +7786,7 @@ }, "x-appwrite": { "method": "deleteDocument", + "group": "documents", "weight": 113, "cookies": false, "type": "", @@ -7783,6 +7872,7 @@ }, "x-appwrite": { "method": "listIndexes", + "group": "indexes", "weight": 105, "cookies": false, "type": "", @@ -7865,6 +7955,7 @@ }, "x-appwrite": { "method": "createIndex", + "group": "collections", "weight": 104, "cookies": false, "type": "", @@ -7985,6 +8076,7 @@ }, "x-appwrite": { "method": "getIndex", + "group": "indexes", "weight": 106, "cookies": false, "type": "", @@ -8056,6 +8148,7 @@ }, "x-appwrite": { "method": "deleteIndex", + "group": "indexes", "weight": 107, "cookies": false, "type": "", @@ -8136,7 +8229,8 @@ }, "x-appwrite": { "method": "list", - "weight": 289, + "group": "functions", + "weight": 288, "cookies": false, "type": "", "deprecated": false, @@ -8209,7 +8303,8 @@ }, "x-appwrite": { "method": "create", - "weight": 288, + "group": "functions", + "weight": 287, "cookies": false, "type": "", "deprecated": false, @@ -8456,7 +8551,8 @@ }, "x-appwrite": { "method": "listRuntimes", - "weight": 290, + "group": "runtimes", + "weight": 289, "cookies": false, "type": "", "deprecated": false, @@ -8505,7 +8601,8 @@ }, "x-appwrite": { "method": "listSpecifications", - "weight": 291, + "group": "runtimes", + "weight": 290, "cookies": false, "type": "", "deprecated": false, @@ -8555,7 +8652,8 @@ }, "x-appwrite": { "method": "get", - "weight": 292, + "group": "functions", + "weight": 291, "cookies": false, "type": "", "deprecated": false, @@ -8614,7 +8712,8 @@ }, "x-appwrite": { "method": "update", - "weight": 295, + "group": "functions", + "weight": 294, "cookies": false, "type": "", "deprecated": false, @@ -8838,7 +8937,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 298, + "group": "functions", + "weight": 297, "cookies": false, "type": "", "deprecated": false, @@ -8899,7 +8999,8 @@ }, "x-appwrite": { "method": "listDeployments", - "weight": 300, + "group": "deployments", + "weight": 299, "cookies": false, "type": "", "deprecated": false, @@ -8982,7 +9083,8 @@ }, "x-appwrite": { "method": "createDeployment", - "weight": 299, + "group": "deployments", + "weight": 298, "cookies": false, "type": "upload", "deprecated": false, @@ -9078,7 +9180,8 @@ }, "x-appwrite": { "method": "getDeployment", - "weight": 301, + "group": "deployments", + "weight": 300, "cookies": false, "type": "", "deprecated": false, @@ -9147,7 +9250,8 @@ }, "x-appwrite": { "method": "updateDeployment", - "weight": 297, + "group": "deployments", + "weight": 296, "cookies": false, "type": "", "deprecated": false, @@ -9209,7 +9313,8 @@ }, "x-appwrite": { "method": "deleteDeployment", - "weight": 302, + "group": "deployments", + "weight": 301, "cookies": false, "type": "", "deprecated": false, @@ -9260,7 +9365,7 @@ }, "\/functions\/{functionId}\/deployments\/{deploymentId}\/build": { "post": { - "summary": "Rebuild deployment", + "summary": "Create deployment build", "operationId": "functionsCreateBuild", "tags": [ "functions" @@ -9273,7 +9378,8 @@ }, "x-appwrite": { "method": "createBuild", - "weight": 303, + "group": "deployments", + "weight": 302, "cookies": false, "type": "", "deprecated": false, @@ -9358,7 +9464,8 @@ }, "x-appwrite": { "method": "updateDeploymentBuild", - "weight": 304, + "group": "deployments", + "weight": 303, "cookies": false, "type": "", "deprecated": false, @@ -9409,7 +9516,7 @@ }, "\/functions\/{functionId}\/deployments\/{deploymentId}\/download": { "get": { - "summary": "Download deployment", + "summary": "Get deployment download", "operationId": "functionsGetDeploymentDownload", "tags": [ "functions" @@ -9422,7 +9529,8 @@ }, "x-appwrite": { "method": "getDeploymentDownload", - "weight": 296, + "group": "deployments", + "weight": 295, "cookies": false, "type": "location", "deprecated": false, @@ -9495,7 +9603,8 @@ }, "x-appwrite": { "method": "listExecutions", - "weight": 306, + "group": "executions", + "weight": 305, "cookies": false, "type": "", "deprecated": false, @@ -9582,7 +9691,8 @@ }, "x-appwrite": { "method": "createExecution", - "weight": 305, + "group": "executions", + "weight": 304, "cookies": false, "type": "", "deprecated": false, @@ -9698,7 +9808,8 @@ }, "x-appwrite": { "method": "getExecution", - "weight": 307, + "group": "executions", + "weight": 306, "cookies": false, "type": "", "deprecated": false, @@ -9764,7 +9875,8 @@ }, "x-appwrite": { "method": "deleteExecution", - "weight": 308, + "group": "executions", + "weight": 307, "cookies": false, "type": "", "deprecated": false, @@ -9835,7 +9947,8 @@ }, "x-appwrite": { "method": "listVariables", - "weight": 310, + "group": "variables", + "weight": 309, "cookies": false, "type": "", "deprecated": false, @@ -9894,7 +10007,8 @@ }, "x-appwrite": { "method": "createVariable", - "weight": 309, + "group": "variables", + "weight": 308, "cookies": false, "type": "", "deprecated": false, @@ -9980,7 +10094,8 @@ }, "x-appwrite": { "method": "getVariable", - "weight": 311, + "group": "variables", + "weight": 310, "cookies": false, "type": "", "deprecated": false, @@ -10049,7 +10164,8 @@ }, "x-appwrite": { "method": "updateVariable", - "weight": 312, + "group": "variables", + "weight": 311, "cookies": false, "type": "", "deprecated": false, @@ -10135,7 +10251,8 @@ }, "x-appwrite": { "method": "deleteVariable", - "weight": 313, + "group": "variables", + "weight": 312, "cookies": false, "type": "", "deprecated": false, @@ -10206,7 +10323,8 @@ }, "x-appwrite": { "method": "query", - "weight": 331, + "group": "graphql", + "weight": 330, "cookies": false, "type": "graphql", "deprecated": false, @@ -10259,7 +10377,8 @@ }, "x-appwrite": { "method": "mutation", - "weight": 330, + "group": "graphql", + "weight": 329, "cookies": false, "type": "graphql", "deprecated": false, @@ -10312,6 +10431,7 @@ }, "x-appwrite": { "method": "get", + "group": "health", "weight": 125, "cookies": false, "type": "", @@ -10361,7 +10481,8 @@ }, "x-appwrite": { "method": "getAntivirus", - "weight": 147, + "group": "health", + "weight": 146, "cookies": false, "type": "", "deprecated": false, @@ -10410,6 +10531,7 @@ }, "x-appwrite": { "method": "getCache", + "group": "health", "weight": 128, "cookies": false, "type": "", @@ -10459,6 +10581,7 @@ }, "x-appwrite": { "method": "getCertificate", + "group": "health", "weight": 133, "cookies": false, "type": "", @@ -10519,6 +10642,7 @@ }, "x-appwrite": { "method": "getDB", + "group": "health", "weight": 127, "cookies": false, "type": "", @@ -10568,6 +10692,7 @@ }, "x-appwrite": { "method": "getPubSub", + "group": "health", "weight": 129, "cookies": false, "type": "", @@ -10617,6 +10742,7 @@ }, "x-appwrite": { "method": "getQueueBuilds", + "group": "queue", "weight": 135, "cookies": false, "type": "", @@ -10679,6 +10805,7 @@ }, "x-appwrite": { "method": "getQueueCertificates", + "group": "queue", "weight": 134, "cookies": false, "type": "", @@ -10741,6 +10868,7 @@ }, "x-appwrite": { "method": "getQueueDatabases", + "group": "queue", "weight": 136, "cookies": false, "type": "", @@ -10814,6 +10942,7 @@ }, "x-appwrite": { "method": "getQueueDeletes", + "group": "queue", "weight": 137, "cookies": false, "type": "", @@ -10876,7 +11005,8 @@ }, "x-appwrite": { "method": "getFailedJobs", - "weight": 148, + "group": "queue", + "weight": 147, "cookies": false, "type": "", "deprecated": false, @@ -10917,7 +11047,6 @@ "v1-functions", "v1-stats-resources", "v1-stats-usage", - "v1-stats-usage-dump", "v1-webhooks", "v1-certificates", "v1-builds", @@ -10965,6 +11094,7 @@ }, "x-appwrite": { "method": "getQueueFunctions", + "group": "queue", "weight": 141, "cookies": false, "type": "", @@ -11027,6 +11157,7 @@ }, "x-appwrite": { "method": "getQueueLogs", + "group": "queue", "weight": 132, "cookies": false, "type": "", @@ -11089,6 +11220,7 @@ }, "x-appwrite": { "method": "getQueueMails", + "group": "queue", "weight": 138, "cookies": false, "type": "", @@ -11151,6 +11283,7 @@ }, "x-appwrite": { "method": "getQueueMessaging", + "group": "queue", "weight": 139, "cookies": false, "type": "", @@ -11213,6 +11346,7 @@ }, "x-appwrite": { "method": "getQueueMigrations", + "group": "queue", "weight": 140, "cookies": false, "type": "", @@ -11275,6 +11409,7 @@ }, "x-appwrite": { "method": "getQueueStatsResources", + "group": "queue", "weight": 142, "cookies": false, "type": "", @@ -11337,6 +11472,7 @@ }, "x-appwrite": { "method": "getQueueUsage", + "group": "queue", "weight": 143, "cookies": false, "type": "", @@ -11377,68 +11513,6 @@ ] } }, - "\/health\/queue\/stats-usage-dump": { - "get": { - "summary": "Get usage dump queue", - "operationId": "healthGetQueueStatsUsageDump", - "tags": [ - "health" - ], - "description": "Get the number of projects containing metrics that are waiting to be processed in the Appwrite internal queue server.", - "responses": { - "200": { - "description": "Health Queue", - "content": { - "application\/json": { - "schema": { - "$ref": "#\/components\/schemas\/healthQueue" - } - } - } - } - }, - "x-appwrite": { - "method": "getQueueStatsUsageDump", - "weight": 144, - "cookies": false, - "type": "", - "deprecated": false, - "demo": "health\/get-queue-stats-usage-dump.md", - "edit": "https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-stats-usage-dump.md", - "rate-limit": 0, - "rate-time": 3600, - "rate-key": "url:{url},ip:{ip}", - "scope": "health.read", - "platforms": [ - "server" - ], - "packaging": false, - "auth": { - "Project": [], - "Key": [] - } - }, - "security": [ - { - "Project": [], - "Key": [] - } - ], - "parameters": [ - { - "name": "threshold", - "description": "Queue size threshold. When hit (equal or higher), endpoint returns server error. Default value is 5000.", - "required": false, - "schema": { - "type": "integer", - "format": "int32", - "default": 5000 - }, - "in": "query" - } - ] - } - }, "\/health\/queue\/webhooks": { "get": { "summary": "Get webhooks queue", @@ -11461,6 +11535,7 @@ }, "x-appwrite": { "method": "getQueueWebhooks", + "group": "queue", "weight": 131, "cookies": false, "type": "", @@ -11523,7 +11598,8 @@ }, "x-appwrite": { "method": "getStorage", - "weight": 146, + "group": "storage", + "weight": 145, "cookies": false, "type": "", "deprecated": false, @@ -11572,7 +11648,8 @@ }, "x-appwrite": { "method": "getStorageLocal", - "weight": 145, + "group": "storage", + "weight": 144, "cookies": false, "type": "", "deprecated": false, @@ -11621,6 +11698,7 @@ }, "x-appwrite": { "method": "getTime", + "group": "health", "weight": 130, "cookies": false, "type": "", @@ -11670,6 +11748,7 @@ }, "x-appwrite": { "method": "get", + "group": null, "weight": 117, "cookies": false, "type": "", @@ -11723,6 +11802,7 @@ }, "x-appwrite": { "method": "listCodes", + "group": null, "weight": 118, "cookies": false, "type": "", @@ -11776,6 +11856,7 @@ }, "x-appwrite": { "method": "listContinents", + "group": null, "weight": 122, "cookies": false, "type": "", @@ -11829,6 +11910,7 @@ }, "x-appwrite": { "method": "listCountries", + "group": null, "weight": 119, "cookies": false, "type": "", @@ -11882,6 +11964,7 @@ }, "x-appwrite": { "method": "listCountriesEU", + "group": null, "weight": 120, "cookies": false, "type": "", @@ -11935,6 +12018,7 @@ }, "x-appwrite": { "method": "listCountriesPhones", + "group": null, "weight": 121, "cookies": false, "type": "", @@ -11988,6 +12072,7 @@ }, "x-appwrite": { "method": "listCurrencies", + "group": null, "weight": 123, "cookies": false, "type": "", @@ -12041,6 +12126,7 @@ }, "x-appwrite": { "method": "listLanguages", + "group": null, "weight": 124, "cookies": false, "type": "", @@ -12094,7 +12180,8 @@ }, "x-appwrite": { "method": "listMessages", - "weight": 384, + "group": "messages", + "weight": 383, "cookies": false, "type": "", "deprecated": false, @@ -12170,7 +12257,8 @@ }, "x-appwrite": { "method": "createEmail", - "weight": 381, + "group": "messages", + "weight": 380, "cookies": false, "type": "", "deprecated": false, @@ -12314,7 +12402,8 @@ }, "x-appwrite": { "method": "updateEmail", - "weight": 388, + "group": "messages", + "weight": 387, "cookies": false, "type": "", "deprecated": false, @@ -12460,7 +12549,8 @@ }, "x-appwrite": { "method": "createPush", - "weight": 383, + "group": "messages", + "weight": 382, "cookies": false, "type": "", "deprecated": false, @@ -12634,7 +12724,8 @@ }, "x-appwrite": { "method": "updatePush", - "weight": 390, + "group": "messages", + "weight": 389, "cookies": false, "type": "", "deprecated": false, @@ -12812,7 +12903,8 @@ }, "x-appwrite": { "method": "createSms", - "weight": 382, + "group": "messages", + "weight": 381, "cookies": false, "type": "", "deprecated": false, @@ -12921,7 +13013,8 @@ }, "x-appwrite": { "method": "updateSms", - "weight": 389, + "group": "messages", + "weight": 388, "cookies": false, "type": "", "deprecated": false, @@ -13033,7 +13126,8 @@ }, "x-appwrite": { "method": "getMessage", - "weight": 387, + "group": "messages", + "weight": 386, "cookies": false, "type": "", "deprecated": false, @@ -13086,7 +13180,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 391, + "group": "messages", + "weight": 390, "cookies": false, "type": "", "deprecated": false, @@ -13148,7 +13243,8 @@ }, "x-appwrite": { "method": "listMessageLogs", - "weight": 385, + "group": "logs", + "weight": 384, "cookies": false, "type": "", "deprecated": false, @@ -13223,7 +13319,8 @@ }, "x-appwrite": { "method": "listTargets", - "weight": 386, + "group": "messages", + "weight": 385, "cookies": false, "type": "", "deprecated": false, @@ -13298,7 +13395,8 @@ }, "x-appwrite": { "method": "listProviders", - "weight": 356, + "group": "providers", + "weight": 355, "cookies": false, "type": "", "deprecated": false, @@ -13374,7 +13472,8 @@ }, "x-appwrite": { "method": "createApnsProvider", - "weight": 355, + "group": "providers", + "weight": 354, "cookies": false, "type": "", "deprecated": false, @@ -13479,7 +13578,8 @@ }, "x-appwrite": { "method": "updateApnsProvider", - "weight": 368, + "group": "providers", + "weight": 367, "cookies": false, "type": "", "deprecated": false, @@ -13587,7 +13687,8 @@ }, "x-appwrite": { "method": "createFcmProvider", - "weight": 354, + "group": "providers", + "weight": 353, "cookies": false, "type": "", "deprecated": false, @@ -13672,7 +13773,8 @@ }, "x-appwrite": { "method": "updateFcmProvider", - "weight": 367, + "group": "providers", + "weight": 366, "cookies": false, "type": "", "deprecated": false, @@ -13760,7 +13862,8 @@ }, "x-appwrite": { "method": "createMailgunProvider", - "weight": 346, + "group": "providers", + "weight": 345, "cookies": false, "type": "", "deprecated": false, @@ -13875,7 +13978,8 @@ }, "x-appwrite": { "method": "updateMailgunProvider", - "weight": 359, + "group": "providers", + "weight": 358, "cookies": false, "type": "", "deprecated": false, @@ -13993,7 +14097,8 @@ }, "x-appwrite": { "method": "createMsg91Provider", - "weight": 349, + "group": "providers", + "weight": 348, "cookies": false, "type": "", "deprecated": false, @@ -14088,7 +14193,8 @@ }, "x-appwrite": { "method": "updateMsg91Provider", - "weight": 362, + "group": "providers", + "weight": 361, "cookies": false, "type": "", "deprecated": false, @@ -14186,7 +14292,8 @@ }, "x-appwrite": { "method": "createSendgridProvider", - "weight": 347, + "group": "providers", + "weight": 346, "cookies": false, "type": "", "deprecated": false, @@ -14291,7 +14398,8 @@ }, "x-appwrite": { "method": "updateSendgridProvider", - "weight": 360, + "group": "providers", + "weight": 359, "cookies": false, "type": "", "deprecated": false, @@ -14399,7 +14507,8 @@ }, "x-appwrite": { "method": "createSmtpProvider", - "weight": 348, + "group": "providers", + "weight": 347, "cookies": false, "type": "", "deprecated": false, @@ -14542,7 +14651,8 @@ }, "x-appwrite": { "method": "updateSmtpProvider", - "weight": 361, + "group": "providers", + "weight": 360, "cookies": false, "type": "", "deprecated": false, @@ -14687,7 +14797,8 @@ }, "x-appwrite": { "method": "createTelesignProvider", - "weight": 350, + "group": "providers", + "weight": 349, "cookies": false, "type": "", "deprecated": false, @@ -14782,7 +14893,8 @@ }, "x-appwrite": { "method": "updateTelesignProvider", - "weight": 363, + "group": "providers", + "weight": 362, "cookies": false, "type": "", "deprecated": false, @@ -14880,7 +14992,8 @@ }, "x-appwrite": { "method": "createTextmagicProvider", - "weight": 351, + "group": "providers", + "weight": 350, "cookies": false, "type": "", "deprecated": false, @@ -14975,7 +15088,8 @@ }, "x-appwrite": { "method": "updateTextmagicProvider", - "weight": 364, + "group": "providers", + "weight": 363, "cookies": false, "type": "", "deprecated": false, @@ -15073,7 +15187,8 @@ }, "x-appwrite": { "method": "createTwilioProvider", - "weight": 352, + "group": "providers", + "weight": 351, "cookies": false, "type": "", "deprecated": false, @@ -15168,7 +15283,8 @@ }, "x-appwrite": { "method": "updateTwilioProvider", - "weight": 365, + "group": "providers", + "weight": 364, "cookies": false, "type": "", "deprecated": false, @@ -15266,7 +15382,8 @@ }, "x-appwrite": { "method": "createVonageProvider", - "weight": 353, + "group": "providers", + "weight": 352, "cookies": false, "type": "", "deprecated": false, @@ -15361,7 +15478,8 @@ }, "x-appwrite": { "method": "updateVonageProvider", - "weight": 366, + "group": "providers", + "weight": 365, "cookies": false, "type": "", "deprecated": false, @@ -15459,7 +15577,8 @@ }, "x-appwrite": { "method": "getProvider", - "weight": 358, + "group": "providers", + "weight": 357, "cookies": false, "type": "", "deprecated": false, @@ -15512,7 +15631,8 @@ }, "x-appwrite": { "method": "deleteProvider", - "weight": 369, + "group": "providers", + "weight": 368, "cookies": false, "type": "", "deprecated": false, @@ -15574,7 +15694,8 @@ }, "x-appwrite": { "method": "listProviderLogs", - "weight": 357, + "group": "providers", + "weight": 356, "cookies": false, "type": "", "deprecated": false, @@ -15649,7 +15770,8 @@ }, "x-appwrite": { "method": "listSubscriberLogs", - "weight": 378, + "group": "subscribers", + "weight": 377, "cookies": false, "type": "", "deprecated": false, @@ -15724,7 +15846,8 @@ }, "x-appwrite": { "method": "listTopics", - "weight": 371, + "group": "topics", + "weight": 370, "cookies": false, "type": "", "deprecated": false, @@ -15798,7 +15921,8 @@ }, "x-appwrite": { "method": "createTopic", - "weight": 370, + "group": "topics", + "weight": 369, "cookies": false, "type": "", "deprecated": false, @@ -15881,7 +16005,8 @@ }, "x-appwrite": { "method": "getTopic", - "weight": 373, + "group": "topics", + "weight": 372, "cookies": false, "type": "", "deprecated": false, @@ -15941,7 +16066,8 @@ }, "x-appwrite": { "method": "updateTopic", - "weight": 374, + "group": "topics", + "weight": 373, "cookies": false, "type": "", "deprecated": false, @@ -16018,7 +16144,8 @@ }, "x-appwrite": { "method": "deleteTopic", - "weight": 375, + "group": "topics", + "weight": 374, "cookies": false, "type": "", "deprecated": false, @@ -16080,7 +16207,8 @@ }, "x-appwrite": { "method": "listTopicLogs", - "weight": 372, + "group": "topics", + "weight": 371, "cookies": false, "type": "", "deprecated": false, @@ -16155,7 +16283,8 @@ }, "x-appwrite": { "method": "listSubscribers", - "weight": 377, + "group": "subscribers", + "weight": 376, "cookies": false, "type": "", "deprecated": false, @@ -16239,7 +16368,8 @@ }, "x-appwrite": { "method": "createSubscriber", - "weight": 376, + "group": "subscribers", + "weight": 375, "cookies": false, "type": "", "deprecated": false, @@ -16330,7 +16460,8 @@ }, "x-appwrite": { "method": "getSubscriber", - "weight": 379, + "group": "subscribers", + "weight": 378, "cookies": false, "type": "", "deprecated": false, @@ -16393,7 +16524,8 @@ }, "x-appwrite": { "method": "deleteSubscriber", - "weight": 380, + "group": "subscribers", + "weight": 379, "cookies": false, "type": "", "deprecated": false, @@ -16469,7 +16601,8 @@ }, "x-appwrite": { "method": "listBuckets", - "weight": 203, + "group": "buckets", + "weight": 202, "cookies": false, "type": "", "deprecated": false, @@ -16542,7 +16675,8 @@ }, "x-appwrite": { "method": "createBucket", - "weight": 202, + "group": "buckets", + "weight": 201, "cookies": false, "type": "", "deprecated": false, @@ -16669,7 +16803,8 @@ }, "x-appwrite": { "method": "getBucket", - "weight": 204, + "group": "buckets", + "weight": 203, "cookies": false, "type": "", "deprecated": false, @@ -16728,7 +16863,8 @@ }, "x-appwrite": { "method": "updateBucket", - "weight": 205, + "group": "buckets", + "weight": 204, "cookies": false, "type": "", "deprecated": false, @@ -16852,7 +16988,8 @@ }, "x-appwrite": { "method": "deleteBucket", - "weight": 206, + "group": "buckets", + "weight": 205, "cookies": false, "type": "", "deprecated": false, @@ -16913,7 +17050,8 @@ }, "x-appwrite": { "method": "listFiles", - "weight": 208, + "group": "files", + "weight": 207, "cookies": false, "type": "", "deprecated": false, @@ -17000,7 +17138,8 @@ }, "x-appwrite": { "method": "createFile", - "weight": 207, + "group": "files", + "weight": 206, "cookies": false, "type": "upload", "deprecated": false, @@ -17099,7 +17238,8 @@ }, "x-appwrite": { "method": "getFile", - "weight": 209, + "group": "files", + "weight": 208, "cookies": false, "type": "", "deprecated": false, @@ -17172,7 +17312,8 @@ }, "x-appwrite": { "method": "updateFile", - "weight": 214, + "group": "files", + "weight": 213, "cookies": false, "type": "", "deprecated": false, @@ -17262,7 +17403,8 @@ }, "x-appwrite": { "method": "deleteFile", - "weight": 215, + "group": "files", + "weight": 214, "cookies": false, "type": "", "deprecated": false, @@ -17330,7 +17472,8 @@ }, "x-appwrite": { "method": "getFileDownload", - "weight": 211, + "group": "files", + "weight": 210, "cookies": false, "type": "location", "deprecated": false, @@ -17398,7 +17541,8 @@ }, "x-appwrite": { "method": "getFilePreview", - "weight": 210, + "group": "files", + "weight": 209, "cookies": false, "type": "location", "deprecated": false, @@ -17616,7 +17760,8 @@ }, "x-appwrite": { "method": "getFileView", - "weight": 212, + "group": "files", + "weight": 211, "cookies": false, "type": "location", "deprecated": false, @@ -17691,7 +17836,8 @@ }, "x-appwrite": { "method": "list", - "weight": 219, + "group": "teams", + "weight": 218, "cookies": false, "type": "", "deprecated": false, @@ -17768,7 +17914,8 @@ }, "x-appwrite": { "method": "create", - "weight": 218, + "group": "teams", + "weight": 217, "cookies": false, "type": "", "deprecated": false, @@ -17854,7 +18001,8 @@ }, "x-appwrite": { "method": "get", - "weight": 220, + "group": "teams", + "weight": 219, "cookies": false, "type": "", "deprecated": false, @@ -17917,7 +18065,8 @@ }, "x-appwrite": { "method": "updateName", - "weight": 222, + "group": "teams", + "weight": 221, "cookies": false, "type": "", "deprecated": false, @@ -17992,7 +18141,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 224, + "group": "teams", + "weight": 223, "cookies": false, "type": "", "deprecated": false, @@ -18057,7 +18207,8 @@ }, "x-appwrite": { "method": "listMemberships", - "weight": 226, + "group": "memberships", + "weight": 225, "cookies": false, "type": "", "deprecated": false, @@ -18144,7 +18295,8 @@ }, "x-appwrite": { "method": "createMembership", - "weight": 225, + "group": "memberships", + "weight": 224, "cookies": false, "type": "", "deprecated": false, @@ -18256,7 +18408,8 @@ }, "x-appwrite": { "method": "getMembership", - "weight": 227, + "group": "memberships", + "weight": 226, "cookies": false, "type": "", "deprecated": false, @@ -18329,7 +18482,8 @@ }, "x-appwrite": { "method": "updateMembership", - "weight": 228, + "group": "memberships", + "weight": 227, "cookies": false, "type": "", "deprecated": false, @@ -18417,7 +18571,8 @@ }, "x-appwrite": { "method": "deleteMembership", - "weight": 230, + "group": "memberships", + "weight": 229, "cookies": false, "type": "", "deprecated": false, @@ -18492,7 +18647,8 @@ }, "x-appwrite": { "method": "updateMembershipStatus", - "weight": 229, + "group": "memberships", + "weight": 228, "cookies": false, "type": "", "deprecated": false, @@ -18590,7 +18746,8 @@ }, "x-appwrite": { "method": "getPrefs", - "weight": 221, + "group": "teams", + "weight": 220, "cookies": false, "type": "", "deprecated": false, @@ -18651,7 +18808,8 @@ }, "x-appwrite": { "method": "updatePrefs", - "weight": 223, + "group": "teams", + "weight": 222, "cookies": false, "type": "", "deprecated": false, @@ -18733,7 +18891,8 @@ }, "x-appwrite": { "method": "list", - "weight": 241, + "group": "users", + "weight": 240, "cookies": false, "type": "", "deprecated": false, @@ -18806,7 +18965,8 @@ }, "x-appwrite": { "method": "create", - "weight": 232, + "group": "users", + "weight": 231, "cookies": false, "type": "", "deprecated": false, @@ -18894,7 +19054,8 @@ }, "x-appwrite": { "method": "createArgon2User", - "weight": 235, + "group": "users", + "weight": 234, "cookies": false, "type": "", "deprecated": false, @@ -18979,7 +19140,8 @@ }, "x-appwrite": { "method": "createBcryptUser", - "weight": 233, + "group": "users", + "weight": 232, "cookies": false, "type": "", "deprecated": false, @@ -19064,7 +19226,8 @@ }, "x-appwrite": { "method": "listIdentities", - "weight": 249, + "group": "identities", + "weight": 248, "cookies": false, "type": "", "deprecated": false, @@ -19132,7 +19295,8 @@ }, "x-appwrite": { "method": "deleteIdentity", - "weight": 272, + "group": "identities", + "weight": 271, "cookies": false, "type": "", "deprecated": false, @@ -19193,7 +19357,8 @@ }, "x-appwrite": { "method": "createMD5User", - "weight": 234, + "group": "users", + "weight": 233, "cookies": false, "type": "", "deprecated": false, @@ -19278,7 +19443,8 @@ }, "x-appwrite": { "method": "createPHPassUser", - "weight": 237, + "group": "users", + "weight": 236, "cookies": false, "type": "", "deprecated": false, @@ -19363,7 +19529,8 @@ }, "x-appwrite": { "method": "createScryptUser", - "weight": 238, + "group": "users", + "weight": 237, "cookies": false, "type": "", "deprecated": false, @@ -19478,7 +19645,8 @@ }, "x-appwrite": { "method": "createScryptModifiedUser", - "weight": 239, + "group": "users", + "weight": 238, "cookies": false, "type": "", "deprecated": false, @@ -19581,7 +19749,8 @@ }, "x-appwrite": { "method": "createSHAUser", - "weight": 236, + "group": "users", + "weight": 235, "cookies": false, "type": "", "deprecated": false, @@ -19686,7 +19855,8 @@ }, "x-appwrite": { "method": "get", - "weight": 242, + "group": "users", + "weight": 241, "cookies": false, "type": "", "deprecated": false, @@ -19738,7 +19908,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 270, + "group": "users", + "weight": 269, "cookies": false, "type": "", "deprecated": false, @@ -19799,7 +19970,8 @@ }, "x-appwrite": { "method": "updateEmail", - "weight": 255, + "group": "users", + "weight": 254, "cookies": false, "type": "", "deprecated": false, @@ -19879,7 +20051,8 @@ }, "x-appwrite": { "method": "createJWT", - "weight": 273, + "group": "sessions", + "weight": 272, "cookies": false, "type": "", "deprecated": false, @@ -19961,7 +20134,8 @@ }, "x-appwrite": { "method": "updateLabels", - "weight": 251, + "group": "users", + "weight": 250, "cookies": false, "type": "", "deprecated": false, @@ -20044,7 +20218,8 @@ }, "x-appwrite": { "method": "listLogs", - "weight": 247, + "group": "logs", + "weight": 246, "cookies": false, "type": "", "deprecated": false, @@ -20118,7 +20293,8 @@ }, "x-appwrite": { "method": "listMemberships", - "weight": 246, + "group": "memberships", + "weight": 245, "cookies": false, "type": "", "deprecated": false, @@ -20179,7 +20355,8 @@ }, "x-appwrite": { "method": "updateMfa", - "weight": 260, + "group": "users", + "weight": 259, "cookies": false, "type": "", "deprecated": false, @@ -20252,7 +20429,8 @@ }, "x-appwrite": { "method": "deleteMfaAuthenticator", - "weight": 265, + "group": "mfa", + "weight": 264, "cookies": false, "type": "", "deprecated": false, @@ -20328,7 +20506,8 @@ }, "x-appwrite": { "method": "listMfaFactors", - "weight": 261, + "group": "mfa", + "weight": 260, "cookies": false, "type": "", "deprecated": false, @@ -20389,7 +20568,8 @@ }, "x-appwrite": { "method": "getMfaRecoveryCodes", - "weight": 262, + "group": "mfa", + "weight": 261, "cookies": false, "type": "", "deprecated": false, @@ -20428,7 +20608,7 @@ ] }, "put": { - "summary": "Regenerate MFA recovery codes", + "summary": "Update MFA recovery codes (regenerate)", "operationId": "usersUpdateMfaRecoveryCodes", "tags": [ "users" @@ -20448,7 +20628,8 @@ }, "x-appwrite": { "method": "updateMfaRecoveryCodes", - "weight": 264, + "group": "mfa", + "weight": 263, "cookies": false, "type": "", "deprecated": false, @@ -20507,7 +20688,8 @@ }, "x-appwrite": { "method": "createMfaRecoveryCodes", - "weight": 263, + "group": "mfa", + "weight": 262, "cookies": false, "type": "", "deprecated": false, @@ -20568,7 +20750,8 @@ }, "x-appwrite": { "method": "updateName", - "weight": 253, + "group": "users", + "weight": 252, "cookies": false, "type": "", "deprecated": false, @@ -20648,7 +20831,8 @@ }, "x-appwrite": { "method": "updatePassword", - "weight": 254, + "group": "users", + "weight": 253, "cookies": false, "type": "", "deprecated": false, @@ -20728,7 +20912,8 @@ }, "x-appwrite": { "method": "updatePhone", - "weight": 256, + "group": "users", + "weight": 255, "cookies": false, "type": "", "deprecated": false, @@ -20808,7 +20993,8 @@ }, "x-appwrite": { "method": "getPrefs", - "weight": 243, + "group": "users", + "weight": 242, "cookies": false, "type": "", "deprecated": false, @@ -20867,7 +21053,8 @@ }, "x-appwrite": { "method": "updatePrefs", - "weight": 258, + "group": "users", + "weight": 257, "cookies": false, "type": "", "deprecated": false, @@ -20947,7 +21134,8 @@ }, "x-appwrite": { "method": "listSessions", - "weight": 245, + "group": "sessions", + "weight": 244, "cookies": false, "type": "", "deprecated": false, @@ -21006,7 +21194,8 @@ }, "x-appwrite": { "method": "createSession", - "weight": 266, + "group": "sessions", + "weight": 265, "cookies": false, "type": "", "deprecated": false, @@ -21058,7 +21247,8 @@ }, "x-appwrite": { "method": "deleteSessions", - "weight": 269, + "group": "sessions", + "weight": 268, "cookies": false, "type": "", "deprecated": false, @@ -21112,7 +21302,8 @@ }, "x-appwrite": { "method": "deleteSession", - "weight": 268, + "group": "sessions", + "weight": 267, "cookies": false, "type": "", "deprecated": false, @@ -21183,7 +21374,8 @@ }, "x-appwrite": { "method": "updateStatus", - "weight": 250, + "group": "users", + "weight": 249, "cookies": false, "type": "", "deprecated": false, @@ -21263,7 +21455,8 @@ }, "x-appwrite": { "method": "listTargets", - "weight": 248, + "group": "targets", + "weight": 247, "cookies": false, "type": "", "deprecated": false, @@ -21336,7 +21529,8 @@ }, "x-appwrite": { "method": "createTarget", - "weight": 240, + "group": "targets", + "weight": 239, "cookies": false, "type": "", "deprecated": false, @@ -21446,7 +21640,8 @@ }, "x-appwrite": { "method": "getTarget", - "weight": 244, + "group": "targets", + "weight": 243, "cookies": false, "type": "", "deprecated": false, @@ -21516,7 +21711,8 @@ }, "x-appwrite": { "method": "updateTarget", - "weight": 259, + "group": "targets", + "weight": 258, "cookies": false, "type": "", "deprecated": false, @@ -21605,7 +21801,8 @@ }, "x-appwrite": { "method": "deleteTarget", - "weight": 271, + "group": "targets", + "weight": 270, "cookies": false, "type": "", "deprecated": false, @@ -21677,7 +21874,8 @@ }, "x-appwrite": { "method": "createToken", - "weight": 267, + "group": "sessions", + "weight": 266, "cookies": false, "type": "", "deprecated": false, @@ -21759,7 +21957,8 @@ }, "x-appwrite": { "method": "updateEmailVerification", - "weight": 257, + "group": "users", + "weight": 256, "cookies": false, "type": "", "deprecated": false, @@ -21839,7 +22038,8 @@ }, "x-appwrite": { "method": "updatePhoneVerification", - "weight": 252, + "group": "users", + "weight": 251, "cookies": false, "type": "", "deprecated": false, diff --git a/app/config/specs/swagger2-1.6.x-client.json b/app/config/specs/swagger2-1.6.x-client.json index 8960bfaa5c..4ed78c45a9 100644 --- a/app/config/specs/swagger2-1.6.x-client.json +++ b/app/config/specs/swagger2-1.6.x-client.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "version": "1.6.1", + "version": "1.6.2", "title": "Appwrite", "description": "Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)", "termsOfService": "https:\/\/appwrite.io\/policy\/terms", @@ -87,6 +87,7 @@ }, "x-appwrite": { "method": "get", + "group": "account", "weight": 9, "cookies": false, "type": "", @@ -137,6 +138,7 @@ }, "x-appwrite": { "method": "create", + "group": "account", "weight": 8, "cookies": false, "type": "", @@ -227,6 +229,7 @@ }, "x-appwrite": { "method": "updateEmail", + "group": "account", "weight": 34, "cookies": false, "type": "", @@ -306,6 +309,7 @@ }, "x-appwrite": { "method": "listIdentities", + "group": "identities", "weight": 57, "cookies": false, "type": "", @@ -367,6 +371,7 @@ }, "x-appwrite": { "method": "deleteIdentity", + "group": "identities", "weight": 58, "cookies": false, "type": "", @@ -429,6 +434,7 @@ }, "x-appwrite": { "method": "createJWT", + "group": "tokens", "weight": 29, "cookies": false, "type": "", @@ -479,6 +485,7 @@ }, "x-appwrite": { "method": "listLogs", + "group": "logs", "weight": 31, "cookies": false, "type": "", @@ -545,6 +552,7 @@ }, "x-appwrite": { "method": "updateMFA", + "group": "mfa", "weight": 44, "cookies": false, "type": "", @@ -617,6 +625,7 @@ }, "x-appwrite": { "method": "createMfaAuthenticator", + "group": "mfa", "weight": 46, "cookies": false, "type": "", @@ -660,7 +669,7 @@ ] }, "put": { - "summary": "Verify authenticator", + "summary": "Update authenticator (confirmation)", "operationId": "accountUpdateMfaAuthenticator", "consumes": [ "application\/json" @@ -682,6 +691,7 @@ }, "x-appwrite": { "method": "updateMfaAuthenticator", + "group": "mfa", "weight": 47, "cookies": false, "type": "", @@ -760,6 +770,7 @@ }, "x-appwrite": { "method": "deleteMfaAuthenticator", + "group": "mfa", "weight": 51, "cookies": false, "type": "", @@ -827,6 +838,7 @@ }, "x-appwrite": { "method": "createMfaChallenge", + "group": "mfa", "weight": 52, "cookies": false, "type": "", @@ -881,7 +893,7 @@ ] }, "put": { - "summary": "Create MFA challenge (confirmation)", + "summary": "Update MFA challenge (confirmation)", "operationId": "accountUpdateMfaChallenge", "consumes": [ "application\/json" @@ -903,6 +915,7 @@ }, "x-appwrite": { "method": "updateMfaChallenge", + "group": "mfa", "weight": 53, "cookies": false, "type": "", @@ -982,6 +995,7 @@ }, "x-appwrite": { "method": "listMfaFactors", + "group": "mfa", "weight": 45, "cookies": false, "type": "", @@ -1012,7 +1026,7 @@ }, "\/account\/mfa\/recovery-codes": { "get": { - "summary": "Get MFA recovery codes", + "summary": "List MFA recovery codes", "operationId": "accountGetMfaRecoveryCodes", "consumes": [ "application\/json" @@ -1034,6 +1048,7 @@ }, "x-appwrite": { "method": "getMfaRecoveryCodes", + "group": "mfa", "weight": 50, "cookies": false, "type": "", @@ -1084,6 +1099,7 @@ }, "x-appwrite": { "method": "createMfaRecoveryCodes", + "group": "mfa", "weight": 48, "cookies": false, "type": "", @@ -1112,7 +1128,7 @@ ] }, "patch": { - "summary": "Regenerate MFA recovery codes", + "summary": "Update MFA recovery codes (regenerate)", "operationId": "accountUpdateMfaRecoveryCodes", "consumes": [ "application\/json" @@ -1134,6 +1150,7 @@ }, "x-appwrite": { "method": "updateMfaRecoveryCodes", + "group": "mfa", "weight": 49, "cookies": false, "type": "", @@ -1186,6 +1203,7 @@ }, "x-appwrite": { "method": "updateName", + "group": "account", "weight": 32, "cookies": false, "type": "", @@ -1258,6 +1276,7 @@ }, "x-appwrite": { "method": "updatePassword", + "group": "account", "weight": 33, "cookies": false, "type": "", @@ -1336,6 +1355,7 @@ }, "x-appwrite": { "method": "updatePhone", + "group": "account", "weight": 35, "cookies": false, "type": "", @@ -1415,6 +1435,7 @@ }, "x-appwrite": { "method": "getPrefs", + "group": "account", "weight": 30, "cookies": false, "type": "", @@ -1465,6 +1486,7 @@ }, "x-appwrite": { "method": "updatePrefs", + "group": "account", "weight": 36, "cookies": false, "type": "", @@ -1537,6 +1559,7 @@ }, "x-appwrite": { "method": "createRecovery", + "group": "recovery", "weight": 38, "cookies": false, "type": "", @@ -1595,7 +1618,7 @@ ] }, "put": { - "summary": "Create password recovery (confirmation)", + "summary": "Update password recovery (confirmation)", "operationId": "accountUpdateRecovery", "consumes": [ "application\/json" @@ -1617,6 +1640,7 @@ }, "x-appwrite": { "method": "updateRecovery", + "group": "recovery", "weight": 39, "cookies": false, "type": "", @@ -1703,6 +1727,7 @@ }, "x-appwrite": { "method": "listSessions", + "group": "sessions", "weight": 11, "cookies": false, "type": "", @@ -1748,6 +1773,7 @@ }, "x-appwrite": { "method": "deleteSessions", + "group": "sessions", "weight": 12, "cookies": false, "type": "", @@ -1800,6 +1826,7 @@ }, "x-appwrite": { "method": "createAnonymousSession", + "group": "sessions", "weight": 17, "cookies": false, "type": "", @@ -1850,6 +1877,7 @@ }, "x-appwrite": { "method": "createEmailPasswordSession", + "group": "sessions", "weight": 16, "cookies": false, "type": "", @@ -1927,6 +1955,7 @@ }, "x-appwrite": { "method": "updateMagicURLSession", + "group": "sessions", "weight": 26, "cookies": false, "type": "", @@ -2001,6 +2030,7 @@ }, "x-appwrite": { "method": "createOAuth2Session", + "group": "sessions", "weight": 19, "cookies": false, "type": "webAuth", @@ -2028,7 +2058,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", "required": true, "type": "string", "x-example": "amazon", @@ -2047,6 +2077,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -2136,6 +2167,7 @@ }, "x-appwrite": { "method": "updatePhoneSession", + "group": "sessions", "weight": 27, "cookies": false, "type": "", @@ -2213,6 +2245,7 @@ }, "x-appwrite": { "method": "createSession", + "group": "sessions", "weight": 18, "cookies": false, "type": "", @@ -2290,6 +2323,7 @@ }, "x-appwrite": { "method": "getSession", + "group": "sessions", "weight": 13, "cookies": false, "type": "", @@ -2350,6 +2384,7 @@ }, "x-appwrite": { "method": "updateSession", + "group": "sessions", "weight": 15, "cookies": false, "type": "", @@ -2405,6 +2440,7 @@ }, "x-appwrite": { "method": "deleteSession", + "group": "sessions", "weight": 14, "cookies": false, "type": "", @@ -2467,6 +2503,7 @@ }, "x-appwrite": { "method": "updateStatus", + "group": "account", "weight": 37, "cookies": false, "type": "", @@ -2519,6 +2556,7 @@ }, "x-appwrite": { "method": "createPushTarget", + "group": "pushTargets", "weight": 54, "cookies": false, "type": "", @@ -2602,6 +2640,7 @@ }, "x-appwrite": { "method": "updatePushTarget", + "group": "pushTargets", "weight": 55, "cookies": false, "type": "", @@ -2673,6 +2712,7 @@ }, "x-appwrite": { "method": "deletePushTarget", + "group": "pushTargets", "weight": 56, "cookies": false, "type": "", @@ -2733,6 +2773,7 @@ }, "x-appwrite": { "method": "createEmailToken", + "group": "tokens", "weight": 25, "cookies": false, "type": "", @@ -2816,6 +2857,7 @@ }, "x-appwrite": { "method": "createMagicURLToken", + "group": "tokens", "weight": 24, "cookies": false, "type": "", @@ -2905,6 +2947,7 @@ }, "x-appwrite": { "method": "createOAuth2Token", + "group": "tokens", "weight": 23, "cookies": false, "type": "webAuth", @@ -2932,7 +2975,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", "required": true, "type": "string", "x-example": "amazon", @@ -2951,6 +2994,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -3040,6 +3084,7 @@ }, "x-appwrite": { "method": "createPhoneToken", + "group": "tokens", "weight": 28, "cookies": false, "type": "", @@ -3120,6 +3165,7 @@ }, "x-appwrite": { "method": "createVerification", + "group": "verification", "weight": 40, "cookies": false, "type": "", @@ -3168,7 +3214,7 @@ ] }, "put": { - "summary": "Create email verification (confirmation)", + "summary": "Update email verification (confirmation)", "operationId": "accountUpdateVerification", "consumes": [ "application\/json" @@ -3190,6 +3236,7 @@ }, "x-appwrite": { "method": "updateVerification", + "group": "verification", "weight": 41, "cookies": false, "type": "", @@ -3269,6 +3316,7 @@ }, "x-appwrite": { "method": "createPhoneVerification", + "group": "verification", "weight": 42, "cookies": false, "type": "", @@ -3322,6 +3370,7 @@ }, "x-appwrite": { "method": "updatePhoneVerification", + "group": "verification", "weight": 43, "cookies": false, "type": "", @@ -3401,6 +3450,7 @@ }, "x-appwrite": { "method": "getBrowser", + "group": null, "weight": 60, "cookies": false, "type": "location", @@ -3527,6 +3577,7 @@ }, "x-appwrite": { "method": "getCreditCard", + "group": null, "weight": 59, "cookies": false, "type": "location", @@ -3659,6 +3710,7 @@ }, "x-appwrite": { "method": "getFavicon", + "group": null, "weight": 63, "cookies": false, "type": "location", @@ -3723,6 +3775,7 @@ }, "x-appwrite": { "method": "getFlag", + "group": null, "weight": 61, "cookies": false, "type": "location", @@ -4211,6 +4264,7 @@ }, "x-appwrite": { "method": "getImage", + "group": null, "weight": 62, "cookies": false, "type": "location", @@ -4295,6 +4349,7 @@ }, "x-appwrite": { "method": "getInitials", + "group": null, "weight": 65, "cookies": false, "type": "location", @@ -4387,6 +4442,7 @@ }, "x-appwrite": { "method": "getQR", + "group": null, "weight": 64, "cookies": false, "type": "location", @@ -4479,6 +4535,7 @@ }, "x-appwrite": { "method": "listDocuments", + "group": "documents", "weight": 109, "cookies": false, "type": "", @@ -4560,6 +4617,7 @@ }, "x-appwrite": { "method": "createDocument", + "group": "documents", "weight": 108, "cookies": false, "type": "", @@ -4665,6 +4723,7 @@ }, "x-appwrite": { "method": "getDocument", + "group": "documents", "weight": 110, "cookies": false, "type": "", @@ -4754,6 +4813,7 @@ }, "x-appwrite": { "method": "updateDocument", + "group": "documents", "weight": 112, "cookies": false, "type": "", @@ -4850,6 +4910,7 @@ }, "x-appwrite": { "method": "deleteDocument", + "group": "documents", "weight": 113, "cookies": false, "type": "", @@ -4929,7 +4990,8 @@ }, "x-appwrite": { "method": "listExecutions", - "weight": 306, + "group": "executions", + "weight": 305, "cookies": false, "type": "", "deprecated": false, @@ -5011,7 +5073,8 @@ }, "x-appwrite": { "method": "createExecution", - "weight": 305, + "group": "executions", + "weight": 304, "cookies": false, "type": "", "deprecated": false, @@ -5129,7 +5192,8 @@ }, "x-appwrite": { "method": "getExecution", - "weight": 307, + "group": "executions", + "weight": 306, "cookies": false, "type": "", "deprecated": false, @@ -5200,7 +5264,8 @@ }, "x-appwrite": { "method": "query", - "weight": 331, + "group": "graphql", + "weight": 330, "cookies": false, "type": "graphql", "deprecated": false, @@ -5273,7 +5338,8 @@ }, "x-appwrite": { "method": "mutation", - "weight": 330, + "group": "graphql", + "weight": 329, "cookies": false, "type": "graphql", "deprecated": false, @@ -5346,6 +5412,7 @@ }, "x-appwrite": { "method": "get", + "group": null, "weight": 117, "cookies": false, "type": "", @@ -5399,6 +5466,7 @@ }, "x-appwrite": { "method": "listCodes", + "group": null, "weight": 118, "cookies": false, "type": "", @@ -5452,6 +5520,7 @@ }, "x-appwrite": { "method": "listContinents", + "group": null, "weight": 122, "cookies": false, "type": "", @@ -5505,6 +5574,7 @@ }, "x-appwrite": { "method": "listCountries", + "group": null, "weight": 119, "cookies": false, "type": "", @@ -5558,6 +5628,7 @@ }, "x-appwrite": { "method": "listCountriesEU", + "group": null, "weight": 120, "cookies": false, "type": "", @@ -5611,6 +5682,7 @@ }, "x-appwrite": { "method": "listCountriesPhones", + "group": null, "weight": 121, "cookies": false, "type": "", @@ -5664,6 +5736,7 @@ }, "x-appwrite": { "method": "listCurrencies", + "group": null, "weight": 123, "cookies": false, "type": "", @@ -5717,6 +5790,7 @@ }, "x-appwrite": { "method": "listLanguages", + "group": null, "weight": 124, "cookies": false, "type": "", @@ -5770,7 +5844,8 @@ }, "x-appwrite": { "method": "createSubscriber", - "weight": 376, + "group": "subscribers", + "weight": 375, "cookies": false, "type": "", "deprecated": false, @@ -5854,7 +5929,8 @@ }, "x-appwrite": { "method": "deleteSubscriber", - "weight": 380, + "group": "subscribers", + "weight": 379, "cookies": false, "type": "", "deprecated": false, @@ -5926,7 +6002,8 @@ }, "x-appwrite": { "method": "listFiles", - "weight": 208, + "group": "files", + "weight": 207, "cookies": false, "type": "", "deprecated": false, @@ -6008,7 +6085,8 @@ }, "x-appwrite": { "method": "createFile", - "weight": 207, + "group": "files", + "weight": 206, "cookies": false, "type": "upload", "deprecated": false, @@ -6099,7 +6177,8 @@ }, "x-appwrite": { "method": "getFile", - "weight": 209, + "group": "files", + "weight": 208, "cookies": false, "type": "", "deprecated": false, @@ -6168,7 +6247,8 @@ }, "x-appwrite": { "method": "updateFile", - "weight": 214, + "group": "files", + "weight": 213, "cookies": false, "type": "", "deprecated": false, @@ -6256,7 +6336,8 @@ }, "x-appwrite": { "method": "deleteFile", - "weight": 215, + "group": "files", + "weight": 214, "cookies": false, "type": "", "deprecated": false, @@ -6327,7 +6408,8 @@ }, "x-appwrite": { "method": "getFileDownload", - "weight": 211, + "group": "files", + "weight": 210, "cookies": false, "type": "location", "deprecated": false, @@ -6398,7 +6480,8 @@ }, "x-appwrite": { "method": "getFilePreview", - "weight": 210, + "group": "files", + "weight": 209, "cookies": false, "type": "location", "deprecated": false, @@ -6597,7 +6680,8 @@ }, "x-appwrite": { "method": "getFileView", - "weight": 212, + "group": "files", + "weight": 211, "cookies": false, "type": "location", "deprecated": false, @@ -6668,7 +6752,8 @@ }, "x-appwrite": { "method": "list", - "weight": 219, + "group": "teams", + "weight": 218, "cookies": false, "type": "", "deprecated": false, @@ -6742,7 +6827,8 @@ }, "x-appwrite": { "method": "create", - "weight": 218, + "group": "teams", + "weight": 217, "cookies": false, "type": "", "deprecated": false, @@ -6833,7 +6919,8 @@ }, "x-appwrite": { "method": "get", - "weight": 220, + "group": "teams", + "weight": 219, "cookies": false, "type": "", "deprecated": false, @@ -6894,7 +6981,8 @@ }, "x-appwrite": { "method": "updateName", - "weight": 222, + "group": "teams", + "weight": 221, "cookies": false, "type": "", "deprecated": false, @@ -6968,7 +7056,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 224, + "group": "teams", + "weight": 223, "cookies": false, "type": "", "deprecated": false, @@ -7031,7 +7120,8 @@ }, "x-appwrite": { "method": "listMemberships", - "weight": 226, + "group": "memberships", + "weight": 225, "cookies": false, "type": "", "deprecated": false, @@ -7113,7 +7203,8 @@ }, "x-appwrite": { "method": "createMembership", - "weight": 225, + "group": "memberships", + "weight": 224, "cookies": false, "type": "", "deprecated": false, @@ -7227,7 +7318,8 @@ }, "x-appwrite": { "method": "getMembership", - "weight": 227, + "group": "memberships", + "weight": 226, "cookies": false, "type": "", "deprecated": false, @@ -7296,7 +7388,8 @@ }, "x-appwrite": { "method": "updateMembership", - "weight": 228, + "group": "memberships", + "weight": 227, "cookies": false, "type": "", "deprecated": false, @@ -7381,7 +7474,8 @@ }, "x-appwrite": { "method": "deleteMembership", - "weight": 230, + "group": "memberships", + "weight": 229, "cookies": false, "type": "", "deprecated": false, @@ -7452,7 +7546,8 @@ }, "x-appwrite": { "method": "updateMembershipStatus", - "weight": 229, + "group": "memberships", + "weight": 228, "cookies": false, "type": "", "deprecated": false, @@ -7547,7 +7642,8 @@ }, "x-appwrite": { "method": "getPrefs", - "weight": 221, + "group": "teams", + "weight": 220, "cookies": false, "type": "", "deprecated": false, @@ -7607,7 +7703,8 @@ }, "x-appwrite": { "method": "updatePrefs", - "weight": 223, + "group": "teams", + "weight": 222, "cookies": false, "type": "", "deprecated": false, diff --git a/app/config/specs/swagger2-1.6.x-console.json b/app/config/specs/swagger2-1.6.x-console.json index 8fc7e7daf3..55c14c285a 100644 --- a/app/config/specs/swagger2-1.6.x-console.json +++ b/app/config/specs/swagger2-1.6.x-console.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "version": "1.6.1", + "version": "1.6.2", "title": "Appwrite", "description": "Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)", "termsOfService": "https:\/\/appwrite.io\/policy\/terms", @@ -99,6 +99,7 @@ }, "x-appwrite": { "method": "get", + "group": "account", "weight": 9, "cookies": false, "type": "", @@ -148,6 +149,7 @@ }, "x-appwrite": { "method": "create", + "group": "account", "weight": 8, "cookies": false, "type": "", @@ -231,6 +233,7 @@ }, "x-appwrite": { "method": "delete", + "group": "account", "weight": 10, "cookies": false, "type": "", @@ -280,6 +283,7 @@ }, "x-appwrite": { "method": "updateEmail", + "group": "account", "weight": 34, "cookies": false, "type": "", @@ -358,6 +362,7 @@ }, "x-appwrite": { "method": "listIdentities", + "group": "identities", "weight": 57, "cookies": false, "type": "", @@ -418,6 +423,7 @@ }, "x-appwrite": { "method": "deleteIdentity", + "group": "identities", "weight": 58, "cookies": false, "type": "", @@ -479,6 +485,7 @@ }, "x-appwrite": { "method": "createJWT", + "group": "tokens", "weight": 29, "cookies": false, "type": "", @@ -529,6 +536,7 @@ }, "x-appwrite": { "method": "listLogs", + "group": "logs", "weight": 31, "cookies": false, "type": "", @@ -594,6 +602,7 @@ }, "x-appwrite": { "method": "updateMFA", + "group": "mfa", "weight": 44, "cookies": false, "type": "", @@ -665,6 +674,7 @@ }, "x-appwrite": { "method": "createMfaAuthenticator", + "group": "mfa", "weight": 46, "cookies": false, "type": "", @@ -707,7 +717,7 @@ ] }, "put": { - "summary": "Verify authenticator", + "summary": "Update authenticator (confirmation)", "operationId": "accountUpdateMfaAuthenticator", "consumes": [ "application\/json" @@ -729,6 +739,7 @@ }, "x-appwrite": { "method": "updateMfaAuthenticator", + "group": "mfa", "weight": 47, "cookies": false, "type": "", @@ -806,6 +817,7 @@ }, "x-appwrite": { "method": "deleteMfaAuthenticator", + "group": "mfa", "weight": 51, "cookies": false, "type": "", @@ -872,6 +884,7 @@ }, "x-appwrite": { "method": "createMfaChallenge", + "group": "mfa", "weight": 52, "cookies": false, "type": "", @@ -926,7 +939,7 @@ ] }, "put": { - "summary": "Create MFA challenge (confirmation)", + "summary": "Update MFA challenge (confirmation)", "operationId": "accountUpdateMfaChallenge", "consumes": [ "application\/json" @@ -948,6 +961,7 @@ }, "x-appwrite": { "method": "updateMfaChallenge", + "group": "mfa", "weight": 53, "cookies": false, "type": "", @@ -1026,6 +1040,7 @@ }, "x-appwrite": { "method": "listMfaFactors", + "group": "mfa", "weight": 45, "cookies": false, "type": "", @@ -1055,7 +1070,7 @@ }, "\/account\/mfa\/recovery-codes": { "get": { - "summary": "Get MFA recovery codes", + "summary": "List MFA recovery codes", "operationId": "accountGetMfaRecoveryCodes", "consumes": [ "application\/json" @@ -1077,6 +1092,7 @@ }, "x-appwrite": { "method": "getMfaRecoveryCodes", + "group": "mfa", "weight": 50, "cookies": false, "type": "", @@ -1126,6 +1142,7 @@ }, "x-appwrite": { "method": "createMfaRecoveryCodes", + "group": "mfa", "weight": 48, "cookies": false, "type": "", @@ -1153,7 +1170,7 @@ ] }, "patch": { - "summary": "Regenerate MFA recovery codes", + "summary": "Update MFA recovery codes (regenerate)", "operationId": "accountUpdateMfaRecoveryCodes", "consumes": [ "application\/json" @@ -1175,6 +1192,7 @@ }, "x-appwrite": { "method": "updateMfaRecoveryCodes", + "group": "mfa", "weight": 49, "cookies": false, "type": "", @@ -1226,6 +1244,7 @@ }, "x-appwrite": { "method": "updateName", + "group": "account", "weight": 32, "cookies": false, "type": "", @@ -1297,6 +1316,7 @@ }, "x-appwrite": { "method": "updatePassword", + "group": "account", "weight": 33, "cookies": false, "type": "", @@ -1374,6 +1394,7 @@ }, "x-appwrite": { "method": "updatePhone", + "group": "account", "weight": 35, "cookies": false, "type": "", @@ -1452,6 +1473,7 @@ }, "x-appwrite": { "method": "getPrefs", + "group": "account", "weight": 30, "cookies": false, "type": "", @@ -1501,6 +1523,7 @@ }, "x-appwrite": { "method": "updatePrefs", + "group": "account", "weight": 36, "cookies": false, "type": "", @@ -1572,6 +1595,7 @@ }, "x-appwrite": { "method": "createRecovery", + "group": "recovery", "weight": 38, "cookies": false, "type": "", @@ -1629,7 +1653,7 @@ ] }, "put": { - "summary": "Create password recovery (confirmation)", + "summary": "Update password recovery (confirmation)", "operationId": "accountUpdateRecovery", "consumes": [ "application\/json" @@ -1651,6 +1675,7 @@ }, "x-appwrite": { "method": "updateRecovery", + "group": "recovery", "weight": 39, "cookies": false, "type": "", @@ -1736,6 +1761,7 @@ }, "x-appwrite": { "method": "listSessions", + "group": "sessions", "weight": 11, "cookies": false, "type": "", @@ -1780,6 +1806,7 @@ }, "x-appwrite": { "method": "deleteSessions", + "group": "sessions", "weight": 12, "cookies": false, "type": "", @@ -1831,6 +1858,7 @@ }, "x-appwrite": { "method": "createAnonymousSession", + "group": "sessions", "weight": 17, "cookies": false, "type": "", @@ -1881,6 +1909,7 @@ }, "x-appwrite": { "method": "createEmailPasswordSession", + "group": "sessions", "weight": 16, "cookies": false, "type": "", @@ -1958,6 +1987,7 @@ }, "x-appwrite": { "method": "updateMagicURLSession", + "group": "sessions", "weight": 26, "cookies": false, "type": "", @@ -2032,6 +2062,7 @@ }, "x-appwrite": { "method": "createOAuth2Session", + "group": "sessions", "weight": 19, "cookies": false, "type": "webAuth", @@ -2059,7 +2090,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", "required": true, "type": "string", "x-example": "amazon", @@ -2078,6 +2109,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -2167,6 +2199,7 @@ }, "x-appwrite": { "method": "updatePhoneSession", + "group": "sessions", "weight": 27, "cookies": false, "type": "", @@ -2244,6 +2277,7 @@ }, "x-appwrite": { "method": "createSession", + "group": "sessions", "weight": 18, "cookies": false, "type": "", @@ -2321,6 +2355,7 @@ }, "x-appwrite": { "method": "getSession", + "group": "sessions", "weight": 13, "cookies": false, "type": "", @@ -2380,6 +2415,7 @@ }, "x-appwrite": { "method": "updateSession", + "group": "sessions", "weight": 15, "cookies": false, "type": "", @@ -2434,6 +2470,7 @@ }, "x-appwrite": { "method": "deleteSession", + "group": "sessions", "weight": 14, "cookies": false, "type": "", @@ -2495,6 +2532,7 @@ }, "x-appwrite": { "method": "updateStatus", + "group": "account", "weight": 37, "cookies": false, "type": "", @@ -2546,6 +2584,7 @@ }, "x-appwrite": { "method": "createPushTarget", + "group": "pushTargets", "weight": 54, "cookies": false, "type": "", @@ -2628,6 +2667,7 @@ }, "x-appwrite": { "method": "updatePushTarget", + "group": "pushTargets", "weight": 55, "cookies": false, "type": "", @@ -2698,6 +2738,7 @@ }, "x-appwrite": { "method": "deletePushTarget", + "group": "pushTargets", "weight": 56, "cookies": false, "type": "", @@ -2757,6 +2798,7 @@ }, "x-appwrite": { "method": "createEmailToken", + "group": "tokens", "weight": 25, "cookies": false, "type": "", @@ -2840,6 +2882,7 @@ }, "x-appwrite": { "method": "createMagicURLToken", + "group": "tokens", "weight": 24, "cookies": false, "type": "", @@ -2929,6 +2972,7 @@ }, "x-appwrite": { "method": "createOAuth2Token", + "group": "tokens", "weight": 23, "cookies": false, "type": "webAuth", @@ -2956,7 +3000,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", "required": true, "type": "string", "x-example": "amazon", @@ -2975,6 +3019,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -3064,6 +3109,7 @@ }, "x-appwrite": { "method": "createPhoneToken", + "group": "tokens", "weight": 28, "cookies": false, "type": "", @@ -3144,6 +3190,7 @@ }, "x-appwrite": { "method": "createVerification", + "group": "verification", "weight": 40, "cookies": false, "type": "", @@ -3191,7 +3238,7 @@ ] }, "put": { - "summary": "Create email verification (confirmation)", + "summary": "Update email verification (confirmation)", "operationId": "accountUpdateVerification", "consumes": [ "application\/json" @@ -3213,6 +3260,7 @@ }, "x-appwrite": { "method": "updateVerification", + "group": "verification", "weight": 41, "cookies": false, "type": "", @@ -3291,6 +3339,7 @@ }, "x-appwrite": { "method": "createPhoneVerification", + "group": "verification", "weight": 42, "cookies": false, "type": "", @@ -3343,6 +3392,7 @@ }, "x-appwrite": { "method": "updatePhoneVerification", + "group": "verification", "weight": 43, "cookies": false, "type": "", @@ -3421,6 +3471,7 @@ }, "x-appwrite": { "method": "getBrowser", + "group": null, "weight": 60, "cookies": false, "type": "location", @@ -3547,6 +3598,7 @@ }, "x-appwrite": { "method": "getCreditCard", + "group": null, "weight": 59, "cookies": false, "type": "location", @@ -3679,6 +3731,7 @@ }, "x-appwrite": { "method": "getFavicon", + "group": null, "weight": 63, "cookies": false, "type": "location", @@ -3743,6 +3796,7 @@ }, "x-appwrite": { "method": "getFlag", + "group": null, "weight": 61, "cookies": false, "type": "location", @@ -4231,6 +4285,7 @@ }, "x-appwrite": { "method": "getImage", + "group": null, "weight": 62, "cookies": false, "type": "location", @@ -4315,6 +4370,7 @@ }, "x-appwrite": { "method": "getInitials", + "group": null, "weight": 65, "cookies": false, "type": "location", @@ -4407,6 +4463,7 @@ }, "x-appwrite": { "method": "getQR", + "group": null, "weight": 64, "cookies": false, "type": "location", @@ -4477,7 +4534,7 @@ }, "\/console\/assistant": { "post": { - "summary": "Ask query", + "summary": "Create assistant query", "operationId": "assistantChat", "consumes": [ "application\/json" @@ -4499,7 +4556,8 @@ }, "x-appwrite": { "method": "chat", - "weight": 333, + "group": "console", + "weight": 332, "cookies": false, "type": "", "deprecated": false, @@ -4568,7 +4626,8 @@ }, "x-appwrite": { "method": "variables", - "weight": 332, + "group": "console", + "weight": 331, "cookies": false, "type": "", "deprecated": false, @@ -4617,6 +4676,7 @@ }, "x-appwrite": { "method": "list", + "group": "databases", "weight": 70, "cookies": false, "type": "", @@ -4688,6 +4748,7 @@ }, "x-appwrite": { "method": "create", + "group": "databases", "weight": 69, "cookies": false, "type": "", @@ -4771,6 +4832,7 @@ }, "x-appwrite": { "method": "getUsage", + "group": null, "weight": 114, "cookies": false, "type": "", @@ -4842,6 +4904,7 @@ }, "x-appwrite": { "method": "get", + "group": "databases", "weight": 71, "cookies": false, "type": "", @@ -4900,6 +4963,7 @@ }, "x-appwrite": { "method": "update", + "group": "databases", "weight": 73, "cookies": false, "type": "", @@ -4977,6 +5041,7 @@ }, "x-appwrite": { "method": "delete", + "group": "databases", "weight": 74, "cookies": false, "type": "", @@ -5037,6 +5102,7 @@ }, "x-appwrite": { "method": "listCollections", + "group": "collections", "weight": 76, "cookies": false, "type": "", @@ -5116,6 +5182,7 @@ }, "x-appwrite": { "method": "createCollection", + "group": "collections", "weight": 75, "cookies": false, "type": "", @@ -5222,6 +5289,7 @@ }, "x-appwrite": { "method": "getCollection", + "group": "collections", "weight": 77, "cookies": false, "type": "", @@ -5288,6 +5356,7 @@ }, "x-appwrite": { "method": "updateCollection", + "group": "collections", "weight": 79, "cookies": false, "type": "", @@ -5388,6 +5457,7 @@ }, "x-appwrite": { "method": "deleteCollection", + "group": "collections", "weight": 80, "cookies": false, "type": "", @@ -5456,6 +5526,7 @@ }, "x-appwrite": { "method": "listAttributes", + "group": "attributes", "weight": 91, "cookies": false, "type": "", @@ -5536,6 +5607,7 @@ }, "x-appwrite": { "method": "createBooleanAttribute", + "group": "attributes", "weight": 88, "cookies": false, "type": "", @@ -5641,6 +5713,7 @@ }, "x-appwrite": { "method": "updateBooleanAttribute", + "group": "attributes", "weight": 100, "cookies": false, "type": "", @@ -5748,6 +5821,7 @@ }, "x-appwrite": { "method": "createDatetimeAttribute", + "group": "attributes", "weight": 89, "cookies": false, "type": "", @@ -5853,6 +5927,7 @@ }, "x-appwrite": { "method": "updateDatetimeAttribute", + "group": "attributes", "weight": 101, "cookies": false, "type": "", @@ -5960,6 +6035,7 @@ }, "x-appwrite": { "method": "createEmailAttribute", + "group": "attributes", "weight": 82, "cookies": false, "type": "", @@ -6065,6 +6141,7 @@ }, "x-appwrite": { "method": "updateEmailAttribute", + "group": "attributes", "weight": 94, "cookies": false, "type": "", @@ -6172,6 +6249,7 @@ }, "x-appwrite": { "method": "createEnumAttribute", + "group": "attributes", "weight": 83, "cookies": false, "type": "", @@ -6287,6 +6365,7 @@ }, "x-appwrite": { "method": "updateEnumAttribute", + "group": "attributes", "weight": 95, "cookies": false, "type": "", @@ -6404,6 +6483,7 @@ }, "x-appwrite": { "method": "createFloatAttribute", + "group": "attributes", "weight": 87, "cookies": false, "type": "", @@ -6521,6 +6601,7 @@ }, "x-appwrite": { "method": "updateFloatAttribute", + "group": "attributes", "weight": 99, "cookies": false, "type": "", @@ -6640,6 +6721,7 @@ }, "x-appwrite": { "method": "createIntegerAttribute", + "group": "attributes", "weight": 86, "cookies": false, "type": "", @@ -6757,6 +6839,7 @@ }, "x-appwrite": { "method": "updateIntegerAttribute", + "group": "attributes", "weight": 98, "cookies": false, "type": "", @@ -6876,6 +6959,7 @@ }, "x-appwrite": { "method": "createIpAttribute", + "group": "attributes", "weight": 84, "cookies": false, "type": "", @@ -6981,6 +7065,7 @@ }, "x-appwrite": { "method": "updateIpAttribute", + "group": "attributes", "weight": 96, "cookies": false, "type": "", @@ -7088,6 +7173,7 @@ }, "x-appwrite": { "method": "createRelationshipAttribute", + "group": "attributes", "weight": 90, "cookies": false, "type": "", @@ -7220,6 +7306,7 @@ }, "x-appwrite": { "method": "createStringAttribute", + "group": "attributes", "weight": 81, "cookies": false, "type": "", @@ -7338,6 +7425,7 @@ }, "x-appwrite": { "method": "updateStringAttribute", + "group": "attributes", "weight": 93, "cookies": false, "type": "", @@ -7451,6 +7539,7 @@ }, "x-appwrite": { "method": "createUrlAttribute", + "group": "attributes", "weight": 85, "cookies": false, "type": "", @@ -7556,6 +7645,7 @@ }, "x-appwrite": { "method": "updateUrlAttribute", + "group": "attributes", "weight": 97, "cookies": false, "type": "", @@ -7694,6 +7784,7 @@ }, "x-appwrite": { "method": "getAttribute", + "group": "attributes", "weight": 92, "cookies": false, "type": "", @@ -7762,6 +7853,7 @@ }, "x-appwrite": { "method": "deleteAttribute", + "group": "attributes", "weight": 103, "cookies": false, "type": "", @@ -7837,6 +7929,7 @@ }, "x-appwrite": { "method": "updateRelationshipAttribute", + "group": "attributes", "weight": 102, "cookies": false, "type": "", @@ -7940,6 +8033,7 @@ }, "x-appwrite": { "method": "listDocuments", + "group": "documents", "weight": 109, "cookies": false, "type": "", @@ -8021,6 +8115,7 @@ }, "x-appwrite": { "method": "createDocument", + "group": "documents", "weight": 108, "cookies": false, "type": "", @@ -8126,6 +8221,7 @@ }, "x-appwrite": { "method": "getDocument", + "group": "documents", "weight": 110, "cookies": false, "type": "", @@ -8215,6 +8311,7 @@ }, "x-appwrite": { "method": "updateDocument", + "group": "documents", "weight": 112, "cookies": false, "type": "", @@ -8311,6 +8408,7 @@ }, "x-appwrite": { "method": "deleteDocument", + "group": "documents", "weight": 113, "cookies": false, "type": "", @@ -8390,6 +8488,7 @@ }, "x-appwrite": { "method": "listDocumentLogs", + "group": "logs", "weight": 111, "cookies": false, "type": "", @@ -8477,6 +8576,7 @@ }, "x-appwrite": { "method": "listIndexes", + "group": "indexes", "weight": 105, "cookies": false, "type": "", @@ -8555,6 +8655,7 @@ }, "x-appwrite": { "method": "createIndex", + "group": "collections", "weight": 104, "cookies": false, "type": "", @@ -8674,6 +8775,7 @@ }, "x-appwrite": { "method": "getIndex", + "group": "indexes", "weight": 106, "cookies": false, "type": "", @@ -8742,6 +8844,7 @@ }, "x-appwrite": { "method": "deleteIndex", + "group": "indexes", "weight": 107, "cookies": false, "type": "", @@ -8817,6 +8920,7 @@ }, "x-appwrite": { "method": "listCollectionLogs", + "group": "collections", "weight": 78, "cookies": false, "type": "", @@ -8896,6 +9000,7 @@ }, "x-appwrite": { "method": "getCollectionUsage", + "group": null, "weight": 116, "cookies": false, "type": "", @@ -8983,6 +9088,7 @@ }, "x-appwrite": { "method": "listLogs", + "group": "logs", "weight": 72, "cookies": false, "type": "", @@ -9054,6 +9160,7 @@ }, "x-appwrite": { "method": "getDatabaseUsage", + "group": null, "weight": 115, "cookies": false, "type": "", @@ -9133,7 +9240,8 @@ }, "x-appwrite": { "method": "list", - "weight": 289, + "group": "functions", + "weight": 288, "cookies": false, "type": "", "deprecated": false, @@ -9204,7 +9312,8 @@ }, "x-appwrite": { "method": "create", - "weight": 288, + "group": "functions", + "weight": 287, "cookies": false, "type": "", "deprecated": false, @@ -9474,7 +9583,8 @@ }, "x-appwrite": { "method": "listRuntimes", - "weight": 290, + "group": "runtimes", + "weight": 289, "cookies": false, "type": "", "deprecated": false, @@ -9524,7 +9634,8 @@ }, "x-appwrite": { "method": "listSpecifications", - "weight": 291, + "group": "runtimes", + "weight": 290, "cookies": false, "type": "", "deprecated": false, @@ -9575,7 +9686,8 @@ }, "x-appwrite": { "method": "listTemplates", - "weight": 314, + "group": "templates", + "weight": 313, "cookies": false, "type": "", "deprecated": false, @@ -9670,7 +9782,8 @@ }, "x-appwrite": { "method": "getTemplate", - "weight": 315, + "group": "templates", + "weight": 314, "cookies": false, "type": "", "deprecated": false, @@ -9729,7 +9842,8 @@ }, "x-appwrite": { "method": "getUsage", - "weight": 294, + "group": null, + "weight": 293, "cookies": false, "type": "", "deprecated": false, @@ -9800,7 +9914,8 @@ }, "x-appwrite": { "method": "get", - "weight": 292, + "group": "functions", + "weight": 291, "cookies": false, "type": "", "deprecated": false, @@ -9858,7 +9973,8 @@ }, "x-appwrite": { "method": "update", - "weight": 295, + "group": "functions", + "weight": 294, "cookies": false, "type": "", "deprecated": false, @@ -10098,7 +10214,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 298, + "group": "functions", + "weight": 297, "cookies": false, "type": "", "deprecated": false, @@ -10158,7 +10275,8 @@ }, "x-appwrite": { "method": "listDeployments", - "weight": 300, + "group": "deployments", + "weight": 299, "cookies": false, "type": "", "deprecated": false, @@ -10237,7 +10355,8 @@ }, "x-appwrite": { "method": "createDeployment", - "weight": 299, + "group": "deployments", + "weight": 298, "cookies": false, "type": "upload", "deprecated": false, @@ -10328,7 +10447,8 @@ }, "x-appwrite": { "method": "getDeployment", - "weight": 301, + "group": "deployments", + "weight": 300, "cookies": false, "type": "", "deprecated": false, @@ -10394,7 +10514,8 @@ }, "x-appwrite": { "method": "updateDeployment", - "weight": 297, + "group": "deployments", + "weight": 296, "cookies": false, "type": "", "deprecated": false, @@ -10455,7 +10576,8 @@ }, "x-appwrite": { "method": "deleteDeployment", - "weight": 302, + "group": "deployments", + "weight": 301, "cookies": false, "type": "", "deprecated": false, @@ -10501,7 +10623,7 @@ }, "\/functions\/{functionId}\/deployments\/{deploymentId}\/build": { "post": { - "summary": "Rebuild deployment", + "summary": "Create deployment build", "operationId": "functionsCreateBuild", "consumes": [ "application\/json" @@ -10520,7 +10642,8 @@ }, "x-appwrite": { "method": "createBuild", - "weight": 303, + "group": "deployments", + "weight": 302, "cookies": false, "type": "", "deprecated": false, @@ -10601,7 +10724,8 @@ }, "x-appwrite": { "method": "updateDeploymentBuild", - "weight": 304, + "group": "deployments", + "weight": 303, "cookies": false, "type": "", "deprecated": false, @@ -10647,7 +10771,7 @@ }, "\/functions\/{functionId}\/deployments\/{deploymentId}\/download": { "get": { - "summary": "Download deployment", + "summary": "Get deployment download", "operationId": "functionsGetDeploymentDownload", "consumes": [ "application\/json" @@ -10669,7 +10793,8 @@ }, "x-appwrite": { "method": "getDeploymentDownload", - "weight": 296, + "group": "deployments", + "weight": 295, "cookies": false, "type": "location", "deprecated": false, @@ -10739,7 +10864,8 @@ }, "x-appwrite": { "method": "listExecutions", - "weight": 306, + "group": "executions", + "weight": 305, "cookies": false, "type": "", "deprecated": false, @@ -10821,7 +10947,8 @@ }, "x-appwrite": { "method": "createExecution", - "weight": 305, + "group": "executions", + "weight": 304, "cookies": false, "type": "", "deprecated": false, @@ -10939,7 +11066,8 @@ }, "x-appwrite": { "method": "getExecution", - "weight": 307, + "group": "executions", + "weight": 306, "cookies": false, "type": "", "deprecated": false, @@ -11003,7 +11131,8 @@ }, "x-appwrite": { "method": "deleteExecution", - "weight": 308, + "group": "executions", + "weight": 307, "cookies": false, "type": "", "deprecated": false, @@ -11071,7 +11200,8 @@ }, "x-appwrite": { "method": "getFunctionUsage", - "weight": 293, + "group": null, + "weight": 292, "cookies": false, "type": "", "deprecated": false, @@ -11150,7 +11280,8 @@ }, "x-appwrite": { "method": "listVariables", - "weight": 310, + "group": "variables", + "weight": 309, "cookies": false, "type": "", "deprecated": false, @@ -11208,7 +11339,8 @@ }, "x-appwrite": { "method": "createVariable", - "weight": 309, + "group": "variables", + "weight": 308, "cookies": false, "type": "", "deprecated": false, @@ -11293,7 +11425,8 @@ }, "x-appwrite": { "method": "getVariable", - "weight": 311, + "group": "variables", + "weight": 310, "cookies": false, "type": "", "deprecated": false, @@ -11359,7 +11492,8 @@ }, "x-appwrite": { "method": "updateVariable", - "weight": 312, + "group": "variables", + "weight": 311, "cookies": false, "type": "", "deprecated": false, @@ -11444,7 +11578,8 @@ }, "x-appwrite": { "method": "deleteVariable", - "weight": 313, + "group": "variables", + "weight": 312, "cookies": false, "type": "", "deprecated": false, @@ -11512,7 +11647,8 @@ }, "x-appwrite": { "method": "query", - "weight": 331, + "group": "graphql", + "weight": 330, "cookies": false, "type": "graphql", "deprecated": false, @@ -11585,7 +11721,8 @@ }, "x-appwrite": { "method": "mutation", - "weight": 330, + "group": "graphql", + "weight": 329, "cookies": false, "type": "graphql", "deprecated": false, @@ -11658,6 +11795,7 @@ }, "x-appwrite": { "method": "get", + "group": "health", "weight": 125, "cookies": false, "type": "", @@ -11708,7 +11846,8 @@ }, "x-appwrite": { "method": "getAntivirus", - "weight": 147, + "group": "health", + "weight": 146, "cookies": false, "type": "", "deprecated": false, @@ -11758,6 +11897,7 @@ }, "x-appwrite": { "method": "getCache", + "group": "health", "weight": 128, "cookies": false, "type": "", @@ -11808,6 +11948,7 @@ }, "x-appwrite": { "method": "getCertificate", + "group": "health", "weight": 133, "cookies": false, "type": "", @@ -11867,6 +12008,7 @@ }, "x-appwrite": { "method": "getDB", + "group": "health", "weight": 127, "cookies": false, "type": "", @@ -11917,6 +12059,7 @@ }, "x-appwrite": { "method": "getPubSub", + "group": "health", "weight": 129, "cookies": false, "type": "", @@ -11967,6 +12110,7 @@ }, "x-appwrite": { "method": "getQueueBuilds", + "group": "queue", "weight": 135, "cookies": false, "type": "", @@ -12028,6 +12172,7 @@ }, "x-appwrite": { "method": "getQueueCertificates", + "group": "queue", "weight": 134, "cookies": false, "type": "", @@ -12089,6 +12234,7 @@ }, "x-appwrite": { "method": "getQueueDatabases", + "group": "queue", "weight": 136, "cookies": false, "type": "", @@ -12159,6 +12305,7 @@ }, "x-appwrite": { "method": "getQueueDeletes", + "group": "queue", "weight": 137, "cookies": false, "type": "", @@ -12220,7 +12367,8 @@ }, "x-appwrite": { "method": "getFailedJobs", - "weight": 148, + "group": "queue", + "weight": 147, "cookies": false, "type": "", "deprecated": false, @@ -12259,7 +12407,6 @@ "v1-functions", "v1-stats-resources", "v1-stats-usage", - "v1-stats-usage-dump", "v1-webhooks", "v1-certificates", "v1-builds", @@ -12306,6 +12453,7 @@ }, "x-appwrite": { "method": "getQueueFunctions", + "group": "queue", "weight": 141, "cookies": false, "type": "", @@ -12367,6 +12515,7 @@ }, "x-appwrite": { "method": "getQueueLogs", + "group": "queue", "weight": 132, "cookies": false, "type": "", @@ -12428,6 +12577,7 @@ }, "x-appwrite": { "method": "getQueueMails", + "group": "queue", "weight": 138, "cookies": false, "type": "", @@ -12489,6 +12639,7 @@ }, "x-appwrite": { "method": "getQueueMessaging", + "group": "queue", "weight": 139, "cookies": false, "type": "", @@ -12550,6 +12701,7 @@ }, "x-appwrite": { "method": "getQueueMigrations", + "group": "queue", "weight": 140, "cookies": false, "type": "", @@ -12611,6 +12763,7 @@ }, "x-appwrite": { "method": "getQueueStatsResources", + "group": "queue", "weight": 142, "cookies": false, "type": "", @@ -12672,6 +12825,7 @@ }, "x-appwrite": { "method": "getQueueUsage", + "group": "queue", "weight": 143, "cookies": false, "type": "", @@ -12709,67 +12863,6 @@ ] } }, - "\/health\/queue\/stats-usage-dump": { - "get": { - "summary": "Get usage dump queue", - "operationId": "healthGetQueueStatsUsageDump", - "consumes": [ - "application\/json" - ], - "produces": [ - "application\/json" - ], - "tags": [ - "health" - ], - "description": "Get the number of projects containing metrics that are waiting to be processed in the Appwrite internal queue server.", - "responses": { - "200": { - "description": "Health Queue", - "schema": { - "$ref": "#\/definitions\/healthQueue" - } - } - }, - "x-appwrite": { - "method": "getQueueStatsUsageDump", - "weight": 144, - "cookies": false, - "type": "", - "deprecated": false, - "demo": "health\/get-queue-stats-usage-dump.md", - "edit": "https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-stats-usage-dump.md", - "rate-limit": 0, - "rate-time": 3600, - "rate-key": "url:{url},ip:{ip}", - "scope": "health.read", - "platforms": [ - "server" - ], - "packaging": false, - "auth": { - "Project": [] - } - }, - "security": [ - { - "Project": [], - "Key": [] - } - ], - "parameters": [ - { - "name": "threshold", - "description": "Queue size threshold. When hit (equal or higher), endpoint returns server error. Default value is 5000.", - "required": false, - "type": "integer", - "format": "int32", - "default": 5000, - "in": "query" - } - ] - } - }, "\/health\/queue\/webhooks": { "get": { "summary": "Get webhooks queue", @@ -12794,6 +12887,7 @@ }, "x-appwrite": { "method": "getQueueWebhooks", + "group": "queue", "weight": 131, "cookies": false, "type": "", @@ -12855,7 +12949,8 @@ }, "x-appwrite": { "method": "getStorage", - "weight": 146, + "group": "storage", + "weight": 145, "cookies": false, "type": "", "deprecated": false, @@ -12905,7 +13000,8 @@ }, "x-appwrite": { "method": "getStorageLocal", - "weight": 145, + "group": "storage", + "weight": 144, "cookies": false, "type": "", "deprecated": false, @@ -12955,6 +13051,7 @@ }, "x-appwrite": { "method": "getTime", + "group": "health", "weight": 130, "cookies": false, "type": "", @@ -13005,6 +13102,7 @@ }, "x-appwrite": { "method": "get", + "group": null, "weight": 117, "cookies": false, "type": "", @@ -13058,6 +13156,7 @@ }, "x-appwrite": { "method": "listCodes", + "group": null, "weight": 118, "cookies": false, "type": "", @@ -13111,6 +13210,7 @@ }, "x-appwrite": { "method": "listContinents", + "group": null, "weight": 122, "cookies": false, "type": "", @@ -13164,6 +13264,7 @@ }, "x-appwrite": { "method": "listCountries", + "group": null, "weight": 119, "cookies": false, "type": "", @@ -13217,6 +13318,7 @@ }, "x-appwrite": { "method": "listCountriesEU", + "group": null, "weight": 120, "cookies": false, "type": "", @@ -13270,6 +13372,7 @@ }, "x-appwrite": { "method": "listCountriesPhones", + "group": null, "weight": 121, "cookies": false, "type": "", @@ -13323,6 +13426,7 @@ }, "x-appwrite": { "method": "listCurrencies", + "group": null, "weight": 123, "cookies": false, "type": "", @@ -13376,6 +13480,7 @@ }, "x-appwrite": { "method": "listLanguages", + "group": null, "weight": 124, "cookies": false, "type": "", @@ -13429,7 +13534,8 @@ }, "x-appwrite": { "method": "listMessages", - "weight": 384, + "group": "messages", + "weight": 383, "cookies": false, "type": "", "deprecated": false, @@ -13503,7 +13609,8 @@ }, "x-appwrite": { "method": "createEmail", - "weight": 381, + "group": "messages", + "weight": 380, "cookies": false, "type": "", "deprecated": false, @@ -13660,7 +13767,8 @@ }, "x-appwrite": { "method": "updateEmail", - "weight": 388, + "group": "messages", + "weight": 387, "cookies": false, "type": "", "deprecated": false, @@ -13814,7 +13922,8 @@ }, "x-appwrite": { "method": "createPush", - "weight": 383, + "group": "messages", + "weight": 382, "cookies": false, "type": "", "deprecated": false, @@ -14008,7 +14117,8 @@ }, "x-appwrite": { "method": "updatePush", - "weight": 390, + "group": "messages", + "weight": 389, "cookies": false, "type": "", "deprecated": false, @@ -14201,7 +14311,8 @@ }, "x-appwrite": { "method": "createSms", - "weight": 382, + "group": "messages", + "weight": 381, "cookies": false, "type": "", "deprecated": false, @@ -14318,7 +14429,8 @@ }, "x-appwrite": { "method": "updateSms", - "weight": 389, + "group": "messages", + "weight": 388, "cookies": false, "type": "", "deprecated": false, @@ -14433,7 +14545,8 @@ }, "x-appwrite": { "method": "getMessage", - "weight": 387, + "group": "messages", + "weight": 386, "cookies": false, "type": "", "deprecated": false, @@ -14487,7 +14600,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 391, + "group": "messages", + "weight": 390, "cookies": false, "type": "", "deprecated": false, @@ -14548,7 +14662,8 @@ }, "x-appwrite": { "method": "listMessageLogs", - "weight": 385, + "group": "logs", + "weight": 384, "cookies": false, "type": "", "deprecated": false, @@ -14621,7 +14736,8 @@ }, "x-appwrite": { "method": "listTargets", - "weight": 386, + "group": "messages", + "weight": 385, "cookies": false, "type": "", "deprecated": false, @@ -14694,7 +14810,8 @@ }, "x-appwrite": { "method": "listProviders", - "weight": 356, + "group": "providers", + "weight": 355, "cookies": false, "type": "", "deprecated": false, @@ -14768,7 +14885,8 @@ }, "x-appwrite": { "method": "createApnsProvider", - "weight": 355, + "group": "providers", + "weight": 354, "cookies": false, "type": "", "deprecated": false, @@ -14882,7 +15000,8 @@ }, "x-appwrite": { "method": "updateApnsProvider", - "weight": 368, + "group": "providers", + "weight": 367, "cookies": false, "type": "", "deprecated": false, @@ -14994,7 +15113,8 @@ }, "x-appwrite": { "method": "createFcmProvider", - "weight": 354, + "group": "providers", + "weight": 353, "cookies": false, "type": "", "deprecated": false, @@ -15084,7 +15204,8 @@ }, "x-appwrite": { "method": "updateFcmProvider", - "weight": 367, + "group": "providers", + "weight": 366, "cookies": false, "type": "", "deprecated": false, @@ -15172,7 +15293,8 @@ }, "x-appwrite": { "method": "createMailgunProvider", - "weight": 346, + "group": "providers", + "weight": 345, "cookies": false, "type": "", "deprecated": false, @@ -15298,7 +15420,8 @@ }, "x-appwrite": { "method": "updateMailgunProvider", - "weight": 359, + "group": "providers", + "weight": 358, "cookies": false, "type": "", "deprecated": false, @@ -15422,7 +15545,8 @@ }, "x-appwrite": { "method": "createMsg91Provider", - "weight": 349, + "group": "providers", + "weight": 348, "cookies": false, "type": "", "deprecated": false, @@ -15524,7 +15648,8 @@ }, "x-appwrite": { "method": "updateMsg91Provider", - "weight": 362, + "group": "providers", + "weight": 361, "cookies": false, "type": "", "deprecated": false, @@ -15624,7 +15749,8 @@ }, "x-appwrite": { "method": "createSendgridProvider", - "weight": 347, + "group": "providers", + "weight": 346, "cookies": false, "type": "", "deprecated": false, @@ -15738,7 +15864,8 @@ }, "x-appwrite": { "method": "updateSendgridProvider", - "weight": 360, + "group": "providers", + "weight": 359, "cookies": false, "type": "", "deprecated": false, @@ -15850,7 +15977,8 @@ }, "x-appwrite": { "method": "createSmtpProvider", - "weight": 348, + "group": "providers", + "weight": 347, "cookies": false, "type": "", "deprecated": false, @@ -16008,7 +16136,8 @@ }, "x-appwrite": { "method": "updateSmtpProvider", - "weight": 361, + "group": "providers", + "weight": 360, "cookies": false, "type": "", "deprecated": false, @@ -16163,7 +16292,8 @@ }, "x-appwrite": { "method": "createTelesignProvider", - "weight": 350, + "group": "providers", + "weight": 349, "cookies": false, "type": "", "deprecated": false, @@ -16265,7 +16395,8 @@ }, "x-appwrite": { "method": "updateTelesignProvider", - "weight": 363, + "group": "providers", + "weight": 362, "cookies": false, "type": "", "deprecated": false, @@ -16365,7 +16496,8 @@ }, "x-appwrite": { "method": "createTextmagicProvider", - "weight": 351, + "group": "providers", + "weight": 350, "cookies": false, "type": "", "deprecated": false, @@ -16467,7 +16599,8 @@ }, "x-appwrite": { "method": "updateTextmagicProvider", - "weight": 364, + "group": "providers", + "weight": 363, "cookies": false, "type": "", "deprecated": false, @@ -16567,7 +16700,8 @@ }, "x-appwrite": { "method": "createTwilioProvider", - "weight": 352, + "group": "providers", + "weight": 351, "cookies": false, "type": "", "deprecated": false, @@ -16669,7 +16803,8 @@ }, "x-appwrite": { "method": "updateTwilioProvider", - "weight": 365, + "group": "providers", + "weight": 364, "cookies": false, "type": "", "deprecated": false, @@ -16769,7 +16904,8 @@ }, "x-appwrite": { "method": "createVonageProvider", - "weight": 353, + "group": "providers", + "weight": 352, "cookies": false, "type": "", "deprecated": false, @@ -16871,7 +17007,8 @@ }, "x-appwrite": { "method": "updateVonageProvider", - "weight": 366, + "group": "providers", + "weight": 365, "cookies": false, "type": "", "deprecated": false, @@ -16971,7 +17108,8 @@ }, "x-appwrite": { "method": "getProvider", - "weight": 358, + "group": "providers", + "weight": 357, "cookies": false, "type": "", "deprecated": false, @@ -17025,7 +17163,8 @@ }, "x-appwrite": { "method": "deleteProvider", - "weight": 369, + "group": "providers", + "weight": 368, "cookies": false, "type": "", "deprecated": false, @@ -17086,7 +17225,8 @@ }, "x-appwrite": { "method": "listProviderLogs", - "weight": 357, + "group": "providers", + "weight": 356, "cookies": false, "type": "", "deprecated": false, @@ -17159,7 +17299,8 @@ }, "x-appwrite": { "method": "listSubscriberLogs", - "weight": 378, + "group": "subscribers", + "weight": 377, "cookies": false, "type": "", "deprecated": false, @@ -17232,7 +17373,8 @@ }, "x-appwrite": { "method": "listTopics", - "weight": 371, + "group": "topics", + "weight": 370, "cookies": false, "type": "", "deprecated": false, @@ -17304,7 +17446,8 @@ }, "x-appwrite": { "method": "createTopic", - "weight": 370, + "group": "topics", + "weight": 369, "cookies": false, "type": "", "deprecated": false, @@ -17393,7 +17536,8 @@ }, "x-appwrite": { "method": "getTopic", - "weight": 373, + "group": "topics", + "weight": 372, "cookies": false, "type": "", "deprecated": false, @@ -17452,7 +17596,8 @@ }, "x-appwrite": { "method": "updateTopic", - "weight": 374, + "group": "topics", + "weight": 373, "cookies": false, "type": "", "deprecated": false, @@ -17530,7 +17675,8 @@ }, "x-appwrite": { "method": "deleteTopic", - "weight": 375, + "group": "topics", + "weight": 374, "cookies": false, "type": "", "deprecated": false, @@ -17591,7 +17737,8 @@ }, "x-appwrite": { "method": "listTopicLogs", - "weight": 372, + "group": "topics", + "weight": 371, "cookies": false, "type": "", "deprecated": false, @@ -17664,7 +17811,8 @@ }, "x-appwrite": { "method": "listSubscribers", - "weight": 377, + "group": "subscribers", + "weight": 376, "cookies": false, "type": "", "deprecated": false, @@ -17744,7 +17892,8 @@ }, "x-appwrite": { "method": "createSubscriber", - "weight": 376, + "group": "subscribers", + "weight": 375, "cookies": false, "type": "", "deprecated": false, @@ -17833,7 +17982,8 @@ }, "x-appwrite": { "method": "getSubscriber", - "weight": 379, + "group": "subscribers", + "weight": 378, "cookies": false, "type": "", "deprecated": false, @@ -17895,7 +18045,8 @@ }, "x-appwrite": { "method": "deleteSubscriber", - "weight": 380, + "group": "subscribers", + "weight": 379, "cookies": false, "type": "", "deprecated": false, @@ -17967,7 +18118,8 @@ }, "x-appwrite": { "method": "list", - "weight": 338, + "group": null, + "weight": 337, "cookies": false, "type": "", "deprecated": false, @@ -18017,7 +18169,7 @@ }, "\/migrations\/appwrite": { "post": { - "summary": "Migrate Appwrite data", + "summary": "Create Appwrite migration", "operationId": "migrationsCreateAppwriteMigration", "consumes": [ "application\/json" @@ -18039,7 +18191,8 @@ }, "x-appwrite": { "method": "createAppwriteMigration", - "weight": 334, + "group": null, + "weight": 333, "cookies": false, "type": "", "deprecated": false, @@ -18110,7 +18263,7 @@ }, "\/migrations\/appwrite\/report": { "get": { - "summary": "Generate a report on Appwrite data", + "summary": "Get Appwrite migration report", "operationId": "migrationsGetAppwriteReport", "consumes": [ "application\/json" @@ -18132,7 +18285,8 @@ }, "x-appwrite": { "method": "getAppwriteReport", - "weight": 340, + "group": null, + "weight": 339, "cookies": false, "type": "", "deprecated": false, @@ -18197,7 +18351,7 @@ }, "\/migrations\/firebase": { "post": { - "summary": "Migrate Firebase data", + "summary": "Create Firebase migration", "operationId": "migrationsCreateFirebaseMigration", "consumes": [ "application\/json" @@ -18219,7 +18373,8 @@ }, "x-appwrite": { "method": "createFirebaseMigration", - "weight": 335, + "group": null, + "weight": 334, "cookies": false, "type": "", "deprecated": false, @@ -18276,7 +18431,7 @@ }, "\/migrations\/firebase\/report": { "get": { - "summary": "Generate a report on Firebase data", + "summary": "Get Firebase migration report", "operationId": "migrationsGetFirebaseReport", "consumes": [ "application\/json" @@ -18298,7 +18453,8 @@ }, "x-appwrite": { "method": "getFirebaseReport", - "weight": 341, + "group": null, + "weight": 340, "cookies": false, "type": "", "deprecated": false, @@ -18346,7 +18502,7 @@ }, "\/migrations\/nhost": { "post": { - "summary": "Migrate NHost data", + "summary": "Create NHost migration", "operationId": "migrationsCreateNHostMigration", "consumes": [ "application\/json" @@ -18368,7 +18524,8 @@ }, "x-appwrite": { "method": "createNHostMigration", - "weight": 337, + "group": null, + "weight": 336, "cookies": false, "type": "", "deprecated": false, @@ -18466,7 +18623,7 @@ }, "\/migrations\/nhost\/report": { "get": { - "summary": "Generate a report on NHost Data", + "summary": "Get NHost migration report", "operationId": "migrationsGetNHostReport", "consumes": [ "application\/json" @@ -18488,7 +18645,8 @@ }, "x-appwrite": { "method": "getNHostReport", - "weight": 343, + "group": null, + "weight": 342, "cookies": false, "type": "", "deprecated": false, @@ -18585,7 +18743,7 @@ }, "\/migrations\/supabase": { "post": { - "summary": "Migrate Supabase data", + "summary": "Create Supabase migration", "operationId": "migrationsCreateSupabaseMigration", "consumes": [ "application\/json" @@ -18607,7 +18765,8 @@ }, "x-appwrite": { "method": "createSupabaseMigration", - "weight": 336, + "group": null, + "weight": 335, "cookies": false, "type": "", "deprecated": false, @@ -18698,7 +18857,7 @@ }, "\/migrations\/supabase\/report": { "get": { - "summary": "Generate a report on Supabase Data", + "summary": "Get Supabase migration report", "operationId": "migrationsGetSupabaseReport", "consumes": [ "application\/json" @@ -18720,7 +18879,8 @@ }, "x-appwrite": { "method": "getSupabaseReport", - "weight": 342, + "group": null, + "weight": 341, "cookies": false, "type": "", "deprecated": false, @@ -18832,7 +18992,8 @@ }, "x-appwrite": { "method": "get", - "weight": 339, + "group": null, + "weight": 338, "cookies": false, "type": "", "deprecated": false, @@ -18867,7 +19028,7 @@ ] }, "patch": { - "summary": "Retry migration", + "summary": "Update retry migration", "operationId": "migrationsRetry", "consumes": [ "application\/json" @@ -18889,7 +19050,8 @@ }, "x-appwrite": { "method": "retry", - "weight": 344, + "group": null, + "weight": 343, "cookies": false, "type": "", "deprecated": false, @@ -18941,7 +19103,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 345, + "group": null, + "weight": 344, "cookies": false, "type": "", "deprecated": false, @@ -19000,7 +19163,8 @@ }, "x-appwrite": { "method": "getUsage", - "weight": 196, + "group": null, + "weight": 195, "cookies": false, "type": "", "deprecated": false, @@ -19083,7 +19247,8 @@ }, "x-appwrite": { "method": "listVariables", - "weight": 198, + "group": null, + "weight": 197, "cookies": false, "type": "", "deprecated": false, @@ -19130,7 +19295,8 @@ }, "x-appwrite": { "method": "createVariable", - "weight": 197, + "group": null, + "weight": 196, "cookies": false, "type": "", "deprecated": false, @@ -19206,7 +19372,8 @@ }, "x-appwrite": { "method": "getVariable", - "weight": 199, + "group": null, + "weight": 198, "cookies": false, "type": "", "deprecated": false, @@ -19263,7 +19430,8 @@ }, "x-appwrite": { "method": "updateVariable", - "weight": 200, + "group": null, + "weight": 199, "cookies": false, "type": "", "deprecated": false, @@ -19339,7 +19507,8 @@ }, "x-appwrite": { "method": "deleteVariable", - "weight": 201, + "group": null, + "weight": 200, "cookies": false, "type": "", "deprecated": false, @@ -19398,7 +19567,8 @@ }, "x-appwrite": { "method": "list", - "weight": 151, + "group": "projects", + "weight": 150, "cookies": false, "type": "", "deprecated": false, @@ -19468,7 +19638,8 @@ }, "x-appwrite": { "method": "create", - "weight": 150, + "group": "projects", + "weight": 149, "cookies": false, "type": "", "deprecated": false, @@ -19522,8 +19693,7 @@ "default": "default", "x-example": "default", "enum": [ - "default", - "fra" + "default" ], "x-enum-name": null, "x-enum-keys": [] @@ -19617,7 +19787,8 @@ }, "x-appwrite": { "method": "get", - "weight": 152, + "group": "projects", + "weight": 151, "cookies": false, "type": "", "deprecated": false, @@ -19674,7 +19845,8 @@ }, "x-appwrite": { "method": "update", - "weight": 153, + "group": "projects", + "weight": 152, "cookies": false, "type": "", "deprecated": false, @@ -19798,7 +19970,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 170, + "group": "projects", + "weight": 169, "cookies": false, "type": "", "deprecated": false, @@ -19857,7 +20030,8 @@ }, "x-appwrite": { "method": "updateApiStatus", - "weight": 157, + "group": "projects", + "weight": 156, "cookies": false, "type": "", "deprecated": false, @@ -19948,7 +20122,8 @@ }, "x-appwrite": { "method": "updateApiStatusAll", - "weight": 158, + "group": "projects", + "weight": 157, "cookies": false, "type": "", "deprecated": false, @@ -20025,7 +20200,8 @@ }, "x-appwrite": { "method": "updateAuthDuration", - "weight": 163, + "group": "auth", + "weight": 162, "cookies": false, "type": "", "deprecated": false, @@ -20102,7 +20278,8 @@ }, "x-appwrite": { "method": "updateAuthLimit", - "weight": 162, + "group": "auth", + "weight": 161, "cookies": false, "type": "", "deprecated": false, @@ -20179,7 +20356,8 @@ }, "x-appwrite": { "method": "updateAuthSessionsLimit", - "weight": 168, + "group": "auth", + "weight": 167, "cookies": false, "type": "", "deprecated": false, @@ -20256,7 +20434,8 @@ }, "x-appwrite": { "method": "updateMembershipsPrivacy", - "weight": 161, + "group": "auth", + "weight": 160, "cookies": false, "type": "", "deprecated": false, @@ -20347,7 +20526,8 @@ }, "x-appwrite": { "method": "updateMockNumbers", - "weight": 169, + "group": "auth", + "weight": 168, "cookies": false, "type": "", "deprecated": false, @@ -20427,7 +20607,8 @@ }, "x-appwrite": { "method": "updateAuthPasswordDictionary", - "weight": 166, + "group": "auth", + "weight": 165, "cookies": false, "type": "", "deprecated": false, @@ -20504,7 +20685,8 @@ }, "x-appwrite": { "method": "updateAuthPasswordHistory", - "weight": 165, + "group": "auth", + "weight": 164, "cookies": false, "type": "", "deprecated": false, @@ -20559,7 +20741,7 @@ }, "\/projects\/{projectId}\/auth\/personal-data": { "patch": { - "summary": "Enable or disable checking user passwords for similarity with their personal data.", + "summary": "Update personal data check", "operationId": "projectsUpdatePersonalDataCheck", "consumes": [ "application\/json" @@ -20581,7 +20763,8 @@ }, "x-appwrite": { "method": "updatePersonalDataCheck", - "weight": 167, + "group": "auth", + "weight": 166, "cookies": false, "type": "", "deprecated": false, @@ -20658,7 +20841,8 @@ }, "x-appwrite": { "method": "updateSessionAlerts", - "weight": 160, + "group": "auth", + "weight": 159, "cookies": false, "type": "", "deprecated": false, @@ -20735,7 +20919,8 @@ }, "x-appwrite": { "method": "updateAuthStatus", - "weight": 164, + "group": "auth", + "weight": 163, "cookies": false, "type": "", "deprecated": false, @@ -20831,7 +21016,8 @@ }, "x-appwrite": { "method": "createJWT", - "weight": 182, + "group": "auth", + "weight": 181, "cookies": false, "type": "", "deprecated": false, @@ -20917,7 +21103,8 @@ }, "x-appwrite": { "method": "listKeys", - "weight": 178, + "group": "keys", + "weight": 177, "cookies": false, "type": "", "deprecated": false, @@ -20974,7 +21161,8 @@ }, "x-appwrite": { "method": "createKey", - "weight": 177, + "group": "keys", + "weight": 176, "cookies": false, "type": "", "deprecated": false, @@ -21067,7 +21255,8 @@ }, "x-appwrite": { "method": "getKey", - "weight": 179, + "group": "keys", + "weight": 178, "cookies": false, "type": "", "deprecated": false, @@ -21132,7 +21321,8 @@ }, "x-appwrite": { "method": "updateKey", - "weight": 180, + "group": "keys", + "weight": 179, "cookies": false, "type": "", "deprecated": false, @@ -21226,7 +21416,8 @@ }, "x-appwrite": { "method": "deleteKey", - "weight": 181, + "group": "keys", + "weight": 180, "cookies": false, "type": "", "deprecated": false, @@ -21293,7 +21484,8 @@ }, "x-appwrite": { "method": "updateOAuth2", - "weight": 159, + "group": "auth", + "weight": 158, "cookies": false, "type": "", "deprecated": false, @@ -21351,6 +21543,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -21431,7 +21624,8 @@ }, "x-appwrite": { "method": "listPlatforms", - "weight": 184, + "group": "platforms", + "weight": 183, "cookies": false, "type": "", "deprecated": false, @@ -21488,7 +21682,8 @@ }, "x-appwrite": { "method": "createPlatform", - "weight": 183, + "group": "platforms", + "weight": 182, "cookies": false, "type": "", "deprecated": false, @@ -21609,7 +21804,8 @@ }, "x-appwrite": { "method": "getPlatform", - "weight": 185, + "group": "platforms", + "weight": 184, "cookies": false, "type": "", "deprecated": false, @@ -21674,7 +21870,8 @@ }, "x-appwrite": { "method": "updatePlatform", - "weight": 186, + "group": "platforms", + "weight": 185, "cookies": false, "type": "", "deprecated": false, @@ -21770,7 +21967,8 @@ }, "x-appwrite": { "method": "deletePlatform", - "weight": 187, + "group": "platforms", + "weight": 186, "cookies": false, "type": "", "deprecated": false, @@ -21837,7 +22035,8 @@ }, "x-appwrite": { "method": "updateServiceStatus", - "weight": 155, + "group": "projects", + "weight": 154, "cookies": false, "type": "", "deprecated": false, @@ -21936,7 +22135,8 @@ }, "x-appwrite": { "method": "updateServiceStatusAll", - "weight": 156, + "group": "projects", + "weight": 155, "cookies": false, "type": "", "deprecated": false, @@ -22013,7 +22213,8 @@ }, "x-appwrite": { "method": "updateSmtp", - "weight": 188, + "group": "templates", + "weight": 187, "cookies": false, "type": "", "deprecated": false, @@ -22141,7 +22342,8 @@ }, "x-appwrite": { "method": "createSmtpTest", - "weight": 189, + "group": "templates", + "weight": 188, "cookies": false, "type": "", "deprecated": false, @@ -22278,7 +22480,8 @@ }, "x-appwrite": { "method": "updateTeam", - "weight": 154, + "group": "projects", + "weight": 153, "cookies": false, "type": "", "deprecated": false, @@ -22355,7 +22558,8 @@ }, "x-appwrite": { "method": "getEmailTemplate", - "weight": 191, + "group": "templates", + "weight": 190, "cookies": false, "type": "", "deprecated": false, @@ -22574,7 +22778,8 @@ }, "x-appwrite": { "method": "updateEmailTemplate", - "weight": 193, + "group": "templates", + "weight": 192, "cookies": false, "type": "", "deprecated": false, @@ -22814,7 +23019,7 @@ ] }, "delete": { - "summary": "Reset custom email template", + "summary": "Delete custom email template", "operationId": "projectsDeleteEmailTemplate", "consumes": [ "application\/json" @@ -22836,7 +23041,8 @@ }, "x-appwrite": { "method": "deleteEmailTemplate", - "weight": 195, + "group": "templates", + "weight": 194, "cookies": false, "type": "", "deprecated": false, @@ -23057,7 +23263,8 @@ }, "x-appwrite": { "method": "getSmsTemplate", - "weight": 190, + "group": "templates", + "weight": 189, "cookies": false, "type": "", "deprecated": false, @@ -23273,7 +23480,8 @@ }, "x-appwrite": { "method": "updateSmsTemplate", - "weight": 192, + "group": "templates", + "weight": 191, "cookies": false, "type": "", "deprecated": false, @@ -23507,7 +23715,8 @@ }, "x-appwrite": { "method": "deleteSmsTemplate", - "weight": 194, + "group": "templates", + "weight": 193, "cookies": false, "type": "", "deprecated": false, @@ -23725,7 +23934,8 @@ }, "x-appwrite": { "method": "listWebhooks", - "weight": 172, + "group": "webhooks", + "weight": 171, "cookies": false, "type": "", "deprecated": false, @@ -23782,7 +23992,8 @@ }, "x-appwrite": { "method": "createWebhook", - "weight": 171, + "group": "webhooks", + "weight": 170, "cookies": false, "type": "", "deprecated": false, @@ -23901,7 +24112,8 @@ }, "x-appwrite": { "method": "getWebhook", - "weight": 173, + "group": "webhooks", + "weight": 172, "cookies": false, "type": "", "deprecated": false, @@ -23966,7 +24178,8 @@ }, "x-appwrite": { "method": "updateWebhook", - "weight": 174, + "group": "webhooks", + "weight": 173, "cookies": false, "type": "", "deprecated": false, @@ -24086,7 +24299,8 @@ }, "x-appwrite": { "method": "deleteWebhook", - "weight": 176, + "group": "webhooks", + "weight": 175, "cookies": false, "type": "", "deprecated": false, @@ -24153,7 +24367,8 @@ }, "x-appwrite": { "method": "updateWebhookSignature", - "weight": 175, + "group": "webhooks", + "weight": 174, "cookies": false, "type": "", "deprecated": false, @@ -24220,7 +24435,8 @@ }, "x-appwrite": { "method": "listRules", - "weight": 317, + "group": null, + "weight": 316, "cookies": false, "type": "", "deprecated": false, @@ -24290,7 +24506,8 @@ }, "x-appwrite": { "method": "createRule", - "weight": 316, + "group": null, + "weight": 315, "cookies": false, "type": "", "deprecated": false, @@ -24378,7 +24595,8 @@ }, "x-appwrite": { "method": "getRule", - "weight": 318, + "group": null, + "weight": 317, "cookies": false, "type": "", "deprecated": false, @@ -24430,7 +24648,8 @@ }, "x-appwrite": { "method": "deleteRule", - "weight": 319, + "group": null, + "weight": 318, "cookies": false, "type": "", "deprecated": false, @@ -24489,7 +24708,8 @@ }, "x-appwrite": { "method": "updateRuleVerification", - "weight": 320, + "group": null, + "weight": 319, "cookies": false, "type": "", "deprecated": false, @@ -24548,7 +24768,8 @@ }, "x-appwrite": { "method": "listBuckets", - "weight": 203, + "group": "buckets", + "weight": 202, "cookies": false, "type": "", "deprecated": false, @@ -24619,7 +24840,8 @@ }, "x-appwrite": { "method": "createBucket", - "weight": 202, + "group": "buckets", + "weight": 201, "cookies": false, "type": "", "deprecated": false, @@ -24757,7 +24979,8 @@ }, "x-appwrite": { "method": "getBucket", - "weight": 204, + "group": "buckets", + "weight": 203, "cookies": false, "type": "", "deprecated": false, @@ -24815,7 +25038,8 @@ }, "x-appwrite": { "method": "updateBucket", - "weight": 205, + "group": "buckets", + "weight": 204, "cookies": false, "type": "", "deprecated": false, @@ -24947,7 +25171,8 @@ }, "x-appwrite": { "method": "deleteBucket", - "weight": 206, + "group": "buckets", + "weight": 205, "cookies": false, "type": "", "deprecated": false, @@ -25007,7 +25232,8 @@ }, "x-appwrite": { "method": "listFiles", - "weight": 208, + "group": "files", + "weight": 207, "cookies": false, "type": "", "deprecated": false, @@ -25089,7 +25315,8 @@ }, "x-appwrite": { "method": "createFile", - "weight": 207, + "group": "files", + "weight": 206, "cookies": false, "type": "upload", "deprecated": false, @@ -25180,7 +25407,8 @@ }, "x-appwrite": { "method": "getFile", - "weight": 209, + "group": "files", + "weight": 208, "cookies": false, "type": "", "deprecated": false, @@ -25249,7 +25477,8 @@ }, "x-appwrite": { "method": "updateFile", - "weight": 214, + "group": "files", + "weight": 213, "cookies": false, "type": "", "deprecated": false, @@ -25337,7 +25566,8 @@ }, "x-appwrite": { "method": "deleteFile", - "weight": 215, + "group": "files", + "weight": 214, "cookies": false, "type": "", "deprecated": false, @@ -25408,7 +25638,8 @@ }, "x-appwrite": { "method": "getFileDownload", - "weight": 211, + "group": "files", + "weight": 210, "cookies": false, "type": "location", "deprecated": false, @@ -25479,7 +25710,8 @@ }, "x-appwrite": { "method": "getFilePreview", - "weight": 210, + "group": "files", + "weight": 209, "cookies": false, "type": "location", "deprecated": false, @@ -25678,7 +25910,8 @@ }, "x-appwrite": { "method": "getFileView", - "weight": 212, + "group": "files", + "weight": 211, "cookies": false, "type": "location", "deprecated": false, @@ -25749,7 +25982,8 @@ }, "x-appwrite": { "method": "getUsage", - "weight": 216, + "group": null, + "weight": 215, "cookies": false, "type": "", "deprecated": false, @@ -25820,7 +26054,8 @@ }, "x-appwrite": { "method": "getBucketUsage", - "weight": 217, + "group": null, + "weight": 216, "cookies": false, "type": "", "deprecated": false, @@ -25899,7 +26134,8 @@ }, "x-appwrite": { "method": "list", - "weight": 219, + "group": "teams", + "weight": 218, "cookies": false, "type": "", "deprecated": false, @@ -25973,7 +26209,8 @@ }, "x-appwrite": { "method": "create", - "weight": 218, + "group": "teams", + "weight": 217, "cookies": false, "type": "", "deprecated": false, @@ -26064,7 +26301,8 @@ }, "x-appwrite": { "method": "get", - "weight": 220, + "group": "teams", + "weight": 219, "cookies": false, "type": "", "deprecated": false, @@ -26125,7 +26363,8 @@ }, "x-appwrite": { "method": "updateName", - "weight": 222, + "group": "teams", + "weight": 221, "cookies": false, "type": "", "deprecated": false, @@ -26199,7 +26438,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 224, + "group": "teams", + "weight": 223, "cookies": false, "type": "", "deprecated": false, @@ -26262,7 +26502,8 @@ }, "x-appwrite": { "method": "listLogs", - "weight": 231, + "group": "logs", + "weight": 230, "cookies": false, "type": "", "deprecated": false, @@ -26333,7 +26574,8 @@ }, "x-appwrite": { "method": "listMemberships", - "weight": 226, + "group": "memberships", + "weight": 225, "cookies": false, "type": "", "deprecated": false, @@ -26415,7 +26657,8 @@ }, "x-appwrite": { "method": "createMembership", - "weight": 225, + "group": "memberships", + "weight": 224, "cookies": false, "type": "", "deprecated": false, @@ -26529,7 +26772,8 @@ }, "x-appwrite": { "method": "getMembership", - "weight": 227, + "group": "memberships", + "weight": 226, "cookies": false, "type": "", "deprecated": false, @@ -26598,7 +26842,8 @@ }, "x-appwrite": { "method": "updateMembership", - "weight": 228, + "group": "memberships", + "weight": 227, "cookies": false, "type": "", "deprecated": false, @@ -26683,7 +26928,8 @@ }, "x-appwrite": { "method": "deleteMembership", - "weight": 230, + "group": "memberships", + "weight": 229, "cookies": false, "type": "", "deprecated": false, @@ -26754,7 +27000,8 @@ }, "x-appwrite": { "method": "updateMembershipStatus", - "weight": 229, + "group": "memberships", + "weight": 228, "cookies": false, "type": "", "deprecated": false, @@ -26848,7 +27095,8 @@ }, "x-appwrite": { "method": "getPrefs", - "weight": 221, + "group": "teams", + "weight": 220, "cookies": false, "type": "", "deprecated": false, @@ -26907,7 +27155,8 @@ }, "x-appwrite": { "method": "updatePrefs", - "weight": 223, + "group": "teams", + "weight": 222, "cookies": false, "type": "", "deprecated": false, @@ -26986,7 +27235,8 @@ }, "x-appwrite": { "method": "list", - "weight": 241, + "group": "users", + "weight": 240, "cookies": false, "type": "", "deprecated": false, @@ -27057,7 +27307,8 @@ }, "x-appwrite": { "method": "create", - "weight": 232, + "group": "users", + "weight": 231, "cookies": false, "type": "", "deprecated": false, @@ -27151,7 +27402,8 @@ }, "x-appwrite": { "method": "createArgon2User", - "weight": 235, + "group": "users", + "weight": 234, "cookies": false, "type": "", "deprecated": false, @@ -27241,7 +27493,8 @@ }, "x-appwrite": { "method": "createBcryptUser", - "weight": 233, + "group": "users", + "weight": 232, "cookies": false, "type": "", "deprecated": false, @@ -27331,7 +27584,8 @@ }, "x-appwrite": { "method": "listIdentities", - "weight": 249, + "group": "identities", + "weight": 248, "cookies": false, "type": "", "deprecated": false, @@ -27399,7 +27653,8 @@ }, "x-appwrite": { "method": "deleteIdentity", - "weight": 272, + "group": "identities", + "weight": 271, "cookies": false, "type": "", "deprecated": false, @@ -27459,7 +27714,8 @@ }, "x-appwrite": { "method": "createMD5User", - "weight": 234, + "group": "users", + "weight": 233, "cookies": false, "type": "", "deprecated": false, @@ -27549,7 +27805,8 @@ }, "x-appwrite": { "method": "createPHPassUser", - "weight": 237, + "group": "users", + "weight": 236, "cookies": false, "type": "", "deprecated": false, @@ -27639,7 +27896,8 @@ }, "x-appwrite": { "method": "createScryptUser", - "weight": 238, + "group": "users", + "weight": 237, "cookies": false, "type": "", "deprecated": false, @@ -27764,7 +28022,8 @@ }, "x-appwrite": { "method": "createScryptModifiedUser", - "weight": 239, + "group": "users", + "weight": 238, "cookies": false, "type": "", "deprecated": false, @@ -27875,7 +28134,8 @@ }, "x-appwrite": { "method": "createSHAUser", - "weight": 236, + "group": "users", + "weight": 235, "cookies": false, "type": "", "deprecated": false, @@ -27986,7 +28246,8 @@ }, "x-appwrite": { "method": "getUsage", - "weight": 274, + "group": null, + "weight": 273, "cookies": false, "type": "", "deprecated": false, @@ -28057,7 +28318,8 @@ }, "x-appwrite": { "method": "get", - "weight": 242, + "group": "users", + "weight": 241, "cookies": false, "type": "", "deprecated": false, @@ -28110,7 +28372,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 270, + "group": "users", + "weight": 269, "cookies": false, "type": "", "deprecated": false, @@ -28170,7 +28433,8 @@ }, "x-appwrite": { "method": "updateEmail", - "weight": 255, + "group": "users", + "weight": 254, "cookies": false, "type": "", "deprecated": false, @@ -28248,7 +28512,8 @@ }, "x-appwrite": { "method": "createJWT", - "weight": 273, + "group": "sessions", + "weight": 272, "cookies": false, "type": "", "deprecated": false, @@ -28329,7 +28594,8 @@ }, "x-appwrite": { "method": "updateLabels", - "weight": 251, + "group": "users", + "weight": 250, "cookies": false, "type": "", "deprecated": false, @@ -28410,7 +28676,8 @@ }, "x-appwrite": { "method": "listLogs", - "weight": 247, + "group": "logs", + "weight": 246, "cookies": false, "type": "", "deprecated": false, @@ -28482,7 +28749,8 @@ }, "x-appwrite": { "method": "listMemberships", - "weight": 246, + "group": "memberships", + "weight": 245, "cookies": false, "type": "", "deprecated": false, @@ -28542,7 +28810,8 @@ }, "x-appwrite": { "method": "updateMfa", - "weight": 260, + "group": "users", + "weight": 259, "cookies": false, "type": "", "deprecated": false, @@ -28615,7 +28884,8 @@ }, "x-appwrite": { "method": "deleteMfaAuthenticator", - "weight": 265, + "group": "mfa", + "weight": 264, "cookies": false, "type": "", "deprecated": false, @@ -28688,7 +28958,8 @@ }, "x-appwrite": { "method": "listMfaFactors", - "weight": 261, + "group": "mfa", + "weight": 260, "cookies": false, "type": "", "deprecated": false, @@ -28748,7 +29019,8 @@ }, "x-appwrite": { "method": "getMfaRecoveryCodes", - "weight": 262, + "group": "mfa", + "weight": 261, "cookies": false, "type": "", "deprecated": false, @@ -28784,7 +29056,7 @@ ] }, "put": { - "summary": "Regenerate MFA recovery codes", + "summary": "Update MFA recovery codes (regenerate)", "operationId": "usersUpdateMfaRecoveryCodes", "consumes": [ "application\/json" @@ -28806,7 +29078,8 @@ }, "x-appwrite": { "method": "updateMfaRecoveryCodes", - "weight": 264, + "group": "mfa", + "weight": 263, "cookies": false, "type": "", "deprecated": false, @@ -28864,7 +29137,8 @@ }, "x-appwrite": { "method": "createMfaRecoveryCodes", - "weight": 263, + "group": "mfa", + "weight": 262, "cookies": false, "type": "", "deprecated": false, @@ -28924,7 +29198,8 @@ }, "x-appwrite": { "method": "updateName", - "weight": 253, + "group": "users", + "weight": 252, "cookies": false, "type": "", "deprecated": false, @@ -29002,7 +29277,8 @@ }, "x-appwrite": { "method": "updatePassword", - "weight": 254, + "group": "users", + "weight": 253, "cookies": false, "type": "", "deprecated": false, @@ -29080,7 +29356,8 @@ }, "x-appwrite": { "method": "updatePhone", - "weight": 256, + "group": "users", + "weight": 255, "cookies": false, "type": "", "deprecated": false, @@ -29158,7 +29435,8 @@ }, "x-appwrite": { "method": "getPrefs", - "weight": 243, + "group": "users", + "weight": 242, "cookies": false, "type": "", "deprecated": false, @@ -29216,7 +29494,8 @@ }, "x-appwrite": { "method": "updatePrefs", - "weight": 258, + "group": "users", + "weight": 257, "cookies": false, "type": "", "deprecated": false, @@ -29294,7 +29573,8 @@ }, "x-appwrite": { "method": "listSessions", - "weight": 245, + "group": "sessions", + "weight": 244, "cookies": false, "type": "", "deprecated": false, @@ -29352,7 +29632,8 @@ }, "x-appwrite": { "method": "createSession", - "weight": 266, + "group": "sessions", + "weight": 265, "cookies": false, "type": "", "deprecated": false, @@ -29405,7 +29686,8 @@ }, "x-appwrite": { "method": "deleteSessions", - "weight": 269, + "group": "sessions", + "weight": 268, "cookies": false, "type": "", "deprecated": false, @@ -29460,7 +29742,8 @@ }, "x-appwrite": { "method": "deleteSession", - "weight": 268, + "group": "sessions", + "weight": 267, "cookies": false, "type": "", "deprecated": false, @@ -29528,7 +29811,8 @@ }, "x-appwrite": { "method": "updateStatus", - "weight": 250, + "group": "users", + "weight": 249, "cookies": false, "type": "", "deprecated": false, @@ -29606,7 +29890,8 @@ }, "x-appwrite": { "method": "listTargets", - "weight": 248, + "group": "targets", + "weight": 247, "cookies": false, "type": "", "deprecated": false, @@ -29677,7 +29962,8 @@ }, "x-appwrite": { "method": "createTarget", - "weight": 240, + "group": "targets", + "weight": 239, "cookies": false, "type": "", "deprecated": false, @@ -29789,7 +30075,8 @@ }, "x-appwrite": { "method": "getTarget", - "weight": 244, + "group": "targets", + "weight": 243, "cookies": false, "type": "", "deprecated": false, @@ -29856,7 +30143,8 @@ }, "x-appwrite": { "method": "updateTarget", - "weight": 259, + "group": "targets", + "weight": 258, "cookies": false, "type": "", "deprecated": false, @@ -29945,7 +30233,8 @@ }, "x-appwrite": { "method": "deleteTarget", - "weight": 271, + "group": "targets", + "weight": 270, "cookies": false, "type": "", "deprecated": false, @@ -30014,7 +30303,8 @@ }, "x-appwrite": { "method": "createToken", - "weight": 267, + "group": "sessions", + "weight": 266, "cookies": false, "type": "", "deprecated": false, @@ -30095,7 +30385,8 @@ }, "x-appwrite": { "method": "updateEmailVerification", - "weight": 257, + "group": "users", + "weight": 256, "cookies": false, "type": "", "deprecated": false, @@ -30173,7 +30464,8 @@ }, "x-appwrite": { "method": "updatePhoneVerification", - "weight": 252, + "group": "users", + "weight": 251, "cookies": false, "type": "", "deprecated": false, @@ -30251,7 +30543,8 @@ }, "x-appwrite": { "method": "listRepositories", - "weight": 279, + "group": "repositories", + "weight": 278, "cookies": false, "type": "", "deprecated": false, @@ -30317,7 +30610,8 @@ }, "x-appwrite": { "method": "createRepository", - "weight": 280, + "group": "repositories", + "weight": 279, "cookies": false, "type": "", "deprecated": false, @@ -30401,7 +30695,8 @@ }, "x-appwrite": { "method": "getRepository", - "weight": 281, + "group": "repositories", + "weight": 280, "cookies": false, "type": "", "deprecated": false, @@ -30468,7 +30763,8 @@ }, "x-appwrite": { "method": "listRepositoryBranches", - "weight": 282, + "group": "repositories", + "weight": 281, "cookies": false, "type": "", "deprecated": false, @@ -30535,7 +30831,8 @@ }, "x-appwrite": { "method": "getRepositoryContents", - "weight": 277, + "group": "repositories", + "weight": 276, "cookies": false, "type": "", "deprecated": false, @@ -30589,7 +30886,7 @@ }, "\/vcs\/github\/installations\/{installationId}\/providerRepositories\/{providerRepositoryId}\/detection": { "post": { - "summary": "Detect runtime settings from source code", + "summary": "Create runtime settings detection", "operationId": "vcsCreateRepositoryDetection", "consumes": [ "application\/json" @@ -30611,7 +30908,8 @@ }, "x-appwrite": { "method": "createRepositoryDetection", - "weight": 278, + "group": "repositories", + "weight": 277, "cookies": false, "type": "", "deprecated": false, @@ -30671,7 +30969,7 @@ }, "\/vcs\/github\/installations\/{installationId}\/repositories\/{repositoryId}": { "patch": { - "summary": "Authorize external deployment", + "summary": "Update external deployment (authorize)", "operationId": "vcsUpdateExternalDeployments", "consumes": [ "application\/json" @@ -30690,7 +30988,8 @@ }, "x-appwrite": { "method": "updateExternalDeployments", - "weight": 287, + "group": "repositories", + "weight": 286, "cookies": false, "type": "", "deprecated": false, @@ -30775,7 +31074,8 @@ }, "x-appwrite": { "method": "listInstallations", - "weight": 284, + "group": "installations", + "weight": 283, "cookies": false, "type": "", "deprecated": false, @@ -30847,7 +31147,8 @@ }, "x-appwrite": { "method": "getInstallation", - "weight": 285, + "group": "installations", + "weight": 284, "cookies": false, "type": "", "deprecated": false, @@ -30899,7 +31200,8 @@ }, "x-appwrite": { "method": "deleteInstallation", - "weight": 286, + "group": "installations", + "weight": 285, "cookies": false, "type": "", "deprecated": false, diff --git a/app/config/specs/swagger2-1.6.x-server.json b/app/config/specs/swagger2-1.6.x-server.json index 83757c94f4..b9f722998f 100644 --- a/app/config/specs/swagger2-1.6.x-server.json +++ b/app/config/specs/swagger2-1.6.x-server.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "version": "1.6.1", + "version": "1.6.2", "title": "Appwrite", "description": "Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)", "termsOfService": "https:\/\/appwrite.io\/policy\/terms", @@ -102,6 +102,7 @@ }, "x-appwrite": { "method": "get", + "group": "account", "weight": 9, "cookies": false, "type": "", @@ -153,6 +154,7 @@ }, "x-appwrite": { "method": "create", + "group": "account", "weight": 8, "cookies": false, "type": "", @@ -243,6 +245,7 @@ }, "x-appwrite": { "method": "updateEmail", + "group": "account", "weight": 34, "cookies": false, "type": "", @@ -323,6 +326,7 @@ }, "x-appwrite": { "method": "listIdentities", + "group": "identities", "weight": 57, "cookies": false, "type": "", @@ -385,6 +389,7 @@ }, "x-appwrite": { "method": "deleteIdentity", + "group": "identities", "weight": 58, "cookies": false, "type": "", @@ -448,6 +453,7 @@ }, "x-appwrite": { "method": "createJWT", + "group": "tokens", "weight": 29, "cookies": false, "type": "", @@ -498,6 +504,7 @@ }, "x-appwrite": { "method": "listLogs", + "group": "logs", "weight": 31, "cookies": false, "type": "", @@ -565,6 +572,7 @@ }, "x-appwrite": { "method": "updateMFA", + "group": "mfa", "weight": 44, "cookies": false, "type": "", @@ -638,6 +646,7 @@ }, "x-appwrite": { "method": "createMfaAuthenticator", + "group": "mfa", "weight": 46, "cookies": false, "type": "", @@ -682,7 +691,7 @@ ] }, "put": { - "summary": "Verify authenticator", + "summary": "Update authenticator (confirmation)", "operationId": "accountUpdateMfaAuthenticator", "consumes": [ "application\/json" @@ -704,6 +713,7 @@ }, "x-appwrite": { "method": "updateMfaAuthenticator", + "group": "mfa", "weight": 47, "cookies": false, "type": "", @@ -783,6 +793,7 @@ }, "x-appwrite": { "method": "deleteMfaAuthenticator", + "group": "mfa", "weight": 51, "cookies": false, "type": "", @@ -851,6 +862,7 @@ }, "x-appwrite": { "method": "createMfaChallenge", + "group": "mfa", "weight": 52, "cookies": false, "type": "", @@ -905,7 +917,7 @@ ] }, "put": { - "summary": "Create MFA challenge (confirmation)", + "summary": "Update MFA challenge (confirmation)", "operationId": "accountUpdateMfaChallenge", "consumes": [ "application\/json" @@ -927,6 +939,7 @@ }, "x-appwrite": { "method": "updateMfaChallenge", + "group": "mfa", "weight": 53, "cookies": false, "type": "", @@ -1007,6 +1020,7 @@ }, "x-appwrite": { "method": "listMfaFactors", + "group": "mfa", "weight": 45, "cookies": false, "type": "", @@ -1038,7 +1052,7 @@ }, "\/account\/mfa\/recovery-codes": { "get": { - "summary": "Get MFA recovery codes", + "summary": "List MFA recovery codes", "operationId": "accountGetMfaRecoveryCodes", "consumes": [ "application\/json" @@ -1060,6 +1074,7 @@ }, "x-appwrite": { "method": "getMfaRecoveryCodes", + "group": "mfa", "weight": 50, "cookies": false, "type": "", @@ -1111,6 +1126,7 @@ }, "x-appwrite": { "method": "createMfaRecoveryCodes", + "group": "mfa", "weight": 48, "cookies": false, "type": "", @@ -1140,7 +1156,7 @@ ] }, "patch": { - "summary": "Regenerate MFA recovery codes", + "summary": "Update MFA recovery codes (regenerate)", "operationId": "accountUpdateMfaRecoveryCodes", "consumes": [ "application\/json" @@ -1162,6 +1178,7 @@ }, "x-appwrite": { "method": "updateMfaRecoveryCodes", + "group": "mfa", "weight": 49, "cookies": false, "type": "", @@ -1215,6 +1232,7 @@ }, "x-appwrite": { "method": "updateName", + "group": "account", "weight": 32, "cookies": false, "type": "", @@ -1288,6 +1306,7 @@ }, "x-appwrite": { "method": "updatePassword", + "group": "account", "weight": 33, "cookies": false, "type": "", @@ -1367,6 +1386,7 @@ }, "x-appwrite": { "method": "updatePhone", + "group": "account", "weight": 35, "cookies": false, "type": "", @@ -1447,6 +1467,7 @@ }, "x-appwrite": { "method": "getPrefs", + "group": "account", "weight": 30, "cookies": false, "type": "", @@ -1498,6 +1519,7 @@ }, "x-appwrite": { "method": "updatePrefs", + "group": "account", "weight": 36, "cookies": false, "type": "", @@ -1571,6 +1593,7 @@ }, "x-appwrite": { "method": "createRecovery", + "group": "recovery", "weight": 38, "cookies": false, "type": "", @@ -1630,7 +1653,7 @@ ] }, "put": { - "summary": "Create password recovery (confirmation)", + "summary": "Update password recovery (confirmation)", "operationId": "accountUpdateRecovery", "consumes": [ "application\/json" @@ -1652,6 +1675,7 @@ }, "x-appwrite": { "method": "updateRecovery", + "group": "recovery", "weight": 39, "cookies": false, "type": "", @@ -1739,6 +1763,7 @@ }, "x-appwrite": { "method": "listSessions", + "group": "sessions", "weight": 11, "cookies": false, "type": "", @@ -1785,6 +1810,7 @@ }, "x-appwrite": { "method": "deleteSessions", + "group": "sessions", "weight": 12, "cookies": false, "type": "", @@ -1838,6 +1864,7 @@ }, "x-appwrite": { "method": "createAnonymousSession", + "group": "sessions", "weight": 17, "cookies": false, "type": "", @@ -1888,6 +1915,7 @@ }, "x-appwrite": { "method": "createEmailPasswordSession", + "group": "sessions", "weight": 16, "cookies": false, "type": "", @@ -1965,6 +1993,7 @@ }, "x-appwrite": { "method": "updateMagicURLSession", + "group": "sessions", "weight": 26, "cookies": false, "type": "", @@ -2042,6 +2071,7 @@ }, "x-appwrite": { "method": "updatePhoneSession", + "group": "sessions", "weight": 27, "cookies": false, "type": "", @@ -2119,6 +2149,7 @@ }, "x-appwrite": { "method": "createSession", + "group": "sessions", "weight": 18, "cookies": false, "type": "", @@ -2196,6 +2227,7 @@ }, "x-appwrite": { "method": "getSession", + "group": "sessions", "weight": 13, "cookies": false, "type": "", @@ -2257,6 +2289,7 @@ }, "x-appwrite": { "method": "updateSession", + "group": "sessions", "weight": 15, "cookies": false, "type": "", @@ -2313,6 +2346,7 @@ }, "x-appwrite": { "method": "deleteSession", + "group": "sessions", "weight": 14, "cookies": false, "type": "", @@ -2376,6 +2410,7 @@ }, "x-appwrite": { "method": "updateStatus", + "group": "account", "weight": 37, "cookies": false, "type": "", @@ -2429,6 +2464,7 @@ }, "x-appwrite": { "method": "createEmailToken", + "group": "tokens", "weight": 25, "cookies": false, "type": "", @@ -2512,6 +2548,7 @@ }, "x-appwrite": { "method": "createMagicURLToken", + "group": "tokens", "weight": 24, "cookies": false, "type": "", @@ -2601,6 +2638,7 @@ }, "x-appwrite": { "method": "createOAuth2Token", + "group": "tokens", "weight": 23, "cookies": false, "type": "webAuth", @@ -2628,7 +2666,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", "required": true, "type": "string", "x-example": "amazon", @@ -2647,6 +2685,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -2736,6 +2775,7 @@ }, "x-appwrite": { "method": "createPhoneToken", + "group": "tokens", "weight": 28, "cookies": false, "type": "", @@ -2816,6 +2856,7 @@ }, "x-appwrite": { "method": "createVerification", + "group": "verification", "weight": 40, "cookies": false, "type": "", @@ -2865,7 +2906,7 @@ ] }, "put": { - "summary": "Create email verification (confirmation)", + "summary": "Update email verification (confirmation)", "operationId": "accountUpdateVerification", "consumes": [ "application\/json" @@ -2887,6 +2928,7 @@ }, "x-appwrite": { "method": "updateVerification", + "group": "verification", "weight": 41, "cookies": false, "type": "", @@ -2967,6 +3009,7 @@ }, "x-appwrite": { "method": "createPhoneVerification", + "group": "verification", "weight": 42, "cookies": false, "type": "", @@ -3021,6 +3064,7 @@ }, "x-appwrite": { "method": "updatePhoneVerification", + "group": "verification", "weight": 43, "cookies": false, "type": "", @@ -3101,6 +3145,7 @@ }, "x-appwrite": { "method": "getBrowser", + "group": null, "weight": 60, "cookies": false, "type": "location", @@ -3229,6 +3274,7 @@ }, "x-appwrite": { "method": "getCreditCard", + "group": null, "weight": 59, "cookies": false, "type": "location", @@ -3363,6 +3409,7 @@ }, "x-appwrite": { "method": "getFavicon", + "group": null, "weight": 63, "cookies": false, "type": "location", @@ -3429,6 +3476,7 @@ }, "x-appwrite": { "method": "getFlag", + "group": null, "weight": 61, "cookies": false, "type": "location", @@ -3919,6 +3967,7 @@ }, "x-appwrite": { "method": "getImage", + "group": null, "weight": 62, "cookies": false, "type": "location", @@ -4005,6 +4054,7 @@ }, "x-appwrite": { "method": "getInitials", + "group": null, "weight": 65, "cookies": false, "type": "location", @@ -4099,6 +4149,7 @@ }, "x-appwrite": { "method": "getQR", + "group": null, "weight": 64, "cookies": false, "type": "location", @@ -4193,6 +4244,7 @@ }, "x-appwrite": { "method": "list", + "group": "databases", "weight": 70, "cookies": false, "type": "", @@ -4265,6 +4317,7 @@ }, "x-appwrite": { "method": "create", + "group": "databases", "weight": 69, "cookies": false, "type": "", @@ -4349,6 +4402,7 @@ }, "x-appwrite": { "method": "get", + "group": "databases", "weight": 71, "cookies": false, "type": "", @@ -4408,6 +4462,7 @@ }, "x-appwrite": { "method": "update", + "group": "databases", "weight": 73, "cookies": false, "type": "", @@ -4486,6 +4541,7 @@ }, "x-appwrite": { "method": "delete", + "group": "databases", "weight": 74, "cookies": false, "type": "", @@ -4547,6 +4603,7 @@ }, "x-appwrite": { "method": "listCollections", + "group": "collections", "weight": 76, "cookies": false, "type": "", @@ -4627,6 +4684,7 @@ }, "x-appwrite": { "method": "createCollection", + "group": "collections", "weight": 75, "cookies": false, "type": "", @@ -4734,6 +4792,7 @@ }, "x-appwrite": { "method": "getCollection", + "group": "collections", "weight": 77, "cookies": false, "type": "", @@ -4801,6 +4860,7 @@ }, "x-appwrite": { "method": "updateCollection", + "group": "collections", "weight": 79, "cookies": false, "type": "", @@ -4902,6 +4962,7 @@ }, "x-appwrite": { "method": "deleteCollection", + "group": "collections", "weight": 80, "cookies": false, "type": "", @@ -4971,6 +5032,7 @@ }, "x-appwrite": { "method": "listAttributes", + "group": "attributes", "weight": 91, "cookies": false, "type": "", @@ -5052,6 +5114,7 @@ }, "x-appwrite": { "method": "createBooleanAttribute", + "group": "attributes", "weight": 88, "cookies": false, "type": "", @@ -5158,6 +5221,7 @@ }, "x-appwrite": { "method": "updateBooleanAttribute", + "group": "attributes", "weight": 100, "cookies": false, "type": "", @@ -5266,6 +5330,7 @@ }, "x-appwrite": { "method": "createDatetimeAttribute", + "group": "attributes", "weight": 89, "cookies": false, "type": "", @@ -5372,6 +5437,7 @@ }, "x-appwrite": { "method": "updateDatetimeAttribute", + "group": "attributes", "weight": 101, "cookies": false, "type": "", @@ -5480,6 +5546,7 @@ }, "x-appwrite": { "method": "createEmailAttribute", + "group": "attributes", "weight": 82, "cookies": false, "type": "", @@ -5586,6 +5653,7 @@ }, "x-appwrite": { "method": "updateEmailAttribute", + "group": "attributes", "weight": 94, "cookies": false, "type": "", @@ -5694,6 +5762,7 @@ }, "x-appwrite": { "method": "createEnumAttribute", + "group": "attributes", "weight": 83, "cookies": false, "type": "", @@ -5810,6 +5879,7 @@ }, "x-appwrite": { "method": "updateEnumAttribute", + "group": "attributes", "weight": 95, "cookies": false, "type": "", @@ -5928,6 +5998,7 @@ }, "x-appwrite": { "method": "createFloatAttribute", + "group": "attributes", "weight": 87, "cookies": false, "type": "", @@ -6046,6 +6117,7 @@ }, "x-appwrite": { "method": "updateFloatAttribute", + "group": "attributes", "weight": 99, "cookies": false, "type": "", @@ -6166,6 +6238,7 @@ }, "x-appwrite": { "method": "createIntegerAttribute", + "group": "attributes", "weight": 86, "cookies": false, "type": "", @@ -6284,6 +6357,7 @@ }, "x-appwrite": { "method": "updateIntegerAttribute", + "group": "attributes", "weight": 98, "cookies": false, "type": "", @@ -6404,6 +6478,7 @@ }, "x-appwrite": { "method": "createIpAttribute", + "group": "attributes", "weight": 84, "cookies": false, "type": "", @@ -6510,6 +6585,7 @@ }, "x-appwrite": { "method": "updateIpAttribute", + "group": "attributes", "weight": 96, "cookies": false, "type": "", @@ -6618,6 +6694,7 @@ }, "x-appwrite": { "method": "createRelationshipAttribute", + "group": "attributes", "weight": 90, "cookies": false, "type": "", @@ -6751,6 +6828,7 @@ }, "x-appwrite": { "method": "createStringAttribute", + "group": "attributes", "weight": 81, "cookies": false, "type": "", @@ -6870,6 +6948,7 @@ }, "x-appwrite": { "method": "updateStringAttribute", + "group": "attributes", "weight": 93, "cookies": false, "type": "", @@ -6984,6 +7063,7 @@ }, "x-appwrite": { "method": "createUrlAttribute", + "group": "attributes", "weight": 85, "cookies": false, "type": "", @@ -7090,6 +7170,7 @@ }, "x-appwrite": { "method": "updateUrlAttribute", + "group": "attributes", "weight": 97, "cookies": false, "type": "", @@ -7229,6 +7310,7 @@ }, "x-appwrite": { "method": "getAttribute", + "group": "attributes", "weight": 92, "cookies": false, "type": "", @@ -7298,6 +7380,7 @@ }, "x-appwrite": { "method": "deleteAttribute", + "group": "attributes", "weight": 103, "cookies": false, "type": "", @@ -7374,6 +7457,7 @@ }, "x-appwrite": { "method": "updateRelationshipAttribute", + "group": "attributes", "weight": 102, "cookies": false, "type": "", @@ -7478,6 +7562,7 @@ }, "x-appwrite": { "method": "listDocuments", + "group": "documents", "weight": 109, "cookies": false, "type": "", @@ -7561,6 +7646,7 @@ }, "x-appwrite": { "method": "createDocument", + "group": "documents", "weight": 108, "cookies": false, "type": "", @@ -7668,6 +7754,7 @@ }, "x-appwrite": { "method": "getDocument", + "group": "documents", "weight": 110, "cookies": false, "type": "", @@ -7759,6 +7846,7 @@ }, "x-appwrite": { "method": "updateDocument", + "group": "documents", "weight": 112, "cookies": false, "type": "", @@ -7857,6 +7945,7 @@ }, "x-appwrite": { "method": "deleteDocument", + "group": "documents", "weight": 113, "cookies": false, "type": "", @@ -7938,6 +8027,7 @@ }, "x-appwrite": { "method": "listIndexes", + "group": "indexes", "weight": 105, "cookies": false, "type": "", @@ -8017,6 +8107,7 @@ }, "x-appwrite": { "method": "createIndex", + "group": "collections", "weight": 104, "cookies": false, "type": "", @@ -8137,6 +8228,7 @@ }, "x-appwrite": { "method": "getIndex", + "group": "indexes", "weight": 106, "cookies": false, "type": "", @@ -8206,6 +8298,7 @@ }, "x-appwrite": { "method": "deleteIndex", + "group": "indexes", "weight": 107, "cookies": false, "type": "", @@ -8282,7 +8375,8 @@ }, "x-appwrite": { "method": "list", - "weight": 289, + "group": "functions", + "weight": 288, "cookies": false, "type": "", "deprecated": false, @@ -8354,7 +8448,8 @@ }, "x-appwrite": { "method": "create", - "weight": 288, + "group": "functions", + "weight": 287, "cookies": false, "type": "", "deprecated": false, @@ -8625,7 +8720,8 @@ }, "x-appwrite": { "method": "listRuntimes", - "weight": 290, + "group": "runtimes", + "weight": 289, "cookies": false, "type": "", "deprecated": false, @@ -8676,7 +8772,8 @@ }, "x-appwrite": { "method": "listSpecifications", - "weight": 291, + "group": "runtimes", + "weight": 290, "cookies": false, "type": "", "deprecated": false, @@ -8728,7 +8825,8 @@ }, "x-appwrite": { "method": "get", - "weight": 292, + "group": "functions", + "weight": 291, "cookies": false, "type": "", "deprecated": false, @@ -8787,7 +8885,8 @@ }, "x-appwrite": { "method": "update", - "weight": 295, + "group": "functions", + "weight": 294, "cookies": false, "type": "", "deprecated": false, @@ -9028,7 +9127,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 298, + "group": "functions", + "weight": 297, "cookies": false, "type": "", "deprecated": false, @@ -9089,7 +9189,8 @@ }, "x-appwrite": { "method": "listDeployments", - "weight": 300, + "group": "deployments", + "weight": 299, "cookies": false, "type": "", "deprecated": false, @@ -9169,7 +9270,8 @@ }, "x-appwrite": { "method": "createDeployment", - "weight": 299, + "group": "deployments", + "weight": 298, "cookies": false, "type": "upload", "deprecated": false, @@ -9261,7 +9363,8 @@ }, "x-appwrite": { "method": "getDeployment", - "weight": 301, + "group": "deployments", + "weight": 300, "cookies": false, "type": "", "deprecated": false, @@ -9328,7 +9431,8 @@ }, "x-appwrite": { "method": "updateDeployment", - "weight": 297, + "group": "deployments", + "weight": 296, "cookies": false, "type": "", "deprecated": false, @@ -9390,7 +9494,8 @@ }, "x-appwrite": { "method": "deleteDeployment", - "weight": 302, + "group": "deployments", + "weight": 301, "cookies": false, "type": "", "deprecated": false, @@ -9437,7 +9542,7 @@ }, "\/functions\/{functionId}\/deployments\/{deploymentId}\/build": { "post": { - "summary": "Rebuild deployment", + "summary": "Create deployment build", "operationId": "functionsCreateBuild", "consumes": [ "application\/json" @@ -9456,7 +9561,8 @@ }, "x-appwrite": { "method": "createBuild", - "weight": 303, + "group": "deployments", + "weight": 302, "cookies": false, "type": "", "deprecated": false, @@ -9538,7 +9644,8 @@ }, "x-appwrite": { "method": "updateDeploymentBuild", - "weight": 304, + "group": "deployments", + "weight": 303, "cookies": false, "type": "", "deprecated": false, @@ -9585,7 +9692,7 @@ }, "\/functions\/{functionId}\/deployments\/{deploymentId}\/download": { "get": { - "summary": "Download deployment", + "summary": "Get deployment download", "operationId": "functionsGetDeploymentDownload", "consumes": [ "application\/json" @@ -9607,7 +9714,8 @@ }, "x-appwrite": { "method": "getDeploymentDownload", - "weight": 296, + "group": "deployments", + "weight": 295, "cookies": false, "type": "location", "deprecated": false, @@ -9678,7 +9786,8 @@ }, "x-appwrite": { "method": "listExecutions", - "weight": 306, + "group": "executions", + "weight": 305, "cookies": false, "type": "", "deprecated": false, @@ -9762,7 +9871,8 @@ }, "x-appwrite": { "method": "createExecution", - "weight": 305, + "group": "executions", + "weight": 304, "cookies": false, "type": "", "deprecated": false, @@ -9882,7 +9992,8 @@ }, "x-appwrite": { "method": "getExecution", - "weight": 307, + "group": "executions", + "weight": 306, "cookies": false, "type": "", "deprecated": false, @@ -9948,7 +10059,8 @@ }, "x-appwrite": { "method": "deleteExecution", - "weight": 308, + "group": "executions", + "weight": 307, "cookies": false, "type": "", "deprecated": false, @@ -10017,7 +10129,8 @@ }, "x-appwrite": { "method": "listVariables", - "weight": 310, + "group": "variables", + "weight": 309, "cookies": false, "type": "", "deprecated": false, @@ -10076,7 +10189,8 @@ }, "x-appwrite": { "method": "createVariable", - "weight": 309, + "group": "variables", + "weight": 308, "cookies": false, "type": "", "deprecated": false, @@ -10162,7 +10276,8 @@ }, "x-appwrite": { "method": "getVariable", - "weight": 311, + "group": "variables", + "weight": 310, "cookies": false, "type": "", "deprecated": false, @@ -10229,7 +10344,8 @@ }, "x-appwrite": { "method": "updateVariable", - "weight": 312, + "group": "variables", + "weight": 311, "cookies": false, "type": "", "deprecated": false, @@ -10315,7 +10431,8 @@ }, "x-appwrite": { "method": "deleteVariable", - "weight": 313, + "group": "variables", + "weight": 312, "cookies": false, "type": "", "deprecated": false, @@ -10384,7 +10501,8 @@ }, "x-appwrite": { "method": "query", - "weight": 331, + "group": "graphql", + "weight": 330, "cookies": false, "type": "graphql", "deprecated": false, @@ -10459,7 +10577,8 @@ }, "x-appwrite": { "method": "mutation", - "weight": 330, + "group": "graphql", + "weight": 329, "cookies": false, "type": "graphql", "deprecated": false, @@ -10534,6 +10653,7 @@ }, "x-appwrite": { "method": "get", + "group": "health", "weight": 125, "cookies": false, "type": "", @@ -10585,7 +10705,8 @@ }, "x-appwrite": { "method": "getAntivirus", - "weight": 147, + "group": "health", + "weight": 146, "cookies": false, "type": "", "deprecated": false, @@ -10636,6 +10757,7 @@ }, "x-appwrite": { "method": "getCache", + "group": "health", "weight": 128, "cookies": false, "type": "", @@ -10687,6 +10809,7 @@ }, "x-appwrite": { "method": "getCertificate", + "group": "health", "weight": 133, "cookies": false, "type": "", @@ -10747,6 +10870,7 @@ }, "x-appwrite": { "method": "getDB", + "group": "health", "weight": 127, "cookies": false, "type": "", @@ -10798,6 +10922,7 @@ }, "x-appwrite": { "method": "getPubSub", + "group": "health", "weight": 129, "cookies": false, "type": "", @@ -10849,6 +10974,7 @@ }, "x-appwrite": { "method": "getQueueBuilds", + "group": "queue", "weight": 135, "cookies": false, "type": "", @@ -10911,6 +11037,7 @@ }, "x-appwrite": { "method": "getQueueCertificates", + "group": "queue", "weight": 134, "cookies": false, "type": "", @@ -10973,6 +11100,7 @@ }, "x-appwrite": { "method": "getQueueDatabases", + "group": "queue", "weight": 136, "cookies": false, "type": "", @@ -11044,6 +11172,7 @@ }, "x-appwrite": { "method": "getQueueDeletes", + "group": "queue", "weight": 137, "cookies": false, "type": "", @@ -11106,7 +11235,8 @@ }, "x-appwrite": { "method": "getFailedJobs", - "weight": 148, + "group": "queue", + "weight": 147, "cookies": false, "type": "", "deprecated": false, @@ -11146,7 +11276,6 @@ "v1-functions", "v1-stats-resources", "v1-stats-usage", - "v1-stats-usage-dump", "v1-webhooks", "v1-certificates", "v1-builds", @@ -11193,6 +11322,7 @@ }, "x-appwrite": { "method": "getQueueFunctions", + "group": "queue", "weight": 141, "cookies": false, "type": "", @@ -11255,6 +11385,7 @@ }, "x-appwrite": { "method": "getQueueLogs", + "group": "queue", "weight": 132, "cookies": false, "type": "", @@ -11317,6 +11448,7 @@ }, "x-appwrite": { "method": "getQueueMails", + "group": "queue", "weight": 138, "cookies": false, "type": "", @@ -11379,6 +11511,7 @@ }, "x-appwrite": { "method": "getQueueMessaging", + "group": "queue", "weight": 139, "cookies": false, "type": "", @@ -11441,6 +11574,7 @@ }, "x-appwrite": { "method": "getQueueMigrations", + "group": "queue", "weight": 140, "cookies": false, "type": "", @@ -11503,6 +11637,7 @@ }, "x-appwrite": { "method": "getQueueStatsResources", + "group": "queue", "weight": 142, "cookies": false, "type": "", @@ -11565,6 +11700,7 @@ }, "x-appwrite": { "method": "getQueueUsage", + "group": "queue", "weight": 143, "cookies": false, "type": "", @@ -11603,68 +11739,6 @@ ] } }, - "\/health\/queue\/stats-usage-dump": { - "get": { - "summary": "Get usage dump queue", - "operationId": "healthGetQueueStatsUsageDump", - "consumes": [ - "application\/json" - ], - "produces": [ - "application\/json" - ], - "tags": [ - "health" - ], - "description": "Get the number of projects containing metrics that are waiting to be processed in the Appwrite internal queue server.", - "responses": { - "200": { - "description": "Health Queue", - "schema": { - "$ref": "#\/definitions\/healthQueue" - } - } - }, - "x-appwrite": { - "method": "getQueueStatsUsageDump", - "weight": 144, - "cookies": false, - "type": "", - "deprecated": false, - "demo": "health\/get-queue-stats-usage-dump.md", - "edit": "https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-stats-usage-dump.md", - "rate-limit": 0, - "rate-time": 3600, - "rate-key": "url:{url},ip:{ip}", - "scope": "health.read", - "platforms": [ - "server" - ], - "packaging": false, - "auth": { - "Project": [], - "Key": [] - } - }, - "security": [ - { - "Project": [], - "Key": [] - } - ], - "parameters": [ - { - "name": "threshold", - "description": "Queue size threshold. When hit (equal or higher), endpoint returns server error. Default value is 5000.", - "required": false, - "type": "integer", - "format": "int32", - "default": 5000, - "in": "query" - } - ] - } - }, "\/health\/queue\/webhooks": { "get": { "summary": "Get webhooks queue", @@ -11689,6 +11763,7 @@ }, "x-appwrite": { "method": "getQueueWebhooks", + "group": "queue", "weight": 131, "cookies": false, "type": "", @@ -11751,7 +11826,8 @@ }, "x-appwrite": { "method": "getStorage", - "weight": 146, + "group": "storage", + "weight": 145, "cookies": false, "type": "", "deprecated": false, @@ -11802,7 +11878,8 @@ }, "x-appwrite": { "method": "getStorageLocal", - "weight": 145, + "group": "storage", + "weight": 144, "cookies": false, "type": "", "deprecated": false, @@ -11853,6 +11930,7 @@ }, "x-appwrite": { "method": "getTime", + "group": "health", "weight": 130, "cookies": false, "type": "", @@ -11904,6 +11982,7 @@ }, "x-appwrite": { "method": "get", + "group": null, "weight": 117, "cookies": false, "type": "", @@ -11959,6 +12038,7 @@ }, "x-appwrite": { "method": "listCodes", + "group": null, "weight": 118, "cookies": false, "type": "", @@ -12014,6 +12094,7 @@ }, "x-appwrite": { "method": "listContinents", + "group": null, "weight": 122, "cookies": false, "type": "", @@ -12069,6 +12150,7 @@ }, "x-appwrite": { "method": "listCountries", + "group": null, "weight": 119, "cookies": false, "type": "", @@ -12124,6 +12206,7 @@ }, "x-appwrite": { "method": "listCountriesEU", + "group": null, "weight": 120, "cookies": false, "type": "", @@ -12179,6 +12262,7 @@ }, "x-appwrite": { "method": "listCountriesPhones", + "group": null, "weight": 121, "cookies": false, "type": "", @@ -12234,6 +12318,7 @@ }, "x-appwrite": { "method": "listCurrencies", + "group": null, "weight": 123, "cookies": false, "type": "", @@ -12289,6 +12374,7 @@ }, "x-appwrite": { "method": "listLanguages", + "group": null, "weight": 124, "cookies": false, "type": "", @@ -12344,7 +12430,8 @@ }, "x-appwrite": { "method": "listMessages", - "weight": 384, + "group": "messages", + "weight": 383, "cookies": false, "type": "", "deprecated": false, @@ -12419,7 +12506,8 @@ }, "x-appwrite": { "method": "createEmail", - "weight": 381, + "group": "messages", + "weight": 380, "cookies": false, "type": "", "deprecated": false, @@ -12577,7 +12665,8 @@ }, "x-appwrite": { "method": "updateEmail", - "weight": 388, + "group": "messages", + "weight": 387, "cookies": false, "type": "", "deprecated": false, @@ -12732,7 +12821,8 @@ }, "x-appwrite": { "method": "createPush", - "weight": 383, + "group": "messages", + "weight": 382, "cookies": false, "type": "", "deprecated": false, @@ -12927,7 +13017,8 @@ }, "x-appwrite": { "method": "updatePush", - "weight": 390, + "group": "messages", + "weight": 389, "cookies": false, "type": "", "deprecated": false, @@ -13121,7 +13212,8 @@ }, "x-appwrite": { "method": "createSms", - "weight": 382, + "group": "messages", + "weight": 381, "cookies": false, "type": "", "deprecated": false, @@ -13239,7 +13331,8 @@ }, "x-appwrite": { "method": "updateSms", - "weight": 389, + "group": "messages", + "weight": 388, "cookies": false, "type": "", "deprecated": false, @@ -13355,7 +13448,8 @@ }, "x-appwrite": { "method": "getMessage", - "weight": 387, + "group": "messages", + "weight": 386, "cookies": false, "type": "", "deprecated": false, @@ -13410,7 +13504,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 391, + "group": "messages", + "weight": 390, "cookies": false, "type": "", "deprecated": false, @@ -13472,7 +13567,8 @@ }, "x-appwrite": { "method": "listMessageLogs", - "weight": 385, + "group": "logs", + "weight": 384, "cookies": false, "type": "", "deprecated": false, @@ -13546,7 +13642,8 @@ }, "x-appwrite": { "method": "listTargets", - "weight": 386, + "group": "messages", + "weight": 385, "cookies": false, "type": "", "deprecated": false, @@ -13620,7 +13717,8 @@ }, "x-appwrite": { "method": "listProviders", - "weight": 356, + "group": "providers", + "weight": 355, "cookies": false, "type": "", "deprecated": false, @@ -13695,7 +13793,8 @@ }, "x-appwrite": { "method": "createApnsProvider", - "weight": 355, + "group": "providers", + "weight": 354, "cookies": false, "type": "", "deprecated": false, @@ -13810,7 +13909,8 @@ }, "x-appwrite": { "method": "updateApnsProvider", - "weight": 368, + "group": "providers", + "weight": 367, "cookies": false, "type": "", "deprecated": false, @@ -13923,7 +14023,8 @@ }, "x-appwrite": { "method": "createFcmProvider", - "weight": 354, + "group": "providers", + "weight": 353, "cookies": false, "type": "", "deprecated": false, @@ -14014,7 +14115,8 @@ }, "x-appwrite": { "method": "updateFcmProvider", - "weight": 367, + "group": "providers", + "weight": 366, "cookies": false, "type": "", "deprecated": false, @@ -14103,7 +14205,8 @@ }, "x-appwrite": { "method": "createMailgunProvider", - "weight": 346, + "group": "providers", + "weight": 345, "cookies": false, "type": "", "deprecated": false, @@ -14230,7 +14333,8 @@ }, "x-appwrite": { "method": "updateMailgunProvider", - "weight": 359, + "group": "providers", + "weight": 358, "cookies": false, "type": "", "deprecated": false, @@ -14355,7 +14459,8 @@ }, "x-appwrite": { "method": "createMsg91Provider", - "weight": 349, + "group": "providers", + "weight": 348, "cookies": false, "type": "", "deprecated": false, @@ -14458,7 +14563,8 @@ }, "x-appwrite": { "method": "updateMsg91Provider", - "weight": 362, + "group": "providers", + "weight": 361, "cookies": false, "type": "", "deprecated": false, @@ -14559,7 +14665,8 @@ }, "x-appwrite": { "method": "createSendgridProvider", - "weight": 347, + "group": "providers", + "weight": 346, "cookies": false, "type": "", "deprecated": false, @@ -14674,7 +14781,8 @@ }, "x-appwrite": { "method": "updateSendgridProvider", - "weight": 360, + "group": "providers", + "weight": 359, "cookies": false, "type": "", "deprecated": false, @@ -14787,7 +14895,8 @@ }, "x-appwrite": { "method": "createSmtpProvider", - "weight": 348, + "group": "providers", + "weight": 347, "cookies": false, "type": "", "deprecated": false, @@ -14946,7 +15055,8 @@ }, "x-appwrite": { "method": "updateSmtpProvider", - "weight": 361, + "group": "providers", + "weight": 360, "cookies": false, "type": "", "deprecated": false, @@ -15102,7 +15212,8 @@ }, "x-appwrite": { "method": "createTelesignProvider", - "weight": 350, + "group": "providers", + "weight": 349, "cookies": false, "type": "", "deprecated": false, @@ -15205,7 +15316,8 @@ }, "x-appwrite": { "method": "updateTelesignProvider", - "weight": 363, + "group": "providers", + "weight": 362, "cookies": false, "type": "", "deprecated": false, @@ -15306,7 +15418,8 @@ }, "x-appwrite": { "method": "createTextmagicProvider", - "weight": 351, + "group": "providers", + "weight": 350, "cookies": false, "type": "", "deprecated": false, @@ -15409,7 +15522,8 @@ }, "x-appwrite": { "method": "updateTextmagicProvider", - "weight": 364, + "group": "providers", + "weight": 363, "cookies": false, "type": "", "deprecated": false, @@ -15510,7 +15624,8 @@ }, "x-appwrite": { "method": "createTwilioProvider", - "weight": 352, + "group": "providers", + "weight": 351, "cookies": false, "type": "", "deprecated": false, @@ -15613,7 +15728,8 @@ }, "x-appwrite": { "method": "updateTwilioProvider", - "weight": 365, + "group": "providers", + "weight": 364, "cookies": false, "type": "", "deprecated": false, @@ -15714,7 +15830,8 @@ }, "x-appwrite": { "method": "createVonageProvider", - "weight": 353, + "group": "providers", + "weight": 352, "cookies": false, "type": "", "deprecated": false, @@ -15817,7 +15934,8 @@ }, "x-appwrite": { "method": "updateVonageProvider", - "weight": 366, + "group": "providers", + "weight": 365, "cookies": false, "type": "", "deprecated": false, @@ -15918,7 +16036,8 @@ }, "x-appwrite": { "method": "getProvider", - "weight": 358, + "group": "providers", + "weight": 357, "cookies": false, "type": "", "deprecated": false, @@ -15973,7 +16092,8 @@ }, "x-appwrite": { "method": "deleteProvider", - "weight": 369, + "group": "providers", + "weight": 368, "cookies": false, "type": "", "deprecated": false, @@ -16035,7 +16155,8 @@ }, "x-appwrite": { "method": "listProviderLogs", - "weight": 357, + "group": "providers", + "weight": 356, "cookies": false, "type": "", "deprecated": false, @@ -16109,7 +16230,8 @@ }, "x-appwrite": { "method": "listSubscriberLogs", - "weight": 378, + "group": "subscribers", + "weight": 377, "cookies": false, "type": "", "deprecated": false, @@ -16183,7 +16305,8 @@ }, "x-appwrite": { "method": "listTopics", - "weight": 371, + "group": "topics", + "weight": 370, "cookies": false, "type": "", "deprecated": false, @@ -16256,7 +16379,8 @@ }, "x-appwrite": { "method": "createTopic", - "weight": 370, + "group": "topics", + "weight": 369, "cookies": false, "type": "", "deprecated": false, @@ -16346,7 +16470,8 @@ }, "x-appwrite": { "method": "getTopic", - "weight": 373, + "group": "topics", + "weight": 372, "cookies": false, "type": "", "deprecated": false, @@ -16406,7 +16531,8 @@ }, "x-appwrite": { "method": "updateTopic", - "weight": 374, + "group": "topics", + "weight": 373, "cookies": false, "type": "", "deprecated": false, @@ -16485,7 +16611,8 @@ }, "x-appwrite": { "method": "deleteTopic", - "weight": 375, + "group": "topics", + "weight": 374, "cookies": false, "type": "", "deprecated": false, @@ -16547,7 +16674,8 @@ }, "x-appwrite": { "method": "listTopicLogs", - "weight": 372, + "group": "topics", + "weight": 371, "cookies": false, "type": "", "deprecated": false, @@ -16621,7 +16749,8 @@ }, "x-appwrite": { "method": "listSubscribers", - "weight": 377, + "group": "subscribers", + "weight": 376, "cookies": false, "type": "", "deprecated": false, @@ -16702,7 +16831,8 @@ }, "x-appwrite": { "method": "createSubscriber", - "weight": 376, + "group": "subscribers", + "weight": 375, "cookies": false, "type": "", "deprecated": false, @@ -16793,7 +16923,8 @@ }, "x-appwrite": { "method": "getSubscriber", - "weight": 379, + "group": "subscribers", + "weight": 378, "cookies": false, "type": "", "deprecated": false, @@ -16856,7 +16987,8 @@ }, "x-appwrite": { "method": "deleteSubscriber", - "weight": 380, + "group": "subscribers", + "weight": 379, "cookies": false, "type": "", "deprecated": false, @@ -16930,7 +17062,8 @@ }, "x-appwrite": { "method": "listBuckets", - "weight": 203, + "group": "buckets", + "weight": 202, "cookies": false, "type": "", "deprecated": false, @@ -17002,7 +17135,8 @@ }, "x-appwrite": { "method": "createBucket", - "weight": 202, + "group": "buckets", + "weight": 201, "cookies": false, "type": "", "deprecated": false, @@ -17141,7 +17275,8 @@ }, "x-appwrite": { "method": "getBucket", - "weight": 204, + "group": "buckets", + "weight": 203, "cookies": false, "type": "", "deprecated": false, @@ -17200,7 +17335,8 @@ }, "x-appwrite": { "method": "updateBucket", - "weight": 205, + "group": "buckets", + "weight": 204, "cookies": false, "type": "", "deprecated": false, @@ -17333,7 +17469,8 @@ }, "x-appwrite": { "method": "deleteBucket", - "weight": 206, + "group": "buckets", + "weight": 205, "cookies": false, "type": "", "deprecated": false, @@ -17394,7 +17531,8 @@ }, "x-appwrite": { "method": "listFiles", - "weight": 208, + "group": "files", + "weight": 207, "cookies": false, "type": "", "deprecated": false, @@ -17478,7 +17616,8 @@ }, "x-appwrite": { "method": "createFile", - "weight": 207, + "group": "files", + "weight": 206, "cookies": false, "type": "upload", "deprecated": false, @@ -17571,7 +17710,8 @@ }, "x-appwrite": { "method": "getFile", - "weight": 209, + "group": "files", + "weight": 208, "cookies": false, "type": "", "deprecated": false, @@ -17642,7 +17782,8 @@ }, "x-appwrite": { "method": "updateFile", - "weight": 214, + "group": "files", + "weight": 213, "cookies": false, "type": "", "deprecated": false, @@ -17732,7 +17873,8 @@ }, "x-appwrite": { "method": "deleteFile", - "weight": 215, + "group": "files", + "weight": 214, "cookies": false, "type": "", "deprecated": false, @@ -17805,7 +17947,8 @@ }, "x-appwrite": { "method": "getFileDownload", - "weight": 211, + "group": "files", + "weight": 210, "cookies": false, "type": "location", "deprecated": false, @@ -17878,7 +18021,8 @@ }, "x-appwrite": { "method": "getFilePreview", - "weight": 210, + "group": "files", + "weight": 209, "cookies": false, "type": "location", "deprecated": false, @@ -18079,7 +18223,8 @@ }, "x-appwrite": { "method": "getFileView", - "weight": 212, + "group": "files", + "weight": 211, "cookies": false, "type": "location", "deprecated": false, @@ -18152,7 +18297,8 @@ }, "x-appwrite": { "method": "list", - "weight": 219, + "group": "teams", + "weight": 218, "cookies": false, "type": "", "deprecated": false, @@ -18228,7 +18374,8 @@ }, "x-appwrite": { "method": "create", - "weight": 218, + "group": "teams", + "weight": 217, "cookies": false, "type": "", "deprecated": false, @@ -18321,7 +18468,8 @@ }, "x-appwrite": { "method": "get", - "weight": 220, + "group": "teams", + "weight": 219, "cookies": false, "type": "", "deprecated": false, @@ -18384,7 +18532,8 @@ }, "x-appwrite": { "method": "updateName", - "weight": 222, + "group": "teams", + "weight": 221, "cookies": false, "type": "", "deprecated": false, @@ -18460,7 +18609,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 224, + "group": "teams", + "weight": 223, "cookies": false, "type": "", "deprecated": false, @@ -18525,7 +18675,8 @@ }, "x-appwrite": { "method": "listMemberships", - "weight": 226, + "group": "memberships", + "weight": 225, "cookies": false, "type": "", "deprecated": false, @@ -18609,7 +18760,8 @@ }, "x-appwrite": { "method": "createMembership", - "weight": 225, + "group": "memberships", + "weight": 224, "cookies": false, "type": "", "deprecated": false, @@ -18725,7 +18877,8 @@ }, "x-appwrite": { "method": "getMembership", - "weight": 227, + "group": "memberships", + "weight": 226, "cookies": false, "type": "", "deprecated": false, @@ -18796,7 +18949,8 @@ }, "x-appwrite": { "method": "updateMembership", - "weight": 228, + "group": "memberships", + "weight": 227, "cookies": false, "type": "", "deprecated": false, @@ -18883,7 +19037,8 @@ }, "x-appwrite": { "method": "deleteMembership", - "weight": 230, + "group": "memberships", + "weight": 229, "cookies": false, "type": "", "deprecated": false, @@ -18956,7 +19111,8 @@ }, "x-appwrite": { "method": "updateMembershipStatus", - "weight": 229, + "group": "memberships", + "weight": 228, "cookies": false, "type": "", "deprecated": false, @@ -19052,7 +19208,8 @@ }, "x-appwrite": { "method": "getPrefs", - "weight": 221, + "group": "teams", + "weight": 220, "cookies": false, "type": "", "deprecated": false, @@ -19113,7 +19270,8 @@ }, "x-appwrite": { "method": "updatePrefs", - "weight": 223, + "group": "teams", + "weight": 222, "cookies": false, "type": "", "deprecated": false, @@ -19194,7 +19352,8 @@ }, "x-appwrite": { "method": "list", - "weight": 241, + "group": "users", + "weight": 240, "cookies": false, "type": "", "deprecated": false, @@ -19266,7 +19425,8 @@ }, "x-appwrite": { "method": "create", - "weight": 232, + "group": "users", + "weight": 231, "cookies": false, "type": "", "deprecated": false, @@ -19361,7 +19521,8 @@ }, "x-appwrite": { "method": "createArgon2User", - "weight": 235, + "group": "users", + "weight": 234, "cookies": false, "type": "", "deprecated": false, @@ -19452,7 +19613,8 @@ }, "x-appwrite": { "method": "createBcryptUser", - "weight": 233, + "group": "users", + "weight": 232, "cookies": false, "type": "", "deprecated": false, @@ -19543,7 +19705,8 @@ }, "x-appwrite": { "method": "listIdentities", - "weight": 249, + "group": "identities", + "weight": 248, "cookies": false, "type": "", "deprecated": false, @@ -19612,7 +19775,8 @@ }, "x-appwrite": { "method": "deleteIdentity", - "weight": 272, + "group": "identities", + "weight": 271, "cookies": false, "type": "", "deprecated": false, @@ -19673,7 +19837,8 @@ }, "x-appwrite": { "method": "createMD5User", - "weight": 234, + "group": "users", + "weight": 233, "cookies": false, "type": "", "deprecated": false, @@ -19764,7 +19929,8 @@ }, "x-appwrite": { "method": "createPHPassUser", - "weight": 237, + "group": "users", + "weight": 236, "cookies": false, "type": "", "deprecated": false, @@ -19855,7 +20021,8 @@ }, "x-appwrite": { "method": "createScryptUser", - "weight": 238, + "group": "users", + "weight": 237, "cookies": false, "type": "", "deprecated": false, @@ -19981,7 +20148,8 @@ }, "x-appwrite": { "method": "createScryptModifiedUser", - "weight": 239, + "group": "users", + "weight": 238, "cookies": false, "type": "", "deprecated": false, @@ -20093,7 +20261,8 @@ }, "x-appwrite": { "method": "createSHAUser", - "weight": 236, + "group": "users", + "weight": 235, "cookies": false, "type": "", "deprecated": false, @@ -20205,7 +20374,8 @@ }, "x-appwrite": { "method": "get", - "weight": 242, + "group": "users", + "weight": 241, "cookies": false, "type": "", "deprecated": false, @@ -20259,7 +20429,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 270, + "group": "users", + "weight": 269, "cookies": false, "type": "", "deprecated": false, @@ -20320,7 +20491,8 @@ }, "x-appwrite": { "method": "updateEmail", - "weight": 255, + "group": "users", + "weight": 254, "cookies": false, "type": "", "deprecated": false, @@ -20399,7 +20571,8 @@ }, "x-appwrite": { "method": "createJWT", - "weight": 273, + "group": "sessions", + "weight": 272, "cookies": false, "type": "", "deprecated": false, @@ -20481,7 +20654,8 @@ }, "x-appwrite": { "method": "updateLabels", - "weight": 251, + "group": "users", + "weight": 250, "cookies": false, "type": "", "deprecated": false, @@ -20563,7 +20737,8 @@ }, "x-appwrite": { "method": "listLogs", - "weight": 247, + "group": "logs", + "weight": 246, "cookies": false, "type": "", "deprecated": false, @@ -20636,7 +20811,8 @@ }, "x-appwrite": { "method": "listMemberships", - "weight": 246, + "group": "memberships", + "weight": 245, "cookies": false, "type": "", "deprecated": false, @@ -20697,7 +20873,8 @@ }, "x-appwrite": { "method": "updateMfa", - "weight": 260, + "group": "users", + "weight": 259, "cookies": false, "type": "", "deprecated": false, @@ -20771,7 +20948,8 @@ }, "x-appwrite": { "method": "deleteMfaAuthenticator", - "weight": 265, + "group": "mfa", + "weight": 264, "cookies": false, "type": "", "deprecated": false, @@ -20845,7 +21023,8 @@ }, "x-appwrite": { "method": "listMfaFactors", - "weight": 261, + "group": "mfa", + "weight": 260, "cookies": false, "type": "", "deprecated": false, @@ -20906,7 +21085,8 @@ }, "x-appwrite": { "method": "getMfaRecoveryCodes", - "weight": 262, + "group": "mfa", + "weight": 261, "cookies": false, "type": "", "deprecated": false, @@ -20943,7 +21123,7 @@ ] }, "put": { - "summary": "Regenerate MFA recovery codes", + "summary": "Update MFA recovery codes (regenerate)", "operationId": "usersUpdateMfaRecoveryCodes", "consumes": [ "application\/json" @@ -20965,7 +21145,8 @@ }, "x-appwrite": { "method": "updateMfaRecoveryCodes", - "weight": 264, + "group": "mfa", + "weight": 263, "cookies": false, "type": "", "deprecated": false, @@ -21024,7 +21205,8 @@ }, "x-appwrite": { "method": "createMfaRecoveryCodes", - "weight": 263, + "group": "mfa", + "weight": 262, "cookies": false, "type": "", "deprecated": false, @@ -21085,7 +21267,8 @@ }, "x-appwrite": { "method": "updateName", - "weight": 253, + "group": "users", + "weight": 252, "cookies": false, "type": "", "deprecated": false, @@ -21164,7 +21347,8 @@ }, "x-appwrite": { "method": "updatePassword", - "weight": 254, + "group": "users", + "weight": 253, "cookies": false, "type": "", "deprecated": false, @@ -21243,7 +21427,8 @@ }, "x-appwrite": { "method": "updatePhone", - "weight": 256, + "group": "users", + "weight": 255, "cookies": false, "type": "", "deprecated": false, @@ -21322,7 +21507,8 @@ }, "x-appwrite": { "method": "getPrefs", - "weight": 243, + "group": "users", + "weight": 242, "cookies": false, "type": "", "deprecated": false, @@ -21381,7 +21567,8 @@ }, "x-appwrite": { "method": "updatePrefs", - "weight": 258, + "group": "users", + "weight": 257, "cookies": false, "type": "", "deprecated": false, @@ -21460,7 +21647,8 @@ }, "x-appwrite": { "method": "listSessions", - "weight": 245, + "group": "sessions", + "weight": 244, "cookies": false, "type": "", "deprecated": false, @@ -21519,7 +21707,8 @@ }, "x-appwrite": { "method": "createSession", - "weight": 266, + "group": "sessions", + "weight": 265, "cookies": false, "type": "", "deprecated": false, @@ -21573,7 +21762,8 @@ }, "x-appwrite": { "method": "deleteSessions", - "weight": 269, + "group": "sessions", + "weight": 268, "cookies": false, "type": "", "deprecated": false, @@ -21629,7 +21819,8 @@ }, "x-appwrite": { "method": "deleteSession", - "weight": 268, + "group": "sessions", + "weight": 267, "cookies": false, "type": "", "deprecated": false, @@ -21698,7 +21889,8 @@ }, "x-appwrite": { "method": "updateStatus", - "weight": 250, + "group": "users", + "weight": 249, "cookies": false, "type": "", "deprecated": false, @@ -21777,7 +21969,8 @@ }, "x-appwrite": { "method": "listTargets", - "weight": 248, + "group": "targets", + "weight": 247, "cookies": false, "type": "", "deprecated": false, @@ -21849,7 +22042,8 @@ }, "x-appwrite": { "method": "createTarget", - "weight": 240, + "group": "targets", + "weight": 239, "cookies": false, "type": "", "deprecated": false, @@ -21962,7 +22156,8 @@ }, "x-appwrite": { "method": "getTarget", - "weight": 244, + "group": "targets", + "weight": 243, "cookies": false, "type": "", "deprecated": false, @@ -22030,7 +22225,8 @@ }, "x-appwrite": { "method": "updateTarget", - "weight": 259, + "group": "targets", + "weight": 258, "cookies": false, "type": "", "deprecated": false, @@ -22120,7 +22316,8 @@ }, "x-appwrite": { "method": "deleteTarget", - "weight": 271, + "group": "targets", + "weight": 270, "cookies": false, "type": "", "deprecated": false, @@ -22190,7 +22387,8 @@ }, "x-appwrite": { "method": "createToken", - "weight": 267, + "group": "sessions", + "weight": 266, "cookies": false, "type": "", "deprecated": false, @@ -22272,7 +22470,8 @@ }, "x-appwrite": { "method": "updateEmailVerification", - "weight": 257, + "group": "users", + "weight": 256, "cookies": false, "type": "", "deprecated": false, @@ -22351,7 +22550,8 @@ }, "x-appwrite": { "method": "updatePhoneVerification", - "weight": 252, + "group": "users", + "weight": 251, "cookies": false, "type": "", "deprecated": false, diff --git a/app/config/specs/swagger2-latest-client.json b/app/config/specs/swagger2-latest-client.json index 8960bfaa5c..4ed78c45a9 100644 --- a/app/config/specs/swagger2-latest-client.json +++ b/app/config/specs/swagger2-latest-client.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "version": "1.6.1", + "version": "1.6.2", "title": "Appwrite", "description": "Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)", "termsOfService": "https:\/\/appwrite.io\/policy\/terms", @@ -87,6 +87,7 @@ }, "x-appwrite": { "method": "get", + "group": "account", "weight": 9, "cookies": false, "type": "", @@ -137,6 +138,7 @@ }, "x-appwrite": { "method": "create", + "group": "account", "weight": 8, "cookies": false, "type": "", @@ -227,6 +229,7 @@ }, "x-appwrite": { "method": "updateEmail", + "group": "account", "weight": 34, "cookies": false, "type": "", @@ -306,6 +309,7 @@ }, "x-appwrite": { "method": "listIdentities", + "group": "identities", "weight": 57, "cookies": false, "type": "", @@ -367,6 +371,7 @@ }, "x-appwrite": { "method": "deleteIdentity", + "group": "identities", "weight": 58, "cookies": false, "type": "", @@ -429,6 +434,7 @@ }, "x-appwrite": { "method": "createJWT", + "group": "tokens", "weight": 29, "cookies": false, "type": "", @@ -479,6 +485,7 @@ }, "x-appwrite": { "method": "listLogs", + "group": "logs", "weight": 31, "cookies": false, "type": "", @@ -545,6 +552,7 @@ }, "x-appwrite": { "method": "updateMFA", + "group": "mfa", "weight": 44, "cookies": false, "type": "", @@ -617,6 +625,7 @@ }, "x-appwrite": { "method": "createMfaAuthenticator", + "group": "mfa", "weight": 46, "cookies": false, "type": "", @@ -660,7 +669,7 @@ ] }, "put": { - "summary": "Verify authenticator", + "summary": "Update authenticator (confirmation)", "operationId": "accountUpdateMfaAuthenticator", "consumes": [ "application\/json" @@ -682,6 +691,7 @@ }, "x-appwrite": { "method": "updateMfaAuthenticator", + "group": "mfa", "weight": 47, "cookies": false, "type": "", @@ -760,6 +770,7 @@ }, "x-appwrite": { "method": "deleteMfaAuthenticator", + "group": "mfa", "weight": 51, "cookies": false, "type": "", @@ -827,6 +838,7 @@ }, "x-appwrite": { "method": "createMfaChallenge", + "group": "mfa", "weight": 52, "cookies": false, "type": "", @@ -881,7 +893,7 @@ ] }, "put": { - "summary": "Create MFA challenge (confirmation)", + "summary": "Update MFA challenge (confirmation)", "operationId": "accountUpdateMfaChallenge", "consumes": [ "application\/json" @@ -903,6 +915,7 @@ }, "x-appwrite": { "method": "updateMfaChallenge", + "group": "mfa", "weight": 53, "cookies": false, "type": "", @@ -982,6 +995,7 @@ }, "x-appwrite": { "method": "listMfaFactors", + "group": "mfa", "weight": 45, "cookies": false, "type": "", @@ -1012,7 +1026,7 @@ }, "\/account\/mfa\/recovery-codes": { "get": { - "summary": "Get MFA recovery codes", + "summary": "List MFA recovery codes", "operationId": "accountGetMfaRecoveryCodes", "consumes": [ "application\/json" @@ -1034,6 +1048,7 @@ }, "x-appwrite": { "method": "getMfaRecoveryCodes", + "group": "mfa", "weight": 50, "cookies": false, "type": "", @@ -1084,6 +1099,7 @@ }, "x-appwrite": { "method": "createMfaRecoveryCodes", + "group": "mfa", "weight": 48, "cookies": false, "type": "", @@ -1112,7 +1128,7 @@ ] }, "patch": { - "summary": "Regenerate MFA recovery codes", + "summary": "Update MFA recovery codes (regenerate)", "operationId": "accountUpdateMfaRecoveryCodes", "consumes": [ "application\/json" @@ -1134,6 +1150,7 @@ }, "x-appwrite": { "method": "updateMfaRecoveryCodes", + "group": "mfa", "weight": 49, "cookies": false, "type": "", @@ -1186,6 +1203,7 @@ }, "x-appwrite": { "method": "updateName", + "group": "account", "weight": 32, "cookies": false, "type": "", @@ -1258,6 +1276,7 @@ }, "x-appwrite": { "method": "updatePassword", + "group": "account", "weight": 33, "cookies": false, "type": "", @@ -1336,6 +1355,7 @@ }, "x-appwrite": { "method": "updatePhone", + "group": "account", "weight": 35, "cookies": false, "type": "", @@ -1415,6 +1435,7 @@ }, "x-appwrite": { "method": "getPrefs", + "group": "account", "weight": 30, "cookies": false, "type": "", @@ -1465,6 +1486,7 @@ }, "x-appwrite": { "method": "updatePrefs", + "group": "account", "weight": 36, "cookies": false, "type": "", @@ -1537,6 +1559,7 @@ }, "x-appwrite": { "method": "createRecovery", + "group": "recovery", "weight": 38, "cookies": false, "type": "", @@ -1595,7 +1618,7 @@ ] }, "put": { - "summary": "Create password recovery (confirmation)", + "summary": "Update password recovery (confirmation)", "operationId": "accountUpdateRecovery", "consumes": [ "application\/json" @@ -1617,6 +1640,7 @@ }, "x-appwrite": { "method": "updateRecovery", + "group": "recovery", "weight": 39, "cookies": false, "type": "", @@ -1703,6 +1727,7 @@ }, "x-appwrite": { "method": "listSessions", + "group": "sessions", "weight": 11, "cookies": false, "type": "", @@ -1748,6 +1773,7 @@ }, "x-appwrite": { "method": "deleteSessions", + "group": "sessions", "weight": 12, "cookies": false, "type": "", @@ -1800,6 +1826,7 @@ }, "x-appwrite": { "method": "createAnonymousSession", + "group": "sessions", "weight": 17, "cookies": false, "type": "", @@ -1850,6 +1877,7 @@ }, "x-appwrite": { "method": "createEmailPasswordSession", + "group": "sessions", "weight": 16, "cookies": false, "type": "", @@ -1927,6 +1955,7 @@ }, "x-appwrite": { "method": "updateMagicURLSession", + "group": "sessions", "weight": 26, "cookies": false, "type": "", @@ -2001,6 +2030,7 @@ }, "x-appwrite": { "method": "createOAuth2Session", + "group": "sessions", "weight": 19, "cookies": false, "type": "webAuth", @@ -2028,7 +2058,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", "required": true, "type": "string", "x-example": "amazon", @@ -2047,6 +2077,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -2136,6 +2167,7 @@ }, "x-appwrite": { "method": "updatePhoneSession", + "group": "sessions", "weight": 27, "cookies": false, "type": "", @@ -2213,6 +2245,7 @@ }, "x-appwrite": { "method": "createSession", + "group": "sessions", "weight": 18, "cookies": false, "type": "", @@ -2290,6 +2323,7 @@ }, "x-appwrite": { "method": "getSession", + "group": "sessions", "weight": 13, "cookies": false, "type": "", @@ -2350,6 +2384,7 @@ }, "x-appwrite": { "method": "updateSession", + "group": "sessions", "weight": 15, "cookies": false, "type": "", @@ -2405,6 +2440,7 @@ }, "x-appwrite": { "method": "deleteSession", + "group": "sessions", "weight": 14, "cookies": false, "type": "", @@ -2467,6 +2503,7 @@ }, "x-appwrite": { "method": "updateStatus", + "group": "account", "weight": 37, "cookies": false, "type": "", @@ -2519,6 +2556,7 @@ }, "x-appwrite": { "method": "createPushTarget", + "group": "pushTargets", "weight": 54, "cookies": false, "type": "", @@ -2602,6 +2640,7 @@ }, "x-appwrite": { "method": "updatePushTarget", + "group": "pushTargets", "weight": 55, "cookies": false, "type": "", @@ -2673,6 +2712,7 @@ }, "x-appwrite": { "method": "deletePushTarget", + "group": "pushTargets", "weight": 56, "cookies": false, "type": "", @@ -2733,6 +2773,7 @@ }, "x-appwrite": { "method": "createEmailToken", + "group": "tokens", "weight": 25, "cookies": false, "type": "", @@ -2816,6 +2857,7 @@ }, "x-appwrite": { "method": "createMagicURLToken", + "group": "tokens", "weight": 24, "cookies": false, "type": "", @@ -2905,6 +2947,7 @@ }, "x-appwrite": { "method": "createOAuth2Token", + "group": "tokens", "weight": 23, "cookies": false, "type": "webAuth", @@ -2932,7 +2975,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", "required": true, "type": "string", "x-example": "amazon", @@ -2951,6 +2994,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -3040,6 +3084,7 @@ }, "x-appwrite": { "method": "createPhoneToken", + "group": "tokens", "weight": 28, "cookies": false, "type": "", @@ -3120,6 +3165,7 @@ }, "x-appwrite": { "method": "createVerification", + "group": "verification", "weight": 40, "cookies": false, "type": "", @@ -3168,7 +3214,7 @@ ] }, "put": { - "summary": "Create email verification (confirmation)", + "summary": "Update email verification (confirmation)", "operationId": "accountUpdateVerification", "consumes": [ "application\/json" @@ -3190,6 +3236,7 @@ }, "x-appwrite": { "method": "updateVerification", + "group": "verification", "weight": 41, "cookies": false, "type": "", @@ -3269,6 +3316,7 @@ }, "x-appwrite": { "method": "createPhoneVerification", + "group": "verification", "weight": 42, "cookies": false, "type": "", @@ -3322,6 +3370,7 @@ }, "x-appwrite": { "method": "updatePhoneVerification", + "group": "verification", "weight": 43, "cookies": false, "type": "", @@ -3401,6 +3450,7 @@ }, "x-appwrite": { "method": "getBrowser", + "group": null, "weight": 60, "cookies": false, "type": "location", @@ -3527,6 +3577,7 @@ }, "x-appwrite": { "method": "getCreditCard", + "group": null, "weight": 59, "cookies": false, "type": "location", @@ -3659,6 +3710,7 @@ }, "x-appwrite": { "method": "getFavicon", + "group": null, "weight": 63, "cookies": false, "type": "location", @@ -3723,6 +3775,7 @@ }, "x-appwrite": { "method": "getFlag", + "group": null, "weight": 61, "cookies": false, "type": "location", @@ -4211,6 +4264,7 @@ }, "x-appwrite": { "method": "getImage", + "group": null, "weight": 62, "cookies": false, "type": "location", @@ -4295,6 +4349,7 @@ }, "x-appwrite": { "method": "getInitials", + "group": null, "weight": 65, "cookies": false, "type": "location", @@ -4387,6 +4442,7 @@ }, "x-appwrite": { "method": "getQR", + "group": null, "weight": 64, "cookies": false, "type": "location", @@ -4479,6 +4535,7 @@ }, "x-appwrite": { "method": "listDocuments", + "group": "documents", "weight": 109, "cookies": false, "type": "", @@ -4560,6 +4617,7 @@ }, "x-appwrite": { "method": "createDocument", + "group": "documents", "weight": 108, "cookies": false, "type": "", @@ -4665,6 +4723,7 @@ }, "x-appwrite": { "method": "getDocument", + "group": "documents", "weight": 110, "cookies": false, "type": "", @@ -4754,6 +4813,7 @@ }, "x-appwrite": { "method": "updateDocument", + "group": "documents", "weight": 112, "cookies": false, "type": "", @@ -4850,6 +4910,7 @@ }, "x-appwrite": { "method": "deleteDocument", + "group": "documents", "weight": 113, "cookies": false, "type": "", @@ -4929,7 +4990,8 @@ }, "x-appwrite": { "method": "listExecutions", - "weight": 306, + "group": "executions", + "weight": 305, "cookies": false, "type": "", "deprecated": false, @@ -5011,7 +5073,8 @@ }, "x-appwrite": { "method": "createExecution", - "weight": 305, + "group": "executions", + "weight": 304, "cookies": false, "type": "", "deprecated": false, @@ -5129,7 +5192,8 @@ }, "x-appwrite": { "method": "getExecution", - "weight": 307, + "group": "executions", + "weight": 306, "cookies": false, "type": "", "deprecated": false, @@ -5200,7 +5264,8 @@ }, "x-appwrite": { "method": "query", - "weight": 331, + "group": "graphql", + "weight": 330, "cookies": false, "type": "graphql", "deprecated": false, @@ -5273,7 +5338,8 @@ }, "x-appwrite": { "method": "mutation", - "weight": 330, + "group": "graphql", + "weight": 329, "cookies": false, "type": "graphql", "deprecated": false, @@ -5346,6 +5412,7 @@ }, "x-appwrite": { "method": "get", + "group": null, "weight": 117, "cookies": false, "type": "", @@ -5399,6 +5466,7 @@ }, "x-appwrite": { "method": "listCodes", + "group": null, "weight": 118, "cookies": false, "type": "", @@ -5452,6 +5520,7 @@ }, "x-appwrite": { "method": "listContinents", + "group": null, "weight": 122, "cookies": false, "type": "", @@ -5505,6 +5574,7 @@ }, "x-appwrite": { "method": "listCountries", + "group": null, "weight": 119, "cookies": false, "type": "", @@ -5558,6 +5628,7 @@ }, "x-appwrite": { "method": "listCountriesEU", + "group": null, "weight": 120, "cookies": false, "type": "", @@ -5611,6 +5682,7 @@ }, "x-appwrite": { "method": "listCountriesPhones", + "group": null, "weight": 121, "cookies": false, "type": "", @@ -5664,6 +5736,7 @@ }, "x-appwrite": { "method": "listCurrencies", + "group": null, "weight": 123, "cookies": false, "type": "", @@ -5717,6 +5790,7 @@ }, "x-appwrite": { "method": "listLanguages", + "group": null, "weight": 124, "cookies": false, "type": "", @@ -5770,7 +5844,8 @@ }, "x-appwrite": { "method": "createSubscriber", - "weight": 376, + "group": "subscribers", + "weight": 375, "cookies": false, "type": "", "deprecated": false, @@ -5854,7 +5929,8 @@ }, "x-appwrite": { "method": "deleteSubscriber", - "weight": 380, + "group": "subscribers", + "weight": 379, "cookies": false, "type": "", "deprecated": false, @@ -5926,7 +6002,8 @@ }, "x-appwrite": { "method": "listFiles", - "weight": 208, + "group": "files", + "weight": 207, "cookies": false, "type": "", "deprecated": false, @@ -6008,7 +6085,8 @@ }, "x-appwrite": { "method": "createFile", - "weight": 207, + "group": "files", + "weight": 206, "cookies": false, "type": "upload", "deprecated": false, @@ -6099,7 +6177,8 @@ }, "x-appwrite": { "method": "getFile", - "weight": 209, + "group": "files", + "weight": 208, "cookies": false, "type": "", "deprecated": false, @@ -6168,7 +6247,8 @@ }, "x-appwrite": { "method": "updateFile", - "weight": 214, + "group": "files", + "weight": 213, "cookies": false, "type": "", "deprecated": false, @@ -6256,7 +6336,8 @@ }, "x-appwrite": { "method": "deleteFile", - "weight": 215, + "group": "files", + "weight": 214, "cookies": false, "type": "", "deprecated": false, @@ -6327,7 +6408,8 @@ }, "x-appwrite": { "method": "getFileDownload", - "weight": 211, + "group": "files", + "weight": 210, "cookies": false, "type": "location", "deprecated": false, @@ -6398,7 +6480,8 @@ }, "x-appwrite": { "method": "getFilePreview", - "weight": 210, + "group": "files", + "weight": 209, "cookies": false, "type": "location", "deprecated": false, @@ -6597,7 +6680,8 @@ }, "x-appwrite": { "method": "getFileView", - "weight": 212, + "group": "files", + "weight": 211, "cookies": false, "type": "location", "deprecated": false, @@ -6668,7 +6752,8 @@ }, "x-appwrite": { "method": "list", - "weight": 219, + "group": "teams", + "weight": 218, "cookies": false, "type": "", "deprecated": false, @@ -6742,7 +6827,8 @@ }, "x-appwrite": { "method": "create", - "weight": 218, + "group": "teams", + "weight": 217, "cookies": false, "type": "", "deprecated": false, @@ -6833,7 +6919,8 @@ }, "x-appwrite": { "method": "get", - "weight": 220, + "group": "teams", + "weight": 219, "cookies": false, "type": "", "deprecated": false, @@ -6894,7 +6981,8 @@ }, "x-appwrite": { "method": "updateName", - "weight": 222, + "group": "teams", + "weight": 221, "cookies": false, "type": "", "deprecated": false, @@ -6968,7 +7056,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 224, + "group": "teams", + "weight": 223, "cookies": false, "type": "", "deprecated": false, @@ -7031,7 +7120,8 @@ }, "x-appwrite": { "method": "listMemberships", - "weight": 226, + "group": "memberships", + "weight": 225, "cookies": false, "type": "", "deprecated": false, @@ -7113,7 +7203,8 @@ }, "x-appwrite": { "method": "createMembership", - "weight": 225, + "group": "memberships", + "weight": 224, "cookies": false, "type": "", "deprecated": false, @@ -7227,7 +7318,8 @@ }, "x-appwrite": { "method": "getMembership", - "weight": 227, + "group": "memberships", + "weight": 226, "cookies": false, "type": "", "deprecated": false, @@ -7296,7 +7388,8 @@ }, "x-appwrite": { "method": "updateMembership", - "weight": 228, + "group": "memberships", + "weight": 227, "cookies": false, "type": "", "deprecated": false, @@ -7381,7 +7474,8 @@ }, "x-appwrite": { "method": "deleteMembership", - "weight": 230, + "group": "memberships", + "weight": 229, "cookies": false, "type": "", "deprecated": false, @@ -7452,7 +7546,8 @@ }, "x-appwrite": { "method": "updateMembershipStatus", - "weight": 229, + "group": "memberships", + "weight": 228, "cookies": false, "type": "", "deprecated": false, @@ -7547,7 +7642,8 @@ }, "x-appwrite": { "method": "getPrefs", - "weight": 221, + "group": "teams", + "weight": 220, "cookies": false, "type": "", "deprecated": false, @@ -7607,7 +7703,8 @@ }, "x-appwrite": { "method": "updatePrefs", - "weight": 223, + "group": "teams", + "weight": 222, "cookies": false, "type": "", "deprecated": false, diff --git a/app/config/specs/swagger2-latest-console.json b/app/config/specs/swagger2-latest-console.json index 8fc7e7daf3..55c14c285a 100644 --- a/app/config/specs/swagger2-latest-console.json +++ b/app/config/specs/swagger2-latest-console.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "version": "1.6.1", + "version": "1.6.2", "title": "Appwrite", "description": "Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)", "termsOfService": "https:\/\/appwrite.io\/policy\/terms", @@ -99,6 +99,7 @@ }, "x-appwrite": { "method": "get", + "group": "account", "weight": 9, "cookies": false, "type": "", @@ -148,6 +149,7 @@ }, "x-appwrite": { "method": "create", + "group": "account", "weight": 8, "cookies": false, "type": "", @@ -231,6 +233,7 @@ }, "x-appwrite": { "method": "delete", + "group": "account", "weight": 10, "cookies": false, "type": "", @@ -280,6 +283,7 @@ }, "x-appwrite": { "method": "updateEmail", + "group": "account", "weight": 34, "cookies": false, "type": "", @@ -358,6 +362,7 @@ }, "x-appwrite": { "method": "listIdentities", + "group": "identities", "weight": 57, "cookies": false, "type": "", @@ -418,6 +423,7 @@ }, "x-appwrite": { "method": "deleteIdentity", + "group": "identities", "weight": 58, "cookies": false, "type": "", @@ -479,6 +485,7 @@ }, "x-appwrite": { "method": "createJWT", + "group": "tokens", "weight": 29, "cookies": false, "type": "", @@ -529,6 +536,7 @@ }, "x-appwrite": { "method": "listLogs", + "group": "logs", "weight": 31, "cookies": false, "type": "", @@ -594,6 +602,7 @@ }, "x-appwrite": { "method": "updateMFA", + "group": "mfa", "weight": 44, "cookies": false, "type": "", @@ -665,6 +674,7 @@ }, "x-appwrite": { "method": "createMfaAuthenticator", + "group": "mfa", "weight": 46, "cookies": false, "type": "", @@ -707,7 +717,7 @@ ] }, "put": { - "summary": "Verify authenticator", + "summary": "Update authenticator (confirmation)", "operationId": "accountUpdateMfaAuthenticator", "consumes": [ "application\/json" @@ -729,6 +739,7 @@ }, "x-appwrite": { "method": "updateMfaAuthenticator", + "group": "mfa", "weight": 47, "cookies": false, "type": "", @@ -806,6 +817,7 @@ }, "x-appwrite": { "method": "deleteMfaAuthenticator", + "group": "mfa", "weight": 51, "cookies": false, "type": "", @@ -872,6 +884,7 @@ }, "x-appwrite": { "method": "createMfaChallenge", + "group": "mfa", "weight": 52, "cookies": false, "type": "", @@ -926,7 +939,7 @@ ] }, "put": { - "summary": "Create MFA challenge (confirmation)", + "summary": "Update MFA challenge (confirmation)", "operationId": "accountUpdateMfaChallenge", "consumes": [ "application\/json" @@ -948,6 +961,7 @@ }, "x-appwrite": { "method": "updateMfaChallenge", + "group": "mfa", "weight": 53, "cookies": false, "type": "", @@ -1026,6 +1040,7 @@ }, "x-appwrite": { "method": "listMfaFactors", + "group": "mfa", "weight": 45, "cookies": false, "type": "", @@ -1055,7 +1070,7 @@ }, "\/account\/mfa\/recovery-codes": { "get": { - "summary": "Get MFA recovery codes", + "summary": "List MFA recovery codes", "operationId": "accountGetMfaRecoveryCodes", "consumes": [ "application\/json" @@ -1077,6 +1092,7 @@ }, "x-appwrite": { "method": "getMfaRecoveryCodes", + "group": "mfa", "weight": 50, "cookies": false, "type": "", @@ -1126,6 +1142,7 @@ }, "x-appwrite": { "method": "createMfaRecoveryCodes", + "group": "mfa", "weight": 48, "cookies": false, "type": "", @@ -1153,7 +1170,7 @@ ] }, "patch": { - "summary": "Regenerate MFA recovery codes", + "summary": "Update MFA recovery codes (regenerate)", "operationId": "accountUpdateMfaRecoveryCodes", "consumes": [ "application\/json" @@ -1175,6 +1192,7 @@ }, "x-appwrite": { "method": "updateMfaRecoveryCodes", + "group": "mfa", "weight": 49, "cookies": false, "type": "", @@ -1226,6 +1244,7 @@ }, "x-appwrite": { "method": "updateName", + "group": "account", "weight": 32, "cookies": false, "type": "", @@ -1297,6 +1316,7 @@ }, "x-appwrite": { "method": "updatePassword", + "group": "account", "weight": 33, "cookies": false, "type": "", @@ -1374,6 +1394,7 @@ }, "x-appwrite": { "method": "updatePhone", + "group": "account", "weight": 35, "cookies": false, "type": "", @@ -1452,6 +1473,7 @@ }, "x-appwrite": { "method": "getPrefs", + "group": "account", "weight": 30, "cookies": false, "type": "", @@ -1501,6 +1523,7 @@ }, "x-appwrite": { "method": "updatePrefs", + "group": "account", "weight": 36, "cookies": false, "type": "", @@ -1572,6 +1595,7 @@ }, "x-appwrite": { "method": "createRecovery", + "group": "recovery", "weight": 38, "cookies": false, "type": "", @@ -1629,7 +1653,7 @@ ] }, "put": { - "summary": "Create password recovery (confirmation)", + "summary": "Update password recovery (confirmation)", "operationId": "accountUpdateRecovery", "consumes": [ "application\/json" @@ -1651,6 +1675,7 @@ }, "x-appwrite": { "method": "updateRecovery", + "group": "recovery", "weight": 39, "cookies": false, "type": "", @@ -1736,6 +1761,7 @@ }, "x-appwrite": { "method": "listSessions", + "group": "sessions", "weight": 11, "cookies": false, "type": "", @@ -1780,6 +1806,7 @@ }, "x-appwrite": { "method": "deleteSessions", + "group": "sessions", "weight": 12, "cookies": false, "type": "", @@ -1831,6 +1858,7 @@ }, "x-appwrite": { "method": "createAnonymousSession", + "group": "sessions", "weight": 17, "cookies": false, "type": "", @@ -1881,6 +1909,7 @@ }, "x-appwrite": { "method": "createEmailPasswordSession", + "group": "sessions", "weight": 16, "cookies": false, "type": "", @@ -1958,6 +1987,7 @@ }, "x-appwrite": { "method": "updateMagicURLSession", + "group": "sessions", "weight": 26, "cookies": false, "type": "", @@ -2032,6 +2062,7 @@ }, "x-appwrite": { "method": "createOAuth2Session", + "group": "sessions", "weight": 19, "cookies": false, "type": "webAuth", @@ -2059,7 +2090,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", "required": true, "type": "string", "x-example": "amazon", @@ -2078,6 +2109,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -2167,6 +2199,7 @@ }, "x-appwrite": { "method": "updatePhoneSession", + "group": "sessions", "weight": 27, "cookies": false, "type": "", @@ -2244,6 +2277,7 @@ }, "x-appwrite": { "method": "createSession", + "group": "sessions", "weight": 18, "cookies": false, "type": "", @@ -2321,6 +2355,7 @@ }, "x-appwrite": { "method": "getSession", + "group": "sessions", "weight": 13, "cookies": false, "type": "", @@ -2380,6 +2415,7 @@ }, "x-appwrite": { "method": "updateSession", + "group": "sessions", "weight": 15, "cookies": false, "type": "", @@ -2434,6 +2470,7 @@ }, "x-appwrite": { "method": "deleteSession", + "group": "sessions", "weight": 14, "cookies": false, "type": "", @@ -2495,6 +2532,7 @@ }, "x-appwrite": { "method": "updateStatus", + "group": "account", "weight": 37, "cookies": false, "type": "", @@ -2546,6 +2584,7 @@ }, "x-appwrite": { "method": "createPushTarget", + "group": "pushTargets", "weight": 54, "cookies": false, "type": "", @@ -2628,6 +2667,7 @@ }, "x-appwrite": { "method": "updatePushTarget", + "group": "pushTargets", "weight": 55, "cookies": false, "type": "", @@ -2698,6 +2738,7 @@ }, "x-appwrite": { "method": "deletePushTarget", + "group": "pushTargets", "weight": 56, "cookies": false, "type": "", @@ -2757,6 +2798,7 @@ }, "x-appwrite": { "method": "createEmailToken", + "group": "tokens", "weight": 25, "cookies": false, "type": "", @@ -2840,6 +2882,7 @@ }, "x-appwrite": { "method": "createMagicURLToken", + "group": "tokens", "weight": 24, "cookies": false, "type": "", @@ -2929,6 +2972,7 @@ }, "x-appwrite": { "method": "createOAuth2Token", + "group": "tokens", "weight": 23, "cookies": false, "type": "webAuth", @@ -2956,7 +3000,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", "required": true, "type": "string", "x-example": "amazon", @@ -2975,6 +3019,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -3064,6 +3109,7 @@ }, "x-appwrite": { "method": "createPhoneToken", + "group": "tokens", "weight": 28, "cookies": false, "type": "", @@ -3144,6 +3190,7 @@ }, "x-appwrite": { "method": "createVerification", + "group": "verification", "weight": 40, "cookies": false, "type": "", @@ -3191,7 +3238,7 @@ ] }, "put": { - "summary": "Create email verification (confirmation)", + "summary": "Update email verification (confirmation)", "operationId": "accountUpdateVerification", "consumes": [ "application\/json" @@ -3213,6 +3260,7 @@ }, "x-appwrite": { "method": "updateVerification", + "group": "verification", "weight": 41, "cookies": false, "type": "", @@ -3291,6 +3339,7 @@ }, "x-appwrite": { "method": "createPhoneVerification", + "group": "verification", "weight": 42, "cookies": false, "type": "", @@ -3343,6 +3392,7 @@ }, "x-appwrite": { "method": "updatePhoneVerification", + "group": "verification", "weight": 43, "cookies": false, "type": "", @@ -3421,6 +3471,7 @@ }, "x-appwrite": { "method": "getBrowser", + "group": null, "weight": 60, "cookies": false, "type": "location", @@ -3547,6 +3598,7 @@ }, "x-appwrite": { "method": "getCreditCard", + "group": null, "weight": 59, "cookies": false, "type": "location", @@ -3679,6 +3731,7 @@ }, "x-appwrite": { "method": "getFavicon", + "group": null, "weight": 63, "cookies": false, "type": "location", @@ -3743,6 +3796,7 @@ }, "x-appwrite": { "method": "getFlag", + "group": null, "weight": 61, "cookies": false, "type": "location", @@ -4231,6 +4285,7 @@ }, "x-appwrite": { "method": "getImage", + "group": null, "weight": 62, "cookies": false, "type": "location", @@ -4315,6 +4370,7 @@ }, "x-appwrite": { "method": "getInitials", + "group": null, "weight": 65, "cookies": false, "type": "location", @@ -4407,6 +4463,7 @@ }, "x-appwrite": { "method": "getQR", + "group": null, "weight": 64, "cookies": false, "type": "location", @@ -4477,7 +4534,7 @@ }, "\/console\/assistant": { "post": { - "summary": "Ask query", + "summary": "Create assistant query", "operationId": "assistantChat", "consumes": [ "application\/json" @@ -4499,7 +4556,8 @@ }, "x-appwrite": { "method": "chat", - "weight": 333, + "group": "console", + "weight": 332, "cookies": false, "type": "", "deprecated": false, @@ -4568,7 +4626,8 @@ }, "x-appwrite": { "method": "variables", - "weight": 332, + "group": "console", + "weight": 331, "cookies": false, "type": "", "deprecated": false, @@ -4617,6 +4676,7 @@ }, "x-appwrite": { "method": "list", + "group": "databases", "weight": 70, "cookies": false, "type": "", @@ -4688,6 +4748,7 @@ }, "x-appwrite": { "method": "create", + "group": "databases", "weight": 69, "cookies": false, "type": "", @@ -4771,6 +4832,7 @@ }, "x-appwrite": { "method": "getUsage", + "group": null, "weight": 114, "cookies": false, "type": "", @@ -4842,6 +4904,7 @@ }, "x-appwrite": { "method": "get", + "group": "databases", "weight": 71, "cookies": false, "type": "", @@ -4900,6 +4963,7 @@ }, "x-appwrite": { "method": "update", + "group": "databases", "weight": 73, "cookies": false, "type": "", @@ -4977,6 +5041,7 @@ }, "x-appwrite": { "method": "delete", + "group": "databases", "weight": 74, "cookies": false, "type": "", @@ -5037,6 +5102,7 @@ }, "x-appwrite": { "method": "listCollections", + "group": "collections", "weight": 76, "cookies": false, "type": "", @@ -5116,6 +5182,7 @@ }, "x-appwrite": { "method": "createCollection", + "group": "collections", "weight": 75, "cookies": false, "type": "", @@ -5222,6 +5289,7 @@ }, "x-appwrite": { "method": "getCollection", + "group": "collections", "weight": 77, "cookies": false, "type": "", @@ -5288,6 +5356,7 @@ }, "x-appwrite": { "method": "updateCollection", + "group": "collections", "weight": 79, "cookies": false, "type": "", @@ -5388,6 +5457,7 @@ }, "x-appwrite": { "method": "deleteCollection", + "group": "collections", "weight": 80, "cookies": false, "type": "", @@ -5456,6 +5526,7 @@ }, "x-appwrite": { "method": "listAttributes", + "group": "attributes", "weight": 91, "cookies": false, "type": "", @@ -5536,6 +5607,7 @@ }, "x-appwrite": { "method": "createBooleanAttribute", + "group": "attributes", "weight": 88, "cookies": false, "type": "", @@ -5641,6 +5713,7 @@ }, "x-appwrite": { "method": "updateBooleanAttribute", + "group": "attributes", "weight": 100, "cookies": false, "type": "", @@ -5748,6 +5821,7 @@ }, "x-appwrite": { "method": "createDatetimeAttribute", + "group": "attributes", "weight": 89, "cookies": false, "type": "", @@ -5853,6 +5927,7 @@ }, "x-appwrite": { "method": "updateDatetimeAttribute", + "group": "attributes", "weight": 101, "cookies": false, "type": "", @@ -5960,6 +6035,7 @@ }, "x-appwrite": { "method": "createEmailAttribute", + "group": "attributes", "weight": 82, "cookies": false, "type": "", @@ -6065,6 +6141,7 @@ }, "x-appwrite": { "method": "updateEmailAttribute", + "group": "attributes", "weight": 94, "cookies": false, "type": "", @@ -6172,6 +6249,7 @@ }, "x-appwrite": { "method": "createEnumAttribute", + "group": "attributes", "weight": 83, "cookies": false, "type": "", @@ -6287,6 +6365,7 @@ }, "x-appwrite": { "method": "updateEnumAttribute", + "group": "attributes", "weight": 95, "cookies": false, "type": "", @@ -6404,6 +6483,7 @@ }, "x-appwrite": { "method": "createFloatAttribute", + "group": "attributes", "weight": 87, "cookies": false, "type": "", @@ -6521,6 +6601,7 @@ }, "x-appwrite": { "method": "updateFloatAttribute", + "group": "attributes", "weight": 99, "cookies": false, "type": "", @@ -6640,6 +6721,7 @@ }, "x-appwrite": { "method": "createIntegerAttribute", + "group": "attributes", "weight": 86, "cookies": false, "type": "", @@ -6757,6 +6839,7 @@ }, "x-appwrite": { "method": "updateIntegerAttribute", + "group": "attributes", "weight": 98, "cookies": false, "type": "", @@ -6876,6 +6959,7 @@ }, "x-appwrite": { "method": "createIpAttribute", + "group": "attributes", "weight": 84, "cookies": false, "type": "", @@ -6981,6 +7065,7 @@ }, "x-appwrite": { "method": "updateIpAttribute", + "group": "attributes", "weight": 96, "cookies": false, "type": "", @@ -7088,6 +7173,7 @@ }, "x-appwrite": { "method": "createRelationshipAttribute", + "group": "attributes", "weight": 90, "cookies": false, "type": "", @@ -7220,6 +7306,7 @@ }, "x-appwrite": { "method": "createStringAttribute", + "group": "attributes", "weight": 81, "cookies": false, "type": "", @@ -7338,6 +7425,7 @@ }, "x-appwrite": { "method": "updateStringAttribute", + "group": "attributes", "weight": 93, "cookies": false, "type": "", @@ -7451,6 +7539,7 @@ }, "x-appwrite": { "method": "createUrlAttribute", + "group": "attributes", "weight": 85, "cookies": false, "type": "", @@ -7556,6 +7645,7 @@ }, "x-appwrite": { "method": "updateUrlAttribute", + "group": "attributes", "weight": 97, "cookies": false, "type": "", @@ -7694,6 +7784,7 @@ }, "x-appwrite": { "method": "getAttribute", + "group": "attributes", "weight": 92, "cookies": false, "type": "", @@ -7762,6 +7853,7 @@ }, "x-appwrite": { "method": "deleteAttribute", + "group": "attributes", "weight": 103, "cookies": false, "type": "", @@ -7837,6 +7929,7 @@ }, "x-appwrite": { "method": "updateRelationshipAttribute", + "group": "attributes", "weight": 102, "cookies": false, "type": "", @@ -7940,6 +8033,7 @@ }, "x-appwrite": { "method": "listDocuments", + "group": "documents", "weight": 109, "cookies": false, "type": "", @@ -8021,6 +8115,7 @@ }, "x-appwrite": { "method": "createDocument", + "group": "documents", "weight": 108, "cookies": false, "type": "", @@ -8126,6 +8221,7 @@ }, "x-appwrite": { "method": "getDocument", + "group": "documents", "weight": 110, "cookies": false, "type": "", @@ -8215,6 +8311,7 @@ }, "x-appwrite": { "method": "updateDocument", + "group": "documents", "weight": 112, "cookies": false, "type": "", @@ -8311,6 +8408,7 @@ }, "x-appwrite": { "method": "deleteDocument", + "group": "documents", "weight": 113, "cookies": false, "type": "", @@ -8390,6 +8488,7 @@ }, "x-appwrite": { "method": "listDocumentLogs", + "group": "logs", "weight": 111, "cookies": false, "type": "", @@ -8477,6 +8576,7 @@ }, "x-appwrite": { "method": "listIndexes", + "group": "indexes", "weight": 105, "cookies": false, "type": "", @@ -8555,6 +8655,7 @@ }, "x-appwrite": { "method": "createIndex", + "group": "collections", "weight": 104, "cookies": false, "type": "", @@ -8674,6 +8775,7 @@ }, "x-appwrite": { "method": "getIndex", + "group": "indexes", "weight": 106, "cookies": false, "type": "", @@ -8742,6 +8844,7 @@ }, "x-appwrite": { "method": "deleteIndex", + "group": "indexes", "weight": 107, "cookies": false, "type": "", @@ -8817,6 +8920,7 @@ }, "x-appwrite": { "method": "listCollectionLogs", + "group": "collections", "weight": 78, "cookies": false, "type": "", @@ -8896,6 +9000,7 @@ }, "x-appwrite": { "method": "getCollectionUsage", + "group": null, "weight": 116, "cookies": false, "type": "", @@ -8983,6 +9088,7 @@ }, "x-appwrite": { "method": "listLogs", + "group": "logs", "weight": 72, "cookies": false, "type": "", @@ -9054,6 +9160,7 @@ }, "x-appwrite": { "method": "getDatabaseUsage", + "group": null, "weight": 115, "cookies": false, "type": "", @@ -9133,7 +9240,8 @@ }, "x-appwrite": { "method": "list", - "weight": 289, + "group": "functions", + "weight": 288, "cookies": false, "type": "", "deprecated": false, @@ -9204,7 +9312,8 @@ }, "x-appwrite": { "method": "create", - "weight": 288, + "group": "functions", + "weight": 287, "cookies": false, "type": "", "deprecated": false, @@ -9474,7 +9583,8 @@ }, "x-appwrite": { "method": "listRuntimes", - "weight": 290, + "group": "runtimes", + "weight": 289, "cookies": false, "type": "", "deprecated": false, @@ -9524,7 +9634,8 @@ }, "x-appwrite": { "method": "listSpecifications", - "weight": 291, + "group": "runtimes", + "weight": 290, "cookies": false, "type": "", "deprecated": false, @@ -9575,7 +9686,8 @@ }, "x-appwrite": { "method": "listTemplates", - "weight": 314, + "group": "templates", + "weight": 313, "cookies": false, "type": "", "deprecated": false, @@ -9670,7 +9782,8 @@ }, "x-appwrite": { "method": "getTemplate", - "weight": 315, + "group": "templates", + "weight": 314, "cookies": false, "type": "", "deprecated": false, @@ -9729,7 +9842,8 @@ }, "x-appwrite": { "method": "getUsage", - "weight": 294, + "group": null, + "weight": 293, "cookies": false, "type": "", "deprecated": false, @@ -9800,7 +9914,8 @@ }, "x-appwrite": { "method": "get", - "weight": 292, + "group": "functions", + "weight": 291, "cookies": false, "type": "", "deprecated": false, @@ -9858,7 +9973,8 @@ }, "x-appwrite": { "method": "update", - "weight": 295, + "group": "functions", + "weight": 294, "cookies": false, "type": "", "deprecated": false, @@ -10098,7 +10214,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 298, + "group": "functions", + "weight": 297, "cookies": false, "type": "", "deprecated": false, @@ -10158,7 +10275,8 @@ }, "x-appwrite": { "method": "listDeployments", - "weight": 300, + "group": "deployments", + "weight": 299, "cookies": false, "type": "", "deprecated": false, @@ -10237,7 +10355,8 @@ }, "x-appwrite": { "method": "createDeployment", - "weight": 299, + "group": "deployments", + "weight": 298, "cookies": false, "type": "upload", "deprecated": false, @@ -10328,7 +10447,8 @@ }, "x-appwrite": { "method": "getDeployment", - "weight": 301, + "group": "deployments", + "weight": 300, "cookies": false, "type": "", "deprecated": false, @@ -10394,7 +10514,8 @@ }, "x-appwrite": { "method": "updateDeployment", - "weight": 297, + "group": "deployments", + "weight": 296, "cookies": false, "type": "", "deprecated": false, @@ -10455,7 +10576,8 @@ }, "x-appwrite": { "method": "deleteDeployment", - "weight": 302, + "group": "deployments", + "weight": 301, "cookies": false, "type": "", "deprecated": false, @@ -10501,7 +10623,7 @@ }, "\/functions\/{functionId}\/deployments\/{deploymentId}\/build": { "post": { - "summary": "Rebuild deployment", + "summary": "Create deployment build", "operationId": "functionsCreateBuild", "consumes": [ "application\/json" @@ -10520,7 +10642,8 @@ }, "x-appwrite": { "method": "createBuild", - "weight": 303, + "group": "deployments", + "weight": 302, "cookies": false, "type": "", "deprecated": false, @@ -10601,7 +10724,8 @@ }, "x-appwrite": { "method": "updateDeploymentBuild", - "weight": 304, + "group": "deployments", + "weight": 303, "cookies": false, "type": "", "deprecated": false, @@ -10647,7 +10771,7 @@ }, "\/functions\/{functionId}\/deployments\/{deploymentId}\/download": { "get": { - "summary": "Download deployment", + "summary": "Get deployment download", "operationId": "functionsGetDeploymentDownload", "consumes": [ "application\/json" @@ -10669,7 +10793,8 @@ }, "x-appwrite": { "method": "getDeploymentDownload", - "weight": 296, + "group": "deployments", + "weight": 295, "cookies": false, "type": "location", "deprecated": false, @@ -10739,7 +10864,8 @@ }, "x-appwrite": { "method": "listExecutions", - "weight": 306, + "group": "executions", + "weight": 305, "cookies": false, "type": "", "deprecated": false, @@ -10821,7 +10947,8 @@ }, "x-appwrite": { "method": "createExecution", - "weight": 305, + "group": "executions", + "weight": 304, "cookies": false, "type": "", "deprecated": false, @@ -10939,7 +11066,8 @@ }, "x-appwrite": { "method": "getExecution", - "weight": 307, + "group": "executions", + "weight": 306, "cookies": false, "type": "", "deprecated": false, @@ -11003,7 +11131,8 @@ }, "x-appwrite": { "method": "deleteExecution", - "weight": 308, + "group": "executions", + "weight": 307, "cookies": false, "type": "", "deprecated": false, @@ -11071,7 +11200,8 @@ }, "x-appwrite": { "method": "getFunctionUsage", - "weight": 293, + "group": null, + "weight": 292, "cookies": false, "type": "", "deprecated": false, @@ -11150,7 +11280,8 @@ }, "x-appwrite": { "method": "listVariables", - "weight": 310, + "group": "variables", + "weight": 309, "cookies": false, "type": "", "deprecated": false, @@ -11208,7 +11339,8 @@ }, "x-appwrite": { "method": "createVariable", - "weight": 309, + "group": "variables", + "weight": 308, "cookies": false, "type": "", "deprecated": false, @@ -11293,7 +11425,8 @@ }, "x-appwrite": { "method": "getVariable", - "weight": 311, + "group": "variables", + "weight": 310, "cookies": false, "type": "", "deprecated": false, @@ -11359,7 +11492,8 @@ }, "x-appwrite": { "method": "updateVariable", - "weight": 312, + "group": "variables", + "weight": 311, "cookies": false, "type": "", "deprecated": false, @@ -11444,7 +11578,8 @@ }, "x-appwrite": { "method": "deleteVariable", - "weight": 313, + "group": "variables", + "weight": 312, "cookies": false, "type": "", "deprecated": false, @@ -11512,7 +11647,8 @@ }, "x-appwrite": { "method": "query", - "weight": 331, + "group": "graphql", + "weight": 330, "cookies": false, "type": "graphql", "deprecated": false, @@ -11585,7 +11721,8 @@ }, "x-appwrite": { "method": "mutation", - "weight": 330, + "group": "graphql", + "weight": 329, "cookies": false, "type": "graphql", "deprecated": false, @@ -11658,6 +11795,7 @@ }, "x-appwrite": { "method": "get", + "group": "health", "weight": 125, "cookies": false, "type": "", @@ -11708,7 +11846,8 @@ }, "x-appwrite": { "method": "getAntivirus", - "weight": 147, + "group": "health", + "weight": 146, "cookies": false, "type": "", "deprecated": false, @@ -11758,6 +11897,7 @@ }, "x-appwrite": { "method": "getCache", + "group": "health", "weight": 128, "cookies": false, "type": "", @@ -11808,6 +11948,7 @@ }, "x-appwrite": { "method": "getCertificate", + "group": "health", "weight": 133, "cookies": false, "type": "", @@ -11867,6 +12008,7 @@ }, "x-appwrite": { "method": "getDB", + "group": "health", "weight": 127, "cookies": false, "type": "", @@ -11917,6 +12059,7 @@ }, "x-appwrite": { "method": "getPubSub", + "group": "health", "weight": 129, "cookies": false, "type": "", @@ -11967,6 +12110,7 @@ }, "x-appwrite": { "method": "getQueueBuilds", + "group": "queue", "weight": 135, "cookies": false, "type": "", @@ -12028,6 +12172,7 @@ }, "x-appwrite": { "method": "getQueueCertificates", + "group": "queue", "weight": 134, "cookies": false, "type": "", @@ -12089,6 +12234,7 @@ }, "x-appwrite": { "method": "getQueueDatabases", + "group": "queue", "weight": 136, "cookies": false, "type": "", @@ -12159,6 +12305,7 @@ }, "x-appwrite": { "method": "getQueueDeletes", + "group": "queue", "weight": 137, "cookies": false, "type": "", @@ -12220,7 +12367,8 @@ }, "x-appwrite": { "method": "getFailedJobs", - "weight": 148, + "group": "queue", + "weight": 147, "cookies": false, "type": "", "deprecated": false, @@ -12259,7 +12407,6 @@ "v1-functions", "v1-stats-resources", "v1-stats-usage", - "v1-stats-usage-dump", "v1-webhooks", "v1-certificates", "v1-builds", @@ -12306,6 +12453,7 @@ }, "x-appwrite": { "method": "getQueueFunctions", + "group": "queue", "weight": 141, "cookies": false, "type": "", @@ -12367,6 +12515,7 @@ }, "x-appwrite": { "method": "getQueueLogs", + "group": "queue", "weight": 132, "cookies": false, "type": "", @@ -12428,6 +12577,7 @@ }, "x-appwrite": { "method": "getQueueMails", + "group": "queue", "weight": 138, "cookies": false, "type": "", @@ -12489,6 +12639,7 @@ }, "x-appwrite": { "method": "getQueueMessaging", + "group": "queue", "weight": 139, "cookies": false, "type": "", @@ -12550,6 +12701,7 @@ }, "x-appwrite": { "method": "getQueueMigrations", + "group": "queue", "weight": 140, "cookies": false, "type": "", @@ -12611,6 +12763,7 @@ }, "x-appwrite": { "method": "getQueueStatsResources", + "group": "queue", "weight": 142, "cookies": false, "type": "", @@ -12672,6 +12825,7 @@ }, "x-appwrite": { "method": "getQueueUsage", + "group": "queue", "weight": 143, "cookies": false, "type": "", @@ -12709,67 +12863,6 @@ ] } }, - "\/health\/queue\/stats-usage-dump": { - "get": { - "summary": "Get usage dump queue", - "operationId": "healthGetQueueStatsUsageDump", - "consumes": [ - "application\/json" - ], - "produces": [ - "application\/json" - ], - "tags": [ - "health" - ], - "description": "Get the number of projects containing metrics that are waiting to be processed in the Appwrite internal queue server.", - "responses": { - "200": { - "description": "Health Queue", - "schema": { - "$ref": "#\/definitions\/healthQueue" - } - } - }, - "x-appwrite": { - "method": "getQueueStatsUsageDump", - "weight": 144, - "cookies": false, - "type": "", - "deprecated": false, - "demo": "health\/get-queue-stats-usage-dump.md", - "edit": "https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-stats-usage-dump.md", - "rate-limit": 0, - "rate-time": 3600, - "rate-key": "url:{url},ip:{ip}", - "scope": "health.read", - "platforms": [ - "server" - ], - "packaging": false, - "auth": { - "Project": [] - } - }, - "security": [ - { - "Project": [], - "Key": [] - } - ], - "parameters": [ - { - "name": "threshold", - "description": "Queue size threshold. When hit (equal or higher), endpoint returns server error. Default value is 5000.", - "required": false, - "type": "integer", - "format": "int32", - "default": 5000, - "in": "query" - } - ] - } - }, "\/health\/queue\/webhooks": { "get": { "summary": "Get webhooks queue", @@ -12794,6 +12887,7 @@ }, "x-appwrite": { "method": "getQueueWebhooks", + "group": "queue", "weight": 131, "cookies": false, "type": "", @@ -12855,7 +12949,8 @@ }, "x-appwrite": { "method": "getStorage", - "weight": 146, + "group": "storage", + "weight": 145, "cookies": false, "type": "", "deprecated": false, @@ -12905,7 +13000,8 @@ }, "x-appwrite": { "method": "getStorageLocal", - "weight": 145, + "group": "storage", + "weight": 144, "cookies": false, "type": "", "deprecated": false, @@ -12955,6 +13051,7 @@ }, "x-appwrite": { "method": "getTime", + "group": "health", "weight": 130, "cookies": false, "type": "", @@ -13005,6 +13102,7 @@ }, "x-appwrite": { "method": "get", + "group": null, "weight": 117, "cookies": false, "type": "", @@ -13058,6 +13156,7 @@ }, "x-appwrite": { "method": "listCodes", + "group": null, "weight": 118, "cookies": false, "type": "", @@ -13111,6 +13210,7 @@ }, "x-appwrite": { "method": "listContinents", + "group": null, "weight": 122, "cookies": false, "type": "", @@ -13164,6 +13264,7 @@ }, "x-appwrite": { "method": "listCountries", + "group": null, "weight": 119, "cookies": false, "type": "", @@ -13217,6 +13318,7 @@ }, "x-appwrite": { "method": "listCountriesEU", + "group": null, "weight": 120, "cookies": false, "type": "", @@ -13270,6 +13372,7 @@ }, "x-appwrite": { "method": "listCountriesPhones", + "group": null, "weight": 121, "cookies": false, "type": "", @@ -13323,6 +13426,7 @@ }, "x-appwrite": { "method": "listCurrencies", + "group": null, "weight": 123, "cookies": false, "type": "", @@ -13376,6 +13480,7 @@ }, "x-appwrite": { "method": "listLanguages", + "group": null, "weight": 124, "cookies": false, "type": "", @@ -13429,7 +13534,8 @@ }, "x-appwrite": { "method": "listMessages", - "weight": 384, + "group": "messages", + "weight": 383, "cookies": false, "type": "", "deprecated": false, @@ -13503,7 +13609,8 @@ }, "x-appwrite": { "method": "createEmail", - "weight": 381, + "group": "messages", + "weight": 380, "cookies": false, "type": "", "deprecated": false, @@ -13660,7 +13767,8 @@ }, "x-appwrite": { "method": "updateEmail", - "weight": 388, + "group": "messages", + "weight": 387, "cookies": false, "type": "", "deprecated": false, @@ -13814,7 +13922,8 @@ }, "x-appwrite": { "method": "createPush", - "weight": 383, + "group": "messages", + "weight": 382, "cookies": false, "type": "", "deprecated": false, @@ -14008,7 +14117,8 @@ }, "x-appwrite": { "method": "updatePush", - "weight": 390, + "group": "messages", + "weight": 389, "cookies": false, "type": "", "deprecated": false, @@ -14201,7 +14311,8 @@ }, "x-appwrite": { "method": "createSms", - "weight": 382, + "group": "messages", + "weight": 381, "cookies": false, "type": "", "deprecated": false, @@ -14318,7 +14429,8 @@ }, "x-appwrite": { "method": "updateSms", - "weight": 389, + "group": "messages", + "weight": 388, "cookies": false, "type": "", "deprecated": false, @@ -14433,7 +14545,8 @@ }, "x-appwrite": { "method": "getMessage", - "weight": 387, + "group": "messages", + "weight": 386, "cookies": false, "type": "", "deprecated": false, @@ -14487,7 +14600,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 391, + "group": "messages", + "weight": 390, "cookies": false, "type": "", "deprecated": false, @@ -14548,7 +14662,8 @@ }, "x-appwrite": { "method": "listMessageLogs", - "weight": 385, + "group": "logs", + "weight": 384, "cookies": false, "type": "", "deprecated": false, @@ -14621,7 +14736,8 @@ }, "x-appwrite": { "method": "listTargets", - "weight": 386, + "group": "messages", + "weight": 385, "cookies": false, "type": "", "deprecated": false, @@ -14694,7 +14810,8 @@ }, "x-appwrite": { "method": "listProviders", - "weight": 356, + "group": "providers", + "weight": 355, "cookies": false, "type": "", "deprecated": false, @@ -14768,7 +14885,8 @@ }, "x-appwrite": { "method": "createApnsProvider", - "weight": 355, + "group": "providers", + "weight": 354, "cookies": false, "type": "", "deprecated": false, @@ -14882,7 +15000,8 @@ }, "x-appwrite": { "method": "updateApnsProvider", - "weight": 368, + "group": "providers", + "weight": 367, "cookies": false, "type": "", "deprecated": false, @@ -14994,7 +15113,8 @@ }, "x-appwrite": { "method": "createFcmProvider", - "weight": 354, + "group": "providers", + "weight": 353, "cookies": false, "type": "", "deprecated": false, @@ -15084,7 +15204,8 @@ }, "x-appwrite": { "method": "updateFcmProvider", - "weight": 367, + "group": "providers", + "weight": 366, "cookies": false, "type": "", "deprecated": false, @@ -15172,7 +15293,8 @@ }, "x-appwrite": { "method": "createMailgunProvider", - "weight": 346, + "group": "providers", + "weight": 345, "cookies": false, "type": "", "deprecated": false, @@ -15298,7 +15420,8 @@ }, "x-appwrite": { "method": "updateMailgunProvider", - "weight": 359, + "group": "providers", + "weight": 358, "cookies": false, "type": "", "deprecated": false, @@ -15422,7 +15545,8 @@ }, "x-appwrite": { "method": "createMsg91Provider", - "weight": 349, + "group": "providers", + "weight": 348, "cookies": false, "type": "", "deprecated": false, @@ -15524,7 +15648,8 @@ }, "x-appwrite": { "method": "updateMsg91Provider", - "weight": 362, + "group": "providers", + "weight": 361, "cookies": false, "type": "", "deprecated": false, @@ -15624,7 +15749,8 @@ }, "x-appwrite": { "method": "createSendgridProvider", - "weight": 347, + "group": "providers", + "weight": 346, "cookies": false, "type": "", "deprecated": false, @@ -15738,7 +15864,8 @@ }, "x-appwrite": { "method": "updateSendgridProvider", - "weight": 360, + "group": "providers", + "weight": 359, "cookies": false, "type": "", "deprecated": false, @@ -15850,7 +15977,8 @@ }, "x-appwrite": { "method": "createSmtpProvider", - "weight": 348, + "group": "providers", + "weight": 347, "cookies": false, "type": "", "deprecated": false, @@ -16008,7 +16136,8 @@ }, "x-appwrite": { "method": "updateSmtpProvider", - "weight": 361, + "group": "providers", + "weight": 360, "cookies": false, "type": "", "deprecated": false, @@ -16163,7 +16292,8 @@ }, "x-appwrite": { "method": "createTelesignProvider", - "weight": 350, + "group": "providers", + "weight": 349, "cookies": false, "type": "", "deprecated": false, @@ -16265,7 +16395,8 @@ }, "x-appwrite": { "method": "updateTelesignProvider", - "weight": 363, + "group": "providers", + "weight": 362, "cookies": false, "type": "", "deprecated": false, @@ -16365,7 +16496,8 @@ }, "x-appwrite": { "method": "createTextmagicProvider", - "weight": 351, + "group": "providers", + "weight": 350, "cookies": false, "type": "", "deprecated": false, @@ -16467,7 +16599,8 @@ }, "x-appwrite": { "method": "updateTextmagicProvider", - "weight": 364, + "group": "providers", + "weight": 363, "cookies": false, "type": "", "deprecated": false, @@ -16567,7 +16700,8 @@ }, "x-appwrite": { "method": "createTwilioProvider", - "weight": 352, + "group": "providers", + "weight": 351, "cookies": false, "type": "", "deprecated": false, @@ -16669,7 +16803,8 @@ }, "x-appwrite": { "method": "updateTwilioProvider", - "weight": 365, + "group": "providers", + "weight": 364, "cookies": false, "type": "", "deprecated": false, @@ -16769,7 +16904,8 @@ }, "x-appwrite": { "method": "createVonageProvider", - "weight": 353, + "group": "providers", + "weight": 352, "cookies": false, "type": "", "deprecated": false, @@ -16871,7 +17007,8 @@ }, "x-appwrite": { "method": "updateVonageProvider", - "weight": 366, + "group": "providers", + "weight": 365, "cookies": false, "type": "", "deprecated": false, @@ -16971,7 +17108,8 @@ }, "x-appwrite": { "method": "getProvider", - "weight": 358, + "group": "providers", + "weight": 357, "cookies": false, "type": "", "deprecated": false, @@ -17025,7 +17163,8 @@ }, "x-appwrite": { "method": "deleteProvider", - "weight": 369, + "group": "providers", + "weight": 368, "cookies": false, "type": "", "deprecated": false, @@ -17086,7 +17225,8 @@ }, "x-appwrite": { "method": "listProviderLogs", - "weight": 357, + "group": "providers", + "weight": 356, "cookies": false, "type": "", "deprecated": false, @@ -17159,7 +17299,8 @@ }, "x-appwrite": { "method": "listSubscriberLogs", - "weight": 378, + "group": "subscribers", + "weight": 377, "cookies": false, "type": "", "deprecated": false, @@ -17232,7 +17373,8 @@ }, "x-appwrite": { "method": "listTopics", - "weight": 371, + "group": "topics", + "weight": 370, "cookies": false, "type": "", "deprecated": false, @@ -17304,7 +17446,8 @@ }, "x-appwrite": { "method": "createTopic", - "weight": 370, + "group": "topics", + "weight": 369, "cookies": false, "type": "", "deprecated": false, @@ -17393,7 +17536,8 @@ }, "x-appwrite": { "method": "getTopic", - "weight": 373, + "group": "topics", + "weight": 372, "cookies": false, "type": "", "deprecated": false, @@ -17452,7 +17596,8 @@ }, "x-appwrite": { "method": "updateTopic", - "weight": 374, + "group": "topics", + "weight": 373, "cookies": false, "type": "", "deprecated": false, @@ -17530,7 +17675,8 @@ }, "x-appwrite": { "method": "deleteTopic", - "weight": 375, + "group": "topics", + "weight": 374, "cookies": false, "type": "", "deprecated": false, @@ -17591,7 +17737,8 @@ }, "x-appwrite": { "method": "listTopicLogs", - "weight": 372, + "group": "topics", + "weight": 371, "cookies": false, "type": "", "deprecated": false, @@ -17664,7 +17811,8 @@ }, "x-appwrite": { "method": "listSubscribers", - "weight": 377, + "group": "subscribers", + "weight": 376, "cookies": false, "type": "", "deprecated": false, @@ -17744,7 +17892,8 @@ }, "x-appwrite": { "method": "createSubscriber", - "weight": 376, + "group": "subscribers", + "weight": 375, "cookies": false, "type": "", "deprecated": false, @@ -17833,7 +17982,8 @@ }, "x-appwrite": { "method": "getSubscriber", - "weight": 379, + "group": "subscribers", + "weight": 378, "cookies": false, "type": "", "deprecated": false, @@ -17895,7 +18045,8 @@ }, "x-appwrite": { "method": "deleteSubscriber", - "weight": 380, + "group": "subscribers", + "weight": 379, "cookies": false, "type": "", "deprecated": false, @@ -17967,7 +18118,8 @@ }, "x-appwrite": { "method": "list", - "weight": 338, + "group": null, + "weight": 337, "cookies": false, "type": "", "deprecated": false, @@ -18017,7 +18169,7 @@ }, "\/migrations\/appwrite": { "post": { - "summary": "Migrate Appwrite data", + "summary": "Create Appwrite migration", "operationId": "migrationsCreateAppwriteMigration", "consumes": [ "application\/json" @@ -18039,7 +18191,8 @@ }, "x-appwrite": { "method": "createAppwriteMigration", - "weight": 334, + "group": null, + "weight": 333, "cookies": false, "type": "", "deprecated": false, @@ -18110,7 +18263,7 @@ }, "\/migrations\/appwrite\/report": { "get": { - "summary": "Generate a report on Appwrite data", + "summary": "Get Appwrite migration report", "operationId": "migrationsGetAppwriteReport", "consumes": [ "application\/json" @@ -18132,7 +18285,8 @@ }, "x-appwrite": { "method": "getAppwriteReport", - "weight": 340, + "group": null, + "weight": 339, "cookies": false, "type": "", "deprecated": false, @@ -18197,7 +18351,7 @@ }, "\/migrations\/firebase": { "post": { - "summary": "Migrate Firebase data", + "summary": "Create Firebase migration", "operationId": "migrationsCreateFirebaseMigration", "consumes": [ "application\/json" @@ -18219,7 +18373,8 @@ }, "x-appwrite": { "method": "createFirebaseMigration", - "weight": 335, + "group": null, + "weight": 334, "cookies": false, "type": "", "deprecated": false, @@ -18276,7 +18431,7 @@ }, "\/migrations\/firebase\/report": { "get": { - "summary": "Generate a report on Firebase data", + "summary": "Get Firebase migration report", "operationId": "migrationsGetFirebaseReport", "consumes": [ "application\/json" @@ -18298,7 +18453,8 @@ }, "x-appwrite": { "method": "getFirebaseReport", - "weight": 341, + "group": null, + "weight": 340, "cookies": false, "type": "", "deprecated": false, @@ -18346,7 +18502,7 @@ }, "\/migrations\/nhost": { "post": { - "summary": "Migrate NHost data", + "summary": "Create NHost migration", "operationId": "migrationsCreateNHostMigration", "consumes": [ "application\/json" @@ -18368,7 +18524,8 @@ }, "x-appwrite": { "method": "createNHostMigration", - "weight": 337, + "group": null, + "weight": 336, "cookies": false, "type": "", "deprecated": false, @@ -18466,7 +18623,7 @@ }, "\/migrations\/nhost\/report": { "get": { - "summary": "Generate a report on NHost Data", + "summary": "Get NHost migration report", "operationId": "migrationsGetNHostReport", "consumes": [ "application\/json" @@ -18488,7 +18645,8 @@ }, "x-appwrite": { "method": "getNHostReport", - "weight": 343, + "group": null, + "weight": 342, "cookies": false, "type": "", "deprecated": false, @@ -18585,7 +18743,7 @@ }, "\/migrations\/supabase": { "post": { - "summary": "Migrate Supabase data", + "summary": "Create Supabase migration", "operationId": "migrationsCreateSupabaseMigration", "consumes": [ "application\/json" @@ -18607,7 +18765,8 @@ }, "x-appwrite": { "method": "createSupabaseMigration", - "weight": 336, + "group": null, + "weight": 335, "cookies": false, "type": "", "deprecated": false, @@ -18698,7 +18857,7 @@ }, "\/migrations\/supabase\/report": { "get": { - "summary": "Generate a report on Supabase Data", + "summary": "Get Supabase migration report", "operationId": "migrationsGetSupabaseReport", "consumes": [ "application\/json" @@ -18720,7 +18879,8 @@ }, "x-appwrite": { "method": "getSupabaseReport", - "weight": 342, + "group": null, + "weight": 341, "cookies": false, "type": "", "deprecated": false, @@ -18832,7 +18992,8 @@ }, "x-appwrite": { "method": "get", - "weight": 339, + "group": null, + "weight": 338, "cookies": false, "type": "", "deprecated": false, @@ -18867,7 +19028,7 @@ ] }, "patch": { - "summary": "Retry migration", + "summary": "Update retry migration", "operationId": "migrationsRetry", "consumes": [ "application\/json" @@ -18889,7 +19050,8 @@ }, "x-appwrite": { "method": "retry", - "weight": 344, + "group": null, + "weight": 343, "cookies": false, "type": "", "deprecated": false, @@ -18941,7 +19103,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 345, + "group": null, + "weight": 344, "cookies": false, "type": "", "deprecated": false, @@ -19000,7 +19163,8 @@ }, "x-appwrite": { "method": "getUsage", - "weight": 196, + "group": null, + "weight": 195, "cookies": false, "type": "", "deprecated": false, @@ -19083,7 +19247,8 @@ }, "x-appwrite": { "method": "listVariables", - "weight": 198, + "group": null, + "weight": 197, "cookies": false, "type": "", "deprecated": false, @@ -19130,7 +19295,8 @@ }, "x-appwrite": { "method": "createVariable", - "weight": 197, + "group": null, + "weight": 196, "cookies": false, "type": "", "deprecated": false, @@ -19206,7 +19372,8 @@ }, "x-appwrite": { "method": "getVariable", - "weight": 199, + "group": null, + "weight": 198, "cookies": false, "type": "", "deprecated": false, @@ -19263,7 +19430,8 @@ }, "x-appwrite": { "method": "updateVariable", - "weight": 200, + "group": null, + "weight": 199, "cookies": false, "type": "", "deprecated": false, @@ -19339,7 +19507,8 @@ }, "x-appwrite": { "method": "deleteVariable", - "weight": 201, + "group": null, + "weight": 200, "cookies": false, "type": "", "deprecated": false, @@ -19398,7 +19567,8 @@ }, "x-appwrite": { "method": "list", - "weight": 151, + "group": "projects", + "weight": 150, "cookies": false, "type": "", "deprecated": false, @@ -19468,7 +19638,8 @@ }, "x-appwrite": { "method": "create", - "weight": 150, + "group": "projects", + "weight": 149, "cookies": false, "type": "", "deprecated": false, @@ -19522,8 +19693,7 @@ "default": "default", "x-example": "default", "enum": [ - "default", - "fra" + "default" ], "x-enum-name": null, "x-enum-keys": [] @@ -19617,7 +19787,8 @@ }, "x-appwrite": { "method": "get", - "weight": 152, + "group": "projects", + "weight": 151, "cookies": false, "type": "", "deprecated": false, @@ -19674,7 +19845,8 @@ }, "x-appwrite": { "method": "update", - "weight": 153, + "group": "projects", + "weight": 152, "cookies": false, "type": "", "deprecated": false, @@ -19798,7 +19970,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 170, + "group": "projects", + "weight": 169, "cookies": false, "type": "", "deprecated": false, @@ -19857,7 +20030,8 @@ }, "x-appwrite": { "method": "updateApiStatus", - "weight": 157, + "group": "projects", + "weight": 156, "cookies": false, "type": "", "deprecated": false, @@ -19948,7 +20122,8 @@ }, "x-appwrite": { "method": "updateApiStatusAll", - "weight": 158, + "group": "projects", + "weight": 157, "cookies": false, "type": "", "deprecated": false, @@ -20025,7 +20200,8 @@ }, "x-appwrite": { "method": "updateAuthDuration", - "weight": 163, + "group": "auth", + "weight": 162, "cookies": false, "type": "", "deprecated": false, @@ -20102,7 +20278,8 @@ }, "x-appwrite": { "method": "updateAuthLimit", - "weight": 162, + "group": "auth", + "weight": 161, "cookies": false, "type": "", "deprecated": false, @@ -20179,7 +20356,8 @@ }, "x-appwrite": { "method": "updateAuthSessionsLimit", - "weight": 168, + "group": "auth", + "weight": 167, "cookies": false, "type": "", "deprecated": false, @@ -20256,7 +20434,8 @@ }, "x-appwrite": { "method": "updateMembershipsPrivacy", - "weight": 161, + "group": "auth", + "weight": 160, "cookies": false, "type": "", "deprecated": false, @@ -20347,7 +20526,8 @@ }, "x-appwrite": { "method": "updateMockNumbers", - "weight": 169, + "group": "auth", + "weight": 168, "cookies": false, "type": "", "deprecated": false, @@ -20427,7 +20607,8 @@ }, "x-appwrite": { "method": "updateAuthPasswordDictionary", - "weight": 166, + "group": "auth", + "weight": 165, "cookies": false, "type": "", "deprecated": false, @@ -20504,7 +20685,8 @@ }, "x-appwrite": { "method": "updateAuthPasswordHistory", - "weight": 165, + "group": "auth", + "weight": 164, "cookies": false, "type": "", "deprecated": false, @@ -20559,7 +20741,7 @@ }, "\/projects\/{projectId}\/auth\/personal-data": { "patch": { - "summary": "Enable or disable checking user passwords for similarity with their personal data.", + "summary": "Update personal data check", "operationId": "projectsUpdatePersonalDataCheck", "consumes": [ "application\/json" @@ -20581,7 +20763,8 @@ }, "x-appwrite": { "method": "updatePersonalDataCheck", - "weight": 167, + "group": "auth", + "weight": 166, "cookies": false, "type": "", "deprecated": false, @@ -20658,7 +20841,8 @@ }, "x-appwrite": { "method": "updateSessionAlerts", - "weight": 160, + "group": "auth", + "weight": 159, "cookies": false, "type": "", "deprecated": false, @@ -20735,7 +20919,8 @@ }, "x-appwrite": { "method": "updateAuthStatus", - "weight": 164, + "group": "auth", + "weight": 163, "cookies": false, "type": "", "deprecated": false, @@ -20831,7 +21016,8 @@ }, "x-appwrite": { "method": "createJWT", - "weight": 182, + "group": "auth", + "weight": 181, "cookies": false, "type": "", "deprecated": false, @@ -20917,7 +21103,8 @@ }, "x-appwrite": { "method": "listKeys", - "weight": 178, + "group": "keys", + "weight": 177, "cookies": false, "type": "", "deprecated": false, @@ -20974,7 +21161,8 @@ }, "x-appwrite": { "method": "createKey", - "weight": 177, + "group": "keys", + "weight": 176, "cookies": false, "type": "", "deprecated": false, @@ -21067,7 +21255,8 @@ }, "x-appwrite": { "method": "getKey", - "weight": 179, + "group": "keys", + "weight": 178, "cookies": false, "type": "", "deprecated": false, @@ -21132,7 +21321,8 @@ }, "x-appwrite": { "method": "updateKey", - "weight": 180, + "group": "keys", + "weight": 179, "cookies": false, "type": "", "deprecated": false, @@ -21226,7 +21416,8 @@ }, "x-appwrite": { "method": "deleteKey", - "weight": 181, + "group": "keys", + "weight": 180, "cookies": false, "type": "", "deprecated": false, @@ -21293,7 +21484,8 @@ }, "x-appwrite": { "method": "updateOAuth2", - "weight": 159, + "group": "auth", + "weight": 158, "cookies": false, "type": "", "deprecated": false, @@ -21351,6 +21543,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -21431,7 +21624,8 @@ }, "x-appwrite": { "method": "listPlatforms", - "weight": 184, + "group": "platforms", + "weight": 183, "cookies": false, "type": "", "deprecated": false, @@ -21488,7 +21682,8 @@ }, "x-appwrite": { "method": "createPlatform", - "weight": 183, + "group": "platforms", + "weight": 182, "cookies": false, "type": "", "deprecated": false, @@ -21609,7 +21804,8 @@ }, "x-appwrite": { "method": "getPlatform", - "weight": 185, + "group": "platforms", + "weight": 184, "cookies": false, "type": "", "deprecated": false, @@ -21674,7 +21870,8 @@ }, "x-appwrite": { "method": "updatePlatform", - "weight": 186, + "group": "platforms", + "weight": 185, "cookies": false, "type": "", "deprecated": false, @@ -21770,7 +21967,8 @@ }, "x-appwrite": { "method": "deletePlatform", - "weight": 187, + "group": "platforms", + "weight": 186, "cookies": false, "type": "", "deprecated": false, @@ -21837,7 +22035,8 @@ }, "x-appwrite": { "method": "updateServiceStatus", - "weight": 155, + "group": "projects", + "weight": 154, "cookies": false, "type": "", "deprecated": false, @@ -21936,7 +22135,8 @@ }, "x-appwrite": { "method": "updateServiceStatusAll", - "weight": 156, + "group": "projects", + "weight": 155, "cookies": false, "type": "", "deprecated": false, @@ -22013,7 +22213,8 @@ }, "x-appwrite": { "method": "updateSmtp", - "weight": 188, + "group": "templates", + "weight": 187, "cookies": false, "type": "", "deprecated": false, @@ -22141,7 +22342,8 @@ }, "x-appwrite": { "method": "createSmtpTest", - "weight": 189, + "group": "templates", + "weight": 188, "cookies": false, "type": "", "deprecated": false, @@ -22278,7 +22480,8 @@ }, "x-appwrite": { "method": "updateTeam", - "weight": 154, + "group": "projects", + "weight": 153, "cookies": false, "type": "", "deprecated": false, @@ -22355,7 +22558,8 @@ }, "x-appwrite": { "method": "getEmailTemplate", - "weight": 191, + "group": "templates", + "weight": 190, "cookies": false, "type": "", "deprecated": false, @@ -22574,7 +22778,8 @@ }, "x-appwrite": { "method": "updateEmailTemplate", - "weight": 193, + "group": "templates", + "weight": 192, "cookies": false, "type": "", "deprecated": false, @@ -22814,7 +23019,7 @@ ] }, "delete": { - "summary": "Reset custom email template", + "summary": "Delete custom email template", "operationId": "projectsDeleteEmailTemplate", "consumes": [ "application\/json" @@ -22836,7 +23041,8 @@ }, "x-appwrite": { "method": "deleteEmailTemplate", - "weight": 195, + "group": "templates", + "weight": 194, "cookies": false, "type": "", "deprecated": false, @@ -23057,7 +23263,8 @@ }, "x-appwrite": { "method": "getSmsTemplate", - "weight": 190, + "group": "templates", + "weight": 189, "cookies": false, "type": "", "deprecated": false, @@ -23273,7 +23480,8 @@ }, "x-appwrite": { "method": "updateSmsTemplate", - "weight": 192, + "group": "templates", + "weight": 191, "cookies": false, "type": "", "deprecated": false, @@ -23507,7 +23715,8 @@ }, "x-appwrite": { "method": "deleteSmsTemplate", - "weight": 194, + "group": "templates", + "weight": 193, "cookies": false, "type": "", "deprecated": false, @@ -23725,7 +23934,8 @@ }, "x-appwrite": { "method": "listWebhooks", - "weight": 172, + "group": "webhooks", + "weight": 171, "cookies": false, "type": "", "deprecated": false, @@ -23782,7 +23992,8 @@ }, "x-appwrite": { "method": "createWebhook", - "weight": 171, + "group": "webhooks", + "weight": 170, "cookies": false, "type": "", "deprecated": false, @@ -23901,7 +24112,8 @@ }, "x-appwrite": { "method": "getWebhook", - "weight": 173, + "group": "webhooks", + "weight": 172, "cookies": false, "type": "", "deprecated": false, @@ -23966,7 +24178,8 @@ }, "x-appwrite": { "method": "updateWebhook", - "weight": 174, + "group": "webhooks", + "weight": 173, "cookies": false, "type": "", "deprecated": false, @@ -24086,7 +24299,8 @@ }, "x-appwrite": { "method": "deleteWebhook", - "weight": 176, + "group": "webhooks", + "weight": 175, "cookies": false, "type": "", "deprecated": false, @@ -24153,7 +24367,8 @@ }, "x-appwrite": { "method": "updateWebhookSignature", - "weight": 175, + "group": "webhooks", + "weight": 174, "cookies": false, "type": "", "deprecated": false, @@ -24220,7 +24435,8 @@ }, "x-appwrite": { "method": "listRules", - "weight": 317, + "group": null, + "weight": 316, "cookies": false, "type": "", "deprecated": false, @@ -24290,7 +24506,8 @@ }, "x-appwrite": { "method": "createRule", - "weight": 316, + "group": null, + "weight": 315, "cookies": false, "type": "", "deprecated": false, @@ -24378,7 +24595,8 @@ }, "x-appwrite": { "method": "getRule", - "weight": 318, + "group": null, + "weight": 317, "cookies": false, "type": "", "deprecated": false, @@ -24430,7 +24648,8 @@ }, "x-appwrite": { "method": "deleteRule", - "weight": 319, + "group": null, + "weight": 318, "cookies": false, "type": "", "deprecated": false, @@ -24489,7 +24708,8 @@ }, "x-appwrite": { "method": "updateRuleVerification", - "weight": 320, + "group": null, + "weight": 319, "cookies": false, "type": "", "deprecated": false, @@ -24548,7 +24768,8 @@ }, "x-appwrite": { "method": "listBuckets", - "weight": 203, + "group": "buckets", + "weight": 202, "cookies": false, "type": "", "deprecated": false, @@ -24619,7 +24840,8 @@ }, "x-appwrite": { "method": "createBucket", - "weight": 202, + "group": "buckets", + "weight": 201, "cookies": false, "type": "", "deprecated": false, @@ -24757,7 +24979,8 @@ }, "x-appwrite": { "method": "getBucket", - "weight": 204, + "group": "buckets", + "weight": 203, "cookies": false, "type": "", "deprecated": false, @@ -24815,7 +25038,8 @@ }, "x-appwrite": { "method": "updateBucket", - "weight": 205, + "group": "buckets", + "weight": 204, "cookies": false, "type": "", "deprecated": false, @@ -24947,7 +25171,8 @@ }, "x-appwrite": { "method": "deleteBucket", - "weight": 206, + "group": "buckets", + "weight": 205, "cookies": false, "type": "", "deprecated": false, @@ -25007,7 +25232,8 @@ }, "x-appwrite": { "method": "listFiles", - "weight": 208, + "group": "files", + "weight": 207, "cookies": false, "type": "", "deprecated": false, @@ -25089,7 +25315,8 @@ }, "x-appwrite": { "method": "createFile", - "weight": 207, + "group": "files", + "weight": 206, "cookies": false, "type": "upload", "deprecated": false, @@ -25180,7 +25407,8 @@ }, "x-appwrite": { "method": "getFile", - "weight": 209, + "group": "files", + "weight": 208, "cookies": false, "type": "", "deprecated": false, @@ -25249,7 +25477,8 @@ }, "x-appwrite": { "method": "updateFile", - "weight": 214, + "group": "files", + "weight": 213, "cookies": false, "type": "", "deprecated": false, @@ -25337,7 +25566,8 @@ }, "x-appwrite": { "method": "deleteFile", - "weight": 215, + "group": "files", + "weight": 214, "cookies": false, "type": "", "deprecated": false, @@ -25408,7 +25638,8 @@ }, "x-appwrite": { "method": "getFileDownload", - "weight": 211, + "group": "files", + "weight": 210, "cookies": false, "type": "location", "deprecated": false, @@ -25479,7 +25710,8 @@ }, "x-appwrite": { "method": "getFilePreview", - "weight": 210, + "group": "files", + "weight": 209, "cookies": false, "type": "location", "deprecated": false, @@ -25678,7 +25910,8 @@ }, "x-appwrite": { "method": "getFileView", - "weight": 212, + "group": "files", + "weight": 211, "cookies": false, "type": "location", "deprecated": false, @@ -25749,7 +25982,8 @@ }, "x-appwrite": { "method": "getUsage", - "weight": 216, + "group": null, + "weight": 215, "cookies": false, "type": "", "deprecated": false, @@ -25820,7 +26054,8 @@ }, "x-appwrite": { "method": "getBucketUsage", - "weight": 217, + "group": null, + "weight": 216, "cookies": false, "type": "", "deprecated": false, @@ -25899,7 +26134,8 @@ }, "x-appwrite": { "method": "list", - "weight": 219, + "group": "teams", + "weight": 218, "cookies": false, "type": "", "deprecated": false, @@ -25973,7 +26209,8 @@ }, "x-appwrite": { "method": "create", - "weight": 218, + "group": "teams", + "weight": 217, "cookies": false, "type": "", "deprecated": false, @@ -26064,7 +26301,8 @@ }, "x-appwrite": { "method": "get", - "weight": 220, + "group": "teams", + "weight": 219, "cookies": false, "type": "", "deprecated": false, @@ -26125,7 +26363,8 @@ }, "x-appwrite": { "method": "updateName", - "weight": 222, + "group": "teams", + "weight": 221, "cookies": false, "type": "", "deprecated": false, @@ -26199,7 +26438,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 224, + "group": "teams", + "weight": 223, "cookies": false, "type": "", "deprecated": false, @@ -26262,7 +26502,8 @@ }, "x-appwrite": { "method": "listLogs", - "weight": 231, + "group": "logs", + "weight": 230, "cookies": false, "type": "", "deprecated": false, @@ -26333,7 +26574,8 @@ }, "x-appwrite": { "method": "listMemberships", - "weight": 226, + "group": "memberships", + "weight": 225, "cookies": false, "type": "", "deprecated": false, @@ -26415,7 +26657,8 @@ }, "x-appwrite": { "method": "createMembership", - "weight": 225, + "group": "memberships", + "weight": 224, "cookies": false, "type": "", "deprecated": false, @@ -26529,7 +26772,8 @@ }, "x-appwrite": { "method": "getMembership", - "weight": 227, + "group": "memberships", + "weight": 226, "cookies": false, "type": "", "deprecated": false, @@ -26598,7 +26842,8 @@ }, "x-appwrite": { "method": "updateMembership", - "weight": 228, + "group": "memberships", + "weight": 227, "cookies": false, "type": "", "deprecated": false, @@ -26683,7 +26928,8 @@ }, "x-appwrite": { "method": "deleteMembership", - "weight": 230, + "group": "memberships", + "weight": 229, "cookies": false, "type": "", "deprecated": false, @@ -26754,7 +27000,8 @@ }, "x-appwrite": { "method": "updateMembershipStatus", - "weight": 229, + "group": "memberships", + "weight": 228, "cookies": false, "type": "", "deprecated": false, @@ -26848,7 +27095,8 @@ }, "x-appwrite": { "method": "getPrefs", - "weight": 221, + "group": "teams", + "weight": 220, "cookies": false, "type": "", "deprecated": false, @@ -26907,7 +27155,8 @@ }, "x-appwrite": { "method": "updatePrefs", - "weight": 223, + "group": "teams", + "weight": 222, "cookies": false, "type": "", "deprecated": false, @@ -26986,7 +27235,8 @@ }, "x-appwrite": { "method": "list", - "weight": 241, + "group": "users", + "weight": 240, "cookies": false, "type": "", "deprecated": false, @@ -27057,7 +27307,8 @@ }, "x-appwrite": { "method": "create", - "weight": 232, + "group": "users", + "weight": 231, "cookies": false, "type": "", "deprecated": false, @@ -27151,7 +27402,8 @@ }, "x-appwrite": { "method": "createArgon2User", - "weight": 235, + "group": "users", + "weight": 234, "cookies": false, "type": "", "deprecated": false, @@ -27241,7 +27493,8 @@ }, "x-appwrite": { "method": "createBcryptUser", - "weight": 233, + "group": "users", + "weight": 232, "cookies": false, "type": "", "deprecated": false, @@ -27331,7 +27584,8 @@ }, "x-appwrite": { "method": "listIdentities", - "weight": 249, + "group": "identities", + "weight": 248, "cookies": false, "type": "", "deprecated": false, @@ -27399,7 +27653,8 @@ }, "x-appwrite": { "method": "deleteIdentity", - "weight": 272, + "group": "identities", + "weight": 271, "cookies": false, "type": "", "deprecated": false, @@ -27459,7 +27714,8 @@ }, "x-appwrite": { "method": "createMD5User", - "weight": 234, + "group": "users", + "weight": 233, "cookies": false, "type": "", "deprecated": false, @@ -27549,7 +27805,8 @@ }, "x-appwrite": { "method": "createPHPassUser", - "weight": 237, + "group": "users", + "weight": 236, "cookies": false, "type": "", "deprecated": false, @@ -27639,7 +27896,8 @@ }, "x-appwrite": { "method": "createScryptUser", - "weight": 238, + "group": "users", + "weight": 237, "cookies": false, "type": "", "deprecated": false, @@ -27764,7 +28022,8 @@ }, "x-appwrite": { "method": "createScryptModifiedUser", - "weight": 239, + "group": "users", + "weight": 238, "cookies": false, "type": "", "deprecated": false, @@ -27875,7 +28134,8 @@ }, "x-appwrite": { "method": "createSHAUser", - "weight": 236, + "group": "users", + "weight": 235, "cookies": false, "type": "", "deprecated": false, @@ -27986,7 +28246,8 @@ }, "x-appwrite": { "method": "getUsage", - "weight": 274, + "group": null, + "weight": 273, "cookies": false, "type": "", "deprecated": false, @@ -28057,7 +28318,8 @@ }, "x-appwrite": { "method": "get", - "weight": 242, + "group": "users", + "weight": 241, "cookies": false, "type": "", "deprecated": false, @@ -28110,7 +28372,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 270, + "group": "users", + "weight": 269, "cookies": false, "type": "", "deprecated": false, @@ -28170,7 +28433,8 @@ }, "x-appwrite": { "method": "updateEmail", - "weight": 255, + "group": "users", + "weight": 254, "cookies": false, "type": "", "deprecated": false, @@ -28248,7 +28512,8 @@ }, "x-appwrite": { "method": "createJWT", - "weight": 273, + "group": "sessions", + "weight": 272, "cookies": false, "type": "", "deprecated": false, @@ -28329,7 +28594,8 @@ }, "x-appwrite": { "method": "updateLabels", - "weight": 251, + "group": "users", + "weight": 250, "cookies": false, "type": "", "deprecated": false, @@ -28410,7 +28676,8 @@ }, "x-appwrite": { "method": "listLogs", - "weight": 247, + "group": "logs", + "weight": 246, "cookies": false, "type": "", "deprecated": false, @@ -28482,7 +28749,8 @@ }, "x-appwrite": { "method": "listMemberships", - "weight": 246, + "group": "memberships", + "weight": 245, "cookies": false, "type": "", "deprecated": false, @@ -28542,7 +28810,8 @@ }, "x-appwrite": { "method": "updateMfa", - "weight": 260, + "group": "users", + "weight": 259, "cookies": false, "type": "", "deprecated": false, @@ -28615,7 +28884,8 @@ }, "x-appwrite": { "method": "deleteMfaAuthenticator", - "weight": 265, + "group": "mfa", + "weight": 264, "cookies": false, "type": "", "deprecated": false, @@ -28688,7 +28958,8 @@ }, "x-appwrite": { "method": "listMfaFactors", - "weight": 261, + "group": "mfa", + "weight": 260, "cookies": false, "type": "", "deprecated": false, @@ -28748,7 +29019,8 @@ }, "x-appwrite": { "method": "getMfaRecoveryCodes", - "weight": 262, + "group": "mfa", + "weight": 261, "cookies": false, "type": "", "deprecated": false, @@ -28784,7 +29056,7 @@ ] }, "put": { - "summary": "Regenerate MFA recovery codes", + "summary": "Update MFA recovery codes (regenerate)", "operationId": "usersUpdateMfaRecoveryCodes", "consumes": [ "application\/json" @@ -28806,7 +29078,8 @@ }, "x-appwrite": { "method": "updateMfaRecoveryCodes", - "weight": 264, + "group": "mfa", + "weight": 263, "cookies": false, "type": "", "deprecated": false, @@ -28864,7 +29137,8 @@ }, "x-appwrite": { "method": "createMfaRecoveryCodes", - "weight": 263, + "group": "mfa", + "weight": 262, "cookies": false, "type": "", "deprecated": false, @@ -28924,7 +29198,8 @@ }, "x-appwrite": { "method": "updateName", - "weight": 253, + "group": "users", + "weight": 252, "cookies": false, "type": "", "deprecated": false, @@ -29002,7 +29277,8 @@ }, "x-appwrite": { "method": "updatePassword", - "weight": 254, + "group": "users", + "weight": 253, "cookies": false, "type": "", "deprecated": false, @@ -29080,7 +29356,8 @@ }, "x-appwrite": { "method": "updatePhone", - "weight": 256, + "group": "users", + "weight": 255, "cookies": false, "type": "", "deprecated": false, @@ -29158,7 +29435,8 @@ }, "x-appwrite": { "method": "getPrefs", - "weight": 243, + "group": "users", + "weight": 242, "cookies": false, "type": "", "deprecated": false, @@ -29216,7 +29494,8 @@ }, "x-appwrite": { "method": "updatePrefs", - "weight": 258, + "group": "users", + "weight": 257, "cookies": false, "type": "", "deprecated": false, @@ -29294,7 +29573,8 @@ }, "x-appwrite": { "method": "listSessions", - "weight": 245, + "group": "sessions", + "weight": 244, "cookies": false, "type": "", "deprecated": false, @@ -29352,7 +29632,8 @@ }, "x-appwrite": { "method": "createSession", - "weight": 266, + "group": "sessions", + "weight": 265, "cookies": false, "type": "", "deprecated": false, @@ -29405,7 +29686,8 @@ }, "x-appwrite": { "method": "deleteSessions", - "weight": 269, + "group": "sessions", + "weight": 268, "cookies": false, "type": "", "deprecated": false, @@ -29460,7 +29742,8 @@ }, "x-appwrite": { "method": "deleteSession", - "weight": 268, + "group": "sessions", + "weight": 267, "cookies": false, "type": "", "deprecated": false, @@ -29528,7 +29811,8 @@ }, "x-appwrite": { "method": "updateStatus", - "weight": 250, + "group": "users", + "weight": 249, "cookies": false, "type": "", "deprecated": false, @@ -29606,7 +29890,8 @@ }, "x-appwrite": { "method": "listTargets", - "weight": 248, + "group": "targets", + "weight": 247, "cookies": false, "type": "", "deprecated": false, @@ -29677,7 +29962,8 @@ }, "x-appwrite": { "method": "createTarget", - "weight": 240, + "group": "targets", + "weight": 239, "cookies": false, "type": "", "deprecated": false, @@ -29789,7 +30075,8 @@ }, "x-appwrite": { "method": "getTarget", - "weight": 244, + "group": "targets", + "weight": 243, "cookies": false, "type": "", "deprecated": false, @@ -29856,7 +30143,8 @@ }, "x-appwrite": { "method": "updateTarget", - "weight": 259, + "group": "targets", + "weight": 258, "cookies": false, "type": "", "deprecated": false, @@ -29945,7 +30233,8 @@ }, "x-appwrite": { "method": "deleteTarget", - "weight": 271, + "group": "targets", + "weight": 270, "cookies": false, "type": "", "deprecated": false, @@ -30014,7 +30303,8 @@ }, "x-appwrite": { "method": "createToken", - "weight": 267, + "group": "sessions", + "weight": 266, "cookies": false, "type": "", "deprecated": false, @@ -30095,7 +30385,8 @@ }, "x-appwrite": { "method": "updateEmailVerification", - "weight": 257, + "group": "users", + "weight": 256, "cookies": false, "type": "", "deprecated": false, @@ -30173,7 +30464,8 @@ }, "x-appwrite": { "method": "updatePhoneVerification", - "weight": 252, + "group": "users", + "weight": 251, "cookies": false, "type": "", "deprecated": false, @@ -30251,7 +30543,8 @@ }, "x-appwrite": { "method": "listRepositories", - "weight": 279, + "group": "repositories", + "weight": 278, "cookies": false, "type": "", "deprecated": false, @@ -30317,7 +30610,8 @@ }, "x-appwrite": { "method": "createRepository", - "weight": 280, + "group": "repositories", + "weight": 279, "cookies": false, "type": "", "deprecated": false, @@ -30401,7 +30695,8 @@ }, "x-appwrite": { "method": "getRepository", - "weight": 281, + "group": "repositories", + "weight": 280, "cookies": false, "type": "", "deprecated": false, @@ -30468,7 +30763,8 @@ }, "x-appwrite": { "method": "listRepositoryBranches", - "weight": 282, + "group": "repositories", + "weight": 281, "cookies": false, "type": "", "deprecated": false, @@ -30535,7 +30831,8 @@ }, "x-appwrite": { "method": "getRepositoryContents", - "weight": 277, + "group": "repositories", + "weight": 276, "cookies": false, "type": "", "deprecated": false, @@ -30589,7 +30886,7 @@ }, "\/vcs\/github\/installations\/{installationId}\/providerRepositories\/{providerRepositoryId}\/detection": { "post": { - "summary": "Detect runtime settings from source code", + "summary": "Create runtime settings detection", "operationId": "vcsCreateRepositoryDetection", "consumes": [ "application\/json" @@ -30611,7 +30908,8 @@ }, "x-appwrite": { "method": "createRepositoryDetection", - "weight": 278, + "group": "repositories", + "weight": 277, "cookies": false, "type": "", "deprecated": false, @@ -30671,7 +30969,7 @@ }, "\/vcs\/github\/installations\/{installationId}\/repositories\/{repositoryId}": { "patch": { - "summary": "Authorize external deployment", + "summary": "Update external deployment (authorize)", "operationId": "vcsUpdateExternalDeployments", "consumes": [ "application\/json" @@ -30690,7 +30988,8 @@ }, "x-appwrite": { "method": "updateExternalDeployments", - "weight": 287, + "group": "repositories", + "weight": 286, "cookies": false, "type": "", "deprecated": false, @@ -30775,7 +31074,8 @@ }, "x-appwrite": { "method": "listInstallations", - "weight": 284, + "group": "installations", + "weight": 283, "cookies": false, "type": "", "deprecated": false, @@ -30847,7 +31147,8 @@ }, "x-appwrite": { "method": "getInstallation", - "weight": 285, + "group": "installations", + "weight": 284, "cookies": false, "type": "", "deprecated": false, @@ -30899,7 +31200,8 @@ }, "x-appwrite": { "method": "deleteInstallation", - "weight": 286, + "group": "installations", + "weight": 285, "cookies": false, "type": "", "deprecated": false, diff --git a/app/config/specs/swagger2-latest-server.json b/app/config/specs/swagger2-latest-server.json index 83757c94f4..b9f722998f 100644 --- a/app/config/specs/swagger2-latest-server.json +++ b/app/config/specs/swagger2-latest-server.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "version": "1.6.1", + "version": "1.6.2", "title": "Appwrite", "description": "Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https:\/\/appwrite.io\/docs](https:\/\/appwrite.io\/docs)", "termsOfService": "https:\/\/appwrite.io\/policy\/terms", @@ -102,6 +102,7 @@ }, "x-appwrite": { "method": "get", + "group": "account", "weight": 9, "cookies": false, "type": "", @@ -153,6 +154,7 @@ }, "x-appwrite": { "method": "create", + "group": "account", "weight": 8, "cookies": false, "type": "", @@ -243,6 +245,7 @@ }, "x-appwrite": { "method": "updateEmail", + "group": "account", "weight": 34, "cookies": false, "type": "", @@ -323,6 +326,7 @@ }, "x-appwrite": { "method": "listIdentities", + "group": "identities", "weight": 57, "cookies": false, "type": "", @@ -385,6 +389,7 @@ }, "x-appwrite": { "method": "deleteIdentity", + "group": "identities", "weight": 58, "cookies": false, "type": "", @@ -448,6 +453,7 @@ }, "x-appwrite": { "method": "createJWT", + "group": "tokens", "weight": 29, "cookies": false, "type": "", @@ -498,6 +504,7 @@ }, "x-appwrite": { "method": "listLogs", + "group": "logs", "weight": 31, "cookies": false, "type": "", @@ -565,6 +572,7 @@ }, "x-appwrite": { "method": "updateMFA", + "group": "mfa", "weight": 44, "cookies": false, "type": "", @@ -638,6 +646,7 @@ }, "x-appwrite": { "method": "createMfaAuthenticator", + "group": "mfa", "weight": 46, "cookies": false, "type": "", @@ -682,7 +691,7 @@ ] }, "put": { - "summary": "Verify authenticator", + "summary": "Update authenticator (confirmation)", "operationId": "accountUpdateMfaAuthenticator", "consumes": [ "application\/json" @@ -704,6 +713,7 @@ }, "x-appwrite": { "method": "updateMfaAuthenticator", + "group": "mfa", "weight": 47, "cookies": false, "type": "", @@ -783,6 +793,7 @@ }, "x-appwrite": { "method": "deleteMfaAuthenticator", + "group": "mfa", "weight": 51, "cookies": false, "type": "", @@ -851,6 +862,7 @@ }, "x-appwrite": { "method": "createMfaChallenge", + "group": "mfa", "weight": 52, "cookies": false, "type": "", @@ -905,7 +917,7 @@ ] }, "put": { - "summary": "Create MFA challenge (confirmation)", + "summary": "Update MFA challenge (confirmation)", "operationId": "accountUpdateMfaChallenge", "consumes": [ "application\/json" @@ -927,6 +939,7 @@ }, "x-appwrite": { "method": "updateMfaChallenge", + "group": "mfa", "weight": 53, "cookies": false, "type": "", @@ -1007,6 +1020,7 @@ }, "x-appwrite": { "method": "listMfaFactors", + "group": "mfa", "weight": 45, "cookies": false, "type": "", @@ -1038,7 +1052,7 @@ }, "\/account\/mfa\/recovery-codes": { "get": { - "summary": "Get MFA recovery codes", + "summary": "List MFA recovery codes", "operationId": "accountGetMfaRecoveryCodes", "consumes": [ "application\/json" @@ -1060,6 +1074,7 @@ }, "x-appwrite": { "method": "getMfaRecoveryCodes", + "group": "mfa", "weight": 50, "cookies": false, "type": "", @@ -1111,6 +1126,7 @@ }, "x-appwrite": { "method": "createMfaRecoveryCodes", + "group": "mfa", "weight": 48, "cookies": false, "type": "", @@ -1140,7 +1156,7 @@ ] }, "patch": { - "summary": "Regenerate MFA recovery codes", + "summary": "Update MFA recovery codes (regenerate)", "operationId": "accountUpdateMfaRecoveryCodes", "consumes": [ "application\/json" @@ -1162,6 +1178,7 @@ }, "x-appwrite": { "method": "updateMfaRecoveryCodes", + "group": "mfa", "weight": 49, "cookies": false, "type": "", @@ -1215,6 +1232,7 @@ }, "x-appwrite": { "method": "updateName", + "group": "account", "weight": 32, "cookies": false, "type": "", @@ -1288,6 +1306,7 @@ }, "x-appwrite": { "method": "updatePassword", + "group": "account", "weight": 33, "cookies": false, "type": "", @@ -1367,6 +1386,7 @@ }, "x-appwrite": { "method": "updatePhone", + "group": "account", "weight": 35, "cookies": false, "type": "", @@ -1447,6 +1467,7 @@ }, "x-appwrite": { "method": "getPrefs", + "group": "account", "weight": 30, "cookies": false, "type": "", @@ -1498,6 +1519,7 @@ }, "x-appwrite": { "method": "updatePrefs", + "group": "account", "weight": 36, "cookies": false, "type": "", @@ -1571,6 +1593,7 @@ }, "x-appwrite": { "method": "createRecovery", + "group": "recovery", "weight": 38, "cookies": false, "type": "", @@ -1630,7 +1653,7 @@ ] }, "put": { - "summary": "Create password recovery (confirmation)", + "summary": "Update password recovery (confirmation)", "operationId": "accountUpdateRecovery", "consumes": [ "application\/json" @@ -1652,6 +1675,7 @@ }, "x-appwrite": { "method": "updateRecovery", + "group": "recovery", "weight": 39, "cookies": false, "type": "", @@ -1739,6 +1763,7 @@ }, "x-appwrite": { "method": "listSessions", + "group": "sessions", "weight": 11, "cookies": false, "type": "", @@ -1785,6 +1810,7 @@ }, "x-appwrite": { "method": "deleteSessions", + "group": "sessions", "weight": 12, "cookies": false, "type": "", @@ -1838,6 +1864,7 @@ }, "x-appwrite": { "method": "createAnonymousSession", + "group": "sessions", "weight": 17, "cookies": false, "type": "", @@ -1888,6 +1915,7 @@ }, "x-appwrite": { "method": "createEmailPasswordSession", + "group": "sessions", "weight": 16, "cookies": false, "type": "", @@ -1965,6 +1993,7 @@ }, "x-appwrite": { "method": "updateMagicURLSession", + "group": "sessions", "weight": 26, "cookies": false, "type": "", @@ -2042,6 +2071,7 @@ }, "x-appwrite": { "method": "updatePhoneSession", + "group": "sessions", "weight": 27, "cookies": false, "type": "", @@ -2119,6 +2149,7 @@ }, "x-appwrite": { "method": "createSession", + "group": "sessions", "weight": 18, "cookies": false, "type": "", @@ -2196,6 +2227,7 @@ }, "x-appwrite": { "method": "getSession", + "group": "sessions", "weight": 13, "cookies": false, "type": "", @@ -2257,6 +2289,7 @@ }, "x-appwrite": { "method": "updateSession", + "group": "sessions", "weight": 15, "cookies": false, "type": "", @@ -2313,6 +2346,7 @@ }, "x-appwrite": { "method": "deleteSession", + "group": "sessions", "weight": 14, "cookies": false, "type": "", @@ -2376,6 +2410,7 @@ }, "x-appwrite": { "method": "updateStatus", + "group": "account", "weight": 37, "cookies": false, "type": "", @@ -2429,6 +2464,7 @@ }, "x-appwrite": { "method": "createEmailToken", + "group": "tokens", "weight": 25, "cookies": false, "type": "", @@ -2512,6 +2548,7 @@ }, "x-appwrite": { "method": "createMagicURLToken", + "group": "tokens", "weight": 24, "cookies": false, "type": "", @@ -2601,6 +2638,7 @@ }, "x-appwrite": { "method": "createOAuth2Token", + "group": "tokens", "weight": 23, "cookies": false, "type": "webAuth", @@ -2628,7 +2666,7 @@ "parameters": [ { "name": "provider", - "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", + "description": "OAuth2 Provider. Currently, supported providers are: amazon, apple, auth0, authentik, autodesk, bitbucket, bitly, box, dailymotion, discord, disqus, dropbox, etsy, facebook, figma, github, gitlab, google, linkedin, microsoft, notion, oidc, okta, paypal, paypalSandbox, podio, salesforce, slack, spotify, stripe, tradeshift, tradeshiftBox, twitch, wordpress, yahoo, yammer, yandex, zoho, zoom.", "required": true, "type": "string", "x-example": "amazon", @@ -2647,6 +2685,7 @@ "dropbox", "etsy", "facebook", + "figma", "github", "gitlab", "google", @@ -2736,6 +2775,7 @@ }, "x-appwrite": { "method": "createPhoneToken", + "group": "tokens", "weight": 28, "cookies": false, "type": "", @@ -2816,6 +2856,7 @@ }, "x-appwrite": { "method": "createVerification", + "group": "verification", "weight": 40, "cookies": false, "type": "", @@ -2865,7 +2906,7 @@ ] }, "put": { - "summary": "Create email verification (confirmation)", + "summary": "Update email verification (confirmation)", "operationId": "accountUpdateVerification", "consumes": [ "application\/json" @@ -2887,6 +2928,7 @@ }, "x-appwrite": { "method": "updateVerification", + "group": "verification", "weight": 41, "cookies": false, "type": "", @@ -2967,6 +3009,7 @@ }, "x-appwrite": { "method": "createPhoneVerification", + "group": "verification", "weight": 42, "cookies": false, "type": "", @@ -3021,6 +3064,7 @@ }, "x-appwrite": { "method": "updatePhoneVerification", + "group": "verification", "weight": 43, "cookies": false, "type": "", @@ -3101,6 +3145,7 @@ }, "x-appwrite": { "method": "getBrowser", + "group": null, "weight": 60, "cookies": false, "type": "location", @@ -3229,6 +3274,7 @@ }, "x-appwrite": { "method": "getCreditCard", + "group": null, "weight": 59, "cookies": false, "type": "location", @@ -3363,6 +3409,7 @@ }, "x-appwrite": { "method": "getFavicon", + "group": null, "weight": 63, "cookies": false, "type": "location", @@ -3429,6 +3476,7 @@ }, "x-appwrite": { "method": "getFlag", + "group": null, "weight": 61, "cookies": false, "type": "location", @@ -3919,6 +3967,7 @@ }, "x-appwrite": { "method": "getImage", + "group": null, "weight": 62, "cookies": false, "type": "location", @@ -4005,6 +4054,7 @@ }, "x-appwrite": { "method": "getInitials", + "group": null, "weight": 65, "cookies": false, "type": "location", @@ -4099,6 +4149,7 @@ }, "x-appwrite": { "method": "getQR", + "group": null, "weight": 64, "cookies": false, "type": "location", @@ -4193,6 +4244,7 @@ }, "x-appwrite": { "method": "list", + "group": "databases", "weight": 70, "cookies": false, "type": "", @@ -4265,6 +4317,7 @@ }, "x-appwrite": { "method": "create", + "group": "databases", "weight": 69, "cookies": false, "type": "", @@ -4349,6 +4402,7 @@ }, "x-appwrite": { "method": "get", + "group": "databases", "weight": 71, "cookies": false, "type": "", @@ -4408,6 +4462,7 @@ }, "x-appwrite": { "method": "update", + "group": "databases", "weight": 73, "cookies": false, "type": "", @@ -4486,6 +4541,7 @@ }, "x-appwrite": { "method": "delete", + "group": "databases", "weight": 74, "cookies": false, "type": "", @@ -4547,6 +4603,7 @@ }, "x-appwrite": { "method": "listCollections", + "group": "collections", "weight": 76, "cookies": false, "type": "", @@ -4627,6 +4684,7 @@ }, "x-appwrite": { "method": "createCollection", + "group": "collections", "weight": 75, "cookies": false, "type": "", @@ -4734,6 +4792,7 @@ }, "x-appwrite": { "method": "getCollection", + "group": "collections", "weight": 77, "cookies": false, "type": "", @@ -4801,6 +4860,7 @@ }, "x-appwrite": { "method": "updateCollection", + "group": "collections", "weight": 79, "cookies": false, "type": "", @@ -4902,6 +4962,7 @@ }, "x-appwrite": { "method": "deleteCollection", + "group": "collections", "weight": 80, "cookies": false, "type": "", @@ -4971,6 +5032,7 @@ }, "x-appwrite": { "method": "listAttributes", + "group": "attributes", "weight": 91, "cookies": false, "type": "", @@ -5052,6 +5114,7 @@ }, "x-appwrite": { "method": "createBooleanAttribute", + "group": "attributes", "weight": 88, "cookies": false, "type": "", @@ -5158,6 +5221,7 @@ }, "x-appwrite": { "method": "updateBooleanAttribute", + "group": "attributes", "weight": 100, "cookies": false, "type": "", @@ -5266,6 +5330,7 @@ }, "x-appwrite": { "method": "createDatetimeAttribute", + "group": "attributes", "weight": 89, "cookies": false, "type": "", @@ -5372,6 +5437,7 @@ }, "x-appwrite": { "method": "updateDatetimeAttribute", + "group": "attributes", "weight": 101, "cookies": false, "type": "", @@ -5480,6 +5546,7 @@ }, "x-appwrite": { "method": "createEmailAttribute", + "group": "attributes", "weight": 82, "cookies": false, "type": "", @@ -5586,6 +5653,7 @@ }, "x-appwrite": { "method": "updateEmailAttribute", + "group": "attributes", "weight": 94, "cookies": false, "type": "", @@ -5694,6 +5762,7 @@ }, "x-appwrite": { "method": "createEnumAttribute", + "group": "attributes", "weight": 83, "cookies": false, "type": "", @@ -5810,6 +5879,7 @@ }, "x-appwrite": { "method": "updateEnumAttribute", + "group": "attributes", "weight": 95, "cookies": false, "type": "", @@ -5928,6 +5998,7 @@ }, "x-appwrite": { "method": "createFloatAttribute", + "group": "attributes", "weight": 87, "cookies": false, "type": "", @@ -6046,6 +6117,7 @@ }, "x-appwrite": { "method": "updateFloatAttribute", + "group": "attributes", "weight": 99, "cookies": false, "type": "", @@ -6166,6 +6238,7 @@ }, "x-appwrite": { "method": "createIntegerAttribute", + "group": "attributes", "weight": 86, "cookies": false, "type": "", @@ -6284,6 +6357,7 @@ }, "x-appwrite": { "method": "updateIntegerAttribute", + "group": "attributes", "weight": 98, "cookies": false, "type": "", @@ -6404,6 +6478,7 @@ }, "x-appwrite": { "method": "createIpAttribute", + "group": "attributes", "weight": 84, "cookies": false, "type": "", @@ -6510,6 +6585,7 @@ }, "x-appwrite": { "method": "updateIpAttribute", + "group": "attributes", "weight": 96, "cookies": false, "type": "", @@ -6618,6 +6694,7 @@ }, "x-appwrite": { "method": "createRelationshipAttribute", + "group": "attributes", "weight": 90, "cookies": false, "type": "", @@ -6751,6 +6828,7 @@ }, "x-appwrite": { "method": "createStringAttribute", + "group": "attributes", "weight": 81, "cookies": false, "type": "", @@ -6870,6 +6948,7 @@ }, "x-appwrite": { "method": "updateStringAttribute", + "group": "attributes", "weight": 93, "cookies": false, "type": "", @@ -6984,6 +7063,7 @@ }, "x-appwrite": { "method": "createUrlAttribute", + "group": "attributes", "weight": 85, "cookies": false, "type": "", @@ -7090,6 +7170,7 @@ }, "x-appwrite": { "method": "updateUrlAttribute", + "group": "attributes", "weight": 97, "cookies": false, "type": "", @@ -7229,6 +7310,7 @@ }, "x-appwrite": { "method": "getAttribute", + "group": "attributes", "weight": 92, "cookies": false, "type": "", @@ -7298,6 +7380,7 @@ }, "x-appwrite": { "method": "deleteAttribute", + "group": "attributes", "weight": 103, "cookies": false, "type": "", @@ -7374,6 +7457,7 @@ }, "x-appwrite": { "method": "updateRelationshipAttribute", + "group": "attributes", "weight": 102, "cookies": false, "type": "", @@ -7478,6 +7562,7 @@ }, "x-appwrite": { "method": "listDocuments", + "group": "documents", "weight": 109, "cookies": false, "type": "", @@ -7561,6 +7646,7 @@ }, "x-appwrite": { "method": "createDocument", + "group": "documents", "weight": 108, "cookies": false, "type": "", @@ -7668,6 +7754,7 @@ }, "x-appwrite": { "method": "getDocument", + "group": "documents", "weight": 110, "cookies": false, "type": "", @@ -7759,6 +7846,7 @@ }, "x-appwrite": { "method": "updateDocument", + "group": "documents", "weight": 112, "cookies": false, "type": "", @@ -7857,6 +7945,7 @@ }, "x-appwrite": { "method": "deleteDocument", + "group": "documents", "weight": 113, "cookies": false, "type": "", @@ -7938,6 +8027,7 @@ }, "x-appwrite": { "method": "listIndexes", + "group": "indexes", "weight": 105, "cookies": false, "type": "", @@ -8017,6 +8107,7 @@ }, "x-appwrite": { "method": "createIndex", + "group": "collections", "weight": 104, "cookies": false, "type": "", @@ -8137,6 +8228,7 @@ }, "x-appwrite": { "method": "getIndex", + "group": "indexes", "weight": 106, "cookies": false, "type": "", @@ -8206,6 +8298,7 @@ }, "x-appwrite": { "method": "deleteIndex", + "group": "indexes", "weight": 107, "cookies": false, "type": "", @@ -8282,7 +8375,8 @@ }, "x-appwrite": { "method": "list", - "weight": 289, + "group": "functions", + "weight": 288, "cookies": false, "type": "", "deprecated": false, @@ -8354,7 +8448,8 @@ }, "x-appwrite": { "method": "create", - "weight": 288, + "group": "functions", + "weight": 287, "cookies": false, "type": "", "deprecated": false, @@ -8625,7 +8720,8 @@ }, "x-appwrite": { "method": "listRuntimes", - "weight": 290, + "group": "runtimes", + "weight": 289, "cookies": false, "type": "", "deprecated": false, @@ -8676,7 +8772,8 @@ }, "x-appwrite": { "method": "listSpecifications", - "weight": 291, + "group": "runtimes", + "weight": 290, "cookies": false, "type": "", "deprecated": false, @@ -8728,7 +8825,8 @@ }, "x-appwrite": { "method": "get", - "weight": 292, + "group": "functions", + "weight": 291, "cookies": false, "type": "", "deprecated": false, @@ -8787,7 +8885,8 @@ }, "x-appwrite": { "method": "update", - "weight": 295, + "group": "functions", + "weight": 294, "cookies": false, "type": "", "deprecated": false, @@ -9028,7 +9127,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 298, + "group": "functions", + "weight": 297, "cookies": false, "type": "", "deprecated": false, @@ -9089,7 +9189,8 @@ }, "x-appwrite": { "method": "listDeployments", - "weight": 300, + "group": "deployments", + "weight": 299, "cookies": false, "type": "", "deprecated": false, @@ -9169,7 +9270,8 @@ }, "x-appwrite": { "method": "createDeployment", - "weight": 299, + "group": "deployments", + "weight": 298, "cookies": false, "type": "upload", "deprecated": false, @@ -9261,7 +9363,8 @@ }, "x-appwrite": { "method": "getDeployment", - "weight": 301, + "group": "deployments", + "weight": 300, "cookies": false, "type": "", "deprecated": false, @@ -9328,7 +9431,8 @@ }, "x-appwrite": { "method": "updateDeployment", - "weight": 297, + "group": "deployments", + "weight": 296, "cookies": false, "type": "", "deprecated": false, @@ -9390,7 +9494,8 @@ }, "x-appwrite": { "method": "deleteDeployment", - "weight": 302, + "group": "deployments", + "weight": 301, "cookies": false, "type": "", "deprecated": false, @@ -9437,7 +9542,7 @@ }, "\/functions\/{functionId}\/deployments\/{deploymentId}\/build": { "post": { - "summary": "Rebuild deployment", + "summary": "Create deployment build", "operationId": "functionsCreateBuild", "consumes": [ "application\/json" @@ -9456,7 +9561,8 @@ }, "x-appwrite": { "method": "createBuild", - "weight": 303, + "group": "deployments", + "weight": 302, "cookies": false, "type": "", "deprecated": false, @@ -9538,7 +9644,8 @@ }, "x-appwrite": { "method": "updateDeploymentBuild", - "weight": 304, + "group": "deployments", + "weight": 303, "cookies": false, "type": "", "deprecated": false, @@ -9585,7 +9692,7 @@ }, "\/functions\/{functionId}\/deployments\/{deploymentId}\/download": { "get": { - "summary": "Download deployment", + "summary": "Get deployment download", "operationId": "functionsGetDeploymentDownload", "consumes": [ "application\/json" @@ -9607,7 +9714,8 @@ }, "x-appwrite": { "method": "getDeploymentDownload", - "weight": 296, + "group": "deployments", + "weight": 295, "cookies": false, "type": "location", "deprecated": false, @@ -9678,7 +9786,8 @@ }, "x-appwrite": { "method": "listExecutions", - "weight": 306, + "group": "executions", + "weight": 305, "cookies": false, "type": "", "deprecated": false, @@ -9762,7 +9871,8 @@ }, "x-appwrite": { "method": "createExecution", - "weight": 305, + "group": "executions", + "weight": 304, "cookies": false, "type": "", "deprecated": false, @@ -9882,7 +9992,8 @@ }, "x-appwrite": { "method": "getExecution", - "weight": 307, + "group": "executions", + "weight": 306, "cookies": false, "type": "", "deprecated": false, @@ -9948,7 +10059,8 @@ }, "x-appwrite": { "method": "deleteExecution", - "weight": 308, + "group": "executions", + "weight": 307, "cookies": false, "type": "", "deprecated": false, @@ -10017,7 +10129,8 @@ }, "x-appwrite": { "method": "listVariables", - "weight": 310, + "group": "variables", + "weight": 309, "cookies": false, "type": "", "deprecated": false, @@ -10076,7 +10189,8 @@ }, "x-appwrite": { "method": "createVariable", - "weight": 309, + "group": "variables", + "weight": 308, "cookies": false, "type": "", "deprecated": false, @@ -10162,7 +10276,8 @@ }, "x-appwrite": { "method": "getVariable", - "weight": 311, + "group": "variables", + "weight": 310, "cookies": false, "type": "", "deprecated": false, @@ -10229,7 +10344,8 @@ }, "x-appwrite": { "method": "updateVariable", - "weight": 312, + "group": "variables", + "weight": 311, "cookies": false, "type": "", "deprecated": false, @@ -10315,7 +10431,8 @@ }, "x-appwrite": { "method": "deleteVariable", - "weight": 313, + "group": "variables", + "weight": 312, "cookies": false, "type": "", "deprecated": false, @@ -10384,7 +10501,8 @@ }, "x-appwrite": { "method": "query", - "weight": 331, + "group": "graphql", + "weight": 330, "cookies": false, "type": "graphql", "deprecated": false, @@ -10459,7 +10577,8 @@ }, "x-appwrite": { "method": "mutation", - "weight": 330, + "group": "graphql", + "weight": 329, "cookies": false, "type": "graphql", "deprecated": false, @@ -10534,6 +10653,7 @@ }, "x-appwrite": { "method": "get", + "group": "health", "weight": 125, "cookies": false, "type": "", @@ -10585,7 +10705,8 @@ }, "x-appwrite": { "method": "getAntivirus", - "weight": 147, + "group": "health", + "weight": 146, "cookies": false, "type": "", "deprecated": false, @@ -10636,6 +10757,7 @@ }, "x-appwrite": { "method": "getCache", + "group": "health", "weight": 128, "cookies": false, "type": "", @@ -10687,6 +10809,7 @@ }, "x-appwrite": { "method": "getCertificate", + "group": "health", "weight": 133, "cookies": false, "type": "", @@ -10747,6 +10870,7 @@ }, "x-appwrite": { "method": "getDB", + "group": "health", "weight": 127, "cookies": false, "type": "", @@ -10798,6 +10922,7 @@ }, "x-appwrite": { "method": "getPubSub", + "group": "health", "weight": 129, "cookies": false, "type": "", @@ -10849,6 +10974,7 @@ }, "x-appwrite": { "method": "getQueueBuilds", + "group": "queue", "weight": 135, "cookies": false, "type": "", @@ -10911,6 +11037,7 @@ }, "x-appwrite": { "method": "getQueueCertificates", + "group": "queue", "weight": 134, "cookies": false, "type": "", @@ -10973,6 +11100,7 @@ }, "x-appwrite": { "method": "getQueueDatabases", + "group": "queue", "weight": 136, "cookies": false, "type": "", @@ -11044,6 +11172,7 @@ }, "x-appwrite": { "method": "getQueueDeletes", + "group": "queue", "weight": 137, "cookies": false, "type": "", @@ -11106,7 +11235,8 @@ }, "x-appwrite": { "method": "getFailedJobs", - "weight": 148, + "group": "queue", + "weight": 147, "cookies": false, "type": "", "deprecated": false, @@ -11146,7 +11276,6 @@ "v1-functions", "v1-stats-resources", "v1-stats-usage", - "v1-stats-usage-dump", "v1-webhooks", "v1-certificates", "v1-builds", @@ -11193,6 +11322,7 @@ }, "x-appwrite": { "method": "getQueueFunctions", + "group": "queue", "weight": 141, "cookies": false, "type": "", @@ -11255,6 +11385,7 @@ }, "x-appwrite": { "method": "getQueueLogs", + "group": "queue", "weight": 132, "cookies": false, "type": "", @@ -11317,6 +11448,7 @@ }, "x-appwrite": { "method": "getQueueMails", + "group": "queue", "weight": 138, "cookies": false, "type": "", @@ -11379,6 +11511,7 @@ }, "x-appwrite": { "method": "getQueueMessaging", + "group": "queue", "weight": 139, "cookies": false, "type": "", @@ -11441,6 +11574,7 @@ }, "x-appwrite": { "method": "getQueueMigrations", + "group": "queue", "weight": 140, "cookies": false, "type": "", @@ -11503,6 +11637,7 @@ }, "x-appwrite": { "method": "getQueueStatsResources", + "group": "queue", "weight": 142, "cookies": false, "type": "", @@ -11565,6 +11700,7 @@ }, "x-appwrite": { "method": "getQueueUsage", + "group": "queue", "weight": 143, "cookies": false, "type": "", @@ -11603,68 +11739,6 @@ ] } }, - "\/health\/queue\/stats-usage-dump": { - "get": { - "summary": "Get usage dump queue", - "operationId": "healthGetQueueStatsUsageDump", - "consumes": [ - "application\/json" - ], - "produces": [ - "application\/json" - ], - "tags": [ - "health" - ], - "description": "Get the number of projects containing metrics that are waiting to be processed in the Appwrite internal queue server.", - "responses": { - "200": { - "description": "Health Queue", - "schema": { - "$ref": "#\/definitions\/healthQueue" - } - } - }, - "x-appwrite": { - "method": "getQueueStatsUsageDump", - "weight": 144, - "cookies": false, - "type": "", - "deprecated": false, - "demo": "health\/get-queue-stats-usage-dump.md", - "edit": "https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/health\/get-queue-stats-usage-dump.md", - "rate-limit": 0, - "rate-time": 3600, - "rate-key": "url:{url},ip:{ip}", - "scope": "health.read", - "platforms": [ - "server" - ], - "packaging": false, - "auth": { - "Project": [], - "Key": [] - } - }, - "security": [ - { - "Project": [], - "Key": [] - } - ], - "parameters": [ - { - "name": "threshold", - "description": "Queue size threshold. When hit (equal or higher), endpoint returns server error. Default value is 5000.", - "required": false, - "type": "integer", - "format": "int32", - "default": 5000, - "in": "query" - } - ] - } - }, "\/health\/queue\/webhooks": { "get": { "summary": "Get webhooks queue", @@ -11689,6 +11763,7 @@ }, "x-appwrite": { "method": "getQueueWebhooks", + "group": "queue", "weight": 131, "cookies": false, "type": "", @@ -11751,7 +11826,8 @@ }, "x-appwrite": { "method": "getStorage", - "weight": 146, + "group": "storage", + "weight": 145, "cookies": false, "type": "", "deprecated": false, @@ -11802,7 +11878,8 @@ }, "x-appwrite": { "method": "getStorageLocal", - "weight": 145, + "group": "storage", + "weight": 144, "cookies": false, "type": "", "deprecated": false, @@ -11853,6 +11930,7 @@ }, "x-appwrite": { "method": "getTime", + "group": "health", "weight": 130, "cookies": false, "type": "", @@ -11904,6 +11982,7 @@ }, "x-appwrite": { "method": "get", + "group": null, "weight": 117, "cookies": false, "type": "", @@ -11959,6 +12038,7 @@ }, "x-appwrite": { "method": "listCodes", + "group": null, "weight": 118, "cookies": false, "type": "", @@ -12014,6 +12094,7 @@ }, "x-appwrite": { "method": "listContinents", + "group": null, "weight": 122, "cookies": false, "type": "", @@ -12069,6 +12150,7 @@ }, "x-appwrite": { "method": "listCountries", + "group": null, "weight": 119, "cookies": false, "type": "", @@ -12124,6 +12206,7 @@ }, "x-appwrite": { "method": "listCountriesEU", + "group": null, "weight": 120, "cookies": false, "type": "", @@ -12179,6 +12262,7 @@ }, "x-appwrite": { "method": "listCountriesPhones", + "group": null, "weight": 121, "cookies": false, "type": "", @@ -12234,6 +12318,7 @@ }, "x-appwrite": { "method": "listCurrencies", + "group": null, "weight": 123, "cookies": false, "type": "", @@ -12289,6 +12374,7 @@ }, "x-appwrite": { "method": "listLanguages", + "group": null, "weight": 124, "cookies": false, "type": "", @@ -12344,7 +12430,8 @@ }, "x-appwrite": { "method": "listMessages", - "weight": 384, + "group": "messages", + "weight": 383, "cookies": false, "type": "", "deprecated": false, @@ -12419,7 +12506,8 @@ }, "x-appwrite": { "method": "createEmail", - "weight": 381, + "group": "messages", + "weight": 380, "cookies": false, "type": "", "deprecated": false, @@ -12577,7 +12665,8 @@ }, "x-appwrite": { "method": "updateEmail", - "weight": 388, + "group": "messages", + "weight": 387, "cookies": false, "type": "", "deprecated": false, @@ -12732,7 +12821,8 @@ }, "x-appwrite": { "method": "createPush", - "weight": 383, + "group": "messages", + "weight": 382, "cookies": false, "type": "", "deprecated": false, @@ -12927,7 +13017,8 @@ }, "x-appwrite": { "method": "updatePush", - "weight": 390, + "group": "messages", + "weight": 389, "cookies": false, "type": "", "deprecated": false, @@ -13121,7 +13212,8 @@ }, "x-appwrite": { "method": "createSms", - "weight": 382, + "group": "messages", + "weight": 381, "cookies": false, "type": "", "deprecated": false, @@ -13239,7 +13331,8 @@ }, "x-appwrite": { "method": "updateSms", - "weight": 389, + "group": "messages", + "weight": 388, "cookies": false, "type": "", "deprecated": false, @@ -13355,7 +13448,8 @@ }, "x-appwrite": { "method": "getMessage", - "weight": 387, + "group": "messages", + "weight": 386, "cookies": false, "type": "", "deprecated": false, @@ -13410,7 +13504,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 391, + "group": "messages", + "weight": 390, "cookies": false, "type": "", "deprecated": false, @@ -13472,7 +13567,8 @@ }, "x-appwrite": { "method": "listMessageLogs", - "weight": 385, + "group": "logs", + "weight": 384, "cookies": false, "type": "", "deprecated": false, @@ -13546,7 +13642,8 @@ }, "x-appwrite": { "method": "listTargets", - "weight": 386, + "group": "messages", + "weight": 385, "cookies": false, "type": "", "deprecated": false, @@ -13620,7 +13717,8 @@ }, "x-appwrite": { "method": "listProviders", - "weight": 356, + "group": "providers", + "weight": 355, "cookies": false, "type": "", "deprecated": false, @@ -13695,7 +13793,8 @@ }, "x-appwrite": { "method": "createApnsProvider", - "weight": 355, + "group": "providers", + "weight": 354, "cookies": false, "type": "", "deprecated": false, @@ -13810,7 +13909,8 @@ }, "x-appwrite": { "method": "updateApnsProvider", - "weight": 368, + "group": "providers", + "weight": 367, "cookies": false, "type": "", "deprecated": false, @@ -13923,7 +14023,8 @@ }, "x-appwrite": { "method": "createFcmProvider", - "weight": 354, + "group": "providers", + "weight": 353, "cookies": false, "type": "", "deprecated": false, @@ -14014,7 +14115,8 @@ }, "x-appwrite": { "method": "updateFcmProvider", - "weight": 367, + "group": "providers", + "weight": 366, "cookies": false, "type": "", "deprecated": false, @@ -14103,7 +14205,8 @@ }, "x-appwrite": { "method": "createMailgunProvider", - "weight": 346, + "group": "providers", + "weight": 345, "cookies": false, "type": "", "deprecated": false, @@ -14230,7 +14333,8 @@ }, "x-appwrite": { "method": "updateMailgunProvider", - "weight": 359, + "group": "providers", + "weight": 358, "cookies": false, "type": "", "deprecated": false, @@ -14355,7 +14459,8 @@ }, "x-appwrite": { "method": "createMsg91Provider", - "weight": 349, + "group": "providers", + "weight": 348, "cookies": false, "type": "", "deprecated": false, @@ -14458,7 +14563,8 @@ }, "x-appwrite": { "method": "updateMsg91Provider", - "weight": 362, + "group": "providers", + "weight": 361, "cookies": false, "type": "", "deprecated": false, @@ -14559,7 +14665,8 @@ }, "x-appwrite": { "method": "createSendgridProvider", - "weight": 347, + "group": "providers", + "weight": 346, "cookies": false, "type": "", "deprecated": false, @@ -14674,7 +14781,8 @@ }, "x-appwrite": { "method": "updateSendgridProvider", - "weight": 360, + "group": "providers", + "weight": 359, "cookies": false, "type": "", "deprecated": false, @@ -14787,7 +14895,8 @@ }, "x-appwrite": { "method": "createSmtpProvider", - "weight": 348, + "group": "providers", + "weight": 347, "cookies": false, "type": "", "deprecated": false, @@ -14946,7 +15055,8 @@ }, "x-appwrite": { "method": "updateSmtpProvider", - "weight": 361, + "group": "providers", + "weight": 360, "cookies": false, "type": "", "deprecated": false, @@ -15102,7 +15212,8 @@ }, "x-appwrite": { "method": "createTelesignProvider", - "weight": 350, + "group": "providers", + "weight": 349, "cookies": false, "type": "", "deprecated": false, @@ -15205,7 +15316,8 @@ }, "x-appwrite": { "method": "updateTelesignProvider", - "weight": 363, + "group": "providers", + "weight": 362, "cookies": false, "type": "", "deprecated": false, @@ -15306,7 +15418,8 @@ }, "x-appwrite": { "method": "createTextmagicProvider", - "weight": 351, + "group": "providers", + "weight": 350, "cookies": false, "type": "", "deprecated": false, @@ -15409,7 +15522,8 @@ }, "x-appwrite": { "method": "updateTextmagicProvider", - "weight": 364, + "group": "providers", + "weight": 363, "cookies": false, "type": "", "deprecated": false, @@ -15510,7 +15624,8 @@ }, "x-appwrite": { "method": "createTwilioProvider", - "weight": 352, + "group": "providers", + "weight": 351, "cookies": false, "type": "", "deprecated": false, @@ -15613,7 +15728,8 @@ }, "x-appwrite": { "method": "updateTwilioProvider", - "weight": 365, + "group": "providers", + "weight": 364, "cookies": false, "type": "", "deprecated": false, @@ -15714,7 +15830,8 @@ }, "x-appwrite": { "method": "createVonageProvider", - "weight": 353, + "group": "providers", + "weight": 352, "cookies": false, "type": "", "deprecated": false, @@ -15817,7 +15934,8 @@ }, "x-appwrite": { "method": "updateVonageProvider", - "weight": 366, + "group": "providers", + "weight": 365, "cookies": false, "type": "", "deprecated": false, @@ -15918,7 +16036,8 @@ }, "x-appwrite": { "method": "getProvider", - "weight": 358, + "group": "providers", + "weight": 357, "cookies": false, "type": "", "deprecated": false, @@ -15973,7 +16092,8 @@ }, "x-appwrite": { "method": "deleteProvider", - "weight": 369, + "group": "providers", + "weight": 368, "cookies": false, "type": "", "deprecated": false, @@ -16035,7 +16155,8 @@ }, "x-appwrite": { "method": "listProviderLogs", - "weight": 357, + "group": "providers", + "weight": 356, "cookies": false, "type": "", "deprecated": false, @@ -16109,7 +16230,8 @@ }, "x-appwrite": { "method": "listSubscriberLogs", - "weight": 378, + "group": "subscribers", + "weight": 377, "cookies": false, "type": "", "deprecated": false, @@ -16183,7 +16305,8 @@ }, "x-appwrite": { "method": "listTopics", - "weight": 371, + "group": "topics", + "weight": 370, "cookies": false, "type": "", "deprecated": false, @@ -16256,7 +16379,8 @@ }, "x-appwrite": { "method": "createTopic", - "weight": 370, + "group": "topics", + "weight": 369, "cookies": false, "type": "", "deprecated": false, @@ -16346,7 +16470,8 @@ }, "x-appwrite": { "method": "getTopic", - "weight": 373, + "group": "topics", + "weight": 372, "cookies": false, "type": "", "deprecated": false, @@ -16406,7 +16531,8 @@ }, "x-appwrite": { "method": "updateTopic", - "weight": 374, + "group": "topics", + "weight": 373, "cookies": false, "type": "", "deprecated": false, @@ -16485,7 +16611,8 @@ }, "x-appwrite": { "method": "deleteTopic", - "weight": 375, + "group": "topics", + "weight": 374, "cookies": false, "type": "", "deprecated": false, @@ -16547,7 +16674,8 @@ }, "x-appwrite": { "method": "listTopicLogs", - "weight": 372, + "group": "topics", + "weight": 371, "cookies": false, "type": "", "deprecated": false, @@ -16621,7 +16749,8 @@ }, "x-appwrite": { "method": "listSubscribers", - "weight": 377, + "group": "subscribers", + "weight": 376, "cookies": false, "type": "", "deprecated": false, @@ -16702,7 +16831,8 @@ }, "x-appwrite": { "method": "createSubscriber", - "weight": 376, + "group": "subscribers", + "weight": 375, "cookies": false, "type": "", "deprecated": false, @@ -16793,7 +16923,8 @@ }, "x-appwrite": { "method": "getSubscriber", - "weight": 379, + "group": "subscribers", + "weight": 378, "cookies": false, "type": "", "deprecated": false, @@ -16856,7 +16987,8 @@ }, "x-appwrite": { "method": "deleteSubscriber", - "weight": 380, + "group": "subscribers", + "weight": 379, "cookies": false, "type": "", "deprecated": false, @@ -16930,7 +17062,8 @@ }, "x-appwrite": { "method": "listBuckets", - "weight": 203, + "group": "buckets", + "weight": 202, "cookies": false, "type": "", "deprecated": false, @@ -17002,7 +17135,8 @@ }, "x-appwrite": { "method": "createBucket", - "weight": 202, + "group": "buckets", + "weight": 201, "cookies": false, "type": "", "deprecated": false, @@ -17141,7 +17275,8 @@ }, "x-appwrite": { "method": "getBucket", - "weight": 204, + "group": "buckets", + "weight": 203, "cookies": false, "type": "", "deprecated": false, @@ -17200,7 +17335,8 @@ }, "x-appwrite": { "method": "updateBucket", - "weight": 205, + "group": "buckets", + "weight": 204, "cookies": false, "type": "", "deprecated": false, @@ -17333,7 +17469,8 @@ }, "x-appwrite": { "method": "deleteBucket", - "weight": 206, + "group": "buckets", + "weight": 205, "cookies": false, "type": "", "deprecated": false, @@ -17394,7 +17531,8 @@ }, "x-appwrite": { "method": "listFiles", - "weight": 208, + "group": "files", + "weight": 207, "cookies": false, "type": "", "deprecated": false, @@ -17478,7 +17616,8 @@ }, "x-appwrite": { "method": "createFile", - "weight": 207, + "group": "files", + "weight": 206, "cookies": false, "type": "upload", "deprecated": false, @@ -17571,7 +17710,8 @@ }, "x-appwrite": { "method": "getFile", - "weight": 209, + "group": "files", + "weight": 208, "cookies": false, "type": "", "deprecated": false, @@ -17642,7 +17782,8 @@ }, "x-appwrite": { "method": "updateFile", - "weight": 214, + "group": "files", + "weight": 213, "cookies": false, "type": "", "deprecated": false, @@ -17732,7 +17873,8 @@ }, "x-appwrite": { "method": "deleteFile", - "weight": 215, + "group": "files", + "weight": 214, "cookies": false, "type": "", "deprecated": false, @@ -17805,7 +17947,8 @@ }, "x-appwrite": { "method": "getFileDownload", - "weight": 211, + "group": "files", + "weight": 210, "cookies": false, "type": "location", "deprecated": false, @@ -17878,7 +18021,8 @@ }, "x-appwrite": { "method": "getFilePreview", - "weight": 210, + "group": "files", + "weight": 209, "cookies": false, "type": "location", "deprecated": false, @@ -18079,7 +18223,8 @@ }, "x-appwrite": { "method": "getFileView", - "weight": 212, + "group": "files", + "weight": 211, "cookies": false, "type": "location", "deprecated": false, @@ -18152,7 +18297,8 @@ }, "x-appwrite": { "method": "list", - "weight": 219, + "group": "teams", + "weight": 218, "cookies": false, "type": "", "deprecated": false, @@ -18228,7 +18374,8 @@ }, "x-appwrite": { "method": "create", - "weight": 218, + "group": "teams", + "weight": 217, "cookies": false, "type": "", "deprecated": false, @@ -18321,7 +18468,8 @@ }, "x-appwrite": { "method": "get", - "weight": 220, + "group": "teams", + "weight": 219, "cookies": false, "type": "", "deprecated": false, @@ -18384,7 +18532,8 @@ }, "x-appwrite": { "method": "updateName", - "weight": 222, + "group": "teams", + "weight": 221, "cookies": false, "type": "", "deprecated": false, @@ -18460,7 +18609,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 224, + "group": "teams", + "weight": 223, "cookies": false, "type": "", "deprecated": false, @@ -18525,7 +18675,8 @@ }, "x-appwrite": { "method": "listMemberships", - "weight": 226, + "group": "memberships", + "weight": 225, "cookies": false, "type": "", "deprecated": false, @@ -18609,7 +18760,8 @@ }, "x-appwrite": { "method": "createMembership", - "weight": 225, + "group": "memberships", + "weight": 224, "cookies": false, "type": "", "deprecated": false, @@ -18725,7 +18877,8 @@ }, "x-appwrite": { "method": "getMembership", - "weight": 227, + "group": "memberships", + "weight": 226, "cookies": false, "type": "", "deprecated": false, @@ -18796,7 +18949,8 @@ }, "x-appwrite": { "method": "updateMembership", - "weight": 228, + "group": "memberships", + "weight": 227, "cookies": false, "type": "", "deprecated": false, @@ -18883,7 +19037,8 @@ }, "x-appwrite": { "method": "deleteMembership", - "weight": 230, + "group": "memberships", + "weight": 229, "cookies": false, "type": "", "deprecated": false, @@ -18956,7 +19111,8 @@ }, "x-appwrite": { "method": "updateMembershipStatus", - "weight": 229, + "group": "memberships", + "weight": 228, "cookies": false, "type": "", "deprecated": false, @@ -19052,7 +19208,8 @@ }, "x-appwrite": { "method": "getPrefs", - "weight": 221, + "group": "teams", + "weight": 220, "cookies": false, "type": "", "deprecated": false, @@ -19113,7 +19270,8 @@ }, "x-appwrite": { "method": "updatePrefs", - "weight": 223, + "group": "teams", + "weight": 222, "cookies": false, "type": "", "deprecated": false, @@ -19194,7 +19352,8 @@ }, "x-appwrite": { "method": "list", - "weight": 241, + "group": "users", + "weight": 240, "cookies": false, "type": "", "deprecated": false, @@ -19266,7 +19425,8 @@ }, "x-appwrite": { "method": "create", - "weight": 232, + "group": "users", + "weight": 231, "cookies": false, "type": "", "deprecated": false, @@ -19361,7 +19521,8 @@ }, "x-appwrite": { "method": "createArgon2User", - "weight": 235, + "group": "users", + "weight": 234, "cookies": false, "type": "", "deprecated": false, @@ -19452,7 +19613,8 @@ }, "x-appwrite": { "method": "createBcryptUser", - "weight": 233, + "group": "users", + "weight": 232, "cookies": false, "type": "", "deprecated": false, @@ -19543,7 +19705,8 @@ }, "x-appwrite": { "method": "listIdentities", - "weight": 249, + "group": "identities", + "weight": 248, "cookies": false, "type": "", "deprecated": false, @@ -19612,7 +19775,8 @@ }, "x-appwrite": { "method": "deleteIdentity", - "weight": 272, + "group": "identities", + "weight": 271, "cookies": false, "type": "", "deprecated": false, @@ -19673,7 +19837,8 @@ }, "x-appwrite": { "method": "createMD5User", - "weight": 234, + "group": "users", + "weight": 233, "cookies": false, "type": "", "deprecated": false, @@ -19764,7 +19929,8 @@ }, "x-appwrite": { "method": "createPHPassUser", - "weight": 237, + "group": "users", + "weight": 236, "cookies": false, "type": "", "deprecated": false, @@ -19855,7 +20021,8 @@ }, "x-appwrite": { "method": "createScryptUser", - "weight": 238, + "group": "users", + "weight": 237, "cookies": false, "type": "", "deprecated": false, @@ -19981,7 +20148,8 @@ }, "x-appwrite": { "method": "createScryptModifiedUser", - "weight": 239, + "group": "users", + "weight": 238, "cookies": false, "type": "", "deprecated": false, @@ -20093,7 +20261,8 @@ }, "x-appwrite": { "method": "createSHAUser", - "weight": 236, + "group": "users", + "weight": 235, "cookies": false, "type": "", "deprecated": false, @@ -20205,7 +20374,8 @@ }, "x-appwrite": { "method": "get", - "weight": 242, + "group": "users", + "weight": 241, "cookies": false, "type": "", "deprecated": false, @@ -20259,7 +20429,8 @@ }, "x-appwrite": { "method": "delete", - "weight": 270, + "group": "users", + "weight": 269, "cookies": false, "type": "", "deprecated": false, @@ -20320,7 +20491,8 @@ }, "x-appwrite": { "method": "updateEmail", - "weight": 255, + "group": "users", + "weight": 254, "cookies": false, "type": "", "deprecated": false, @@ -20399,7 +20571,8 @@ }, "x-appwrite": { "method": "createJWT", - "weight": 273, + "group": "sessions", + "weight": 272, "cookies": false, "type": "", "deprecated": false, @@ -20481,7 +20654,8 @@ }, "x-appwrite": { "method": "updateLabels", - "weight": 251, + "group": "users", + "weight": 250, "cookies": false, "type": "", "deprecated": false, @@ -20563,7 +20737,8 @@ }, "x-appwrite": { "method": "listLogs", - "weight": 247, + "group": "logs", + "weight": 246, "cookies": false, "type": "", "deprecated": false, @@ -20636,7 +20811,8 @@ }, "x-appwrite": { "method": "listMemberships", - "weight": 246, + "group": "memberships", + "weight": 245, "cookies": false, "type": "", "deprecated": false, @@ -20697,7 +20873,8 @@ }, "x-appwrite": { "method": "updateMfa", - "weight": 260, + "group": "users", + "weight": 259, "cookies": false, "type": "", "deprecated": false, @@ -20771,7 +20948,8 @@ }, "x-appwrite": { "method": "deleteMfaAuthenticator", - "weight": 265, + "group": "mfa", + "weight": 264, "cookies": false, "type": "", "deprecated": false, @@ -20845,7 +21023,8 @@ }, "x-appwrite": { "method": "listMfaFactors", - "weight": 261, + "group": "mfa", + "weight": 260, "cookies": false, "type": "", "deprecated": false, @@ -20906,7 +21085,8 @@ }, "x-appwrite": { "method": "getMfaRecoveryCodes", - "weight": 262, + "group": "mfa", + "weight": 261, "cookies": false, "type": "", "deprecated": false, @@ -20943,7 +21123,7 @@ ] }, "put": { - "summary": "Regenerate MFA recovery codes", + "summary": "Update MFA recovery codes (regenerate)", "operationId": "usersUpdateMfaRecoveryCodes", "consumes": [ "application\/json" @@ -20965,7 +21145,8 @@ }, "x-appwrite": { "method": "updateMfaRecoveryCodes", - "weight": 264, + "group": "mfa", + "weight": 263, "cookies": false, "type": "", "deprecated": false, @@ -21024,7 +21205,8 @@ }, "x-appwrite": { "method": "createMfaRecoveryCodes", - "weight": 263, + "group": "mfa", + "weight": 262, "cookies": false, "type": "", "deprecated": false, @@ -21085,7 +21267,8 @@ }, "x-appwrite": { "method": "updateName", - "weight": 253, + "group": "users", + "weight": 252, "cookies": false, "type": "", "deprecated": false, @@ -21164,7 +21347,8 @@ }, "x-appwrite": { "method": "updatePassword", - "weight": 254, + "group": "users", + "weight": 253, "cookies": false, "type": "", "deprecated": false, @@ -21243,7 +21427,8 @@ }, "x-appwrite": { "method": "updatePhone", - "weight": 256, + "group": "users", + "weight": 255, "cookies": false, "type": "", "deprecated": false, @@ -21322,7 +21507,8 @@ }, "x-appwrite": { "method": "getPrefs", - "weight": 243, + "group": "users", + "weight": 242, "cookies": false, "type": "", "deprecated": false, @@ -21381,7 +21567,8 @@ }, "x-appwrite": { "method": "updatePrefs", - "weight": 258, + "group": "users", + "weight": 257, "cookies": false, "type": "", "deprecated": false, @@ -21460,7 +21647,8 @@ }, "x-appwrite": { "method": "listSessions", - "weight": 245, + "group": "sessions", + "weight": 244, "cookies": false, "type": "", "deprecated": false, @@ -21519,7 +21707,8 @@ }, "x-appwrite": { "method": "createSession", - "weight": 266, + "group": "sessions", + "weight": 265, "cookies": false, "type": "", "deprecated": false, @@ -21573,7 +21762,8 @@ }, "x-appwrite": { "method": "deleteSessions", - "weight": 269, + "group": "sessions", + "weight": 268, "cookies": false, "type": "", "deprecated": false, @@ -21629,7 +21819,8 @@ }, "x-appwrite": { "method": "deleteSession", - "weight": 268, + "group": "sessions", + "weight": 267, "cookies": false, "type": "", "deprecated": false, @@ -21698,7 +21889,8 @@ }, "x-appwrite": { "method": "updateStatus", - "weight": 250, + "group": "users", + "weight": 249, "cookies": false, "type": "", "deprecated": false, @@ -21777,7 +21969,8 @@ }, "x-appwrite": { "method": "listTargets", - "weight": 248, + "group": "targets", + "weight": 247, "cookies": false, "type": "", "deprecated": false, @@ -21849,7 +22042,8 @@ }, "x-appwrite": { "method": "createTarget", - "weight": 240, + "group": "targets", + "weight": 239, "cookies": false, "type": "", "deprecated": false, @@ -21962,7 +22156,8 @@ }, "x-appwrite": { "method": "getTarget", - "weight": 244, + "group": "targets", + "weight": 243, "cookies": false, "type": "", "deprecated": false, @@ -22030,7 +22225,8 @@ }, "x-appwrite": { "method": "updateTarget", - "weight": 259, + "group": "targets", + "weight": 258, "cookies": false, "type": "", "deprecated": false, @@ -22120,7 +22316,8 @@ }, "x-appwrite": { "method": "deleteTarget", - "weight": 271, + "group": "targets", + "weight": 270, "cookies": false, "type": "", "deprecated": false, @@ -22190,7 +22387,8 @@ }, "x-appwrite": { "method": "createToken", - "weight": 267, + "group": "sessions", + "weight": 266, "cookies": false, "type": "", "deprecated": false, @@ -22272,7 +22470,8 @@ }, "x-appwrite": { "method": "updateEmailVerification", - "weight": 257, + "group": "users", + "weight": 256, "cookies": false, "type": "", "deprecated": false, @@ -22351,7 +22550,8 @@ }, "x-appwrite": { "method": "updatePhoneVerification", - "weight": 252, + "group": "users", + "weight": 251, "cookies": false, "type": "", "deprecated": false, diff --git a/app/config/variables.php b/app/config/variables.php index 27463d2fee..a828ceda61 100644 --- a/app/config/variables.php +++ b/app/config/variables.php @@ -79,6 +79,15 @@ return [ 'question' => 'Enter your Appwrite hostname', 'filter' => '' ], + [ + 'name' => '_APP_CUSTOM_DOMAIN_DENY_LIST', + 'description' => 'List of reserved or prohibited domains when configuring custom domains.', + 'introduction' => '', + 'default' => 'example.com,test.com,app.example.com', + 'required' => false, + 'question' => '', + 'filter' => '' + ], [ 'name' => '_APP_DOMAIN_FUNCTIONS', 'description' => 'A domain to use for function preview URLs. Setting to empty turns off function preview URLs.', diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 20f64496ac..7bd1280987 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -43,6 +43,7 @@ use Utopia\Database\Database; use Utopia\Database\DateTime; use Utopia\Database\Document; use Utopia\Database\Exception\Duplicate; +use Utopia\Database\Exception\Order as OrderException; use Utopia\Database\Exception\Query as QueryException; use Utopia\Database\Helpers\ID; use Utopia\Database\Helpers\Permission; @@ -289,6 +290,7 @@ App::post('/v1/account') ->label('audits.userId', '{response.$id}') ->label('sdk', new Method( namespace: 'account', + group: 'account', name: 'create', description: '/docs/references/account/create.md', auth: [], @@ -432,6 +434,7 @@ App::get('/v1/account') ->label('scope', 'account') ->label('sdk', new Method( namespace: 'account', + group: 'account', name: 'get', description: '/docs/references/account/get.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -461,6 +464,7 @@ App::delete('/v1/account') ->label('audits.resource', 'user/{response.$id}') ->label('sdk', new Method( namespace: 'account', + group: 'account', name: 'delete', description: '/docs/references/account/delete.md', auth: [AuthType::ADMIN], @@ -513,6 +517,7 @@ App::get('/v1/account/sessions') ->label('scope', 'account') ->label('sdk', new Method( namespace: 'account', + group: 'sessions', name: 'listSessions', description: '/docs/references/account/list-sessions.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -562,6 +567,7 @@ App::delete('/v1/account/sessions') ->label('audits.resource', 'user/{user.$id}') ->label('sdk', new Method( namespace: 'account', + group: 'sessions', name: 'deleteSessions', description: '/docs/references/account/delete-sessions.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -631,6 +637,7 @@ App::get('/v1/account/sessions/:sessionId') ->label('scope', 'account') ->label('sdk', new Method( namespace: 'account', + group: 'sessions', name: 'getSession', description: '/docs/references/account/get-session.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -684,6 +691,7 @@ App::delete('/v1/account/sessions/:sessionId') ->label('audits.resource', 'user/{user.$id}') ->label('sdk', new Method( namespace: 'account', + group: 'sessions', name: 'deleteSession', description: '/docs/references/account/delete-session.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -772,6 +780,7 @@ App::patch('/v1/account/sessions/:sessionId') ->label('audits.userId', '{response.userId}') ->label('sdk', new Method( namespace: 'account', + group: 'sessions', name: 'updateSession', description: '/docs/references/account/update-session.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -856,6 +865,7 @@ App::post('/v1/account/sessions/email') ->label('audits.userId', '{response.userId}') ->label('sdk', new Method( namespace: 'account', + group: 'sessions', name: 'createEmailPasswordSession', description: '/docs/references/account/create-session-email-password.md', auth: [], @@ -996,6 +1006,7 @@ App::post('/v1/account/sessions/anonymous') ->label('audits.userId', '{response.userId}') ->label('sdk', new Method( namespace: 'account', + group: 'sessions', name: 'createAnonymousSession', description: '/docs/references/account/create-session-anonymous.md', auth: [], @@ -1139,6 +1150,7 @@ App::post('/v1/account/sessions/token') ->label('audits.userId', '{response.userId}') ->label('sdk', new Method( namespace: 'account', + group: 'sessions', name: 'createSession', description: '/docs/references/account/create-session.md', auth: [], @@ -1172,6 +1184,7 @@ App::get('/v1/account/sessions/oauth2/:provider') ->label('scope', 'sessions.write') ->label('sdk', new Method( namespace: 'account', + group: 'sessions', name: 'createOAuth2Session', description: '/docs/references/account/create-session-oauth2.md', type: MethodType::WEBAUTH, @@ -1243,7 +1256,7 @@ App::get('/v1/account/sessions/oauth2/:provider') }); App::get('/v1/account/sessions/oauth2/callback/:provider/:projectId') - ->desc('OAuth2 callback') + ->desc('Get OAuth2 callback') ->groups(['account']) ->label('error', __DIR__ . '/../../views/general/error.phtml') ->label('scope', 'public') @@ -1273,7 +1286,7 @@ App::get('/v1/account/sessions/oauth2/callback/:provider/:projectId') }); App::post('/v1/account/sessions/oauth2/callback/:provider/:projectId') - ->desc('OAuth2 callback') + ->desc('Create OAuth2 callback') ->groups(['account']) ->label('error', __DIR__ . '/../../views/general/error.phtml') ->label('scope', 'public') @@ -1304,7 +1317,7 @@ App::post('/v1/account/sessions/oauth2/callback/:provider/:projectId') }); App::get('/v1/account/sessions/oauth2/:provider/redirect') - ->desc('OAuth2 redirect') + ->desc('Get OAuth2 redirect') ->groups(['api', 'account', 'session']) ->label('error', __DIR__ . '/../../views/general/error.phtml') ->label('event', 'users.[userId].sessions.[sessionId].create') @@ -1769,6 +1782,7 @@ App::get('/v1/account/tokens/oauth2/:provider') ->label('scope', 'sessions.write') ->label('sdk', new Method( namespace: 'account', + group: 'tokens', name: 'createOAuth2Token', description: '/docs/references/account/create-token-oauth2.md', auth: [], @@ -1849,6 +1863,7 @@ App::post('/v1/account/tokens/magic-url') ->label('audits.userId', '{response.userId}') ->label('sdk', new Method( namespace: 'account', + group: 'tokens', name: 'createMagicURLToken', description: '/docs/references/account/create-token-magic-url.md', auth: [], @@ -2098,6 +2113,7 @@ App::post('/v1/account/tokens/email') ->label('audits.userId', '{response.userId}') ->label('sdk', new Method( namespace: 'account', + group: 'tokens', name: 'createEmailToken', description: '/docs/references/account/create-token-email.md', auth: [], @@ -2333,6 +2349,7 @@ App::put('/v1/account/sessions/magic-url') ->label('audits.userId', '{response.userId}') ->label('sdk', new Method( namespace: 'account', + group: 'sessions', name: 'updateMagicURLSession', description: '/docs/references/account/create-session.md', auth: [], @@ -2370,6 +2387,7 @@ App::put('/v1/account/sessions/phone') ->label('audits.userId', '{response.userId}') ->label('sdk', new Method( namespace: 'account', + group: 'sessions', name: 'updatePhoneSession', description: '/docs/references/account/create-session.md', auth: [], @@ -2408,6 +2426,7 @@ App::post('/v1/account/tokens/phone') ->label('audits.userId', '{response.userId}') ->label('sdk', new Method( namespace: 'account', + group: 'tokens', name: 'createPhoneToken', description: '/docs/references/account/create-token-phone.md', auth: [], @@ -2616,6 +2635,7 @@ App::post('/v1/account/jwts') ->label('auth.type', 'jwt') ->label('sdk', new Method( namespace: 'account', + group: 'tokens', name: 'createJWT', description: '/docs/references/account/create-jwt.md', auth: [], @@ -2664,6 +2684,7 @@ App::get('/v1/account/prefs') ->label('scope', 'account') ->label('sdk', new Method( namespace: 'account', + group: 'account', name: 'getPrefs', description: '/docs/references/account/get-prefs.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -2690,6 +2711,7 @@ App::get('/v1/account/logs') ->label('scope', 'account') ->label('sdk', new Method( namespace: 'account', + group: 'logs', name: 'listLogs', description: '/docs/references/account/list-logs.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -2766,6 +2788,7 @@ App::patch('/v1/account/name') ->label('audits.resource', 'user/{response.$id}') ->label('sdk', new Method( namespace: 'account', + group: 'account', name: 'updateName', description: '/docs/references/account/update-name.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -2804,6 +2827,7 @@ App::patch('/v1/account/password') ->label('audits.userId', '{response.$id}') ->label('sdk', new Method( namespace: 'account', + group: 'account', name: 'updatePassword', description: '/docs/references/account/update-password.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -2877,6 +2901,7 @@ App::patch('/v1/account/email') ->label('audits.resource', 'user/{response.$id}') ->label('sdk', new Method( namespace: 'account', + group: 'account', name: 'updateEmail', description: '/docs/references/account/update-email.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -2973,6 +2998,7 @@ App::patch('/v1/account/phone') ->label('audits.resource', 'user/{response.$id}') ->label('sdk', new Method( namespace: 'account', + group: 'account', name: 'updatePhone', description: '/docs/references/account/update-phone.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -3058,6 +3084,7 @@ App::patch('/v1/account/prefs') ->label('audits.resource', 'user/{response.$id}') ->label('sdk', new Method( namespace: 'account', + group: 'account', name: 'updatePrefs', description: '/docs/references/account/update-prefs.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -3095,6 +3122,7 @@ App::patch('/v1/account/status') ->label('audits.resource', 'user/{response.$id}') ->label('sdk', new Method( namespace: 'account', + group: 'account', name: 'updateStatus', description: '/docs/references/account/update-status.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -3145,6 +3173,7 @@ App::post('/v1/account/recovery') ->label('audits.userId', '{response.userId}') ->label('sdk', new Method( namespace: 'account', + group: 'recovery', name: 'createRecovery', description: '/docs/references/account/create-recovery.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -3322,7 +3351,7 @@ App::post('/v1/account/recovery') }); App::put('/v1/account/recovery') - ->desc('Create password recovery (confirmation)') + ->desc('Update password recovery (confirmation)') ->groups(['api', 'account']) ->label('scope', 'sessions.write') ->label('event', 'users.[userId].recovery.[tokenId].update') @@ -3331,6 +3360,7 @@ App::put('/v1/account/recovery') ->label('audits.userId', '{response.userId}') ->label('sdk', new Method( namespace: 'account', + group: 'recovery', name: 'updateRecovery', description: '/docs/references/account/update-recovery.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -3421,6 +3451,7 @@ App::post('/v1/account/verification') ->label('audits.resource', 'user/{response.userId}') ->label('sdk', new Method( namespace: 'account', + group: 'verification', name: 'createVerification', description: '/docs/references/account/create-email-verification.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -3584,7 +3615,7 @@ App::post('/v1/account/verification') }); App::put('/v1/account/verification') - ->desc('Create email verification (confirmation)') + ->desc('Update email verification (confirmation)') ->groups(['api', 'account']) ->label('scope', 'public') ->label('event', 'users.[userId].verification.[tokenId].update') @@ -3592,6 +3623,7 @@ App::put('/v1/account/verification') ->label('audits.resource', 'user/{response.userId}') ->label('sdk', new Method( namespace: 'account', + group: 'verification', name: 'updateVerification', description: '/docs/references/account/update-email-verification.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -3658,6 +3690,7 @@ App::post('/v1/account/verification/phone') ->label('audits.resource', 'user/{response.userId}') ->label('sdk', new Method( namespace: 'account', + group: 'verification', name: 'createPhoneVerification', description: '/docs/references/account/create-phone-verification.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -3815,6 +3848,7 @@ App::put('/v1/account/verification/phone') ->label('audits.resource', 'user/{response.userId}') ->label('sdk', new Method( namespace: 'account', + group: 'verification', name: 'updatePhoneVerification', description: '/docs/references/account/update-phone-verification.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -3880,6 +3914,7 @@ App::patch('/v1/account/mfa') ->label('audits.userId', '{response.$id}') ->label('sdk', new Method( namespace: 'account', + group: 'mfa', name: 'updateMFA', description: '/docs/references/account/update-mfa.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -3933,6 +3968,7 @@ App::get('/v1/account/mfa/factors') ->label('scope', 'account') ->label('sdk', new Method( namespace: 'account', + group: 'mfa', name: 'listMfaFactors', description: '/docs/references/account/list-mfa-factors.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -3973,6 +4009,7 @@ App::post('/v1/account/mfa/authenticators/:type') ->label('audits.userId', '{response.$id}') ->label('sdk', new Method( namespace: 'account', + group: 'mfa', name: 'createMfaAuthenticator', description: '/docs/references/account/create-mfa-authenticator.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -4040,7 +4077,7 @@ App::post('/v1/account/mfa/authenticators/:type') }); App::put('/v1/account/mfa/authenticators/:type') - ->desc('Verify authenticator') + ->desc('Update authenticator (confirmation)') ->groups(['api', 'account']) ->label('event', 'users.[userId].update.mfa') ->label('scope', 'account') @@ -4049,6 +4086,7 @@ App::put('/v1/account/mfa/authenticators/:type') ->label('audits.userId', '{response.$id}') ->label('sdk', new Method( namespace: 'account', + group: 'mfa', name: 'updateMfaAuthenticator', description: '/docs/references/account/update-mfa-authenticator.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -4118,6 +4156,7 @@ App::post('/v1/account/mfa/recovery-codes') ->label('audits.userId', '{response.$id}') ->label('sdk', new Method( namespace: 'account', + group: 'mfa', name: 'createMfaRecoveryCodes', description: '/docs/references/account/create-mfa-recovery-codes.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -4155,7 +4194,7 @@ App::post('/v1/account/mfa/recovery-codes') }); App::patch('/v1/account/mfa/recovery-codes') - ->desc('Regenerate MFA recovery codes') + ->desc('Update MFA recovery codes (regenerate)') ->groups(['api', 'account', 'mfaProtected']) ->label('event', 'users.[userId].update.mfa') ->label('scope', 'account') @@ -4164,6 +4203,7 @@ App::patch('/v1/account/mfa/recovery-codes') ->label('audits.userId', '{response.$id}') ->label('sdk', new Method( namespace: 'account', + group: 'mfa', name: 'updateMfaRecoveryCodes', description: '/docs/references/account/update-mfa-recovery-codes.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -4200,11 +4240,12 @@ App::patch('/v1/account/mfa/recovery-codes') }); App::get('/v1/account/mfa/recovery-codes') - ->desc('Get MFA recovery codes') + ->desc('List MFA recovery codes') ->groups(['api', 'account', 'mfaProtected']) ->label('scope', 'account') ->label('sdk', new Method( namespace: 'account', + group: 'mfa', name: 'getMfaRecoveryCodes', description: '/docs/references/account/get-mfa-recovery-codes.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -4243,6 +4284,7 @@ App::delete('/v1/account/mfa/authenticators/:type') ->label('audits.userId', '{response.$id}') ->label('sdk', new Method( namespace: 'account', + group: 'mfa', name: 'deleteMfaAuthenticator', description: '/docs/references/account/delete-mfa-authenticator.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -4288,6 +4330,7 @@ App::post('/v1/account/mfa/challenge') ->label('audits.userId', '{response.userId}') ->label('sdk', new Method( namespace: 'account', + group: 'mfa', name: 'createMfaChallenge', description: '/docs/references/account/create-mfa-challenge.md', auth: [], @@ -4498,7 +4541,7 @@ App::post('/v1/account/mfa/challenge') }); App::put('/v1/account/mfa/challenge') - ->desc('Create MFA challenge (confirmation)') + ->desc('Update MFA challenge (confirmation)') ->groups(['api', 'account', 'mfa']) ->label('scope', 'account') ->label('event', 'users.[userId].sessions.[sessionId].create') @@ -4507,6 +4550,7 @@ App::put('/v1/account/mfa/challenge') ->label('audits.userId', '{response.userId}') ->label('sdk', new Method( namespace: 'account', + group: 'mfa', name: 'updateMfaChallenge', description: '/docs/references/account/update-mfa-challenge.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -4600,6 +4644,7 @@ App::post('/v1/account/targets/push') ->label('event', 'users.[userId].targets.[targetId].create') ->label('sdk', new Method( namespace: 'account', + group: 'pushTargets', name: 'createPushTarget', description: '/docs/references/account/create-push-target.md', auth: [AuthType::SESSION], @@ -4680,6 +4725,7 @@ App::put('/v1/account/targets/:targetId/push') ->label('event', 'users.[userId].targets.[targetId].update') ->label('sdk', new Method( namespace: 'account', + group: 'pushTargets', name: 'updatePushTarget', description: '/docs/references/account/update-push-target.md', auth: [AuthType::SESSION], @@ -4744,6 +4790,7 @@ App::delete('/v1/account/targets/:targetId/push') ->label('event', 'users.[userId].targets.[targetId].delete') ->label('sdk', new Method( namespace: 'account', + group: 'pushTargets', name: 'deletePushTarget', description: '/docs/references/account/delete-push-target.md', auth: [AuthType::SESSION], @@ -4794,6 +4841,7 @@ App::get('/v1/account/identities') ->label('scope', 'account') ->label('sdk', new Method( namespace: 'account', + group: 'identities', name: 'listIdentities', description: '/docs/references/account/list-identities.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -4845,8 +4893,11 @@ App::get('/v1/account/identities') } $filterQueries = Query::groupByType($queries)['filters']; - - $results = $dbForProject->find('identities', $queries); + try { + $results = $dbForProject->find('identities', $queries); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } $total = $dbForProject->count('identities', $filterQueries, APP_LIMIT_COUNT); $response->dynamic(new Document([ @@ -4865,6 +4916,7 @@ App::delete('/v1/account/identities/:identityId') ->label('audits.userId', '{user.$id}') ->label('sdk', new Method( namespace: 'account', + group: 'identities', name: 'deleteIdentity', description: '/docs/references/account/delete-identity.md', auth: [AuthType::SESSION, AuthType::JWT], diff --git a/app/controllers/api/avatars.php b/app/controllers/api/avatars.php index 94a3fb374d..24fa36725f 100644 --- a/app/controllers/api/avatars.php +++ b/app/controllers/api/avatars.php @@ -171,6 +171,7 @@ App::get('/v1/avatars/credit-cards/:code') ->label('cache.resource', 'avatar/credit-card') ->label('sdk', new Method( namespace: 'avatars', + group: null, name: 'getCreditCard', description: '/docs/references/avatars/get-credit-card.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -198,6 +199,7 @@ App::get('/v1/avatars/browsers/:code') ->label('cache.resource', 'avatar/browser') ->label('sdk', new Method( namespace: 'avatars', + group: null, name: 'getBrowser', description: '/docs/references/avatars/get-browser.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -225,6 +227,7 @@ App::get('/v1/avatars/flags/:code') ->label('cache.resource', 'avatar/flag') ->label('sdk', new Method( namespace: 'avatars', + group: null, name: 'getFlag', description: '/docs/references/avatars/get-flag.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -252,6 +255,7 @@ App::get('/v1/avatars/image') ->label('cache.resource', 'avatar/image') ->label('sdk', new Method( namespace: 'avatars', + group: null, name: 'getImage', description: '/docs/references/avatars/get-image.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -322,6 +326,7 @@ App::get('/v1/avatars/favicon') ->label('cache.resource', 'avatar/favicon') ->label('sdk', new Method( namespace: 'avatars', + group: null, name: 'getFavicon', description: '/docs/references/avatars/get-favicon.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -472,6 +477,7 @@ App::get('/v1/avatars/qr') ->label('scope', 'avatars.read') ->label('sdk', new Method( namespace: 'avatars', + group: null, name: 'getQR', description: '/docs/references/avatars/get-qr.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -520,6 +526,7 @@ App::get('/v1/avatars/initials') ->label('cache.resource', 'avatar/initials') ->label('sdk', new Method( namespace: 'avatars', + group: null, name: 'getInitials', description: '/docs/references/avatars/get-initials.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], diff --git a/app/controllers/api/console.php b/app/controllers/api/console.php index 9a41f67724..3a48d3978f 100644 --- a/app/controllers/api/console.php +++ b/app/controllers/api/console.php @@ -27,6 +27,7 @@ App::get('/v1/console/variables') ->label('scope', 'projects.read') ->label('sdk', new Method( namespace: 'console', + group: 'console', name: 'variables', description: '/docs/references/console/variables.md', auth: [AuthType::ADMIN], @@ -67,11 +68,12 @@ App::get('/v1/console/variables') }); App::post('/v1/console/assistant') - ->desc('Ask query') + ->desc('Create assistant query') ->groups(['api', 'assistant']) ->label('scope', 'assistant.read') ->label('sdk', new Method( namespace: 'assistant', + group: 'console', name: 'chat', description: '/docs/references/assistant/chat.md', auth: [AuthType::ADMIN], diff --git a/app/controllers/api/databases.php b/app/controllers/api/databases.php index 0c37e1a765..c5d0e9e754 100644 --- a/app/controllers/api/databases.php +++ b/app/controllers/api/databases.php @@ -31,6 +31,7 @@ use Utopia\Database\Exception\Duplicate as DuplicateException; use Utopia\Database\Exception\Index as IndexException; use Utopia\Database\Exception\Limit as LimitException; use Utopia\Database\Exception\NotFound as NotFoundException; +use Utopia\Database\Exception\Order as OrderException; use Utopia\Database\Exception\Query as QueryException; use Utopia\Database\Exception\Restricted as RestrictedException; use Utopia\Database\Exception\Structure as StructureException; @@ -466,6 +467,7 @@ App::post('/v1/databases') ->label('audits.resource', 'database/{response.$id}') ->label('sdk', new Method( namespace: 'databases', + group: 'databases', name: 'create', description: '/docs/references/databases/create.md', auth: [AuthType::KEY], @@ -534,7 +536,6 @@ App::post('/v1/databases') } $queueForEvents->setParam('databaseId', $database->getId()); - $queueForStatsUsage->addMetric(str_replace(['{databaseInternalId}'], [$database->getInternalId()], METRIC_DATABASE_ID_STORAGE), 1); // per database $response ->setStatusCode(Response::STATUS_CODE_CREATED) @@ -548,6 +549,7 @@ App::get('/v1/databases') ->label('resourceType', RESOURCE_TYPE_DATABASES) ->label('sdk', new Method( namespace: 'databases', + group: 'databases', name: 'list', description: '/docs/references/databases/list.md', auth: [AuthType::KEY], @@ -597,9 +599,15 @@ App::get('/v1/databases') $filterQueries = Query::groupByType($queries)['filters']; + try { + $databases = $dbForProject->find('databases', $queries); + $total = $dbForProject->count('databases', $filterQueries, APP_LIMIT_COUNT); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } $response->dynamic(new Document([ - 'databases' => $dbForProject->find('databases', $queries), - 'total' => $dbForProject->count('databases', $filterQueries, APP_LIMIT_COUNT), + 'databases' => $databases, + 'total' => $total, ]), Response::MODEL_DATABASE_LIST); }); @@ -610,6 +618,7 @@ App::get('/v1/databases/:databaseId') ->label('resourceType', RESOURCE_TYPE_DATABASES) ->label('sdk', new Method( namespace: 'databases', + group: 'databases', name: 'get', description: '/docs/references/databases/get.md', auth: [AuthType::KEY], @@ -642,6 +651,7 @@ App::get('/v1/databases/:databaseId/logs') ->label('resourceType', RESOURCE_TYPE_DATABASES) ->label('sdk', new Method( namespace: 'databases', + group: 'logs', name: 'listLogs', description: '/docs/references/databases/get-logs.md', auth: [AuthType::ADMIN], @@ -745,6 +755,7 @@ App::put('/v1/databases/:databaseId') ->label('audits.resource', 'database/{response.$id}') ->label('sdk', new Method( namespace: 'databases', + group: 'databases', name: 'update', description: '/docs/references/databases/update.md', auth: [AuthType::KEY], @@ -790,6 +801,7 @@ App::delete('/v1/databases/:databaseId') ->label('audits.resource', 'database/{request.databaseId}') ->label('sdk', new Method( namespace: 'databases', + group: 'databases', name: 'delete', description: '/docs/references/databases/delete.md', auth: [AuthType::KEY], @@ -830,9 +842,6 @@ App::delete('/v1/databases/:databaseId') ->setParam('databaseId', $database->getId()) ->setPayload($response->output($database, Response::MODEL_DATABASE)); - $queueForStatsUsage - ->addMetric(METRIC_DATABASES_STORAGE, 1); // Global, deletion forces full recalculation - $response->noContent(); }); @@ -846,6 +855,7 @@ App::post('/v1/databases/:databaseId/collections') ->label('audits.resource', 'database/{request.databaseId}/collection/{response.$id}') ->label('sdk', new Method( namespace: 'databases', + group: 'collections', name: 'createCollection', description: '/docs/references/databases/create-collection.md', auth: [AuthType::KEY], @@ -917,6 +927,7 @@ App::get('/v1/databases/:databaseId/collections') ->label('resourceType', RESOURCE_TYPE_DATABASES) ->label('sdk', new Method( namespace: 'databases', + group: 'collections', name: 'listCollections', description: '/docs/references/databases/list-collections.md', auth: [AuthType::KEY], @@ -975,9 +986,15 @@ App::get('/v1/databases/:databaseId/collections') $filterQueries = Query::groupByType($queries)['filters']; + try { + $collections = $dbForProject->find('database_' . $database->getInternalId(), $queries); + $total = $dbForProject->count('database_' . $database->getInternalId(), $filterQueries, APP_LIMIT_COUNT); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } $response->dynamic(new Document([ - 'collections' => $dbForProject->find('database_' . $database->getInternalId(), $queries), - 'total' => $dbForProject->count('database_' . $database->getInternalId(), $filterQueries, APP_LIMIT_COUNT), + 'collections' => $collections, + 'total' => $total, ]), Response::MODEL_COLLECTION_LIST); }); @@ -989,6 +1006,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId') ->label('resourceType', RESOURCE_TYPE_DATABASES) ->label('sdk', new Method( namespace: 'databases', + group: 'collections', name: 'getCollection', description: '/docs/references/databases/get-collection.md', auth: [AuthType::KEY], @@ -1030,6 +1048,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/logs') ->label('resourceType', RESOURCE_TYPE_DATABASES) ->label('sdk', new Method( namespace: 'databases', + group: 'collections', name: 'listCollectionLogs', description: '/docs/references/databases/get-collection-logs.md', auth: [AuthType::ADMIN], @@ -1142,6 +1161,7 @@ App::put('/v1/databases/:databaseId/collections/:collectionId') ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'collections', name: 'updateCollection', description: '/docs/references/databases/update-collection.md', auth: [AuthType::KEY], @@ -1216,6 +1236,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId') ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'collections', name: 'deleteCollection', description: '/docs/references/databases/delete-collection.md', auth: [AuthType::KEY], @@ -1279,6 +1300,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/string ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'createStringAttribute', description: '/docs/references/databases/create-string-attribute.md', auth: [AuthType::KEY], @@ -1341,6 +1363,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/email' ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'createEmailAttribute', description: '/docs/references/databases/create-email-attribute.md', auth: [AuthType::KEY], @@ -1389,6 +1412,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/enum') ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'createEnumAttribute', description: '/docs/references/databases/create-attribute-enum.md', auth: [AuthType::KEY], @@ -1442,6 +1466,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/ip') ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'createIpAttribute', description: '/docs/references/databases/create-ip-attribute.md', auth: [AuthType::KEY], @@ -1490,6 +1515,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/url') ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'createUrlAttribute', description: '/docs/references/databases/create-url-attribute.md', auth: [AuthType::KEY], @@ -1538,6 +1564,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/intege ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'createIntegerAttribute', description: '/docs/references/databases/create-integer-attribute.md', auth: [AuthType::KEY], @@ -1615,6 +1642,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/float' ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'createFloatAttribute', description: '/docs/references/databases/create-float-attribute.md', auth: [AuthType::KEY], @@ -1690,6 +1718,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/boolea ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'createBooleanAttribute', description: '/docs/references/databases/create-boolean-attribute.md', auth: [AuthType::KEY], @@ -1737,6 +1766,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/dateti ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'createDatetimeAttribute', description: '/docs/references/databases/create-datetime-attribute.md', auth: [AuthType::KEY], @@ -1787,6 +1817,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/attributes/relati ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'createRelationshipAttribute', description: '/docs/references/databases/create-relationship-attribute.md', auth: [AuthType::KEY], @@ -1918,6 +1949,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/attributes') ->label('resourceType', RESOURCE_TYPE_DATABASES) ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'listAttributes', description: '/docs/references/databases/list-attributes.md', auth: [AuthType::KEY], @@ -1986,9 +2018,12 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/attributes') } $filters = Query::groupByType($queries)['filters']; - - $attributes = $dbForProject->find('attributes', $queries); - $total = $dbForProject->count('attributes', $filters, APP_LIMIT_COUNT); + try { + $attributes = $dbForProject->find('attributes', $queries); + $total = $dbForProject->count('attributes', $filters, APP_LIMIT_COUNT); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } $response->dynamic(new Document([ 'attributes' => $attributes, @@ -2004,6 +2039,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/attributes/:key') ->label('resourceType', RESOURCE_TYPE_DATABASES) ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'getAttribute', description: '/docs/references/databases/get-attribute.md', auth: [AuthType::KEY], @@ -2088,6 +2124,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/strin ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'updateStringAttribute', description: '/docs/references/databases/update-string-attribute.md', auth: [AuthType::KEY], @@ -2139,6 +2176,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/email ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'updateEmailAttribute', description: '/docs/references/databases/update-email-attribute.md', auth: [AuthType::KEY], @@ -2188,6 +2226,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/enum/ ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'updateEnumAttribute', description: '/docs/references/databases/update-enum-attribute.md', auth: [AuthType::KEY], @@ -2239,6 +2278,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/ip/:k ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'updateIpAttribute', description: '/docs/references/databases/update-ip-attribute.md', auth: [AuthType::KEY], @@ -2288,6 +2328,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/url/: ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'updateUrlAttribute', description: '/docs/references/databases/update-url-attribute.md', auth: [AuthType::KEY], @@ -2337,6 +2378,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/integ ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'updateIntegerAttribute', description: '/docs/references/databases/update-integer-attribute.md', auth: [AuthType::KEY], @@ -2396,6 +2438,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/float ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'updateFloatAttribute', description: '/docs/references/databases/update-float-attribute.md', auth: [AuthType::KEY], @@ -2455,6 +2498,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/boole ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'updateBooleanAttribute', description: '/docs/references/databases/update-boolean-attribute.md', auth: [AuthType::KEY], @@ -2503,6 +2547,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/datet ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'updateDatetimeAttribute', description: '/docs/references/databases/update-datetime-attribute.md', auth: [AuthType::KEY], @@ -2551,6 +2596,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/attributes/:key/ ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'updateRelationshipAttribute', description: '/docs/references/databases/update-relationship-attribute.md', auth: [AuthType::KEY], @@ -2616,6 +2662,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/attributes/:key ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'attributes', name: 'deleteAttribute', description: '/docs/references/databases/delete-attribute.md', auth: [AuthType::KEY], @@ -2732,9 +2779,6 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/attributes/:key ->setContext('database', $db) ->setPayload($response->output($attribute, $model)); - $queueForStatsUsage - ->addMetric(str_replace(['{databaseInternalId}', '{collectionInternalId}'], [$db->getInternalId(), $collection->getInternalId()], METRIC_DATABASE_ID_COLLECTION_ID_STORAGE), 1); // per collection - $response->noContent(); }); @@ -2749,6 +2793,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/indexes') ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'collections', name: 'createIndex', description: '/docs/references/databases/create-index.md', auth: [AuthType::KEY], @@ -2919,6 +2964,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/indexes') ->label('resourceType', RESOURCE_TYPE_DATABASES) ->label('sdk', new Method( namespace: 'databases', + group: 'indexes', name: 'listIndexes', description: '/docs/references/databases/list-indexes.md', auth: [AuthType::KEY], @@ -2987,9 +3033,16 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/indexes') } $filterQueries = Query::groupByType($queries)['filters']; + try { + $total = $dbForProject->count('indexes', $filterQueries, APP_LIMIT_COUNT); + $indexes = $dbForProject->find('indexes', $queries); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } + $response->dynamic(new Document([ - 'total' => $dbForProject->count('indexes', $filterQueries, APP_LIMIT_COUNT), - 'indexes' => $dbForProject->find('indexes', $queries), + 'total' => $total, + 'indexes' => $indexes, ]), Response::MODEL_INDEX_LIST); }); @@ -3001,6 +3054,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/indexes/:key') ->label('resourceType', RESOURCE_TYPE_DATABASES) ->label('sdk', new Method( namespace: 'databases', + group: 'indexes', name: 'getIndex', description: '/docs/references/databases/get-index.md', auth: [AuthType::KEY], @@ -3050,6 +3104,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/indexes/:key') ->label('audits.resource', 'database/{request.databaseId}/collection/{request.collectionId}') ->label('sdk', new Method( namespace: 'databases', + group: 'indexes', name: 'deleteIndex', description: '/docs/references/databases/delete-index.md', auth: [AuthType::KEY], @@ -3128,6 +3183,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/documents') [ new Method( namespace: 'databases', + group: 'documents', name: 'createDocument', description: '/docs/references/databases/create-document.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -3356,8 +3412,7 @@ App::post('/v1/databases/:databaseId/collections/:collectionId/documents') $queueForStatsUsage ->addMetric(METRIC_DATABASES_OPERATIONS_WRITES, max($operations, 1)) - ->addMetric(str_replace('{databaseInternalId}', $database->getInternalId(), METRIC_DATABASE_ID_OPERATIONS_WRITES), $operations) - ->addMetric(str_replace(['{databaseInternalId}', '{collectionInternalId}'], [$database->getInternalId(), $collection->getInternalId()], METRIC_DATABASE_ID_COLLECTION_ID_STORAGE), 1); // per collection + ->addMetric(str_replace('{databaseInternalId}', $database->getInternalId(), METRIC_DATABASE_ID_OPERATIONS_WRITES), $operations); // per collection $response->addHeader('X-Debug-Operations', $operations); @@ -3390,6 +3445,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents') ->label('resourceType', RESOURCE_TYPE_DATABASES) ->label('sdk', new Method( namespace: 'databases', + group: 'documents', name: 'listDocuments', description: '/docs/references/databases/list-documents.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -3453,9 +3509,12 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents') $cursor->setValue($cursorDocument); } - - $documents = $dbForProject->find('database_' . $database->getInternalId() . '_collection_' . $collection->getInternalId(), $queries); - $total = $dbForProject->count('database_' . $database->getInternalId() . '_collection_' . $collection->getInternalId(), $queries, APP_LIMIT_COUNT); + try { + $documents = $dbForProject->find('database_' . $database->getInternalId() . '_collection_' . $collection->getInternalId(), $queries); + $total = $dbForProject->count('database_' . $database->getInternalId() . '_collection_' . $collection->getInternalId(), $queries, APP_LIMIT_COUNT); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } $operations = 0; @@ -3566,6 +3625,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents/:documen ->label('resourceType', RESOURCE_TYPE_DATABASES) ->label('sdk', new Method( namespace: 'databases', + group: 'documents', name: 'getDocument', description: '/docs/references/databases/get-document.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -3677,6 +3737,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents/:documen ->label('resourceType', RESOURCE_TYPE_DATABASES) ->label('sdk', new Method( namespace: 'databases', + group: 'logs', name: 'listDocumentLogs', description: '/docs/references/databases/get-document-logs.md', auth: [AuthType::ADMIN], @@ -3797,6 +3858,7 @@ App::patch('/v1/databases/:databaseId/collections/:collectionId/documents/:docum ->label('abuse-time', APP_LIMIT_WRITE_RATE_PERIOD_DEFAULT) ->label('sdk', new Method( namespace: 'databases', + group: 'documents', name: 'updateDocument', description: '/docs/references/databases/update-document.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -4051,6 +4113,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/documents/:docu ->label('abuse-time', APP_LIMIT_WRITE_RATE_PERIOD_DEFAULT) ->label('sdk', new Method( namespace: 'databases', + group: 'documents', name: 'deleteDocument', description: '/docs/references/databases/delete-document.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -4141,8 +4204,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/documents/:docu $queueForStatsUsage ->addMetric(METRIC_DATABASES_OPERATIONS_WRITES, 1) - ->addMetric(str_replace('{databaseInternalId}', $database->getInternalId(), METRIC_DATABASE_ID_OPERATIONS_WRITES), 1) - ->addMetric(str_replace(['{databaseInternalId}', '{collectionInternalId}'], [$database->getInternalId(), $collection->getInternalId()], METRIC_DATABASE_ID_COLLECTION_ID_STORAGE), 1); // per collection + ->addMetric(str_replace('{databaseInternalId}', $database->getInternalId(), METRIC_DATABASE_ID_OPERATIONS_WRITES), 1); // per collection $response->addHeader('X-Debug-Operations', 1); @@ -4172,6 +4234,7 @@ App::get('/v1/databases/usage') ->label('resourceType', RESOURCE_TYPE_DATABASES) ->label('sdk', new Method( namespace: 'databases', + group: null, name: 'getUsage', description: '/docs/references/databases/get-usage.md', auth: [AuthType::ADMIN], @@ -4267,6 +4330,7 @@ App::get('/v1/databases/:databaseId/usage') ->label('resourceType', RESOURCE_TYPE_DATABASES) ->label('sdk', new Method( namespace: 'databases', + group: null, name: 'getDatabaseUsage', description: '/docs/references/databases/get-database-usage.md', auth: [AuthType::ADMIN], @@ -4368,6 +4432,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/usage') ->label('resourceType', RESOURCE_TYPE_DATABASES) ->label('sdk', new Method( namespace: 'databases', + group: null, name: 'getCollectionUsage', description: '/docs/references/databases/get-collection-usage.md', auth: [AuthType::ADMIN], diff --git a/app/controllers/api/functions.php b/app/controllers/api/functions.php index 37932e4165..7d9dea83cc 100644 --- a/app/controllers/api/functions.php +++ b/app/controllers/api/functions.php @@ -37,6 +37,7 @@ use Utopia\Database\Database; use Utopia\Database\DateTime; use Utopia\Database\Document; use Utopia\Database\Exception\Duplicate as DuplicateException; +use Utopia\Database\Exception\Order as OrderException; use Utopia\Database\Exception\Query as QueryException; use Utopia\Database\Helpers\ID; use Utopia\Database\Helpers\Permission; @@ -150,6 +151,7 @@ App::post('/v1/functions') ->label('audits.resource', 'function/{response.$id}') ->label('sdk', new Method( namespace: 'functions', + group: 'functions', name: 'create', description: '/docs/references/functions/create-function.md', auth: [AuthType::KEY], @@ -431,6 +433,7 @@ App::get('/v1/functions') ->label('resourceType', RESOURCE_TYPE_FUNCTIONS) ->label('sdk', new Method( namespace: 'functions', + group: 'functions', name: 'list', description: '/docs/references/functions/list-functions.md', auth: [AuthType::KEY], @@ -483,10 +486,15 @@ App::get('/v1/functions') } $filterQueries = Query::groupByType($queries)['filters']; - + try { + $functions = $dbForProject->find('functions', $queries); + $total = $dbForProject->count('functions', $filterQueries, APP_LIMIT_COUNT); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } $response->dynamic(new Document([ - 'functions' => $dbForProject->find('functions', $queries), - 'total' => $dbForProject->count('functions', $filterQueries, APP_LIMIT_COUNT), + 'functions' => $functions, + 'total' => $total, ]), Response::MODEL_FUNCTION_LIST); }); @@ -497,6 +505,7 @@ App::get('/v1/functions/runtimes') ->label('resourceType', RESOURCE_TYPE_FUNCTIONS) ->label('sdk', new Method( namespace: 'functions', + group: 'runtimes', name: 'listRuntimes', description: '/docs/references/functions/list-runtimes.md', auth: [AuthType::KEY], @@ -536,6 +545,7 @@ App::get('/v1/functions/specifications') ->label('resourceType', RESOURCE_TYPE_FUNCTIONS) ->label('sdk', new Method( namespace: 'functions', + group: 'runtimes', name: 'listSpecifications', description: '/docs/references/functions/list-specifications.md', auth: [AuthType::KEY, AuthType::ADMIN], @@ -578,6 +588,7 @@ App::get('/v1/functions/:functionId') ->label('resourceType', RESOURCE_TYPE_FUNCTIONS) ->label('sdk', new Method( namespace: 'functions', + group: 'functions', name: 'get', description: '/docs/references/functions/get-function.md', auth: [AuthType::KEY], @@ -608,6 +619,7 @@ App::get('/v1/functions/:functionId/usage') ->label('resourceType', RESOURCE_TYPE_FUNCTIONS) ->label('sdk', new Method( namespace: 'functions', + group: null, name: 'getFunctionUsage', description: '/docs/references/functions/get-function-usage.md', auth: [AuthType::ADMIN], @@ -719,6 +731,7 @@ App::get('/v1/functions/usage') ->label('resourceType', RESOURCE_TYPE_FUNCTIONS) ->label('sdk', new Method( namespace: 'functions', + group: null, name: 'getUsage', description: '/docs/references/functions/get-functions-usage.md', auth: [AuthType::ADMIN], @@ -828,6 +841,7 @@ App::put('/v1/functions/:functionId') ->label('audits.resource', 'function/{response.$id}') ->label('sdk', new Method( namespace: 'functions', + group: 'functions', name: 'update', description: '/docs/references/functions/update-function.md', auth: [AuthType::KEY], @@ -869,7 +883,8 @@ App::put('/v1/functions/:functionId') ->inject('queueForBuilds') ->inject('dbForPlatform') ->inject('gitHub') - ->action(function (string $functionId, string $name, string $runtime, array $execute, array $events, string $schedule, int $timeout, bool $enabled, bool $logging, string $entrypoint, string $commands, array $scopes, string $installationId, ?string $providerRepositoryId, string $providerBranch, bool $providerSilentMode, string $providerRootDirectory, string $specification, Request $request, Response $response, Database $dbForProject, Document $project, Event $queueForEvents, Build $queueForBuilds, Database $dbForPlatform, GitHub $github) use ($redeployVcs) { + ->inject('executor') + ->action(function (string $functionId, string $name, string $runtime, array $execute, array $events, string $schedule, int $timeout, bool $enabled, bool $logging, string $entrypoint, string $commands, array $scopes, string $installationId, ?string $providerRepositoryId, string $providerBranch, bool $providerSilentMode, string $providerRootDirectory, string $specification, Request $request, Response $response, Database $dbForProject, Document $project, Event $queueForEvents, Build $queueForBuilds, Database $dbForPlatform, GitHub $github, Executor $executor) use ($redeployVcs) { // TODO: If only branch changes, re-deploy $function = $dbForProject->getDocument('functions', $functionId); @@ -972,7 +987,6 @@ App::put('/v1/functions/:functionId') // Enforce Cold Start if spec limits change. if ($function->getAttribute('specification') !== $specification && !empty($function->getAttribute('deployment'))) { - $executor = new Executor(App::getEnv('_APP_EXECUTOR_HOST')); try { $executor->deleteRuntime($project->getId(), $function->getAttribute('deployment')); } catch (\Throwable $th) { @@ -1028,11 +1042,12 @@ App::put('/v1/functions/:functionId') App::get('/v1/functions/:functionId/deployments/:deploymentId/download') ->groups(['api', 'functions']) - ->desc('Download deployment') + ->desc('Get deployment download') ->label('scope', 'functions.read') ->label('resourceType', RESOURCE_TYPE_FUNCTIONS) ->label('sdk', new Method( namespace: 'functions', + group: 'deployments', name: 'getDeploymentDownload', description: '/docs/references/functions/get-deployment-download.md', auth: [AuthType::KEY, AuthType::JWT], @@ -1129,6 +1144,7 @@ App::patch('/v1/functions/:functionId/deployments/:deploymentId') ->label('audits.resource', 'function/{request.functionId}') ->label('sdk', new Method( namespace: 'functions', + group: 'deployments', name: 'updateDeployment', description: '/docs/references/functions/update-function-deployment.md', auth: [AuthType::KEY], @@ -1197,6 +1213,7 @@ App::delete('/v1/functions/:functionId') ->label('audits.resource', 'function/{request.functionId}') ->label('sdk', new Method( namespace: 'functions', + group: 'functions', name: 'delete', description: '/docs/references/functions/delete-function.md', auth: [AuthType::KEY], @@ -1252,6 +1269,7 @@ App::post('/v1/functions/:functionId/deployments') ->label('audits.resource', 'function/{request.functionId}') ->label('sdk', new Method( namespace: 'functions', + group: 'deployments', name: 'createDeployment', description: '/docs/references/functions/create-deployment.md', auth: [AuthType::KEY], @@ -1474,6 +1492,7 @@ App::get('/v1/functions/:functionId/deployments') ->label('resourceType', RESOURCE_TYPE_FUNCTIONS) ->label('sdk', new Method( namespace: 'functions', + group: 'deployments', name: 'listDeployments', description: '/docs/references/functions/list-deployments.md', auth: [AuthType::KEY], @@ -1537,9 +1556,12 @@ App::get('/v1/functions/:functionId/deployments') } $filterQueries = Query::groupByType($queries)['filters']; - - $results = $dbForProject->find('deployments', $queries); - $total = $dbForProject->count('deployments', $filterQueries, APP_LIMIT_COUNT); + try { + $results = $dbForProject->find('deployments', $queries); + $total = $dbForProject->count('deployments', $filterQueries, APP_LIMIT_COUNT); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } foreach ($results as $result) { $build = $dbForProject->getDocument('builds', $result->getAttribute('buildId', '')); @@ -1563,6 +1585,7 @@ App::get('/v1/functions/:functionId/deployments/:deploymentId') ->label('resourceType', RESOURCE_TYPE_FUNCTIONS) ->label('sdk', new Method( namespace: 'functions', + group: 'deployments', name: 'getDeployment', description: '/docs/references/functions/get-deployment.md', auth: [AuthType::KEY], @@ -1615,6 +1638,7 @@ App::delete('/v1/functions/:functionId/deployments/:deploymentId') ->label('audits.resource', 'function/{request.functionId}') ->label('sdk', new Method( namespace: 'functions', + group: 'deployments', name: 'deleteDeployment', description: '/docs/references/functions/delete-deployment.md', auth: [AuthType::KEY], @@ -1680,7 +1704,7 @@ App::delete('/v1/functions/:functionId/deployments/:deploymentId') App::post('/v1/functions/:functionId/deployments/:deploymentId/build') ->alias('/v1/functions/:functionId/deployments/:deploymentId/builds/:buildId') ->groups(['api', 'functions']) - ->desc('Rebuild deployment') + ->desc('Create deployment build') ->label('scope', 'functions.write') ->label('resourceType', RESOURCE_TYPE_FUNCTIONS) ->label('event', 'functions.[functionId].deployments.[deploymentId].update') @@ -1688,6 +1712,7 @@ App::post('/v1/functions/:functionId/deployments/:deploymentId/build') ->label('audits.resource', 'function/{request.functionId}') ->label('sdk', new Method( namespace: 'functions', + group: 'deployments', name: 'createBuild', description: '/docs/references/functions/create-build.md', auth: [AuthType::KEY], @@ -1763,6 +1788,7 @@ App::patch('/v1/functions/:functionId/deployments/:deploymentId/build') ->label('audits.resource', 'function/{request.functionId}') ->label('sdk', new Method( namespace: 'functions', + group: 'deployments', name: 'updateDeploymentBuild', description: '/docs/references/functions/update-deployment-build.md', auth: [AuthType::KEY], @@ -1779,7 +1805,8 @@ App::patch('/v1/functions/:functionId/deployments/:deploymentId/build') ->inject('dbForProject') ->inject('project') ->inject('queueForEvents') - ->action(function (string $functionId, string $deploymentId, Response $response, Database $dbForProject, Document $project, Event $queueForEvents) { + ->inject('executor') + ->action(function (string $functionId, string $deploymentId, Response $response, Database $dbForProject, Document $project, Event $queueForEvents, Executor $executor) { $function = $dbForProject->getDocument('functions', $functionId); if ($function->isEmpty()) { @@ -1834,7 +1861,6 @@ App::patch('/v1/functions/:functionId/deployments/:deploymentId/build') $dbForProject->purgeCachedDocument('deployments', $deployment->getId()); try { - $executor = new Executor(App::getEnv('_APP_EXECUTOR_HOST')); $executor->deleteRuntime($project->getId(), $deploymentId . "-build"); } catch (\Throwable $th) { // Don't throw if the deployment doesn't exist @@ -1858,6 +1884,7 @@ App::post('/v1/functions/:functionId/executions') ->label('event', 'functions.[functionId].executions.[executionId].create') ->label('sdk', new Method( namespace: 'functions', + group: 'executions', name: 'createExecution', description: '/docs/references/functions/create-execution.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -1886,8 +1913,9 @@ App::post('/v1/functions/:functionId/executions') ->inject('queueForEvents') ->inject('queueForStatsUsage') ->inject('queueForFunctions') + ->inject('executor') ->inject('geodb') - ->action(function (string $functionId, string $body, mixed $async, string $path, string $method, mixed $headers, ?string $scheduledAt, Response $response, Request $request, Document $project, Database $dbForProject, Database $dbForPlatform, Document $user, Event $queueForEvents, StatsUsage $queueForStatsUsage, Func $queueForFunctions, Reader $geodb) { + ->action(function (string $functionId, string $body, mixed $async, string $path, string $method, mixed $headers, ?string $scheduledAt, Response $response, Request $request, Document $project, Database $dbForProject, Database $dbForPlatform, Document $user, Event $queueForEvents, StatsUsage $queueForStatsUsage, Func $queueForFunctions, Executor $executor, Reader $geodb) { $async = \strval($async) === 'true' || \strval($async) === '1'; if (!$async && !is_null($scheduledAt)) { @@ -2160,7 +2188,6 @@ App::post('/v1/functions/:functionId/executions') ]); /** Execute function */ - $executor = new Executor(System::getEnv('_APP_EXECUTOR_HOST')); try { $version = $function->getAttribute('version', 'v2'); $command = $runtime['startCommand']; @@ -2266,6 +2293,7 @@ App::get('/v1/functions/:functionId/executions') ->label('resourceType', RESOURCE_TYPE_FUNCTIONS) ->label('sdk', new Method( namespace: 'functions', + group: 'executions', name: 'listExecutions', description: '/docs/references/functions/list-executions.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -2331,9 +2359,12 @@ App::get('/v1/functions/:functionId/executions') } $filterQueries = Query::groupByType($queries)['filters']; - - $results = $dbForProject->find('executions', $queries); - $total = $dbForProject->count('executions', $filterQueries, APP_LIMIT_COUNT); + try { + $results = $dbForProject->find('executions', $queries); + $total = $dbForProject->count('executions', $filterQueries, APP_LIMIT_COUNT); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } $roles = Authorization::getRoles(); $isPrivilegedUser = Auth::isPrivilegedUser($roles); @@ -2359,6 +2390,7 @@ App::get('/v1/functions/:functionId/executions/:executionId') ->label('resourceType', RESOURCE_TYPE_FUNCTIONS) ->label('sdk', new Method( namespace: 'functions', + group: 'executions', name: 'getExecution', description: '/docs/references/functions/get-execution.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -2415,6 +2447,7 @@ App::delete('/v1/functions/:functionId/executions/:executionId') ->label('audits.resource', 'function/{request.functionId}') ->label('sdk', new Method( namespace: 'functions', + group: 'executions', name: 'deleteExecution', description: '/docs/references/functions/delete-execution.md', auth: [AuthType::KEY], @@ -2492,6 +2525,7 @@ App::post('/v1/functions/:functionId/variables') ->label('audits.resource', 'function/{request.functionId}') ->label('sdk', new Method( namespace: 'functions', + group: 'variables', name: 'createVariable', description: '/docs/references/functions/create-variable.md', auth: [AuthType::KEY], @@ -2562,6 +2596,7 @@ App::get('/v1/functions/:functionId/variables') 'sdk', new Method( namespace: 'functions', + group: 'variables', name: 'listVariables', description: '/docs/references/functions/list-variables.md', auth: [AuthType::KEY], @@ -2598,6 +2633,7 @@ App::get('/v1/functions/:functionId/variables/:variableId') 'sdk', new Method( namespace: 'functions', + group: 'variables', name: 'getVariable', description: '/docs/references/functions/get-variable.md', auth: [AuthType::KEY], @@ -2646,6 +2682,7 @@ App::put('/v1/functions/:functionId/variables/:variableId') ->label('audits.resource', 'function/{request.functionId}') ->label('sdk', new Method( namespace: 'functions', + group: 'variables', name: 'updateVariable', description: '/docs/references/functions/update-variable.md', auth: [AuthType::KEY], @@ -2713,6 +2750,7 @@ App::delete('/v1/functions/:functionId/variables/:variableId') ->label('audits.resource', 'function/{request.functionId}') ->label('sdk', new Method( namespace: 'functions', + group: 'variables', name: 'deleteVariable', description: '/docs/references/functions/delete-variable.md', auth: [AuthType::KEY], @@ -2767,6 +2805,7 @@ App::get('/v1/functions/templates') ->label('resourceType', RESOURCE_TYPE_FUNCTIONS) ->label('sdk', new Method( namespace: 'functions', + group: 'templates', name: 'listTemplates', description: '/docs/references/functions/list-templates.md', auth: [AuthType::ADMIN], @@ -2810,6 +2849,7 @@ App::get('/v1/functions/templates/:templateId') ->label('resourceType', RESOURCE_TYPE_FUNCTIONS) ->label('sdk', new Method( namespace: 'functions', + group: 'templates', name: 'getTemplate', description: '/docs/references/functions/get-template.md', auth: [AuthType::ADMIN], diff --git a/app/controllers/api/graphql.php b/app/controllers/api/graphql.php index 72951b608e..482b38d698 100644 --- a/app/controllers/api/graphql.php +++ b/app/controllers/api/graphql.php @@ -44,6 +44,7 @@ App::get('/v1/graphql') ->label('scope', 'graphql') ->label('sdk', new Method( namespace: 'graphql', + group: 'graphql', name: 'get', auth: [AuthType::KEY, AuthType::SESSION, AuthType::JWT], hide: true, @@ -90,6 +91,7 @@ App::post('/v1/graphql/mutation') ->label('scope', 'graphql') ->label('sdk', new Method( namespace: 'graphql', + group: 'graphql', name: 'mutation', auth: [AuthType::KEY, AuthType::SESSION, AuthType::JWT], description: '/docs/references/graphql/post.md', @@ -140,6 +142,7 @@ App::post('/v1/graphql') ->label('scope', 'graphql') ->label('sdk', new Method( namespace: 'graphql', + group: 'graphql', name: 'query', auth: [AuthType::KEY, AuthType::SESSION, AuthType::JWT], description: '/docs/references/graphql/post.md', diff --git a/app/controllers/api/health.php b/app/controllers/api/health.php index e5336067c8..3602ab8ff9 100644 --- a/app/controllers/api/health.php +++ b/app/controllers/api/health.php @@ -32,6 +32,7 @@ App::get('/v1/health') ->label('scope', 'health.read') ->label('sdk', new Method( namespace: 'health', + group: 'health', name: 'get', auth: [AuthType::KEY], description: '/docs/references/health/get.md', @@ -71,6 +72,7 @@ App::get('/v1/health/db') ->label('sdk', new Method( auth: [AuthType::KEY], namespace: 'health', + group: 'health', name: 'getDB', description: '/docs/references/health/get-db.md', responses: [ @@ -131,6 +133,7 @@ App::get('/v1/health/cache') ->label('sdk', new Method( auth: [AuthType::KEY], namespace: 'health', + group: 'health', name: 'getCache', description: '/docs/references/health/get-cache.md', responses: [ @@ -195,6 +198,7 @@ App::get('/v1/health/pubsub') ->label('sdk', new Method( auth: [AuthType::KEY], namespace: 'health', + group: 'health', name: 'getPubSub', description: '/docs/references/health/get-pubsub.md', responses: [ @@ -259,6 +263,7 @@ App::get('/v1/health/time') ->label('sdk', new Method( auth: [AuthType::KEY], namespace: 'health', + group: 'health', name: 'getTime', description: '/docs/references/health/get-time.md', responses: [ @@ -322,6 +327,7 @@ App::get('/v1/health/queue/webhooks') ->label('sdk', new Method( auth: [AuthType::KEY], namespace: 'health', + group: 'queue', name: 'getQueueWebhooks', description: '/docs/references/health/get-queue-webhooks.md', responses: [ @@ -354,6 +360,7 @@ App::get('/v1/health/queue/logs') ->label('sdk', new Method( auth: [AuthType::KEY], namespace: 'health', + group: 'queue', name: 'getQueueLogs', description: '/docs/references/health/get-queue-logs.md', responses: [ @@ -386,6 +393,7 @@ App::get('/v1/health/certificate') ->label('sdk', new Method( auth: [AuthType::KEY], namespace: 'health', + group: 'health', name: 'getCertificate', description: '/docs/references/health/get-certificate.md', responses: [ @@ -442,6 +450,7 @@ App::get('/v1/health/queue/certificates') ->label('sdk', new Method( auth: [AuthType::KEY], namespace: 'health', + group: 'queue', name: 'getQueueCertificates', description: '/docs/references/health/get-queue-certificates.md', responses: [ @@ -474,6 +483,7 @@ App::get('/v1/health/queue/builds') ->label('sdk', new Method( auth: [AuthType::KEY], namespace: 'health', + group: 'queue', name: 'getQueueBuilds', description: '/docs/references/health/get-queue-builds.md', responses: [ @@ -506,6 +516,7 @@ App::get('/v1/health/queue/databases') ->label('sdk', new Method( auth: [AuthType::KEY], namespace: 'health', + group: 'queue', name: 'getQueueDatabases', description: '/docs/references/health/get-queue-databases.md', responses: [ @@ -539,6 +550,7 @@ App::get('/v1/health/queue/deletes') ->label('sdk', new Method( auth: [AuthType::KEY], namespace: 'health', + group: 'queue', name: 'getQueueDeletes', description: '/docs/references/health/get-queue-deletes.md', responses: [ @@ -571,6 +583,7 @@ App::get('/v1/health/queue/mails') ->label('sdk', new Method( auth: [AuthType::KEY], namespace: 'health', + group: 'queue', name: 'getQueueMails', description: '/docs/references/health/get-queue-mails.md', responses: [ @@ -603,6 +616,7 @@ App::get('/v1/health/queue/messaging') ->label('sdk', new Method( auth: [AuthType::KEY], namespace: 'health', + group: 'queue', name: 'getQueueMessaging', description: '/docs/references/health/get-queue-messaging.md', responses: [ @@ -635,6 +649,7 @@ App::get('/v1/health/queue/migrations') ->label('sdk', new Method( auth: [AuthType::KEY], namespace: 'health', + group: 'queue', name: 'getQueueMigrations', description: '/docs/references/health/get-queue-migrations.md', responses: [ @@ -667,6 +682,7 @@ App::get('/v1/health/queue/functions') ->label('sdk', new Method( auth: [AuthType::KEY], namespace: 'health', + group: 'queue', name: 'getQueueFunctions', description: '/docs/references/health/get-queue-functions.md', responses: [ @@ -699,6 +715,7 @@ App::get('/v1/health/queue/stats-resources') ->label('sdk', new Method( auth: [AuthType::KEY], namespace: 'health', + group: 'queue', name: 'getQueueStatsResources', description: '/docs/references/health/get-queue-stats-resources.md', responses: [ @@ -731,6 +748,7 @@ App::get('/v1/health/queue/stats-usage') ->label('sdk', new Method( auth: [AuthType::KEY], namespace: 'health', + group: 'queue', name: 'getQueueUsage', description: '/docs/references/health/get-queue-stats-usage.md', responses: [ @@ -756,38 +774,6 @@ App::get('/v1/health/queue/stats-usage') $response->dynamic(new Document([ 'size' => $size ]), Response::MODEL_HEALTH_QUEUE); }); -App::get('/v1/health/queue/stats-usage-dump') - ->desc('Get usage dump queue') - ->groups(['api', 'health']) - ->label('scope', 'health.read') - ->label('sdk', new Method( - auth: [AuthType::KEY], - namespace: 'health', - name: 'getQueueStatsUsageDump', - description: '/docs/references/health/get-queue-stats-usage-dump.md', - responses: [ - new SDKResponse( - code: Response::STATUS_CODE_OK, - model: Response::MODEL_HEALTH_QUEUE, - ) - ], - contentType: ContentType::JSON - )) - ->param('threshold', 5000, new Integer(true), 'Queue size threshold. When hit (equal or higher), endpoint returns server error. Default value is 5000.', true) - ->inject('publisher') - ->inject('response') - ->action(function (int|string $threshold, Publisher $publisher, Response $response) { - $threshold = \intval($threshold); - - $size = $publisher->getQueueSize(new Queue(Event::STATS_USAGE_DUMP_QUEUE_NAME)); - - if ($size >= $threshold) { - throw new Exception(Exception::HEALTH_QUEUE_SIZE_EXCEEDED, "Queue size threshold hit. Current size is {$size} and threshold is {$threshold}."); - } - - $response->dynamic(new Document([ 'size' => $size ]), Response::MODEL_HEALTH_QUEUE); - }); - App::get('/v1/health/storage/local') ->desc('Get local storage') ->groups(['api', 'health']) @@ -795,6 +781,7 @@ App::get('/v1/health/storage/local') ->label('sdk', new Method( auth: [AuthType::KEY], namespace: 'health', + group: 'storage', name: 'getStorageLocal', description: '/docs/references/health/get-storage-local.md', responses: [ @@ -844,6 +831,7 @@ App::get('/v1/health/storage') ->label('sdk', new Method( auth: [AuthType::KEY], namespace: 'health', + group: 'storage', name: 'getStorage', description: '/docs/references/health/get-storage.md', responses: [ @@ -891,6 +879,7 @@ App::get('/v1/health/anti-virus') ->label('sdk', new Method( auth: [AuthType::KEY], namespace: 'health', + group: 'health', name: 'getAntivirus', description: '/docs/references/health/get-storage-anti-virus.md', responses: [ @@ -936,6 +925,7 @@ App::get('/v1/health/queue/failed/:name') ->label('sdk', new Method( auth: [AuthType::KEY], namespace: 'health', + group: 'queue', name: 'getFailedJobs', description: '/docs/references/health/get-failed-queue-jobs.md', responses: [ @@ -954,7 +944,6 @@ App::get('/v1/health/queue/failed/:name') Event::FUNCTIONS_QUEUE_NAME, Event::STATS_RESOURCES_QUEUE_NAME, Event::STATS_USAGE_QUEUE_NAME, - Event::STATS_USAGE_DUMP_QUEUE_NAME, Event::WEBHOOK_QUEUE_NAME, Event::CERTIFICATES_QUEUE_NAME, Event::BUILDS_QUEUE_NAME, @@ -980,9 +969,6 @@ App::get('/v1/health/stats') // Currently only used internally ->desc('Get system stats') ->groups(['api', 'health']) ->label('scope', 'root') - // ->label('sdk.auth', [APP_AUTH_TYPE_KEY]) - // ->label('sdk.namespace', 'health') - // ->label('sdk.method', 'getStats') ->label('docs', false) ->inject('response') ->inject('register') diff --git a/app/controllers/api/locale.php b/app/controllers/api/locale.php index 523ac3976b..2c8a38de07 100644 --- a/app/controllers/api/locale.php +++ b/app/controllers/api/locale.php @@ -17,6 +17,7 @@ App::get('/v1/locale') ->label('scope', 'locale.read') ->label('sdk', new Method( namespace: 'locale', + group: null, name: 'get', description: '/docs/references/locale/get-locale.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -80,6 +81,7 @@ App::get('/v1/locale/codes') ->label('scope', 'locale.read') ->label('sdk', new Method( namespace: 'locale', + group: null, name: 'listCodes', description: '/docs/references/locale/list-locale-codes.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -105,6 +107,7 @@ App::get('/v1/locale/countries') ->label('scope', 'locale.read') ->label('sdk', new Method( namespace: 'locale', + group: null, name: 'listCountries', description: '/docs/references/locale/list-countries.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -141,6 +144,7 @@ App::get('/v1/locale/countries/eu') ->label('scope', 'locale.read') ->label('sdk', new Method( namespace: 'locale', + group: null, name: 'listCountriesEU', description: '/docs/references/locale/list-countries-eu.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -179,6 +183,7 @@ App::get('/v1/locale/countries/phones') ->label('scope', 'locale.read') ->label('sdk', new Method( namespace: 'locale', + group: null, name: 'listCountriesPhones', description: '/docs/references/locale/list-countries-phones.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -216,6 +221,7 @@ App::get('/v1/locale/continents') ->label('scope', 'locale.read') ->label('sdk', new Method( namespace: 'locale', + group: null, name: 'listContinents', description: '/docs/references/locale/list-continents.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -251,6 +257,7 @@ App::get('/v1/locale/currencies') ->label('scope', 'locale.read') ->label('sdk', new Method( namespace: 'locale', + group: null, name: 'listCurrencies', description: '/docs/references/locale/list-currencies.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -277,6 +284,7 @@ App::get('/v1/locale/languages') ->label('scope', 'locale.read') ->label('sdk', new Method( namespace: 'locale', + group: null, name: 'listLanguages', description: '/docs/references/locale/list-languages.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], diff --git a/app/controllers/api/messaging.php b/app/controllers/api/messaging.php index 178266db60..1d11e6c392 100644 --- a/app/controllers/api/messaging.php +++ b/app/controllers/api/messaging.php @@ -30,6 +30,7 @@ use Utopia\Database\Database; use Utopia\Database\DateTime; use Utopia\Database\Document; use Utopia\Database\Exception\Duplicate as DuplicateException; +use Utopia\Database\Exception\Order as OrderException; use Utopia\Database\Exception\Query as QueryException; use Utopia\Database\Helpers\ID; use Utopia\Database\Query; @@ -63,6 +64,7 @@ App::post('/v1/messaging/providers/mailgun') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'createMailgunProvider', description: '/docs/references/messaging/create-mailgun-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -156,6 +158,7 @@ App::post('/v1/messaging/providers/sendgrid') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'createSendgridProvider', description: '/docs/references/messaging/create-sendgrid-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -237,6 +240,7 @@ App::post('/v1/messaging/providers/smtp') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'createSmtpProvider', description: '/docs/references/messaging/create-smtp-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -331,6 +335,7 @@ App::post('/v1/messaging/providers/msg91') ->label('event', 'providers.[providerId].create') ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'createMsg91Provider', description: '/docs/references/messaging/create-msg91-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -413,6 +418,7 @@ App::post('/v1/messaging/providers/telesign') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'createTelesignProvider', description: '/docs/references/messaging/create-telesign-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -496,6 +502,7 @@ App::post('/v1/messaging/providers/textmagic') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'createTextmagicProvider', description: '/docs/references/messaging/create-textmagic-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -579,6 +586,7 @@ App::post('/v1/messaging/providers/twilio') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'createTwilioProvider', description: '/docs/references/messaging/create-twilio-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -662,6 +670,7 @@ App::post('/v1/messaging/providers/vonage') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'createVonageProvider', description: '/docs/references/messaging/create-vonage-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -745,6 +754,7 @@ App::post('/v1/messaging/providers/fcm') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'createFcmProvider', description: '/docs/references/messaging/create-fcm-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -814,6 +824,7 @@ App::post('/v1/messaging/providers/apns') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'createApnsProvider', description: '/docs/references/messaging/create-apns-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -903,6 +914,7 @@ App::get('/v1/messaging/providers') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'listProviders', description: '/docs/references/messaging/list-providers.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -951,10 +963,15 @@ App::get('/v1/messaging/providers') $cursor->setValue($cursorDocument); } - + try { + $providers = $dbForProject->find('providers', $queries); + $total = $dbForProject->count('providers', $queries, APP_LIMIT_COUNT); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } $response->dynamic(new Document([ - 'providers' => $dbForProject->find('providers', $queries), - 'total' => $dbForProject->count('providers', $queries, APP_LIMIT_COUNT), + 'providers' => $providers, + 'total' => $total, ]), Response::MODEL_PROVIDER_LIST); }); @@ -965,6 +982,7 @@ App::get('/v1/messaging/providers/:providerId/logs') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'listProviderLogs', description: '/docs/references/messaging/list-provider-logs.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -1061,6 +1079,7 @@ App::get('/v1/messaging/providers/:providerId') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'getProvider', description: '/docs/references/messaging/get-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -1094,6 +1113,7 @@ App::patch('/v1/messaging/providers/mailgun/:providerId') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'updateMailgunProvider', description: '/docs/references/messaging/update-mailgun-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -1206,6 +1226,7 @@ App::patch('/v1/messaging/providers/sendgrid/:providerId') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'updateSendgridProvider', description: '/docs/references/messaging/update-sendgrid-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -1303,6 +1324,7 @@ App::patch('/v1/messaging/providers/smtp/:providerId') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'updateSmtpProvider', description: '/docs/references/messaging/update-smtp-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -1431,6 +1453,7 @@ App::patch('/v1/messaging/providers/msg91/:providerId') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'updateMsg91Provider', description: '/docs/references/messaging/update-msg91-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -1517,6 +1540,7 @@ App::patch('/v1/messaging/providers/telesign/:providerId') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'updateTelesignProvider', description: '/docs/references/messaging/update-telesign-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -1605,6 +1629,7 @@ App::patch('/v1/messaging/providers/textmagic/:providerId') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'updateTextmagicProvider', description: '/docs/references/messaging/update-textmagic-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -1693,6 +1718,7 @@ App::patch('/v1/messaging/providers/twilio/:providerId') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'updateTwilioProvider', description: '/docs/references/messaging/update-twilio-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -1781,6 +1807,7 @@ App::patch('/v1/messaging/providers/vonage/:providerId') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'updateVonageProvider', description: '/docs/references/messaging/update-vonage-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -1869,6 +1896,7 @@ App::patch('/v1/messaging/providers/fcm/:providerId') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'updateFcmProvider', description: '/docs/references/messaging/update-fcm-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -1944,6 +1972,7 @@ App::patch('/v1/messaging/providers/apns/:providerId') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'updateApnsProvider', description: '/docs/references/messaging/update-apns-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -2045,6 +2074,7 @@ App::delete('/v1/messaging/providers/:providerId') ->label('resourceType', RESOURCE_TYPE_PROVIDERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'providers', name: 'deleteProvider', description: '/docs/references/messaging/delete-provider.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -2087,6 +2117,7 @@ App::post('/v1/messaging/topics') ->label('resourceType', RESOURCE_TYPE_TOPICS) ->label('sdk', new Method( namespace: 'messaging', + group: 'topics', name: 'createTopic', description: '/docs/references/messaging/create-topic.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -2133,6 +2164,7 @@ App::get('/v1/messaging/topics') ->label('resourceType', RESOURCE_TYPE_TOPICS) ->label('sdk', new Method( namespace: 'messaging', + group: 'topics', name: 'listTopics', description: '/docs/references/messaging/list-topics.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -2181,10 +2213,15 @@ App::get('/v1/messaging/topics') $cursor->setValue($cursorDocument[0]); } - + try { + $topics = $dbForProject->find('topics', $queries); + $total = $dbForProject->count('topics', $queries, APP_LIMIT_COUNT); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } $response->dynamic(new Document([ - 'topics' => $dbForProject->find('topics', $queries), - 'total' => $dbForProject->count('topics', $queries, APP_LIMIT_COUNT), + 'topics' => $topics, + 'total' => $total, ]), Response::MODEL_TOPIC_LIST); }); @@ -2195,6 +2232,7 @@ App::get('/v1/messaging/topics/:topicId/logs') ->label('resourceType', RESOURCE_TYPE_TOPICS) ->label('sdk', new Method( namespace: 'messaging', + group: 'topics', name: 'listTopicLogs', description: '/docs/references/messaging/list-topic-logs.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -2292,6 +2330,7 @@ App::get('/v1/messaging/topics/:topicId') ->label('resourceType', RESOURCE_TYPE_TOPICS) ->label('sdk', new Method( namespace: 'messaging', + group: 'topics', name: 'getTopic', description: '/docs/references/messaging/get-topic.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -2326,6 +2365,7 @@ App::patch('/v1/messaging/topics/:topicId') ->label('resourceType', RESOURCE_TYPE_TOPICS) ->label('sdk', new Method( namespace: 'messaging', + group: 'topics', name: 'updateTopic', description: '/docs/references/messaging/update-topic.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -2376,6 +2416,7 @@ App::delete('/v1/messaging/topics/:topicId') ->label('resourceType', RESOURCE_TYPE_TOPICS) ->label('sdk', new Method( namespace: 'messaging', + group: 'topics', name: 'deleteTopic', description: '/docs/references/messaging/delete-topic.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -2423,6 +2464,7 @@ App::post('/v1/messaging/topics/:topicId/subscribers') ->label('resourceType', RESOURCE_TYPE_SUBSCRIBERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'subscribers', name: 'createSubscriber', description: '/docs/references/messaging/create-subscriber.md', auth: [AuthType::JWT, AuthType::SESSION, AuthType::ADMIN, AuthType::KEY], @@ -2522,6 +2564,7 @@ App::get('/v1/messaging/topics/:topicId/subscribers') ->label('resourceType', RESOURCE_TYPE_SUBSCRIBERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'subscribers', name: 'listSubscribers', description: '/docs/references/messaging/list-subscribers.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -2579,8 +2622,11 @@ App::get('/v1/messaging/topics/:topicId/subscribers') $cursor->setValue($cursorDocument); } - - $subscribers = $dbForProject->find('subscribers', $queries); + try { + $subscribers = $dbForProject->find('subscribers', $queries); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } $subscribers = batch(\array_map(function (Document $subscriber) use ($dbForProject) { return function () use ($subscriber, $dbForProject) { @@ -2607,6 +2653,7 @@ App::get('/v1/messaging/subscribers/:subscriberId/logs') ->label('resourceType', RESOURCE_TYPE_SUBSCRIBERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'subscribers', name: 'listSubscriberLogs', description: '/docs/references/messaging/list-subscriber-logs.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -2704,6 +2751,7 @@ App::get('/v1/messaging/topics/:topicId/subscribers/:subscriberId') ->label('resourceType', RESOURCE_TYPE_SUBSCRIBERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'subscribers', name: 'getSubscriber', description: '/docs/references/messaging/get-subscriber.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -2752,6 +2800,7 @@ App::delete('/v1/messaging/topics/:topicId/subscribers/:subscriberId') ->label('resourceType', RESOURCE_TYPE_SUBSCRIBERS) ->label('sdk', new Method( namespace: 'messaging', + group: 'subscribers', name: 'deleteSubscriber', description: '/docs/references/messaging/delete-subscriber.md', auth: [AuthType::JWT, AuthType::SESSION, AuthType::ADMIN, AuthType::KEY], @@ -2818,6 +2867,7 @@ App::post('/v1/messaging/messages/email') ->label('resourceType', RESOURCE_TYPE_MESSAGES) ->label('sdk', new Method( namespace: 'messaging', + group: 'messages', name: 'createEmail', description: '/docs/references/messaging/create-email.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -2976,6 +3026,7 @@ App::post('/v1/messaging/messages/sms') ->label('resourceType', RESOURCE_TYPE_MESSAGES) ->label('sdk', new Method( namespace: 'messaging', + group: 'messages', name: 'createSms', description: '/docs/references/messaging/create-sms.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -3098,6 +3149,7 @@ App::post('/v1/messaging/messages/push') ->label('resourceType', RESOURCE_TYPE_MESSAGES) ->label('sdk', new Method( namespace: 'messaging', + group: 'messages', name: 'createPush', description: '/docs/references/messaging/create-push.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -3312,6 +3364,7 @@ App::get('/v1/messaging/messages') ->label('resourceType', RESOURCE_TYPE_MESSAGES) ->label('sdk', new Method( namespace: 'messaging', + group: 'messages', name: 'listMessages', description: '/docs/references/messaging/list-messages.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -3360,10 +3413,15 @@ App::get('/v1/messaging/messages') $cursor->setValue($cursorDocument); } - + try { + $messages = $dbForProject->find('messages', $queries); + $total = $dbForProject->count('messages', $queries, APP_LIMIT_COUNT); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } $response->dynamic(new Document([ - 'messages' => $dbForProject->find('messages', $queries), - 'total' => $dbForProject->count('messages', $queries, APP_LIMIT_COUNT), + 'messages' => $messages, + 'total' => $total, ]), Response::MODEL_MESSAGE_LIST); }); @@ -3374,6 +3432,7 @@ App::get('/v1/messaging/messages/:messageId/logs') ->label('resourceType', RESOURCE_TYPE_MESSAGES) ->label('sdk', new Method( namespace: 'messaging', + group: 'logs', name: 'listMessageLogs', description: '/docs/references/messaging/list-message-logs.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -3471,6 +3530,7 @@ App::get('/v1/messaging/messages/:messageId/targets') ->label('resourceType', RESOURCE_TYPE_MESSAGES) ->label('sdk', new Method( namespace: 'messaging', + group: 'messages', name: 'listTargets', description: '/docs/references/messaging/list-message-targets.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -3533,10 +3593,15 @@ App::get('/v1/messaging/messages/:messageId/targets') $cursor->setValue($cursorDocument); } - + try { + $targets = $dbForProject->find('targets', $queries); + $total = $dbForProject->count('targets', $queries, APP_LIMIT_COUNT); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } $response->dynamic(new Document([ - 'targets' => $dbForProject->find('targets', $queries), - 'total' => $dbForProject->count('targets', $queries, APP_LIMIT_COUNT), + 'targets' => $targets, + 'total' => $total, ]), Response::MODEL_TARGET_LIST); }); @@ -3547,6 +3612,7 @@ App::get('/v1/messaging/messages/:messageId') ->label('resourceType', RESOURCE_TYPE_MESSAGES) ->label('sdk', new Method( namespace: 'messaging', + group: 'messages', name: 'getMessage', description: '/docs/references/messaging/get-message.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -3580,6 +3646,7 @@ App::patch('/v1/messaging/messages/email/:messageId') ->label('resourceType', RESOURCE_TYPE_MESSAGES) ->label('sdk', new Method( namespace: 'messaging', + group: 'messages', name: 'updateEmail', description: '/docs/references/messaging/update-email.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -3786,6 +3853,7 @@ App::patch('/v1/messaging/messages/sms/:messageId') ->label('resourceType', RESOURCE_TYPE_MESSAGES) ->label('sdk', new Method( namespace: 'messaging', + group: 'messages', name: 'updateSms', description: '/docs/references/messaging/update-sms.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -3947,6 +4015,7 @@ App::patch('/v1/messaging/messages/push/:messageId') ->label('resourceType', RESOURCE_TYPE_MESSAGES) ->label('sdk', new Method( namespace: 'messaging', + group: 'messages', name: 'updatePush', description: '/docs/references/messaging/update-push.md', auth: [AuthType::ADMIN, AuthType::KEY], @@ -4206,6 +4275,7 @@ App::delete('/v1/messaging/messages/:messageId') ->label('resourceType', RESOURCE_TYPE_MESSAGES) ->label('sdk', new Method( namespace: 'messaging', + group: 'messages', name: 'delete', description: '/docs/references/messaging/delete-message.md', auth: [AuthType::ADMIN, AuthType::KEY], diff --git a/app/controllers/api/migrations.php b/app/controllers/api/migrations.php index 75afc7ed2c..4d8e64d65a 100644 --- a/app/controllers/api/migrations.php +++ b/app/controllers/api/migrations.php @@ -12,6 +12,7 @@ use Appwrite\Utopia\Response; use Utopia\App; use Utopia\Database\Database; use Utopia\Database\Document; +use Utopia\Database\Exception\Order as OrderException; use Utopia\Database\Exception\Query as QueryException; use Utopia\Database\Helpers\ID; use Utopia\Database\Query; @@ -31,12 +32,13 @@ include_once __DIR__ . '/../shared/api.php'; App::post('/v1/migrations/appwrite') ->groups(['api', 'migrations']) - ->desc('Migrate Appwrite data') + ->desc('Create Appwrite migration') ->label('scope', 'migrations.write') ->label('event', 'migrations.[migrationId].create') ->label('audits.event', 'migration.create') ->label('sdk', new Method( namespace: 'migrations', + group: null, name: 'createAppwriteMigration', description: '/docs/references/migrations/migration-appwrite.md', auth: [AuthType::ADMIN], @@ -92,12 +94,13 @@ App::post('/v1/migrations/appwrite') App::post('/v1/migrations/firebase') ->groups(['api', 'migrations']) - ->desc('Migrate Firebase data') + ->desc('Create Firebase migration') ->label('scope', 'migrations.write') ->label('event', 'migrations.[migrationId].create') ->label('audits.event', 'migration.create') ->label('sdk', new Method( namespace: 'migrations', + group: null, name: 'createFirebaseMigration', description: '/docs/references/migrations/migration-firebase.md', auth: [AuthType::ADMIN], @@ -158,12 +161,13 @@ App::post('/v1/migrations/firebase') App::post('/v1/migrations/supabase') ->groups(['api', 'migrations']) - ->desc('Migrate Supabase data') + ->desc('Create Supabase migration') ->label('scope', 'migrations.write') ->label('event', 'migrations.[migrationId].create') ->label('audits.event', 'migration.create') ->label('sdk', new Method( namespace: 'migrations', + group: null, name: 'createSupabaseMigration', description: '/docs/references/migrations/migration-supabase.md', auth: [AuthType::ADMIN], @@ -224,12 +228,13 @@ App::post('/v1/migrations/supabase') App::post('/v1/migrations/nhost') ->groups(['api', 'migrations']) - ->desc('Migrate NHost data') + ->desc('Create NHost migration') ->label('scope', 'migrations.write') ->label('event', 'migrations.[migrationId].create') ->label('audits.event', 'migration.create') ->label('sdk', new Method( namespace: 'migrations', + group: null, name: 'createNHostMigration', description: '/docs/references/migrations/migration-nhost.md', auth: [AuthType::ADMIN], @@ -296,6 +301,7 @@ App::get('/v1/migrations') ->label('scope', 'migrations.read') ->label('sdk', new Method( namespace: 'migrations', + group: null, name: 'list', description: '/docs/references/migrations/list-migrations.md', auth: [AuthType::ADMIN], @@ -347,10 +353,15 @@ App::get('/v1/migrations') } $filterQueries = Query::groupByType($queries)['filters']; - + try { + $migrations = $dbForProject->find('migrations', $queries); + $total = $dbForProject->count('migrations', $filterQueries, APP_LIMIT_COUNT); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } $response->dynamic(new Document([ - 'migrations' => $dbForProject->find('migrations', $queries), - 'total' => $dbForProject->count('migrations', $filterQueries, APP_LIMIT_COUNT), + 'migrations' => $migrations, + 'total' => $total, ]), Response::MODEL_MIGRATION_LIST); }); @@ -360,6 +371,7 @@ App::get('/v1/migrations/:migrationId') ->label('scope', 'migrations.read') ->label('sdk', new Method( namespace: 'migrations', + group: null, name: 'get', description: '/docs/references/migrations/get-migration.md', auth: [AuthType::ADMIN], @@ -385,10 +397,11 @@ App::get('/v1/migrations/:migrationId') App::get('/v1/migrations/appwrite/report') ->groups(['api', 'migrations']) - ->desc('Generate a report on Appwrite data') + ->desc('Get Appwrite migration report') ->label('scope', 'migrations.write') ->label('sdk', new Method( namespace: 'migrations', + group: null, name: 'getAppwriteReport', description: '/docs/references/migrations/migration-appwrite-report.md', auth: [AuthType::ADMIN], @@ -408,6 +421,7 @@ App::get('/v1/migrations/appwrite/report') ->inject('project') ->inject('user') ->action(function (array $resources, string $endpoint, string $projectID, string $key, Response $response) { + $appwrite = new Appwrite($projectID, $endpoint, $key); try { @@ -432,10 +446,11 @@ App::get('/v1/migrations/appwrite/report') App::get('/v1/migrations/firebase/report') ->groups(['api', 'migrations']) - ->desc('Generate a report on Firebase data') + ->desc('Get Firebase migration report') ->label('scope', 'migrations.write') ->label('sdk', new Method( namespace: 'migrations', + group: null, name: 'getFirebaseReport', description: '/docs/references/migrations/migration-firebase-report.md', auth: [AuthType::ADMIN], @@ -484,10 +499,11 @@ App::get('/v1/migrations/firebase/report') App::get('/v1/migrations/supabase/report') ->groups(['api', 'migrations']) - ->desc('Generate a report on Supabase Data') + ->desc('Get Supabase migration report') ->label('scope', 'migrations.write') ->label('sdk', new Method( namespace: 'migrations', + group: null, name: 'getSupabaseReport', description: '/docs/references/migrations/migration-supabase-report.md', auth: [AuthType::ADMIN], @@ -532,10 +548,11 @@ App::get('/v1/migrations/supabase/report') App::get('/v1/migrations/nhost/report') ->groups(['api', 'migrations']) - ->desc('Generate a report on NHost Data') + ->desc('Get NHost migration report') ->label('scope', 'migrations.write') ->label('sdk', new Method( namespace: 'migrations', + group: null, name: 'getNHostReport', description: '/docs/references/migrations/migration-nhost-report.md', auth: [AuthType::ADMIN], @@ -580,13 +597,14 @@ App::get('/v1/migrations/nhost/report') App::patch('/v1/migrations/:migrationId') ->groups(['api', 'migrations']) - ->desc('Retry migration') + ->desc('Update retry migration') ->label('scope', 'migrations.write') ->label('event', 'migrations.[migrationId].retry') ->label('audits.event', 'migration.retry') ->label('audits.resource', 'migrations/{request.migrationId}') ->label('sdk', new Method( namespace: 'migrations', + group: null, name: 'retry', description: '/docs/references/migrations/retry-migration.md', auth: [AuthType::ADMIN], @@ -637,6 +655,7 @@ App::delete('/v1/migrations/:migrationId') ->label('audits.resource', 'migrations/{request.migrationId}') ->label('sdk', new Method( namespace: 'migrations', + group: null, name: 'delete', description: '/docs/references/migrations/delete-migration.md', auth: [AuthType::ADMIN], diff --git a/app/controllers/api/project.php b/app/controllers/api/project.php index b267e8e51e..ae6c58e4f5 100644 --- a/app/controllers/api/project.php +++ b/app/controllers/api/project.php @@ -26,6 +26,7 @@ App::get('/v1/project/usage') ->label('scope', 'projects.read') ->label('sdk', new Method( namespace: 'project', + group: null, name: 'getUsage', description: '/docs/references/project/get-usage.md', auth: [AuthType::ADMIN], @@ -387,6 +388,7 @@ App::post('/v1/project/variables') ->label('audits.event', 'variable.create') ->label('sdk', new Method( namespace: 'project', + group: null, name: 'createVariable', description: '/docs/references/project/create-variable.md', auth: [AuthType::ADMIN], @@ -446,6 +448,7 @@ App::get('/v1/project/variables') ->label('scope', 'projects.read') ->label('sdk', new Method( namespace: 'project', + group: null, name: 'listVariables', description: '/docs/references/project/list-variables.md', auth: [AuthType::ADMIN], @@ -476,6 +479,7 @@ App::get('/v1/project/variables/:variableId') ->label('scope', 'projects.read') ->label('sdk', new Method( namespace: 'project', + group: null, name: 'getVariable', description: '/docs/references/project/get-variable.md', auth: [AuthType::ADMIN], @@ -505,6 +509,7 @@ App::put('/v1/project/variables/:variableId') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'project', + group: null, name: 'updateVariable', description: '/docs/references/project/update-variable.md', auth: [AuthType::ADMIN], @@ -556,6 +561,7 @@ App::delete('/v1/project/variables/:variableId') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'project', + group: null, name: 'deleteVariable', description: '/docs/references/project/delete-variable.md', auth: [AuthType::ADMIN], diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index 48d20cd17f..839a51a764 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -28,6 +28,7 @@ use Utopia\Database\Database; use Utopia\Database\DateTime; use Utopia\Database\Document; use Utopia\Database\Exception\Duplicate; +use Utopia\Database\Exception\Order as OrderException; use Utopia\Database\Exception\Query as QueryException; use Utopia\Database\Helpers\ID; use Utopia\Database\Helpers\Permission; @@ -68,6 +69,7 @@ App::post('/v1/projects') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'projects', name: 'create', description: '/docs/references/projects/create.md', auth: [AuthType::ADMIN], @@ -138,6 +140,14 @@ App::post('/v1/projects') $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) { @@ -205,17 +215,17 @@ App::post('/v1/projects') $dsn = new DSN('mysql://' . $dsn); } - $adapter = $pools->get($dsn->getHost())->pop()->getResource(); - $dbForProject = new Database($adapter, $cache); $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 = $pools->get($dsn->getHost())->pop()->getResource(); + $dbForProject = new Database($adapter, $cache); + if ($sharedTables) { $dbForProject ->setSharedTables(true) @@ -297,6 +307,7 @@ App::get('/v1/projects') ->label('scope', 'projects.read') ->label('sdk', new Method( namespace: 'projects', + group: 'projects', name: 'list', description: '/docs/references/projects/list.md', auth: [AuthType::ADMIN], @@ -349,10 +360,15 @@ App::get('/v1/projects') } $filterQueries = Query::groupByType($queries)['filters']; - + try { + $projects = $dbForPlatform->find('projects', $queries); + $total = $dbForPlatform->count('projects', $filterQueries, APP_LIMIT_COUNT); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } $response->dynamic(new Document([ - 'projects' => $dbForPlatform->find('projects', $queries), - 'total' => $dbForPlatform->count('projects', $filterQueries, APP_LIMIT_COUNT), + 'projects' => $projects, + 'total' => $total, ]), Response::MODEL_PROJECT_LIST); }); @@ -362,6 +378,7 @@ App::get('/v1/projects/:projectId') ->label('scope', 'projects.read') ->label('sdk', new Method( namespace: 'projects', + group: 'projects', name: 'get', description: '/docs/references/projects/get.md', auth: [AuthType::ADMIN], @@ -394,6 +411,7 @@ App::patch('/v1/projects/:projectId') ->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], @@ -447,6 +465,7 @@ App::patch('/v1/projects/:projectId/team') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'projects', name: 'updateTeam', description: '/docs/references/projects/update-team.md', auth: [AuthType::ADMIN], @@ -521,6 +540,7 @@ App::patch('/v1/projects/:projectId/service') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'projects', name: 'updateServiceStatus', description: '/docs/references/projects/update-service-status.md', auth: [AuthType::ADMIN], @@ -558,6 +578,7 @@ App::patch('/v1/projects/:projectId/service/all') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'projects', name: 'updateServiceStatusAll', description: '/docs/references/projects/update-service-status-all.md', auth: [AuthType::ADMIN], @@ -598,6 +619,7 @@ App::patch('/v1/projects/:projectId/api') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'projects', name: 'updateApiStatus', description: '/docs/references/projects/update-api-status.md', auth: [AuthType::ADMIN], @@ -635,6 +657,7 @@ App::patch('/v1/projects/:projectId/api/all') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'projects', name: 'updateApiStatusAll', description: '/docs/references/projects/update-api-status-all.md', auth: [AuthType::ADMIN], @@ -675,6 +698,7 @@ App::patch('/v1/projects/:projectId/oauth2') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'auth', name: 'updateOAuth2', description: '/docs/references/projects/update-oauth2.md', auth: [AuthType::ADMIN], @@ -725,6 +749,7 @@ App::patch('/v1/projects/:projectId/auth/session-alerts') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'auth', name: 'updateSessionAlerts', description: '/docs/references/projects/update-session-alerts.md', auth: [AuthType::ADMIN], @@ -762,6 +787,7 @@ App::patch('/v1/projects/:projectId/auth/memberships-privacy') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'auth', name: 'updateMembershipsPrivacy', description: '/docs/references/projects/update-memberships-privacy.md', auth: [AuthType::ADMIN], @@ -803,6 +829,7 @@ App::patch('/v1/projects/:projectId/auth/limit') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'auth', name: 'updateAuthLimit', description: '/docs/references/projects/update-auth-limit.md', auth: [AuthType::ADMIN], @@ -840,6 +867,7 @@ App::patch('/v1/projects/:projectId/auth/duration') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'auth', name: 'updateAuthDuration', description: '/docs/references/projects/update-auth-duration.md', auth: [AuthType::ADMIN], @@ -877,6 +905,7 @@ App::patch('/v1/projects/:projectId/auth/:method') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'auth', name: 'updateAuthStatus', description: '/docs/references/projects/update-auth-status.md', auth: [AuthType::ADMIN], @@ -917,6 +946,7 @@ App::patch('/v1/projects/:projectId/auth/password-history') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'auth', name: 'updateAuthPasswordHistory', description: '/docs/references/projects/update-auth-password-history.md', auth: [AuthType::ADMIN], @@ -954,6 +984,7 @@ App::patch('/v1/projects/:projectId/auth/password-dictionary') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'auth', name: 'updateAuthPasswordDictionary', description: '/docs/references/projects/update-auth-password-dictionary.md', auth: [AuthType::ADMIN], @@ -986,11 +1017,12 @@ App::patch('/v1/projects/:projectId/auth/password-dictionary') }); App::patch('/v1/projects/:projectId/auth/personal-data') - ->desc('Enable or disable checking user passwords for similarity with their personal data.') + ->desc('Update personal data check') ->groups(['api', 'projects']) ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'auth', name: 'updatePersonalDataCheck', description: '/docs/references/projects/update-personal-data-check.md', auth: [AuthType::ADMIN], @@ -1028,6 +1060,7 @@ App::patch('/v1/projects/:projectId/auth/max-sessions') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'auth', name: 'updateAuthSessionsLimit', description: '/docs/references/projects/update-auth-sessions-limit.md', auth: [AuthType::ADMIN], @@ -1065,6 +1098,7 @@ App::patch('/v1/projects/:projectId/auth/mock-numbers') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'auth', name: 'updateMockNumbers', description: '/docs/references/projects/update-mock-numbers.md', auth: [AuthType::ADMIN], @@ -1112,6 +1146,7 @@ App::delete('/v1/projects/:projectId') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'projects', name: 'delete', description: '/docs/references/projects/delete.md', auth: [AuthType::ADMIN], @@ -1155,6 +1190,7 @@ App::post('/v1/projects/:projectId/webhooks') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'webhooks', name: 'createWebhook', description: '/docs/references/projects/create-webhook.md', auth: [AuthType::ADMIN], @@ -1219,6 +1255,7 @@ App::get('/v1/projects/:projectId/webhooks') ->label('scope', 'projects.read') ->label('sdk', new Method( namespace: 'projects', + group: 'webhooks', name: 'listWebhooks', description: '/docs/references/projects/list-webhooks.md', auth: [AuthType::ADMIN], @@ -1257,6 +1294,7 @@ App::get('/v1/projects/:projectId/webhooks/:webhookId') ->label('scope', 'projects.read') ->label('sdk', new Method( namespace: 'projects', + group: 'webhooks', name: 'getWebhook', description: '/docs/references/projects/get-webhook.md', auth: [AuthType::ADMIN], @@ -1297,6 +1335,7 @@ App::put('/v1/projects/:projectId/webhooks/:webhookId') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'webhooks', name: 'updateWebhook', description: '/docs/references/projects/update-webhook.md', auth: [AuthType::ADMIN], @@ -1362,6 +1401,7 @@ App::patch('/v1/projects/:projectId/webhooks/:webhookId/signature') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'webhooks', name: 'updateWebhookSignature', description: '/docs/references/projects/update-webhook-signature.md', auth: [AuthType::ADMIN], @@ -1407,6 +1447,7 @@ App::delete('/v1/projects/:projectId/webhooks/:webhookId') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'webhooks', name: 'deleteWebhook', description: '/docs/references/projects/delete-webhook.md', auth: [AuthType::ADMIN], @@ -1454,6 +1495,7 @@ App::post('/v1/projects/:projectId/keys') ->label('scope', 'keys.write') ->label('sdk', new Method( namespace: 'projects', + group: 'keys', name: 'createKey', description: '/docs/references/projects/create-key.md', auth: [AuthType::ADMIN], @@ -1510,6 +1552,7 @@ App::get('/v1/projects/:projectId/keys') ->label('scope', 'keys.read') ->label('sdk', new Method( namespace: 'projects', + group: 'keys', name: 'listKeys', description: '/docs/references/projects/list-keys.md', auth: [AuthType::ADMIN], @@ -1548,6 +1591,7 @@ App::get('/v1/projects/:projectId/keys/:keyId') ->label('scope', 'keys.read') ->label('sdk', new Method( namespace: 'projects', + group: 'keys', name: 'getKey', description: '/docs/references/projects/get-key.md', auth: [AuthType::ADMIN], @@ -1588,6 +1632,7 @@ App::put('/v1/projects/:projectId/keys/:keyId') ->label('scope', 'keys.write') ->label('sdk', new Method( namespace: 'projects', + group: 'keys', name: 'updateKey', description: '/docs/references/projects/update-key.md', auth: [AuthType::ADMIN], @@ -1640,6 +1685,7 @@ App::delete('/v1/projects/:projectId/keys/:keyId') ->label('scope', 'keys.write') ->label('sdk', new Method( namespace: 'projects', + group: 'keys', name: 'deleteKey', description: '/docs/references/projects/delete-key.md', auth: [AuthType::ADMIN], @@ -1687,6 +1733,7 @@ App::post('/v1/projects/:projectId/jwts') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'auth', name: 'createJWT', description: '/docs/references/projects/create-jwt.md', auth: [AuthType::ADMIN], @@ -1730,6 +1777,7 @@ App::post('/v1/projects/:projectId/platforms') ->label('scope', 'platforms.write') ->label('sdk', new Method( namespace: 'projects', + group: 'platforms', name: 'createPlatform', description: '/docs/references/projects/create-platform.md', auth: [AuthType::ADMIN], @@ -1786,6 +1834,7 @@ App::get('/v1/projects/:projectId/platforms') ->label('scope', 'platforms.read') ->label('sdk', new Method( namespace: 'projects', + group: 'platforms', name: 'listPlatforms', description: '/docs/references/projects/list-platforms.md', auth: [AuthType::ADMIN], @@ -1824,6 +1873,7 @@ App::get('/v1/projects/:projectId/platforms/:platformId') ->label('scope', 'platforms.read') ->label('sdk', new Method( namespace: 'projects', + group: 'platforms', name: 'getPlatform', description: '/docs/references/projects/get-platform.md', auth: [AuthType::ADMIN], @@ -1864,6 +1914,7 @@ App::put('/v1/projects/:projectId/platforms/:platformId') ->label('scope', 'platforms.write') ->label('sdk', new Method( namespace: 'projects', + group: 'platforms', name: 'updatePlatform', description: '/docs/references/projects/update-platform.md', auth: [AuthType::ADMIN], @@ -1919,6 +1970,7 @@ App::delete('/v1/projects/:projectId/platforms/:platformId') ->label('scope', 'platforms.write') ->label('sdk', new Method( namespace: 'projects', + group: 'platforms', name: 'deletePlatform', description: '/docs/references/projects/delete-platform.md', auth: [AuthType::ADMIN], @@ -1966,6 +2018,7 @@ App::patch('/v1/projects/:projectId/smtp') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'templates', name: 'updateSmtp', description: '/docs/references/projects/update-smtp.md', auth: [AuthType::ADMIN], @@ -2062,6 +2115,7 @@ App::post('/v1/projects/:projectId/smtp/tests') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'templates', name: 'createSmtpTest', description: '/docs/references/projects/create-smtp-test.md', auth: [AuthType::ADMIN], @@ -2128,6 +2182,7 @@ App::get('/v1/projects/:projectId/templates/sms/:type/:locale') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'templates', name: 'getSmsTemplate', description: '/docs/references/projects/get-sms-template.md', auth: [AuthType::ADMIN], @@ -2175,6 +2230,7 @@ App::get('/v1/projects/:projectId/templates/email/:type/:locale') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'templates', name: 'getEmailTemplate', description: '/docs/references/projects/get-email-template.md', auth: [AuthType::ADMIN], @@ -2233,6 +2289,7 @@ App::patch('/v1/projects/:projectId/templates/sms/:type/:locale') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'templates', name: 'updateSmsTemplate', description: '/docs/references/projects/update-sms-template.md', auth: [AuthType::ADMIN], @@ -2279,6 +2336,7 @@ App::patch('/v1/projects/:projectId/templates/email/:type/:locale') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'templates', name: 'updateEmailTemplate', description: '/docs/references/projects/update-email-template.md', auth: [AuthType::ADMIN], @@ -2335,6 +2393,7 @@ App::delete('/v1/projects/:projectId/templates/sms/:type/:locale') ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'templates', name: 'deleteSmsTemplate', description: '/docs/references/projects/delete-sms-template.md', auth: [AuthType::ADMIN], @@ -2380,11 +2439,12 @@ App::delete('/v1/projects/:projectId/templates/sms/:type/:locale') }); App::delete('/v1/projects/:projectId/templates/email/:type/:locale') - ->desc('Reset custom email template') + ->desc('Delete custom email template') ->groups(['api', 'projects']) ->label('scope', 'projects.write') ->label('sdk', new Method( namespace: 'projects', + group: 'templates', name: 'deleteEmailTemplate', description: '/docs/references/projects/delete-email-template.md', auth: [AuthType::ADMIN], diff --git a/app/controllers/api/proxy.php b/app/controllers/api/proxy.php index 393caad93d..cb3b249d8d 100644 --- a/app/controllers/api/proxy.php +++ b/app/controllers/api/proxy.php @@ -35,6 +35,7 @@ App::post('/v1/proxy/rules') ->label('audits.resource', 'rule/{response.$id}') ->label('sdk', new Method( namespace: 'proxy', + group: null, name: 'createRule', description: '/docs/references/proxy/create-rule.md', auth: [AuthType::ADMIN], @@ -55,14 +56,25 @@ App::post('/v1/proxy/rules') ->inject('dbForPlatform') ->inject('dbForProject') ->action(function (string $domain, string $resourceType, string $resourceId, Response $response, Document $project, Certificate $queueForCertificates, Event $queueForEvents, Database $dbForPlatform, Database $dbForProject) { + $mainDomain = System::getEnv('_APP_DOMAIN', ''); if ($domain === $mainDomain) { throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'You cannot assign your main domain to specific resource. Please use subdomain or a different domain.'); } - $functionsDomain = System::getEnv('_APP_DOMAIN_FUNCTIONS', ''); - if ($functionsDomain != '' && str_ends_with($domain, $functionsDomain)) { - throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'You cannot assign your functions domain or it\'s subdomain to specific resource. Please use different domain.'); + $functionsDomain = System::getEnv('_APP_DOMAIN_FUNCTIONS'); + $denyListDomains = System::getEnv('_APP_CUSTOM_DOMAIN_DENY_LIST'); + + if (!empty($denyListDomains)) { + $functionsDomain .= ',' . $denyListDomains; + } + + $deniedDomains = array_map('trim', explode(',', $functionsDomain)); + + foreach ($deniedDomains as $deniedDomain) { + if (str_ends_with($domain, $deniedDomain)) { + throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'You cannot assign your functions domain or its subdomain to a specific resource. Please use a different domain.'); + } } if ($domain === 'localhost' || $domain === APP_HOSTNAME_INTERNAL) { @@ -173,6 +185,7 @@ App::get('/v1/proxy/rules') ->label('scope', 'rules.read') ->label('sdk', new Method( namespace: 'proxy', + group: null, name: 'listRules', description: '/docs/references/proxy/list-rules.md', auth: [AuthType::ADMIN], @@ -247,6 +260,7 @@ App::get('/v1/proxy/rules/:ruleId') ->label('scope', 'rules.read') ->label('sdk', new Method( namespace: 'proxy', + group: null, name: 'getRule', description: '/docs/references/proxy/get-rule.md', auth: [AuthType::ADMIN], @@ -284,6 +298,7 @@ App::delete('/v1/proxy/rules/:ruleId') ->label('audits.resource', 'rule/{request.ruleId}') ->label('sdk', new Method( namespace: 'proxy', + group: null, name: 'deleteRule', description: '/docs/references/proxy/delete-rule.md', auth: [AuthType::ADMIN], @@ -328,6 +343,7 @@ App::patch('/v1/proxy/rules/:ruleId/verification') ->label('audits.resource', 'rule/{response.$id}') ->label('sdk', new Method( namespace: 'proxy', + group: null, name: 'updateRuleVerification', description: '/docs/references/proxy/update-rule-verification.md', auth: [AuthType::ADMIN], diff --git a/app/controllers/api/storage.php b/app/controllers/api/storage.php index f13c9703c5..26c49e1835 100644 --- a/app/controllers/api/storage.php +++ b/app/controllers/api/storage.php @@ -24,6 +24,7 @@ use Utopia\Database\DateTime; use Utopia\Database\Document; use Utopia\Database\Exception\Duplicate as DuplicateException; use Utopia\Database\Exception\NotFound as NotFoundException; +use Utopia\Database\Exception\Order as OrderException; use Utopia\Database\Exception\Query as QueryException; use Utopia\Database\Helpers\ID; use Utopia\Database\Helpers\Permission; @@ -62,6 +63,7 @@ App::post('/v1/storage/buckets') ->label('audits.resource', 'bucket/{response.$id}') ->label('sdk', new Method( namespace: 'storage', + group: 'buckets', name: 'createBucket', description: '/docs/references/storage/create-bucket.md', auth: [AuthType::KEY], @@ -164,6 +166,7 @@ App::get('/v1/storage/buckets') ->label('resourceType', RESOURCE_TYPE_BUCKETS) ->label('sdk', new Method( namespace: 'storage', + group: 'buckets', name: 'listBuckets', description: '/docs/references/storage/list-buckets.md', auth: [AuthType::KEY], @@ -216,10 +219,15 @@ App::get('/v1/storage/buckets') } $filterQueries = Query::groupByType($queries)['filters']; - + try { + $buckets = $dbForProject->find('buckets', $queries); + $total = $dbForProject->count('buckets', $filterQueries, APP_LIMIT_COUNT); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } $response->dynamic(new Document([ - 'buckets' => $dbForProject->find('buckets', $queries), - 'total' => $dbForProject->count('buckets', $filterQueries, APP_LIMIT_COUNT), + 'buckets' => $buckets, + 'total' => $total, ]), Response::MODEL_BUCKET_LIST); }); @@ -230,6 +238,7 @@ App::get('/v1/storage/buckets/:bucketId') ->label('resourceType', RESOURCE_TYPE_BUCKETS) ->label('sdk', new Method( namespace: 'storage', + group: 'buckets', name: 'getBucket', description: '/docs/references/storage/get-bucket.md', auth: [AuthType::KEY], @@ -264,6 +273,7 @@ App::put('/v1/storage/buckets/:bucketId') ->label('audits.resource', 'bucket/{response.$id}') ->label('sdk', new Method( namespace: 'storage', + group: 'buckets', name: 'updateBucket', description: '/docs/references/storage/update-bucket.md', auth: [AuthType::KEY], @@ -334,6 +344,7 @@ App::delete('/v1/storage/buckets/:bucketId') ->label('audits.resource', 'bucket/{request.bucketId}') ->label('sdk', new Method( namespace: 'storage', + group: 'buckets', name: 'deleteBucket', description: '/docs/references/storage/delete-bucket.md', auth: [AuthType::KEY], @@ -387,6 +398,7 @@ App::post('/v1/storage/buckets/:bucketId/files') ->label('abuse-time', APP_LIMIT_WRITE_RATE_PERIOD_DEFAULT) ->label('sdk', new Method( namespace: 'storage', + group: 'files', name: 'createFile', description: '/docs/references/storage/create-file.md', type: MethodType::UPLOAD, @@ -756,6 +768,7 @@ App::get('/v1/storage/buckets/:bucketId/files') ->label('resourceType', RESOURCE_TYPE_BUCKETS) ->label('sdk', new Method( namespace: 'storage', + group: 'files', name: 'listFiles', description: '/docs/references/storage/list-files.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -837,6 +850,8 @@ App::get('/v1/storage/buckets/:bucketId/files') } } catch (NotFoundException) { throw new Exception(Exception::STORAGE_BUCKET_NOT_FOUND); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); } $response->dynamic(new Document([ @@ -853,6 +868,7 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId') ->label('resourceType', RESOURCE_TYPE_BUCKETS) ->label('sdk', new Method( namespace: 'storage', + group: 'files', name: 'getFile', description: '/docs/references/storage/get-file.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -909,6 +925,7 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/preview') ->label('cache.resource', 'file/{request.fileId}') ->label('sdk', new Method( namespace: 'storage', + group: 'files', name: 'getFilePreview', description: '/docs/references/storage/get-file-preview.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -1091,6 +1108,7 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/download') ->label('resourceType', RESOURCE_TYPE_BUCKETS) ->label('sdk', new Method( namespace: 'storage', + group: 'files', name: 'getFileDownload', description: '/docs/references/storage/get-file-download.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -1239,6 +1257,7 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/view') ->label('resourceType', RESOURCE_TYPE_BUCKETS) ->label('sdk', new Method( namespace: 'storage', + group: 'files', name: 'getFileView', description: '/docs/references/storage/get-file-view.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -1396,9 +1415,6 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/push') ->groups(['api', 'storage']) ->label('scope', 'public') ->label('resourceType', RESOURCE_TYPE_BUCKETS) - ->label('sdk.response.code', Response::STATUS_CODE_OK) - ->label('sdk.response.type', '*/*') - ->label('sdk.methodType', 'location') ->param('bucketId', '', new UID(), 'Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](https://appwrite.io/docs/server/storage#createBucket).') ->param('fileId', '', new UID(), 'File ID.') ->param('jwt', '', new Text(2048, 0), 'JSON Web Token to validate', true) @@ -1559,6 +1575,7 @@ App::put('/v1/storage/buckets/:bucketId/files/:fileId') ->label('abuse-time', APP_LIMIT_WRITE_RATE_PERIOD_DEFAULT) ->label('sdk', new Method( namespace: 'storage', + group: 'files', name: 'updateFile', description: '/docs/references/storage/update-file.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -1673,6 +1690,7 @@ App::delete('/v1/storage/buckets/:bucketId/files/:fileId') ->label('abuse-time', APP_LIMIT_WRITE_RATE_PERIOD_DEFAULT) ->label('sdk', new Method( namespace: 'storage', + group: 'files', name: 'deleteFile', description: '/docs/references/storage/delete-file.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -1772,6 +1790,7 @@ App::get('/v1/storage/usage') ->label('resourceType', RESOURCE_TYPE_BUCKETS) ->label('sdk', new Method( namespace: 'storage', + group: null, name: 'getUsage', description: '/docs/references/storage/get-usage.md', auth: [AuthType::ADMIN], @@ -1858,6 +1877,7 @@ App::get('/v1/storage/:bucketId/usage') ->label('resourceType', RESOURCE_TYPE_BUCKETS) ->label('sdk', new Method( namespace: 'storage', + group: null, name: 'getBucketUsage', description: '/docs/references/storage/get-bucket-usage.md', auth: [AuthType::ADMIN], diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index 3e0e366b6b..2389a7d52e 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -33,6 +33,7 @@ use Utopia\Database\DateTime; use Utopia\Database\Document; use Utopia\Database\Exception\Authorization as AuthorizationException; use Utopia\Database\Exception\Duplicate; +use Utopia\Database\Exception\Order as OrderException; use Utopia\Database\Exception\Query as QueryException; use Utopia\Database\Helpers\ID; use Utopia\Database\Helpers\Permission; @@ -62,6 +63,7 @@ App::post('/v1/teams') ->label('audits.resource', 'team/{response.$id}') ->label('sdk', new Method( namespace: 'teams', + group: 'teams', name: 'create', description: '/docs/references/teams/create-team.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -152,6 +154,7 @@ App::get('/v1/teams') ->label('scope', 'teams.read') ->label('sdk', new Method( namespace: 'teams', + group: 'teams', name: 'list', description: '/docs/references/teams/list-teams.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -204,9 +207,12 @@ App::get('/v1/teams') } $filterQueries = Query::groupByType($queries)['filters']; - - $results = $dbForProject->find('teams', $queries); - $total = $dbForProject->count('teams', $filterQueries, APP_LIMIT_COUNT); + try { + $results = $dbForProject->find('teams', $queries); + $total = $dbForProject->count('teams', $filterQueries, APP_LIMIT_COUNT); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } $response->dynamic(new Document([ 'teams' => $results, @@ -220,6 +226,7 @@ App::get('/v1/teams/:teamId') ->label('scope', 'teams.read') ->label('sdk', new Method( namespace: 'teams', + group: 'teams', name: 'get', description: '/docs/references/teams/get-team.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -250,6 +257,7 @@ App::get('/v1/teams/:teamId/prefs') ->label('scope', 'teams.read') ->label('sdk', new Method( namespace: 'teams', + group: 'teams', name: 'getPrefs', description: '/docs/references/teams/get-team-prefs.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -285,6 +293,7 @@ App::put('/v1/teams/:teamId') ->label('audits.resource', 'team/{response.$id}') ->label('sdk', new Method( namespace: 'teams', + group: 'teams', name: 'updateName', description: '/docs/references/teams/update-team-name.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -332,6 +341,7 @@ App::put('/v1/teams/:teamId/prefs') ->label('audits.userId', '{response.$id}') ->label('sdk', new Method( namespace: 'teams', + group: 'teams', name: 'updatePrefs', description: '/docs/references/teams/update-team-prefs.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -371,6 +381,7 @@ App::delete('/v1/teams/:teamId') ->label('audits.resource', 'team/{request.teamId}') ->label('sdk', new Method( namespace: 'teams', + group: 'teams', name: 'delete', description: '/docs/references/teams/delete-team.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -429,6 +440,7 @@ App::post('/v1/teams/:teamId/memberships') ->label('audits.userId', '{request.userId}') ->label('sdk', new Method( namespace: 'teams', + group: 'memberships', name: 'createMembership', description: '/docs/references/teams/create-team-membership.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -796,6 +808,7 @@ App::get('/v1/teams/:teamId/memberships') ->label('scope', 'teams.read') ->label('sdk', new Method( namespace: 'teams', + group: 'memberships', name: 'listMemberships', description: '/docs/references/teams/list-team-members.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -859,17 +872,20 @@ App::get('/v1/teams/:teamId/memberships') } $filterQueries = Query::groupByType($queries)['filters']; + try { + $memberships = $dbForProject->find( + collection: 'memberships', + queries: $queries, + ); + $total = $dbForProject->count( + collection: 'memberships', + queries: $filterQueries, + max: APP_LIMIT_COUNT + ); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } - $memberships = $dbForProject->find( - collection: 'memberships', - queries: $queries, - ); - - $total = $dbForProject->count( - collection: 'memberships', - queries: $filterQueries, - max: APP_LIMIT_COUNT - ); $memberships = array_filter($memberships, fn (Document $membership) => !empty($membership->getAttribute('userId'))); @@ -934,6 +950,7 @@ App::get('/v1/teams/:teamId/memberships/:membershipId') ->label('scope', 'teams.read') ->label('sdk', new Method( namespace: 'teams', + group: 'memberships', name: 'getMembership', description: '/docs/references/teams/get-team-member.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -1020,6 +1037,7 @@ App::patch('/v1/teams/:teamId/memberships/:membershipId') ->label('audits.resource', 'team/{request.teamId}') ->label('sdk', new Method( namespace: 'teams', + group: 'memberships', name: 'updateMembership', description: '/docs/references/teams/update-team-membership.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -1123,6 +1141,7 @@ App::patch('/v1/teams/:teamId/memberships/:membershipId/status') ->label('audits.userId', '{request.userId}') ->label('sdk', new Method( namespace: 'teams', + group: 'memberships', name: 'updateMembershipStatus', description: '/docs/references/teams/update-team-membership-status.md', auth: [AuthType::SESSION, AuthType::JWT], @@ -1280,6 +1299,7 @@ App::delete('/v1/teams/:teamId/memberships/:membershipId') ->label('audits.resource', 'team/{request.teamId}') ->label('sdk', new Method( namespace: 'teams', + group: 'memberships', name: 'deleteMembership', description: '/docs/references/teams/delete-team-membership.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -1350,6 +1370,7 @@ App::get('/v1/teams/:teamId/logs') ->label('scope', 'teams.read') ->label('sdk', new Method( namespace: 'teams', + group: 'logs', name: 'listLogs', description: '/docs/references/teams/get-team-logs.md', auth: [AuthType::ADMIN], diff --git a/app/controllers/api/users.php b/app/controllers/api/users.php index 4a551b7478..a212b23448 100644 --- a/app/controllers/api/users.php +++ b/app/controllers/api/users.php @@ -33,6 +33,7 @@ use Utopia\Database\Database; use Utopia\Database\DateTime; use Utopia\Database\Document; use Utopia\Database\Exception\Duplicate; +use Utopia\Database\Exception\Order as OrderException; use Utopia\Database\Exception\Query as QueryException; use Utopia\Database\Helpers\ID; use Utopia\Database\Helpers\Permission; @@ -191,6 +192,7 @@ App::post('/v1/users') ->label('audits.resource', 'user/{response.$id}') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'create', description: '/docs/references/users/create-user.md', auth: [AuthType::KEY], @@ -225,6 +227,7 @@ App::post('/v1/users/bcrypt') ->label('audits.resource', 'user/{response.$id}') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'createBcryptUser', description: '/docs/references/users/create-bcrypt-user.md', auth: [AuthType::KEY], @@ -259,6 +262,7 @@ App::post('/v1/users/md5') ->label('audits.resource', 'user/{response.$id}') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'createMD5User', description: '/docs/references/users/create-md5-user.md', auth: [AuthType::KEY], @@ -293,6 +297,7 @@ App::post('/v1/users/argon2') ->label('audits.resource', 'user/{response.$id}') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'createArgon2User', description: '/docs/references/users/create-argon2-user.md', auth: [AuthType::KEY], @@ -327,6 +332,7 @@ App::post('/v1/users/sha') ->label('audits.resource', 'user/{response.$id}') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'createSHAUser', description: '/docs/references/users/create-sha-user.md', auth: [AuthType::KEY], @@ -368,6 +374,7 @@ App::post('/v1/users/phpass') ->label('audits.resource', 'user/{response.$id}') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'createPHPassUser', description: '/docs/references/users/create-phpass-user.md', auth: [AuthType::KEY], @@ -402,6 +409,7 @@ App::post('/v1/users/scrypt') ->label('audits.resource', 'user/{response.$id}') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'createScryptUser', description: '/docs/references/users/create-scrypt-user.md', auth: [AuthType::KEY], @@ -449,6 +457,7 @@ App::post('/v1/users/scrypt-modified') ->label('audits.resource', 'user/{response.$id}') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'createScryptModifiedUser', description: '/docs/references/users/create-scrypt-modified-user.md', auth: [AuthType::KEY], @@ -487,6 +496,7 @@ App::post('/v1/users/:userId/targets') ->label('scope', 'targets.write') ->label('sdk', new Method( namespace: 'users', + group: 'targets', name: 'createTarget', description: '/docs/references/users/create-target.md', auth: [AuthType::KEY, AuthType::ADMIN], @@ -578,6 +588,7 @@ App::get('/v1/users') ->label('scope', 'users.read') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'list', description: '/docs/references/users/list-users.md', auth: [AuthType::KEY], @@ -630,10 +641,15 @@ App::get('/v1/users') } $filterQueries = Query::groupByType($queries)['filters']; - + try { + $users = $dbForProject->find('users', $queries); + $total = $dbForProject->count('users', $filterQueries, APP_LIMIT_COUNT); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } $response->dynamic(new Document([ - 'users' => $dbForProject->find('users', $queries), - 'total' => $dbForProject->count('users', $filterQueries, APP_LIMIT_COUNT), + 'users' => $users, + 'total' => $total, ]), Response::MODEL_USER_LIST); }); @@ -643,6 +659,7 @@ App::get('/v1/users/:userId') ->label('scope', 'users.read') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'get', description: '/docs/references/users/get-user.md', auth: [AuthType::KEY], @@ -673,6 +690,7 @@ App::get('/v1/users/:userId/prefs') ->label('scope', 'users.read') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'getPrefs', description: '/docs/references/users/get-user-prefs.md', auth: [AuthType::KEY], @@ -705,6 +723,7 @@ App::get('/v1/users/:userId/targets/:targetId') ->label('scope', 'targets.read') ->label('sdk', new Method( namespace: 'users', + group: 'targets', name: 'getTarget', description: '/docs/references/users/get-user-target.md', auth: [AuthType::KEY, AuthType::ADMIN], @@ -742,6 +761,7 @@ App::get('/v1/users/:userId/sessions') ->label('scope', 'users.read') ->label('sdk', new Method( namespace: 'users', + group: 'sessions', name: 'listSessions', description: '/docs/references/users/list-user-sessions.md', auth: [AuthType::KEY], @@ -788,6 +808,7 @@ App::get('/v1/users/:userId/memberships') ->label('scope', 'users.read') ->label('sdk', new Method( namespace: 'users', + group: 'memberships', name: 'listMemberships', description: '/docs/references/users/list-user-memberships.md', auth: [AuthType::KEY], @@ -832,6 +853,7 @@ App::get('/v1/users/:userId/logs') ->label('scope', 'users.read') ->label('sdk', new Method( namespace: 'users', + group: 'logs', name: 'listLogs', description: '/docs/references/users/list-user-logs.md', auth: [AuthType::KEY], @@ -928,6 +950,7 @@ App::get('/v1/users/:userId/targets') ->label('scope', 'targets.read') ->label('sdk', new Method( namespace: 'users', + group: 'targets', name: 'listTargets', description: '/docs/references/users/list-user-targets.md', auth: [AuthType::KEY, AuthType::ADMIN], @@ -980,10 +1003,15 @@ App::get('/v1/users/:userId/targets') $cursor->setValue($cursorDocument); } - + try { + $targets = $dbForProject->find('targets', $queries); + $total = $dbForProject->count('targets', $queries, APP_LIMIT_COUNT); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } $response->dynamic(new Document([ - 'targets' => $dbForProject->find('targets', $queries), - 'total' => $dbForProject->count('targets', $queries, APP_LIMIT_COUNT), + 'targets' => $targets, + 'total' => $total, ]), Response::MODEL_TARGET_LIST); }); @@ -993,6 +1021,7 @@ App::get('/v1/users/identities') ->label('scope', 'users.read') ->label('sdk', new Method( namespace: 'users', + group: 'identities', name: 'listIdentities', description: '/docs/references/users/list-identities.md', auth: [AuthType::KEY], @@ -1045,10 +1074,15 @@ App::get('/v1/users/identities') } $filterQueries = Query::groupByType($queries)['filters']; - + try { + $identities = $dbForProject->find('identities', $queries); + $total = $dbForProject->count('identities', $filterQueries, APP_LIMIT_COUNT); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } $response->dynamic(new Document([ - 'identities' => $dbForProject->find('identities', $queries), - 'total' => $dbForProject->count('identities', $filterQueries, APP_LIMIT_COUNT), + 'identities' => $identities, + 'total' => $total, ]), Response::MODEL_IDENTITY_LIST); }); @@ -1062,6 +1096,7 @@ App::patch('/v1/users/:userId/status') ->label('audits.userId', '{response.$id}') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'updateStatus', description: '/docs/references/users/update-user-status.md', auth: [AuthType::KEY], @@ -1102,6 +1137,7 @@ App::put('/v1/users/:userId/labels') ->label('audits.resource', 'user/{response.$id}') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'updateLabels', description: '/docs/references/users/update-user-labels.md', auth: [AuthType::KEY], @@ -1144,6 +1180,7 @@ App::patch('/v1/users/:userId/verification/phone') ->label('audits.resource', 'user/{response.$id}') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'updatePhoneVerification', description: '/docs/references/users/update-user-phone-verification.md', auth: [AuthType::KEY], @@ -1185,6 +1222,7 @@ App::patch('/v1/users/:userId/name') ->label('audits.userId', '{response.$id}') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'updateName', description: '/docs/references/users/update-user-name.md', auth: [AuthType::KEY], @@ -1227,6 +1265,7 @@ App::patch('/v1/users/:userId/password') ->label('audits.userId', '{response.$id}') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'updatePassword', description: '/docs/references/users/update-user-password.md', auth: [AuthType::KEY], @@ -1309,6 +1348,7 @@ App::patch('/v1/users/:userId/email') ->label('audits.userId', '{response.$id}') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'updateEmail', description: '/docs/references/users/update-user-email.md', auth: [AuthType::KEY], @@ -1408,6 +1448,7 @@ App::patch('/v1/users/:userId/phone') ->label('audits.resource', 'user/{response.$id}') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'updatePhone', description: '/docs/references/users/update-user-phone.md', auth: [AuthType::KEY], @@ -1497,6 +1538,7 @@ App::patch('/v1/users/:userId/verification') ->label('audits.userId', '{request.userId}') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'updateEmailVerification', description: '/docs/references/users/update-user-email-verification.md', auth: [AuthType::KEY], @@ -1534,6 +1576,7 @@ App::patch('/v1/users/:userId/prefs') ->label('scope', 'users.write') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'updatePrefs', description: '/docs/references/users/update-user-prefs.md', auth: [AuthType::KEY], @@ -1574,6 +1617,7 @@ App::patch('/v1/users/:userId/targets/:targetId') ->label('scope', 'targets.write') ->label('sdk', new Method( namespace: 'users', + group: 'targets', name: 'updateTarget', description: '/docs/references/users/update-target.md', auth: [AuthType::KEY, AuthType::ADMIN], @@ -1678,6 +1722,7 @@ App::patch('/v1/users/:userId/mfa') ->label('usage.metric', 'users.{scope}.requests.update') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'updateMfa', description: '/docs/references/users/update-user-mfa.md', auth: [AuthType::KEY], @@ -1717,6 +1762,7 @@ App::get('/v1/users/:userId/mfa/factors') ->label('usage.metric', 'users.{scope}.requests.read') ->label('sdk', new Method( namespace: 'users', + group: 'mfa', name: 'listMfaFactors', description: '/docs/references/users/list-mfa-factors.md', auth: [AuthType::KEY], @@ -1755,6 +1801,7 @@ App::get('/v1/users/:userId/mfa/recovery-codes') ->label('usage.metric', 'users.{scope}.requests.read') ->label('sdk', new Method( namespace: 'users', + group: 'mfa', name: 'getMfaRecoveryCodes', description: '/docs/references/users/get-mfa-recovery-codes.md', auth: [AuthType::KEY], @@ -1799,6 +1846,7 @@ App::patch('/v1/users/:userId/mfa/recovery-codes') ->label('usage.metric', 'users.{scope}.requests.update') ->label('sdk', new Method( namespace: 'users', + group: 'mfa', name: 'createMfaRecoveryCodes', description: '/docs/references/users/create-mfa-recovery-codes.md', auth: [AuthType::KEY], @@ -1840,7 +1888,7 @@ App::patch('/v1/users/:userId/mfa/recovery-codes') }); App::put('/v1/users/:userId/mfa/recovery-codes') - ->desc('Regenerate MFA recovery codes') + ->desc('Update MFA recovery codes (regenerate)') ->groups(['api', 'users']) ->label('event', 'users.[userId].update.mfa.recovery-codes') ->label('scope', 'users.write') @@ -1850,6 +1898,7 @@ App::put('/v1/users/:userId/mfa/recovery-codes') ->label('usage.metric', 'users.{scope}.requests.update') ->label('sdk', new Method( namespace: 'users', + group: 'mfa', name: 'updateMfaRecoveryCodes', description: '/docs/references/users/update-mfa-recovery-codes.md', auth: [AuthType::KEY], @@ -1900,6 +1949,7 @@ App::delete('/v1/users/:userId/mfa/authenticators/:type') ->label('usage.metric', 'users.{scope}.requests.update') ->label('sdk', new Method( namespace: 'users', + group: 'mfa', name: 'deleteMfaAuthenticator', description: '/docs/references/users/delete-mfa-authenticator.md', auth: [AuthType::KEY], @@ -1947,6 +1997,7 @@ App::post('/v1/users/:userId/sessions') ->label('usage.metric', 'sessions.{scope}.requests.create') ->label('sdk', new Method( namespace: 'users', + group: 'sessions', name: 'createSession', description: '/docs/references/users/create-session.md', auth: [AuthType::KEY], @@ -2031,6 +2082,7 @@ App::post('/v1/users/:userId/tokens') ->label('audits.resource', 'user/{request.userId}') ->label('sdk', new Method( namespace: 'users', + group: 'sessions', name: 'createToken', description: '/docs/references/users/create-token.md', auth: [AuthType::KEY], @@ -2093,6 +2145,7 @@ App::delete('/v1/users/:userId/sessions/:sessionId') ->label('audits.resource', 'user/{request.userId}') ->label('sdk', new Method( namespace: 'users', + group: 'sessions', name: 'deleteSession', description: '/docs/references/users/delete-user-session.md', auth: [AuthType::KEY], @@ -2143,6 +2196,7 @@ App::delete('/v1/users/:userId/sessions') ->label('audits.resource', 'user/{user.$id}') ->label('sdk', new Method( namespace: 'users', + group: 'sessions', name: 'deleteSessions', description: '/docs/references/users/delete-user-sessions.md', auth: [AuthType::KEY], @@ -2192,6 +2246,7 @@ App::delete('/v1/users/:userId') ->label('audits.resource', 'user/{request.userId}') ->label('sdk', new Method( namespace: 'users', + group: 'users', name: 'delete', description: '/docs/references/users/delete.md', auth: [AuthType::KEY], @@ -2241,6 +2296,7 @@ App::delete('/v1/users/:userId/targets/:targetId') ->label('scope', 'targets.write') ->label('sdk', new Method( namespace: 'users', + group: 'targets', name: 'deleteTarget', description: '/docs/references/users/delete-target.md', auth: [AuthType::KEY, AuthType::ADMIN], @@ -2298,6 +2354,7 @@ App::delete('/v1/users/identities/:identityId') ->label('audits.resource', 'identity/{request.$identityId}') ->label('sdk', new Method( namespace: 'users', + group: 'identities', name: 'deleteIdentity', description: '/docs/references/users/delete-identity.md', auth: [AuthType::KEY], @@ -2337,6 +2394,7 @@ App::post('/v1/users/:userId/jwts') ->label('scope', 'users.write') ->label('sdk', new Method( namespace: 'users', + group: 'sessions', name: 'createJWT', description: '/docs/references/users/create-user-jwt.md', auth: [AuthType::KEY], @@ -2392,6 +2450,7 @@ App::get('/v1/users/usage') ->label('scope', 'users.read') ->label('sdk', new Method( namespace: 'users', + group: null, name: 'getUsage', description: '/docs/references/users/get-usage.md', auth: [AuthType::ADMIN], diff --git a/app/controllers/api/vcs.php b/app/controllers/api/vcs.php index 2c145febcc..d94279beac 100644 --- a/app/controllers/api/vcs.php +++ b/app/controllers/api/vcs.php @@ -19,6 +19,7 @@ use Utopia\Config\Config; use Utopia\Database\Database; use Utopia\Database\DateTime; use Utopia\Database\Document; +use Utopia\Database\Exception\Order as OrderException; use Utopia\Database\Exception\Query as QueryException; use Utopia\Database\Helpers\ID; use Utopia\Database\Helpers\Permission; @@ -269,12 +270,13 @@ $createGitDeployments = function (GitHub $github, string $providerInstallationId }; App::get('/v1/vcs/github/authorize') - ->desc('Install GitHub app') + ->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], @@ -318,7 +320,7 @@ App::get('/v1/vcs/github/authorize') }); App::get('/v1/vcs/github/callback') - ->desc('Capture installation and authorization from GitHub app') + ->desc('Get installation and authorization from GitHub app') ->groups(['api', 'vcs']) ->label('scope', 'public') ->label('error', __DIR__ . '/../../views/general/error.phtml') @@ -456,6 +458,7 @@ App::get('/v1/vcs/github/installations/:installationId/providerRepositories/:pro ->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], @@ -517,11 +520,12 @@ App::get('/v1/vcs/github/installations/:installationId/providerRepositories/:pro }); App::post('/v1/vcs/github/installations/:installationId/providerRepositories/:providerRepositoryId/detection') - ->desc('Detect runtime settings from source code') + ->desc('Create runtime settings 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], @@ -599,6 +603,7 @@ App::get('/v1/vcs/github/installations/:installationId/providerRepositories') ->label('scope', 'vcs.read') ->label('sdk', new Method( namespace: 'vcs', + group: 'repositories', name: 'listRepositories', description: '/docs/references/vcs/list-repositories.md', auth: [AuthType::ADMIN], @@ -699,6 +704,7 @@ App::post('/v1/vcs/github/installations/:installationId/providerRepositories') ->label('scope', 'vcs.write') ->label('sdk', new Method( namespace: 'vcs', + group: 'repositories', name: 'createRepository', description: '/docs/references/vcs/create-repository.md', auth: [AuthType::ADMIN], @@ -811,6 +817,7 @@ App::get('/v1/vcs/github/installations/:installationId/providerRepositories/:pro ->label('scope', 'vcs.read') ->label('sdk', new Method( namespace: 'vcs', + group: 'repositories', name: 'getRepository', description: '/docs/references/vcs/get-repository.md', auth: [AuthType::ADMIN], @@ -865,6 +872,7 @@ App::get('/v1/vcs/github/installations/:installationId/providerRepositories/:pro ->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], @@ -1058,6 +1066,7 @@ App::get('/v1/vcs/installations') ->label('scope', 'vcs.read') ->label('sdk', new Method( namespace: 'vcs', + group: 'installations', name: 'listInstallations', description: '/docs/references/vcs/list-installations.md', auth: [AuthType::ADMIN], @@ -1113,9 +1122,12 @@ App::get('/v1/vcs/installations') } $filterQueries = Query::groupByType($queries)['filters']; - - $results = $dbForPlatform->find('installations', $queries); - $total = $dbForPlatform->count('installations', $filterQueries, APP_LIMIT_COUNT); + try { + $results = $dbForPlatform->find('installations', $queries); + $total = $dbForPlatform->count('installations', $filterQueries, APP_LIMIT_COUNT); + } catch (OrderException $e) { + throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null."); + } $response->dynamic(new Document([ 'installations' => $results, @@ -1129,6 +1141,7 @@ App::get('/v1/vcs/installations/:installationId') ->label('scope', 'vcs.read') ->label('sdk', new Method( namespace: 'vcs', + group: 'installations', name: 'getInstallation', description: '/docs/references/vcs/get-installation.md', auth: [AuthType::ADMIN], @@ -1163,6 +1176,7 @@ App::delete('/v1/vcs/installations/:installationId') ->label('scope', 'vcs.write') ->label('sdk', new Method( namespace: 'vcs', + group: 'installations', name: 'deleteInstallation', description: '/docs/references/vcs/delete-installation.md', auth: [AuthType::ADMIN], @@ -1198,11 +1212,12 @@ App::delete('/v1/vcs/installations/:installationId') }); App::patch('/v1/vcs/github/installations/:installationId/repositories/:repositoryId') - ->desc('Authorize external deployment') + ->desc('Update external deployment (authorize)') ->groups(['api', 'vcs']) ->label('scope', 'vcs.write') ->label('sdk', new Method( namespace: 'vcs', + group: 'repositories', name: 'updateExternalDeployments', description: '/docs/references/vcs/update-external-deployments.md', auth: [AuthType::ADMIN], diff --git a/app/controllers/general.php b/app/controllers/general.php index 1423763cec..4da626fab8 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -50,7 +50,7 @@ Config::setParam('domainVerification', false); Config::setParam('cookieDomain', 'localhost'); Config::setParam('cookieSamesite', Response::COOKIE_SAMESITE_NONE); -function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, SwooleRequest $swooleRequest, Request $request, Response $response, Event $queueForEvents, StatsUsage $queueForStatsUsage, Func $queueForFunctions, Reader $geodb, callable $isResourceBlocked, string $previewHostname) +function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, SwooleRequest $swooleRequest, Request $request, Response $response, Event $queueForEvents, StatsUsage $queueForStatsUsage, Func $queueForFunctions, Executor $executor, Reader $geodb, callable $isResourceBlocked, string $previewHostname) { $utopia->getRoute()?->label('error', __DIR__ . '/../views/general/error.phtml'); @@ -72,11 +72,19 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw } if ($route->isEmpty()) { - if ($host === System::getEnv('_APP_DOMAIN_FUNCTIONS', '')) { + + $appDomainFunctionsFallback = System::getEnv('_APP_DOMAIN_FUNCTIONS_FALLBACK', ''); + $appDomainFunctions = System::getEnv('_APP_DOMAIN_FUNCTIONS', ''); + + if (!empty($appDomainFunctionsFallback) && \str_ends_with($host, $appDomainFunctionsFallback)) { + $appDomainFunctions = $appDomainFunctionsFallback; + } + + if ($host === $appDomainFunctions) { throw new AppwriteException(AppwriteException::GENERAL_ACCESS_FORBIDDEN, 'This domain cannot be used for security reasons. Please use any subdomain instead.'); } - if (\str_ends_with($host, System::getEnv('_APP_DOMAIN_FUNCTIONS', ''))) { + if (\str_ends_with($host, $appDomainFunctions)) { throw new AppwriteException(AppwriteException::GENERAL_ACCESS_FORBIDDEN, 'This domain is not connected to any Appwrite resource yet. Please configure custom domain or function domain to allow this request.'); } @@ -125,6 +133,7 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw if (empty($method)) { $utopia->getRoute()?->label('sdk', new Method( namespace: 'functions', + group: 'executions', name: 'createExecution', description: '/docs/references/functions/create-execution.md', auth: [AuthType::SESSION, AuthType::KEY, AuthType::JWT], @@ -339,7 +348,6 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw ]); /** Execute function */ - $executor = new Executor(System::getEnv('_APP_EXECUTOR_HOST')); try { $version = $function->getAttribute('version', 'v2'); $command = $runtime['startCommand']; @@ -503,9 +511,10 @@ App::init() ->inject('queueForEvents') ->inject('queueForCertificates') ->inject('queueForFunctions') + ->inject('executor') ->inject('isResourceBlocked') ->inject('previewHostname') - ->action(function (App $utopia, SwooleRequest $swooleRequest, Request $request, Response $response, Document $console, Document $project, Database $dbForPlatform, callable $getProjectDB, Locale $locale, array $localeCodes, array $clients, Reader $geodb, StatsUsage $queueForStatsUsage, Event $queueForEvents, Certificate $queueForCertificates, Func $queueForFunctions, callable $isResourceBlocked, string $previewHostname) { + ->action(function (App $utopia, SwooleRequest $swooleRequest, Request $request, Response $response, Document $console, Document $project, Database $dbForPlatform, callable $getProjectDB, Locale $locale, array $localeCodes, array $clients, Reader $geodb, StatsUsage $queueForStatsUsage, Event $queueForEvents, Certificate $queueForCertificates, Func $queueForFunctions, Executor $executor, callable $isResourceBlocked, string $previewHostname) { /* * Appwrite Router */ @@ -513,7 +522,7 @@ App::init() $mainDomain = System::getEnv('_APP_DOMAIN', ''); // Only run Router when external domain if ($host !== $mainDomain || !empty($previewHostname)) { - if (router($utopia, $dbForPlatform, $getProjectDB, $swooleRequest, $request, $response, $queueForEvents, $queueForStatsUsage, $queueForFunctions, $geodb, $isResourceBlocked, $previewHostname)) { + if (router($utopia, $dbForPlatform, $getProjectDB, $swooleRequest, $request, $response, $queueForEvents, $queueForStatsUsage, $queueForFunctions, $executor, $geodb, $isResourceBlocked, $previewHostname)) { return; } } @@ -742,11 +751,12 @@ App::options() ->inject('queueForEvents') ->inject('queueForStatsUsage') ->inject('queueForFunctions') + ->inject('executor') ->inject('geodb') ->inject('isResourceBlocked') ->inject('previewHostname') ->inject('project') - ->action(function (App $utopia, SwooleRequest $swooleRequest, Request $request, Response $response, Database $dbForPlatform, callable $getProjectDB, Event $queueForEvents, StatsUsage $queueForStatsUsage, Func $queueForFunctions, Reader $geodb, callable $isResourceBlocked, string $previewHostname, Document $project) { + ->action(function (App $utopia, SwooleRequest $swooleRequest, Request $request, Response $response, Database $dbForPlatform, callable $getProjectDB, Event $queueForEvents, StatsUsage $queueForStatsUsage, Func $queueForFunctions, Executor $executor, Reader $geodb, callable $isResourceBlocked, string $previewHostname, Document $project) { /* * Appwrite Router */ @@ -754,7 +764,7 @@ App::options() $mainDomain = System::getEnv('_APP_DOMAIN', ''); // Only run Router when external domain if ($host !== $mainDomain || !empty($previewHostname)) { - if (router($utopia, $dbForPlatform, $getProjectDB, $swooleRequest, $request, $response, $queueForEvents, $queueForStatsUsage, $queueForFunctions, $geodb, $isResourceBlocked, $previewHostname)) { + if (router($utopia, $dbForPlatform, $getProjectDB, $swooleRequest, $request, $response, $queueForEvents, $queueForStatsUsage, $queueForFunctions, $executor, $geodb, $isResourceBlocked, $previewHostname)) { return; } } @@ -1062,10 +1072,11 @@ App::get('/robots.txt') ->inject('queueForEvents') ->inject('queueForStatsUsage') ->inject('queueForFunctions') + ->inject('executor') ->inject('geodb') ->inject('isResourceBlocked') ->inject('previewHostname') - ->action(function (App $utopia, SwooleRequest $swooleRequest, Request $request, Response $response, Database $dbForPlatform, callable $getProjectDB, Event $queueForEvents, StatsUsage $queueForStatsUsage, Func $queueForFunctions, Reader $geodb, callable $isResourceBlocked, string $previewHostname) { + ->action(function (App $utopia, SwooleRequest $swooleRequest, Request $request, Response $response, Database $dbForPlatform, callable $getProjectDB, Event $queueForEvents, StatsUsage $queueForStatsUsage, Func $queueForFunctions, Executor $executor, Reader $geodb, callable $isResourceBlocked, string $previewHostname) { $host = $request->getHostname() ?? ''; $mainDomain = System::getEnv('_APP_DOMAIN', ''); @@ -1073,7 +1084,7 @@ App::get('/robots.txt') $template = new View(__DIR__ . '/../views/general/robots.phtml'); $response->text($template->render(false)); } else { - router($utopia, $dbForPlatform, $getProjectDB, $swooleRequest, $request, $response, $queueForEvents, $queueForStatsUsage, $queueForFunctions, $geodb, $isResourceBlocked, $previewHostname); + router($utopia, $dbForPlatform, $getProjectDB, $swooleRequest, $request, $response, $queueForEvents, $queueForStatsUsage, $queueForFunctions, $executor, $geodb, $isResourceBlocked, $previewHostname); } }); @@ -1090,10 +1101,11 @@ App::get('/humans.txt') ->inject('queueForEvents') ->inject('queueForStatsUsage') ->inject('queueForFunctions') + ->inject('executor') ->inject('geodb') ->inject('isResourceBlocked') ->inject('previewHostname') - ->action(function (App $utopia, SwooleRequest $swooleRequest, Request $request, Response $response, Database $dbForPlatform, callable $getProjectDB, Event $queueForEvents, StatsUsage $queueForStatsUsage, Func $queueForFunctions, Reader $geodb, callable $isResourceBlocked, string $previewHostname) { + ->action(function (App $utopia, SwooleRequest $swooleRequest, Request $request, Response $response, Database $dbForPlatform, callable $getProjectDB, Event $queueForEvents, StatsUsage $queueForStatsUsage, Func $queueForFunctions, Executor $executor, Reader $geodb, callable $isResourceBlocked, string $previewHostname) { $host = $request->getHostname() ?? ''; $mainDomain = System::getEnv('_APP_DOMAIN', ''); @@ -1101,7 +1113,7 @@ App::get('/humans.txt') $template = new View(__DIR__ . '/../views/general/humans.phtml'); $response->text($template->render(false)); } else { - router($utopia, $dbForPlatform, $getProjectDB, $swooleRequest, $request, $response, $queueForEvents, $queueForStatsUsage, $queueForFunctions, $geodb, $isResourceBlocked, $previewHostname); + router($utopia, $dbForPlatform, $getProjectDB, $swooleRequest, $request, $response, $queueForEvents, $queueForStatsUsage, $queueForFunctions, $executor, $geodb, $isResourceBlocked, $previewHostname); } }); diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index 87382bbfe2..22dc54d2c9 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -238,34 +238,36 @@ App::init() subject: 'keys' ); - if ($dbKey) { - $accessedAt = $dbKey->getAttribute('accessedAt', ''); + if (!$dbKey) { + throw new Exception(Exception::USER_UNAUTHORIZED); + } - if (DateTime::formatTz(DateTime::addSeconds(new \DateTime(), -APP_KEY_ACCESS)) > $accessedAt) { - $dbKey->setAttribute('accessedAt', DateTime::now()); + $accessedAt = $dbKey->getAttribute('accessedAt', ''); + + if (DateTime::formatTz(DateTime::addSeconds(new \DateTime(), -APP_KEY_ACCESS)) > $accessedAt) { + $dbKey->setAttribute('accessedAt', DateTime::now()); + $dbForPlatform->updateDocument('keys', $dbKey->getId(), $dbKey); + $dbForPlatform->purgeCachedDocument('projects', $project->getId()); + } + + $sdkValidator = new WhiteList($servers, true); + $sdk = $request->getHeader('x-sdk-name', 'UNKNOWN'); + + if ($sdkValidator->isValid($sdk)) { + $sdks = $dbKey->getAttribute('sdks', []); + + if (!in_array($sdk, $sdks)) { + $sdks[] = $sdk; + $dbKey->setAttribute('sdks', $sdks); + + /** Update access time as well */ + $dbKey->setAttribute('accessedAt', Datetime::now()); $dbForPlatform->updateDocument('keys', $dbKey->getId(), $dbKey); $dbForPlatform->purgeCachedDocument('projects', $project->getId()); } - - $sdkValidator = new WhiteList($servers, true); - $sdk = $request->getHeader('x-sdk-name', 'UNKNOWN'); - - if ($sdkValidator->isValid($sdk)) { - $sdks = $dbKey->getAttribute('sdks', []); - - if (!in_array($sdk, $sdks)) { - $sdks[] = $sdk; - $dbKey->setAttribute('sdks', $sdks); - - /** Update access time as well */ - $dbKey->setAttribute('accessedAt', Datetime::now()); - $dbForPlatform->updateDocument('keys', $dbKey->getId(), $dbKey); - $dbForPlatform->purgeCachedDocument('projects', $project->getId()); - } - } - - $queueForAudits->setUser($user); } + + $queueForAudits->setUser($user); } } // Admin User Authentication elseif (($project->getId() === 'console' && !$team->isEmpty() && !$user->isEmpty()) || ($project->getId() !== 'console' && !$user->isEmpty() && $mode === APP_MODE_ADMIN)) { @@ -534,7 +536,7 @@ App::init() $data = $cache->load($key, $timestamp); if (!empty($data) && !$cacheLog->isEmpty()) { - $parts = explode('/', $cacheLog->getAttribute('resourceType')); + $parts = explode('/', $cacheLog->getAttribute('resourceType', '')); $type = $parts[0] ?? null; if ($type === 'bucket' && (!$isImageTransformation || !$isDisabled)) { diff --git a/app/init/resources.php b/app/init/resources.php index 4e53b24c06..c719a47344 100644 --- a/app/init/resources.php +++ b/app/init/resources.php @@ -21,6 +21,7 @@ use Appwrite\Extend\Exception; use Appwrite\GraphQL\Schema; use Appwrite\Network\Validator\Origin; use Appwrite\Utopia\Request; +use Executor\Executor; use Utopia\Abuse\Adapters\TimeLimit\Redis as TimeLimitRedis; use Utopia\App; use Utopia\Cache\Adapter\Sharding; @@ -38,6 +39,7 @@ use Utopia\Logger\Log; use Utopia\Pools\Group; use Utopia\Queue\Publisher; use Utopia\Storage\Device; +use Utopia\Storage\Device\AWS; use Utopia\Storage\Device\Backblaze; use Utopia\Storage\Device\DOSpaces; use Utopia\Storage\Device\Linode; @@ -46,6 +48,8 @@ use Utopia\Storage\Device\S3; use Utopia\Storage\Device\Wasabi; use Utopia\Storage\Storage; use Utopia\System\System; +use Utopia\Telemetry\Adapter as Telemetry; +use Utopia\Telemetry\Adapter\None as NoTelemetry; use Utopia\Validator\Hostname; use Utopia\VCS\Adapter\Git\GitHub as VcsGitHub; @@ -462,7 +466,9 @@ App::setResource('getLogsDB', function (Group $pools, Cache $cache) { }; }, ['pools', 'cache']); -App::setResource('cache', function (Group $pools) { +App::setResource('telemetry', fn () => new NoTelemetry()); + +App::setResource('cache', function (Group $pools, Telemetry $telemetry) { $list = Config::getParam('pools-cache', []); $adapters = []; @@ -470,12 +476,15 @@ App::setResource('cache', function (Group $pools) { $adapters[] = $pools ->get($value) ->pop() - ->getResource() - ; + ->getResource(); } - return new Cache(new Sharding($adapters)); -}, ['pools']); + $cache = new Cache(new Sharding($adapters)); + + $cache->setTelemetry($telemetry); + + return $cache; +}, ['pools', 'telemetry']); App::setResource('redis', function () { $host = System::getEnv('_APP_REDIS_HOST', 'localhost'); @@ -540,7 +549,12 @@ function getDevice(string $root, string $connection = ''): Device switch ($device) { case Storage::DEVICE_S3: - return new S3($root, $accessKey, $accessSecret, $bucket, $region, $acl, $url); + if (!empty($url)) { + return new S3($root, $accessKey, $accessSecret, $url, $region, $acl); + } else { + return new AWS($root, $accessKey, $accessSecret, $bucket, $region, $acl); + } + // no break case STORAGE::DEVICE_DO_SPACES: $device = new DOSpaces($root, $accessKey, $accessSecret, $bucket, $region, $acl); $device->setHttpVersion(S3::HTTP_VERSION_1_1); @@ -567,7 +581,12 @@ function getDevice(string $root, string $connection = ''): Device $s3Bucket = System::getEnv('_APP_STORAGE_S3_BUCKET', ''); $s3Acl = 'private'; $s3EndpointUrl = System::getEnv('_APP_STORAGE_S3_ENDPOINT', ''); - return new S3($root, $s3AccessKey, $s3SecretKey, $s3Bucket, $s3Region, $s3Acl, $s3EndpointUrl); + if (!empty($s3EndpointUrl)) { + return new S3($root, $s3AccessKey, $s3SecretKey, $s3EndpointUrl, $s3Region, $s3Acl); + } else { + return new AWS($root, $s3AccessKey, $s3SecretKey, $s3Bucket, $s3Region, $s3Acl); + } + // no break case Storage::DEVICE_DO_SPACES: $doSpacesAccessKey = System::getEnv('_APP_STORAGE_DO_SPACES_ACCESS_KEY', ''); $doSpacesSecretKey = System::getEnv('_APP_STORAGE_DO_SPACES_SECRET', ''); @@ -822,3 +841,5 @@ App::setResource('apiKey', function (Request $request, Document $project): ?Key return Key::decode($project, $key); }, ['request', 'project']); + +App::setResource('executor', fn () => new Executor(fn (string $projectId, string $deploymentId) => System::getEnv('_APP_EXECUTOR_HOST'))); diff --git a/app/views/install/compose.phtml b/app/views/install/compose.phtml index 7dfe14fcef..25c8c30742 100644 --- a/app/views/install/compose.phtml +++ b/app/views/install/compose.phtml @@ -168,7 +168,7 @@ $image = $this->getParam('image', ''); appwrite-console: <<: *x-logging container_name: appwrite-console - image: /console:5.2.53 + image: /console:5.2.58 restart: unless-stopped networks: - appwrite @@ -744,34 +744,6 @@ $image = $this->getParam('image', ''); - _APP_LOGGING_CONFIG - _APP_USAGE_AGGREGATION_INTERVAL - appwrite-worker-stats-usage-dump: - image: /: - entrypoint: worker-stats-usage-dump - <<: *x-logging - container_name: appwrite-worker-stats-usage-dump - restart: unless-stopped - networks: - - appwrite - depends_on: - - redis - - mariadb - environment: - - _APP_ENV - - _APP_WORKER_PER_CORE - - _APP_OPENSSL_KEY_V1 - - _APP_DB_HOST - - _APP_DB_PORT - - _APP_DB_SCHEMA - - _APP_DB_USER - - _APP_DB_PASS - - _APP_REDIS_HOST - - _APP_REDIS_PORT - - _APP_REDIS_USER - - _APP_REDIS_PASS - - _APP_USAGE_STATS - - _APP_LOGGING_CONFIG - - _APP_USAGE_AGGREGATION_INTERVAL - appwrite-task-scheduler-functions: image: /: entrypoint: schedule-functions diff --git a/app/worker.php b/app/worker.php index 90496c0430..232e0b3684 100644 --- a/app/worker.php +++ b/app/worker.php @@ -15,9 +15,9 @@ use Appwrite\Event\Messaging; use Appwrite\Event\Migration; use Appwrite\Event\Realtime; use Appwrite\Event\StatsUsage; -use Appwrite\Event\StatsUsageDump; use Appwrite\Event\Webhook; use Appwrite\Platform\Appwrite; +use Executor\Executor; use Swoole\Runtime; use Utopia\Abuse\Adapters\TimeLimit\Redis as TimeLimitRedis; use Utopia\Cache\Adapter\Sharding; @@ -278,10 +278,6 @@ Server::setResource('queueForStatsUsage', function (Publisher $publisher) { return new StatsUsage($publisher); }, ['publisher']); -Server::setResource('queueForStatsUsageDump', function (Publisher $publisher) { - return new StatsUsageDump($publisher); -}, ['publisher']); - Server::setResource('queueForDatabase', function (Publisher $publisher) { return new EventDatabase($publisher); }, ['publisher']); @@ -413,6 +409,8 @@ Server::setResource('logError', function (Registry $register, Document $project) }; }, ['register', 'project']); +Server::setResource('executor', fn () => new Executor(fn (string $projectId, string $deploymentId) => System::getEnv('_APP_EXECUTOR_HOST'))); + $pools = $register->get('pools'); $platform = new Appwrite(); $args = $platform->getEnv('argv'); diff --git a/bin/worker-stats-usage-dump b/bin/worker-stats-usage-dump deleted file mode 100644 index 98e3c2cac7..0000000000 --- a/bin/worker-stats-usage-dump +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -php /usr/src/code/app/worker.php stats-usage-dump $@ \ No newline at end of file diff --git a/composer.json b/composer.json index 3920351c06..b3a1df7a59 100644 --- a/composer.json +++ b/composer.json @@ -51,7 +51,7 @@ "utopia-php/cache": "0.12.*", "utopia-php/cli": "0.15.*", "utopia-php/config": "0.2.*", - "utopia-php/database": "0.64.*", + "utopia-php/database": "0.66.*", "utopia-php/domains": "0.5.*", "utopia-php/dsn": "0.2.1", "utopia-php/framework": "0.33.*", diff --git a/composer.lock b/composer.lock index 8db4706bb5..84e7ac9cb3 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": "6a54c8bc4f9f14cd3883f55880864630", + "content-hash": "35fd85e8d566d20d8177266469c5ebcb", "packages": [ { "name": "adhocore/jwt", @@ -1365,16 +1365,16 @@ }, { "name": "open-telemetry/sdk", - "version": "1.2.2", + "version": "1.2.4", "source": { "type": "git", "url": "https://github.com/opentelemetry-php/sdk.git", - "reference": "37eec0fe47ddd627911f318f29b6cd48196be0c0" + "reference": "47fcb66ae5328c5a799195247b1dce551d85873e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opentelemetry-php/sdk/zipball/37eec0fe47ddd627911f318f29b6cd48196be0c0", - "reference": "37eec0fe47ddd627911f318f29b6cd48196be0c0", + "url": "https://api.github.com/repos/opentelemetry-php/sdk/zipball/47fcb66ae5328c5a799195247b1dce551d85873e", + "reference": "47fcb66ae5328c5a799195247b1dce551d85873e", "shasum": "" }, "require": { @@ -1451,7 +1451,7 @@ "issues": "https://github.com/open-telemetry/opentelemetry-php/issues", "source": "https://github.com/open-telemetry/opentelemetry-php" }, - "time": "2025-01-29T21:40:28+00:00" + "time": "2025-04-15T07:02:07+00:00" }, { "name": "open-telemetry/sem-conv", @@ -3351,16 +3351,16 @@ }, { "name": "utopia-php/cli", - "version": "0.15.1", + "version": "0.15.2", "source": { "type": "git", "url": "https://github.com/utopia-php/cli.git", - "reference": "d69bbe51a6a94dc4e5bcdd542b5938038b985a65" + "reference": "da00ff6b8b29a826a1794002ae43442cdf3a0f5f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/cli/zipball/d69bbe51a6a94dc4e5bcdd542b5938038b985a65", - "reference": "d69bbe51a6a94dc4e5bcdd542b5938038b985a65", + "url": "https://api.github.com/repos/utopia-php/cli/zipball/da00ff6b8b29a826a1794002ae43442cdf3a0f5f", + "reference": "da00ff6b8b29a826a1794002ae43442cdf3a0f5f", "shasum": "" }, "require": { @@ -3394,9 +3394,9 @@ ], "support": { "issues": "https://github.com/utopia-php/cli/issues", - "source": "https://github.com/utopia-php/cli/tree/0.15.1" + "source": "https://github.com/utopia-php/cli/tree/0.15.2" }, - "time": "2024-10-04T13:55:36+00:00" + "time": "2025-04-15T10:08:48+00:00" }, { "name": "utopia-php/compression", @@ -3497,16 +3497,16 @@ }, { "name": "utopia-php/database", - "version": "0.64.1", + "version": "0.66.0", "source": { "type": "git", "url": "https://github.com/utopia-php/database.git", - "reference": "6530a8a6d3c1fe92d0f9a92f0f05eda698d92e0b" + "reference": "67d2ab418efba31dc76b3564cf043e2b3f98d027" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/database/zipball/6530a8a6d3c1fe92d0f9a92f0f05eda698d92e0b", - "reference": "6530a8a6d3c1fe92d0f9a92f0f05eda698d92e0b", + "url": "https://api.github.com/repos/utopia-php/database/zipball/67d2ab418efba31dc76b3564cf043e2b3f98d027", + "reference": "67d2ab418efba31dc76b3564cf043e2b3f98d027", "shasum": "" }, "require": { @@ -3547,9 +3547,9 @@ ], "support": { "issues": "https://github.com/utopia-php/database/issues", - "source": "https://github.com/utopia-php/database/tree/0.64.1" + "source": "https://github.com/utopia-php/database/tree/0.66.0" }, - "time": "2025-04-02T00:35:29+00:00" + "time": "2025-04-16T07:10:27+00:00" }, { "name": "utopia-php/domains", @@ -3660,16 +3660,16 @@ }, { "name": "utopia-php/fetch", - "version": "0.4.0", + "version": "0.4.1", "source": { "type": "git", "url": "https://github.com/utopia-php/fetch.git", - "reference": "46e791ff6a95864517750b9df6bbf4a17e3c9c4e" + "reference": "65095dac14037db0c822fb5e209e5bd3187a0303" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/fetch/zipball/46e791ff6a95864517750b9df6bbf4a17e3c9c4e", - "reference": "46e791ff6a95864517750b9df6bbf4a17e3c9c4e", + "url": "https://api.github.com/repos/utopia-php/fetch/zipball/65095dac14037db0c822fb5e209e5bd3187a0303", + "reference": "65095dac14037db0c822fb5e209e5bd3187a0303", "shasum": "" }, "require": { @@ -3693,9 +3693,9 @@ "description": "A simple library that provides an interface for making HTTP Requests.", "support": { "issues": "https://github.com/utopia-php/fetch/issues", - "source": "https://github.com/utopia-php/fetch/tree/0.4.0" + "source": "https://github.com/utopia-php/fetch/tree/0.4.1" }, - "time": "2025-03-11T21:06:56+00:00" + "time": "2025-04-14T07:34:27+00:00" }, { "name": "utopia-php/framework", @@ -3746,16 +3746,16 @@ }, { "name": "utopia-php/image", - "version": "0.8.1", + "version": "0.8.2", "source": { "type": "git", "url": "https://github.com/utopia-php/image.git", - "reference": "e8cc7dd14f423270a1b7570ec0dae88a66195b63" + "reference": "6c736965177f9a9e71311e22b80cfa88511768e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/image/zipball/e8cc7dd14f423270a1b7570ec0dae88a66195b63", - "reference": "e8cc7dd14f423270a1b7570ec0dae88a66195b63", + "url": "https://api.github.com/repos/utopia-php/image/zipball/6c736965177f9a9e71311e22b80cfa88511768e9", + "reference": "6c736965177f9a9e71311e22b80cfa88511768e9", "shasum": "" }, "require": { @@ -3789,9 +3789,9 @@ ], "support": { "issues": "https://github.com/utopia-php/image/issues", - "source": "https://github.com/utopia-php/image/tree/0.8.1" + "source": "https://github.com/utopia-php/image/tree/0.8.2" }, - "time": "2025-04-04T18:55:20+00:00" + "time": "2025-04-08T11:31:45+00:00" }, { "name": "utopia-php/locale", @@ -3951,16 +3951,16 @@ }, { "name": "utopia-php/migration", - "version": "0.8.4", + "version": "0.8.6", "source": { "type": "git", "url": "https://github.com/utopia-php/migration.git", - "reference": "845fd04ccf5e0edb03c184b864e0596080a432b8" + "reference": "84163e16edc0b2e64c34ad7b7c4cc5f05d762daf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/migration/zipball/845fd04ccf5e0edb03c184b864e0596080a432b8", - "reference": "845fd04ccf5e0edb03c184b864e0596080a432b8", + "url": "https://api.github.com/repos/utopia-php/migration/zipball/84163e16edc0b2e64c34ad7b7c4cc5f05d762daf", + "reference": "84163e16edc0b2e64c34ad7b7c4cc5f05d762daf", "shasum": "" }, "require": { @@ -4001,9 +4001,9 @@ ], "support": { "issues": "https://github.com/utopia-php/migration/issues", - "source": "https://github.com/utopia-php/migration/tree/0.8.4" + "source": "https://github.com/utopia-php/migration/tree/0.8.6" }, - "time": "2025-03-28T02:08:22+00:00" + "time": "2025-04-14T08:22:09+00:00" }, { "name": "utopia-php/orchestration", @@ -4767,16 +4767,16 @@ "packages-dev": [ { "name": "appwrite/sdk-generator", - "version": "0.40.11", + "version": "0.40.12", "source": { "type": "git", "url": "https://github.com/appwrite/sdk-generator.git", - "reference": "0ec5f4a60c15e33e208bc3444ba6148b1d0f0027" + "reference": "182ec17848f81b78c336379bac94ff92b7a73365" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/0ec5f4a60c15e33e208bc3444ba6148b1d0f0027", - "reference": "0ec5f4a60c15e33e208bc3444ba6148b1d0f0027", + "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/182ec17848f81b78c336379bac94ff92b7a73365", + "reference": "182ec17848f81b78c336379bac94ff92b7a73365", "shasum": "" }, "require": { @@ -4812,9 +4812,9 @@ "description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms", "support": { "issues": "https://github.com/appwrite/sdk-generator/issues", - "source": "https://github.com/appwrite/sdk-generator/tree/0.40.11" + "source": "https://github.com/appwrite/sdk-generator/tree/0.40.12" }, - "time": "2025-03-26T10:53:16+00:00" + "time": "2025-04-02T23:36:11+00:00" }, { "name": "doctrine/annotations", @@ -5041,16 +5041,16 @@ }, { "name": "laravel/pint", - "version": "v1.21.2", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "370772e7d9e9da087678a0edf2b11b6960e40558" + "reference": "7ddfaa6523a675fae5c4123ee38fc6bfb8ee4f36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/370772e7d9e9da087678a0edf2b11b6960e40558", - "reference": "370772e7d9e9da087678a0edf2b11b6960e40558", + "url": "https://api.github.com/repos/laravel/pint/zipball/7ddfaa6523a675fae5c4123ee38fc6bfb8ee4f36", + "reference": "7ddfaa6523a675fae5c4123ee38fc6bfb8ee4f36", "shasum": "" }, "require": { @@ -5061,9 +5061,9 @@ "php": "^8.2.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.72.0", + "friendsofphp/php-cs-fixer": "^3.75.0", "illuminate/view": "^11.44.2", - "larastan/larastan": "^3.2.0", + "larastan/larastan": "^3.3.1", "laravel-zero/framework": "^11.36.1", "mockery/mockery": "^1.6.12", "nunomaduro/termwind": "^2.3", @@ -5103,7 +5103,7 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2025-03-14T22:31:42+00:00" + "time": "2025-04-08T22:11:45+00:00" }, { "name": "matthiasmullie/minify", diff --git a/docker-compose.yml b/docker-compose.yml index 05ddba967a..e8e51805d2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -198,11 +198,14 @@ services: - _APP_DATABASE_SHARED_TABLES_V1 - _APP_DATABASE_SHARED_NAMESPACE - _APP_FUNCTIONS_CREATION_ABUSE_LIMIT + - _APP_CUSTOM_DOMAIN_DENY_LIST + extra_hosts: + - "host.docker.internal:host-gateway" appwrite-console: <<: *x-logging container_name: appwrite-console - image: appwrite/console:5.2.53 + image: appwrite/console:5.2.58 restart: unless-stopped networks: - appwrite @@ -489,6 +492,8 @@ services: - _APP_STORAGE_WASABI_REGION - _APP_STORAGE_WASABI_BUCKET - _APP_DATABASE_SHARED_TABLES + extra_hosts: + - "host.docker.internal:host-gateway" appwrite-worker-certificates: entrypoint: worker-certificates @@ -823,38 +828,6 @@ services: - _APP_USAGE_AGGREGATION_INTERVAL - _APP_DATABASE_SHARED_TABLES - appwrite-worker-stats-usage-dump: - entrypoint: worker-stats-usage-dump - <<: *x-logging - container_name: appwrite-worker-stats-usage-dump - image: appwrite-dev - networks: - - appwrite - volumes: - - ./app:/usr/src/code/app - - ./src:/usr/src/code/src - depends_on: - - redis - - mariadb - environment: - - _APP_ENV - - _APP_WORKER_PER_CORE - - _APP_OPENSSL_KEY_V1 - - _APP_DB_HOST - - _APP_DB_PORT - - _APP_DB_SCHEMA - - _APP_DB_USER - - _APP_DB_PASS - - _APP_REDIS_HOST - - _APP_REDIS_PORT - - _APP_REDIS_USER - - _APP_REDIS_PASS - - _APP_USAGE_STATS - - _APP_LOGGING_CONFIG - - _APP_USAGE_AGGREGATION_INTERVAL - - _APP_DATABASE_SHARED_TABLES - - _APP_STATS_USAGE_DUAL_WRITING_DBS - appwrite-task-scheduler-functions: entrypoint: schedule-functions <<: *x-logging @@ -1131,4 +1104,4 @@ volumes: appwrite-certificates: appwrite-functions: appwrite-builds: - appwrite-config: \ No newline at end of file + appwrite-config: diff --git a/src/Appwrite/Auth/OAuth2.php b/src/Appwrite/Auth/OAuth2.php index f7dc1d50a1..9358c89547 100644 --- a/src/Appwrite/Auth/OAuth2.php +++ b/src/Appwrite/Auth/OAuth2.php @@ -196,9 +196,9 @@ abstract class OAuth2 if (!empty($payload)) { \curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); + $headers[] = 'Content-length: ' . \strlen($payload); } - $headers[] = 'Content-length: ' . \strlen($payload); \curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // Send the request & save response to $response diff --git a/src/Appwrite/Auth/OAuth2/Figma.php b/src/Appwrite/Auth/OAuth2/Figma.php new file mode 100644 index 0000000000..b5e53cbed4 --- /dev/null +++ b/src/Appwrite/Auth/OAuth2/Figma.php @@ -0,0 +1,178 @@ + 'code', + 'client_id' => $this->appID, + 'redirect_uri' => $this->callback, + 'scope' => \implode(' ', $this->getScopes()), + 'state' => \json_encode($this->state) + ]); + } + + /** + * @param string $code + * + * @return array + */ + protected function getTokens(string $code): array + { + if (empty($this->tokens)) { + $headers = [ + 'Content-Type: application/x-www-form-urlencoded', + 'Authorization: Basic ' . \base64_encode($this->appID . ':' . $this->appSecret) + ]; + $this->tokens = \json_decode($this->request( + 'POST', + 'https://api.figma.com/v1/oauth/token', + $headers, + \http_build_query([ + 'redirect_uri' => $this->callback, + 'code' => $code, + 'grant_type' => 'authorization_code' + ]) + ), true); + } + + return $this->tokens; + } + + /** + * @param string $refreshToken + * + * @return array + */ + public function refreshTokens(string $refreshToken): array + { + $headers = [ + 'Content-Type: application/x-www-form-urlencoded', + 'Authorization: Basic ' . \base64_encode($this->appID . ':' . $this->appSecret) + ]; + $this->tokens = \json_decode($this->request( + 'POST', + 'https://api.figma.com/v1/oauth/refresh', + $headers, + \http_build_query([ + 'refresh_token' => $refreshToken + ]) + ), true); + + if (empty($this->tokens['refresh_token'])) { + $this->tokens['refresh_token'] = $refreshToken; + } + + return $this->tokens; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserID(string $accessToken): string + { + $user = $this->getUser($accessToken); + + return $user['id'] ?? ''; + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserEmail(string $accessToken): string + { + $user = $this->getUser($accessToken); + + return $user['email'] ?? ''; + } + + /** + * Check if the OAuth email is verified + * + * Figma requires email verification during signup, + * so if we have an email, it's verified + * + * @param string $accessToken + * + * @return bool + */ + public function isEmailVerified(string $accessToken): bool + { + $email = $this->getUserEmail($accessToken); + + return !empty($email); + } + + /** + * @param string $accessToken + * + * @return string + */ + public function getUserName(string $accessToken): string + { + $user = $this->getUser($accessToken); + + return $user['handle'] ?? ''; + } + + /** + * @param string $accessToken + * + * @return array + */ + protected function getUser(string $accessToken): array + { + if (empty($this->user)) { + $headers = ['Authorization: Bearer ' . $accessToken]; + $user = $this->request( + 'GET', + 'https://api.figma.com/v1/me', + $headers + ); + $this->user = \json_decode($user, true); + } + + return $this->user; + } +} diff --git a/src/Appwrite/Event/Event.php b/src/Appwrite/Event/Event.php index 0edffdf4dc..08faeea485 100644 --- a/src/Appwrite/Event/Event.php +++ b/src/Appwrite/Event/Event.php @@ -24,23 +24,12 @@ class Event public const FUNCTIONS_QUEUE_NAME = 'v1-functions'; public const FUNCTIONS_CLASS_NAME = 'FunctionsV1'; - /** remove */ - public const USAGE_QUEUE_NAME = 'v1-usage'; - public const USAGE_CLASS_NAME = 'UsageV1'; - - public const USAGE_DUMP_QUEUE_NAME = 'v1-usage-dump'; - public const USAGE_DUMP_CLASS_NAME = 'UsageDumpV1'; - /** /remove */ - public const STATS_RESOURCES_QUEUE_NAME = 'v1-stats-resources'; public const STATS_RESOURCES_CLASS_NAME = 'StatsResourcesV1'; public const STATS_USAGE_QUEUE_NAME = 'v1-stats-usage'; public const STATS_USAGE_CLASS_NAME = 'StatsUsageV1'; - public const STATS_USAGE_DUMP_QUEUE_NAME = 'v1-stats-usage-dump'; - public const STATS_USAGE_DUMP_CLASS_NAME = 'StatsUsageDumpV1'; - public const WEBHOOK_QUEUE_NAME = 'v1-webhooks'; public const WEBHOOK_CLASS_NAME = 'WebhooksV1'; @@ -351,6 +340,7 @@ class Event */ public function trigger(): string|bool { + if ($this->paused) { return false; } @@ -360,6 +350,7 @@ class Event // Merge the base payload with any trimmed values $payload = array_merge($this->preparePayload(), $this->trimPayload()); + return $this->publisher->enqueue($queue, $payload); } diff --git a/src/Appwrite/Event/StatsUsageDump.php b/src/Appwrite/Event/StatsUsageDump.php deleted file mode 100644 index 0573a88040..0000000000 --- a/src/Appwrite/Event/StatsUsageDump.php +++ /dev/null @@ -1,44 +0,0 @@ -setQueue(Event::STATS_USAGE_DUMP_QUEUE_NAME) - ->setClass(Event::STATS_USAGE_DUMP_CLASS_NAME); - } - - /** - * Add Stats. - * - * @param array $stats - * @return self - */ - public function setStats(array $stats): self - { - $this->stats = $stats; - - return $this; - } - - /** - * Prepare the payload for the usage dump event. - * - * @return array - */ - protected function preparePayload(): array - { - return [ - 'stats' => $this->stats, - ]; - } -} diff --git a/src/Appwrite/Extend/Exception.php b/src/Appwrite/Extend/Exception.php index d4f47ca177..2db5a840bc 100644 --- a/src/Appwrite/Extend/Exception.php +++ b/src/Appwrite/Extend/Exception.php @@ -175,6 +175,7 @@ class Exception extends \Exception public const DATABASE_NOT_FOUND = 'database_not_found'; public const DATABASE_ALREADY_EXISTS = 'database_already_exists'; public const DATABASE_TIMEOUT = 'database_timeout'; + public const DATABASE_QUERY_ORDER_NULL = 'database_query_order_null'; /** Collections */ public const COLLECTION_NOT_FOUND = 'collection_not_found'; diff --git a/src/Appwrite/Migration/Version/V21.php b/src/Appwrite/Migration/Version/V21.php index 51e8a18b9d..0a89221b12 100644 --- a/src/Appwrite/Migration/Version/V21.php +++ b/src/Appwrite/Migration/Version/V21.php @@ -82,6 +82,14 @@ class V21 extends Migration Console::warning("'type' from {$id}: {$th->getMessage()}"); } break; + case 'migrations': + // Create destination attribute + try { + $this->createAttributeFromCollection($this->projectDB, $id, 'destination'); + } catch (Throwable $th) { + Console::warning("'destination' from {$id}: {$th->getMessage()}"); + } + break; case 'schedules': // Create data attribute try { @@ -91,7 +99,14 @@ class V21 extends Migration } break; - + case 'databases': + // Create originalId attribute + try { + $this->createAttributeFromCollection($this->projectDB, $id, 'originalId'); + } catch (Throwable $th) { + Console::warning("'originalId' from {$id}: {$th->getMessage()}"); + } + break; case 'functions': // Create scopes attribute try { diff --git a/src/Appwrite/Platform/Services/Workers.php b/src/Appwrite/Platform/Services/Workers.php index 4f4095aca4..eb544c140e 100644 --- a/src/Appwrite/Platform/Services/Workers.php +++ b/src/Appwrite/Platform/Services/Workers.php @@ -13,7 +13,6 @@ use Appwrite\Platform\Workers\Messaging; use Appwrite\Platform\Workers\Migrations; use Appwrite\Platform\Workers\StatsResources; use Appwrite\Platform\Workers\StatsUsage; -use Appwrite\Platform\Workers\StatsUsageDump; use Appwrite\Platform\Workers\Webhooks; use Utopia\Platform\Service; @@ -32,7 +31,6 @@ class Workers extends Service ->addAction(Mails::getName(), new Mails()) ->addAction(Messaging::getName(), new Messaging()) ->addAction(Webhooks::getName(), new Webhooks()) - ->addAction(StatsUsageDump::getName(), new StatsUsageDump()) ->addAction(StatsUsage::getName(), new StatsUsage()) ->addAction(Migrations::getName(), new Migrations()) ->addAction(StatsResources::getName(), new StatsResources()) diff --git a/src/Appwrite/Platform/Tasks/Maintenance.php b/src/Appwrite/Platform/Tasks/Maintenance.php index b9e312a3fb..2df75b22a8 100644 --- a/src/Appwrite/Platform/Tasks/Maintenance.php +++ b/src/Appwrite/Platform/Tasks/Maintenance.php @@ -47,15 +47,20 @@ class Maintenance extends Action Console::info("[{$time}] Notifying workers with maintenance tasks every {$interval} seconds"); - $dbForPlatform->foreach('projects', function (Document $project) use ($queueForDeletes, $usageStatsRetentionHourly) { - $queueForDeletes - ->setType(DELETE_TYPE_MAINTENANCE) - ->setProject($project) - ->setUsageRetentionHourlyDateTime(DateTime::addSeconds(new \DateTime(), -1 * $usageStatsRetentionHourly)) - ->trigger(); - }, [ - Query::limit(100), - ]); + $dbForPlatform->foreach( + 'projects', + function (Document $project) use ($queueForDeletes, $usageStatsRetentionHourly) { + $queueForDeletes + ->setType(DELETE_TYPE_MAINTENANCE) + ->setProject($project) + ->setUsageRetentionHourlyDateTime(DateTime::addSeconds(new \DateTime(), -1 * $usageStatsRetentionHourly)) + ->trigger(); + }, + [ + Query::equal('region', [System::getEnv('_APP_REGION', 'default')]), + Query::limit(100), + ] + ); $queueForDeletes ->setType(DELETE_TYPE_MAINTENANCE) diff --git a/src/Appwrite/Platform/Tasks/StatsResources.php b/src/Appwrite/Platform/Tasks/StatsResources.php index ac3b9ead73..ca2a6860ff 100644 --- a/src/Appwrite/Platform/Tasks/StatsResources.php +++ b/src/Appwrite/Platform/Tasks/StatsResources.php @@ -67,7 +67,8 @@ class StatsResources extends Action * For each project that were accessed in last 24 hours */ $this->foreachDocument($this->dbForPlatform, 'projects', [ - Query::greaterThanEqual('accessedAt', DateTime::format($last24Hours)) + Query::greaterThanEqual('accessedAt', DateTime::format($last24Hours)), + Query::equal('region', [System::getEnv('_APP_REGION', 'default')]) ], function ($project) use ($queue) { $queue ->setProject($project) diff --git a/src/Appwrite/Platform/Workers/Builds.php b/src/Appwrite/Platform/Workers/Builds.php index 6f26e9a80c..4057d4b190 100644 --- a/src/Appwrite/Platform/Workers/Builds.php +++ b/src/Appwrite/Platform/Workers/Builds.php @@ -59,8 +59,9 @@ class Builds extends Action ->inject('deviceForFunctions') ->inject('isResourceBlocked') ->inject('log') - ->callback(fn ($message, Document $project, Database $dbForPlatform, Event $queueForEvents, Webhook $queueForWebhooks, Func $queueForFunctions, Realtime $queueForRealtime, StatsUsage $usage, Cache $cache, Database $dbForProject, Device $deviceForFunctions, callable $isResourceBlocked, Log $log) => - $this->action($message, $project, $dbForPlatform, $queueForEvents, $queueForWebhooks, $queueForFunctions, $queueForRealtime, $usage, $cache, $dbForProject, $deviceForFunctions, $isResourceBlocked, $log)); + ->inject('executor') + ->callback(fn ($message, Document $project, Database $dbForPlatform, Event $queueForEvents, Webhook $queueForWebhooks, Func $queueForFunctions, Realtime $queueForRealtime, StatsUsage $usage, Cache $cache, Database $dbForProject, Device $deviceForFunctions, callable $isResourceBlocked, Log $log, Executor $executor) => + $this->action($message, $project, $dbForPlatform, $queueForEvents, $queueForWebhooks, $queueForFunctions, $queueForRealtime, $usage, $cache, $dbForProject, $deviceForFunctions, $isResourceBlocked, $log, $executor)); } /** @@ -76,10 +77,11 @@ class Builds extends Action * @param Database $dbForProject * @param Device $deviceForFunctions * @param Log $log + * @param Executor $executor * @return void * @throws \Utopia\Database\Exception */ - public function action(Message $message, Document $project, Database $dbForPlatform, Event $queueForEvents, Webhook $queueForWebhooks, Func $queueForFunctions, Realtime $queueForRealtime, StatsUsage $queueForStatsUsage, Cache $cache, Database $dbForProject, Device $deviceForFunctions, callable $isResourceBlocked, Log $log): void + public function action(Message $message, Document $project, Database $dbForPlatform, Event $queueForEvents, Webhook $queueForWebhooks, Func $queueForFunctions, Realtime $queueForRealtime, StatsUsage $queueForStatsUsage, Cache $cache, Database $dbForProject, Device $deviceForFunctions, callable $isResourceBlocked, Log $log, Executor $executor): void { $payload = $message->getPayload() ?? []; @@ -100,7 +102,7 @@ class Builds extends Action case BUILD_TYPE_RETRY: Console::info('Creating build for deployment: ' . $deployment->getId()); $github = new GitHub($cache); - $this->buildDeployment($deviceForFunctions, $queueForWebhooks, $queueForFunctions, $queueForRealtime, $queueForEvents, $queueForStatsUsage, $dbForPlatform, $dbForProject, $github, $project, $resource, $deployment, $template, $isResourceBlocked, $log); + $this->buildDeployment($deviceForFunctions, $queueForWebhooks, $queueForFunctions, $queueForRealtime, $queueForEvents, $queueForStatsUsage, $dbForPlatform, $dbForProject, $github, $project, $resource, $deployment, $template, $isResourceBlocked, $log, $executor); break; default: @@ -123,14 +125,13 @@ class Builds extends Action * @param Document $deployment * @param Document $template * @param Log $log + * @param Executor $executor * @return void * @throws \Utopia\Database\Exception * @throws Exception */ - protected function buildDeployment(Device $deviceForFunctions, Webhook $queueForWebhooks, Func $queueForFunctions, Realtime $queueForRealtime, Event $queueForEvents, StatsUsage $queueForStatsUsage, Database $dbForPlatform, Database $dbForProject, GitHub $github, Document $project, Document $function, Document $deployment, Document $template, callable $isResourceBlocked, Log $log): void + protected function buildDeployment(Device $deviceForFunctions, Webhook $queueForWebhooks, Func $queueForFunctions, Realtime $queueForRealtime, Event $queueForEvents, StatsUsage $queueForStatsUsage, Database $dbForPlatform, Database $dbForProject, GitHub $github, Document $project, Document $function, Document $deployment, Document $template, callable $isResourceBlocked, Log $log, Executor $executor): void { - $executor = new Executor(System::getEnv('_APP_EXECUTOR_HOST')); - $functionId = $function->getId(); $log->addTag('functionId', $function->getId()); diff --git a/src/Appwrite/Platform/Workers/Databases.php b/src/Appwrite/Platform/Workers/Databases.php index 44738b557c..1b3311b756 100644 --- a/src/Appwrite/Platform/Workers/Databases.php +++ b/src/Appwrite/Platform/Workers/Databases.php @@ -563,22 +563,19 @@ class Databases extends Action $start = \microtime(true); try { - $documents = $database->deleteDocuments($collectionId, $queries); + $count = $database->deleteDocuments( + $collectionId, + $queries, + Database::DELETE_BATCH_SIZE, + $callback + ); } catch (\Throwable $th) { $tenant = $database->getSharedTables() ? 'Tenant:'.$database->getTenant() : ''; Console::error("Failed to delete documents for collection:{$database->getNamespace()}_{$collectionId} {$tenant} :{$th->getMessage()}"); return; } - if (\is_callable($callback)) { - foreach ($documents as $document) { - $callback($document); - } - } - $end = \microtime(true); - $count = \count($documents); - Console::info("Deleted {$count} documents by group in " . ($end - $start) . " seconds"); } diff --git a/src/Appwrite/Platform/Workers/Deletes.php b/src/Appwrite/Platform/Workers/Deletes.php index 09c60c7740..4a2cb60d32 100644 --- a/src/Appwrite/Platform/Workers/Deletes.php +++ b/src/Appwrite/Platform/Workers/Deletes.php @@ -55,12 +55,13 @@ class Deletes extends Action ->inject('deviceForBuilds') ->inject('deviceForCache') ->inject('certificates') + ->inject('executor') ->inject('executionRetention') ->inject('auditRetention') ->inject('log') ->callback( - fn ($message, Document $project, Database $dbForPlatform, callable $getProjectDB, callable $getLogsDB, Device $deviceForFiles, Device $deviceForFunctions, Device $deviceForBuilds, Device $deviceForCache, CertificatesAdapter $certificates, string $executionRetention, string $auditRetention, Log $log) => - $this->action($message, $project, $dbForPlatform, $getProjectDB, $getLogsDB, $deviceForFiles, $deviceForFunctions, $deviceForBuilds, $deviceForCache, $certificates, $executionRetention, $auditRetention, $log) + fn ($message, Document $project, Database $dbForPlatform, callable $getProjectDB, callable $getLogsDB, Device $deviceForFiles, Device $deviceForFunctions, Device $deviceForBuilds, Device $deviceForCache, CertificatesAdapter $certificates, Executor $executor, string $executionRetention, string $auditRetention, Log $log) => + $this->action($message, $project, $dbForPlatform, $getProjectDB, $getLogsDB, $deviceForFiles, $deviceForFunctions, $deviceForBuilds, $deviceForCache, $certificates, $executor, $executionRetention, $auditRetention, $log) ); } @@ -68,7 +69,7 @@ class Deletes extends Action * @throws Exception * @throws Throwable */ - public function action(Message $message, Document $project, Database $dbForPlatform, callable $getProjectDB, callable $getLogsDB, Device $deviceForFiles, Device $deviceForFunctions, Device $deviceForBuilds, Device $deviceForCache, CertificatesAdapter $certificates, string $executionRetention, string $auditRetention, Log $log): void + public function action(Message $message, Document $project, Database $dbForPlatform, callable $getProjectDB, callable $getLogsDB, Device $deviceForFiles, Device $deviceForFunctions, Device $deviceForBuilds, Device $deviceForCache, CertificatesAdapter $certificates, Executor $executor, string $executionRetention, string $auditRetention, Log $log): void { $payload = $message->getPayload() ?? []; @@ -93,10 +94,10 @@ class Deletes extends Action $this->deleteProject($dbForPlatform, $getProjectDB, $deviceForFiles, $deviceForFunctions, $deviceForBuilds, $deviceForCache, $certificates, $document); break; case DELETE_TYPE_FUNCTIONS: - $this->deleteFunction($dbForPlatform, $getProjectDB, $deviceForFunctions, $deviceForBuilds, $certificates, $document, $project); + $this->deleteFunction($dbForPlatform, $getProjectDB, $deviceForFunctions, $deviceForBuilds, $certificates, $document, $project, $executor); break; case DELETE_TYPE_DEPLOYMENTS: - $this->deleteDeployment($getProjectDB, $deviceForFunctions, $deviceForBuilds, $document, $project); + $this->deleteDeployment($getProjectDB, $deviceForFunctions, $deviceForBuilds, $document, $project, $executor); break; case DELETE_TYPE_USERS: $this->deleteUser($getProjectDB, $document, $project); @@ -493,21 +494,22 @@ class Deletes extends Action } /** - * @param Database $dbForPlatform - * @param Document $document - * @return void - * @throws Authorization - * @throws DatabaseException - * @throws Conflict - * @throws Restricted - * @throws Structure - * @throws Exception - */ - private function deleteProjectsByTeam(Database $dbForPlatform, callable $getProjectDB, CertificatesAdapter $certificates, Document $document): void + * @param Database $dbForPlatform + * @param Document $document + * @return void + * @throws Authorization + * @throws DatabaseException + * @throws Conflict + * @throws Restricted + * @throws Structure + * @throws Exception + */ + protected function deleteProjectsByTeam(Database $dbForPlatform, callable $getProjectDB, CertificatesAdapter $certificates, Document $document): void { $projects = $dbForPlatform->find('projects', [ - Query::equal('teamInternalId', [$document->getInternalId()]) + Query::equal('teamInternalId', [$document->getInternalId()]), + Query::equal('region', [System::getEnv('_APP_REGION', 'default')]) ]); foreach ($projects as $project) { @@ -827,10 +829,11 @@ class Deletes extends Action * @param Device $deviceForBuilds * @param Document $document function document * @param Document $project + * @param Executor $executor * @return void * @throws Exception */ - private function deleteFunction(Database $dbForPlatform, callable $getProjectDB, Device $deviceForFunctions, Device $deviceForBuilds, CertificatesAdapter $certificates, Document $document, Document $project): void + private function deleteFunction(Database $dbForPlatform, callable $getProjectDB, Device $deviceForFunctions, Device $deviceForBuilds, CertificatesAdapter $certificates, Document $document, Document $project, Executor $executor): void { $projectId = $project->getId(); $dbForProject = $getProjectDB($project); @@ -922,7 +925,7 @@ class Deletes extends Action * Request executor to delete all deployment containers */ Console::info("Requesting executor to delete all deployment containers for function " . $functionId); - $this->deleteRuntimes($getProjectDB, $document, $project); + $this->deleteRuntimes($getProjectDB, $document, $project, $executor); } /** @@ -993,10 +996,11 @@ class Deletes extends Action * @param Device $deviceForBuilds * @param Document $document * @param Document $project + * @param Executor $executor * @return void * @throws Exception */ - private function deleteDeployment(callable $getProjectDB, Device $deviceForFunctions, Device $deviceForBuilds, Document $document, Document $project): void + private function deleteDeployment(callable $getProjectDB, Device $deviceForFunctions, Device $deviceForBuilds, Document $document, Document $project, Executor $executor): void { $projectId = $project->getId(); $dbForProject = $getProjectDB($project); @@ -1024,7 +1028,7 @@ class Deletes extends Action * Request executor to delete all deployment containers */ Console::info("Requesting executor to delete deployment container for deployment " . $deploymentId); - $this->deleteRuntimes($getProjectDB, $document, $project); + $this->deleteRuntimes($getProjectDB, $document, $project, $executor); } /** @@ -1046,24 +1050,20 @@ class Deletes extends Action /** * deleteDocuments uses a cursor, we need to add a unique order by field or use default */ - try { - $documents = $database->deleteDocuments($collection, $queries); + $count = $database->deleteDocuments( + $collection, + $queries, + Database::DELETE_BATCH_SIZE, + $callback + ); } catch (Throwable $th) { $tenant = $database->getSharedTables() ? 'Tenant:'.$database->getTenant() : ''; Console::error("Failed to delete documents for collection:{$database->getNamespace()}_{$collection} {$tenant} :{$th->getMessage()}"); return; } - if (\is_callable($callback)) { - foreach ($documents as $document) { - $callback($document); - } - } - $end = \microtime(true); - $count = \count($documents); - Console::info("Deleted {$count} documents by group in " . ($end - $start) . " seconds"); } @@ -1180,13 +1180,12 @@ class Deletes extends Action * @param callable $getProjectDB * @param ?Document $function * @param Document $project + * @param Executor $executor * @return void * @throws Exception */ - private function deleteRuntimes(callable $getProjectDB, ?Document $function, Document $project): void + private function deleteRuntimes(callable $getProjectDB, ?Document $function, Document $project, Executor $executor): void { - $executor = new Executor(System::getEnv('_APP_EXECUTOR_HOST')); - $deleteByFunction = function (Document $function) use ($getProjectDB, $project, $executor) { $this->listByGroup( 'deployments', diff --git a/src/Appwrite/Platform/Workers/Functions.php b/src/Appwrite/Platform/Workers/Functions.php index a7caa3207f..4e1794c085 100644 --- a/src/Appwrite/Platform/Workers/Functions.php +++ b/src/Appwrite/Platform/Workers/Functions.php @@ -51,11 +51,12 @@ class Functions extends Action ->inject('queueForEvents') ->inject('queueForStatsUsage') ->inject('log') + ->inject('executor') ->inject('isResourceBlocked') - ->callback(fn (Document $project, Message $message, Database $dbForProject, Webhook $queueForWebhooks, Func $queueForFunctions, Realtime $queueForRealtime, Event $queueForEvents, StatsUsage $queueForStatsUsage, Log $log, callable $isResourceBlocked) => $this->action($project, $message, $dbForProject, $queueForWebhooks, $queueForFunctions, $queueForRealtime, $queueForEvents, $queueForStatsUsage, $log, $isResourceBlocked)); + ->callback(fn (Document $project, Message $message, Database $dbForProject, Webhook $queueForWebhooks, Func $queueForFunctions, Realtime $queueForRealtime, Event $queueForEvents, StatsUsage $queueForStatsUsage, Log $log, Executor $executor, callable $isResourceBlocked) => $this->action($project, $message, $dbForProject, $queueForWebhooks, $queueForFunctions, $queueForRealtime, $queueForEvents, $queueForStatsUsage, $log, $executor, $isResourceBlocked)); } - public function action(Document $project, Message $message, Database $dbForProject, Webhook $queueForWebhooks, Func $queueForFunctions, Realtime $queueForRealtime, Event $queueForEvents, StatsUsage $queueForStatsUsage, Log $log, callable $isResourceBlocked): void + public function action(Document $project, Message $message, Database $dbForProject, Webhook $queueForWebhooks, Func $queueForFunctions, Realtime $queueForRealtime, Event $queueForEvents, StatsUsage $queueForStatsUsage, Log $log, Executor $executor, callable $isResourceBlocked): void { $payload = $message->getPayload() ?? []; @@ -146,6 +147,7 @@ class Functions extends Action queueForEvents: $queueForEvents, project: $project, function: $function, + executor: $executor, trigger: 'event', path: '/', method: 'POST', @@ -188,6 +190,7 @@ class Functions extends Action queueForEvents: $queueForEvents, project: $project, function: $function, + executor: $executor, trigger: 'http', path: $path, method: $method, @@ -212,6 +215,7 @@ class Functions extends Action queueForEvents: $queueForEvents, project: $project, function: $function, + executor: $executor, trigger: 'schedule', path: $path, method: $method, @@ -298,6 +302,7 @@ class Functions extends Action * @param Event $queueForEvents * @param Document $project * @param Document $function + * @param Executor $executor * @param string $trigger * @param string $path * @param string $method @@ -324,6 +329,7 @@ class Functions extends Action Event $queueForEvents, Document $project, Document $function, + Executor $executor, string $trigger, string $path, string $method, @@ -514,7 +520,6 @@ class Functions extends Action try { $version = $function->getAttribute('version', 'v2'); $command = $runtime['startCommand']; - $executor = new Executor(System::getEnv('_APP_EXECUTOR_HOST')); $command = $version === 'v2' ? '' : 'cp /tmp/code.tar.gz /mnt/code/code.tar.gz && nohup helpers/start.sh "' . $command . '"'; $executionResponse = $executor->createExecution( projectId: $project->getId(), diff --git a/src/Appwrite/Platform/Workers/StatsResources.php b/src/Appwrite/Platform/Workers/StatsResources.php index 3c0e772bd4..0144020d38 100644 --- a/src/Appwrite/Platform/Workers/StatsResources.php +++ b/src/Appwrite/Platform/Workers/StatsResources.php @@ -70,7 +70,6 @@ class StatsResources extends Action } if (empty($project->getAttribute('database'))) { - var_dump($payload); return; } diff --git a/src/Appwrite/Platform/Workers/StatsUsage.php b/src/Appwrite/Platform/Workers/StatsUsage.php index a755f723a0..66f285fcf5 100644 --- a/src/Appwrite/Platform/Workers/StatsUsage.php +++ b/src/Appwrite/Platform/Workers/StatsUsage.php @@ -2,17 +2,22 @@ namespace Appwrite\Platform\Workers; -use Appwrite\Event\StatsUsageDump; use Exception; +use Throwable; use Utopia\CLI\Console; +use Utopia\Database\Database; use Utopia\Database\DateTime; use Utopia\Database\Document; use Utopia\Platform\Action; use Utopia\Queue\Message; +use Utopia\Registry\Registry; use Utopia\System\System; class StatsUsage extends Action { + /** + * In memory per project metrics calculation + */ private array $stats = []; private int $lastTriggeredTime = 0; private int $keys = 0; @@ -20,6 +25,77 @@ class StatsUsage extends Action private const BATCH_SIZE_DEVELOPMENT = 1; private const BATCH_SIZE_PRODUCTION = 10_000; + /** + * Stats for batch write separated per project + * @var array + */ + private array $projects = []; + + /** + * Array of stat documents to batch write to logsDB + * @var array + */ + private array $statDocuments = []; + + protected Registry $register; + + /** + * Metrics to skip writing to logsDB + * As these metrics are calculated separately + * by logs DB + * @var array + */ + protected array $skipBaseMetrics = [ + METRIC_DATABASES => true, + METRIC_BUCKETS => true, + METRIC_USERS => true, + METRIC_FUNCTIONS => true, + METRIC_TEAMS => true, + METRIC_MESSAGES => true, + METRIC_MAU => true, + METRIC_WEBHOOKS => true, + METRIC_PLATFORMS => true, + METRIC_PROVIDERS => true, + METRIC_TOPICS => true, + METRIC_KEYS => true, + METRIC_FILES => true, + METRIC_FILES_STORAGE => true, + METRIC_DEPLOYMENTS_STORAGE => true, + METRIC_BUILDS_STORAGE => true, + METRIC_DEPLOYMENTS => true, + METRIC_BUILDS => true, + METRIC_COLLECTIONS => true, + METRIC_DOCUMENTS => true, + METRIC_DATABASES_STORAGE => true, + ]; + + /** + * Skip metrics associated with parent IDs + * these need to be checked individually with `str_ends_with` + */ + protected array $skipParentIdMetrics = [ + '.files', + '.files.storage', + '.collections', + '.documents', + '.deployments', + '.deployments.storage', + '.builds', + '.builds.storage', + '.databases.storage' + ]; + + /** + * @var callable(): Database + */ + protected mixed $getLogsDB; + + protected array $periods = [ + '1h' => 'Y-m-d H:00', + '1d' => 'Y-m-d 00:00', + 'inf' => '0000-00-00 00:00' + ]; + public static function getName(): string { return 'stats-usage'; @@ -41,7 +117,8 @@ class StatsUsage extends Action ->desc('Stats usage worker') ->inject('message') ->inject('getProjectDB') - ->inject('queueForStatsUsageDump') + ->inject('getLogsDB') + ->inject('register') ->callback([$this, 'action']); $this->lastTriggeredTime = time(); @@ -49,14 +126,17 @@ class StatsUsage extends Action /** * @param Message $message - * @param callable $getProjectDB - * @param StatsUsageDump $queueForStatsUsageDump + * @param callable(): Database $getProjectDB + * @param callable(): Database $getLogsDB + * @param Registry $register * @return void * @throws \Utopia\Database\Exception * @throws Exception */ - public function action(Message $message, callable $getProjectDB, StatsUsageDump $queueForStatsUsageDump): void + public function action(Message $message, callable $getProjectDB, callable $getLogsDB, Registry $register): void { + $this->getLogsDB = $getLogsDB; + $this->register = $register; $payload = $message->getPayload() ?? []; if (empty($payload)) { throw new Exception('Missing payload'); @@ -98,9 +178,7 @@ class StatsUsage extends Action ) { Console::warning('[' . DateTime::now() . '] Aggregated ' . $this->keys . ' keys'); - $queueForStatsUsageDump - ->setStats($this->stats) - ->trigger(); + $this->commitToDB($getProjectDB); $this->stats = []; $this->keys = 0; @@ -114,7 +192,7 @@ class StatsUsage extends Action * @param Document $project * @param Document $document * @param array $metrics - * @param callable $getProjectDB + * @param callable(): Database $getProjectDB * @return void */ private function reduce(Document $project, Document $document, array &$metrics, callable $getProjectDB): void @@ -246,8 +324,128 @@ class StatsUsage extends Action default: break; } - } catch (\Throwable $e) { + } catch (Throwable $e) { console::error("[reducer] " . " {DateTime::now()} " . " {$project->getInternalId()} " . " {$e->getMessage()}"); } } + + /** + * Commit stats to DB + * @param callable(): Database $getProjectDB + * @return void + */ + public function commitToDb(callable $getProjectDB): void + { + foreach ($this->stats as $stats) { + $project = $stats['project'] ?? new Document([]); + $numberOfKeys = !empty($stats['keys']) ? count($stats['keys']) : 0; + $receivedAt = $stats['receivedAt'] ?? null; + if ($numberOfKeys === 0) { + continue; + } + + console::log('['.DateTime::now().'] Id: '.$project->getId(). ' InternalId: '.$project->getInternalId(). ' Db: '.$project->getAttribute('database').' ReceivedAt: '.$receivedAt. ' Keys: '.$numberOfKeys); + + try { + foreach ($stats['keys'] ?? [] as $key => $value) { + if ($value == 0) { + continue; + } + + foreach ($this->periods as $period => $format) { + $time = null; + + if ($period !== 'inf') { + $time = !empty($receivedAt) ? (new \DateTime($receivedAt))->format($format) : date($format, time()); + } + $id = \md5("{$time}_{$period}_{$key}"); + + $document = new Document([ + '$id' => $id, + 'period' => $period, + 'time' => $time, + 'metric' => $key, + 'value' => $value, + 'region' => System::getEnv('_APP_REGION', 'default'), + ]); + + + $this->projects[$project->getInternalId()]['project'] = new Document([ + '$id' => $project->getId(), + '$internalId' => $project->getInternalId(), + 'database' => $project->getAttribute('database'), + ]); + $this->projects[$project->getInternalId()]['stats'][] = $document; + + $this->prepareForLogsDB($project, $document); + } + } + } catch (Exception $e) { + console::error('[' . DateTime::now() . '] project [' . $project->getInternalId() . '] database [' . $project['database'] . '] ' . ' ' . $e->getMessage()); + } + } + + foreach ($this->projects as $internalId => $projectStats) { + if (empty($internalId)) { + continue; + } + try { + $dbForProject = $getProjectDB($projectStats['project']); + Console::log('Processing batch with ' . count($projectStats['stats']) . ' stats'); + $dbForProject->createOrUpdateDocumentsWithIncrease('stats', 'value', $projectStats['stats']); + Console::success('Batch successfully written to DB'); + + unset($this->projects[$internalId]); + } catch (Throwable $e) { + Console::error('Error processing stats: ' . $e->getMessage()); + } + } + + $this->writeToLogsDB(); + + } + + protected function prepareForLogsDB(Document $project, Document $stat) + { + if (System::getEnv('_APP_STATS_USAGE_DUAL_WRITING', 'disabled') === 'disabled') { + return; + } + if (array_key_exists($stat->getAttribute('metric'), $this->skipBaseMetrics)) { + return; + } + foreach ($this->skipParentIdMetrics as $skipMetric) { + if (str_ends_with($stat->getAttribute('metric'), $skipMetric)) { + return; + } + } + $documentClone = clone $stat; + $documentClone->setAttribute('$tenant', (int) $project->getInternalId()); + $this->statDocuments[] = $documentClone; + } + + protected function writeToLogsDB(): void + { + if (System::getEnv('_APP_STATS_USAGE_DUAL_WRITING', 'disabled') === 'disabled') { + Console::log('Dual Writing is disabled. Skipping...'); + return; + } + + $dbForLogs = call_user_func($this->getLogsDB); + $dbForLogs + ->setTenant(null) + ->setTenantPerDocument(true); + + try { + Console::log('Processing batch with ' . count($this->statDocuments) . ' stats'); + $dbForLogs->createOrUpdateDocumentsWithIncrease( + 'stats', + 'value', + $this->statDocuments + ); + Console::success('Usage logs pushed to Logs DB'); + } catch (Throwable $th) { + Console::error($th->getMessage()); + } + $this->register->get('pools')->get('logs')->reclaim(); + } } diff --git a/src/Appwrite/Platform/Workers/StatsUsageDump.php b/src/Appwrite/Platform/Workers/StatsUsageDump.php index 119a9e7288..b9d486e0d8 100644 --- a/src/Appwrite/Platform/Workers/StatsUsageDump.php +++ b/src/Appwrite/Platform/Workers/StatsUsageDump.php @@ -4,7 +4,6 @@ namespace Appwrite\Platform\Workers; use Appwrite\Extend\Exception; use Utopia\CLI\Console; -use Utopia\Database\Database; use Utopia\Database\DateTime; use Utopia\Database\Document; use Utopia\Platform\Action; @@ -12,6 +11,9 @@ use Utopia\Queue\Message; use Utopia\Registry\Registry; use Utopia\System\System; +/** + * TODO remove later + */ class StatsUsageDump extends Action { public const METRIC_COLLECTION_LEVEL_STORAGE = 4; @@ -135,11 +137,6 @@ class StatsUsageDump extends Action } if (str_contains($key, METRIC_DATABASES_STORAGE)) { - try { - $this->handleDatabaseStorage($key, $dbForProject, $project, $receivedAt); - } catch (\Exception $e) { - console::error('[' . DateTime::now() . '] failed to calculate database storage for key [' . $key . '] ' . $e->getMessage()); - } continue; } @@ -160,7 +157,7 @@ class StatsUsageDump extends Action 'region' => System::getEnv('_APP_REGION', 'default'), ]); - $documentClone = new Document($document->getArrayCopy()); + $documentClone = clone $document; $dbForProject->createOrUpdateDocumentsWithIncrease( 'stats', @@ -177,157 +174,6 @@ class StatsUsageDump extends Action } } - private function handleDatabaseStorage(string $key, Database $dbForProject, Document $project, string $receivedAt): void - { - $data = explode('.', $key); - $start = microtime(true); - - $updateMetric = function (Database $dbForProject, Document $project, int $value, string $key, string $period, string|null $time) use ($receivedAt) { - $id = \md5("{$time}_{$period}_{$key}"); - - $document = new Document([ - '$id' => $id, - 'period' => $period, - 'time' => $time, - 'metric' => $key, - 'value' => $value, - 'region' => System::getEnv('_APP_REGION', 'default'), - ]); - $documentClone = new Document($document->getArrayCopy()); - $dbForProject->createOrUpdateDocumentsWithIncrease( - 'stats', - 'value', - [$document] - ); - $this->writeToLogsDB($project, $documentClone); - }; - - foreach ($this->periods as $period => $format) { - $time = null; - - if ($period !== 'inf') { - $time = !empty($receivedAt) ? (new \DateTime($receivedAt))->format($format) : date($format, time()); - } - $id = \md5("{$time}_{$period}_{$key}"); - - $value = 0; - $previousValue = 0; - try { - $previousValue = ($dbForProject->getDocument('stats', $id))->getAttribute('value', 0); - } catch (\Exception $e) { - // No previous value - } - - switch (count($data)) { - // Collection Level - case self::METRIC_COLLECTION_LEVEL_STORAGE: - Console::log('[' . DateTime::now() . '] Collection Level Storage Calculation [' . $key . ']'); - $databaseInternalId = $data[0]; - $collectionInternalId = $data[1]; - - try { - $value = $dbForProject->getSizeOfCollection('database_' . $databaseInternalId . '_collection_' . $collectionInternalId); - } catch (\Exception $e) { - // Collection not found - if ($e->getMessage() !== 'Collection not found') { - throw $e; - } - } - - // Compare with previous value - $diff = $value - $previousValue; - - if ($diff === 0) { - break; - } - - // Update Collection - $updateMetric($dbForProject, $project, $diff, $key, $period, $time); - - // Update Database - $databaseKey = str_replace(['{databaseInternalId}'], [$data[0]], METRIC_DATABASE_ID_STORAGE); - $updateMetric($dbForProject, $project, $diff, $databaseKey, $period, $time); - - // Update Project - $projectKey = METRIC_DATABASES_STORAGE; - $updateMetric($dbForProject, $project, $diff, $projectKey, $period, $time); - break; - // Database Level - case self::METRIC_DATABASE_LEVEL_STORAGE: - Console::log('[' . DateTime::now() . '] Database Level Storage Calculation [' . $key . ']'); - $databaseInternalId = $data[0]; - - $collections = []; - try { - $collections = $dbForProject->find('database_' . $databaseInternalId); - } catch (\Exception $e) { - // Database not found - if ($e->getMessage() !== 'Collection not found') { - throw $e; - } - } - - foreach ($collections as $collection) { - try { - $value += $dbForProject->getSizeOfCollection('database_' . $databaseInternalId . '_collection_' . $collection->getInternalId()); - } catch (\Exception $e) { - // Collection not found - if ($e->getMessage() !== 'Collection not found') { - throw $e; - } - } - } - - $diff = $value - $previousValue; - - if ($diff === 0) { - break; - } - - // Update Database - $databaseKey = str_replace(['{databaseInternalId}'], [$data[0]], METRIC_DATABASE_ID_STORAGE); - $updateMetric($dbForProject, $project, $diff, $databaseKey, $period, $time); - - // Update Project - $projectKey = METRIC_DATABASES_STORAGE; - $updateMetric($dbForProject, $project, $diff, $projectKey, $period, $time); - break; - // Project Level - case self::METRIC_PROJECT_LEVEL_STORAGE: - Console::log('[' . DateTime::now() . '] Project Level Storage Calculation [' . $key . ']'); - // Get all project databases - $databases = $dbForProject->find('database'); - - // Recalculate all databases - foreach ($databases as $database) { - $collections = $dbForProject->find('database_' . $database->getInternalId()); - - foreach ($collections as $collection) { - try { - $value += $dbForProject->getSizeOfCollection('database_' . $database->getInternalId() . '_collection_' . $collection->getInternalId()); - } catch (\Exception $e) { - // Collection not found - if ($e->getMessage() !== 'Collection not found') { - throw $e; - } - } - } - } - - $diff = $value - $previousValue; - - // Update Project - $projectKey = METRIC_DATABASES_STORAGE; - $updateMetric($dbForProject, $project, $diff, $projectKey, $period, $time); - break; - } - } - - $end = microtime(true); - - console::log('[' . DateTime::now() . '] DB Storage Calculation [' . $key . '] took ' . (($end - $start) * 1000) . ' milliseconds'); - } - protected function writeToLogsDB(Document $project, Document $document): void { if (System::getEnv('_APP_STATS_USAGE_DUAL_WRITING', 'disabled') === 'disabled') { diff --git a/src/Appwrite/Platform/Workers/Webhooks.php b/src/Appwrite/Platform/Workers/Webhooks.php index c903dafdae..44e8bd3118 100644 --- a/src/Appwrite/Platform/Workers/Webhooks.php +++ b/src/Appwrite/Platform/Workers/Webhooks.php @@ -54,6 +54,8 @@ class Webhooks extends Action $this->errors = []; $payload = $message->getPayload() ?? []; + + if (empty($payload)) { throw new Exception('Missing payload'); } diff --git a/src/Appwrite/SDK/Method.php b/src/Appwrite/SDK/Method.php index 626459ea7f..b0afd2ee58 100644 --- a/src/Appwrite/SDK/Method.php +++ b/src/Appwrite/SDK/Method.php @@ -16,6 +16,7 @@ class Method * Initialise a new SDK method * * @param string $namespace + * @param string|null $group * @param string $name * @param string $description * @param array $auth @@ -33,6 +34,7 @@ class Method */ public function __construct( protected string $namespace, + protected string|null $group, protected string $name, protected string $description, protected array $auth, @@ -126,6 +128,11 @@ class Method return $this->namespace; } + public function getGroup(): string|null + { + return $this->group; + } + public function getMethodName(): string { return $this->name; diff --git a/src/Appwrite/Specification/Format/OpenAPI3.php b/src/Appwrite/Specification/Format/OpenAPI3.php index bd5405539d..3d491ab889 100644 --- a/src/Appwrite/Specification/Format/OpenAPI3.php +++ b/src/Appwrite/Specification/Format/OpenAPI3.php @@ -185,6 +185,7 @@ class OpenAPI3 extends Format 'responses' => [], 'x-appwrite' => [ // Appwrite related metadata 'method' => $method, + 'group' => $sdk->getGroup(), 'weight' => $route->getOrder(), 'cookies' => $route->getLabel('sdk.cookies', false), 'type' => $sdk->getType()->value ?? '', diff --git a/src/Appwrite/Specification/Format/Swagger2.php b/src/Appwrite/Specification/Format/Swagger2.php index 7277e3ab2b..2bfe6de288 100644 --- a/src/Appwrite/Specification/Format/Swagger2.php +++ b/src/Appwrite/Specification/Format/Swagger2.php @@ -183,6 +183,7 @@ class Swagger2 extends Format 'responses' => [], 'x-appwrite' => [ // Appwrite related metadata 'method' => $method, + 'group' => $sdk->getGroup(), 'weight' => $route->getOrder(), 'cookies' => $route->getLabel('sdk.cookies', false), 'type' => $sdk->getType()->value ?? '', diff --git a/src/Executor/Executor.php b/src/Executor/Executor.php index c230cfb664..6bc2fe7aab 100644 --- a/src/Executor/Executor.php +++ b/src/Executor/Executor.php @@ -21,17 +21,19 @@ class Executor private bool $selfSigned = false; - private string $endpoint; + /** + * @var callable(string, string): string $endpoint + */ + private $endpointSelector; protected array $headers; - public function __construct(string $endpoint) + /** + * @param callable(string, string): string $endpointSelector + */ + public function __construct(callable $endpointSelector) { - if (!filter_var($endpoint, FILTER_VALIDATE_URL)) { - throw new Exception('Unsupported endpoint'); - } - - $this->endpoint = $endpoint; + $this->endpointSelector = $endpointSelector; $this->headers = [ 'content-type' => 'application/json', 'authorization' => 'Bearer ' . System::getEnv('_APP_EXECUTOR_SECRET', ''), @@ -92,7 +94,8 @@ class Executor 'timeout' => $timeout, ]; - $response = $this->call(self::METHOD_POST, $route, [ 'x-opr-runtime-id' => $runtimeId ], $params, true, $timeout); + $endpoint = $this->selectEndpoint($projectId, $deploymentId); + $response = $this->call($endpoint, self::METHOD_POST, $route, [ 'x-opr-runtime-id' => $runtimeId ], $params, true, $timeout); $status = $response['headers']['status-code']; if ($status >= 400) { @@ -123,7 +126,8 @@ class Executor 'timeout' => $timeout ]; - $this->call(self::METHOD_GET, $route, [ 'x-opr-runtime-id' => $runtimeId ], $params, true, $timeout, $callback); + $endpoint = $this->selectEndpoint($projectId, $deploymentId); + $this->call($endpoint, self::METHOD_GET, $route, [ 'x-opr-runtime-id' => $runtimeId ], $params, true, $timeout, $callback); } /** @@ -139,7 +143,8 @@ class Executor $runtimeId = "$projectId-$deploymentId"; $route = "/runtimes/$runtimeId"; - $response = $this->call(self::METHOD_DELETE, $route, [ + $endpoint = $this->selectEndpoint($projectId, $deploymentId); + $response = $this->call($endpoint, self::METHOD_DELETE, $route, [ 'x-opr-addressing-method' => 'broadcast' ], [], true, 30); @@ -227,7 +232,8 @@ class Executor $requestTimeout = $timeout + 15; } - $response = $this->call(self::METHOD_POST, $route, [ 'x-opr-runtime-id' => $runtimeId, 'content-type' => 'multipart/form-data', 'accept' => 'multipart/form-data' ], $params, true, $requestTimeout); + $endpoint = $this->selectEndpoint($projectId, $deploymentId); + $response = $this->call($endpoint, self::METHOD_POST, $route, [ 'x-opr-runtime-id' => $runtimeId, 'content-type' => 'multipart/form-data', 'accept' => 'multipart/form-data' ], $params, true, $requestTimeout); $status = $response['headers']['status-code']; if ($status >= 400) { @@ -235,7 +241,11 @@ class Executor throw new \Exception($message, $status); } - $response['body']['headers'] = \json_decode($response['body']['headers'] ?? '{}', true); + $headers = $response['body']['headers'] ?? []; + if (is_string($headers)) { + $headers = \json_decode($headers, true); + } + $response['body']['headers'] = $headers; $response['body']['statusCode'] = \intval($response['body']['statusCode'] ?? 500); $response['body']['duration'] = \floatval($response['body']['duration'] ?? 0); $response['body']['startTime'] = \floatval($response['body']['startTime'] ?? \microtime(true)); @@ -256,10 +266,10 @@ class Executor * @return array|string * @throws Exception */ - public function call(string $method, string $path = '', array $headers = [], array $params = [], bool $decode = true, int $timeout = 15, callable $callback = null) + private function call(string $endpoint, string $method, string $path = '', array $headers = [], array $params = [], bool $decode = true, int $timeout = 15, callable $callback = null) { $headers = array_merge($this->headers, $headers); - $ch = curl_init($this->endpoint . $path . (($method == self::METHOD_GET && !empty($params)) ? '?' . http_build_query($params) : '')); + $ch = curl_init($endpoint . $path . (($method == self::METHOD_GET && !empty($params)) ? '?' . http_build_query($params) : '')); $responseHeaders = []; $responseStatus = -1; $responseType = ''; @@ -422,4 +432,9 @@ class Executor return $output; } + + private function selectEndpoint(string $projectId, string $deploymentId): string + { + return call_user_func($this->endpointSelector, $projectId, $deploymentId); + } } diff --git a/tests/e2e/General/UsageTest.php b/tests/e2e/General/UsageTest.php index e614e2e185..4473cab30c 100644 --- a/tests/e2e/General/UsageTest.php +++ b/tests/e2e/General/UsageTest.php @@ -6,7 +6,6 @@ use Appwrite\Functions\Specification; use Appwrite\Tests\Retry; use CURLFile; use DateTime; -use PHPUnit\Framework\ExpectationFailedException; use Tests\E2E\Client; use Tests\E2E\Scopes\ProjectCustom; use Tests\E2E\Scopes\Scope; @@ -148,7 +147,7 @@ class UsageTest extends Scope ); $this->assertEquals(200, $response['headers']['status-code']); - $this->assertEquals(31, count($response['body'])); + $this->assertGreaterThanOrEqual(31, count($response['body'])); $this->validateDates($response['body']['network']); $this->validateDates($response['body']['requests']); $this->validateDates($response['body']['users']); @@ -327,7 +326,7 @@ class UsageTest extends Scope ] ); - $this->assertEquals(31, count($response['body'])); + $this->assertGreaterThanOrEqual(31, count($response['body'])); $this->assertEquals(1, count($response['body']['requests'])); $this->assertEquals($requestsTotal, $response['body']['requests'][array_key_last($response['body']['requests'])]['value']); $this->validateDates($response['body']['requests']); @@ -548,7 +547,7 @@ class UsageTest extends Scope ] ); - $this->assertEquals(31, count($response['body'])); + $this->assertGreaterThanOrEqual(31, count($response['body'])); $this->assertEquals(1, count($response['body']['requests'])); $this->assertEquals(1, count($response['body']['network'])); $this->assertEquals($requestsTotal, $response['body']['requests'][array_key_last($response['body']['requests'])]['value']); @@ -593,255 +592,6 @@ class UsageTest extends Scope return $data; } - public function testDatabaseStoragePrepare(): array - { - $response = $this->client->call( - Client::METHOD_POST, - '/databases', - array_merge([ - 'content-type' => 'application/json', - 'x-appwrite-project' => $this->getProject()['$id'] - ], $this->getHeaders()), - [ - 'databaseId' => 'unique()', - 'name' => 'dbStorageStats', - ] - ); - - $this->assertNotEmpty($response['body']['$id']); - $databaseId = $response['body']['$id']; - - $response = $this->client->call( - Client::METHOD_POST, - '/databases/' . $databaseId . '/collections', - array_merge([ - 'content-type' => 'application/json', - 'x-appwrite-project' => $this->getProject()['$id'] - ], $this->getHeaders()), - [ - 'collectionId' => 'unique()', - 'name' => 'collectionStorageStats', - 'documentSecurity' => false, - 'permissions' => [ - Permission::read(Role::any()), - Permission::create(Role::any()), - Permission::update(Role::any()), - Permission::delete(Role::any()), - ], - ] - ); - - $this->assertNotEmpty($response['body']['$id']); - $collectionId = $response['body']['$id']; - - $response = $this->client->call( - Client::METHOD_POST, - '/databases/' . $databaseId . '/collections/' . $collectionId . '/attributes' . '/string', - array_merge([ - 'content-type' => 'application/json', - 'x-appwrite-project' => $this->getProject()['$id'] - ], $this->getHeaders()), - [ - 'key' => 'data', - 'size' => 100000, - 'required' => true, - ] - ); - - return [ - 'databaseId' => $databaseId, - 'collectionId' => $collectionId, - ]; - } - - // /** @depends testDatabaseStoragePrepare */ - // #[Retry(count: 1)] - // public function testDatabaseStorageStatsCreateDocument(array $data): array - // { - // $databaseId = $data['databaseId']; - // $collectionId = $data['collectionId']; - - // $originalProjectMetrics = $this->client->call( - // Client::METHOD_GET, - // '/project/usage', - // $this->getConsoleHeaders(), - // [ - // 'period' => '1d', - // 'startDate' => self::getToday(), - // 'endDate' => self::getTomorrow(), - // ] - // ); - - // $this->assertEquals(200, $originalProjectMetrics['headers']['status-code']); - // $this->assertArrayHasKey('databasesStorageTotal', $originalProjectMetrics['body']); - - // $originalProjectMetrics = $originalProjectMetrics['body']; - - // $originalDatabaseMetrics = $this->client->call( - // Client::METHOD_GET, - // '/databases/' . $databaseId . '/usage?range=30d', - // $this->getConsoleHeaders() - // ); - - // $this->assertEquals(200, $originalDatabaseMetrics['headers']['status-code']); - // $this->assertArrayHasKey('storageTotal', $originalDatabaseMetrics['body']); - // $originalDatabaseMetrics = $originalDatabaseMetrics['body']; - - // // Create documents - // for ($i = 0; $i < 100; $i++) { - // $response = $this->client->call( - // Client::METHOD_POST, - // '/databases/' . $databaseId . '/collections/' . $collectionId . '/documents', - // array_merge([ - // 'content-type' => 'application/json', - // 'x-appwrite-project' => $this->getProject()['$id'] - // ], $this->getHeaders()), - // [ - // 'documentId' => 'unique()', - // 'data' => ['data' => str_repeat('a', 10000)], - // ] - // ); - - // $this->assertEquals(201, $response['headers']['status-code']); - // } - - // for ($i = 0; $i < 3; $i++) { - // try { - // $newProjectMetrics = $this->client->call( - // Client::METHOD_GET, - // '/project/usage', - // $this->getConsoleHeaders(), - // [ - // 'period' => '1d', - // 'startDate' => self::getToday(), - // 'endDate' => self::getTomorrow(), - // ] - // ); - - // $this->assertEquals(200, $newProjectMetrics['headers']['status-code']); - // $this->assertArrayHasKey('databasesStorageTotal', $newProjectMetrics['body']); - // $this->assertGreaterThan($originalProjectMetrics['databasesStorageTotal'], $newProjectMetrics['body']['databasesStorageTotal']); - - // $newProjectMetrics = $newProjectMetrics['body']; - - // $newDatabaseMetrics = $this->client->call( - // Client::METHOD_GET, - // '/databases/' . $databaseId . '/usage?range=30d', - // $this->getConsoleHeaders() - // ); - - // $this->assertEquals(200, $newDatabaseMetrics['headers']['status-code']); - // $this->assertArrayHasKey('storageTotal', $newDatabaseMetrics['body']); - // $this->assertGreaterThan($originalDatabaseMetrics['storageTotal'], $newDatabaseMetrics['body']['storageTotal']); - - // $newDatabaseMetrics = $newDatabaseMetrics['body']; - - // return [ - // 'databaseId' => $databaseId, - // 'collectionId' => $collectionId, - // 'currentProjectMetrics' => $newProjectMetrics, - // 'currentDatabaseMetrics' => $newDatabaseMetrics, - // ]; - // } catch (ExpectationFailedException $e) { - // if ($i === 2) { - // throw $e; - // } - // continue; - // } - // } - // } - - // /** @depends testDatabaseStorageStatsCreateDocument */ - // #[Retry(count: 1)] - // public function testDatabaseStorageStatsDeleteDocument(array $data): array - // { - // $databaseId = $data['databaseId']; - // $collectionId = $data['collectionId']; - // $currentProjectMetrics = $data['currentProjectMetrics']; - // $currentDatabaseMetrics = $data['currentDatabaseMetrics']; - - // $documents = $this->client->call( - // Client::METHOD_GET, - // '/databases/' . $databaseId . '/collections/' . $collectionId . '/documents', - // array_merge([ - // 'x-appwrite-project' => $this->getProject()['$id'] - // ], $this->getHeaders()), - // [ - // 'queries' => [ - // Query::limit(50)->toString() - // ] - // ] - // ); - - // foreach ($documents['body']['documents'] as $document) { - // $response = $this->client->call( - // Client::METHOD_DELETE, - // '/databases/' . $databaseId . '/collections/' . $collectionId . '/documents/' . $document['$id'], - // array_merge([ - // 'x-appwrite-project' => $this->getProject()['$id'] - // ], $this->getHeaders()) - // ); - - // $this->assertEquals(204, $response['headers']['status-code']); - // } - - // for ($i = 0; $i < 3; $i++) { - // try { - // $newProjectMetrics = $this->client->call( - // Client::METHOD_GET, - // '/project/usage', - // $this->getConsoleHeaders(), - // [ - // 'period' => '1d', - // 'startDate' => self::getToday(), - // 'endDate' => self::getTomorrow(), - // ] - // ); - - // $this->assertEquals(200, $newProjectMetrics['headers']['status-code']); - // $this->assertArrayHasKey('databasesStorageTotal', $newProjectMetrics['body']); - // $this->assertLessThan($currentProjectMetrics['databasesStorageTotal'], $newProjectMetrics['body']['databasesStorageTotal']); - - // $newProjectMetrics = $newProjectMetrics['body']; - - // $newDatabaseMetrics = $this->client->call( - // Client::METHOD_GET, - // '/databases/' . $databaseId . '/usage?range=30d', - // $this->getConsoleHeaders() - // ); - - // $this->assertEquals(200, $newDatabaseMetrics['headers']['status-code']); - // $this->assertArrayHasKey('storageTotal', $newDatabaseMetrics['body']); - // $this->assertLessThan($currentDatabaseMetrics['storageTotal'], $newDatabaseMetrics['body']['storageTotal']); - - // $newDatabaseMetrics = $newDatabaseMetrics['body']; - - // return [ - // 'databaseId' => $databaseId, - // 'collectionId' => $collectionId, - // 'currentProjectMetrics' => $newProjectMetrics, - // 'currentDatabaseMetrics' => $newDatabaseMetrics, - // ]; - // } catch (ExpectationFailedException $e) { - // if ($i === 2) { - // throw $e; - // } - // continue; - // } - // } - - // $newProjectMetrics = $this->client->call( - // Client::METHOD_GET, - // '/project/usage', - // $this->getConsoleHeaders(), - // [ - // 'period' => '1d', - // 'startDate' => self::getToday(), - // 'endDate' => self::getTomorrow(), - // ] - // ); - // } - /** @depends testDatabaseStats */ public function testPrepareFunctionsStats(array $data): array { diff --git a/tests/e2e/Services/Databases/DatabasesBase.php b/tests/e2e/Services/Databases/DatabasesBase.php index 0f57f94515..0c7e1d386e 100644 --- a/tests/e2e/Services/Databases/DatabasesBase.php +++ b/tests/e2e/Services/Databases/DatabasesBase.php @@ -90,6 +90,12 @@ trait DatabasesBase */ public function testConsoleProject(array $data) { + if ($this->getSide() === 'server') { + // Server side can't get past the invalid key check anyway + $this->expectNotToPerformAssertions(); + return; + } + $response = $this->client->call( Client::METHOD_GET, '/databases/console/collections/' . $data['moviesId'] . '/documents', @@ -1635,9 +1641,54 @@ trait DatabasesBase $this->assertEquals(2019, $documents['body']['documents'][0]['releaseYear']); $this->assertCount(3, $documents['body']['documents']); + // changing description attribute to be null by default instead of empty string + $patchNull = $this->client->call(Client::METHOD_PATCH, '/databases/' . $databaseId . '/collections/' . $data['moviesId'] . '/attributes/string/description', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'] + ]), [ + 'default' => null, + 'required' => false, + ]); + // creating a dummy doc with null description + $document1 = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections/' . $data['moviesId'] . '/documents', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'documentId' => ID::unique(), + 'data' => [ + 'title' => 'Dummy', + 'releaseYear' => 1944, + 'birthDay' => '1975-06-12 14:12:55+02:00', + 'actors' => [ + 'Dummy', + ], + ] + ]); + + $this->assertEquals(201, $document1['headers']['status-code']); + // fetching docs with cursor after the dummy doc with order attr description which is null + $documentsPaginated = $this->client->call(Client::METHOD_GET, '/databases/' . $databaseId . '/collections/' . $data['moviesId'] . '/documents', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'queries' => [ + Query::orderAsc('dummy')->toString(), + Query::cursorAfter(new Document(['$id' => $document1['body']['$id']]))->toString() + ], + ]); + // should throw 400 as the order attr description of the selected doc is null + $this->assertEquals(400, $documentsPaginated['headers']['status-code']); + + // deleting the dummy doc created + $this->client->call(Client::METHOD_DELETE, '/databases/' . $databaseId . '/collections/' . $data['moviesId'] . '/documents/' . $document1['body']['$id'], array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders())); return ['documents' => $documents['body']['documents'], 'databaseId' => $databaseId]; } + /** * @depends testListDocuments */ diff --git a/tests/e2e/Services/Health/HealthCustomServerTest.php b/tests/e2e/Services/Health/HealthCustomServerTest.php index 04b1408cd0..4b7062dc22 100644 --- a/tests/e2e/Services/Health/HealthCustomServerTest.php +++ b/tests/e2e/Services/Health/HealthCustomServerTest.php @@ -541,28 +541,4 @@ class HealthCustomServerTest extends Scope ], $this->getHeaders()), []); $this->assertEquals(503, $response['headers']['status-code']); } - - public function testStatsUsageDumpSuccess() - { - /** - * Test for SUCCESS - */ - $response = $this->client->call(Client::METHOD_GET, '/health/queue/stats-usage-dump', array_merge([ - 'content-type' => 'application/json', - 'x-appwrite-project' => $this->getProject()['$id'], - ], $this->getHeaders()), []); - - $this->assertEquals(200, $response['headers']['status-code']); - $this->assertIsInt($response['body']['size']); - $this->assertLessThan(100, $response['body']['size']); - - /** - * Test for FAILURE - */ - $response = $this->client->call(Client::METHOD_GET, '/health/queue/stats-usage-dump?threshold=0', array_merge([ - 'content-type' => 'application/json', - 'x-appwrite-project' => $this->getProject()['$id'], - ], $this->getHeaders()), []); - $this->assertEquals(503, $response['headers']['status-code']); - } } diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index 8e2ab03880..f89428d79a 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -2786,32 +2786,35 @@ class ProjectsConsoleClientTest extends Scope */ public function testValidateProjectKey($data): void { - $id = $data['projectId'] ?? ''; + $projectId = $data['projectId'] ?? ''; + $teamId = $data['teamId'] ?? ''; /** * Test for SUCCESS */ - $response = $this->client->call(Client::METHOD_POST, '/projects/' . $id . '/keys', array_merge([ + + // Expiring key + $response = $this->client->call(Client::METHOD_POST, '/projects/' . $projectId . '/keys', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ 'name' => 'Key Test', - 'scopes' => ['health.read'], + 'scopes' => ['users.write'], 'expire' => DateTime::addSeconds(new \DateTime(), 3600), ]); - $response = $this->client->call(Client::METHOD_GET, '/health', [ + $response = $this->client->call(Client::METHOD_POST, '/users', [ 'content-type' => 'application/json', - 'x-appwrite-project' => $id, + 'x-appwrite-project' => $projectId, 'x-appwrite-key' => $response['body']['secret'] - ], []); + ], [ + 'userId' => ID::unique(), + ]); - $this->assertEquals(200, $response['headers']['status-code']); + $this->assertEquals(201, $response['headers']['status-code']); - /** - * Test for SUCCESS - */ - $response = $this->client->call(Client::METHOD_POST, '/projects/' . $id . '/keys', array_merge([ + // No expiry + $response = $this->client->call(Client::METHOD_POST, '/projects/' . $projectId . '/keys', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ @@ -2822,7 +2825,7 @@ class ProjectsConsoleClientTest extends Scope $response = $this->client->call(Client::METHOD_GET, '/health', [ 'content-type' => 'application/json', - 'x-appwrite-project' => $id, + 'x-appwrite-project' => $projectId, 'x-appwrite-key' => $response['body']['secret'] ], []); @@ -2831,7 +2834,9 @@ class ProjectsConsoleClientTest extends Scope /** * Test for FAILURE */ - $response = $this->client->call(Client::METHOD_POST, '/projects/' . $id . '/keys', array_merge([ + + // Expired key + $response = $this->client->call(Client::METHOD_POST, '/projects/' . $projectId . '/keys', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], ], $this->getHeaders()), [ @@ -2842,9 +2847,82 @@ class ProjectsConsoleClientTest extends Scope $response = $this->client->call(Client::METHOD_GET, '/health', [ 'content-type' => 'application/json', - 'x-appwrite-project' => $id, + 'x-appwrite-project' => $projectId, 'x-appwrite-key' => $response['body']['secret'] - ], []); + ]); + + $this->assertEquals(401, $response['headers']['status-code']); + + // Invalid key + $bucket = $this->client->call(Client::METHOD_POST, '/storage/buckets', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $projectId, + 'x-appwrite-mode' => 'admin', + ], $this->getHeaders()), [ + 'bucketId' => ID::unique(), + 'name' => 'Test Bucket', + ]); + + $this->assertEquals(201, $bucket['headers']['status-code']); + $this->assertNotEmpty($bucket['body']['$id']); + + $bucketId = $bucket['body']['$id']; + + $response = $this->client->call(Client::METHOD_GET, "/storage/buckets/{$bucketId}/files", [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $projectId, + 'x-appwrite-key' => 'invalid-key' + ]); + + $this->assertEquals(401, $response['headers']['status-code']); + + // Invalid scopes + $response = $this->client->call(Client::METHOD_POST, '/projects/' . $projectId . '/keys', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'name' => 'Key Test', + 'scopes' => ['teams.read'], + 'expire' => DateTime::addSeconds(new \DateTime(), 3600), + ]); + + $response = $this->client->call(Client::METHOD_GET, '/users', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $projectId, + 'x-appwrite-key' => $response['body']['secret'] + ]); + + $this->assertEquals(401, $response['headers']['status-code']); + + // Invalid key from different project + $response = $this->client->call(Client::METHOD_POST, '/projects', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'projectId' => ID::unique(), + 'name' => 'Project Test 2', + 'teamId' => $teamId, + 'region' => System::getEnv('_APP_REGION', 'default') + ]); + + $this->assertEquals(201, $response['headers']['status-code']); + + $project2Id = $response['body']['$id']; + + $response = $this->client->call(Client::METHOD_POST, '/projects/' . $project2Id . '/keys', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'name' => 'Key Test', + 'scopes' => ['health.read'], + 'expire' => DateTime::addSeconds(new \DateTime(), 3600), + ]); + + $response = $this->client->call(Client::METHOD_GET, '/health', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $projectId, + 'x-appwrite-key' => $response['body']['secret'] + ]); $this->assertEquals(401, $response['headers']['status-code']); } diff --git a/tests/unit/Utopia/RequestTest.php b/tests/unit/Utopia/RequestTest.php index e19fdbe01f..26273f154e 100644 --- a/tests/unit/Utopia/RequestTest.php +++ b/tests/unit/Utopia/RequestTest.php @@ -34,6 +34,7 @@ class RequestTest extends TestCase $route = new Route(Request::METHOD_GET, '/test'); $route->label('sdk', new Method( namespace: 'namespace', + group: 'group', name: 'method', description: 'description', auth: [],