diff --git a/app/config/errors.php b/app/config/errors.php index 6d747e4eb1..e01d9064bf 100644 --- a/app/config/errors.php +++ b/app/config/errors.php @@ -1103,7 +1103,6 @@ return [ 'name' => Exception::RULE_VERIFICATION_FAILED, 'description' => 'Domain verification failed. Please check if your DNS records are correct and try again.', 'code' => 400, - 'publish' => true ], Exception::PROJECT_SMTP_CONFIG_INVALID => [ 'name' => Exception::PROJECT_SMTP_CONFIG_INVALID, diff --git a/app/config/specs/open-api3-latest-client.json b/app/config/specs/open-api3-latest-client.json index 052fe536c9..fd35c3b73c 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.8.0", + "version": "1.8.1", "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", @@ -7318,7 +7318,7 @@ "x-appwrite": { "method": "listExecutions", "group": "executions", - "weight": 454, + "weight": 455, "cookies": false, "type": "", "demo": "functions\/list-executions.md", @@ -7405,7 +7405,7 @@ "x-appwrite": { "method": "createExecution", "group": "executions", - "weight": 452, + "weight": 453, "cookies": false, "type": "", "demo": "functions\/create-execution.md", @@ -7523,7 +7523,7 @@ "x-appwrite": { "method": "getExecution", "group": "executions", - "weight": 453, + "weight": 454, "cookies": false, "type": "", "demo": "functions\/get-execution.md", @@ -8298,7 +8298,7 @@ "x-appwrite": { "method": "listFiles", "group": "files", - "weight": 525, + "weight": 526, "cookies": false, "type": "", "demo": "storage\/list-files.md", @@ -8397,7 +8397,7 @@ "x-appwrite": { "method": "createFile", "group": "files", - "weight": 523, + "weight": 524, "cookies": false, "type": "upload", "demo": "storage\/create-file.md", @@ -8498,7 +8498,7 @@ "x-appwrite": { "method": "getFile", "group": "files", - "weight": 524, + "weight": 525, "cookies": false, "type": "", "demo": "storage\/get-file.md", @@ -8572,7 +8572,7 @@ "x-appwrite": { "method": "updateFile", "group": "files", - "weight": 526, + "weight": 527, "cookies": false, "type": "", "demo": "storage\/update-file.md", @@ -8664,7 +8664,7 @@ "x-appwrite": { "method": "deleteFile", "group": "files", - "weight": 527, + "weight": 528, "cookies": false, "type": "", "demo": "storage\/delete-file.md", @@ -8733,7 +8733,7 @@ "x-appwrite": { "method": "getFileDownload", "group": "files", - "weight": 529, + "weight": 530, "cookies": false, "type": "location", "demo": "storage\/get-file-download.md", @@ -8813,7 +8813,7 @@ "x-appwrite": { "method": "getFilePreview", "group": "files", - "weight": 528, + "weight": 529, "cookies": false, "type": "location", "demo": "storage\/get-file-preview.md", @@ -9043,7 +9043,7 @@ "x-appwrite": { "method": "getFileView", "group": "files", - "weight": 530, + "weight": 531, "cookies": false, "type": "location", "demo": "storage\/get-file-view.md", diff --git a/app/config/specs/open-api3-latest-console.json b/app/config/specs/open-api3-latest-console.json index de68c4db48..952f83af6d 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.8.0", + "version": "1.8.1", "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", @@ -5862,7 +5862,7 @@ "x-appwrite": { "method": "chat", "group": "console", - "weight": 495, + "weight": 496, "cookies": false, "type": "", "demo": "assistant\/chat.md", @@ -5923,7 +5923,7 @@ "x-appwrite": { "method": "getResource", "group": null, - "weight": 496, + "weight": 497, "cookies": false, "type": "", "demo": "console\/get-resource.md", @@ -5998,7 +5998,7 @@ "x-appwrite": { "method": "variables", "group": "console", - "weight": 494, + "weight": 495, "cookies": false, "type": "", "demo": "console\/variables.md", @@ -13331,7 +13331,7 @@ "x-appwrite": { "method": "list", "group": "functions", - "weight": 438, + "weight": 439, "cookies": false, "type": "", "demo": "functions\/list.md", @@ -13416,7 +13416,7 @@ "x-appwrite": { "method": "create", "group": "functions", - "weight": 435, + "weight": 436, "cookies": false, "type": "", "demo": "functions\/create.md", @@ -13711,7 +13711,7 @@ "x-appwrite": { "method": "listRuntimes", "group": "runtimes", - "weight": 440, + "weight": 441, "cookies": false, "type": "", "demo": "functions\/list-runtimes.md", @@ -13761,7 +13761,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "runtimes", - "weight": 441, + "weight": 442, "cookies": false, "type": "", "demo": "functions\/list-specifications.md", @@ -13811,7 +13811,7 @@ "x-appwrite": { "method": "listTemplates", "group": "templates", - "weight": 464, + "weight": 465, "cookies": false, "type": "", "demo": "functions\/list-templates.md", @@ -14003,7 +14003,7 @@ "x-appwrite": { "method": "getTemplate", "group": "templates", - "weight": 463, + "weight": 464, "cookies": false, "type": "", "demo": "functions\/get-template.md", @@ -14063,7 +14063,7 @@ "x-appwrite": { "method": "listUsage", "group": null, - "weight": 457, + "weight": 458, "cookies": false, "type": "", "demo": "functions\/list-usage.md", @@ -14135,7 +14135,7 @@ "x-appwrite": { "method": "get", "group": "functions", - "weight": 436, + "weight": 437, "cookies": false, "type": "", "demo": "functions\/get.md", @@ -14195,7 +14195,7 @@ "x-appwrite": { "method": "update", "group": "functions", - "weight": 437, + "weight": 438, "cookies": false, "type": "", "demo": "functions\/update.md", @@ -14487,7 +14487,7 @@ "x-appwrite": { "method": "delete", "group": "functions", - "weight": 439, + "weight": 440, "cookies": false, "type": "", "demo": "functions\/delete.md", @@ -14549,7 +14549,7 @@ "x-appwrite": { "method": "updateFunctionDeployment", "group": "functions", - "weight": 444, + "weight": 445, "cookies": false, "type": "", "demo": "functions\/update-function-deployment.md", @@ -14630,7 +14630,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 445, + "weight": 446, "cookies": false, "type": "", "demo": "functions\/list-deployments.md", @@ -14725,7 +14725,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 442, + "weight": 443, "cookies": false, "type": "upload", "demo": "functions\/create-deployment.md", @@ -14824,7 +14824,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 450, + "weight": 451, "cookies": false, "type": "", "demo": "functions\/create-duplicate-deployment.md", @@ -14910,7 +14910,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 447, + "weight": 448, "cookies": false, "type": "", "demo": "functions\/create-template-deployment.md", @@ -15027,7 +15027,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 448, + "weight": 449, "cookies": false, "type": "", "demo": "functions\/create-vcs-deployment.md", @@ -15125,7 +15125,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 443, + "weight": 444, "cookies": false, "type": "", "demo": "functions\/get-deployment.md", @@ -15188,7 +15188,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 446, + "weight": 447, "cookies": false, "type": "", "demo": "functions\/delete-deployment.md", @@ -15253,7 +15253,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 449, + "weight": 450, "cookies": false, "type": "location", "demo": "functions\/get-deployment-download.md", @@ -15344,7 +15344,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 451, + "weight": 452, "cookies": false, "type": "", "demo": "functions\/update-deployment-status.md", @@ -15416,7 +15416,7 @@ "x-appwrite": { "method": "listExecutions", "group": "executions", - "weight": 454, + "weight": 455, "cookies": false, "type": "", "demo": "functions\/list-executions.md", @@ -15503,7 +15503,7 @@ "x-appwrite": { "method": "createExecution", "group": "executions", - "weight": 452, + "weight": 453, "cookies": false, "type": "", "demo": "functions\/create-execution.md", @@ -15621,7 +15621,7 @@ "x-appwrite": { "method": "getExecution", "group": "executions", - "weight": 453, + "weight": 454, "cookies": false, "type": "", "demo": "functions\/get-execution.md", @@ -15687,7 +15687,7 @@ "x-appwrite": { "method": "deleteExecution", "group": "executions", - "weight": 455, + "weight": 456, "cookies": false, "type": "", "demo": "functions\/delete-execution.md", @@ -15759,7 +15759,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 456, + "weight": 457, "cookies": false, "type": "", "demo": "functions\/get-usage.md", @@ -15841,7 +15841,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 460, + "weight": 461, "cookies": false, "type": "", "demo": "functions\/list-variables.md", @@ -15901,7 +15901,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 458, + "weight": 459, "cookies": false, "type": "", "demo": "functions\/create-variable.md", @@ -15993,7 +15993,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 459, + "weight": 460, "cookies": false, "type": "", "demo": "functions\/get-variable.md", @@ -16063,7 +16063,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 461, + "weight": 462, "cookies": false, "type": "", "demo": "functions\/update-variable.md", @@ -16157,7 +16157,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 462, + "weight": 463, "cookies": false, "type": "", "demo": "functions\/delete-variable.md", @@ -25324,7 +25324,7 @@ "parameters": [ { "name": "queries", - "description": "Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, teamId", + "description": "Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, teamId, labels", "required": false, "schema": { "type": "array", @@ -27990,6 +27990,88 @@ ] } }, + "\/projects\/{projectId}\/labels": { + "put": { + "summary": "Update project labels", + "operationId": "projectsUpdateLabels", + "tags": [ + "projects" + ], + "description": "Update the project labels by its unique ID. Labels can be used to easily filter projects in an organization.", + "responses": { + "200": { + "description": "Project", + "content": { + "application\/json": { + "schema": { + "$ref": "#\/components\/schemas\/project" + } + } + } + } + }, + "deprecated": false, + "x-appwrite": { + "method": "updateLabels", + "group": "projects", + "weight": 435, + "cookies": false, + "type": "", + "demo": "projects\/update-labels.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "projects.write", + "platforms": [ + "console" + ], + "packaging": false, + "public": true, + "auth": { + "Project": [] + } + }, + "security": [ + { + "Project": [] + } + ], + "parameters": [ + { + "name": "projectId", + "description": "Project unique ID.", + "required": true, + "schema": { + "type": "string", + "x-example": "" + }, + "in": "path" + } + ], + "requestBody": { + "content": { + "application\/json": { + "schema": { + "type": "object", + "properties": { + "labels": { + "type": "array", + "description": "Array of project labels. Replaces the previous labels. Maximum of 1000 labels are allowed, each up to 36 alphanumeric characters long.", + "x-example": null, + "items": { + "type": "string" + } + } + }, + "required": [ + "labels" + ] + } + } + } + } + } + }, "\/projects\/{projectId}\/oauth2": { "patch": { "summary": "Update project OAuth2", @@ -31367,7 +31449,7 @@ "x-appwrite": { "method": "listRules", "group": null, - "weight": 510, + "weight": 511, "cookies": false, "type": "", "demo": "proxy\/list-rules.md", @@ -31452,7 +31534,7 @@ "x-appwrite": { "method": "createAPIRule", "group": null, - "weight": 505, + "weight": 506, "cookies": false, "type": "", "demo": "proxy\/create-api-rule.md", @@ -31519,7 +31601,7 @@ "x-appwrite": { "method": "createFunctionRule", "group": null, - "weight": 507, + "weight": 508, "cookies": false, "type": "", "demo": "proxy\/create-function-rule.md", @@ -31597,7 +31679,7 @@ "x-appwrite": { "method": "createRedirectRule", "group": null, - "weight": 508, + "weight": 509, "cookies": false, "type": "", "demo": "proxy\/create-redirect-rule.md", @@ -31710,7 +31792,7 @@ "x-appwrite": { "method": "createSiteRule", "group": null, - "weight": 506, + "weight": 507, "cookies": false, "type": "", "demo": "proxy\/create-site-rule.md", @@ -31788,7 +31870,7 @@ "x-appwrite": { "method": "getRule", "group": null, - "weight": 509, + "weight": 510, "cookies": false, "type": "", "demo": "proxy\/get-rule.md", @@ -31839,7 +31921,7 @@ "x-appwrite": { "method": "deleteRule", "group": null, - "weight": 511, + "weight": 512, "cookies": false, "type": "", "demo": "proxy\/delete-rule.md", @@ -31899,7 +31981,7 @@ "x-appwrite": { "method": "updateRuleVerification", "group": null, - "weight": 512, + "weight": 513, "cookies": false, "type": "", "demo": "proxy\/update-rule-verification.md", @@ -31959,7 +32041,7 @@ "x-appwrite": { "method": "list", "group": "sites", - "weight": 467, + "weight": 468, "cookies": false, "type": "", "demo": "sites\/list.md", @@ -32044,7 +32126,7 @@ "x-appwrite": { "method": "create", "group": "sites", - "weight": 465, + "weight": 466, "cookies": false, "type": "", "demo": "sites\/create.md", @@ -32297,7 +32379,7 @@ "x-appwrite": { "method": "listFrameworks", "group": "frameworks", - "weight": 470, + "weight": 471, "cookies": false, "type": "", "demo": "sites\/list-frameworks.md", @@ -32347,7 +32429,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "frameworks", - "weight": 493, + "weight": 494, "cookies": false, "type": "", "demo": "sites\/list-specifications.md", @@ -32397,7 +32479,7 @@ "x-appwrite": { "method": "listTemplates", "group": "templates", - "weight": 489, + "weight": 490, "cookies": false, "type": "", "demo": "sites\/list-templates.md", @@ -32526,7 +32608,7 @@ "x-appwrite": { "method": "getTemplate", "group": "templates", - "weight": 490, + "weight": 491, "cookies": false, "type": "", "demo": "sites\/get-template.md", @@ -32586,7 +32668,7 @@ "x-appwrite": { "method": "listUsage", "group": null, - "weight": 491, + "weight": 492, "cookies": false, "type": "", "demo": "sites\/list-usage.md", @@ -32658,7 +32740,7 @@ "x-appwrite": { "method": "get", "group": "sites", - "weight": 466, + "weight": 467, "cookies": false, "type": "", "demo": "sites\/get.md", @@ -32718,7 +32800,7 @@ "x-appwrite": { "method": "update", "group": "sites", - "weight": 468, + "weight": 469, "cookies": false, "type": "", "demo": "sites\/update.md", @@ -32967,7 +33049,7 @@ "x-appwrite": { "method": "delete", "group": "sites", - "weight": 469, + "weight": 470, "cookies": false, "type": "", "demo": "sites\/delete.md", @@ -33029,7 +33111,7 @@ "x-appwrite": { "method": "updateSiteDeployment", "group": "sites", - "weight": 476, + "weight": 477, "cookies": false, "type": "", "demo": "sites\/update-site-deployment.md", @@ -33110,7 +33192,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 475, + "weight": 476, "cookies": false, "type": "", "demo": "sites\/list-deployments.md", @@ -33205,7 +33287,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 471, + "weight": 472, "cookies": false, "type": "upload", "demo": "sites\/create-deployment.md", @@ -33310,7 +33392,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 479, + "weight": 480, "cookies": false, "type": "", "demo": "sites\/create-duplicate-deployment.md", @@ -33391,7 +33473,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 472, + "weight": 473, "cookies": false, "type": "", "demo": "sites\/create-template-deployment.md", @@ -33508,7 +33590,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 473, + "weight": 474, "cookies": false, "type": "", "demo": "sites\/create-vcs-deployment.md", @@ -33607,7 +33689,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 474, + "weight": 475, "cookies": false, "type": "", "demo": "sites\/get-deployment.md", @@ -33670,7 +33752,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 477, + "weight": 478, "cookies": false, "type": "", "demo": "sites\/delete-deployment.md", @@ -33735,7 +33817,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 478, + "weight": 479, "cookies": false, "type": "location", "demo": "sites\/get-deployment-download.md", @@ -33826,7 +33908,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 480, + "weight": 481, "cookies": false, "type": "", "demo": "sites\/update-deployment-status.md", @@ -33898,7 +33980,7 @@ "x-appwrite": { "method": "listLogs", "group": "logs", - "weight": 482, + "weight": 483, "cookies": false, "type": "", "demo": "sites\/list-logs.md", @@ -33984,7 +34066,7 @@ "x-appwrite": { "method": "getLog", "group": "logs", - "weight": 481, + "weight": 482, "cookies": false, "type": "", "demo": "sites\/get-log.md", @@ -34047,7 +34129,7 @@ "x-appwrite": { "method": "deleteLog", "group": "logs", - "weight": 483, + "weight": 484, "cookies": false, "type": "", "demo": "sites\/delete-log.md", @@ -34119,7 +34201,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 492, + "weight": 493, "cookies": false, "type": "", "demo": "sites\/get-usage.md", @@ -34201,7 +34283,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 486, + "weight": 487, "cookies": false, "type": "", "demo": "sites\/list-variables.md", @@ -34261,7 +34343,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 484, + "weight": 485, "cookies": false, "type": "", "demo": "sites\/create-variable.md", @@ -34353,7 +34435,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 485, + "weight": 486, "cookies": false, "type": "", "demo": "sites\/get-variable.md", @@ -34423,7 +34505,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 487, + "weight": 488, "cookies": false, "type": "", "demo": "sites\/update-variable.md", @@ -34517,7 +34599,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 488, + "weight": 489, "cookies": false, "type": "", "demo": "sites\/delete-variable.md", @@ -34589,7 +34671,7 @@ "x-appwrite": { "method": "listBuckets", "group": "buckets", - "weight": 520, + "weight": 521, "cookies": false, "type": "", "demo": "storage\/list-buckets.md", @@ -34675,7 +34757,7 @@ "x-appwrite": { "method": "createBucket", "group": "buckets", - "weight": 518, + "weight": 519, "cookies": false, "type": "", "demo": "storage\/create-bucket.md", @@ -34750,7 +34832,7 @@ }, "compression": { "type": "string", - "description": "Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled", + "description": "Compression algorithm chosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled", "x-example": "none", "enum": [ "none", @@ -34810,7 +34892,7 @@ "x-appwrite": { "method": "getBucket", "group": "buckets", - "weight": 519, + "weight": 520, "cookies": false, "type": "", "demo": "storage\/get-bucket.md", @@ -34871,7 +34953,7 @@ "x-appwrite": { "method": "updateBucket", "group": "buckets", - "weight": 521, + "weight": 522, "cookies": false, "type": "", "demo": "storage\/update-bucket.md", @@ -34953,7 +35035,7 @@ }, "compression": { "type": "string", - "description": "Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled", + "description": "Compression algorithm chosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled", "x-example": "none", "enum": [ "none", @@ -35003,7 +35085,7 @@ "x-appwrite": { "method": "deleteBucket", "group": "buckets", - "weight": 522, + "weight": 523, "cookies": false, "type": "", "demo": "storage\/delete-bucket.md", @@ -35066,7 +35148,7 @@ "x-appwrite": { "method": "listFiles", "group": "files", - "weight": 525, + "weight": 526, "cookies": false, "type": "", "demo": "storage\/list-files.md", @@ -35165,7 +35247,7 @@ "x-appwrite": { "method": "createFile", "group": "files", - "weight": 523, + "weight": 524, "cookies": false, "type": "upload", "demo": "storage\/create-file.md", @@ -35266,7 +35348,7 @@ "x-appwrite": { "method": "getFile", "group": "files", - "weight": 524, + "weight": 525, "cookies": false, "type": "", "demo": "storage\/get-file.md", @@ -35340,7 +35422,7 @@ "x-appwrite": { "method": "updateFile", "group": "files", - "weight": 526, + "weight": 527, "cookies": false, "type": "", "demo": "storage\/update-file.md", @@ -35432,7 +35514,7 @@ "x-appwrite": { "method": "deleteFile", "group": "files", - "weight": 527, + "weight": 528, "cookies": false, "type": "", "demo": "storage\/delete-file.md", @@ -35501,7 +35583,7 @@ "x-appwrite": { "method": "getFileDownload", "group": "files", - "weight": 529, + "weight": 530, "cookies": false, "type": "location", "demo": "storage\/get-file-download.md", @@ -35581,7 +35663,7 @@ "x-appwrite": { "method": "getFilePreview", "group": "files", - "weight": 528, + "weight": 529, "cookies": false, "type": "location", "demo": "storage\/get-file-preview.md", @@ -35811,7 +35893,7 @@ "x-appwrite": { "method": "getFileView", "group": "files", - "weight": 530, + "weight": 531, "cookies": false, "type": "location", "demo": "storage\/get-file-view.md", @@ -35898,7 +35980,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 532, + "weight": 533, "cookies": false, "type": "", "demo": "storage\/get-usage.md", @@ -35971,7 +36053,7 @@ "x-appwrite": { "method": "getBucketUsage", "group": null, - "weight": 533, + "weight": 534, "cookies": false, "type": "", "demo": "storage\/get-bucket-usage.md", @@ -44176,7 +44258,7 @@ "x-appwrite": { "method": "list", "group": "files", - "weight": 515, + "weight": 516, "cookies": false, "type": "", "demo": "tokens\/list.md", @@ -44270,7 +44352,7 @@ "x-appwrite": { "method": "createFileToken", "group": "files", - "weight": 513, + "weight": 514, "cookies": false, "type": "", "demo": "tokens\/create-file-token.md", @@ -44359,7 +44441,7 @@ "x-appwrite": { "method": "get", "group": "tokens", - "weight": 514, + "weight": 515, "cookies": false, "type": "", "demo": "tokens\/get.md", @@ -44419,7 +44501,7 @@ "x-appwrite": { "method": "update", "group": "tokens", - "weight": 516, + "weight": 517, "cookies": false, "type": "", "demo": "tokens\/update.md", @@ -44489,7 +44571,7 @@ "x-appwrite": { "method": "delete", "group": "tokens", - "weight": 517, + "weight": 518, "cookies": false, "type": "", "demo": "tokens\/delete.md", @@ -55069,7 +55151,7 @@ }, "compression": { "type": "string", - "description": "Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).", + "description": "Compression algorithm chosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).", "x-example": "gzip" }, "encryption": { @@ -55086,6 +55168,12 @@ "type": "boolean", "description": "Image transformations are enabled.", "x-example": false + }, + "totalSize": { + "type": "integer", + "description": "Total size of this bucket in bytes.", + "x-example": 128, + "format": "int32" } }, "required": [ @@ -55101,7 +55189,8 @@ "compression", "encryption", "antivirus", - "transformations" + "transformations", + "totalSize" ], "example": { "$id": "5e5ea5c16897e", @@ -55121,7 +55210,8 @@ "compression": "gzip", "encryption": false, "antivirus": false, - "transformations": false + "transformations": false, + "totalSize": 128 } }, "resourceToken": { @@ -57488,6 +57578,16 @@ "description": "Last ping datetime in ISO 8601 format.", "x-example": "2020-10-15T06:38:00.000+00:00" }, + "labels": { + "type": "array", + "description": "Labels for the project.", + "items": { + "type": "string" + }, + "x-example": [ + "vip" + ] + }, "authEmailPassword": { "type": "boolean", "description": "Email\/Password auth method status", @@ -57632,6 +57732,7 @@ "smtpSecure", "pingCount", "pingedAt", + "labels", "authEmailPassword", "authUsersAuthMagicURL", "authEmailOtp", @@ -57700,6 +57801,9 @@ "smtpSecure": "tls", "pingCount": 1, "pingedAt": "2020-10-15T06:38:00.000+00:00", + "labels": [ + "vip" + ], "authEmailPassword": true, "authUsersAuthMagicURL": true, "authEmailOtp": true, @@ -59653,160 +59757,6 @@ "description": "Time range of the usage stats.", "x-example": "30d" }, - "deploymentsTotal": { - "type": "integer", - "description": "Total aggregated number of functions deployments.", - "x-example": 0, - "format": "int32" - }, - "deploymentsStorageTotal": { - "type": "integer", - "description": "Total aggregated sum of functions deployment storage.", - "x-example": 0, - "format": "int32" - }, - "buildsTotal": { - "type": "integer", - "description": "Total aggregated number of functions build.", - "x-example": 0, - "format": "int32" - }, - "buildsStorageTotal": { - "type": "integer", - "description": "total aggregated sum of functions build storage.", - "x-example": 0, - "format": "int32" - }, - "buildsTimeTotal": { - "type": "integer", - "description": "Total aggregated sum of functions build compute time.", - "x-example": 0, - "format": "int32" - }, - "buildsMbSecondsTotal": { - "type": "integer", - "description": "Total aggregated sum of functions build mbSeconds.", - "x-example": 0, - "format": "int32" - }, - "executionsTotal": { - "type": "integer", - "description": "Total aggregated number of functions execution.", - "x-example": 0, - "format": "int32" - }, - "executionsTimeTotal": { - "type": "integer", - "description": "Total aggregated sum of functions execution compute time.", - "x-example": 0, - "format": "int32" - }, - "executionsMbSecondsTotal": { - "type": "integer", - "description": "Total aggregated sum of functions execution mbSeconds.", - "x-example": 0, - "format": "int32" - }, - "deployments": { - "type": "array", - "description": "Aggregated number of functions deployment per period.", - "items": { - "$ref": "#\/components\/schemas\/metric" - }, - "x-example": [] - }, - "deploymentsStorage": { - "type": "array", - "description": "Aggregated number of functions deployment storage per period.", - "items": { - "$ref": "#\/components\/schemas\/metric" - }, - "x-example": [] - }, - "buildsSuccessTotal": { - "type": "integer", - "description": "Total aggregated number of successful function builds.", - "x-example": 0, - "format": "int32" - }, - "buildsFailedTotal": { - "type": "integer", - "description": "Total aggregated number of failed function builds.", - "x-example": 0, - "format": "int32" - }, - "builds": { - "type": "array", - "description": "Aggregated number of functions build per period.", - "items": { - "$ref": "#\/components\/schemas\/metric" - }, - "x-example": [] - }, - "buildsStorage": { - "type": "array", - "description": "Aggregated sum of functions build storage per period.", - "items": { - "$ref": "#\/components\/schemas\/metric" - }, - "x-example": [] - }, - "buildsTime": { - "type": "array", - "description": "Aggregated sum of functions build compute time per period.", - "items": { - "$ref": "#\/components\/schemas\/metric" - }, - "x-example": [] - }, - "buildsMbSeconds": { - "type": "array", - "description": "Aggregated sum of functions build mbSeconds per period.", - "items": { - "$ref": "#\/components\/schemas\/metric" - }, - "x-example": [] - }, - "executions": { - "type": "array", - "description": "Aggregated number of functions execution per period.", - "items": { - "$ref": "#\/components\/schemas\/metric" - }, - "x-example": [] - }, - "executionsTime": { - "type": "array", - "description": "Aggregated number of functions execution compute time per period.", - "items": { - "$ref": "#\/components\/schemas\/metric" - }, - "x-example": [] - }, - "executionsMbSeconds": { - "type": "array", - "description": "Aggregated number of functions mbSeconds per period.", - "items": { - "$ref": "#\/components\/schemas\/metric" - }, - "x-example": [] - }, - "buildsSuccess": { - "type": "array", - "description": "Aggregated number of successful function builds per period.", - "items": { - "$ref": "#\/components\/schemas\/metric" - }, - "x-example": [] - }, - "buildsFailed": { - "type": "array", - "description": "Aggregated number of failed function builds per period.", - "items": { - "$ref": "#\/components\/schemas\/metric" - }, - "x-example": [] - }, "sitesTotal": { "type": "integer", "description": "Total aggregated number of sites.", @@ -59821,6 +59771,60 @@ }, "x-example": [] }, + "deploymentsTotal": { + "type": "integer", + "description": "Total aggregated number of sites deployments.", + "x-example": 0, + "format": "int32" + }, + "deploymentsStorageTotal": { + "type": "integer", + "description": "Total aggregated sum of sites deployment storage.", + "x-example": 0, + "format": "int32" + }, + "buildsTotal": { + "type": "integer", + "description": "Total aggregated number of sites build.", + "x-example": 0, + "format": "int32" + }, + "buildsStorageTotal": { + "type": "integer", + "description": "total aggregated sum of sites build storage.", + "x-example": 0, + "format": "int32" + }, + "buildsTimeTotal": { + "type": "integer", + "description": "Total aggregated sum of sites build compute time.", + "x-example": 0, + "format": "int32" + }, + "buildsMbSecondsTotal": { + "type": "integer", + "description": "Total aggregated sum of sites build mbSeconds.", + "x-example": 0, + "format": "int32" + }, + "executionsTotal": { + "type": "integer", + "description": "Total aggregated number of sites execution.", + "x-example": 0, + "format": "int32" + }, + "executionsTimeTotal": { + "type": "integer", + "description": "Total aggregated sum of sites execution compute time.", + "x-example": 0, + "format": "int32" + }, + "executionsMbSecondsTotal": { + "type": "integer", + "description": "Total aggregated sum of sites execution mbSeconds.", + "x-example": 0, + "format": "int32" + }, "requestsTotal": { "type": "integer", "description": "Total aggregated number of requests.", @@ -59862,10 +59866,112 @@ "$ref": "#\/components\/schemas\/metric" }, "x-example": [] + }, + "deployments": { + "type": "array", + "description": "Aggregated number of sites deployment per period.", + "items": { + "$ref": "#\/components\/schemas\/metric" + }, + "x-example": [] + }, + "deploymentsStorage": { + "type": "array", + "description": "Aggregated number of sites deployment storage per period.", + "items": { + "$ref": "#\/components\/schemas\/metric" + }, + "x-example": [] + }, + "buildsSuccessTotal": { + "type": "integer", + "description": "Total aggregated number of successful site builds.", + "x-example": 0, + "format": "int32" + }, + "buildsFailedTotal": { + "type": "integer", + "description": "Total aggregated number of failed site builds.", + "x-example": 0, + "format": "int32" + }, + "builds": { + "type": "array", + "description": "Aggregated number of sites build per period.", + "items": { + "$ref": "#\/components\/schemas\/metric" + }, + "x-example": [] + }, + "buildsStorage": { + "type": "array", + "description": "Aggregated sum of sites build storage per period.", + "items": { + "$ref": "#\/components\/schemas\/metric" + }, + "x-example": [] + }, + "buildsTime": { + "type": "array", + "description": "Aggregated sum of sites build compute time per period.", + "items": { + "$ref": "#\/components\/schemas\/metric" + }, + "x-example": [] + }, + "buildsMbSeconds": { + "type": "array", + "description": "Aggregated sum of sites build mbSeconds per period.", + "items": { + "$ref": "#\/components\/schemas\/metric" + }, + "x-example": [] + }, + "executions": { + "type": "array", + "description": "Aggregated number of sites execution per period.", + "items": { + "$ref": "#\/components\/schemas\/metric" + }, + "x-example": [] + }, + "executionsTime": { + "type": "array", + "description": "Aggregated number of sites execution compute time per period.", + "items": { + "$ref": "#\/components\/schemas\/metric" + }, + "x-example": [] + }, + "executionsMbSeconds": { + "type": "array", + "description": "Aggregated number of sites mbSeconds per period.", + "items": { + "$ref": "#\/components\/schemas\/metric" + }, + "x-example": [] + }, + "buildsSuccess": { + "type": "array", + "description": "Aggregated number of successful site builds per period.", + "items": { + "$ref": "#\/components\/schemas\/metric" + }, + "x-example": [] + }, + "buildsFailed": { + "type": "array", + "description": "Aggregated number of failed site builds per period.", + "items": { + "$ref": "#\/components\/schemas\/metric" + }, + "x-example": [] } }, "required": [ "range", + "sitesTotal", + "sites", "deploymentsTotal", "deploymentsStorageTotal", "buildsTotal", @@ -59875,6 +59981,12 @@ "executionsTotal", "executionsTimeTotal", "executionsMbSecondsTotal", + "requestsTotal", + "requests", + "inboundTotal", + "inbound", + "outboundTotal", + "outbound", "deployments", "deploymentsStorage", "buildsSuccessTotal", @@ -59887,18 +59999,12 @@ "executionsTime", "executionsMbSeconds", "buildsSuccess", - "buildsFailed", - "sitesTotal", - "sites", - "requestsTotal", - "requests", - "inboundTotal", - "inbound", - "outboundTotal", - "outbound" + "buildsFailed" ], "example": { "range": "30d", + "sitesTotal": 0, + "sites": [], "deploymentsTotal": 0, "deploymentsStorageTotal": 0, "buildsTotal": 0, @@ -59908,6 +60014,12 @@ "executionsTotal": 0, "executionsTimeTotal": 0, "executionsMbSecondsTotal": 0, + "requestsTotal": 0, + "requests": [], + "inboundTotal": 0, + "inbound": [], + "outboundTotal": 0, + "outbound": [], "deployments": [], "deploymentsStorage": [], "buildsSuccessTotal": 0, @@ -59920,15 +60032,7 @@ "executionsTime": [], "executionsMbSeconds": [], "buildsSuccess": [], - "buildsFailed": [], - "sitesTotal": 0, - "sites": [], - "requestsTotal": 0, - "requests": [], - "inboundTotal": 0, - "inbound": [], - "outboundTotal": 0, - "outbound": [] + "buildsFailed": [] } }, "usageSite": { diff --git a/app/config/specs/open-api3-latest-server.json b/app/config/specs/open-api3-latest-server.json index 2a0081b378..70e8b895ce 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.8.0", + "version": "1.8.1", "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", @@ -12355,7 +12355,7 @@ "x-appwrite": { "method": "list", "group": "functions", - "weight": 438, + "weight": 439, "cookies": false, "type": "", "demo": "functions\/list.md", @@ -12441,7 +12441,7 @@ "x-appwrite": { "method": "create", "group": "functions", - "weight": 435, + "weight": 436, "cookies": false, "type": "", "demo": "functions\/create.md", @@ -12737,7 +12737,7 @@ "x-appwrite": { "method": "listRuntimes", "group": "runtimes", - "weight": 440, + "weight": 441, "cookies": false, "type": "", "demo": "functions\/list-runtimes.md", @@ -12788,7 +12788,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "runtimes", - "weight": 441, + "weight": 442, "cookies": false, "type": "", "demo": "functions\/list-specifications.md", @@ -12839,7 +12839,7 @@ "x-appwrite": { "method": "get", "group": "functions", - "weight": 436, + "weight": 437, "cookies": false, "type": "", "demo": "functions\/get.md", @@ -12900,7 +12900,7 @@ "x-appwrite": { "method": "update", "group": "functions", - "weight": 437, + "weight": 438, "cookies": false, "type": "", "demo": "functions\/update.md", @@ -13193,7 +13193,7 @@ "x-appwrite": { "method": "delete", "group": "functions", - "weight": 439, + "weight": 440, "cookies": false, "type": "", "demo": "functions\/delete.md", @@ -13256,7 +13256,7 @@ "x-appwrite": { "method": "updateFunctionDeployment", "group": "functions", - "weight": 444, + "weight": 445, "cookies": false, "type": "", "demo": "functions\/update-function-deployment.md", @@ -13338,7 +13338,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 445, + "weight": 446, "cookies": false, "type": "", "demo": "functions\/list-deployments.md", @@ -13434,7 +13434,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 442, + "weight": 443, "cookies": false, "type": "upload", "demo": "functions\/create-deployment.md", @@ -13534,7 +13534,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 450, + "weight": 451, "cookies": false, "type": "", "demo": "functions\/create-duplicate-deployment.md", @@ -13621,7 +13621,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 447, + "weight": 448, "cookies": false, "type": "", "demo": "functions\/create-template-deployment.md", @@ -13739,7 +13739,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 448, + "weight": 449, "cookies": false, "type": "", "demo": "functions\/create-vcs-deployment.md", @@ -13838,7 +13838,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 443, + "weight": 444, "cookies": false, "type": "", "demo": "functions\/get-deployment.md", @@ -13902,7 +13902,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 446, + "weight": 447, "cookies": false, "type": "", "demo": "functions\/delete-deployment.md", @@ -13968,7 +13968,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 449, + "weight": 450, "cookies": false, "type": "location", "demo": "functions\/get-deployment-download.md", @@ -14060,7 +14060,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 451, + "weight": 452, "cookies": false, "type": "", "demo": "functions\/update-deployment-status.md", @@ -14133,7 +14133,7 @@ "x-appwrite": { "method": "listExecutions", "group": "executions", - "weight": 454, + "weight": 455, "cookies": false, "type": "", "demo": "functions\/list-executions.md", @@ -14222,7 +14222,7 @@ "x-appwrite": { "method": "createExecution", "group": "executions", - "weight": 452, + "weight": 453, "cookies": false, "type": "", "demo": "functions\/create-execution.md", @@ -14342,7 +14342,7 @@ "x-appwrite": { "method": "getExecution", "group": "executions", - "weight": 453, + "weight": 454, "cookies": false, "type": "", "demo": "functions\/get-execution.md", @@ -14410,7 +14410,7 @@ "x-appwrite": { "method": "deleteExecution", "group": "executions", - "weight": 455, + "weight": 456, "cookies": false, "type": "", "demo": "functions\/delete-execution.md", @@ -14483,7 +14483,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 460, + "weight": 461, "cookies": false, "type": "", "demo": "functions\/list-variables.md", @@ -14544,7 +14544,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 458, + "weight": 459, "cookies": false, "type": "", "demo": "functions\/create-variable.md", @@ -14637,7 +14637,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 459, + "weight": 460, "cookies": false, "type": "", "demo": "functions\/get-variable.md", @@ -14708,7 +14708,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 461, + "weight": 462, "cookies": false, "type": "", "demo": "functions\/update-variable.md", @@ -14803,7 +14803,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 462, + "weight": 463, "cookies": false, "type": "", "demo": "functions\/delete-variable.md", @@ -22240,7 +22240,7 @@ "x-appwrite": { "method": "list", "group": "sites", - "weight": 467, + "weight": 468, "cookies": false, "type": "", "demo": "sites\/list.md", @@ -22326,7 +22326,7 @@ "x-appwrite": { "method": "create", "group": "sites", - "weight": 465, + "weight": 466, "cookies": false, "type": "", "demo": "sites\/create.md", @@ -22580,7 +22580,7 @@ "x-appwrite": { "method": "listFrameworks", "group": "frameworks", - "weight": 470, + "weight": 471, "cookies": false, "type": "", "demo": "sites\/list-frameworks.md", @@ -22631,7 +22631,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "frameworks", - "weight": 493, + "weight": 494, "cookies": false, "type": "", "demo": "sites\/list-specifications.md", @@ -22682,7 +22682,7 @@ "x-appwrite": { "method": "get", "group": "sites", - "weight": 466, + "weight": 467, "cookies": false, "type": "", "demo": "sites\/get.md", @@ -22743,7 +22743,7 @@ "x-appwrite": { "method": "update", "group": "sites", - "weight": 468, + "weight": 469, "cookies": false, "type": "", "demo": "sites\/update.md", @@ -22993,7 +22993,7 @@ "x-appwrite": { "method": "delete", "group": "sites", - "weight": 469, + "weight": 470, "cookies": false, "type": "", "demo": "sites\/delete.md", @@ -23056,7 +23056,7 @@ "x-appwrite": { "method": "updateSiteDeployment", "group": "sites", - "weight": 476, + "weight": 477, "cookies": false, "type": "", "demo": "sites\/update-site-deployment.md", @@ -23138,7 +23138,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 475, + "weight": 476, "cookies": false, "type": "", "demo": "sites\/list-deployments.md", @@ -23234,7 +23234,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 471, + "weight": 472, "cookies": false, "type": "upload", "demo": "sites\/create-deployment.md", @@ -23340,7 +23340,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 479, + "weight": 480, "cookies": false, "type": "", "demo": "sites\/create-duplicate-deployment.md", @@ -23422,7 +23422,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 472, + "weight": 473, "cookies": false, "type": "", "demo": "sites\/create-template-deployment.md", @@ -23540,7 +23540,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 473, + "weight": 474, "cookies": false, "type": "", "demo": "sites\/create-vcs-deployment.md", @@ -23640,7 +23640,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 474, + "weight": 475, "cookies": false, "type": "", "demo": "sites\/get-deployment.md", @@ -23704,7 +23704,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 477, + "weight": 478, "cookies": false, "type": "", "demo": "sites\/delete-deployment.md", @@ -23770,7 +23770,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 478, + "weight": 479, "cookies": false, "type": "location", "demo": "sites\/get-deployment-download.md", @@ -23862,7 +23862,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 480, + "weight": 481, "cookies": false, "type": "", "demo": "sites\/update-deployment-status.md", @@ -23935,7 +23935,7 @@ "x-appwrite": { "method": "listLogs", "group": "logs", - "weight": 482, + "weight": 483, "cookies": false, "type": "", "demo": "sites\/list-logs.md", @@ -24022,7 +24022,7 @@ "x-appwrite": { "method": "getLog", "group": "logs", - "weight": 481, + "weight": 482, "cookies": false, "type": "", "demo": "sites\/get-log.md", @@ -24086,7 +24086,7 @@ "x-appwrite": { "method": "deleteLog", "group": "logs", - "weight": 483, + "weight": 484, "cookies": false, "type": "", "demo": "sites\/delete-log.md", @@ -24159,7 +24159,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 486, + "weight": 487, "cookies": false, "type": "", "demo": "sites\/list-variables.md", @@ -24220,7 +24220,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 484, + "weight": 485, "cookies": false, "type": "", "demo": "sites\/create-variable.md", @@ -24313,7 +24313,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 485, + "weight": 486, "cookies": false, "type": "", "demo": "sites\/get-variable.md", @@ -24384,7 +24384,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 487, + "weight": 488, "cookies": false, "type": "", "demo": "sites\/update-variable.md", @@ -24479,7 +24479,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 488, + "weight": 489, "cookies": false, "type": "", "demo": "sites\/delete-variable.md", @@ -24552,7 +24552,7 @@ "x-appwrite": { "method": "listBuckets", "group": "buckets", - "weight": 520, + "weight": 521, "cookies": false, "type": "", "demo": "storage\/list-buckets.md", @@ -24639,7 +24639,7 @@ "x-appwrite": { "method": "createBucket", "group": "buckets", - "weight": 518, + "weight": 519, "cookies": false, "type": "", "demo": "storage\/create-bucket.md", @@ -24715,7 +24715,7 @@ }, "compression": { "type": "string", - "description": "Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled", + "description": "Compression algorithm chosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled", "x-example": "none", "enum": [ "none", @@ -24775,7 +24775,7 @@ "x-appwrite": { "method": "getBucket", "group": "buckets", - "weight": 519, + "weight": 520, "cookies": false, "type": "", "demo": "storage\/get-bucket.md", @@ -24837,7 +24837,7 @@ "x-appwrite": { "method": "updateBucket", "group": "buckets", - "weight": 521, + "weight": 522, "cookies": false, "type": "", "demo": "storage\/update-bucket.md", @@ -24920,7 +24920,7 @@ }, "compression": { "type": "string", - "description": "Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled", + "description": "Compression algorithm chosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled", "x-example": "none", "enum": [ "none", @@ -24970,7 +24970,7 @@ "x-appwrite": { "method": "deleteBucket", "group": "buckets", - "weight": 522, + "weight": 523, "cookies": false, "type": "", "demo": "storage\/delete-bucket.md", @@ -25034,7 +25034,7 @@ "x-appwrite": { "method": "listFiles", "group": "files", - "weight": 525, + "weight": 526, "cookies": false, "type": "", "demo": "storage\/list-files.md", @@ -25135,7 +25135,7 @@ "x-appwrite": { "method": "createFile", "group": "files", - "weight": 523, + "weight": 524, "cookies": false, "type": "upload", "demo": "storage\/create-file.md", @@ -25238,7 +25238,7 @@ "x-appwrite": { "method": "getFile", "group": "files", - "weight": 524, + "weight": 525, "cookies": false, "type": "", "demo": "storage\/get-file.md", @@ -25314,7 +25314,7 @@ "x-appwrite": { "method": "updateFile", "group": "files", - "weight": 526, + "weight": 527, "cookies": false, "type": "", "demo": "storage\/update-file.md", @@ -25408,7 +25408,7 @@ "x-appwrite": { "method": "deleteFile", "group": "files", - "weight": 527, + "weight": 528, "cookies": false, "type": "", "demo": "storage\/delete-file.md", @@ -25479,7 +25479,7 @@ "x-appwrite": { "method": "getFileDownload", "group": "files", - "weight": 529, + "weight": 530, "cookies": false, "type": "location", "demo": "storage\/get-file-download.md", @@ -25561,7 +25561,7 @@ "x-appwrite": { "method": "getFilePreview", "group": "files", - "weight": 528, + "weight": 529, "cookies": false, "type": "location", "demo": "storage\/get-file-preview.md", @@ -25793,7 +25793,7 @@ "x-appwrite": { "method": "getFileView", "group": "files", - "weight": 530, + "weight": 531, "cookies": false, "type": "location", "demo": "storage\/get-file-view.md", @@ -33532,7 +33532,7 @@ "x-appwrite": { "method": "list", "group": "files", - "weight": 515, + "weight": 516, "cookies": false, "type": "", "demo": "tokens\/list.md", @@ -33627,7 +33627,7 @@ "x-appwrite": { "method": "createFileToken", "group": "files", - "weight": 513, + "weight": 514, "cookies": false, "type": "", "demo": "tokens\/create-file-token.md", @@ -33717,7 +33717,7 @@ "x-appwrite": { "method": "get", "group": "tokens", - "weight": 514, + "weight": 515, "cookies": false, "type": "", "demo": "tokens\/get.md", @@ -33778,7 +33778,7 @@ "x-appwrite": { "method": "update", "group": "tokens", - "weight": 516, + "weight": 517, "cookies": false, "type": "", "demo": "tokens\/update.md", @@ -33849,7 +33849,7 @@ "x-appwrite": { "method": "delete", "group": "tokens", - "weight": 517, + "weight": 518, "cookies": false, "type": "", "demo": "tokens\/delete.md", @@ -43220,7 +43220,7 @@ }, "compression": { "type": "string", - "description": "Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).", + "description": "Compression algorithm chosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).", "x-example": "gzip" }, "encryption": { @@ -43237,6 +43237,12 @@ "type": "boolean", "description": "Image transformations are enabled.", "x-example": false + }, + "totalSize": { + "type": "integer", + "description": "Total size of this bucket in bytes.", + "x-example": 128, + "format": "int32" } }, "required": [ @@ -43252,7 +43258,8 @@ "compression", "encryption", "antivirus", - "transformations" + "transformations", + "totalSize" ], "example": { "$id": "5e5ea5c16897e", @@ -43272,7 +43279,8 @@ "compression": "gzip", "encryption": false, "antivirus": false, - "transformations": false + "transformations": false, + "totalSize": 128 } }, "resourceToken": { diff --git a/app/config/specs/swagger2-latest-client.json b/app/config/specs/swagger2-latest-client.json index e11d5053a4..07889bba5e 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.8.0", + "version": "1.8.1", "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", @@ -7375,7 +7375,7 @@ "x-appwrite": { "method": "listExecutions", "group": "executions", - "weight": 454, + "weight": 455, "cookies": false, "type": "", "demo": "functions\/list-executions.md", @@ -7458,7 +7458,7 @@ "x-appwrite": { "method": "createExecution", "group": "executions", - "weight": 452, + "weight": 453, "cookies": false, "type": "", "demo": "functions\/create-execution.md", @@ -7577,7 +7577,7 @@ "x-appwrite": { "method": "getExecution", "group": "executions", - "weight": 453, + "weight": 454, "cookies": false, "type": "", "demo": "functions\/get-execution.md", @@ -8379,7 +8379,7 @@ "x-appwrite": { "method": "listFiles", "group": "files", - "weight": 525, + "weight": 526, "cookies": false, "type": "", "demo": "storage\/list-files.md", @@ -8472,7 +8472,7 @@ "x-appwrite": { "method": "createFile", "group": "files", - "weight": 523, + "weight": 524, "cookies": false, "type": "upload", "demo": "storage\/create-file.md", @@ -8563,7 +8563,7 @@ "x-appwrite": { "method": "getFile", "group": "files", - "weight": 524, + "weight": 525, "cookies": false, "type": "", "demo": "storage\/get-file.md", @@ -8634,7 +8634,7 @@ "x-appwrite": { "method": "updateFile", "group": "files", - "weight": 526, + "weight": 527, "cookies": false, "type": "", "demo": "storage\/update-file.md", @@ -8725,7 +8725,7 @@ "x-appwrite": { "method": "deleteFile", "group": "files", - "weight": 527, + "weight": 528, "cookies": false, "type": "", "demo": "storage\/delete-file.md", @@ -8796,7 +8796,7 @@ "x-appwrite": { "method": "getFileDownload", "group": "files", - "weight": 529, + "weight": 530, "cookies": false, "type": "location", "demo": "storage\/get-file-download.md", @@ -8876,7 +8876,7 @@ "x-appwrite": { "method": "getFilePreview", "group": "files", - "weight": 528, + "weight": 529, "cookies": false, "type": "location", "demo": "storage\/get-file-preview.md", @@ -9084,7 +9084,7 @@ "x-appwrite": { "method": "getFileView", "group": "files", - "weight": 530, + "weight": 531, "cookies": false, "type": "location", "demo": "storage\/get-file-view.md", diff --git a/app/config/specs/swagger2-latest-console.json b/app/config/specs/swagger2-latest-console.json index 21f8513e16..4b384cae76 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.8.0", + "version": "1.8.1", "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", @@ -5993,7 +5993,7 @@ "x-appwrite": { "method": "chat", "group": "console", - "weight": 495, + "weight": 496, "cookies": false, "type": "", "demo": "assistant\/chat.md", @@ -6057,7 +6057,7 @@ "x-appwrite": { "method": "getResource", "group": null, - "weight": 496, + "weight": 497, "cookies": false, "type": "", "demo": "console\/get-resource.md", @@ -6128,7 +6128,7 @@ "x-appwrite": { "method": "variables", "group": "console", - "weight": 494, + "weight": 495, "cookies": false, "type": "", "demo": "console\/variables.md", @@ -13275,7 +13275,7 @@ "x-appwrite": { "method": "list", "group": "functions", - "weight": 438, + "weight": 439, "cookies": false, "type": "", "demo": "functions\/list.md", @@ -13357,7 +13357,7 @@ "x-appwrite": { "method": "create", "group": "functions", - "weight": 435, + "weight": 436, "cookies": false, "type": "", "demo": "functions\/create.md", @@ -13670,7 +13670,7 @@ "x-appwrite": { "method": "listRuntimes", "group": "runtimes", - "weight": 440, + "weight": 441, "cookies": false, "type": "", "demo": "functions\/list-runtimes.md", @@ -13720,7 +13720,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "runtimes", - "weight": 441, + "weight": 442, "cookies": false, "type": "", "demo": "functions\/list-specifications.md", @@ -13770,7 +13770,7 @@ "x-appwrite": { "method": "listTemplates", "group": "templates", - "weight": 464, + "weight": 465, "cookies": false, "type": "", "demo": "functions\/list-templates.md", @@ -13954,7 +13954,7 @@ "x-appwrite": { "method": "getTemplate", "group": "templates", - "weight": 463, + "weight": 464, "cookies": false, "type": "", "demo": "functions\/get-template.md", @@ -14012,7 +14012,7 @@ "x-appwrite": { "method": "listUsage", "group": null, - "weight": 457, + "weight": 458, "cookies": false, "type": "", "demo": "functions\/list-usage.md", @@ -14082,7 +14082,7 @@ "x-appwrite": { "method": "get", "group": "functions", - "weight": 436, + "weight": 437, "cookies": false, "type": "", "demo": "functions\/get.md", @@ -14142,7 +14142,7 @@ "x-appwrite": { "method": "update", "group": "functions", - "weight": 437, + "weight": 438, "cookies": false, "type": "", "demo": "functions\/update.md", @@ -14451,7 +14451,7 @@ "x-appwrite": { "method": "delete", "group": "functions", - "weight": 439, + "weight": 440, "cookies": false, "type": "", "demo": "functions\/delete.md", @@ -14513,7 +14513,7 @@ "x-appwrite": { "method": "updateFunctionDeployment", "group": "functions", - "weight": 444, + "weight": 445, "cookies": false, "type": "", "demo": "functions\/update-function-deployment.md", @@ -14591,7 +14591,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 445, + "weight": 446, "cookies": false, "type": "", "demo": "functions\/list-deployments.md", @@ -14681,7 +14681,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 442, + "weight": 443, "cookies": false, "type": "upload", "demo": "functions\/create-deployment.md", @@ -14774,7 +14774,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 450, + "weight": 451, "cookies": false, "type": "", "demo": "functions\/create-duplicate-deployment.md", @@ -14860,7 +14860,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 447, + "weight": 448, "cookies": false, "type": "", "demo": "functions\/create-template-deployment.md", @@ -14981,7 +14981,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 448, + "weight": 449, "cookies": false, "type": "", "demo": "functions\/create-vcs-deployment.md", @@ -15078,7 +15078,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 443, + "weight": 444, "cookies": false, "type": "", "demo": "functions\/get-deployment.md", @@ -15141,7 +15141,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 446, + "weight": 447, "cookies": false, "type": "", "demo": "functions\/delete-deployment.md", @@ -15209,7 +15209,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 449, + "weight": 450, "cookies": false, "type": "location", "demo": "functions\/get-deployment-download.md", @@ -15295,7 +15295,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 451, + "weight": 452, "cookies": false, "type": "", "demo": "functions\/update-deployment-status.md", @@ -15363,7 +15363,7 @@ "x-appwrite": { "method": "listExecutions", "group": "executions", - "weight": 454, + "weight": 455, "cookies": false, "type": "", "demo": "functions\/list-executions.md", @@ -15446,7 +15446,7 @@ "x-appwrite": { "method": "createExecution", "group": "executions", - "weight": 452, + "weight": 453, "cookies": false, "type": "", "demo": "functions\/create-execution.md", @@ -15565,7 +15565,7 @@ "x-appwrite": { "method": "getExecution", "group": "executions", - "weight": 453, + "weight": 454, "cookies": false, "type": "", "demo": "functions\/get-execution.md", @@ -15630,7 +15630,7 @@ "x-appwrite": { "method": "deleteExecution", "group": "executions", - "weight": 455, + "weight": 456, "cookies": false, "type": "", "demo": "functions\/delete-execution.md", @@ -15698,7 +15698,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 456, + "weight": 457, "cookies": false, "type": "", "demo": "functions\/get-usage.md", @@ -15776,7 +15776,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 460, + "weight": 461, "cookies": false, "type": "", "demo": "functions\/list-variables.md", @@ -15836,7 +15836,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 458, + "weight": 459, "cookies": false, "type": "", "demo": "functions\/create-variable.md", @@ -15927,7 +15927,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 459, + "weight": 460, "cookies": false, "type": "", "demo": "functions\/get-variable.md", @@ -15995,7 +15995,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 461, + "weight": 462, "cookies": false, "type": "", "demo": "functions\/update-variable.md", @@ -16090,7 +16090,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 462, + "weight": 463, "cookies": false, "type": "", "demo": "functions\/delete-variable.md", @@ -25438,7 +25438,7 @@ "parameters": [ { "name": "queries", - "description": "Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, teamId", + "description": "Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https:\/\/appwrite.io\/docs\/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: name, teamId, labels", "required": false, "type": "array", "collectionFormat": "multi", @@ -28093,6 +28093,87 @@ ] } }, + "\/projects\/{projectId}\/labels": { + "put": { + "summary": "Update project labels", + "operationId": "projectsUpdateLabels", + "consumes": [ + "application\/json" + ], + "produces": [ + "application\/json" + ], + "tags": [ + "projects" + ], + "description": "Update the project labels by its unique ID. Labels can be used to easily filter projects in an organization.", + "responses": { + "200": { + "description": "Project", + "schema": { + "$ref": "#\/definitions\/project" + } + } + }, + "deprecated": false, + "x-appwrite": { + "method": "updateLabels", + "group": "projects", + "weight": 435, + "cookies": false, + "type": "", + "demo": "projects\/update-labels.md", + "rate-limit": 0, + "rate-time": 3600, + "rate-key": "url:{url},ip:{ip}", + "scope": "projects.write", + "platforms": [ + "console" + ], + "packaging": false, + "public": true, + "auth": { + "Project": [] + } + }, + "security": [ + { + "Project": [] + } + ], + "parameters": [ + { + "name": "projectId", + "description": "Project unique ID.", + "required": true, + "type": "string", + "x-example": "", + "in": "path" + }, + { + "name": "payload", + "in": "body", + "schema": { + "type": "object", + "properties": { + "labels": { + "type": "array", + "description": "Array of project labels. Replaces the previous labels. Maximum of 1000 labels are allowed, each up to 36 alphanumeric characters long.", + "default": null, + "x-example": null, + "items": { + "type": "string" + } + } + }, + "required": [ + "labels" + ] + } + } + ] + } + }, "\/projects\/{projectId}\/oauth2": { "patch": { "summary": "Update project OAuth2", @@ -31455,7 +31536,7 @@ "x-appwrite": { "method": "listRules", "group": null, - "weight": 510, + "weight": 511, "cookies": false, "type": "", "demo": "proxy\/list-rules.md", @@ -31537,7 +31618,7 @@ "x-appwrite": { "method": "createAPIRule", "group": null, - "weight": 505, + "weight": 506, "cookies": false, "type": "", "demo": "proxy\/create-api-rule.md", @@ -31607,7 +31688,7 @@ "x-appwrite": { "method": "createFunctionRule", "group": null, - "weight": 507, + "weight": 508, "cookies": false, "type": "", "demo": "proxy\/create-function-rule.md", @@ -31690,7 +31771,7 @@ "x-appwrite": { "method": "createRedirectRule", "group": null, - "weight": 508, + "weight": 509, "cookies": false, "type": "", "demo": "proxy\/create-redirect-rule.md", @@ -31810,7 +31891,7 @@ "x-appwrite": { "method": "createSiteRule", "group": null, - "weight": 506, + "weight": 507, "cookies": false, "type": "", "demo": "proxy\/create-site-rule.md", @@ -31891,7 +31972,7 @@ "x-appwrite": { "method": "getRule", "group": null, - "weight": 509, + "weight": 510, "cookies": false, "type": "", "demo": "proxy\/get-rule.md", @@ -31944,7 +32025,7 @@ "x-appwrite": { "method": "deleteRule", "group": null, - "weight": 511, + "weight": 512, "cookies": false, "type": "", "demo": "proxy\/delete-rule.md", @@ -32004,7 +32085,7 @@ "x-appwrite": { "method": "updateRuleVerification", "group": null, - "weight": 512, + "weight": 513, "cookies": false, "type": "", "demo": "proxy\/update-rule-verification.md", @@ -32062,7 +32143,7 @@ "x-appwrite": { "method": "list", "group": "sites", - "weight": 467, + "weight": 468, "cookies": false, "type": "", "demo": "sites\/list.md", @@ -32144,7 +32225,7 @@ "x-appwrite": { "method": "create", "group": "sites", - "weight": 465, + "weight": 466, "cookies": false, "type": "", "demo": "sites\/create.md", @@ -32415,7 +32496,7 @@ "x-appwrite": { "method": "listFrameworks", "group": "frameworks", - "weight": 470, + "weight": 471, "cookies": false, "type": "", "demo": "sites\/list-frameworks.md", @@ -32465,7 +32546,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "frameworks", - "weight": 493, + "weight": 494, "cookies": false, "type": "", "demo": "sites\/list-specifications.md", @@ -32515,7 +32596,7 @@ "x-appwrite": { "method": "listTemplates", "group": "templates", - "weight": 489, + "weight": 490, "cookies": false, "type": "", "demo": "sites\/list-templates.md", @@ -32638,7 +32719,7 @@ "x-appwrite": { "method": "getTemplate", "group": "templates", - "weight": 490, + "weight": 491, "cookies": false, "type": "", "demo": "sites\/get-template.md", @@ -32696,7 +32777,7 @@ "x-appwrite": { "method": "listUsage", "group": null, - "weight": 491, + "weight": 492, "cookies": false, "type": "", "demo": "sites\/list-usage.md", @@ -32766,7 +32847,7 @@ "x-appwrite": { "method": "get", "group": "sites", - "weight": 466, + "weight": 467, "cookies": false, "type": "", "demo": "sites\/get.md", @@ -32826,7 +32907,7 @@ "x-appwrite": { "method": "update", "group": "sites", - "weight": 468, + "weight": 469, "cookies": false, "type": "", "demo": "sites\/update.md", @@ -33092,7 +33173,7 @@ "x-appwrite": { "method": "delete", "group": "sites", - "weight": 469, + "weight": 470, "cookies": false, "type": "", "demo": "sites\/delete.md", @@ -33154,7 +33235,7 @@ "x-appwrite": { "method": "updateSiteDeployment", "group": "sites", - "weight": 476, + "weight": 477, "cookies": false, "type": "", "demo": "sites\/update-site-deployment.md", @@ -33232,7 +33313,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 475, + "weight": 476, "cookies": false, "type": "", "demo": "sites\/list-deployments.md", @@ -33322,7 +33403,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 471, + "weight": 472, "cookies": false, "type": "upload", "demo": "sites\/create-deployment.md", @@ -33423,7 +33504,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 479, + "weight": 480, "cookies": false, "type": "", "demo": "sites\/create-duplicate-deployment.md", @@ -33503,7 +33584,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 472, + "weight": 473, "cookies": false, "type": "", "demo": "sites\/create-template-deployment.md", @@ -33624,7 +33705,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 473, + "weight": 474, "cookies": false, "type": "", "demo": "sites\/create-vcs-deployment.md", @@ -33722,7 +33803,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 474, + "weight": 475, "cookies": false, "type": "", "demo": "sites\/get-deployment.md", @@ -33785,7 +33866,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 477, + "weight": 478, "cookies": false, "type": "", "demo": "sites\/delete-deployment.md", @@ -33853,7 +33934,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 478, + "weight": 479, "cookies": false, "type": "location", "demo": "sites\/get-deployment-download.md", @@ -33939,7 +34020,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 480, + "weight": 481, "cookies": false, "type": "", "demo": "sites\/update-deployment-status.md", @@ -34007,7 +34088,7 @@ "x-appwrite": { "method": "listLogs", "group": "logs", - "weight": 482, + "weight": 483, "cookies": false, "type": "", "demo": "sites\/list-logs.md", @@ -34088,7 +34169,7 @@ "x-appwrite": { "method": "getLog", "group": "logs", - "weight": 481, + "weight": 482, "cookies": false, "type": "", "demo": "sites\/get-log.md", @@ -34153,7 +34234,7 @@ "x-appwrite": { "method": "deleteLog", "group": "logs", - "weight": 483, + "weight": 484, "cookies": false, "type": "", "demo": "sites\/delete-log.md", @@ -34221,7 +34302,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 492, + "weight": 493, "cookies": false, "type": "", "demo": "sites\/get-usage.md", @@ -34299,7 +34380,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 486, + "weight": 487, "cookies": false, "type": "", "demo": "sites\/list-variables.md", @@ -34359,7 +34440,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 484, + "weight": 485, "cookies": false, "type": "", "demo": "sites\/create-variable.md", @@ -34450,7 +34531,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 485, + "weight": 486, "cookies": false, "type": "", "demo": "sites\/get-variable.md", @@ -34518,7 +34599,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 487, + "weight": 488, "cookies": false, "type": "", "demo": "sites\/update-variable.md", @@ -34613,7 +34694,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 488, + "weight": 489, "cookies": false, "type": "", "demo": "sites\/delete-variable.md", @@ -34681,7 +34762,7 @@ "x-appwrite": { "method": "listBuckets", "group": "buckets", - "weight": 520, + "weight": 521, "cookies": false, "type": "", "demo": "storage\/list-buckets.md", @@ -34764,7 +34845,7 @@ "x-appwrite": { "method": "createBucket", "group": "buckets", - "weight": 518, + "weight": 519, "cookies": false, "type": "", "demo": "storage\/create-bucket.md", @@ -34847,7 +34928,7 @@ }, "compression": { "type": "string", - "description": "Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled", + "description": "Compression algorithm chosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled", "default": "none", "x-example": "none", "enum": [ @@ -34910,7 +34991,7 @@ "x-appwrite": { "method": "getBucket", "group": "buckets", - "weight": 519, + "weight": 520, "cookies": false, "type": "", "demo": "storage\/get-bucket.md", @@ -34971,7 +35052,7 @@ "x-appwrite": { "method": "updateBucket", "group": "buckets", - "weight": 521, + "weight": 522, "cookies": false, "type": "", "demo": "storage\/update-bucket.md", @@ -35056,7 +35137,7 @@ }, "compression": { "type": "string", - "description": "Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled", + "description": "Compression algorithm chosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled", "default": "none", "x-example": "none", "enum": [ @@ -35113,7 +35194,7 @@ "x-appwrite": { "method": "deleteBucket", "group": "buckets", - "weight": 522, + "weight": 523, "cookies": false, "type": "", "demo": "storage\/delete-bucket.md", @@ -35174,7 +35255,7 @@ "x-appwrite": { "method": "listFiles", "group": "files", - "weight": 525, + "weight": 526, "cookies": false, "type": "", "demo": "storage\/list-files.md", @@ -35267,7 +35348,7 @@ "x-appwrite": { "method": "createFile", "group": "files", - "weight": 523, + "weight": 524, "cookies": false, "type": "upload", "demo": "storage\/create-file.md", @@ -35358,7 +35439,7 @@ "x-appwrite": { "method": "getFile", "group": "files", - "weight": 524, + "weight": 525, "cookies": false, "type": "", "demo": "storage\/get-file.md", @@ -35429,7 +35510,7 @@ "x-appwrite": { "method": "updateFile", "group": "files", - "weight": 526, + "weight": 527, "cookies": false, "type": "", "demo": "storage\/update-file.md", @@ -35520,7 +35601,7 @@ "x-appwrite": { "method": "deleteFile", "group": "files", - "weight": 527, + "weight": 528, "cookies": false, "type": "", "demo": "storage\/delete-file.md", @@ -35591,7 +35672,7 @@ "x-appwrite": { "method": "getFileDownload", "group": "files", - "weight": 529, + "weight": 530, "cookies": false, "type": "location", "demo": "storage\/get-file-download.md", @@ -35671,7 +35752,7 @@ "x-appwrite": { "method": "getFilePreview", "group": "files", - "weight": 528, + "weight": 529, "cookies": false, "type": "location", "demo": "storage\/get-file-preview.md", @@ -35879,7 +35960,7 @@ "x-appwrite": { "method": "getFileView", "group": "files", - "weight": 530, + "weight": 531, "cookies": false, "type": "location", "demo": "storage\/get-file-view.md", @@ -35959,7 +36040,7 @@ "x-appwrite": { "method": "getUsage", "group": null, - "weight": 532, + "weight": 533, "cookies": false, "type": "", "demo": "storage\/get-usage.md", @@ -36030,7 +36111,7 @@ "x-appwrite": { "method": "getBucketUsage", "group": null, - "weight": 533, + "weight": 534, "cookies": false, "type": "", "demo": "storage\/get-bucket-usage.md", @@ -44019,7 +44100,7 @@ "x-appwrite": { "method": "list", "group": "files", - "weight": 515, + "weight": 516, "cookies": false, "type": "", "demo": "tokens\/list.md", @@ -44108,7 +44189,7 @@ "x-appwrite": { "method": "createFileToken", "group": "files", - "weight": 513, + "weight": 514, "cookies": false, "type": "", "demo": "tokens\/create-file-token.md", @@ -44192,7 +44273,7 @@ "x-appwrite": { "method": "get", "group": "tokens", - "weight": 514, + "weight": 515, "cookies": false, "type": "", "demo": "tokens\/get.md", @@ -44252,7 +44333,7 @@ "x-appwrite": { "method": "update", "group": "tokens", - "weight": 516, + "weight": 517, "cookies": false, "type": "", "demo": "tokens\/update.md", @@ -44323,7 +44404,7 @@ "x-appwrite": { "method": "delete", "group": "tokens", - "weight": 517, + "weight": 518, "cookies": false, "type": "", "demo": "tokens\/delete.md", @@ -54901,7 +54982,7 @@ }, "compression": { "type": "string", - "description": "Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).", + "description": "Compression algorithm chosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).", "x-example": "gzip" }, "encryption": { @@ -54918,6 +54999,12 @@ "type": "boolean", "description": "Image transformations are enabled.", "x-example": false + }, + "totalSize": { + "type": "integer", + "description": "Total size of this bucket in bytes.", + "x-example": 128, + "format": "int32" } }, "required": [ @@ -54933,7 +55020,8 @@ "compression", "encryption", "antivirus", - "transformations" + "transformations", + "totalSize" ], "example": { "$id": "5e5ea5c16897e", @@ -54953,7 +55041,8 @@ "compression": "gzip", "encryption": false, "antivirus": false, - "transformations": false + "transformations": false, + "totalSize": 128 } }, "resourceToken": { @@ -57338,6 +57427,16 @@ "description": "Last ping datetime in ISO 8601 format.", "x-example": "2020-10-15T06:38:00.000+00:00" }, + "labels": { + "type": "array", + "description": "Labels for the project.", + "items": { + "type": "string" + }, + "x-example": [ + "vip" + ] + }, "authEmailPassword": { "type": "boolean", "description": "Email\/Password auth method status", @@ -57482,6 +57581,7 @@ "smtpSecure", "pingCount", "pingedAt", + "labels", "authEmailPassword", "authUsersAuthMagicURL", "authEmailOtp", @@ -57550,6 +57650,9 @@ "smtpSecure": "tls", "pingCount": 1, "pingedAt": "2020-10-15T06:38:00.000+00:00", + "labels": [ + "vip" + ], "authEmailPassword": true, "authUsersAuthMagicURL": true, "authEmailOtp": true, @@ -59551,171 +59654,6 @@ "description": "Time range of the usage stats.", "x-example": "30d" }, - "deploymentsTotal": { - "type": "integer", - "description": "Total aggregated number of functions deployments.", - "x-example": 0, - "format": "int32" - }, - "deploymentsStorageTotal": { - "type": "integer", - "description": "Total aggregated sum of functions deployment storage.", - "x-example": 0, - "format": "int32" - }, - "buildsTotal": { - "type": "integer", - "description": "Total aggregated number of functions build.", - "x-example": 0, - "format": "int32" - }, - "buildsStorageTotal": { - "type": "integer", - "description": "total aggregated sum of functions build storage.", - "x-example": 0, - "format": "int32" - }, - "buildsTimeTotal": { - "type": "integer", - "description": "Total aggregated sum of functions build compute time.", - "x-example": 0, - "format": "int32" - }, - "buildsMbSecondsTotal": { - "type": "integer", - "description": "Total aggregated sum of functions build mbSeconds.", - "x-example": 0, - "format": "int32" - }, - "executionsTotal": { - "type": "integer", - "description": "Total aggregated number of functions execution.", - "x-example": 0, - "format": "int32" - }, - "executionsTimeTotal": { - "type": "integer", - "description": "Total aggregated sum of functions execution compute time.", - "x-example": 0, - "format": "int32" - }, - "executionsMbSecondsTotal": { - "type": "integer", - "description": "Total aggregated sum of functions execution mbSeconds.", - "x-example": 0, - "format": "int32" - }, - "deployments": { - "type": "array", - "description": "Aggregated number of functions deployment per period.", - "items": { - "type": "object", - "$ref": "#\/definitions\/metric" - }, - "x-example": [] - }, - "deploymentsStorage": { - "type": "array", - "description": "Aggregated number of functions deployment storage per period.", - "items": { - "type": "object", - "$ref": "#\/definitions\/metric" - }, - "x-example": [] - }, - "buildsSuccessTotal": { - "type": "integer", - "description": "Total aggregated number of successful function builds.", - "x-example": 0, - "format": "int32" - }, - "buildsFailedTotal": { - "type": "integer", - "description": "Total aggregated number of failed function builds.", - "x-example": 0, - "format": "int32" - }, - "builds": { - "type": "array", - "description": "Aggregated number of functions build per period.", - "items": { - "type": "object", - "$ref": "#\/definitions\/metric" - }, - "x-example": [] - }, - "buildsStorage": { - "type": "array", - "description": "Aggregated sum of functions build storage per period.", - "items": { - "type": "object", - "$ref": "#\/definitions\/metric" - }, - "x-example": [] - }, - "buildsTime": { - "type": "array", - "description": "Aggregated sum of functions build compute time per period.", - "items": { - "type": "object", - "$ref": "#\/definitions\/metric" - }, - "x-example": [] - }, - "buildsMbSeconds": { - "type": "array", - "description": "Aggregated sum of functions build mbSeconds per period.", - "items": { - "type": "object", - "$ref": "#\/definitions\/metric" - }, - "x-example": [] - }, - "executions": { - "type": "array", - "description": "Aggregated number of functions execution per period.", - "items": { - "type": "object", - "$ref": "#\/definitions\/metric" - }, - "x-example": [] - }, - "executionsTime": { - "type": "array", - "description": "Aggregated number of functions execution compute time per period.", - "items": { - "type": "object", - "$ref": "#\/definitions\/metric" - }, - "x-example": [] - }, - "executionsMbSeconds": { - "type": "array", - "description": "Aggregated number of functions mbSeconds per period.", - "items": { - "type": "object", - "$ref": "#\/definitions\/metric" - }, - "x-example": [] - }, - "buildsSuccess": { - "type": "array", - "description": "Aggregated number of successful function builds per period.", - "items": { - "type": "object", - "$ref": "#\/definitions\/metric" - }, - "x-example": [] - }, - "buildsFailed": { - "type": "array", - "description": "Aggregated number of failed function builds per period.", - "items": { - "type": "object", - "$ref": "#\/definitions\/metric" - }, - "x-example": [] - }, "sitesTotal": { "type": "integer", "description": "Total aggregated number of sites.", @@ -59731,6 +59669,60 @@ }, "x-example": [] }, + "deploymentsTotal": { + "type": "integer", + "description": "Total aggregated number of sites deployments.", + "x-example": 0, + "format": "int32" + }, + "deploymentsStorageTotal": { + "type": "integer", + "description": "Total aggregated sum of sites deployment storage.", + "x-example": 0, + "format": "int32" + }, + "buildsTotal": { + "type": "integer", + "description": "Total aggregated number of sites build.", + "x-example": 0, + "format": "int32" + }, + "buildsStorageTotal": { + "type": "integer", + "description": "total aggregated sum of sites build storage.", + "x-example": 0, + "format": "int32" + }, + "buildsTimeTotal": { + "type": "integer", + "description": "Total aggregated sum of sites build compute time.", + "x-example": 0, + "format": "int32" + }, + "buildsMbSecondsTotal": { + "type": "integer", + "description": "Total aggregated sum of sites build mbSeconds.", + "x-example": 0, + "format": "int32" + }, + "executionsTotal": { + "type": "integer", + "description": "Total aggregated number of sites execution.", + "x-example": 0, + "format": "int32" + }, + "executionsTimeTotal": { + "type": "integer", + "description": "Total aggregated sum of sites execution compute time.", + "x-example": 0, + "format": "int32" + }, + "executionsMbSecondsTotal": { + "type": "integer", + "description": "Total aggregated sum of sites execution mbSeconds.", + "x-example": 0, + "format": "int32" + }, "requestsTotal": { "type": "integer", "description": "Total aggregated number of requests.", @@ -59775,10 +59767,123 @@ "$ref": "#\/definitions\/metric" }, "x-example": [] + }, + "deployments": { + "type": "array", + "description": "Aggregated number of sites deployment per period.", + "items": { + "type": "object", + "$ref": "#\/definitions\/metric" + }, + "x-example": [] + }, + "deploymentsStorage": { + "type": "array", + "description": "Aggregated number of sites deployment storage per period.", + "items": { + "type": "object", + "$ref": "#\/definitions\/metric" + }, + "x-example": [] + }, + "buildsSuccessTotal": { + "type": "integer", + "description": "Total aggregated number of successful site builds.", + "x-example": 0, + "format": "int32" + }, + "buildsFailedTotal": { + "type": "integer", + "description": "Total aggregated number of failed site builds.", + "x-example": 0, + "format": "int32" + }, + "builds": { + "type": "array", + "description": "Aggregated number of sites build per period.", + "items": { + "type": "object", + "$ref": "#\/definitions\/metric" + }, + "x-example": [] + }, + "buildsStorage": { + "type": "array", + "description": "Aggregated sum of sites build storage per period.", + "items": { + "type": "object", + "$ref": "#\/definitions\/metric" + }, + "x-example": [] + }, + "buildsTime": { + "type": "array", + "description": "Aggregated sum of sites build compute time per period.", + "items": { + "type": "object", + "$ref": "#\/definitions\/metric" + }, + "x-example": [] + }, + "buildsMbSeconds": { + "type": "array", + "description": "Aggregated sum of sites build mbSeconds per period.", + "items": { + "type": "object", + "$ref": "#\/definitions\/metric" + }, + "x-example": [] + }, + "executions": { + "type": "array", + "description": "Aggregated number of sites execution per period.", + "items": { + "type": "object", + "$ref": "#\/definitions\/metric" + }, + "x-example": [] + }, + "executionsTime": { + "type": "array", + "description": "Aggregated number of sites execution compute time per period.", + "items": { + "type": "object", + "$ref": "#\/definitions\/metric" + }, + "x-example": [] + }, + "executionsMbSeconds": { + "type": "array", + "description": "Aggregated number of sites mbSeconds per period.", + "items": { + "type": "object", + "$ref": "#\/definitions\/metric" + }, + "x-example": [] + }, + "buildsSuccess": { + "type": "array", + "description": "Aggregated number of successful site builds per period.", + "items": { + "type": "object", + "$ref": "#\/definitions\/metric" + }, + "x-example": [] + }, + "buildsFailed": { + "type": "array", + "description": "Aggregated number of failed site builds per period.", + "items": { + "type": "object", + "$ref": "#\/definitions\/metric" + }, + "x-example": [] } }, "required": [ "range", + "sitesTotal", + "sites", "deploymentsTotal", "deploymentsStorageTotal", "buildsTotal", @@ -59788,6 +59893,12 @@ "executionsTotal", "executionsTimeTotal", "executionsMbSecondsTotal", + "requestsTotal", + "requests", + "inboundTotal", + "inbound", + "outboundTotal", + "outbound", "deployments", "deploymentsStorage", "buildsSuccessTotal", @@ -59800,18 +59911,12 @@ "executionsTime", "executionsMbSeconds", "buildsSuccess", - "buildsFailed", - "sitesTotal", - "sites", - "requestsTotal", - "requests", - "inboundTotal", - "inbound", - "outboundTotal", - "outbound" + "buildsFailed" ], "example": { "range": "30d", + "sitesTotal": 0, + "sites": [], "deploymentsTotal": 0, "deploymentsStorageTotal": 0, "buildsTotal": 0, @@ -59821,6 +59926,12 @@ "executionsTotal": 0, "executionsTimeTotal": 0, "executionsMbSecondsTotal": 0, + "requestsTotal": 0, + "requests": [], + "inboundTotal": 0, + "inbound": [], + "outboundTotal": 0, + "outbound": [], "deployments": [], "deploymentsStorage": [], "buildsSuccessTotal": 0, @@ -59833,15 +59944,7 @@ "executionsTime": [], "executionsMbSeconds": [], "buildsSuccess": [], - "buildsFailed": [], - "sitesTotal": 0, - "sites": [], - "requestsTotal": 0, - "requests": [], - "inboundTotal": 0, - "inbound": [], - "outboundTotal": 0, - "outbound": [] + "buildsFailed": [] } }, "usageSite": { diff --git a/app/config/specs/swagger2-latest-server.json b/app/config/specs/swagger2-latest-server.json index a3d51a703d..63e43dbf69 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.8.0", + "version": "1.8.1", "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", @@ -12308,7 +12308,7 @@ "x-appwrite": { "method": "list", "group": "functions", - "weight": 438, + "weight": 439, "cookies": false, "type": "", "demo": "functions\/list.md", @@ -12391,7 +12391,7 @@ "x-appwrite": { "method": "create", "group": "functions", - "weight": 435, + "weight": 436, "cookies": false, "type": "", "demo": "functions\/create.md", @@ -12705,7 +12705,7 @@ "x-appwrite": { "method": "listRuntimes", "group": "runtimes", - "weight": 440, + "weight": 441, "cookies": false, "type": "", "demo": "functions\/list-runtimes.md", @@ -12756,7 +12756,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "runtimes", - "weight": 441, + "weight": 442, "cookies": false, "type": "", "demo": "functions\/list-specifications.md", @@ -12807,7 +12807,7 @@ "x-appwrite": { "method": "get", "group": "functions", - "weight": 436, + "weight": 437, "cookies": false, "type": "", "demo": "functions\/get.md", @@ -12868,7 +12868,7 @@ "x-appwrite": { "method": "update", "group": "functions", - "weight": 437, + "weight": 438, "cookies": false, "type": "", "demo": "functions\/update.md", @@ -13178,7 +13178,7 @@ "x-appwrite": { "method": "delete", "group": "functions", - "weight": 439, + "weight": 440, "cookies": false, "type": "", "demo": "functions\/delete.md", @@ -13241,7 +13241,7 @@ "x-appwrite": { "method": "updateFunctionDeployment", "group": "functions", - "weight": 444, + "weight": 445, "cookies": false, "type": "", "demo": "functions\/update-function-deployment.md", @@ -13320,7 +13320,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 445, + "weight": 446, "cookies": false, "type": "", "demo": "functions\/list-deployments.md", @@ -13411,7 +13411,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 442, + "weight": 443, "cookies": false, "type": "upload", "demo": "functions\/create-deployment.md", @@ -13505,7 +13505,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 450, + "weight": 451, "cookies": false, "type": "", "demo": "functions\/create-duplicate-deployment.md", @@ -13592,7 +13592,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 447, + "weight": 448, "cookies": false, "type": "", "demo": "functions\/create-template-deployment.md", @@ -13714,7 +13714,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 448, + "weight": 449, "cookies": false, "type": "", "demo": "functions\/create-vcs-deployment.md", @@ -13812,7 +13812,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 443, + "weight": 444, "cookies": false, "type": "", "demo": "functions\/get-deployment.md", @@ -13876,7 +13876,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 446, + "weight": 447, "cookies": false, "type": "", "demo": "functions\/delete-deployment.md", @@ -13945,7 +13945,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 449, + "weight": 450, "cookies": false, "type": "location", "demo": "functions\/get-deployment-download.md", @@ -14032,7 +14032,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 451, + "weight": 452, "cookies": false, "type": "", "demo": "functions\/update-deployment-status.md", @@ -14101,7 +14101,7 @@ "x-appwrite": { "method": "listExecutions", "group": "executions", - "weight": 454, + "weight": 455, "cookies": false, "type": "", "demo": "functions\/list-executions.md", @@ -14186,7 +14186,7 @@ "x-appwrite": { "method": "createExecution", "group": "executions", - "weight": 452, + "weight": 453, "cookies": false, "type": "", "demo": "functions\/create-execution.md", @@ -14307,7 +14307,7 @@ "x-appwrite": { "method": "getExecution", "group": "executions", - "weight": 453, + "weight": 454, "cookies": false, "type": "", "demo": "functions\/get-execution.md", @@ -14374,7 +14374,7 @@ "x-appwrite": { "method": "deleteExecution", "group": "executions", - "weight": 455, + "weight": 456, "cookies": false, "type": "", "demo": "functions\/delete-execution.md", @@ -14443,7 +14443,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 460, + "weight": 461, "cookies": false, "type": "", "demo": "functions\/list-variables.md", @@ -14504,7 +14504,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 458, + "weight": 459, "cookies": false, "type": "", "demo": "functions\/create-variable.md", @@ -14596,7 +14596,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 459, + "weight": 460, "cookies": false, "type": "", "demo": "functions\/get-variable.md", @@ -14665,7 +14665,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 461, + "weight": 462, "cookies": false, "type": "", "demo": "functions\/update-variable.md", @@ -14761,7 +14761,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 462, + "weight": 463, "cookies": false, "type": "", "demo": "functions\/delete-variable.md", @@ -22376,7 +22376,7 @@ "x-appwrite": { "method": "list", "group": "sites", - "weight": 467, + "weight": 468, "cookies": false, "type": "", "demo": "sites\/list.md", @@ -22459,7 +22459,7 @@ "x-appwrite": { "method": "create", "group": "sites", - "weight": 465, + "weight": 466, "cookies": false, "type": "", "demo": "sites\/create.md", @@ -22731,7 +22731,7 @@ "x-appwrite": { "method": "listFrameworks", "group": "frameworks", - "weight": 470, + "weight": 471, "cookies": false, "type": "", "demo": "sites\/list-frameworks.md", @@ -22782,7 +22782,7 @@ "x-appwrite": { "method": "listSpecifications", "group": "frameworks", - "weight": 493, + "weight": 494, "cookies": false, "type": "", "demo": "sites\/list-specifications.md", @@ -22833,7 +22833,7 @@ "x-appwrite": { "method": "get", "group": "sites", - "weight": 466, + "weight": 467, "cookies": false, "type": "", "demo": "sites\/get.md", @@ -22894,7 +22894,7 @@ "x-appwrite": { "method": "update", "group": "sites", - "weight": 468, + "weight": 469, "cookies": false, "type": "", "demo": "sites\/update.md", @@ -23161,7 +23161,7 @@ "x-appwrite": { "method": "delete", "group": "sites", - "weight": 469, + "weight": 470, "cookies": false, "type": "", "demo": "sites\/delete.md", @@ -23224,7 +23224,7 @@ "x-appwrite": { "method": "updateSiteDeployment", "group": "sites", - "weight": 476, + "weight": 477, "cookies": false, "type": "", "demo": "sites\/update-site-deployment.md", @@ -23303,7 +23303,7 @@ "x-appwrite": { "method": "listDeployments", "group": "deployments", - "weight": 475, + "weight": 476, "cookies": false, "type": "", "demo": "sites\/list-deployments.md", @@ -23394,7 +23394,7 @@ "x-appwrite": { "method": "createDeployment", "group": "deployments", - "weight": 471, + "weight": 472, "cookies": false, "type": "upload", "demo": "sites\/create-deployment.md", @@ -23496,7 +23496,7 @@ "x-appwrite": { "method": "createDuplicateDeployment", "group": "deployments", - "weight": 479, + "weight": 480, "cookies": false, "type": "", "demo": "sites\/create-duplicate-deployment.md", @@ -23577,7 +23577,7 @@ "x-appwrite": { "method": "createTemplateDeployment", "group": "deployments", - "weight": 472, + "weight": 473, "cookies": false, "type": "", "demo": "sites\/create-template-deployment.md", @@ -23699,7 +23699,7 @@ "x-appwrite": { "method": "createVcsDeployment", "group": "deployments", - "weight": 473, + "weight": 474, "cookies": false, "type": "", "demo": "sites\/create-vcs-deployment.md", @@ -23798,7 +23798,7 @@ "x-appwrite": { "method": "getDeployment", "group": "deployments", - "weight": 474, + "weight": 475, "cookies": false, "type": "", "demo": "sites\/get-deployment.md", @@ -23862,7 +23862,7 @@ "x-appwrite": { "method": "deleteDeployment", "group": "deployments", - "weight": 477, + "weight": 478, "cookies": false, "type": "", "demo": "sites\/delete-deployment.md", @@ -23931,7 +23931,7 @@ "x-appwrite": { "method": "getDeploymentDownload", "group": "deployments", - "weight": 478, + "weight": 479, "cookies": false, "type": "location", "demo": "sites\/get-deployment-download.md", @@ -24018,7 +24018,7 @@ "x-appwrite": { "method": "updateDeploymentStatus", "group": "deployments", - "weight": 480, + "weight": 481, "cookies": false, "type": "", "demo": "sites\/update-deployment-status.md", @@ -24087,7 +24087,7 @@ "x-appwrite": { "method": "listLogs", "group": "logs", - "weight": 482, + "weight": 483, "cookies": false, "type": "", "demo": "sites\/list-logs.md", @@ -24169,7 +24169,7 @@ "x-appwrite": { "method": "getLog", "group": "logs", - "weight": 481, + "weight": 482, "cookies": false, "type": "", "demo": "sites\/get-log.md", @@ -24235,7 +24235,7 @@ "x-appwrite": { "method": "deleteLog", "group": "logs", - "weight": 483, + "weight": 484, "cookies": false, "type": "", "demo": "sites\/delete-log.md", @@ -24304,7 +24304,7 @@ "x-appwrite": { "method": "listVariables", "group": "variables", - "weight": 486, + "weight": 487, "cookies": false, "type": "", "demo": "sites\/list-variables.md", @@ -24365,7 +24365,7 @@ "x-appwrite": { "method": "createVariable", "group": "variables", - "weight": 484, + "weight": 485, "cookies": false, "type": "", "demo": "sites\/create-variable.md", @@ -24457,7 +24457,7 @@ "x-appwrite": { "method": "getVariable", "group": "variables", - "weight": 485, + "weight": 486, "cookies": false, "type": "", "demo": "sites\/get-variable.md", @@ -24526,7 +24526,7 @@ "x-appwrite": { "method": "updateVariable", "group": "variables", - "weight": 487, + "weight": 488, "cookies": false, "type": "", "demo": "sites\/update-variable.md", @@ -24622,7 +24622,7 @@ "x-appwrite": { "method": "deleteVariable", "group": "variables", - "weight": 488, + "weight": 489, "cookies": false, "type": "", "demo": "sites\/delete-variable.md", @@ -24691,7 +24691,7 @@ "x-appwrite": { "method": "listBuckets", "group": "buckets", - "weight": 520, + "weight": 521, "cookies": false, "type": "", "demo": "storage\/list-buckets.md", @@ -24775,7 +24775,7 @@ "x-appwrite": { "method": "createBucket", "group": "buckets", - "weight": 518, + "weight": 519, "cookies": false, "type": "", "demo": "storage\/create-bucket.md", @@ -24859,7 +24859,7 @@ }, "compression": { "type": "string", - "description": "Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled", + "description": "Compression algorithm chosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled", "default": "none", "x-example": "none", "enum": [ @@ -24922,7 +24922,7 @@ "x-appwrite": { "method": "getBucket", "group": "buckets", - "weight": 519, + "weight": 520, "cookies": false, "type": "", "demo": "storage\/get-bucket.md", @@ -24984,7 +24984,7 @@ "x-appwrite": { "method": "updateBucket", "group": "buckets", - "weight": 521, + "weight": 522, "cookies": false, "type": "", "demo": "storage\/update-bucket.md", @@ -25070,7 +25070,7 @@ }, "compression": { "type": "string", - "description": "Compression algorithm choosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled", + "description": "Compression algorithm chosen for compression. Can be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd), For file size above 20MB compression is skipped even if it's enabled", "default": "none", "x-example": "none", "enum": [ @@ -25127,7 +25127,7 @@ "x-appwrite": { "method": "deleteBucket", "group": "buckets", - "weight": 522, + "weight": 523, "cookies": false, "type": "", "demo": "storage\/delete-bucket.md", @@ -25189,7 +25189,7 @@ "x-appwrite": { "method": "listFiles", "group": "files", - "weight": 525, + "weight": 526, "cookies": false, "type": "", "demo": "storage\/list-files.md", @@ -25284,7 +25284,7 @@ "x-appwrite": { "method": "createFile", "group": "files", - "weight": 523, + "weight": 524, "cookies": false, "type": "upload", "demo": "storage\/create-file.md", @@ -25377,7 +25377,7 @@ "x-appwrite": { "method": "getFile", "group": "files", - "weight": 524, + "weight": 525, "cookies": false, "type": "", "demo": "storage\/get-file.md", @@ -25450,7 +25450,7 @@ "x-appwrite": { "method": "updateFile", "group": "files", - "weight": 526, + "weight": 527, "cookies": false, "type": "", "demo": "storage\/update-file.md", @@ -25543,7 +25543,7 @@ "x-appwrite": { "method": "deleteFile", "group": "files", - "weight": 527, + "weight": 528, "cookies": false, "type": "", "demo": "storage\/delete-file.md", @@ -25616,7 +25616,7 @@ "x-appwrite": { "method": "getFileDownload", "group": "files", - "weight": 529, + "weight": 530, "cookies": false, "type": "location", "demo": "storage\/get-file-download.md", @@ -25698,7 +25698,7 @@ "x-appwrite": { "method": "getFilePreview", "group": "files", - "weight": 528, + "weight": 529, "cookies": false, "type": "location", "demo": "storage\/get-file-preview.md", @@ -25908,7 +25908,7 @@ "x-appwrite": { "method": "getFileView", "group": "files", - "weight": 530, + "weight": 531, "cookies": false, "type": "location", "demo": "storage\/get-file-view.md", @@ -33457,7 +33457,7 @@ "x-appwrite": { "method": "list", "group": "files", - "weight": 515, + "weight": 516, "cookies": false, "type": "", "demo": "tokens\/list.md", @@ -33547,7 +33547,7 @@ "x-appwrite": { "method": "createFileToken", "group": "files", - "weight": 513, + "weight": 514, "cookies": false, "type": "", "demo": "tokens\/create-file-token.md", @@ -33632,7 +33632,7 @@ "x-appwrite": { "method": "get", "group": "tokens", - "weight": 514, + "weight": 515, "cookies": false, "type": "", "demo": "tokens\/get.md", @@ -33693,7 +33693,7 @@ "x-appwrite": { "method": "update", "group": "tokens", - "weight": 516, + "weight": 517, "cookies": false, "type": "", "demo": "tokens\/update.md", @@ -33765,7 +33765,7 @@ "x-appwrite": { "method": "delete", "group": "tokens", - "weight": 517, + "weight": 518, "cookies": false, "type": "", "demo": "tokens\/delete.md", @@ -43148,7 +43148,7 @@ }, "compression": { "type": "string", - "description": "Compression algorithm choosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).", + "description": "Compression algorithm chosen for compression. Will be one of none, [gzip](https:\/\/en.wikipedia.org\/wiki\/Gzip), or [zstd](https:\/\/en.wikipedia.org\/wiki\/Zstd).", "x-example": "gzip" }, "encryption": { @@ -43165,6 +43165,12 @@ "type": "boolean", "description": "Image transformations are enabled.", "x-example": false + }, + "totalSize": { + "type": "integer", + "description": "Total size of this bucket in bytes.", + "x-example": 128, + "format": "int32" } }, "required": [ @@ -43180,7 +43186,8 @@ "compression", "encryption", "antivirus", - "transformations" + "transformations", + "totalSize" ], "example": { "$id": "5e5ea5c16897e", @@ -43200,7 +43207,8 @@ "compression": "gzip", "encryption": false, "antivirus": false, - "transformations": false + "transformations": false, + "totalSize": 128 } }, "resourceToken": { diff --git a/app/controllers/general.php b/app/controllers/general.php index 23de89af27..ec8cfef775 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -1328,6 +1328,86 @@ App::error() $log->addExtra('trace', $error->getTraceAsString()); $log->addExtra('roles', Authorization::getRoles()); + try { + /* add queries to log */ + $queries = $request->getParam('queries', []); + if (!empty($queries) && is_array($queries)) { + $parsedQueries = Query::parseQueries($queries); + + // format query by removing sensitive values + $formatQuery = function (array $queryArray) use (&$formatQuery): ?array { + $method = $queryArray['method'] ?? ''; + $values = $queryArray['values'] ?? []; + $attribute = $queryArray['attribute'] ?? ''; + + if (!is_string($method) || $method === '') { + return null; + } + + // logical queries - recursively format nested queries + if (in_array($method, [Query::TYPE_AND, Query::TYPE_OR], true)) { + $nested = []; + foreach ($values as $nestedArray) { + if (is_array($nestedArray)) { + $formatted = $formatQuery($nestedArray); + if ($formatted !== null) { + $nested[] = $formatted; + } + } + } + return empty($nested) ? null : [$method => $nested]; + } + + // select - show selected attributes + if ($method === Query::TYPE_SELECT) { + $attributes = array_values(array_filter($values, 'is_string')); + return [$method => $attributes]; + } + + // pagination + if (in_array($method, [ + Query::TYPE_LIMIT, + Query::TYPE_OFFSET, + Query::TYPE_CURSOR_AFTER, + Query::TYPE_CURSOR_BEFORE + ], true)) { + return [$method => []]; + } + + // orders + if (in_array($method, [ + Query::TYPE_ORDER_DESC, + Query::TYPE_ORDER_ASC, + Query::TYPE_ORDER_RANDOM + ], true)) { + return [$method => !empty($attribute) ? [$attribute] : []]; + } + + // filter + if (!empty($attribute)) { + return [$method => [$attribute]]; + } + + // fallback + return [$method => []]; + }; + + $formattedQueries = []; + foreach ($parsedQueries as $query) { + $formatted = $formatQuery($query->toArray()); + if ($formatted !== null) { + $formattedQueries[] = $formatted; + } + } + + if (!empty($formattedQueries)) { + $log->addExtra('queries', $formattedQueries); + } + } + } catch (Throwable $_) { + // don't fail the error handler + } + $action = 'UNKNOWN_NAMESPACE.UNKNOWN.METHOD'; if (!empty($sdk)) { /** @var \Appwrite\SDK\Method $sdk */ diff --git a/composer.json b/composer.json index 55e4e08402..d45d723430 100644 --- a/composer.json +++ b/composer.json @@ -64,7 +64,7 @@ "utopia-php/locale": "0.8.*", "utopia-php/logger": "0.6.*", "utopia-php/messaging": "0.20.*", - "utopia-php/migration": "1.*.*", + "utopia-php/migration": "1.3.*", "utopia-php/orchestration": "0.9.*", "utopia-php/platform": "0.7.*", "utopia-php/pools": "0.8.*", @@ -100,6 +100,12 @@ "provide": { "ext-phpiredis": "*" }, + "repositories": [ + { + "type": "vcs", + "url": "https://github.com/utopia-php/migration.git" + } + ], "config": { "platform": { "php": "8.3" diff --git a/composer.lock b/composer.lock index 8b6f664dd9..b4696cf333 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": "9bac4d8946e35357efa46fd087c9484e", + "content-hash": "375a062e8675e7e6938c1d8cc7b61ecf", "packages": [ { "name": "adhocore/jwt", @@ -4516,16 +4516,16 @@ }, { "name": "utopia-php/migration", - "version": "1.3.10", + "version": "1.3.12", "source": { "type": "git", "url": "https://github.com/utopia-php/migration.git", - "reference": "cb357c42a5a5614605b546effbea1204ed64c6b0" + "reference": "1b8d5519c50630e4c0b6a79be615b70d5f23d2e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/migration/zipball/cb357c42a5a5614605b546effbea1204ed64c6b0", - "reference": "cb357c42a5a5614605b546effbea1204ed64c6b0", + "url": "https://api.github.com/repos/utopia-php/migration/zipball/1b8d5519c50630e4c0b6a79be615b70d5f23d2e4", + "reference": "1b8d5519c50630e4c0b6a79be615b70d5f23d2e4", "shasum": "" }, "require": { @@ -4551,7 +4551,25 @@ "Utopia\\Migration\\": "src/Migration" } }, - "notification-url": "https://packagist.org/downloads/", + "autoload-dev": { + "psr-4": { + "Utopia\\Tests\\": "tests/Migration" + } + }, + "scripts": { + "test": [ + "./vendor/bin/phpunit" + ], + "lint": [ + "./vendor/bin/pint --test" + ], + "format": [ + "./vendor/bin/pint" + ], + "check": [ + "./vendor/bin/phpstan analyse --level 3 src tests --memory-limit 2G" + ] + }, "license": [ "MIT" ], @@ -4564,10 +4582,10 @@ "utopia" ], "support": { - "issues": "https://github.com/utopia-php/migration/issues", - "source": "https://github.com/utopia-php/migration/tree/1.3.10" + "source": "https://github.com/utopia-php/migration/tree/1.3.12", + "issues": "https://github.com/utopia-php/migration/issues" }, - "time": "2026-01-06T10:47:11+00:00" + "time": "2026-01-07T06:07:33+00:00" }, { "name": "utopia-php/mongo", diff --git a/src/Appwrite/Platform/Modules/Storage/Http/Buckets/Create.php b/src/Appwrite/Platform/Modules/Storage/Http/Buckets/Create.php index 00daef061e..c78402e5a4 100644 --- a/src/Appwrite/Platform/Modules/Storage/Http/Buckets/Create.php +++ b/src/Appwrite/Platform/Modules/Storage/Http/Buckets/Create.php @@ -68,7 +68,7 @@ class Create extends Action ->param('enabled', true, new Boolean(true), 'Is bucket enabled? When set to \'disabled\', users cannot access the files in this bucket but Server SDKs with and API key can still access the bucket. No files are lost when this is toggled.', true) ->param('maximumFileSize', fn (array $plan) => empty($plan['fileSize']) ? (int) System::getEnv('_APP_STORAGE_LIMIT', 0) : $plan['fileSize'] * 1000 * 1000, fn (array $plan) => new Range(1, empty($plan['fileSize']) ? (int) System::getEnv('_APP_STORAGE_LIMIT', 0) : $plan['fileSize'] * 1000 * 1000), 'Maximum file size allowed in bytes. Maximum allowed value is ' . Storage::human(System::getEnv('_APP_STORAGE_LIMIT', 0), 0) . '.', true, ['plan']) ->param('allowedFileExtensions', [], new ArrayList(new Text(64), APP_LIMIT_ARRAY_PARAMS_SIZE), 'Allowed file extensions. Maximum of ' . APP_LIMIT_ARRAY_PARAMS_SIZE . ' extensions are allowed, each 64 characters long.', true) - ->param('compression', Compression::NONE, new WhiteList([Compression::NONE, Compression::GZIP, Compression::ZSTD], true), 'Compression algorithm choosen for compression. Can be one of ' . Compression::NONE . ', [' . Compression::GZIP . '](https://en.wikipedia.org/wiki/Gzip), or [' . Compression::ZSTD . '](https://en.wikipedia.org/wiki/Zstd), For file size above ' . Storage::human(APP_STORAGE_READ_BUFFER, 0) . ' compression is skipped even if it\'s enabled', true) + ->param('compression', Compression::NONE, new WhiteList([Compression::NONE, Compression::GZIP, Compression::ZSTD], true), 'Compression algorithm chosen for compression. Can be one of ' . Compression::NONE . ', [' . Compression::GZIP . '](https://en.wikipedia.org/wiki/Gzip), or [' . Compression::ZSTD . '](https://en.wikipedia.org/wiki/Zstd), For file size above ' . Storage::human(APP_STORAGE_READ_BUFFER, 0) . ' compression is skipped even if it\'s enabled', true) ->param('encryption', true, new Boolean(true), 'Is encryption enabled? For file size above ' . Storage::human(APP_STORAGE_READ_BUFFER, 0) . ' encryption is skipped even if it\'s enabled', true) ->param('antivirus', true, new Boolean(true), 'Is virus scanning enabled? For file size above ' . Storage::human(APP_LIMIT_ANTIVIRUS, 0) . ' AntiVirus scanning is skipped even if it\'s enabled', true) ->param('transformations', true, new Boolean(true), 'Are image transformations enabled?', true) diff --git a/src/Appwrite/Platform/Modules/Storage/Http/Buckets/Get.php b/src/Appwrite/Platform/Modules/Storage/Http/Buckets/Get.php index dd14feef6e..5c3515122b 100644 --- a/src/Appwrite/Platform/Modules/Storage/Http/Buckets/Get.php +++ b/src/Appwrite/Platform/Modules/Storage/Http/Buckets/Get.php @@ -8,6 +8,9 @@ use Appwrite\SDK\Method; use Appwrite\SDK\Response as SDKResponse; use Appwrite\Utopia\Response; use Utopia\Database\Database; +use Utopia\Database\Document; +use Utopia\Database\Query; +use Utopia\Database\Validator\Authorization; use Utopia\Database\Validator\UID; use Utopia\Platform\Action; use Utopia\Platform\Scope\HTTP; @@ -46,20 +49,48 @@ class Get extends Action ->param('bucketId', '', new UID(), 'Bucket unique ID.') ->inject('response') ->inject('dbForProject') + ->inject('project') + ->inject('getLogsDB') ->callback($this->action(...)); } public function action( string $bucketId, Response $response, - Database $dbForProject - ) { + Database $dbForProject, + Document $project, + callable $getLogsDB + ): void { $bucket = $dbForProject->getDocument('buckets', $bucketId); if ($bucket->isEmpty()) { throw new Exception(Exception::STORAGE_BUCKET_NOT_FOUND); } + $metric = str_replace( + '{bucketInternalId}', + $bucket->getSequence(), + METRIC_BUCKET_ID_FILES_STORAGE + ); + + $statsDocId = md5('_inf_' . $metric); + + $dbForLogs = call_user_func($getLogsDB, $project); + $storageStats = Authorization::skip( + fn () => $dbForLogs->getDocument( + 'stats', + $statsDocId, + [Query::select(['value'])] + ) + ); + + /** + * The value can be 0 if stats were not aggregated when this request was made! + */ + $totalSize = $storageStats->isEmpty() ? 0 : $storageStats->getAttribute('value', 0); + + $bucket->setAttribute('totalSize', $totalSize); + $response->dynamic($bucket, Response::MODEL_BUCKET); } } diff --git a/src/Appwrite/Platform/Modules/Storage/Http/Buckets/Update.php b/src/Appwrite/Platform/Modules/Storage/Http/Buckets/Update.php index 44f0192fb4..9dd5a29967 100644 --- a/src/Appwrite/Platform/Modules/Storage/Http/Buckets/Update.php +++ b/src/Appwrite/Platform/Modules/Storage/Http/Buckets/Update.php @@ -65,7 +65,7 @@ class Update extends Action ->param('enabled', true, new Boolean(true), 'Is bucket enabled? When set to \'disabled\', users cannot access the files in this bucket but Server SDKs with and API key can still access the bucket. No files are lost when this is toggled.', true) ->param('maximumFileSize', fn (array $plan) => empty($plan['fileSize']) ? (int) System::getEnv('_APP_STORAGE_LIMIT', 0) : $plan['fileSize'] * 1000 * 1000, fn (array $plan) => new Range(1, empty($plan['fileSize']) ? (int) System::getEnv('_APP_STORAGE_LIMIT', 0) : $plan['fileSize'] * 1000 * 1000), 'Maximum file size allowed in bytes. Maximum allowed value is ' . Storage::human(System::getEnv('_APP_STORAGE_LIMIT', 0), 0) . '.', true, ['plan']) ->param('allowedFileExtensions', [], new ArrayList(new Text(64), APP_LIMIT_ARRAY_PARAMS_SIZE), 'Allowed file extensions. Maximum of ' . APP_LIMIT_ARRAY_PARAMS_SIZE . ' extensions are allowed, each 64 characters long.', true) - ->param('compression', Compression::NONE, new WhiteList([Compression::NONE, Compression::GZIP, Compression::ZSTD], true), 'Compression algorithm choosen for compression. Can be one of ' . Compression::NONE . ', [' . Compression::GZIP . '](https://en.wikipedia.org/wiki/Gzip), or [' . Compression::ZSTD . '](https://en.wikipedia.org/wiki/Zstd), For file size above ' . Storage::human(APP_STORAGE_READ_BUFFER, 0) . ' compression is skipped even if it\'s enabled', true) + ->param('compression', Compression::NONE, new WhiteList([Compression::NONE, Compression::GZIP, Compression::ZSTD], true), 'Compression algorithm chosen for compression. Can be one of ' . Compression::NONE . ', [' . Compression::GZIP . '](https://en.wikipedia.org/wiki/Gzip), or [' . Compression::ZSTD . '](https://en.wikipedia.org/wiki/Zstd), For file size above ' . Storage::human(APP_STORAGE_READ_BUFFER, 0) . ' compression is skipped even if it\'s enabled', true) ->param('encryption', true, new Boolean(true), 'Is encryption enabled? For file size above ' . Storage::human(APP_STORAGE_READ_BUFFER, 0) . ' encryption is skipped even if it\'s enabled', true) ->param('antivirus', true, new Boolean(true), 'Is virus scanning enabled? For file size above ' . Storage::human(APP_LIMIT_ANTIVIRUS, 0) . ' AntiVirus scanning is skipped even if it\'s enabled', true) ->param('transformations', true, new Boolean(true), 'Are image transformations enabled?', true) diff --git a/src/Appwrite/Platform/Modules/Storage/Http/Buckets/XList.php b/src/Appwrite/Platform/Modules/Storage/Http/Buckets/XList.php index 74f12852be..a2c880ce08 100644 --- a/src/Appwrite/Platform/Modules/Storage/Http/Buckets/XList.php +++ b/src/Appwrite/Platform/Modules/Storage/Http/Buckets/XList.php @@ -13,6 +13,7 @@ use Utopia\Database\Document; use Utopia\Database\Exception\Order as OrderException; use Utopia\Database\Exception\Query as QueryException; use Utopia\Database\Query; +use Utopia\Database\Validator\Authorization; use Utopia\Database\Validator\Query\Cursor; use Utopia\Platform\Action; use Utopia\Platform\Scope\HTTP; @@ -55,6 +56,8 @@ class XList extends Action ->param('total', true, new Boolean(true), 'When set to false, the total count returned will be 0 and will not be calculated.', true) ->inject('response') ->inject('dbForProject') + ->inject('project') + ->inject('getLogsDB') ->callback($this->action(...)); } @@ -63,7 +66,9 @@ class XList extends Action string $search, bool $includeTotal, Response $response, - Database $dbForProject + Database $dbForProject, + Document $project, + callable $getLogsDB ) { try { $queries = Query::parseQueries($queries); @@ -109,6 +114,45 @@ class XList extends Action } catch (QueryException $e) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage()); } + + if (!empty($buckets)) { + $bucketByStatsId = []; + $dbForLogs = call_user_func($getLogsDB, $project); + + foreach ($buckets as $bucket) { + $metric = str_replace( + '{bucketInternalId}', + $bucket->getSequence(), + METRIC_BUCKET_ID_FILES_STORAGE + ); + + $statId = md5('_inf_' . $metric); + + $bucketByStatsId[$statId] = $bucket; + + // set a default + $bucket->setAttribute('totalSize', 0); + } + + /* @type Document[] $stats */ + $stats = Authorization::skip(function () use ($dbForLogs, $bucketByStatsId) { + $statsIds = array_keys($bucketByStatsId); + + return $dbForLogs->find('stats', [ + Query::equal('$id', $statsIds), + Query::select(['value']), + ]); + }); + + foreach ($stats as $stat) { + $bucket = $bucketByStatsId[$stat->getId()]; + + if ($bucket) { + $bucket->setAttribute('totalSize', $stat->getAttribute('value', 0)); + } + } + } + $response->dynamic(new Document([ 'buckets' => $buckets, 'total' => $total, diff --git a/src/Appwrite/Platform/Workers/Deletes.php b/src/Appwrite/Platform/Workers/Deletes.php index 983e13b295..0b2f7c75ae 100644 --- a/src/Appwrite/Platform/Workers/Deletes.php +++ b/src/Appwrite/Platform/Workers/Deletes.php @@ -187,7 +187,7 @@ class Deletes extends Action case DELETE_TYPE_MAINTENANCE: $this->deleteExpiredTargets($project, $getProjectDB); $this->deleteExecutionLogs($project, $getProjectDB, $executionRetention); - $this->deleteAuditLogs($project, $getProjectDB, $auditRetention); + $this->deleteAuditLogs($project, $getAudit, $auditRetention); $this->deleteUsageStats($project, $getProjectDB, $getLogsDB, $hourlyUsageRetentionDatetime); $this->deleteExpiredSessions($project, $getProjectDB); $this->deleteExpiredTransactions($project, $getProjectDB); @@ -516,125 +516,136 @@ class Deletes extends Action $dsn = new DSN('mysql://' . $document->getAttribute('database', 'console')); } - $dbForProject = $getProjectDB($document); - - $projectCollectionIds = [ - ...\array_keys(Config::getParam('collections', [])['projects']), - SQL::COLLECTION, - AbuseDatabase::COLLECTION, - ]; - - $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; - /** * @var $dbForProject Database */ - $dbForProject->foreach(Database::METADATA, function (Document $collection) use ($dbForProject, $projectTables, $projectCollectionIds) { - try { - if ($projectTables || !\in_array($collection->getId(), $projectCollectionIds)) { - $dbForProject->deleteCollection($collection->getId()); - } else { - $this->deleteByGroup( - $collection->getId(), - [ - Query::orderAsc() - ], - database: $dbForProject - ); + $dbForProject = $getProjectDB($document); + + try { + /** + * Disable validation because of Cursor validation on $id underscores + */ + $dbForProject->disableValidation(); + + + $projectCollectionIds = [ + ...\array_keys(Config::getParam('collections', [])['projects']), + SQL::COLLECTION, + AbuseDatabase::COLLECTION, + ]; + + $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; + + $dbForProject->foreach(Database::METADATA, function (Document $collection) use ($dbForProject, $projectTables, $projectCollectionIds) { + try { + if ($projectTables || !\in_array($collection->getId(), $projectCollectionIds)) { + $dbForProject->deleteCollection($collection->getId()); + } else { + $this->deleteByGroup( + $collection->getId(), + [ + Query::orderAsc() + ], + database: $dbForProject + ); + } + } catch (Throwable $e) { + Console::error('Error deleting ' . $collection->getId() . ' ' . $e->getMessage()); } - } catch (Throwable $e) { - Console::error('Error deleting ' . $collection->getId() . ' ' . $e->getMessage()); + }); + + // Delete Platforms + $this->deleteByGroup('platforms', [ + Query::equal('projectInternalId', [$projectInternalId]), + Query::orderAsc() + ], $dbForPlatform); + + // Delete project and function rules + $this->deleteByGroup('rules', [ + Query::equal('projectInternalId', [$projectInternalId]), + Query::orderAsc() + ], $dbForPlatform, function (Document $document) use ($dbForPlatform, $certificates) { + $this->deleteRule($dbForPlatform, $document, $certificates); + }); + + // Delete Keys + $this->deleteByGroup('keys', [ + Query::equal('resourceType', ['projects']), + Query::equal('resourceInternalId', [$projectInternalId]), + Query::orderAsc() + ], $dbForPlatform); + + // Delete Webhooks + $this->deleteByGroup('webhooks', [ + Query::equal('projectInternalId', [$projectInternalId]), + Query::orderAsc() + ], $dbForPlatform); + + // Delete VCS Installations + $this->deleteByGroup('installations', [ + Query::equal('projectInternalId', [$projectInternalId]), + Query::orderAsc() + ], $dbForPlatform); + + // Delete VCS Repositories + $this->deleteByGroup('repositories', [ + Query::equal('projectInternalId', [$projectInternalId]), + Query::orderAsc() + ], $dbForPlatform); + + // Delete VCS comments + $this->deleteByGroup('vcsComments', [ + Query::equal('projectInternalId', [$projectInternalId]), + Query::orderAsc() + ], $dbForPlatform); + + // Delete Schedules + $this->deleteByGroup('schedules', [ + Query::equal('projectId', [$projectId]), + Query::orderAsc() + ], $dbForPlatform); + + // Delete metadata table + if ($projectTables) { + $dbForProject->deleteCollection(Database::METADATA); + } elseif ($sharedTablesV1) { + $this->deleteByGroup( + Database::METADATA, + [ + Query::orderAsc() + ], + $dbForProject + ); + } elseif ($sharedTablesV2) { + $queries = \array_map( + fn ($id) => Query::notEqual('$id', $id), + $projectCollectionIds + ); + + $queries[] = Query::orderAsc(); + + $this->deleteByGroup( + Database::METADATA, + $queries, + $dbForProject + ); } - }); - // Delete Platforms - $this->deleteByGroup('platforms', [ - Query::equal('projectInternalId', [$projectInternalId]), - Query::orderAsc() - ], $dbForPlatform); + // Delete all storage directories + $deviceForFiles->delete($deviceForFiles->getRoot(), true); + $deviceForSites->delete($deviceForSites->getRoot(), true); + $deviceForFunctions->delete($deviceForFunctions->getRoot(), true); + $deviceForBuilds->delete($deviceForBuilds->getRoot(), true); + $deviceForCache->delete($deviceForCache->getRoot(), true); - // Delete project and function rules - $this->deleteByGroup('rules', [ - Query::equal('projectInternalId', [$projectInternalId]), - Query::orderAsc() - ], $dbForPlatform, function (Document $document) use ($dbForPlatform, $certificates) { - $this->deleteRule($dbForPlatform, $document, $certificates); - }); - - // Delete Keys - $this->deleteByGroup('keys', [ - Query::equal('resourceType', ['projects']), - Query::equal('resourceInternalId', [$projectInternalId]), - Query::orderAsc() - ], $dbForPlatform); - - // Delete Webhooks - $this->deleteByGroup('webhooks', [ - Query::equal('projectInternalId', [$projectInternalId]), - Query::orderAsc() - ], $dbForPlatform); - - // Delete VCS Installations - $this->deleteByGroup('installations', [ - Query::equal('projectInternalId', [$projectInternalId]), - Query::orderAsc() - ], $dbForPlatform); - - // Delete VCS Repositories - $this->deleteByGroup('repositories', [ - Query::equal('projectInternalId', [$projectInternalId]), - Query::orderAsc() - ], $dbForPlatform); - - // Delete VCS comments - $this->deleteByGroup('vcsComments', [ - Query::equal('projectInternalId', [$projectInternalId]), - Query::orderAsc() - ], $dbForPlatform); - - // Delete Schedules - $this->deleteByGroup('schedules', [ - Query::equal('projectId', [$projectId]), - Query::orderAsc() - ], $dbForPlatform); - - // Delete metadata table - if ($projectTables) { - $dbForProject->deleteCollection(Database::METADATA); - } elseif ($sharedTablesV1) { - $this->deleteByGroup( - Database::METADATA, - [ - Query::orderAsc() - ], - $dbForProject - ); - } elseif ($sharedTablesV2) { - $queries = \array_map( - fn ($id) => Query::notEqual('$id', $id), - $projectCollectionIds - ); - - $queries[] = Query::orderAsc(); - - $this->deleteByGroup( - Database::METADATA, - $queries, - $dbForProject - ); + } finally { + $dbForProject->enableValidation(); } - - // Delete all storage directories - $deviceForFiles->delete($deviceForFiles->getRoot(), true); - $deviceForSites->delete($deviceForSites->getRoot(), true); - $deviceForFunctions->delete($deviceForFunctions->getRoot(), true); - $deviceForBuilds->delete($deviceForBuilds->getRoot(), true); - $deviceForCache->delete($deviceForCache->getRoot(), true); } /** diff --git a/src/Appwrite/Platform/Workers/Migrations.php b/src/Appwrite/Platform/Workers/Migrations.php index 972757408e..e1039510f4 100644 --- a/src/Appwrite/Platform/Workers/Migrations.php +++ b/src/Appwrite/Platform/Workers/Migrations.php @@ -110,10 +110,18 @@ class Migrations extends Action $events = $payload['events'] ?? []; $migration = new Document($payload['migration'] ?? []); + if ($migration->isEmpty()) { + throw new \Exception('Migration not found'); + } + if ($project->getId() === 'console') { return; } + if ($project->isEmpty()) { + throw new \Exception('Project not found'); + } + $this->dbForProject = $dbForProject; $this->dbForPlatform = $dbForPlatform; $this->project = $project; @@ -312,7 +320,8 @@ class Migrations extends Action Mail $queueForMails, array $platform, ): void { - $project = $this->dbForPlatform->getDocument('projects', $this->project->getId()); + $project = $this->project; + $tempAPIKey = $this->generateAPIKey($project); $transfer = $source = $destination = null; @@ -386,62 +395,59 @@ class Migrations extends Action Console::error('Line: ' . $th->getLine()); Console::error($th->getTraceAsString()); - if (! $migration->isEmpty()) { - $migration->setAttribute('status', 'failed'); - $migration->setAttribute('stage', 'finished'); + $migration->setAttribute('status', 'failed'); + $migration->setAttribute('stage', 'finished'); - call_user_func($this->logError, $th, 'appwrite-worker', 'appwrite-queue-'.self::getName(), [ - 'migrationId' => $migration->getId(), - 'source' => $migration->getAttribute('source') ?? '', - 'destination' => $migration->getAttribute('destination') ?? '', - ]); + call_user_func($this->logError, $th, 'appwrite-worker', 'appwrite-queue-'.self::getName(), [ + 'migrationId' => $migration->getId(), + 'source' => $migration->getAttribute('source') ?? '', + 'destination' => $migration->getAttribute('destination') ?? '', + ]); - return; - } - - if ($transfer) { - $sourceErrors = $source->getErrors(); - $destinationErrors = $destination->getErrors(); - $migration->setAttribute('errors', $this->sanitizeErrors($sourceErrors, $destinationErrors)); - } } finally { - $this->updateMigrationDocument($migration, $project, $queueForRealtime); + try { + $this->updateMigrationDocument($migration, $project, $queueForRealtime); - if ($migration->getAttribute('status', '') === 'failed') { - Console::error('Migration('.$migration->getSequence().':'.$migration->getId().') failed, Project('.$this->project->getSequence().':'.$this->project->getId().')'); + if ($migration->getAttribute('status', '') === 'failed') { + Console::error('Migration('.$migration->getSequence().':'.$migration->getId().') failed, Project('.$this->project->getSequence().':'.$this->project->getId().')'); - $sourceErrors = $source?->getErrors() ?? []; - $destinationErrors = $destination?->getErrors() ?? []; + $sourceErrors = $source?->getErrors() ?? []; + $destinationErrors = $destination?->getErrors() ?? []; - foreach ([...$sourceErrors, ...$destinationErrors] as $error) { - /** @var MigrationException $error */ - if ($error->getCode() === 0 || $error->getCode() >= 500) { - ($this->logError)($error, 'appwrite-worker', 'appwrite-queue-' . self::getName(), [ - 'migrationId' => $migration->getId(), - 'source' => $migration->getAttribute('source') ?? '', - 'destination' => $migration->getAttribute('destination') ?? '', - 'resourceName' => $error->getResourceName(), - 'resourceGroup' => $error->getResourceGroup(), - ]); + foreach ([...$sourceErrors, ...$destinationErrors] as $error) { + /** @var MigrationException $error */ + if ($error->getCode() === 0 || $error->getCode() >= 500) { + ($this->logError)($error, 'appwrite-worker', 'appwrite-queue-' . self::getName(), [ + 'migrationId' => $migration->getId(), + 'source' => $migration->getAttribute('source') ?? '', + 'destination' => $migration->getAttribute('destination') ?? '', + 'resourceName' => $error->getResourceName(), + 'resourceGroup' => $error->getResourceGroup(), + ]); + } + } + + $source?->error(); + $destination?->error(); + } + + if ($migration->getAttribute('status', '') === 'completed') { + $destination?->success(); + $source?->success(); + + // todo: Move to CSV hook + if ($migration->getAttribute('destination') === DestinationCSV::getName()) { + $this->handleCSVExportComplete($project, $migration, $queueForMails, $queueForRealtime, $platform); } } + } finally { + $source?->cleanUp(); + $destination?->cleanUp(); - $source?->error(); - $destination?->error(); + $transfer = null; + $source = null; + $destination = null; } - - if ($migration->getAttribute('status', '') === 'completed') { - $destination?->success(); - $source?->success(); - - if ($migration->getAttribute('destination') === DestinationCSV::getName()) { - $this->handleCSVExportComplete($project, $migration, $queueForMails, $queueForRealtime, $platform); - } - } - - $transfer = null; - $source = null; - $destination = null; } } diff --git a/src/Appwrite/Utopia/Database/Validator/Queries/Projects.php b/src/Appwrite/Utopia/Database/Validator/Queries/Projects.php index d96e373949..50c9d850f3 100644 --- a/src/Appwrite/Utopia/Database/Validator/Queries/Projects.php +++ b/src/Appwrite/Utopia/Database/Validator/Queries/Projects.php @@ -8,6 +8,7 @@ class Projects extends Base 'name', 'teamId', 'labels', + 'search' ]; /** diff --git a/src/Appwrite/Utopia/Response/Model/Bucket.php b/src/Appwrite/Utopia/Response/Model/Bucket.php index f51c8b6527..aece4cf850 100644 --- a/src/Appwrite/Utopia/Response/Model/Bucket.php +++ b/src/Appwrite/Utopia/Response/Model/Bucket.php @@ -69,7 +69,7 @@ class Bucket extends Model ]) ->addRule('compression', [ 'type' => self::TYPE_STRING, - 'description' => 'Compression algorithm choosen for compression. Will be one of ' . Compression::NONE . ', [' . Compression::GZIP . '](https://en.wikipedia.org/wiki/Gzip), or [' . Compression::ZSTD . '](https://en.wikipedia.org/wiki/Zstd).', + 'description' => 'Compression algorithm chosen for compression. Will be one of ' . Compression::NONE . ', [' . Compression::GZIP . '](https://en.wikipedia.org/wiki/Gzip), or [' . Compression::ZSTD . '](https://en.wikipedia.org/wiki/Zstd).', 'default' => '', 'example' => 'gzip', 'array' => false @@ -92,6 +92,12 @@ class Bucket extends Model 'default' => true, 'example' => false, ]) + ->addRule('totalSize', [ + 'type' => self::TYPE_INTEGER, + 'description' => 'Total size of this bucket in bytes.', + 'default' => 0, + 'example' => 128, + ]) ; } diff --git a/tests/e2e/Services/GraphQL/Base.php b/tests/e2e/Services/GraphQL/Base.php index 10a6efd8e8..7ea3ae61f4 100644 --- a/tests/e2e/Services/GraphQL/Base.php +++ b/tests/e2e/Services/GraphQL/Base.php @@ -2334,7 +2334,8 @@ trait Base buckets { _id name - enabled + enabled, + totalSize } } }'; @@ -2344,6 +2345,7 @@ trait Base _id name enabled + totalSize } }'; case self::UPDATE_BUCKET: diff --git a/tests/e2e/Services/GraphQL/StorageServerTest.php b/tests/e2e/Services/GraphQL/StorageServerTest.php index 37dba77ab3..2c648be99a 100644 --- a/tests/e2e/Services/GraphQL/StorageServerTest.php +++ b/tests/e2e/Services/GraphQL/StorageServerTest.php @@ -105,12 +105,24 @@ class StorageServerTest extends Scope $buckets = $buckets['body']['data']['storageListBuckets']; $this->assertIsArray($buckets); + if (!empty($buckets['buckets'])) { + foreach ($buckets['buckets'] as $bucket) { + $this->assertArrayHasKey('totalSize', $bucket); + $this->assertIsInt($bucket['totalSize']); + + /* always 0 because the stats worker runs hourly! */ + $this->assertGreaterThanOrEqual(0, $bucket['totalSize']); + } + } + return $buckets; } /** * @depends testCreateBucket + * @depends testCreateFile * @param $bucket + * @param $file * @return array * @throws \Exception */ @@ -134,6 +146,7 @@ class StorageServerTest extends Scope $this->assertArrayNotHasKey('errors', $bucket['body']); $bucket = $bucket['body']['data']['storageGetBucket']; $this->assertEquals('Actors', $bucket['name']); + $this->assertArrayHasKey('totalSize', $bucket); return $bucket; } diff --git a/tests/e2e/Services/Storage/StorageBase.php b/tests/e2e/Services/Storage/StorageBase.php index c67cfcc99a..d0130eb3d0 100644 --- a/tests/e2e/Services/Storage/StorageBase.php +++ b/tests/e2e/Services/Storage/StorageBase.php @@ -951,4 +951,69 @@ trait StorageBase return $data; } + + public function testBucketTotalSize(): void + { + $bucket = $this->client->call(Client::METHOD_POST, '/storage/buckets', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'], + ], [ + 'bucketId' => ID::unique(), + 'name' => 'Test Bucket Size', + 'permissions' => [ + Permission::read(Role::any()), + Permission::create(Role::any()), + ], + ]); + + $this->assertEquals(201, $bucket['headers']['status-code']); + $bucketId = $bucket['body']['$id']; + + // bucket should have totalSize = 0 (no files) + $emptyBucket = $this->client->call(Client::METHOD_GET, '/storage/buckets/' . $bucketId, [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'], + ]); + + $this->assertEquals(200, $emptyBucket['headers']['status-code']); + $this->assertArrayHasKey('totalSize', $emptyBucket['body']); + $this->assertEquals(0, $emptyBucket['body']['totalSize']); + + // upload first file + $file1 = $this->client->call(Client::METHOD_POST, '/storage/buckets/' . $bucketId . '/files', array_merge([ + 'content-type' => 'multipart/form-data', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'fileId' => ID::unique(), + 'file' => new CURLFile(realpath(__DIR__ . '/../../../resources/logo.png'), 'image/png', 'logo.png'), + ]); + + $this->assertEquals(201, $file1['headers']['status-code']); + + // upload second file + $file2 = $this->client->call(Client::METHOD_POST, '/storage/buckets/' . $bucketId . '/files', array_merge([ + 'content-type' => 'multipart/form-data', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'fileId' => ID::unique(), + 'file' => new CURLFile(realpath(__DIR__ . '/../../../resources/image.webp'), 'image/webp', 'image.webp'), + ]); + + $this->assertEquals(201, $file2['headers']['status-code']); + + $bucket = $this->client->call(Client::METHOD_GET, '/storage/buckets/' . $bucketId, [ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-key' => $this->getProject()['apiKey'], + ]); + + $this->assertEquals(200, $bucket['headers']['status-code']); + $this->assertArrayHasKey('totalSize', $bucket['body']); + $this->assertIsInt($bucket['body']['totalSize']); + + /* will always be 0 in tests because the worker runs hourly! */ + $this->assertGreaterThanOrEqual(0, $bucket['body']['totalSize']); + } } diff --git a/tests/e2e/Services/Storage/StorageCustomServerTest.php b/tests/e2e/Services/Storage/StorageCustomServerTest.php index 1dafd8ca06..9b0473a352 100644 --- a/tests/e2e/Services/Storage/StorageCustomServerTest.php +++ b/tests/e2e/Services/Storage/StorageCustomServerTest.php @@ -96,6 +96,14 @@ class StorageCustomServerTest extends Scope $this->assertEquals($id, $response['body']['buckets'][0]['$id']); $this->assertEquals('Test Bucket', $response['body']['buckets'][0]['name']); + foreach ($response['body']['buckets'] as $bucket) { + $this->assertArrayHasKey('totalSize', $bucket); + $this->assertIsInt($bucket['totalSize']); + + /* always 0 because the stats worker runs hourly! */ + $this->assertGreaterThanOrEqual(0, $bucket['totalSize']); + } + $response = $this->client->call(Client::METHOD_GET, '/storage/buckets', array_merge([ 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], @@ -186,6 +194,7 @@ class StorageCustomServerTest extends Scope $this->assertNotEmpty($response['body']); $this->assertEquals($id, $response['body']['$id']); $this->assertEquals('Test Bucket', $response['body']['name']); + $this->assertArrayHasKey('totalSize', $response['body']); /** * Test for FAILURE