Compare commits

...
Author SHA1 Message Date
Chirag Aggarwal f1addd3716 debug: stats usage 2025-11-06 22:17:16 +05:30
Steven NguyenandGitHub ebee879855 Merge pull request #10748 from appwrite/copilot/update-issue-triage-workflow
Migrate issue-triage workflow from event-based to scheduled batch processing with duplicate detection
2025-11-06 08:14:25 -08:00
Matej BačoandGitHub ad46d057d5 Merge pull request #10593 from appwrite/feat-SER-193-Update-facts-on-github-sites-and-functions
Feat: update facts on GitHub sites and functions
2025-11-06 09:35:53 +01:00
Matej BačoandGitHub 6c1e4434a6 Merge pull request #10763 from appwrite/update-readme-file
Update README.md
2025-11-04 15:52:25 +01:00
VeereshandGitHub ba6e389f81 Update README.md 2025-11-04 19:33:30 +05:30
copilot-swe-agent[bot]andstnguyen90 2f843153da Add duplicate/related issues detection and listing to triage workflow
Co-authored-by: stnguyen90 <1477010+stnguyen90@users.noreply.github.com>
2025-11-03 20:02:03 +00:00
copilot-swe-agent[bot]andstnguyen90 1f9afc8cab Update issue-triage workflow to run daily and process last 24h issues
Co-authored-by: stnguyen90 <1477010+stnguyen90@users.noreply.github.com>
2025-11-01 15:47:43 +00:00
copilot-swe-agent[bot] c5d4551cab Initial plan 2025-11-01 15:39:50 +00:00
Steven NguyenandGitHub a869ae3323 Merge pull request #10725 from appwrite/copilot/analyze-action-failure
Add missing models: read permission to AI Moderator workflow
2025-10-29 07:33:44 -07:00
Steven NguyenandGitHub e5cd093a7b Apply suggestion from @stnguyen90 2025-10-29 00:45:49 -07:00
copilot-swe-agent[bot]andstnguyen90 2078e52798 Add contents: read permission to AI Moderator workflow
Co-authored-by: stnguyen90 <1477010+stnguyen90@users.noreply.github.com>
2025-10-29 07:16:52 +00:00
copilot-swe-agent[bot] 08c51b8761 Initial plan 2025-10-29 07:12:09 +00:00
Steven NguyenandGitHub 37dfce0f5b Merge pull request #10718 from appwrite/add-workflow-workflows-issue-triage.md-5094
Add agentic workflow issue-triage
2025-10-29 00:04:22 -07:00
Steven NguyenandGitHub 92f776b525 Merge pull request #10717 from appwrite/copilot/add-ai-moderator-repo
Add GitHub AI Moderator workflow
2025-10-28 11:46:35 -07:00
Steven NguyenandGitHub eec3d210ee Add agentic workflow issue-triage 2025-10-28 03:00:30 +00:00
copilot-swe-agent[bot]andstnguyen90 b729c8119d Fix parameter name to use 'token' instead of 'github-token'
Co-authored-by: stnguyen90 <1477010+stnguyen90@users.noreply.github.com>
2025-10-28 02:18:07 +00:00
copilot-swe-agent[bot]andstnguyen90 30a093a0d5 Add GitHub AI Moderator workflow
Co-authored-by: stnguyen90 <1477010+stnguyen90@users.noreply.github.com>
2025-10-28 02:16:40 +00:00
copilot-swe-agent[bot] dee3ddffca Initial plan 2025-10-28 02:11:53 +00:00
Steven NguyenandGitHub 6ded8dce67 Merge pull request #10700 from appwrite/chore-issue-auto-labeler
Create workflow to auto add labels to issues
2025-10-24 14:50:46 -07:00
Steven NguyenandSteven Nguyen 21b95c2645 chore: create workflow to auto add labels to issues 2025-10-24 11:24:57 -07:00
Harsh MahajanandGitHub 1468231de7 Update Comment.php 2025-10-23 20:20:16 +05:30
Harsh MahajanandGitHub 32dae9ad7c Update Comment.php 2025-10-22 10:05:18 +05:30
Harsh MahajanandGitHub be5c5f9420 Merge branch 'main' into feat-SER-193-Update-facts-on-github-sites-and-functions 2025-10-22 09:53:45 +05:30
Jake BarnbyandGitHub 72c608bf3b Merge pull request #10677 from appwrite/chore-sync-1.8.0
Chore sync 1.8.0 into main
2025-10-22 01:09:41 +00:00
Steven Nguyen 60b4835539 Merge branch 'feat-1.8.0-release-prep' into chore-sync-1.8.0 2025-10-21 12:24:26 -07:00
Steven Nguyen 610a359160 chore: clean up CHANGES.md
1. Remove PR authors because they don't render properly anyways
2. Format PR links to use markdown style links instead of plain URLs
2025-10-20 21:15:38 -07:00
Steven Nguyen a3f51298fe chore: update CHANGES.md for 1.8.0 release 2025-10-20 21:15:38 -07:00
Steven Nguyen 46f249fd3b feat: bump console to version 7.4.7 2025-10-20 21:15:38 -07:00
Steven Nguyen 97312d1a6d feat(self-hosted): update migration for transactions collections 2025-10-20 21:15:38 -07:00
Steven Nguyen 01765fd27f feat: bump console to version 7.4.4 2025-10-20 21:15:37 -07:00
Steven Nguyen 0a809f85f2 fix(self-hosted): create missing project attributes
Appwrite 1.6.1 added these attributes, but the migration was never updated to include those new attributes
2025-10-20 21:15:37 -07:00
Steven Nguyen a9b18811ea fix(self-hosted): clear cache for collections and documents
In older versions of Appwrite, the internal ID was the $internalId attribute. However, it has now changed to $sequence so that it can align with the publicly exposed attribute for an auto-incrementing ID.

The problem with this change is that data in the cache still references the old $internalId attribute, which can lead to inconsistencies and errors when accessing cached documents. To resolve this issue, we need to clear the cache for all collections and documents at the beginning of the migration so that the new $sequence attribute is used.
2025-10-20 21:15:37 -07:00
Steven Nguyen 59f82a0dd7 feat: bump console to version 7.1.11 2025-10-20 21:15:37 -07:00
Steven Nguyen 00615c2f38 chore: create migration version for 1.8.x 2025-10-20 21:15:37 -07:00
Steven Nguyen 56a15efe3f chore: bump appwrite version to 1.8.0 2025-10-14 14:42:59 -07:00
Luke B. SilverandGitHub 3e078027a7 Merge pull request #10644 from appwrite/bcc-only-emails
chore: use bcc only emails for smtp
2025-10-14 13:18:36 +01:00
Chirag Aggarwal 97f448f984 comma 2025-10-14 17:19:08 +05:30
Chirag Aggarwal 07727298f7 remove default recepient 2025-10-14 17:18:44 +05:30
Chirag Aggarwal 752520470d fix: param 2025-10-14 09:27:50 +05:30
Chirag Aggarwal 128cd68ec8 chore: use bcc only emails for smtp 2025-10-14 09:23:31 +05:30
Damodar LohaniandGitHub a832343348 Merge pull request #10617 from appwrite/fix-make-stats-usage-extendable
Fix: make methods protected for extending
2025-10-14 06:40:25 +05:45
Luke B. SilverandGitHub 3e47f9442f Merge pull request #10641 from appwrite/update-dotnet-sdk-0.21.2
Update .NET SDK to 0.21.2 and improve release detection
2025-10-13 12:53:28 +01:00
Luke B. SilverandGitHub 08d661d8c3 Merge pull request #10620 from appwrite/fix-block-schedules
Fix block schedules
2025-10-13 12:51:38 +01:00
loks0n 3544649903 fix: block schedules 2025-10-13 12:29:32 +01:00
Chirag Aggarwal 6f5ac232c5 lint 2025-10-13 16:01:55 +05:30
Chirag Aggarwal 3b82141de2 Update .NET SDK to 0.21.2 and improve release detection
- Update .NET SDK version to 0.21.2 with Object[] deserialization fix
- Update sdk-generator dependency from 1.4.3 to 1.4.4
- Improve SDK release detection to check actual commit SHA of latest release tag instead of just checking releases targeting the branch
2025-10-13 15:25:51 +05:30
Jake BarnbyandGitHub e303501d4a Merge pull request #10640 from appwrite/feat-txn
Fix txn API scope backwards compat
2025-10-13 16:30:46 +13:00
Jake Barnby 935011b9e9 Fix backwards compat API scopes 2025-10-13 15:59:26 +13:00
Jake BarnbyandGitHub de7dd6079e Merge pull request #10618 from appwrite/ser-417
Throw duplicate error when function id already exists
2025-10-13 14:56:43 +13:00
Damodar LohaniandGitHub 53212dc654 Merge branch '1.8.x' into fix-make-stats-usage-extendable 2025-10-12 10:17:33 +05:45
Matej BačoandGitHub 95268c49ce Merge pull request #10631 from appwrite/fix-zero-errors-on-realtime
Fix: code 0 from databases on realtime
2025-10-10 15:45:09 +02:00
Darshan 1c6b56385c fix: code 0 from databases. 2025-10-10 18:26:00 +05:30
Luke B. SilverandGitHub 9819ee518d Merge pull request #10629 from appwrite/update-domains-0.8.2
update domains lib to 0.8.2
2025-10-10 12:29:19 +01:00
Chirag Aggarwal 751d51ea2e update domains lib to 0.8.2 2025-10-10 15:37:29 +05:30
Hemachandar 1f322a2700 add test 2025-10-10 15:30:56 +05:30
Jake BarnbyandGitHub d89173ad57 Merge pull request #10627 from appwrite/fix-releases-sdks
fix: prevent empty releases in sdk release script
2025-10-10 21:43:35 +13:00
Chirag Aggarwal d6fc2806dc fix: prevent empty releases in sdk release script 2025-10-10 13:26:55 +05:30
Jake Barnby a8b9d75b2a Merge remote-tracking branch 'origin/feat-txn' into 1.8.x 2025-10-10 19:21:48 +13:00
Jake Barnby ab5556919e Update specs 2025-10-10 19:21:33 +13:00
Jake Barnby f9e0bc4cd7 Merge branch 'feat-txn' into 1.8.x 2025-10-10 18:46:42 +13:00
Jake Barnby 12a1653ae0 Update doc desc 2025-10-10 18:44:48 +13:00
Jake BarnbyandGitHub 821b3b86e4 Merge pull request #10626 from appwrite/feat-txn
Fix cross API compatibility
2025-10-10 18:38:42 +13:00
Jake Barnby 2830ab55f0 Lint 2025-10-10 17:42:42 +13:00
Jake Barnby f95e8a965a Only set sequence on not empty 2025-10-10 17:27:57 +13:00
Jake Barnby 7512a0db6b Fix cross-API compat 2025-10-10 17:27:09 +13:00
Jake Barnby cdac840071 Use return value for write ops count 2025-10-10 15:51:26 +13:00
Jake BarnbyandGitHub aa43902d32 Merge pull request #10624 from appwrite/feat-txn
Feat txn
2025-10-10 02:38:21 +13:00
Jake Barnby 276b135799 Trigger CI 2025-10-10 02:17:42 +13:00
Jake Barnby bf589f7485 Fix client side 2025-10-10 02:16:58 +13:00
Jake BarnbyandGitHub 852f06cc28 Merge pull request #10623 from Veera-mulge/change-desc
Update README.md
2025-10-10 02:09:26 +13:00
VeereshandGitHub d82171b4de Update README.md 2025-10-09 18:36:30 +05:30
Jake BarnbyandGitHub 1dbcfcc154 Merge pull request #10621 from appwrite/feat-txn
Feat txn sdks
2025-10-10 00:34:27 +13:00
Jake Barnby 32d6eaa21c Check expiry on stage 2025-10-09 23:37:44 +13:00
Jake Barnby a3103bf4d4 Fix release 2025-10-09 23:37:28 +13:00
Hemachandar 9cd284f5cd Throw duplicate error when function id already exists 2025-10-09 15:01:00 +05:30
Jake Barnby 0877aa2964 Generate SDKs 2025-10-09 21:04:50 +13:00
Jake Barnby 3b225b8ec3 Update specs 2025-10-09 16:52:40 +13:00
Jake BarnbyandGitHub 5727b0fb45 Merge pull request #10023 from appwrite/feat-txn
Feat txn
2025-10-09 16:47:45 +13:00
Jake Barnby 8193f0fcac Ensure create/upsert stores in state by generated ID not unique string 2025-10-09 16:24:25 +13:00
Jake Barnby 3d3f50064d Force set state on increment 2025-10-09 15:50:18 +13:00
Damodar LohaniandGitHub 432faaf209 Fix: make methods protected for extending 2025-10-09 08:24:39 +05:45
Jake Barnby 10b1f1f145 Merge remote-tracking branch 'origin/1.8.x' into feat-txn 2025-10-09 13:45:29 +13:00
Jake Barnby dcad82c46b Update db 2025-10-09 13:45:19 +13:00
Jake BarnbyandGitHub 07ce00d36d Merge pull request #10615 from appwrite/deprecate-create-verification-add-patch-releases
add automatic releases
2025-10-08 20:55:37 +13:00
Chirag Aggarwal 8d2df2b744 add go changes 2025-10-08 13:25:28 +05:30
Chirag Aggarwal adf9ec3e75 add automatic releases 2025-10-08 13:05:46 +05:30
Jake BarnbyandGitHub 1c691cf3e8 Merge pull request #10614 from appwrite/deprecate-create-verification-add-patch-releases
Add minor releases for all SDKs - deprecate createVerification, add createEmailVerification
2025-10-08 19:40:11 +13:00
Chirag Aggarwal e935fc2510 Add minor releases for all SDKs - deprecate createVerification, add createEmailVerification
This commit adds minor version releases for all client and server SDKs to deprecate the
`createVerification` method in the Account service and introduce the new `createEmailVerification`
method as its replacement.

Updated SDKs:

Client SDKs:
- Android: 11.0.0 → 11.1.0
- Web: 21.0.0 → 21.1.0
- Flutter: 20.0.0 → 20.1.0
- Apple: 13.0.0 → 13.1.0
- React Native: 0.15.0 → 0.16.0

Server SDKs:
- Node.js: 20.0.0 → 20.1.0
- PHP: 17.2.0 → 17.3.0
- Python: 13.2.0 → 13.3.0
- Ruby: 19.0.0 → 19.1.0
- Go: 0.13.0 → 0.14.0
- .NET: 0.19.0 → 0.20.0
- Dart: 19.0.0 → 19.1.0
- Kotlin: 12.0.0 → 12.1.0
- Swift: 13.0.0 → 13.1.0

Console SDK:
- CLI: 10.0.1 → 10.1.0
2025-10-08 10:20:23 +05:30
Matej BačoandGitHub ca24ff808d Merge pull request #10533 from appwrite/ser-378-fix-null-recipient-in-email
Throw error when email is not available for account verification
2025-10-07 14:49:01 +02:00
Matej BačoandGitHub e3b1146dbb Merge pull request #10501 from appwrite/ser-375-update-email-verification-with-branded-design
Branded email for Console auth flows
2025-10-07 13:20:53 +02:00
Hemachandar 7f62b19240 Merge branch '1.8.x' into ser-375-update-email-verification-with-branded-design 2025-10-07 16:11:54 +05:30
Hemachandar 6e0d376746 use filevalidator 2025-10-07 16:07:47 +05:30
Jake Barnby 066e0bc236 Validate inc/dec operation value is numeric 2025-10-07 23:33:19 +13:00
Jake Barnby eb7306a4fa Add missing state handlers 2025-10-07 22:17:59 +13:00
Matej BačoandGitHub f653348f93 Merge pull request #10609 from appwrite/ser-439
Add project name in email subject
2025-10-07 09:53:04 +02:00
Jake Barnby 9e3c439c51 Merge remote-tracking branch 'origin/1.8.x' into feat-txn
# Conflicts:
#	composer.lock
2025-10-07 18:57:46 +13:00
Jake Barnby 61b073a6a2 Clean up 2025-10-07 18:53:38 +13:00
Jake BarnbyandGitHub 92ecd08a18 Merge pull request #10606 from appwrite/feat-rename-verification-methods
Rename verification SDK methods to be more specific
2025-10-07 18:17:45 +13:00
Chirag AggarwalandGitHub 8baf4d429e Merge branch '1.8.x' into feat-rename-verification-methods 2025-10-07 11:47:43 +07:00
Jake BarnbyandGitHub aa48c6e63e Merge pull request #10611 from appwrite/chore-bump-db
Chore bump db
2025-10-07 17:34:31 +13:00
Chirag Aggarwal 024d13c1b2 update naming 2025-10-07 09:58:39 +05:30
Jake Barnby 52ac68b511 Trigger CI 2025-10-07 16:12:20 +13:00
Jake Barnby 99c0ccacf1 Update database 2025-10-07 16:11:18 +13:00
Jake BarnbyandGitHub 5d09189737 Merge pull request #10608 from appwrite/realtime-fix
added both collection and table id in the realtime
2025-10-07 14:17:19 +13:00
Luke B. SilverandGitHub af68c46702 Merge pull request #10592 from Priyanshuthapliyal2005/fix/tableDbBrokenLink
fix(docs): update broken create table links in TablesDB docs
2025-10-06 21:24:42 +01:00
Luke B. SilverandGitHub 7b207ccfd2 Merge pull request #10581 from Priyanshuthapliyal2005/fix/listTemplates
fix(listTemplates): correct invalid template links in Create temporary deployment endpoint
2025-10-06 21:18:42 +01:00
HemachandarandGitHub a60ae0a9ed Merge branch '1.8.x' into ser-439 2025-10-06 23:51:06 +05:30
Hemachandar cb70a6e2c8 Add project name in email subject 2025-10-06 22:14:29 +05:30
Hemachandar caf18372ce feedback 2025-10-06 21:52:18 +05:30
ArnabChatterjee20k eeebea1dbb added both collection and table id in the realtime 2025-10-06 20:13:36 +05:30
Hemachandar 29dbe99840 simplify config & templates 2025-10-06 19:58:01 +05:30
Chirag Aggarwal 56076ad649 update path and add alias 2025-10-06 19:13:06 +05:30
Chirag Aggarwal c618144d78 update examples 2025-10-06 16:46:56 +05:30
Chirag AggarwalandClaude 4348a176d5 Rename verification SDK methods to be more specific
This commit renames the verification SDK methods to better reflect their purpose:
- `createVerification` → `createEmailVerification`
- `updateVerification` → `updateEmailVerification`

The old method names are maintained for backwards compatibility and marked as deprecated (since 1.8.0) with references to the new method names.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-06 16:44:31 +05:30
Jake BarnbyandGitHub 3190d0437e Merge pull request #10596 from appwrite/feat-update-relationships
Update database
2025-10-06 18:29:45 +13:00
Jake BarnbyandGitHub 06a6240877 Merge pull request #10598 from appwrite/fix-dat-761
Sanitize 5xx errors on realtime
2025-10-06 17:48:37 +13:00
Jake Barnby 1311c73d1a Merge branch 'feat-update-relationships' of github.com:appwrite/appwrite into feat-update-relationships 2025-10-06 17:32:49 +13:00
Jake Barnby b7f7fb00af Update database 2025-10-06 17:32:35 +13:00
DarshanandGitHub fa4044d922 Merge branch '1.8.x' into fix-dat-761 2025-10-06 09:58:17 +05:30
Darshan 875c8f8d1d Merge remote-tracking branch 'origin/fix-dat-761' into fix-dat-761 2025-10-06 09:58:05 +05:30
Darshan 02b982f3a1 update: code fallback! 2025-10-06 09:57:54 +05:30
Jake BarnbyandGitHub d7edaef34f Merge branch '1.8.x' into feat-update-relationships 2025-10-06 17:09:50 +13:00
Jake Barnby 1da034d00c Update database 2025-10-06 17:08:19 +13:00
Jake BarnbyandGitHub a06d96699b Merge branch '1.8.x' into feat-txn 2025-10-06 17:02:11 +13:00
Jake BarnbyandGitHub ee7917999d Merge pull request #10554 from appwrite/update-sdks-add-response-models
chore: update sdks add response models
2025-10-06 16:19:33 +13:00
Jake Barnby 2566f4d98e Add tostring 2025-10-06 14:16:01 +13:00
Jake Barnby 24f6da5610 Add assertions on tables DB 2025-10-06 13:47:21 +13:00
DarshanandGitHub 68124d1d14 Merge branch '1.8.x' into fix-dat-761 2025-10-05 15:28:45 +05:30
Luke B. SilverandGitHub 04ae6a582a Merge pull request #10601 from appwrite/chore-update-composer-deps
chore: update composer dependencies
2025-10-04 21:56:11 +01:00
Chirag Aggarwal 0314547c95 fix: permission issues 2025-10-05 00:39:54 +05:30
Chirag AggarwalandGitHub 5aa94036d1 Merge branch '1.8.x' into update-sdks-add-response-models 2025-10-05 02:01:33 +07:00
Chirag AggarwalandClaude 81bd4cbe50 chore: update composer dependencies
- Updated open-telemetry/api from 1.6.0 to 1.7.0
- Updated open-telemetry/sdk from 1.8.0 to 1.9.0
- Updated utopia-php/domains from 0.8.0 to 0.8.1
- Updated appwrite/sdk-generator from 1.4.2 to 1.4.3

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-05 00:26:37 +05:30
Chirag Aggarwal f5af1ee7bb update more 2025-10-04 21:09:19 +05:30
Darshan 236585c20b fix: sanitize 5xx errors on realtime when running in production. 2025-10-04 18:38:35 +05:30
Jake Barnby ce52dba419 Update to release 2025-10-05 00:09:26 +13:00
Jake Barnby 5be2489e55 Check query result 2025-10-05 00:06:56 +13:00
Jake Barnby 12f6b07fbf Update database 2025-10-04 23:20:08 +13:00
Jake Barnby 6881df6ae5 Fix expectations 2025-10-04 22:55:07 +13:00
Jake Barnby 52892ee46e Upgrade for breaking changes 2025-10-04 22:32:01 +13:00
Jake Barnby 57e3e8f5f4 Fix test scope 2025-10-04 21:10:50 +13:00
Jake Barnby 3e77810e13 Fix existence check for tracked + staged ops 2025-10-04 19:26:22 +13:00
Jake Barnby 01ef058adb Merge remote-tracking branch 'origin/1.8.x' into feat-txn
# Conflicts:
#	tests/e2e/Services/Realtime/RealtimeCustomClientTest.php
2025-10-04 17:03:52 +13:00
Jake Barnby 17a5019606 Merge branch 'feat-txn' of github.com:appwrite/appwrite into feat-txn 2025-10-04 16:49:27 +13:00
Jake Barnby 9edc0c16d8 Realtime txn tests 2025-10-04 16:48:44 +13:00
Jake Barnby 2c7cf7826b Fix operation perm checks 2025-10-04 16:43:39 +13:00
Aditya OberaiandGitHub 3fd5e0337b Merge branch '1.8.x' into fix/listTemplates 2025-10-04 01:16:19 +05:30
Jake Barnby 742ddc517b Update database 2025-10-04 01:38:06 +13:00
Jake BarnbyGitHubcoderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
e93e03c248 Update src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Update.php
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-04 01:15:53 +13:00
Jake Barnby 89a47953d8 Fix tests 2025-10-04 00:46:13 +13:00
Hemachandar b145c609bd change error codes 2025-10-03 16:29:39 +05:30
Priyanshu ThapliyalandGitHub be67da9d64 Merge branch '1.8.x' into fix/tableDbBrokenLink 2025-10-03 15:49:21 +05:30
Matej BačoandGitHub 59d5c49818 Merge pull request #10589 from appwrite/ser-377
Handle OIDC well-known endpoint errors
2025-10-03 10:44:38 +02:00
Priyanshu ThapliyalandGitHub 9d4592d90e Merge branch '1.8.x' into fix/tableDbBrokenLink 2025-10-03 14:01:05 +05:30
Priyanshu Thapliyal ce86758cdc fix typo issues raise by bot 2025-10-03 08:30:06 +00:00
Matej BačoandGitHub b811fc6252 Merge pull request #10503 from appwrite/ser-10-oauth-auto-allow-site-domains
Auto-allow sites domain for OAuth
2025-10-03 10:15:05 +02:00
Jake Barnby deb3d75375 Explicit order asc 2025-10-03 20:00:32 +13:00
Jake BarnbyandGitHub 60433ef22d Merge pull request #10590 from appwrite/dat-753
Bug fix -> related data in realtime payload
2025-10-03 19:31:48 +13:00
Jake Barnby 2bc90db1f6 Fix tests 2025-10-03 18:56:05 +13:00
Jake Barnby 59ae403391 Add more validation tests 2025-10-03 17:34:34 +13:00
Jake Barnby 71b2164154 Clean up state helper 2025-10-03 16:58:23 +13:00
Chirag Aggarwal 848b932ea1 fix flutter version 2025-10-03 08:46:25 +05:30
Chirag Aggarwal a61385e534 update versions 2025-10-03 08:43:54 +05:30
Harsh MahajanGitHubcoderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
64c3b7a2ff Update src/Appwrite/Vcs/Comment.php
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-02 23:19:34 +05:30
Harsh Mahajan 61a8f589ac port issue 2025-10-02 17:44:21 +00:00
Harsh Mahajan 92ccb6e4ea feat(vcs): expand GitHub comment tips 2025-10-02 17:43:30 +00:00
Chirag AggarwalandGitHub a3dff6a640 Merge branch '1.8.x' into update-sdks-add-response-models 2025-10-02 22:54:44 +07:00
Priyanshu Thapliyal 770c58d33c fix(docs): replace broken table creation links with correct references 2025-10-02 14:28:35 +00:00
ArnabChatterjee20k 76d3dc3d5a * added senstive var copying in from method
* added tests
2025-10-02 18:27:20 +05:30
Jake Barnby 522a4d2a62 Format 2025-10-03 00:39:14 +13:00
Jake Barnby 44e7068a9a Fix syntax 2025-10-03 00:26:39 +13:00
Jake Barnby 0aaa276f03 Merge branch 'feat-txn' of github.com:appwrite/appwrite into feat-txn 2025-10-03 00:12:30 +13:00
Jake Barnby d54058b59a Fix multi API event 2025-10-03 00:12:19 +13:00
Jake Barnby 5da2ca292a Add missing injection 2025-10-03 00:03:54 +13:00
Jake Barnby f4830b1672 Catch query exception 2025-10-03 00:03:46 +13:00
Jake Barnby 7fd2502dd5 Block client bulk upsert txn 2025-10-03 00:03:34 +13:00
Jake Barnby 36a8365ebb Count from state 2025-10-03 00:03:20 +13:00
Jake BarnbyGitHubcoderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
45da32d5d9 Update src/Appwrite/Utopia/Database/Validator/Operation.php
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-02 23:57:30 +13:00
Jake BarnbyGitHubcoderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
a9a97b2fe0 Update src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Create.php
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-02 23:20:22 +13:00
Jake BarnbyGitHubcoderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
6581d68e6d Update src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Bulk/Upsert.php
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-02 23:20:02 +13:00
Jake BarnbyGitHubcoderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
51d5ddb463 Update src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Bulk/Upsert.php
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-02 23:17:17 +13:00
Jake BarnbyGitHubcoderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
9813b98133 Update src/Appwrite/Databases/TransactionState.php
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-02 23:05:43 +13:00
Jake BarnbyGitHubcoderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
93d8f1cfe7 Update src/Appwrite/Databases/TransactionState.php
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-02 23:03:52 +13:00
HemachandarandGitHub 3d287207d2 Merge branch '1.8.x' into ser-377 2025-10-02 14:59:50 +05:30
Hemachandar ca1c069e65 Handle OIDC well-known endpoint errors 2025-10-02 14:58:55 +05:30
Jake Barnby 473be9284d Check convert 2025-10-02 22:24:54 +13:00
Jake Barnby f667149556 Trigger CI 2025-10-02 22:12:02 +13:00
Jake Barnby 490341af09 Fix log limit 2025-10-02 21:46:28 +13:00
Jake Barnby ae661e9961 Fix missing bulk map 2025-10-02 21:37:54 +13:00
Jake Barnby 26ae33522d Fix txn read scope 2025-10-02 21:36:33 +13:00
Jake Barnby 070d5f59d1 Merge remote-tracking branch 'origin/1.8.x' into feat-txn 2025-10-02 19:25:46 +13:00
Jake BarnbyandGitHub eff3e4bda2 Merge pull request #10585 from appwrite/fix-logs-truncation-tests
fix: logs truncation tests
2025-10-02 19:22:21 +13:00
Matej BačoandGitHub e40cb8e327 Merge pull request #10586 from appwrite/fix-activities
Fix activities
2025-10-01 15:41:27 +02:00
Darshan 813bc0d9b3 fix: wrong audit resource. 2025-10-01 18:25:32 +05:30
Chirag Aggarwal 11bbe3c6dd fix: test file 2025-10-01 18:17:35 +05:30
Chirag AggarwalandGitHub 2841c1b792 Merge branch '1.8.x' into update-sdks-add-response-models 2025-10-01 19:13:32 +07:00
Priyanshu Thapliyal 558904e103 fix(listTemplates): fix invalid template links in Create temporary deployment endpoint 2025-10-01 08:58:22 +00:00
Khushboo VermaandGitHub f7e594a51a Merge branch '1.8.x' into ser-378-fix-null-recipient-in-email 2025-10-01 08:38:17 +01:00
Jake Barnby 9a468e8297 Merge remote-tracking branch 'origin/1.8.x' into feat-txn
# Conflicts:
#	composer.lock
2025-10-01 20:15:43 +13:00
Chirag Aggarwal b4dd1df0c7 update composer 2025-10-01 11:56:48 +05:30
Jake BarnbyandGitHub 8752feef4d Merge pull request #10577 from appwrite/chore-bump-db
Update database for nested selection fix
2025-10-01 19:03:15 +13:00
Jake Barnby b1757250d1 Fix update 2025-10-01 17:47:42 +13:00
Chirag Aggarwal 3d43f85145 add temp hack 2025-10-01 10:06:55 +05:30
Chirag Aggarwal 397c41e68b update cli 2025-10-01 09:46:20 +05:30
Jake Barnby 3dd099bd94 Update database for nested selection fix 2025-10-01 17:05:12 +13:00
Torsten DittmannandGitHub 054bee773c Merge pull request #10572 from appwrite/fix-builds-worker-output-directory 2025-09-30 20:31:03 +04:00
Torsten Dittmann b7604a5742 Fix buildOutput attribute name in deployment check 2025-09-30 19:51:17 +04:00
Luke B. SilverandGitHub e244cb2f02 Merge pull request #10571 from appwrite/fix-builds-worker-output-directory
fix(builds-worker): Use outputDirectory attribute from deployment
2025-09-30 15:58:13 +01:00
Torsten Dittmann debdfeedf1 Fix variable reference in function build command 2025-09-30 18:33:22 +04:00
Torsten Dittmann 4b98544112 Move outputDirectory initialization before conditional flow 2025-09-30 18:31:37 +04:00
Torsten Dittmann 04d6693803 Fix output directory path validation and position 2025-09-30 18:10:53 +04:00
Torsten Dittmann b614045d97 fix(builds-worker): Use outputDirectory attribute from deployment or
resource
2025-09-30 18:08:49 +04:00
Jake BarnbyandGitHub f0b3f40a63 Merge pull request #10561 from appwrite/update-enums
chore: add enums for database type and column status
2025-09-29 19:51:44 +13:00
Chirag Aggarwal 5245ff7167 update enum name 2025-09-29 11:29:40 +05:30
Chirag Aggarwal d5e1f9952a chore: add enums for database type and column status 2025-09-29 11:26:00 +05:30
Chirag Aggarwal a0e8711d9b chore: update sdks add response models 2025-09-26 15:33:37 +05:30
Jake BarnbyandGitHub cf92c259ed Merge pull request #10553 from appwrite/update-platform-type
fix: enum typing for platform in specs
2025-09-26 20:06:53 +12:00
Chirag Aggarwal a0f0449c21 fix: enum typing for platform in specs 2025-09-26 12:33:10 +05:30
Jake Barnby 372a50f9a5 Update lock 2025-09-26 14:45:09 +12:00
Jake Barnby ce1f7d4da3 Merge remote-tracking branch 'origin/1.8.x' into feat-txn
# Conflicts:
#	composer.lock
2025-09-26 14:43:10 +12:00
Jake Barnby ef147cde21 Format 2025-09-26 14:28:11 +12:00
Jake Barnby 4e91904608 Update database 2025-09-26 14:25:02 +12:00
Luke B. SilverandGitHub cdd5e5e728 Merge pull request #10551 from appwrite/update-composer-frameowkr
chore: update framework lib to 0.33.28
2025-09-25 15:59:39 +01:00
Chirag Aggarwal 14c64e405b chore: update framework lib 2025-09-25 19:45:32 +05:30
Jake Barnby e06c358db4 Don't require data for delete operation 2025-09-26 00:50:25 +12:00
Jake Barnby 7a03084e83 Bump SDK version 2025-09-25 19:21:21 +12:00
Jake Barnby 97f76899bf Merge remote-tracking branch 'origin/1.8.x' into feat-txn
# Conflicts:
#	app/config/platforms.php
2025-09-25 18:00:07 +12:00
Jake Barnby 4a3cbdafca Move to row-level scope for txn 2025-09-25 17:59:39 +12:00
Luke B. SilverandGitHub f28bb9345b Merge pull request #9874 from appwrite/fix-zindex
Update: `z-index` to be the highest
2025-09-24 16:59:20 +01:00
Darshan c00eec948a remove: unnecessary changes. 2025-09-24 18:01:43 +05:30
Darshan b067d26e3e Merge remote-tracking branch 'origin/fix-zindex' into fix-zindex 2025-09-24 17:57:50 +05:30
Darshan e6c9a30e98 Merge branch '1.8.x' into fix-zindex 2025-09-24 17:57:36 +05:30
DarshanandGitHub d5011c0f09 Merge branch '1.8.x' into fix-zindex 2025-09-24 17:56:41 +05:30
DarshanandGitHub 4808fd827a Merge branch 'main' into fix-zindex 2025-09-24 17:52:56 +05:30
Luke B. SilverandGitHub 04fdab0920 Merge pull request #10545 from appwrite/update-afterbuild-with-adapter
chore: update afterbuild to also pass adapter
2025-09-24 09:52:12 +01:00
Hemachandar 752368327f feedback 2025-09-24 13:06:20 +05:30
Chirag Aggarwal 85da691aec allow null adapter 2025-09-24 13:05:37 +05:30
Chirag Aggarwal 9d99f5cec2 chore: update afterbuild pass adapter 2025-09-24 11:47:13 +05:30
Jake BarnbyandGitHub aa4a58c8aa Merge pull request #10541 from appwrite/update-after-build
chore: update afterbuild fn
2025-09-24 17:23:08 +12:00
Chirag Aggarwal 5749b41753 updated to use if throw checks 2025-09-24 10:00:55 +05:30
Jake BarnbyandGitHub 7a31e1cf15 Merge pull request #10540 from appwrite/fix-healthstatus-enum
Fix healthstatus enum
2025-09-24 14:09:28 +12:00
Chirag Aggarwal 7ea01733ef chore: update afterbuild fn 2025-09-23 18:28:29 +05:30
Chirag Aggarwal 9ede8cfb91 fix: healthstatus enum override due to conflict 2025-09-23 16:52:35 +05:30
Jake BarnbyandGitHub 5448c79028 Merge pull request #10539 from appwrite/chore-sdk-release
SDK releases
2025-09-23 19:41:17 +12:00
Jake Barnby 0995bd6a6e SDK releases 2025-09-23 19:17:06 +12:00
Jake BarnbyandGitHub dce014993f Merge pull request #10538 from appwrite/respone-models-enum-names
chore: include response model enum names
2025-09-23 18:23:46 +12:00
Chirag Aggarwal 5d8ac0a5b0 add message status 2025-09-23 11:31:29 +05:30
Chirag Aggarwal 17f1cb214f override healthstatus 2025-09-23 10:57:35 +05:30
Chirag Aggarwal 84a4ef0baf chore: include response model enum names 2025-09-23 10:47:39 +05:30
Jake BarnbyandGitHub dece9c8d53 Merge pull request #10522 from appwrite/refactor-schedules
refactor: improve code readability for schedules
2025-09-23 15:08:49 +12:00
Chirag AggarwalandGitHub 3616337646 Merge branch '1.8.x' into refactor-schedules 2025-09-23 09:20:20 +07:00
Chirag Aggarwal 421ec6f3f8 fix: use correct constant 2025-09-23 07:49:55 +05:30
Chirag Aggarwal 734d2ce512 fix: use correct constant 2025-09-23 07:49:07 +05:30
Chirag Aggarwal 232b22b71e use constants 2025-09-23 07:35:17 +05:30
Chirag Aggarwal c52081dbed fix: to use correct pattern 2025-09-22 19:58:18 +05:30
Luke B. SilverandGitHub ab7d3d3415 Merge pull request #10496 from appwrite/cursor/add-type-enum-support-and-update-docs-3769
Add type_enum support and update docs
2025-09-22 14:47:54 +01:00
Chirag AggarwalandGitHub 2043d0e322 Merge branch '1.8.x' into refactor-schedules 2025-09-22 16:11:46 +07:00
Hemachandar 0228c74f71 Throw error when email is not available for account verification 2025-09-22 14:26:23 +05:30
Luke B. SilverandGitHub 6ff683909d Merge pull request #10511 from appwrite/update-cli-10.0.0
update cli to 10.0.0
2025-09-22 09:54:52 +01:00
Chirag AggarwalandGitHub d5d6f9a748 Merge branch '1.8.x' into cursor/add-type-enum-support-and-update-docs-3769 2025-09-22 15:52:43 +07:00
Chirag Aggarwal f09d5258ec use constants 2025-09-22 14:20:58 +05:30
Hemachandar 2f1046db2b fix tests 2025-09-22 12:10:55 +05:30
Hemachandar 2f768aa30d Merge branch '1.8.x' into ser-10-oauth-auto-allow-site-domains 2025-09-22 11:21:32 +05:30
Jake Barnby 9fde875904 Merge remote-tracking branch 'origin/1.8.x' into feat-txn
# Conflicts:
#	composer.lock
#	src/Appwrite/Platform/Workers/StatsResources.php
#	src/Appwrite/Platform/Workers/StatsUsage.php
2025-09-22 16:12:45 +12:00
Chirag Aggarwal 3e8211d6bd refactor: improve code readability for schedules 2025-09-20 19:45:44 +05:30
Jake BarnbyandGitHub 0b5fc8f0fd Merge pull request #10517 from appwrite/fix-miss-catch
Catch query exception on bulk update/delete
2025-09-19 18:16:31 +12:00
Jake Barnby f944ad350e Catch query exception on bulk update/delete 2025-09-19 17:32:34 +12:00
Jake BarnbyandGitHub df276692e8 Merge pull request #10516 from appwrite/fix-internal-removal
Don't remove required attributes
2025-09-19 15:52:08 +12:00
Jake Barnby c1782f6f58 Don't remove required attributes 2025-09-19 15:28:41 +12:00
Luke B. SilverandGitHub 40bdfb0a14 Merge pull request #10515 from appwrite/bump-database-1-5
bump database 1.5.0
2025-09-18 16:25:20 +01:00
fogelito d9b657796b bump database 1.5.0 2025-09-18 17:49:38 +03:00
Jake BarnbyandGitHub e2f4d380f6 Merge pull request #10514 from Veera-mulge/change-desc
Update README.md
2025-09-19 01:08:50 +12:00
VeereshandGitHub 4b90998d1e Update README.md 2025-09-18 18:04:27 +05:30
Hemachandar 5fd2dfafb7 remove var_dump 2025-09-18 14:10:56 +05:30
Hemachandar 0812ac97a9 tests 2025-09-18 14:09:42 +05:30
Jake BarnbyandGitHub 9a0ab6c5a0 Merge pull request #10513 from appwrite/sub-query-variables-order-by
Sub query variables order by
2025-09-18 20:25:05 +12:00
fogelito 4da7f04a5c Add order by 2025-09-18 10:58:27 +03:00
fogelito a7e9e58312 Add order by 2025-09-18 10:57:47 +03:00
Hemachandar dedc7a35c9 remove debug output 2025-09-18 12:38:18 +05:30
Hemachandar 2021396f39 email otp branded 2025-09-18 12:36:00 +05:30
Chirag Aggarwal 427c891e0f update cli to 10.0.0 2025-09-18 10:13:23 +05:30
Jake BarnbyandGitHub 34f3501cdc Merge pull request #10509 from appwrite/fix-spatials-type-required-col
Add spatial column validation during required mode and tests for exis…
2025-09-18 15:29:50 +12:00
Jake BarnbyandGitHub 30003caeb3 Merge pull request #10472 from appwrite/stats-resources-try-catch
Stats resources and usage sorting by unique field
2025-09-18 15:20:19 +12:00
Jake Barnby 0e2c5d93f5 Update check 2025-09-18 14:54:07 +12:00
ArnabChatterjee20k 52ceddcd5a linting 2025-09-17 20:02:36 +05:30
ArnabChatterjee20k c5e9ec3969 added cases for checking default added or not 2025-09-17 20:00:10 +05:30
ArnabChatterjee20k 5b09ebe54b added cases for with default values 2025-09-17 19:46:06 +05:30
ArnabChatterjee20k 4815780476 Add spatial column validation during required mode and tests for existing data in databases 2025-09-17 18:01:29 +05:30
fogelito 7d1a1d3ef4 use $tenant 2025-09-17 08:45:23 +03:00
fogelito 88c6e783c4 Merge branch '1.8.x' of https://github.com/appwrite/appwrite into stats-resources-try-catch 2025-09-17 08:42:27 +03:00
Jake Barnby ddb852c150 Merge branch 'feat-txn' of github.com:appwrite/appwrite into feat-txn 2025-09-17 14:58:36 +12:00
Jake Barnby 63aee11312 Merge remote-tracking branch 'origin/1.8.x' into feat-txn
# Conflicts:
#	composer.lock
2025-09-17 14:58:17 +12:00
Jake BarnbyandGitHub 14062fc7c2 Merge pull request #10506 from appwrite/feat-reconnects
Update database
2025-09-17 13:08:41 +12:00
Jake Barnby f03a62d43d Update database 2025-09-17 01:33:36 +12:00
Jake BarnbyandGitHub d7e90560c9 Merge pull request #10505 from appwrite/fix-bucket-query
Catch query exception on bucket/file list
2025-09-17 00:15:12 +12:00
Jake Barnby 832687dd09 Catch query exception on bucket/file list 2025-09-16 23:42:07 +12:00
Jake Barnby b38b2bba0c Remove state order on created, rely on sequence order 2025-09-16 21:13:41 +12:00
Hemachandar 21f25b4ce4 Auto-allow sites domain for OAuth 2025-09-16 14:16:02 +05:30
fogelito 614285f1ae Add Scope for tests 2025-09-16 11:29:13 +03:00
Jake BarnbyandGitHub 76f59e2404 Merge pull request #10502 from appwrite/fix-filter-exceptions
Throw appropriate 400s from request filters
2025-09-16 19:19:03 +12:00
Jake Barnby c9b39a3f28 Lint 2025-09-16 18:37:52 +12:00
Hemachandar e6be9bac07 cleanup 2025-09-16 11:55:43 +05:30
Hemachandar f8ab95b3e1 tests & lint 2025-09-16 11:54:01 +05:30
Jake Barnby 081e2aeb6e Throw appropriate 400s from request filters 2025-09-16 17:51:22 +12:00
Chirag Aggarwal 31ed726409 keep graphql backwards 2025-09-16 09:48:17 +05:30
Jake Barnby fb65d7a965 Add scoped tests 2025-09-16 13:25:15 +12:00
Jake Barnby 42d981c0ef Add scopes to roles 2025-09-16 13:15:08 +12:00
Jake Barnby a7cff1b53d Merge remote-tracking branch 'origin/1.8.x' into feat-txn 2025-09-16 12:58:09 +12:00
Steven NguyenandGitHub 64bb1efc44 Merge pull request #10483 from appwrite/SUC-1668-fix-database-usage-stats
SUC-1668 fix:database usage metrics
2025-09-15 16:28:58 -07:00
Hemachandar 0b9e43c9f8 Branded email for Console auth flows 2025-09-16 00:58:23 +05:30
Luke B. SilverandGitHub bfacb900e2 Merge pull request #10498 from appwrite/fix-worker-stop
fix: worker stop
2025-09-15 15:45:20 +01:00
loks0n 66503a4e80 fix: api worker-stop 2025-09-15 15:15:56 +01:00
Chirag Aggarwal 1f9bc650de work in progress 2025-09-15 12:13:48 +05:30
Chirag Aggarwal ef69520f95 fix: nitpick comments 2025-09-15 11:51:47 +05:30
Chirag Aggarwal 579f6691f9 fix: default to be created 2025-09-15 11:42:23 +05:30
Chirag Aggarwal 40eaf39d91 fix: graphql 2025-09-15 11:39:00 +05:30
Chirag Aggarwal 0f5cb2611d fix: grammer 2025-09-15 10:32:06 +05:30
Chirag Aggarwal f9ac0b48c8 fix: use 1.8.x 2025-09-15 10:28:34 +05:30
Jake BarnbyandGitHub 2fb93500d0 Merge pull request #10485 from appwrite/attempt-small-size-for-website
Attempt small size for website dependency
2025-09-15 15:38:55 +12:00
Jake BarnbyandGitHub ba58fcf8fc Merge pull request #10489 from appwrite/fix-check
Fix check
2025-09-14 11:14:14 +12:00
Jake Barnby 30dde4c2f4 Trigger CI 2025-09-14 11:00:32 +12:00
Jake Barnby c140dd6fbb Move disable 2025-09-14 10:58:21 +12:00
Darshan fcd23e2a74 ci: empty commit 2025-09-13 12:53:06 +05:30
Darshan 3114f572df update: package.json for smaller sizes. 2025-09-13 12:33:19 +05:30
Luke B. SilverandGitHub b5c588722b Merge pull request #10482 from appwrite/fix-db-queues
fix: health db queues
2025-09-12 19:58:46 +01:00
loks0n 39a190f60c fix: db queues 2025-09-12 19:28:27 +01:00
Jake Barnby 0f9c2001f7 Demo SDK 2025-09-13 02:42:42 +12:00
Divyansha Dubey ef3d38c5a6 fixed db stats env var 2025-09-12 17:48:15 +04:00
Jake Barnby 5c09e8ae00 Lint 2025-09-13 00:35:03 +12:00
Jake Barnby e5a95ed990 Update DB 2025-09-13 00:31:35 +12:00
Jake Barnby edc637b762 Merge remote-tracking branch 'origin/1.8.x' into feat-txn
# Conflicts:
#	composer.lock
2025-09-13 00:29:19 +12:00
Jake Barnby 304ebf12b9 Add more tests 2025-09-13 00:04:49 +12:00
Jake Barnby 4f916fae22 Handle limit exception 2025-09-13 00:04:37 +12:00
Jake Barnby 7120bce761 Handle structure exception 2025-09-12 21:47:40 +12:00
Jake BarnbyandGitHub 918912c0b9 Merge pull request #10480 from appwrite/spatial-type-attributes
Bump database
2025-09-12 19:02:46 +12:00
ArnabChatterjee20k addd140925 updated composer 2025-09-12 11:24:19 +05:30
ArnabChatterjee20k 738a42de04 Merge remote-tracking branch 'upstream/1.8.x' into spatial-type-attributes 2025-09-11 22:00:17 +05:30
ArnabChatterjee20k 9c5c5343a4 Merge remote-tracking branch 'upstream/1.8.x' into spatial-type-attributes 2025-09-11 21:58:09 +05:30
ArnabChatterjee20k 289cf4db0a testing with symlink 2025-09-11 21:55:36 +05:30
Jake Barnby 38dc92bfa7 Delete with worker 2025-09-12 02:05:19 +12:00
Jake Barnby 1403868d05 Merge remote-tracking branch 'origin/1.8.x' into feat-txn
# Conflicts:
#	composer.lock
2025-09-12 01:45:41 +12:00
Jake Barnby 65ad2c9ff5 Handle usage + realtime 2025-09-12 01:45:16 +12:00
Jake BarnbyandGitHub 93fc3e7659 Merge pull request #10479 from appwrite/spatial-type-attributes
appwrite db bump
2025-09-12 01:29:34 +12:00
Jake Barnby 09753cd6dc Optimise schema 2025-09-12 01:16:23 +12:00
ArnabChatterjee20k db4a783f78 appwrite db bump 2025-09-11 18:15:02 +05:30
Jake Barnby ef685c5bc1 Fix tests 2025-09-12 00:19:39 +12:00
Jake Barnby fd6ddf6926 Fix operation spec gen 2025-09-11 23:31:53 +12:00
Jake Barnby 67b05a3f1a Fix test workflow 2025-09-11 23:08:23 +12:00
Matej BačoandGitHub 485dd0a1e2 Merge pull request #10438 from appwrite/chore-beautify-certificate-logs
Add colors to certificate logs
2025-09-11 12:32:58 +02:00
Jake Barnby b74e5ce5cd Block bulk ops through txn create multi ops 2025-09-11 22:22:46 +12:00
Jake Barnby 6652e27dd5 Update TablesDB auth 2025-09-11 22:21:53 +12:00
Jake Barnby c7dba3690a Update auth types 2025-09-11 22:17:00 +12:00
Jake Barnby dd64afa970 Add missing references 2025-09-11 22:16:44 +12:00
a48007d548 Update src/Appwrite/Platform/Workers/Certificates.php
Co-authored-by: Matej Bačo <matejbacocom@gmail.com>
2025-09-11 15:40:29 +05:30
Khushboo VermaandGitHub e7a44c9fb2 Merge branch '1.8.x' into chore-beautify-certificate-logs 2025-09-11 15:39:45 +05:30
Jake Barnby be81c73c40 Update DB 2025-09-11 21:30:07 +12:00
Jake Barnby e6c83f364c Merge remote-tracking branch 'origin/1.8.x' into feat-txn
# Conflicts:
#	composer.lock
2025-09-11 21:17:50 +12:00
Jake Barnby 8706828c22 Fix tests 2025-09-11 21:13:41 +12:00
Jake BarnbyandGitHub de1ecaa9c9 Merge pull request #10473 from appwrite/spatial-type-attributes
Spatial test tablesdb updates
2025-09-11 19:44:55 +12:00
Jake BarnbyandGitHub 5fadb5282c Merge pull request #10475 from appwrite/chore-gen-sdks
Generate SDKs
2025-09-11 19:32:18 +12:00
ArnabChatterjee20k 88c753c2e1 updated database 2025-09-11 12:48:58 +05:30
fogelito e673d405d6 formatting? 2025-09-11 10:14:16 +03:00
fogelito 84aaaf810f Question 2025-09-11 10:07:45 +03:00
fogelito 5740eb8901 Add sorting 2025-09-11 10:04:42 +03:00
fogelito a31190422a formatting 2025-09-11 09:41:17 +03:00
ArnabChatterjee20k 3a059edf58 updated database 2025-09-11 11:32:48 +05:30
Jake Barnby 498484ca4e Legacy DB support 2025-09-11 17:54:55 +12:00
ArnabChatterjee20k e1c5202546 updated database 2025-09-11 10:24:43 +05:30
Jake Barnby f9b92ddead Fix namespace 2025-09-11 16:37:43 +12:00
Jake Barnby 461c8681af Merge remote-tracking branch 'origin/1.8.x' into feat-txn
# Conflicts:
#	composer.lock
#	src/Appwrite/Platform/Workers/StatsResources.php
2025-09-11 16:36:49 +12:00
Jake Barnby 28a2b577e7 Update lock 2025-09-11 16:36:09 +12:00
Jake Barnby c934524689 Merge remote-tracking branch 'origin/1.8.x' into chore-gen-sdks
# Conflicts:
#	app/config/platforms.php
#	composer.lock
#	docs/examples/1.8.x/console-web/examples/databases/create-line-attribute.md
#	docs/examples/1.8.x/console-web/examples/databases/create-point-attribute.md
#	docs/examples/1.8.x/console-web/examples/databases/create-polygon-attribute.md
#	docs/examples/1.8.x/console-web/examples/databases/update-line-attribute.md
#	docs/examples/1.8.x/console-web/examples/databases/update-point-attribute.md
#	docs/examples/1.8.x/console-web/examples/databases/update-polygon-attribute.md
#	docs/examples/1.8.x/console-web/examples/tablesdb/create-line-column.md
#	docs/examples/1.8.x/console-web/examples/tablesdb/create-point-column.md
#	docs/examples/1.8.x/console-web/examples/tablesdb/create-polygon-column.md
#	docs/examples/1.8.x/console-web/examples/tablesdb/update-line-column.md
#	docs/examples/1.8.x/console-web/examples/tablesdb/update-point-column.md
#	docs/examples/1.8.x/console-web/examples/tablesdb/update-polygon-column.md
#	docs/examples/1.8.x/server-dart/examples/databases/create-line-attribute.md
#	docs/examples/1.8.x/server-dart/examples/databases/create-point-attribute.md
#	docs/examples/1.8.x/server-dart/examples/databases/create-polygon-attribute.md
#	docs/examples/1.8.x/server-dart/examples/databases/update-line-attribute.md
#	docs/examples/1.8.x/server-dart/examples/databases/update-point-attribute.md
#	docs/examples/1.8.x/server-dart/examples/databases/update-polygon-attribute.md
#	docs/examples/1.8.x/server-dart/examples/tablesdb/create-line-column.md
#	docs/examples/1.8.x/server-dart/examples/tablesdb/create-point-column.md
#	docs/examples/1.8.x/server-dart/examples/tablesdb/create-polygon-column.md
#	docs/examples/1.8.x/server-dart/examples/tablesdb/update-line-column.md
#	docs/examples/1.8.x/server-dart/examples/tablesdb/update-point-column.md
#	docs/examples/1.8.x/server-dart/examples/tablesdb/update-polygon-column.md
#	docs/examples/1.8.x/server-deno/examples/databases/create-line-attribute.md
#	docs/examples/1.8.x/server-deno/examples/databases/create-point-attribute.md
#	docs/examples/1.8.x/server-deno/examples/databases/create-polygon-attribute.md
#	docs/examples/1.8.x/server-deno/examples/databases/update-line-attribute.md
#	docs/examples/1.8.x/server-deno/examples/databases/update-point-attribute.md
#	docs/examples/1.8.x/server-deno/examples/databases/update-polygon-attribute.md
#	docs/examples/1.8.x/server-deno/examples/tablesdb/create-line-column.md
#	docs/examples/1.8.x/server-deno/examples/tablesdb/create-point-column.md
#	docs/examples/1.8.x/server-deno/examples/tablesdb/create-polygon-column.md
#	docs/examples/1.8.x/server-deno/examples/tablesdb/update-line-column.md
#	docs/examples/1.8.x/server-deno/examples/tablesdb/update-point-column.md
#	docs/examples/1.8.x/server-deno/examples/tablesdb/update-polygon-column.md
#	docs/examples/1.8.x/server-dotnet/examples/databases/create-line-attribute.md
#	docs/examples/1.8.x/server-dotnet/examples/databases/create-point-attribute.md
#	docs/examples/1.8.x/server-dotnet/examples/databases/create-polygon-attribute.md
#	docs/examples/1.8.x/server-dotnet/examples/databases/update-line-attribute.md
#	docs/examples/1.8.x/server-dotnet/examples/databases/update-point-attribute.md
#	docs/examples/1.8.x/server-dotnet/examples/databases/update-polygon-attribute.md
#	docs/examples/1.8.x/server-dotnet/examples/tablesdb/create-line-column.md
#	docs/examples/1.8.x/server-dotnet/examples/tablesdb/create-point-column.md
#	docs/examples/1.8.x/server-dotnet/examples/tablesdb/create-polygon-column.md
#	docs/examples/1.8.x/server-dotnet/examples/tablesdb/update-line-column.md
#	docs/examples/1.8.x/server-dotnet/examples/tablesdb/update-point-column.md
#	docs/examples/1.8.x/server-dotnet/examples/tablesdb/update-polygon-column.md
#	docs/examples/1.8.x/server-go/examples/databases/create-line-attribute.md
#	docs/examples/1.8.x/server-go/examples/databases/create-point-attribute.md
#	docs/examples/1.8.x/server-go/examples/databases/create-polygon-attribute.md
#	docs/examples/1.8.x/server-go/examples/databases/update-line-attribute.md
#	docs/examples/1.8.x/server-go/examples/databases/update-point-attribute.md
#	docs/examples/1.8.x/server-go/examples/databases/update-polygon-attribute.md
#	docs/examples/1.8.x/server-go/examples/tablesdb/create-line-column.md
#	docs/examples/1.8.x/server-go/examples/tablesdb/create-point-column.md
#	docs/examples/1.8.x/server-go/examples/tablesdb/create-polygon-column.md
#	docs/examples/1.8.x/server-go/examples/tablesdb/update-line-column.md
#	docs/examples/1.8.x/server-go/examples/tablesdb/update-point-column.md
#	docs/examples/1.8.x/server-go/examples/tablesdb/update-polygon-column.md
#	docs/examples/1.8.x/server-graphql/examples/databases/create-line-attribute.md
#	docs/examples/1.8.x/server-graphql/examples/databases/create-point-attribute.md
#	docs/examples/1.8.x/server-graphql/examples/databases/create-polygon-attribute.md
#	docs/examples/1.8.x/server-graphql/examples/databases/update-line-attribute.md
#	docs/examples/1.8.x/server-graphql/examples/databases/update-point-attribute.md
#	docs/examples/1.8.x/server-graphql/examples/databases/update-polygon-attribute.md
#	docs/examples/1.8.x/server-graphql/examples/tablesdb/create-line-column.md
#	docs/examples/1.8.x/server-graphql/examples/tablesdb/create-point-column.md
#	docs/examples/1.8.x/server-graphql/examples/tablesdb/create-polygon-column.md
#	docs/examples/1.8.x/server-graphql/examples/tablesdb/update-line-column.md
#	docs/examples/1.8.x/server-graphql/examples/tablesdb/update-point-column.md
#	docs/examples/1.8.x/server-graphql/examples/tablesdb/update-polygon-column.md
#	docs/examples/1.8.x/server-kotlin/java/databases/create-line-attribute.md
#	docs/examples/1.8.x/server-kotlin/java/databases/create-point-attribute.md
#	docs/examples/1.8.x/server-kotlin/java/databases/create-polygon-attribute.md
#	docs/examples/1.8.x/server-kotlin/java/databases/update-line-attribute.md
#	docs/examples/1.8.x/server-kotlin/java/databases/update-point-attribute.md
#	docs/examples/1.8.x/server-kotlin/java/databases/update-polygon-attribute.md
#	docs/examples/1.8.x/server-kotlin/java/tablesdb/create-line-column.md
#	docs/examples/1.8.x/server-kotlin/java/tablesdb/create-point-column.md
#	docs/examples/1.8.x/server-kotlin/java/tablesdb/create-polygon-column.md
#	docs/examples/1.8.x/server-kotlin/java/tablesdb/update-line-column.md
#	docs/examples/1.8.x/server-kotlin/java/tablesdb/update-point-column.md
#	docs/examples/1.8.x/server-kotlin/java/tablesdb/update-polygon-column.md
#	docs/examples/1.8.x/server-kotlin/kotlin/databases/create-line-attribute.md
#	docs/examples/1.8.x/server-kotlin/kotlin/databases/create-point-attribute.md
#	docs/examples/1.8.x/server-kotlin/kotlin/databases/create-polygon-attribute.md
#	docs/examples/1.8.x/server-kotlin/kotlin/databases/update-line-attribute.md
#	docs/examples/1.8.x/server-kotlin/kotlin/databases/update-point-attribute.md
#	docs/examples/1.8.x/server-kotlin/kotlin/databases/update-polygon-attribute.md
#	docs/examples/1.8.x/server-kotlin/kotlin/tablesdb/create-line-column.md
#	docs/examples/1.8.x/server-kotlin/kotlin/tablesdb/create-point-column.md
#	docs/examples/1.8.x/server-kotlin/kotlin/tablesdb/create-polygon-column.md
#	docs/examples/1.8.x/server-kotlin/kotlin/tablesdb/update-line-column.md
#	docs/examples/1.8.x/server-kotlin/kotlin/tablesdb/update-point-column.md
#	docs/examples/1.8.x/server-kotlin/kotlin/tablesdb/update-polygon-column.md
#	docs/examples/1.8.x/server-nodejs/examples/databases/create-line-attribute.md
#	docs/examples/1.8.x/server-nodejs/examples/databases/create-point-attribute.md
#	docs/examples/1.8.x/server-nodejs/examples/databases/create-polygon-attribute.md
#	docs/examples/1.8.x/server-nodejs/examples/databases/update-line-attribute.md
#	docs/examples/1.8.x/server-nodejs/examples/databases/update-point-attribute.md
#	docs/examples/1.8.x/server-nodejs/examples/databases/update-polygon-attribute.md
#	docs/examples/1.8.x/server-nodejs/examples/tablesdb/create-line-column.md
#	docs/examples/1.8.x/server-nodejs/examples/tablesdb/create-point-column.md
#	docs/examples/1.8.x/server-nodejs/examples/tablesdb/create-polygon-column.md
#	docs/examples/1.8.x/server-nodejs/examples/tablesdb/update-line-column.md
#	docs/examples/1.8.x/server-nodejs/examples/tablesdb/update-point-column.md
#	docs/examples/1.8.x/server-nodejs/examples/tablesdb/update-polygon-column.md
#	docs/examples/1.8.x/server-php/examples/databases/create-line-attribute.md
#	docs/examples/1.8.x/server-php/examples/databases/create-point-attribute.md
#	docs/examples/1.8.x/server-php/examples/databases/create-polygon-attribute.md
#	docs/examples/1.8.x/server-php/examples/databases/update-line-attribute.md
#	docs/examples/1.8.x/server-php/examples/databases/update-point-attribute.md
#	docs/examples/1.8.x/server-php/examples/databases/update-polygon-attribute.md
#	docs/examples/1.8.x/server-php/examples/tablesdb/create-line-column.md
#	docs/examples/1.8.x/server-php/examples/tablesdb/create-point-column.md
#	docs/examples/1.8.x/server-php/examples/tablesdb/create-polygon-column.md
#	docs/examples/1.8.x/server-php/examples/tablesdb/update-line-column.md
#	docs/examples/1.8.x/server-php/examples/tablesdb/update-point-column.md
#	docs/examples/1.8.x/server-php/examples/tablesdb/update-polygon-column.md
#	docs/examples/1.8.x/server-python/examples/databases/create-line-attribute.md
#	docs/examples/1.8.x/server-python/examples/databases/create-point-attribute.md
#	docs/examples/1.8.x/server-python/examples/databases/create-polygon-attribute.md
#	docs/examples/1.8.x/server-python/examples/databases/update-line-attribute.md
#	docs/examples/1.8.x/server-python/examples/databases/update-point-attribute.md
#	docs/examples/1.8.x/server-python/examples/databases/update-polygon-attribute.md
#	docs/examples/1.8.x/server-python/examples/tablesdb/create-line-column.md
#	docs/examples/1.8.x/server-python/examples/tablesdb/create-point-column.md
#	docs/examples/1.8.x/server-python/examples/tablesdb/create-polygon-column.md
#	docs/examples/1.8.x/server-python/examples/tablesdb/update-line-column.md
#	docs/examples/1.8.x/server-python/examples/tablesdb/update-point-column.md
#	docs/examples/1.8.x/server-python/examples/tablesdb/update-polygon-column.md
#	docs/examples/1.8.x/server-rest/examples/databases/create-line-attribute.md
#	docs/examples/1.8.x/server-rest/examples/databases/create-point-attribute.md
#	docs/examples/1.8.x/server-rest/examples/databases/create-polygon-attribute.md
#	docs/examples/1.8.x/server-rest/examples/databases/update-line-attribute.md
#	docs/examples/1.8.x/server-rest/examples/databases/update-point-attribute.md
#	docs/examples/1.8.x/server-rest/examples/databases/update-polygon-attribute.md
#	docs/examples/1.8.x/server-rest/examples/tablesdb/create-line-column.md
#	docs/examples/1.8.x/server-rest/examples/tablesdb/create-point-column.md
#	docs/examples/1.8.x/server-rest/examples/tablesdb/create-polygon-column.md
#	docs/examples/1.8.x/server-rest/examples/tablesdb/update-line-column.md
#	docs/examples/1.8.x/server-rest/examples/tablesdb/update-point-column.md
#	docs/examples/1.8.x/server-rest/examples/tablesdb/update-polygon-column.md
#	docs/examples/1.8.x/server-ruby/examples/databases/create-line-attribute.md
#	docs/examples/1.8.x/server-ruby/examples/databases/create-point-attribute.md
#	docs/examples/1.8.x/server-ruby/examples/databases/create-polygon-attribute.md
#	docs/examples/1.8.x/server-ruby/examples/databases/update-line-attribute.md
#	docs/examples/1.8.x/server-ruby/examples/databases/update-point-attribute.md
#	docs/examples/1.8.x/server-ruby/examples/databases/update-polygon-attribute.md
#	docs/examples/1.8.x/server-ruby/examples/tablesdb/create-line-column.md
#	docs/examples/1.8.x/server-ruby/examples/tablesdb/create-point-column.md
#	docs/examples/1.8.x/server-ruby/examples/tablesdb/create-polygon-column.md
#	docs/examples/1.8.x/server-ruby/examples/tablesdb/update-line-column.md
#	docs/examples/1.8.x/server-ruby/examples/tablesdb/update-point-column.md
#	docs/examples/1.8.x/server-ruby/examples/tablesdb/update-polygon-column.md
#	docs/examples/1.8.x/server-swift/examples/databases/create-line-attribute.md
#	docs/examples/1.8.x/server-swift/examples/databases/create-point-attribute.md
#	docs/examples/1.8.x/server-swift/examples/databases/create-polygon-attribute.md
#	docs/examples/1.8.x/server-swift/examples/databases/update-line-attribute.md
#	docs/examples/1.8.x/server-swift/examples/databases/update-point-attribute.md
#	docs/examples/1.8.x/server-swift/examples/databases/update-polygon-attribute.md
#	docs/examples/1.8.x/server-swift/examples/tablesdb/create-line-column.md
#	docs/examples/1.8.x/server-swift/examples/tablesdb/create-point-column.md
#	docs/examples/1.8.x/server-swift/examples/tablesdb/create-polygon-column.md
#	docs/examples/1.8.x/server-swift/examples/tablesdb/update-line-column.md
#	docs/examples/1.8.x/server-swift/examples/tablesdb/update-point-column.md
#	docs/examples/1.8.x/server-swift/examples/tablesdb/update-polygon-column.md
2025-09-11 16:26:25 +12:00
fogelito 6ed4590e0f Respect time nulls 2025-09-10 18:04:35 +03:00
fogelito b44051e0a2 Respect time nulls 2025-09-10 17:48:58 +03:00
fogelito 494fe274b0 sort as strings 2025-09-10 17:43:37 +03:00
fogelito 5820bae097 Merge branch '1.8.x' of https://github.com/appwrite/appwrite into stats-resources-try-catch 2025-09-10 17:24:49 +03:00
ArnabChatterjee20k e212ec997a cloud test failing due to wrong spatial type for other adapters 2025-09-10 19:53:33 +05:30
fogelito de9e177bc8 sort and hardcode bachSize 2025-09-10 17:23:33 +03:00
Matej BačoandGitHub d1918b7c24 Merge pull request #10471 from appwrite/feat-certificate-validation-override
Feat: add certificate valdiation override
2025-09-10 16:10:09 +02:00
Matej Bačo 81a5f25e4d add certificate valdiation override 2025-09-10 15:29:59 +02:00
Matej BačoandGitHub 03c8e2c87a Merge pull request #10470 from appwrite/chore-proxy-to-modules
Chore: Move proxy endpoints to modules
2025-09-10 13:33:31 +02:00
Matej Bačo 80d8e32b87 Use proper base action for proxy module 2025-09-10 12:55:46 +02:00
Matej Bačo 8319ff166e Move proxy endpoints to modules 2025-09-10 12:43:21 +02:00
fogelito 95f49559d0 add finally 2025-09-10 12:43:37 +03:00
Jake BarnbyandGitHub 27cc649376 Merge pull request #10469 from appwrite/stats-resources-try-catch
Stats resources try catch
2025-09-10 21:42:29 +12:00
fogelito 83efc7c152 Merge branch '1.8.x' of https://github.com/appwrite/appwrite into stats-resources-try-catch 2025-09-10 12:25:54 +03:00
fogelito 5f7ca48067 try catch 2025-09-10 12:24:24 +03:00
Khushboo VermaandGitHub 2c7472d5ec Merge branch '1.8.x' into chore-beautify-certificate-logs 2025-09-10 12:44:37 +05:30
Jake BarnbyandGitHub 7b9ead6a68 Merge pull request #10463 from appwrite/spatial-type-attributes
Spatial type attributes sdk updates
2025-09-10 18:48:49 +12:00
ArnabChatterjee20k 497cf30549 bump database and migration versions 2025-09-10 11:50:58 +05:30
ArnabChatterjee20k 56fc3ff3d8 updated xlist 2025-09-09 23:22:47 +05:30
ArnabChatterjee20k 0dd7d45993 updated tests 2025-09-09 22:56:59 +05:30
Jake Barnby be07bbfc89 Update generator 2025-09-09 19:19:44 +12:00
Jake Barnby 74a9e5b320 Add dart/flutter changelog 2025-09-09 17:11:36 +12:00
ArnabChatterjee20k ef83636f93 empty commit to trigger tests 2025-09-08 23:57:44 +05:30
ArnabChatterjee20k ac443e3b98 updated database version , sdk version and docs example in openapi with spatial 2025-09-08 23:30:28 +05:30
Jake Barnby 78ffab5116 Merge remote-tracking branch 'origin/1.8.x' into feat-txn
# Conflicts:
#	composer.lock
#	src/Appwrite/Platform/Modules/Databases/Http/TablesDB/Tables/Rows/Create.php
2025-09-09 00:52:39 +12:00
Jake Barnby 495eeeb929 Support legacy 2025-09-09 00:50:48 +12:00
Jake Barnby 54d94401a7 Merge remote-tracking branch 'origin/1.8.x' into chore-gen-sdks 2025-09-08 21:02:05 +12:00
Jake Barnby 7c3ba74710 Rename 2025-09-08 19:21:59 +12:00
Jake Barnby abf6c0a0b8 Add more bulk tests 2025-09-08 19:20:26 +12:00
Khushboo VermaandGitHub 28d31c9726 Merge branch '1.8.x' into chore-beautify-certificate-logs 2025-09-08 11:32:00 +05:30
Jake Barnby 68b61d1e40 Merge remote-tracking branch 'origin/1.8.x' into chore-gen-sdks 2025-09-06 05:29:48 +12:00
Jake Barnby 7c3d526cda Update docs 2025-09-06 05:27:47 +12:00
Jake Barnby 1479768bf2 Merge remote-tracking branch 'origin/chore-platform-lib' into chore-gen-sdks 2025-09-06 04:50:53 +12:00
Jake Barnby 02ff0927a6 Merge remote-tracking branch 'origin/1.8.x' into chore-gen-sdks
# Conflicts:
#	composer.lock
2025-09-06 04:46:00 +12:00
Jake Barnby 812a09f556 Add read-your-write support 2025-09-06 04:26:49 +12:00
Jake Barnby 098b0cd028 Fix array as doc 2025-09-06 02:37:52 +12:00
Jake Barnby 391942ba72 Fix bulk logged queries 2025-09-06 02:37:17 +12:00
Jake Barnby c07db4eea1 Update specs 2025-09-05 21:54:17 +12:00
Jake Barnby ca17bcd8ef Fix refs 2025-09-05 21:54:11 +12:00
Jake Barnby f4bf1756c9 Merge remote-tracking branch 'origin/1.8.x' into feat-txn
# Conflicts:
#	composer.lock
2025-09-05 21:40:21 +12:00
Jake Barnby af60f9f7c0 Merge remote-tracking branch 'origin/1.8.x' into chore-gen-sdks
# Conflicts:
#	app/config/platforms.php
#	composer.lock
2025-09-05 21:16:56 +12:00
Jake Barnby ed6b0b6be4 Update generator 2025-09-05 21:16:22 +12:00
Matej BačoandGitHub a703fcc8e9 Merge pull request #10440 from Veera-mulge/change-desc
Update README.md
2025-09-04 17:21:24 +02:00
VeereshandGitHub 01586653a1 Update README.md 2025-09-04 20:36:03 +05:30
Jake Barnby 998a7ff697 Generate 2025-09-05 02:35:04 +12:00
Jake Barnby 3d5caaa0bb Merge remote-tracking branch 'origin/1.8.x' into feat-txn
# Conflicts:
#	composer.lock
2025-09-05 01:05:44 +12:00
Jake Barnby c2916c7a2d Lint 2025-09-05 01:04:48 +12:00
Jake Barnby d28643bd2b Update DB 2025-09-05 01:02:30 +12:00
Khushboo Verma 0b1712c87e Add colors to certificate logs 2025-09-04 18:23:40 +05:30
Eldad A. FuxandGitHub c02574b057 Merge pull request #10430 from appwrite/chore-github-issue-auto-label
chore: create workflow to auto add labels to issues
2025-09-04 11:43:02 +01:00
Jake Barnby 7eba6582c6 Fix bulk payloads 2025-09-04 20:32:37 +12:00
Steven NguyenandGitHub ba97cfb440 chore: create workflow to auto add labels to issues 2025-09-03 23:14:37 +00:00
Jake Barnby 5702def9d2 Merge remote-tracking branch 'origin/1.8.x' into feat-txn
# Conflicts:
#	composer.lock
#	src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Bulk/Upsert.php
#	tests/e2e/Services/Databases/Legacy/DatabasesBase.php
2025-09-04 04:00:57 +12:00
Jake Barnby de5df4b72e Add extra tests 2025-09-04 03:57:03 +12:00
Matej BačoandGitHub 1d0fc635c1 Merge pull request #10424 from Veera-mulge/change-desc
Update README.md
2025-09-03 17:31:09 +02:00
VeereshandGitHub 5eb7c3a7c8 Update README.md 2025-09-03 19:18:25 +05:30
Jake Barnby 903e9b52c2 Fix size limit exception 2025-09-03 23:54:21 +12:00
Jake Barnby 00f91c444c Fix tests 2025-09-03 04:55:31 +12:00
Jake Barnby c34efeff1e Add to the other workflow 2025-09-03 04:37:48 +12:00
Jake Barnby 76287beca0 Format 2025-09-03 04:36:34 +12:00
Jake Barnby 1d8d757960 Add txn to workflow 2025-09-03 04:32:59 +12:00
Jake Barnby 2202dc9747 Handle intra-transactional ops with state tracking 2025-09-03 04:29:42 +12:00
Jake Barnby 5528e9964b Updates tests 2025-09-03 03:53:08 +12:00
Jake Barnby 04a9ff9c23 Ensure ID on create doc op 2025-09-03 03:42:56 +12:00
Jake Barnby 7861ee8cbd Add transaction scopes to test keys 2025-09-03 03:42:44 +12:00
Jake Barnby 70ef7059c3 Add increment validation 2025-09-03 03:42:19 +12:00
Jake Barnby 3f0ad7f6c7 Update registry 2025-09-03 03:41:53 +12:00
Jake Barnby c9cf38d630 Add expired log deletion 2025-09-03 01:31:53 +12:00
Jake Barnby f836fbeba5 Merge remote-tracking branch 'origin/1.8.x' into feat-txn
# Conflicts:
#	src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Bulk/Update.php
#	src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Update.php
#	src/Appwrite/Utopia/Response.php
2025-09-02 23:31:47 +12:00
Jake Barnby 14002dc20d Remove invalid return 2025-08-18 17:37:16 +12:00
Jake Barnby 8579a01cfc Merge remote-tracking branch 'origin/1.8.x' into feat-txn
# Conflicts:
#	composer.lock
2025-08-16 00:07:42 +12:00
Jake Barnby 237263a194 Lint 2025-08-15 02:01:44 +12:00
Jake Barnby ef8d1b525d Fix missing grids injections 2025-08-15 01:54:45 +12:00
Jake Barnby 4b4969e79b Sync response 2025-08-15 01:40:08 +12:00
Jake Barnby 44daaae981 Update deps 2025-08-15 01:33:44 +12:00
Jake Barnby d444bb66b8 Truemaps for fast lookup 2025-08-15 01:33:35 +12:00
Jake Barnby 2b3795224d Check for documentId on ops that require it 2025-08-15 01:33:22 +12:00
Jake Barnby 46f8d76d7a Fix defualts for bulk op add 2025-08-15 01:32:21 +12:00
Jake Barnby ad8cebc6e3 Ensure updated txn is returned from bulk op add 2025-08-15 01:32:09 +12:00
Jake Barnby bed46be720 Add grids params 2025-08-15 01:05:03 +12:00
Jake Barnby 0533568f9e Fix test 2025-08-15 01:03:46 +12:00
Jake Barnby 56d7716ddb Require data param for ops 2025-08-15 01:03:36 +12:00
Jake Barnby e9c730e0c1 Add txn id to create multi-method params 2025-08-15 01:03:18 +12:00
Jake BarnbyGitHubcoderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
875338d133 Update src/Appwrite/Utopia/Database/Validator/Queries/Transactions.php
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-08-15 00:48:56 +12:00
Jake BarnbyGitHubcoderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2a5ab1f8aa Update src/Appwrite/Utopia/Database/Validator/Queries/Transactions.php
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-08-15 00:48:37 +12:00
Jake Barnby 6e6364638d Add missing validator ops 2025-08-15 00:37:39 +12:00
Jake Barnby dfeadfd50f Update naming 2025-08-15 00:37:29 +12:00
Jake Barnby 9838571184 Catch explicit txn exception 2025-08-15 00:37:18 +12:00
Jake Barnby 5cd99de6e4 Remove redundant read 2025-08-15 00:36:59 +12:00
Jake Barnby fb31fbea9b Ensure parsed queries 2025-08-15 00:36:42 +12:00
Jake Barnby d6544f412d Add missing bulk cases on commit 2025-08-15 00:36:26 +12:00
Jake Barnby 3a7d8d2296 Remove redundant order 2025-08-15 00:35:41 +12:00
Jake Barnby 84bf2641aa Fix scope 2025-08-15 00:35:20 +12:00
Jake Barnby ede88a533e Handle create single/bulk split 2025-08-15 00:35:06 +12:00
Jake Barnby 3d1ae4feda Process permissions before txn logging 2025-08-15 00:34:20 +12:00
Jake Barnby 2235848262 Clear txn logs on worker 2025-08-15 00:32:03 +12:00
Jake Barnby 76034f801b Add failed error 2025-08-15 00:31:27 +12:00
Jake BarnbyandGitHub 2dd8dd8edc Merge pull request #10319 from appwrite/cursor/enforce-operations-cap-per-transaction-6dd5
Enforce operations cap per transaction
2025-08-14 22:23:56 +12:00
Jake Barnby c8afcbccee Fix create inject 2025-08-14 22:22:12 +12:00
Jake Barnby ef63d421b3 Merge branch 'feat-txn' into cursor/enforce-operations-cap-per-transaction-6dd5 2025-08-14 22:21:06 +12:00
Jake Barnby ba25f9f8d5 Merge branch 'feat-txn' of github.com:appwrite/appwrite into feat-txn 2025-08-14 22:20:57 +12:00
Jake Barnby 31a7df7214 Import fixes 2025-08-14 22:20:30 +12:00
Cursor Agentandjakeb994 335052bc84 Remove unused function and webhook event queue injections in database actions
Co-authored-by: jakeb994 <jakeb994@gmail.com>
2025-08-14 10:17:54 +00:00
Cursor Agentandjakeb994 dffe030d16 Replace databasesBatchSize with databasesTransactionSize in database operations
Co-authored-by: jakeb994 <jakeb994@gmail.com>
2025-08-14 10:06:43 +00:00
Cursor Agentandjakeb994 6d477688d7 Enforce max operations per transaction in database operations
Co-authored-by: jakeb994 <jakeb994@gmail.com>
2025-08-14 09:50:45 +00:00
Jake Barnby 1da2812864 Merge remote-tracking branch 'origin/1.8.x' into feat-txn 2025-08-14 21:44:05 +12:00
Jake BarnbyandGitHub 7ca9754ebf Merge pull request #10305 from appwrite/cursor/replay-database-transaction-logs-sequentially-d222
Replay database transaction logs sequentially
2025-08-13 01:37:20 +12:00
Cursor Agentandjakeb994 a71333ac60 Refactor transaction replay to preserve exact order and timestamps
Co-authored-by: jakeb994 <jakeb994@gmail.com>
2025-08-12 12:00:28 +00:00
Jake Barnby 5cec34b802 Fix merge 2025-08-12 00:45:30 +12:00
Jake BarnbyandGitHub 8d648a43c2 Merge pull request #10295 from appwrite/cursor/restore-database-transaction-functionality-439c
Restore database transaction functionality
2025-08-12 00:39:25 +12:00
Cursor Agentandjakeb994 5886c53ce3 Add transaction staging support for document operations
Co-authored-by: jakeb994 <jakeb994@gmail.com>
2025-08-11 08:43:30 +00:00
Cursor Agentandjakeb994 480f8c97ca Add transaction support for databases with staging and commit/rollback
Co-authored-by: jakeb994 <jakeb994@gmail.com>
2025-08-11 08:25:58 +00:00
Jake Barnby cbf210b9e6 Merge remote-tracking branch 'origin/1.8.x' into feat-txn
# Conflicts:
#	composer.json
#	composer.lock
#	tests/e2e/Services/Databases/Legacy/DatabasesBase.php
2025-08-11 20:06:40 +12:00
Jake Barnby 93cc4e1df8 Merge remote-tracking branch 'origin/1.8.x' into feat-txn
# Conflicts:
#	app/config/errors.php
#	app/config/roles.php
#	app/controllers/api/databases.php
#	composer.json
#	composer.lock
#	src/Appwrite/Extend/Exception.php
#	src/Appwrite/Utopia/Response.php
#	tests/e2e/Services/Databases/Legacy/DatabasesBase.php
2025-07-29 22:16:56 +12:00
Jake Barnby 07cce5ad3c Optional param 2025-07-29 21:30:02 +12:00
Jake Barnby 2745d8dce7 Add single op counting 2025-06-18 19:51:37 -04:00
Jake Barnby ac32947908 Update db 2025-06-18 19:17:47 -04:00
Jake Barnby b471bd0f58 Add operations to response model 2025-06-18 16:53:47 -04:00
Jake Barnby 910f27016b Add operation to txn meta 2025-06-17 22:08:08 -04:00
Jake Barnby 75469eed7d Fix staged values 2025-06-17 21:55:38 -04:00
Jake Barnby 5d5a6fbc5d Add delete transaction 2025-06-17 21:55:08 -04:00
Jake Barnby aba75abc93 Update params 2025-06-17 21:54:40 -04:00
Jake Barnby 1e82c7f0ef Add listTransactions 2025-06-17 21:54:30 -04:00
Jake Barnby 0b00ce28e0 Remove redundant attributes 2025-06-17 19:37:53 -04:00
Jake Barnby 145cb54bc0 Separate bulk 2025-06-17 16:58:25 -04:00
Jake Barnby bd9d827a16 Add tests 2025-06-17 16:54:32 -04:00
Jake Barnby 4da95f765b Don't require data 2025-06-17 16:45:14 -04:00
Jake Barnby d13081b4f2 Use const 2025-06-17 16:45:07 -04:00
Jake Barnby b71688a587 Format 2025-06-17 16:07:14 -04:00
Jake Barnby 14c0d27019 Merge remote-tracking branch 'origin/1.8.x' into feat-txn 2025-06-17 16:04:05 -04:00
Jake Barnby 705e5dd45b Add txn support to existing routes 2025-06-17 16:03:58 -04:00
Jake Barnby 4e2727292e Add txn routes 2025-06-17 16:03:33 -04:00
Jake Barnby cfc6d5fe2b Add txn collections 2025-06-17 16:02:32 -04:00
Jake Barnby c11fd38f0f Add txn models 2025-06-17 16:02:17 -04:00
Jake Barnby 11ce394181 Add txn errors 2025-06-17 16:01:56 -04:00
Jake Barnby fc4b82d017 Add txn scopes 2025-06-17 16:01:45 -04:00
Jake Barnby b556846be3 Add txn roles 2025-06-17 16:01:39 -04:00
DarshanandGitHub 598165c0e7 Merge branch 'main' into fix-zindex 2025-05-23 22:20:57 +05:30
DarshanandGitHub d08e406e9e Merge branch 'main' into fix-zindex 2025-05-23 19:25:51 +05:30
Darshan fc8326417b update: z-index to be the highest! 2025-05-23 19:20:26 +05:30
1253 changed files with 51730 additions and 5418 deletions
+2
View File
@@ -5,3 +5,5 @@ src/** linguist-detectable=false
tests/** linguist-detectable=false
public/scripts/** linguist-detectable=false
public/dist/scripts/** linguist-detectable=false
.github/workflows/*.lock.yml linguist-generated=true merge=ours
+83
View File
@@ -0,0 +1,83 @@
# Fixes and upgrades for the Appwrite Auth / Users / Teams services.
"product / auth":
- "(auth|session|login|logout|register|2fa|mfa|users|teams|memberships|invite|oauth|oauth2|sso|jwt)"
# Fixes and upgrades for the Appwrite Realtime API.
"api / realtime":
- "(realtime|subscribe|websockets)"
# Console, UI and UX issues
"product / console":
- "(console)"
# Fixes and upgrades for the Appwrite Storage.
"product / storage":
- "(storage|bucket|file|image|preview|download)"
# Fixes and upgrades for the Appwrite Database.
"product / databases":
- "(database|collection|tables|attribute|column|document|row|query|queries|indexes|search|filter|sort|pagination)"
# Fixes and upgrades for the Appwrite Functions.
"product / functions":
- "(function|runtime|deployment|execution|trigger|cron|schedule)"
# Fixes and upgrades for the Appwrite Docs.
# "product / docs":
# -
# Fixes and upgrades for the Appwrite Migrations.
"product / migrations":
- "(migrate|migration)"
# Fixes and upgrades for the Appwrite Messaging.
"product / messaging":
- "(messaging|email|sms|push|provider|topic|target|notification)"
# Fixes and upgrades for the Appwrite Platform.
# "product / platform":
# -
# Fixes and upgrades for database relationships
"feature / relationships":
- "(relationship)"
# Issues found only on Appwrite Cloud
# "product / cloud":
# -
# Fixes and upgrades for the Appwrite VCS.
"product / vcs":
- "(repo|push|vcs|repository)"
# Fixes and upgrades for the Appwrite GraphQL API.
"api / graphql":
- "(graphql|gql|mutation)"
# Fixes and upgrades for the Appwrite Assistant.
"product / assistant":
- "(assistant)"
# Fixes and upgrades for the Appwrite Domains.
"product / domains":
- "(domain|dns|ssl|certificate)"
# Fixes and upgrades for the Appwrite Locale.
"product / locale":
- "(locale|i18n|internationalization|localization|l10n|translation|timezone|country)"
# Fixes and upgrades for the Appwrite Avatars.
"product / avatars":
- "(avatar|initial|flag|icon)"
# Fixes and upgrades for Appwrite Sites.
"product / sites":
- "(site|web|hosting|domain|ssl|certificate|nextjs|nuxt|react|angular|vue|svelte|astro)"
# Fixes and upgrades for the Appwrite CLI.
"sdk / cli":
- "(cli|command line)"
# Issues only found when self-hosting Appwrite
"product / self-hosted":
- "(self-host|self host)"
+32
View File
@@ -0,0 +1,32 @@
name: AI Moderator
on:
issues:
types: [opened, edited]
issue_comment:
types: [created, edited]
pull_request:
types: [opened, edited]
pull_request_review:
types: [submitted, edited]
pull_request_review_comment:
types: [created, edited]
discussion:
types: [created, edited]
discussion_comment:
types: [created, edited]
permissions:
models: read
issues: write
pull-requests: write
discussions: write
jobs:
moderate:
runs-on: ubuntu-latest
steps:
- name: AI Moderator
uses: github/ai-moderator@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
+22
View File
@@ -0,0 +1,22 @@
name: Auto Label Issue
on:
issues:
types: [opened]
permissions:
issues: write
contents: read
jobs:
labeler:
runs-on: ubuntu-latest
steps:
- name: Issue Labeler
uses: github/issue-labeler@v3.4
with:
configuration-path: .github/labeler.yml
enable-versioned-regex: false
include-title: 1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
File diff suppressed because it is too large Load Diff
+85
View File
@@ -0,0 +1,85 @@
---
on:
schedule:
- cron: '0 0 * * *' # Run daily at midnight UTC
workflow_dispatch: # Enable manual trigger
stop-after: +30d # workflow will no longer trigger after 30 days. Remove this and recompile to run indefinitely
reaction: eyes
permissions: read-all
network: defaults
safe-outputs:
add-labels:
max: 5
add-comment:
tools:
web-fetch:
web-search:
timeout_minutes: 10
source: githubnext/agentics/workflows/issue-triage.md@0837fb7b24c3b84ee77fb7c8cfa8735c48be347a
---
# Agentic Triage
<!-- Note - this file can be customized to your needs. Replace this section directly, or add further instructions here. After editing run 'gh aw compile' -->
You're a triage assistant for GitHub issues. Your task is to analyze issues created in the last 24 hours and perform initial triage tasks for each of them.
1. First, use the `list_issues` tool to retrieve all issues created in the last 24 hours. Filter issues by using the `since` parameter with a timestamp from 24 hours ago (calculate: current time minus 24 hours in ISO 8601 format).
2. For each issue found, perform the following triage tasks:
3. Select appropriate labels for the issue from the provided list.
4. Retrieve the issue content using the `get_issue` tool. If the issue is obviously spam, or generated by bot, or something else that is not an actual issue to be worked on, then add an issue comment to the issue with a one sentence analysis and move to the next issue.
5. Next, use the GitHub tools to gather additional context about the issue:
- Fetch the list of labels available in this repository. Use 'gh label list' bash command to fetch the labels. This will give you the labels you can use for triaging issues.
- Fetch any comments on the issue using the `get_issue_comments` tool
- **Search for duplicate and related issues**: Use the `search_issues` tool to find similar issues by searching for key terms from the issue title and description. Look for both open and closed issues that might be related or duplicates.
6. Analyze the issue content, considering:
- The issue title and description
- The type of issue (bug report, feature request, question, etc.)
- Technical areas mentioned
- Severity or priority indicators
- User impact
- Components affected
7. Write notes, ideas, nudges, resource links, debugging strategies and/or reproduction steps for the team to consider relevant to the issue.
8. Select appropriate labels from the available labels list provided above:
- Choose labels that accurately reflect the issue's nature
- Be specific but comprehensive
- Select priority labels if you can determine urgency (high-priority, med-priority, or low-priority)
- Consider platform labels (android, ios) if applicable
- Search for similar issues, and if you find similar issues consider using a "duplicate" label if appropriate. Only do so if the issue is a duplicate of another OPEN issue.
- Only select labels from the provided list above
- It's okay to not add any labels if none are clearly applicable
9. Apply the selected labels:
- Use the `update_issue` tool to apply the labels to the issue
- DO NOT communicate directly with users
- If no labels are clearly applicable, do not apply any labels
10. Add an issue comment to the issue with your analysis:
- Start with "🎯 Agentic Issue Triage"
- Provide a brief summary of the issue
- **If duplicate or related issues were found**, add a section listing them with links (e.g., "### 🔗 Potentially Related Issues" followed by a bullet list of related issues with their titles and links)
- Mention any relevant details that might help the team understand the issue better
- Include any debugging strategies or reproduction steps if applicable
- Suggest resources or links that might be helpful for resolving the issue or learning skills related to the issue or the particular area of the codebase affected by it
- Mention any nudges or ideas that could help the team in addressing the issue
- If you have possible reproduction steps, include them in the comment
- If you have any debugging strategies, include them in the comment
- If appropriate break the issue down to sub-tasks and write a checklist of things to do.
- Use collapsed-by-default sections in the GitHub markdown to keep the comment tidy. Collapse all sections except the short main summary at the top.
11. After processing all issues, provide a summary of how many issues were triaged. If no issues were created in the last 24 hours, simply note that no new issues needed triage.
+639 -251
View File
@@ -1,266 +1,654 @@
# Version 1.8.0
## What's Changed
### Notable changes
* Do not allow full range in [#9847](https://github.com/appwrite/appwrite/pull/9847)
* Expose internal id as a part of auto increment id in [#9713](https://github.com/appwrite/appwrite/pull/9713)
* Expose sequence in [#9870](https://github.com/appwrite/appwrite/pull/9870)
* Add flutter 3.32 and dart 3.8 runtimes in [#9914](https://github.com/appwrite/appwrite/pull/9914)
* Shorten commit url and branch url in [#9919](https://github.com/appwrite/appwrite/pull/9919)
* Remove powered by from error pages in [#9927](https://github.com/appwrite/appwrite/pull/9927)
* Enable resource limits on GIF previews in [#9940](https://github.com/appwrite/appwrite/pull/9940)
* Only run maintenance task for projects accessed in last 24 hours in [#9989](https://github.com/appwrite/appwrite/pull/9989)
* Add increment + decrement routes in [#9986](https://github.com/appwrite/appwrite/pull/9986)
* Only run maintenance task for projects accessed in last 30 days in [#9995](https://github.com/appwrite/appwrite/pull/9995)
* Update appwrite-assistant image version to 0.8.3 in [#10003](https://github.com/appwrite/appwrite/pull/10003)
* Update emails to use button in [#9590](https://github.com/appwrite/appwrite/pull/9590)
* Create commit & branch url for first git deployment when site is linked to repo in [#9969](https://github.com/appwrite/appwrite/pull/9969)
* Handle React Native schemes in [#9650](https://github.com/appwrite/appwrite/pull/9650)
* Handle origin validation for web extensions in [#10107](https://github.com/appwrite/appwrite/pull/10107)
* Preview text for emails in [#10198](https://github.com/appwrite/appwrite/pull/10198)
* Create email target when using email OTP registration in [#10224](https://github.com/appwrite/appwrite/pull/10224)
* Add CSV imports in [#10231](https://github.com/appwrite/appwrite/pull/10231)
* Add support for svg favicons in [#10255](https://github.com/appwrite/appwrite/pull/10255)
* Realtime support for bulk api in [#10096](https://github.com/appwrite/appwrite/pull/10096)
* Skip redundant subqueries in users list route in [#10297](https://github.com/appwrite/appwrite/pull/10297)
* Add native sign in with Apple function template in [#10286](https://github.com/appwrite/appwrite/pull/10286)
* Add support for HEAD requests in [#10304](https://github.com/appwrite/appwrite/pull/10304)
* Update invite email copy in [#10309](https://github.com/appwrite/appwrite/pull/10309)
* Increase dynamic API key expiration in [#10328](https://github.com/appwrite/appwrite/pull/10328)
* Add TablesDB service in [#10333](https://github.com/appwrite/appwrite/pull/10333)
* Add execution.deploymentId to response model in [#10357](https://github.com/appwrite/appwrite/pull/10357)
* Switch Union China Pay to just Union Pay in [#10372](https://github.com/appwrite/appwrite/pull/10372) and [#10382](https://github.com/appwrite/appwrite/pull/10382)
* Add execution id and log id to response headers in [#10379](https://github.com/appwrite/appwrite/pull/10379)
* Add executionId and client IP to function headers in [#9147](https://github.com/appwrite/appwrite/pull/9147)
* Allow HEAD requests in function executions in [#10385](https://github.com/appwrite/appwrite/pull/10385)
* Add support for select queries when listing deployments in [#10380](https://github.com/appwrite/appwrite/pull/10380)
* Add spatial type attributes in [#10356](https://github.com/appwrite/appwrite/pull/10356) and [#10443](https://github.com/appwrite/appwrite/pull/10443)
* Add realtime support for bulk upserts in [#10425](https://github.com/appwrite/appwrite/pull/10425)
* Add previewUrl to vcs comment from vcs controller in [#10396](https://github.com/appwrite/appwrite/pull/10396)
* Rename verification SDK methods to be more specific in [#10606](https://github.com/appwrite/appwrite/pull/10606)
* Add project name in email subject in [#10609](https://github.com/appwrite/appwrite/pull/10609)
* Throw error when email is not available for account verification in [#10533](https://github.com/appwrite/appwrite/pull/10533)
* Add support for transactions in [#10023](https://github.com/appwrite/appwrite/pull/10023) and [#10624](https://github.com/appwrite/appwrite/pull/10624)
* Use bcc only emails for smtp in [#10644](https://github.com/appwrite/appwrite/pull/10644)
### Fixes
* Fix rules on active deployment in [#9902](https://github.com/appwrite/appwrite/pull/9902)
* Fix for upserts with differing optional parameter sets in [#9928](https://github.com/appwrite/appwrite/pull/9928)
* Fix teams deletion in [#9888](https://github.com/appwrite/appwrite/pull/9888)
* Fix deletion logic in [#9938](https://github.com/appwrite/appwrite/pull/9938)
* Update database for upsert fix in [#9941](https://github.com/appwrite/appwrite/pull/9941)
* Fix expire format in account recovery, verification, phone and mfa in [#9600](https://github.com/appwrite/appwrite/pull/9600)
* Fix github comments and deployment creation on branch deletion in [#9949](https://github.com/appwrite/appwrite/pull/9949)
* Fix cache issues with proxy for deployment download in [#9971](https://github.com/appwrite/appwrite/pull/9971)
* Redirect rule parent resource in [#9982](https://github.com/appwrite/appwrite/pull/9982)
* Fix usage queues in [#9946](https://github.com/appwrite/appwrite/pull/9946)
* Transfer control for the migration in [#9997](https://github.com/appwrite/appwrite/pull/9997)
* Prevent 'Attribute "factors" must be an array' error in [#10004](https://github.com/appwrite/appwrite/pull/10004)
* Fix all vcs urls missing region in [#9998](https://github.com/appwrite/appwrite/pull/9998)
* Add readable error for csv imports in [#9947](https://github.com/appwrite/appwrite/pull/9947)
* Fix missing screenshot logs in [#10024](https://github.com/appwrite/appwrite/pull/10024)
* Update executor to fix s3 endpoint bug in [#10036](https://github.com/appwrite/appwrite/pull/10036)
* Fix build duration calculation in [#10053](https://github.com/appwrite/appwrite/pull/10053)
* Fix logs order in [#10052](https://github.com/appwrite/appwrite/pull/10052)
* Fix platform check for Sites with automatic rule in [#10043](https://github.com/appwrite/appwrite/pull/10043)
* Increase cache ttl to ensure hits in [#10079](https://github.com/appwrite/appwrite/pull/10079)
* Fix connect to existing repo flow in [#10034](https://github.com/appwrite/appwrite/pull/10034)
* Fix migrations path and type in [#10090](https://github.com/appwrite/appwrite/pull/10090)
* Fix JWT authentication database selection for admin mode in [#10098](https://github.com/appwrite/appwrite/pull/10098)
* Use _APP_CONSOLE_DOMAIN, if not found, then use _APP_DOMAIN in [#9999](https://github.com/appwrite/appwrite/pull/9999)
* Fix file tokens not working on file-security in [#10120](https://github.com/appwrite/appwrite/pull/10120)
* Fix build activation race condition in [#9952](https://github.com/appwrite/appwrite/pull/9952)
* Changed the default permission param of upsert document in [#10129](https://github.com/appwrite/appwrite/pull/10129)
* Fix success validation in oauth2 redirect in [#10130](https://github.com/appwrite/appwrite/pull/10130)
* Update OAuth2 redirect URLs in [#10119](https://github.com/appwrite/appwrite/pull/10119)
* Fix specs with new env vars in [#10135](https://github.com/appwrite/appwrite/pull/10135)
* Skip deployment when commit is created by us in [#10187](https://github.com/appwrite/appwrite/pull/10187)
* Use direct source for file-preview when empty in [#10181](https://github.com/appwrite/appwrite/pull/10181)
* Better error message for invalid function scheduled time in [#10201](https://github.com/appwrite/appwrite/pull/10201)
* Add defaultBranch in getRepository response in [#10190](https://github.com/appwrite/appwrite/pull/10190)
* Filter sequence to int because any models skip rule checks in [#10221](https://github.com/appwrite/appwrite/pull/10221)
* Fix 500 errors on robots and humans txt files in [#10248](https://github.com/appwrite/appwrite/pull/10248)
* Fix atomic number ops with limit 0 in [#10264](https://github.com/appwrite/appwrite/pull/10264)
* Update build command for flutter in [#10288](https://github.com/appwrite/appwrite/pull/10288)
* Add a fallback locale in [#10307](https://github.com/appwrite/appwrite/pull/10307)
* Fix variables sharing across resources in [#10308](https://github.com/appwrite/appwrite/pull/10308)
* Fix uncaught invalid arg in [#10318](https://github.com/appwrite/appwrite/pull/10318)
* Add missing upsert event in [#10317](https://github.com/appwrite/appwrite/pull/10317)
* Improve font reliability in [#10332](https://github.com/appwrite/appwrite/pull/10332)
* Truncate logs in function worker in [#9773](https://github.com/appwrite/appwrite/pull/9773)
* Fix event template configuration issues in [#10350](https://github.com/appwrite/appwrite/pull/10350)
* Fix users events & missed publisher logic for Functions in [#10348](https://github.com/appwrite/appwrite/pull/10348)
* Fix incorrect file token expiry in [#10329](https://github.com/appwrite/appwrite/pull/10329)
* Fix upserting that makes no change in [#10363](https://github.com/appwrite/appwrite/pull/10363) and [#10364](https://github.com/appwrite/appwrite/pull/10364)
* Fix domain validator in [#10374](https://github.com/appwrite/appwrite/pull/10374)
* Apply sequence integer casting and attribute cleanup fixes to Row model, TablesDB tests, and document processing in [#10383](https://github.com/appwrite/appwrite/pull/10383)
* Fix domain validator in [#10386](https://github.com/appwrite/appwrite/pull/10386)
* Fix sequence removal in [#10388](https://github.com/appwrite/appwrite/pull/10388)
* Fix TablesDB scopes in [#10387](https://github.com/appwrite/appwrite/pull/10387)
* Fix request filter in [#10389](https://github.com/appwrite/appwrite/pull/10389)
* Fix nested filter selects in [#10393](https://github.com/appwrite/appwrite/pull/10393)
* Fix readonly attr stripping on write in [#10405](https://github.com/appwrite/appwrite/pull/10405)
* Replace %s with mustache placeholder in [#10392](https://github.com/appwrite/appwrite/pull/10392)
* Support array headers for set-cookie in [#10427](https://github.com/appwrite/appwrite/pull/10427)
* Fix put prefs structure validation in [#10436](https://github.com/appwrite/appwrite/pull/10436)
* Fix oauth identity check in [#10460](https://github.com/appwrite/appwrite/pull/10460)
* Fix check in [#10489](https://github.com/appwrite/appwrite/pull/10489)
* Fix database usage metrics in [#10483](https://github.com/appwrite/appwrite/pull/10483)
* Throw appropriate 400s from request filters in [#10502](https://github.com/appwrite/appwrite/pull/10502)
* Catch query exception on bucket/file list in [#10505](https://github.com/appwrite/appwrite/pull/10505)
* Use outputDirectory attribute from deployment in [#10571](https://github.com/appwrite/appwrite/pull/10571)
* Fix buildOutput attribute name in deployment check in [#10572](https://github.com/appwrite/appwrite/pull/10572)
* Update database for nested selection fix in [#10577](https://github.com/appwrite/appwrite/pull/10577)
* Auto-allow sites domain for OAuth in [#10503](https://github.com/appwrite/appwrite/pull/10503)
* Handle OIDC well-known endpoint errors in [#10589](https://github.com/appwrite/appwrite/pull/10589)
* Correct invalid template links in Create temporary deployment endpoint in [#10581](https://github.com/appwrite/appwrite/pull/10581)
* Update broken create table links in TablesDB docs in [#10592](https://github.com/appwrite/appwrite/pull/10592)
* Fix cross API compatibility in [#10626](https://github.com/appwrite/appwrite/pull/10626)
* Fix code 0 from databases on realtime in [#10631](https://github.com/appwrite/appwrite/pull/10631)
* Throw duplicate error when function id already exists in [#10618](https://github.com/appwrite/appwrite/pull/10618)
### Miscellaneous
* Fix task coroutine hooks in [#9850](https://github.com/appwrite/appwrite/pull/9850)
* Feat sync encrypt updates in [#9871](https://github.com/appwrite/appwrite/pull/9871)
* Revert "Feat sync encrypt updates" in [#9877](https://github.com/appwrite/appwrite/pull/9877)
* Add builds worker group in [#9872](https://github.com/appwrite/appwrite/pull/9872)
* Revert encrypted attribute changes in [#9898](https://github.com/appwrite/appwrite/pull/9898)
* Update sdk generator and sdks in [#9849](https://github.com/appwrite/appwrite/pull/9849)
* Release cli in [#9900](https://github.com/appwrite/appwrite/pull/9900)
* Improve how rules are fetched in [#9915](https://github.com/appwrite/appwrite/pull/9915)
* Sync 1.6 in [#9920](https://github.com/appwrite/appwrite/pull/9920)
* Update messaging library in [#9764](https://github.com/appwrite/appwrite/pull/9764)
* Disable TCP hook on stats resources in [#9932](https://github.com/appwrite/appwrite/pull/9932)
* Remove JSON index on roles due to MySQL bug in [#9924](https://github.com/appwrite/appwrite/pull/9924)
* Update queue in [#9936](https://github.com/appwrite/appwrite/pull/9936)
* Fix flaky account tests in [#9954](https://github.com/appwrite/appwrite/pull/9954)
* Fix flaky messaging test in [#9957](https://github.com/appwrite/appwrite/pull/9957)
* Make usage tests robust in [#9956](https://github.com/appwrite/appwrite/pull/9956)
* Increase deployment timeouts in tests in [#9955](https://github.com/appwrite/appwrite/pull/9955)
* Graceful shutdown on SIGTERM in [#9890](https://github.com/appwrite/appwrite/pull/9890)
* Bring back telemetry for storage in [#9903](https://github.com/appwrite/appwrite/pull/9903)
* Update version to 1.7.4 and add experimental warnings in [#9959](https://github.com/appwrite/appwrite/pull/9959)
* Return queue pre-fetch results in [#9731](https://github.com/appwrite/appwrite/pull/9731)
* Update SDK versions in [#9987](https://github.com/appwrite/appwrite/pull/9987)
* Restore unique filename for health check #9842 in [#9993](https://github.com/appwrite/appwrite/pull/9993)
* Add after build hook in [#9996](https://github.com/appwrite/appwrite/pull/9996)
* Remove endpoint selector in [#10000](https://github.com/appwrite/appwrite/pull/10000)
* Use static code instead of astro in tests in [#9966](https://github.com/appwrite/appwrite/pull/9966)
* Add ref param to vcs list contents in [#9991](https://github.com/appwrite/appwrite/pull/9991)
* Update coderabbit config file in [#10005](https://github.com/appwrite/appwrite/pull/10005)
* TAR support in [#10016](https://github.com/appwrite/appwrite/pull/10016)
* Update delete project scope in [#10017](https://github.com/appwrite/appwrite/pull/10017)
* Lazy-load relationships in [#9669](https://github.com/appwrite/appwrite/pull/9669)
* Revert "Feat: Lazy-load relationships" in [#10018](https://github.com/appwrite/appwrite/pull/10018)
* Revert "Update delete project scope" in [#10022](https://github.com/appwrite/appwrite/pull/10022)
* 1.8.x in [#9985](https://github.com/appwrite/appwrite/pull/9985)
* Update cli version and add bulk operation warnings in [#10007](https://github.com/appwrite/appwrite/pull/10007)
* Update Appwrite description to include Sites, add MCP to products list in [#9867](https://github.com/appwrite/appwrite/pull/9867)
* Update README.md in [#10026](https://github.com/appwrite/appwrite/pull/10026)
* Fix duplication of platforms in swagger specs in [#10008](https://github.com/appwrite/appwrite/pull/10008)
* Update react native sdk and changelog in [#10025](https://github.com/appwrite/appwrite/pull/10025)
* Update delete project signature in [#10028](https://github.com/appwrite/appwrite/pull/10028)
* Fix Golang SDK examples for docs in [#10001](https://github.com/appwrite/appwrite/pull/10001)
* Revert "worker: Graceful shutdown on SIGTERM" in [#10035](https://github.com/appwrite/appwrite/pull/10035)
* Fix benchmark CI in [#10055](https://github.com/appwrite/appwrite/pull/10055)
* Use ->action(...)) instead of ->callback([$this, 'action']); in [#9967](https://github.com/appwrite/appwrite/pull/9967)
* Override project via custom domains log in [#10011](https://github.com/appwrite/appwrite/pull/10011)
* Add database worker job logging in [#10056](https://github.com/appwrite/appwrite/pull/10056)
* Add runtimeEntrypoint param in [#10062](https://github.com/appwrite/appwrite/pull/10062)
* Add missing injections in [#10061](https://github.com/appwrite/appwrite/pull/10061)
* Replace Console loop with Swoole Timer for stats resource m… in [#10054](https://github.com/appwrite/appwrite/pull/10054)
* Update README.md in [#10063](https://github.com/appwrite/appwrite/pull/10063)
* Fix parameter order in action function for robots.txt route in [#10067](https://github.com/appwrite/appwrite/pull/10067)
* Preview endpoint logging in [#10068](https://github.com/appwrite/appwrite/pull/10068)
* Fix flakyness of account tests in [#10066](https://github.com/appwrite/appwrite/pull/10066)
* Update cli to 8.1.0 and add changelog in [#10070](https://github.com/appwrite/appwrite/pull/10070)
* Update composer.json and composer.lock to include appwrite-lab… in [#10051](https://github.com/appwrite/appwrite/pull/10051)
* Fix tests, for `Cloud` in [#10085](https://github.com/appwrite/appwrite/pull/10085)
* Update README.md in [#10084](https://github.com/appwrite/appwrite/pull/10084)
* Revert "chore: update composer.json and composer.lock to include appwrite-lab…" in [#10086](https://github.com/appwrite/appwrite/pull/10086)
* Update README to add Bulk API link in [#10095](https://github.com/appwrite/appwrite/pull/10095)
* Add redis publisher to schedule base if available in [#10099](https://github.com/appwrite/appwrite/pull/10099)
* Fix site template test in [#10104](https://github.com/appwrite/appwrite/pull/10104)
* Update nodejs 17.1.0 in [#10088](https://github.com/appwrite/appwrite/pull/10088)
* Update README.md to add Upsert announcement in [#10112](https://github.com/appwrite/appwrite/pull/10112)
* Reduce delete batch size in [#10128](https://github.com/appwrite/appwrite/pull/10128)
* Update README.md in [#10134](https://github.com/appwrite/appwrite/pull/10134)
* Speed up tests in [#10127](https://github.com/appwrite/appwrite/pull/10127)
* Update cli to 8.2.0 in [#10136](https://github.com/appwrite/appwrite/pull/10136)
* Prevent injected $user from being shadowed in [#10150](https://github.com/appwrite/appwrite/pull/10150)
* Update react native to 0.10.1 and dotnet to 0.14.0 in [#10138](https://github.com/appwrite/appwrite/pull/10138)
* Update README.md in [#10153](https://github.com/appwrite/appwrite/pull/10153)
* Update cli 8.2.1 in [#10155](https://github.com/appwrite/appwrite/pull/10155)
* Fix build usage specification in [#10157](https://github.com/appwrite/appwrite/pull/10157)
* Handle redirect validator in specs + GraphQL type mapper in [#10158](https://github.com/appwrite/appwrite/pull/10158)
* Update dart 16.1.0, flutter 17.0.2 and cli 8.2.2 in [#10161](https://github.com/appwrite/appwrite/pull/10161)
* Improve invalid scheme error in origin check in [#10164](https://github.com/appwrite/appwrite/pull/10164)
* 1.7.x in [#9897](https://github.com/appwrite/appwrite/pull/9897)
* Added the cases of null permissions in the upsert route and update th… in [#10179](https://github.com/appwrite/appwrite/pull/10179)
* Fix 1.7.x specs in [#10197](https://github.com/appwrite/appwrite/pull/10197)
* Suppress git-action exception in deployment worker in [#10199](https://github.com/appwrite/appwrite/pull/10199)
* Stats-usage on redis in [#10156](https://github.com/appwrite/appwrite/pull/10156)
* Fix templates on `1.7.x`. in [#10203](https://github.com/appwrite/appwrite/pull/10203)
* Change preview & body for MFA email in [#10205](https://github.com/appwrite/appwrite/pull/10205)
* Add docs for nestedType, encode, from and toMap in [#10204](https://github.com/appwrite/appwrite/pull/10204)
* Update sdks 1.7.x in [#10202](https://github.com/appwrite/appwrite/pull/10202)
* Update migration release in [#10222](https://github.com/appwrite/appwrite/pull/10222)
* Remove sequence on incoming docs in [#10228](https://github.com/appwrite/appwrite/pull/10228)
* Filter certificates renewal task in maintenance by region in [#10227](https://github.com/appwrite/appwrite/pull/10227)
* Move changelog to sdks platforms array in [#10233](https://github.com/appwrite/appwrite/pull/10233)
* Update changelog and sdk gen in [#10247](https://github.com/appwrite/appwrite/pull/10247)
* Telemetry for cache hits and misses in [#10240](https://github.com/appwrite/appwrite/pull/10240)
* Add model examples + additonal examples to specs in [#10249](https://github.com/appwrite/appwrite/pull/10249)
* Update favicons endpoint to fallback to ico instead of throwing error in [#10260](https://github.com/appwrite/appwrite/pull/10260)
* Update README.md in [#10259](https://github.com/appwrite/appwrite/pull/10259)
* Check CAA record before issuing certificate in [#10258](https://github.com/appwrite/appwrite/pull/10258)
* Revert "Check CAA record before issuing certificate" in [#10263](https://github.com/appwrite/appwrite/pull/10263)
* Test var id attribute in [#10243](https://github.com/appwrite/appwrite/pull/10243)
* Add type attribute to the database creation flow in [#10266](https://github.com/appwrite/appwrite/pull/10266)
* Add CAA validator in [#10267](https://github.com/appwrite/appwrite/pull/10267)
* Update database type to grids and legacy in [#10273](https://github.com/appwrite/appwrite/pull/10273)
* Update README.md in [#10272](https://github.com/appwrite/appwrite/pull/10272)
* Upgrade composer for utopia migration in [#10274](https://github.com/appwrite/appwrite/pull/10274)
* Update SDK generator and sdks in [#10271](https://github.com/appwrite/appwrite/pull/10271)
* Fix wrong resource path for audits in [#10279](https://github.com/appwrite/appwrite/pull/10279)
* Update `grid` on resource events in [#10282](https://github.com/appwrite/appwrite/pull/10282)
* Add readonly param to sequence, databaseId and collectionId in [#10278](https://github.com/appwrite/appwrite/pull/10278)
* Update migrations in [#10283](https://github.com/appwrite/appwrite/pull/10283)
* Add placeholder detection in [#10284](https://github.com/appwrite/appwrite/pull/10284)
* Update docker base to 0.10.3 in [#10285](https://github.com/appwrite/appwrite/pull/10285)
* Make check for adding warning header stricter in [#10293](https://github.com/appwrite/appwrite/pull/10293)
* Fix databases worker cache clearing bug in [#10294](https://github.com/appwrite/appwrite/pull/10294)
* Reapply Redis functions queue in [#10299](https://github.com/appwrite/appwrite/pull/10299)
* Add new database query type tests in [#10296](https://github.com/appwrite/appwrite/pull/10296)
* Update package in [#10312](https://github.com/appwrite/appwrite/pull/10312)
* Update required attributes in [#10311](https://github.com/appwrite/appwrite/pull/10311)
* Remove experiment warnings from bulk methods in [#10310](https://github.com/appwrite/appwrite/pull/10310)
* Update README.md in [#10313](https://github.com/appwrite/appwrite/pull/10313)
* Added internal file param to handle upload to internal bucket in [#10321](https://github.com/appwrite/appwrite/pull/10321)
* Remove temp logging in [#10302](https://github.com/appwrite/appwrite/pull/10302)
* Improve sites test for stability in [#10331](https://github.com/appwrite/appwrite/pull/10331)
* Database lib bump to 0.71.15 in [#10336](https://github.com/appwrite/appwrite/pull/10336)
* Clarify userId param in endpoints that create accounts in [#10117](https://github.com/appwrite/appwrite/pull/10117)
* Upgrade HTTP in [#10338](https://github.com/appwrite/appwrite/pull/10338)
* Remove unnessessary external dependnecies in [#10343](https://github.com/appwrite/appwrite/pull/10343)
* Sync main into 1.7.x in [#10347](https://github.com/appwrite/appwrite/pull/10347)
* Fix TablesDB casing in [#10346](https://github.com/appwrite/appwrite/pull/10346)
* Add cookies test in [#10352](https://github.com/appwrite/appwrite/pull/10352)
* Update token tests with jwt decode in [#10354](https://github.com/appwrite/appwrite/pull/10354)
* Utilize assets server for fonts in [#10358](https://github.com/appwrite/appwrite/pull/10358)
* Sync main into 1.7.x in [#10359](https://github.com/appwrite/appwrite/pull/10359)
* Bump 1.7.x in [#10365](https://github.com/appwrite/appwrite/pull/10365)
* Fix queue health in [#10369](https://github.com/appwrite/appwrite/pull/10369)
* Allow publisher messaging override in scheduler in [#10370](https://github.com/appwrite/appwrite/pull/10370)
* Add replacewith and deprecated since to account methods in [#10377](https://github.com/appwrite/appwrite/pull/10377)
* Update README.md in [#10376](https://github.com/appwrite/appwrite/pull/10376)
* Update CLI in [#10390](https://github.com/appwrite/appwrite/pull/10390)
* Update default method in description in [#10391](https://github.com/appwrite/appwrite/pull/10391)
* Rename namespace from tables-db to tablesdb in specs in [#10395](https://github.com/appwrite/appwrite/pull/10395)
* Update tables group in specs in [#10394](https://github.com/appwrite/appwrite/pull/10394)
* Update description for upsert methods in [#10397](https://github.com/appwrite/appwrite/pull/10397)
* Update README.md in [#10401](https://github.com/appwrite/appwrite/pull/10401)
* Added handling of database resources after migration in [#10400](https://github.com/appwrite/appwrite/pull/10400)
* Revert "Added handling of database resources after migration" in [#10406](https://github.com/appwrite/appwrite/pull/10406)
* Remove sdk deprecation warnings in [#10408](https://github.com/appwrite/appwrite/pull/10408)
* Mark Row response model's param with readonly in [#10409](https://github.com/appwrite/appwrite/pull/10409)
* Update exception thrown when svg sanitization fails in [#10416](https://github.com/appwrite/appwrite/pull/10416)
* Fix allow null params in [#10417](https://github.com/appwrite/appwrite/pull/10417)
* Allow running tests with specific response format in [#10418](https://github.com/appwrite/appwrite/pull/10418)
* Make webhooks publisher overridable in [#10419](https://github.com/appwrite/appwrite/pull/10419)
* Check audits logs in [#10414](https://github.com/appwrite/appwrite/pull/10414)
* Remove direct publisher calls in [#10420](https://github.com/appwrite/appwrite/pull/10420)
* removed spatial type response and will be using the json type for the… in [#10433](https://github.com/appwrite/appwrite/pull/10433)
* Add tests for new time helpers in [#10437](https://github.com/appwrite/appwrite/pull/10437)
* Move projects.list() to module in [#10441](https://github.com/appwrite/appwrite/pull/10441)
* Update cli to 9.1.0 in [#10442](https://github.com/appwrite/appwrite/pull/10442)
* Add requestBody param examples in specs in [#10431](https://github.com/appwrite/appwrite/pull/10431)
* Fix mysql tests in [#10445](https://github.com/appwrite/appwrite/pull/10445)
* Upgrade platform lib to have older queue lib in [#10447](https://github.com/appwrite/appwrite/pull/10447)
* Fix router compression in [#10452](https://github.com/appwrite/appwrite/pull/10452)
* Upgrade http lib for backwards compatible default param in [#10455](https://github.com/appwrite/appwrite/pull/10455)
* Update examples in [#10444](https://github.com/appwrite/appwrite/pull/10444)
* Automatic pr creation in sdk release script in [#10457](https://github.com/appwrite/appwrite/pull/10457)
* Remove avatars command from cli in [#10454](https://github.com/appwrite/appwrite/pull/10454)
* Remove deno from platforms array in [#10453](https://github.com/appwrite/appwrite/pull/10453)
* Spatial type attributes sdk updates in [#10463](https://github.com/appwrite/appwrite/pull/10463)
* Stats resources try catch in [#10469](https://github.com/appwrite/appwrite/pull/10469)
* Move proxy endpoints to modules in [#10470](https://github.com/appwrite/appwrite/pull/10470)
* Add certificate validation override in [#10471](https://github.com/appwrite/appwrite/pull/10471)
* Generate SDKs in [#10475](https://github.com/appwrite/appwrite/pull/10475)
* Spatial test tablesdb updates in [#10473](https://github.com/appwrite/appwrite/pull/10473)
* Add colors to certificate logs in [#10438](https://github.com/appwrite/appwrite/pull/10438)
* appwrite db bump in [#10479](https://github.com/appwrite/appwrite/pull/10479)
* Bump database in [#10480](https://github.com/appwrite/appwrite/pull/10480)
* Health db queues in [#10482](https://github.com/appwrite/appwrite/pull/10482)
* Attempt small size for website dependency in [#10485](https://github.com/appwrite/appwrite/pull/10485)
* Worker stop in [#10498](https://github.com/appwrite/appwrite/pull/10498)
* Update database in [#10506](https://github.com/appwrite/appwrite/pull/10506)
* Stats resources and usage sorting by unique field in [#10472](https://github.com/appwrite/appwrite/pull/10472)
* Add spatial column validation during required mode and tests for exis… in [#10509](https://github.com/appwrite/appwrite/pull/10509)
* Sub query variables order by in [#10513](https://github.com/appwrite/appwrite/pull/10513)
* Update README.md in [#10514](https://github.com/appwrite/appwrite/pull/10514)
* bump database 1.5.0 in [#10515](https://github.com/appwrite/appwrite/pull/10515)
* Don't remove required attributes in [#10516](https://github.com/appwrite/appwrite/pull/10516)
* Catch query exception on bulk update/delete in [#10517](https://github.com/appwrite/appwrite/pull/10517)
* Update cli to 10.0.0 in [#10511](https://github.com/appwrite/appwrite/pull/10511)
* Add type_enum support and update docs in [#10496](https://github.com/appwrite/appwrite/pull/10496)
* Improve code readability for schedules in [#10522](https://github.com/appwrite/appwrite/pull/10522)
* Include response model enum names in [#10538](https://github.com/appwrite/appwrite/pull/10538)
* SDK releases in [#10539](https://github.com/appwrite/appwrite/pull/10539)
* Fix health status enum in [#10540](https://github.com/appwrite/appwrite/pull/10540)
* Update afterbuild fn in [#10541](https://github.com/appwrite/appwrite/pull/10541)
* Update afterbuild to also pass adapter in [#10545](https://github.com/appwrite/appwrite/pull/10545)
* Update `z-index` to be the highest in [#9874](https://github.com/appwrite/appwrite/pull/9874)
* Update framework lib to 0.33.28 in [#10551](https://github.com/appwrite/appwrite/pull/10551)
* Fix enum typing for platform in specs in [#10553](https://github.com/appwrite/appwrite/pull/10553)
* Add enums for database type and column status in [#10561](https://github.com/appwrite/appwrite/pull/10561)
* Fix activities in [#10586](https://github.com/appwrite/appwrite/pull/10586)
* Fix logs truncation tests in [#10585](https://github.com/appwrite/appwrite/pull/10585)
* Remove related data in realtime payload in [#10590](https://github.com/appwrite/appwrite/pull/10590)
* Update composer dependencies in [#10601](https://github.com/appwrite/appwrite/pull/10601)
* Update sdks add response models in [#10554](https://github.com/appwrite/appwrite/pull/10554)
* Sanitize 5xx errors on realtime in [#10598](https://github.com/appwrite/appwrite/pull/10598)
* Update database in [#10596](https://github.com/appwrite/appwrite/pull/10596)
* Add both collection and table id in the realtime in [#10608](https://github.com/appwrite/appwrite/pull/10608)
* Chore bump db in [#10611](https://github.com/appwrite/appwrite/pull/10611)
* Branded email for Console auth flows in [#10501](https://github.com/appwrite/appwrite/pull/10501)
* Add minor releases for all SDKs - deprecate createVerification, add createEmailVerification in [#10614](https://github.com/appwrite/appwrite/pull/10614)
* Add automatic releases in [#10615](https://github.com/appwrite/appwrite/pull/10615)
* Feat txn sdks in [#10621](https://github.com/appwrite/appwrite/pull/10621)
* Prevent empty releases in sdk release script in [#10627](https://github.com/appwrite/appwrite/pull/10627)
* Update domains lib to 0.8.2 in [#10629](https://github.com/appwrite/appwrite/pull/10629)
* Fix txn API scope backwards compat in [#10640](https://github.com/appwrite/appwrite/pull/10640)
* Fix block schedules in [#10620](https://github.com/appwrite/appwrite/pull/10620)
* Update .NET SDK to 0.21.2 and improve release detection in [#10641](https://github.com/appwrite/appwrite/pull/10641)
* Make methods protected for extending in [#10617](https://github.com/appwrite/appwrite/pull/10617)
# Version 1.7.4
## What's Changed
### Notable changes
* Update console image to version 6.0.13 in [#9891](https://github.com/appwrite/appwrite/pull/9891)
### Fixes
* Fix createDeployment chunk upload in [#9886](https://github.com/appwrite/appwrite/pull/9886)
### Miscellaneous
* Update version from 1.7.3 to 1.7.4 in [#9893](https://github.com/appwrite/appwrite/pull/9893)
# Version 1.7.3
## What's Changed
### Notable changes
* Allow unlimited deployment size in [#9866](https://github.com/appwrite/appwrite/pull/9866)
* Bump console to version 6.0.11 in [#9881](https://github.com/appwrite/appwrite/pull/9881)
### Fixes
* Send deploymentResourceType in rules verification in [#9859](https://github.com/appwrite/appwrite/pull/9859)
* Fix CNAME validation in [#9861](https://github.com/appwrite/appwrite/pull/9861)
* Fix bucket not included in path in [#9864](https://github.com/appwrite/appwrite/pull/9864)
* Fix URL for view logs in github comment in [#9875](https://github.com/appwrite/appwrite/pull/9875)
* Set owner and region while migrating rules in [#9856](https://github.com/appwrite/appwrite/pull/9856)
* Remove _APP_DEFAULT_REGION because it is not a valid env var in [#9883](https://github.com/appwrite/appwrite/pull/9883)
### Miscellaneous
* Only load error page for development mode in [#9860](https://github.com/appwrite/appwrite/pull/9860)
* Make max deployment and build size configurable in [#9863](https://github.com/appwrite/appwrite/pull/9863)
* Update flutter_web_auth_2 docs to match 4.x in [#9858](https://github.com/appwrite/appwrite/pull/9858)
* Use unique filename for health check in [#9842](https://github.com/appwrite/appwrite/pull/9842)
* Added encrypt property in the attribute string response model in [#9868](https://github.com/appwrite/appwrite/pull/9868)
* Add sequence in [#9865](https://github.com/appwrite/appwrite/pull/9865)
* Add builds worker group in [#9873](https://github.com/appwrite/appwrite/pull/9873)
* updated errro for the string encryption in [#9878](https://github.com/appwrite/appwrite/pull/9878)
* Revert "Add sequence" in [#9879](https://github.com/appwrite/appwrite/pull/9879)
* Prepare 1.7.3 release in [#9882](https://github.com/appwrite/appwrite/pull/9882)
# Version 1.6.2
## What's Changed
### Notable changes
* Delete git folder to reduce build size in [9076](https://github.com/appwrite/appwrite/pull/9076)
* Upgrade assistant in [9100](https://github.com/appwrite/appwrite/pull/9100)
* Use redis adapter for abuse in [9121](https://github.com/appwrite/appwrite/pull/9121)
* Set base specification CPUs to 0.5 again in [9146](https://github.com/appwrite/appwrite/pull/9146)
* Add new push message parameters in [9060](https://github.com/appwrite/appwrite/pull/9060)
* Update audits to include user type in [9211](https://github.com/appwrite/appwrite/pull/9211)
* Enable HEIC in [9251](https://github.com/appwrite/appwrite/pull/9251)
* Added teamName to membership redirect url in [9269](https://github.com/appwrite/appwrite/pull/9269)
* Add support endpoint url for S3 in [9303](https://github.com/appwrite/appwrite/pull/9303)
* Added RuPay Credit Card Icon in Avatars Service in [5046](https://github.com/appwrite/appwrite/pull/5046)
* Add figma oauth provider in [9623](https://github.com/appwrite/appwrite/pull/9623)
* Update console to version 5.2.58 in [9637](https://github.com/appwrite/appwrite/pull/9637)
* Delete git folder to reduce build size in [#9076](https://github.com/appwrite/appwrite/pull/9076)
* Upgrade assistant in [#9100](https://github.com/appwrite/appwrite/pull/9100)
* Use redis adapter for abuse in [#9121](https://github.com/appwrite/appwrite/pull/9121)
* Set base specification CPUs to 0.5 again in [#9146](https://github.com/appwrite/appwrite/pull/9146)
* Add new push message parameters in [#9060](https://github.com/appwrite/appwrite/pull/9060)
* Update audits to include user type in [#9211](https://github.com/appwrite/appwrite/pull/9211)
* Enable HEIC in [#9251](https://github.com/appwrite/appwrite/pull/9251)
* Added teamName to membership redirect url in [#9269](https://github.com/appwrite/appwrite/pull/9269)
* Add support endpoint url for S3 in [#9303](https://github.com/appwrite/appwrite/pull/9303)
* Added RuPay Credit Card Icon in Avatars Service in [#5046](https://github.com/appwrite/appwrite/pull/5046)
* Add figma oauth provider in [#9623](https://github.com/appwrite/appwrite/pull/9623)
* Update console to version 5.2.58 in [#9637](https://github.com/appwrite/appwrite/pull/9637)
### Fixes
* Remove failed attribute in [9032](https://github.com/appwrite/appwrite/pull/9032)
* Fix delete notFound attribute in [9038](https://github.com/appwrite/appwrite/pull/9038)
* 🇮🇸 Added missing Icelandic translations for email strings. in [4848](https://github.com/appwrite/appwrite/pull/4848)
* fix doc comment for filter method in [5769](https://github.com/appwrite/appwrite/pull/5769)
* Delete attribute No throwing Exception on not found in [9157](https://github.com/appwrite/appwrite/pull/9157)
* Fix VCS identity collision in [9138](https://github.com/appwrite/appwrite/pull/9138)
* Fix disabling of email-otp when user wants to in [9200](https://github.com/appwrite/appwrite/pull/9200)
* Ensure user can delete session in [9209](https://github.com/appwrite/appwrite/pull/9209)
* Fix resend invitation in [9218](https://github.com/appwrite/appwrite/pull/9218)
* Fix phone number parsing exception handling in [9246](https://github.com/appwrite/appwrite/pull/9246)
* Fix amazon oauth in [9253](https://github.com/appwrite/appwrite/pull/9253)
* Fix slack oauth scopes, and updated to v2 in [9228](https://github.com/appwrite/appwrite/pull/9228)
* Fix forwarded user agent in [9271](https://github.com/appwrite/appwrite/pull/9271)
* Fix WEBP File Preview Rendering Issue in [9321](https://github.com/appwrite/appwrite/pull/9321)
* Fix build memory specifications in [9360](https://github.com/appwrite/appwrite/pull/9360)
* Fix Self Hosting functions by adding missed config in [9373](https://github.com/appwrite/appwrite/pull/9373)
* Fix resend team invite if already accepted in [9348](https://github.com/appwrite/appwrite/pull/9348)
* Fix null errors on team invite in [9391](https://github.com/appwrite/appwrite/pull/9391)
* Fix email (smtp) to multiple recipients in [9243](https://github.com/appwrite/appwrite/pull/9243)
* Fix stats timing by using receivedAt date when available in [9428](https://github.com/appwrite/appwrite/pull/9428)
* Make min/max params optional for attribute update in [9387](https://github.com/appwrite/appwrite/pull/9387)
* Fix blocking of phone sessions when disabled on console in [9447](https://github.com/appwrite/appwrite/pull/9447)
* Fix logging config in [9467](https://github.com/appwrite/appwrite/pull/9467)
* Update audit timestamp origin in [9481](https://github.com/appwrite/appwrite/pull/9481)
* Fix certificates in deletes worker in [9466](https://github.com/appwrite/appwrite/pull/9466)
* Fix console audits delete in [9547](https://github.com/appwrite/appwrite/pull/9547)
* Fix migrations in [9633](https://github.com/appwrite/appwrite/pull/9633)
* Ensure all 4xx errors in OAuth redirect lead to the failure URL in [9679](https://github.com/appwrite/appwrite/pull/9679)
* Treat 0 as unlimited for CPUs and memory in [9638](https://github.com/appwrite/appwrite/pull/9638)
* Add contextual dispatch logic to fix high CPU usage in [9687](https://github.com/appwrite/appwrite/pull/9687)
* Remove failed attribute in [#9032](https://github.com/appwrite/appwrite/pull/9032)
* Fix delete notFound attribute in [#9038](https://github.com/appwrite/appwrite/pull/9038)
* 🇮🇸 Added missing Icelandic translations for email strings. in [#4848](https://github.com/appwrite/appwrite/pull/4848)
* fix doc comment for filter method in [#5769](https://github.com/appwrite/appwrite/pull/5769)
* Delete attribute No throwing Exception on not found in [#9157](https://github.com/appwrite/appwrite/pull/9157)
* Fix VCS identity collision in [#9138](https://github.com/appwrite/appwrite/pull/9138)
* Fix disabling of email-otp when user wants to in [#9200](https://github.com/appwrite/appwrite/pull/9200)
* Ensure user can delete session in [#9209](https://github.com/appwrite/appwrite/pull/9209)
* Fix resend invitation in [#9218](https://github.com/appwrite/appwrite/pull/9218)
* Fix phone number parsing exception handling in [#9246](https://github.com/appwrite/appwrite/pull/9246)
* Fix amazon oauth in [#9253](https://github.com/appwrite/appwrite/pull/9253)
* Fix slack oauth scopes, and updated to v2 in [#9228](https://github.com/appwrite/appwrite/pull/9228)
* Fix forwarded user agent in [#9271](https://github.com/appwrite/appwrite/pull/9271)
* Fix WEBP File Preview Rendering Issue in [#9321](https://github.com/appwrite/appwrite/pull/9321)
* Fix build memory specifications in [#9360](https://github.com/appwrite/appwrite/pull/9360)
* Fix Self Hosting functions by adding missed config in [#9373](https://github.com/appwrite/appwrite/pull/9373)
* Fix resend team invite if already accepted in [#9348](https://github.com/appwrite/appwrite/pull/9348)
* Fix null errors on team invite in [#9391](https://github.com/appwrite/appwrite/pull/9391)
* Fix email (smtp) to multiple recipients in [#9243](https://github.com/appwrite/appwrite/pull/9243)
* Fix stats timing by using receivedAt date when available in [#9428](https://github.com/appwrite/appwrite/pull/9428)
* Make min/max params optional for attribute update in [#9387](https://github.com/appwrite/appwrite/pull/9387)
* Fix blocking of phone sessions when disabled on console in [#9447](https://github.com/appwrite/appwrite/pull/9447)
* Fix logging config in [#9467](https://github.com/appwrite/appwrite/pull/9467)
* Update audit timestamp origin in [#9481](https://github.com/appwrite/appwrite/pull/9481)
* Fix certificates in deletes worker in [#9466](https://github.com/appwrite/appwrite/pull/9466)
* Fix console audits delete in [#9547](https://github.com/appwrite/appwrite/pull/9547)
* Fix migrations in [#9633](https://github.com/appwrite/appwrite/pull/9633)
* Ensure all 4xx errors in OAuth redirect lead to the failure URL in [#9679](https://github.com/appwrite/appwrite/pull/9679)
* Treat 0 as unlimited for CPUs and memory in [#9638](https://github.com/appwrite/appwrite/pull/9638)
* Add contextual dispatch logic to fix high CPU usage in [#9687](https://github.com/appwrite/appwrite/pull/9687)
### Miscellaneous
* Merge 1.6.x into feat-custom-cf-hostnames in [8904](https://github.com/appwrite/appwrite/pull/8904)
* Improve compression param checks in [8922](https://github.com/appwrite/appwrite/pull/8922)
* upgrade utopia storage in [8930](https://github.com/appwrite/appwrite/pull/8930)
* Feat migration in [8797](https://github.com/appwrite/appwrite/pull/8797)
* feat fix web routes in [8962](https://github.com/appwrite/appwrite/pull/8962)
* Fix no pool access in [9027](https://github.com/appwrite/appwrite/pull/9027)
* feat: use environment variable to check rules format in [9039](https://github.com/appwrite/appwrite/pull/9039)
* Update storage.php in [9037](https://github.com/appwrite/appwrite/pull/9037)
* Upgrade db 0.53.200 in [9050](https://github.com/appwrite/appwrite/pull/9050)
* Chore: upgrade utopia storage in [9066](https://github.com/appwrite/appwrite/pull/9066)
* Update usage-dump payload in [9085](https://github.com/appwrite/appwrite/pull/9085)
* GitHub Workflows security hardening in [3728](https://github.com/appwrite/appwrite/pull/3728)
* Update add-oauth2-provider.md in [4313](https://github.com/appwrite/appwrite/pull/4313)
* update readme-cn some doc in [5278](https://github.com/appwrite/appwrite/pull/5278)
* Add accessibility features in [7042](https://github.com/appwrite/appwrite/pull/7042)
* Add Appwrite Cloud to read me. in [5445](https://github.com/appwrite/appwrite/pull/5445)
* Migration throw error in [9092](https://github.com/appwrite/appwrite/pull/9092)
* Fix usage payload bug in [9097](https://github.com/appwrite/appwrite/pull/9097)
* chore: replace occurrences of dbForConsole to dbForPlatform in [9096](https://github.com/appwrite/appwrite/pull/9096)
* fix(realtime): decrement connectionCounter only if connection is known in [9055](https://github.com/appwrite/appwrite/pull/9055)
* payload bug fix in [9098](https://github.com/appwrite/appwrite/pull/9098)
* Fix usage payload bug in [9099](https://github.com/appwrite/appwrite/pull/9099)
* Usage payload debug in [9101](https://github.com/appwrite/appwrite/pull/9101)
* Usage payload debug in [9103](https://github.com/appwrite/appwrite/pull/9103)
* Usage payload debug in [9104](https://github.com/appwrite/appwrite/pull/9104)
* Feat: createFunction abuse labels in [9102](https://github.com/appwrite/appwrite/pull/9102)
* Docs-create-document in [9105](https://github.com/appwrite/appwrite/pull/9105)
* Docs: Create document and unknown attribute error messages. in [5427](https://github.com/appwrite/appwrite/pull/5427)
* Fix: update project accessed at from router and schedulers in [9109](https://github.com/appwrite/appwrite/pull/9109)
* chore: initial commit in [9111](https://github.com/appwrite/appwrite/pull/9111)
* chore: optimise webhooks payload in [9115](https://github.com/appwrite/appwrite/pull/9115)
* Revert "chore: initial commit" in [9117](https://github.com/appwrite/appwrite/pull/9117)
* chore: fix attribute name in [9118](https://github.com/appwrite/appwrite/pull/9118)
* Migrate to redis abuse in [9124](https://github.com/appwrite/appwrite/pull/9124)
* Added webhooks usage stats in [9125](https://github.com/appwrite/appwrite/pull/9125)
* chore remove abuse cleanup in [9137](https://github.com/appwrite/appwrite/pull/9137)
* fix: remove abuse delete trigger in [9139](https://github.com/appwrite/appwrite/pull/9139)
* Remove firebase OAuth API endpoints in [9144](https://github.com/appwrite/appwrite/pull/9144)
* chore: release client sdks in [9112](https://github.com/appwrite/appwrite/pull/9112)
* Update general.php in [9155](https://github.com/appwrite/appwrite/pull/9155)
* feat(swoole): allow configuration override of available cpus in [9177](https://github.com/appwrite/appwrite/pull/9177)
* Usage databases api read writes addition in [9142](https://github.com/appwrite/appwrite/pull/9142)
* Fix dead connections in [9190](https://github.com/appwrite/appwrite/pull/9190)
* Add hostname to audits in [9165](https://github.com/appwrite/appwrite/pull/9165)
* chore: shifted authphone usage tracking to api calls in [9191](https://github.com/appwrite/appwrite/pull/9191)
* Revert "Fix dead connections" in [9201](https://github.com/appwrite/appwrite/pull/9201)
* Add assertEventually to messaging provider logs test in [9192](https://github.com/appwrite/appwrite/pull/9192)
* feat project sms usage in [9198](https://github.com/appwrite/appwrite/pull/9198)
* chore: add audit labels to project resources in [9056](https://github.com/appwrite/appwrite/pull/9056)
* fix sms usage in [9207](https://github.com/appwrite/appwrite/pull/9207)
* Update database in [9202](https://github.com/appwrite/appwrite/pull/9202)
* Fix dead connections in [9213](https://github.com/appwrite/appwrite/pull/9213)
* Revert "Fix dead connections" in [9214](https://github.com/appwrite/appwrite/pull/9214)
* Add logs db init for consistency in [9163](https://github.com/appwrite/appwrite/pull/9163)
* Split the collection definitions in [9153](https://github.com/appwrite/appwrite/pull/9153)
* Log path with populated parameters in [9220](https://github.com/appwrite/appwrite/pull/9220)
* Add missing scope on function template in [9208](https://github.com/appwrite/appwrite/pull/9208)
* Add relatedCollection default in [9225](https://github.com/appwrite/appwrite/pull/9225)
* fix: function usage in [9235](https://github.com/appwrite/appwrite/pull/9235)
* feat: optimise events payloads in [9232](https://github.com/appwrite/appwrite/pull/9232)
* Optimise webhook events in [9168](https://github.com/appwrite/appwrite/pull/9168)
* fix: maintenance job missing type in [9238](https://github.com/appwrite/appwrite/pull/9238)
* Update Fetch to 0.3.0 in [9245](https://github.com/appwrite/appwrite/pull/9245)
* Fix maintenance job in [9247](https://github.com/appwrite/appwrite/pull/9247)
* chore: add missing case for executions in [9248](https://github.com/appwrite/appwrite/pull/9248)
* Add index dependency exception in [9226](https://github.com/appwrite/appwrite/pull/9226)
* chore: fix benchmarking test when made from fork in [9233](https://github.com/appwrite/appwrite/pull/9233)
* Update SDK Generator versions in [9188](https://github.com/appwrite/appwrite/pull/9188)
* chore: skipped job instead of throwing error in [9250](https://github.com/appwrite/appwrite/pull/9250)
* Implement new SDK Class on 1.6.x in [9237](https://github.com/appwrite/appwrite/pull/9237)
* Delete collection before Appwrite's attributes in [9256](https://github.com/appwrite/appwrite/pull/9256)
* Feat batch usage dump in [9255](https://github.com/appwrite/appwrite/pull/9255)
* Fix cloud tests in [9261](https://github.com/appwrite/appwrite/pull/9261)
* Usage: Databases reads writes in [9260](https://github.com/appwrite/appwrite/pull/9260)
* Update: Latest sdk specs in [9274](https://github.com/appwrite/appwrite/pull/9274)
* Revert "Feat batch usage dump" in [9276](https://github.com/appwrite/appwrite/pull/9276)
* feat: add fast2SMS adapter in [9263](https://github.com/appwrite/appwrite/pull/9263)
* Update Sdk Generator dependency in [9280](https://github.com/appwrite/appwrite/pull/9280)
* Transformed at addition in [9281](https://github.com/appwrite/appwrite/pull/9281)
* Docs: clarify update endpoints only work on draft messages in [9236](https://github.com/appwrite/appwrite/pull/9236)
* Update sdk generator dependency in [9282](https://github.com/appwrite/appwrite/pull/9282)
* Revert "Transformed at addition" in [9284](https://github.com/appwrite/appwrite/pull/9284)
* replaced init for cloud link in [9285](https://github.com/appwrite/appwrite/pull/9285)
* Add transformed at in [9289](https://github.com/appwrite/appwrite/pull/9289)
* Make migrations use Dynamic keys for destination in [9291](https://github.com/appwrite/appwrite/pull/9291)
* Make sessions limit tests assert eventually in [9298](https://github.com/appwrite/appwrite/pull/9298)
* Chore update database in [9306](https://github.com/appwrite/appwrite/pull/9306)
* feat: add AMQP queues in [9287](https://github.com/appwrite/appwrite/pull/9287)
* fix(test): use assertEventually instead of while(true) in [9308](https://github.com/appwrite/appwrite/pull/9308)
* fix(certificate worker): events are published without queue name in [9309](https://github.com/appwrite/appwrite/pull/9309)
* chore: update utopia-php/queue to 0.8.1 in [9311](https://github.com/appwrite/appwrite/pull/9311)
* chore: update utopia-php/queue to 0.8.2 in [9312](https://github.com/appwrite/appwrite/pull/9312)
* fix(schedule-tasks): revert back to direct pool usage in [9313](https://github.com/appwrite/appwrite/pull/9313)
* feat: custom app schemes in [9262](https://github.com/appwrite/appwrite/pull/9262)
* Revert "feat: custom app schemes" in [9319](https://github.com/appwrite/appwrite/pull/9319)
* Restore "feat: custom app schemes"" in [9320](https://github.com/appwrite/appwrite/pull/9320)
* Revert "Restore "feat: custom app schemes""" in [9323](https://github.com/appwrite/appwrite/pull/9323)
* chore: update dependencies in [9330](https://github.com/appwrite/appwrite/pull/9330)
* Feat: logs DB in [9272](https://github.com/appwrite/appwrite/pull/9272)
* Catch invalid index in [9329](https://github.com/appwrite/appwrite/pull/9329)
* Fix: missing call for image transformations counting in [9342](https://github.com/appwrite/appwrite/pull/9342)
* Fix drop abuse on shared table project delete in [9346](https://github.com/appwrite/appwrite/pull/9346)
* Only run all table mode tests on db update in [9338](https://github.com/appwrite/appwrite/pull/9338)
* Fix: missing periodic metric in [9350](https://github.com/appwrite/appwrite/pull/9350)
* feat(builds): check if function is blocked before building in [9332](https://github.com/appwrite/appwrite/pull/9332)
* feat: batch create audit logs in [9347](https://github.com/appwrite/appwrite/pull/9347)
* Chore: Update migrations in [9355](https://github.com/appwrite/appwrite/pull/9355)
* Fix: metric time was not being written to DB in [9354](https://github.com/appwrite/appwrite/pull/9354)
* Fix patch index validation in [9356](https://github.com/appwrite/appwrite/pull/9356)
* Fix image trnasformation metrics in [9370](https://github.com/appwrite/appwrite/pull/9370)
* Use batch delete in worker in [9375](https://github.com/appwrite/appwrite/pull/9375)
* Fix Model Platform is missing response key: store in [9361](https://github.com/appwrite/appwrite/pull/9361)
* Feat key segmented usage in [9336](https://github.com/appwrite/appwrite/pull/9336)
* Feat messaging metrics in [9353](https://github.com/appwrite/appwrite/pull/9353)
* Fix removed audits for shared v2 in [9388](https://github.com/appwrite/appwrite/pull/9388)
* chore: bump utopia-php/image to 0.8.0 in [9390](https://github.com/appwrite/appwrite/pull/9390)
* Fix outdated CLI commands in documentation in [9122](https://github.com/appwrite/appwrite/pull/9122)
* disable logs display in [9398](https://github.com/appwrite/appwrite/pull/9398)
* Log batches per project in [9403](https://github.com/appwrite/appwrite/pull/9403)
* Batch per project in [9410](https://github.com/appwrite/appwrite/pull/9410)
* Fix: stats resources only queue projects accessed in last 3 hours in [9411](https://github.com/appwrite/appwrite/pull/9411)
* Track options requests in [9397](https://github.com/appwrite/appwrite/pull/9397)
* chore: bump docker-base in [9406](https://github.com/appwrite/appwrite/pull/9406)
* refactor: migrate Realtime::send calls to queueForRealtime in [9325](https://github.com/appwrite/appwrite/pull/9325)
* Revert "Fix: stats resources only queue projects accessed in last 3 hours" in [9424](https://github.com/appwrite/appwrite/pull/9424)
* Remove usage and usage dump in favor of stats-usage and stats-usage-dump in [9339](https://github.com/appwrite/appwrite/pull/9339)
* Fix: disable dual writing in [9429](https://github.com/appwrite/appwrite/pull/9429)
* Disable transformedAt update for console users in [9425](https://github.com/appwrite/appwrite/pull/9425)
* chore: add image transformation stats to usage endpoint in [9393](https://github.com/appwrite/appwrite/pull/9393)
* chore: added timeout to deployment builds in tests in [9426](https://github.com/appwrite/appwrite/pull/9426)
* fix: model for image transformations in usage project in [9442](https://github.com/appwrite/appwrite/pull/9442)
* Feat: calculate database storage in stats-resources in [9443](https://github.com/appwrite/appwrite/pull/9443)
* Activities batch writes in [9438](https://github.com/appwrite/appwrite/pull/9438)
* chore: bump cache 0.12.x in [9412](https://github.com/appwrite/appwrite/pull/9412)
* chore: queue console project for maintenance delete in [9479](https://github.com/appwrite/appwrite/pull/9479)
* chore: added logsdb for deletes worker in [9462](https://github.com/appwrite/appwrite/pull/9462)
* Feat: calculate and log time taken for each project in [9491](https://github.com/appwrite/appwrite/pull/9491)
* chore: update initializing dbForLogs in [9494](https://github.com/appwrite/appwrite/pull/9494)
* Feat bulk audit delete in [9487](https://github.com/appwrite/appwrite/pull/9487)
* Prepare 1.6.2 release in [9499](https://github.com/appwrite/appwrite/pull/9499)
* Regenerate specs in [9497](https://github.com/appwrite/appwrite/pull/9497)
* Regenerate examples in [9498](https://github.com/appwrite/appwrite/pull/9498)
* chore: bump sdk in [9414](https://github.com/appwrite/appwrite/pull/9414)
* update queue to 0.9.* in [9505](https://github.com/appwrite/appwrite/pull/9505)
* Feat improve delete queries in [9507](https://github.com/appwrite/appwrite/pull/9507)
* Feat: Add rule attributes in [9508](https://github.com/appwrite/appwrite/pull/9508)
* Sync main into 1.6.x in [9496](https://github.com/appwrite/appwrite/pull/9496)
* Bump console to version 5.2.53 in [9495](https://github.com/appwrite/appwrite/pull/9495)
* Prepare 1.6.1 release in [9294](https://github.com/appwrite/appwrite/pull/9294)
* Improve delete ordering in [9512](https://github.com/appwrite/appwrite/pull/9512)
* Cleanups in [9511](https://github.com/appwrite/appwrite/pull/9511)
* Feat dynamic regions in [9408](https://github.com/appwrite/appwrite/pull/9408)
* Feat env vars to system lib in [9515](https://github.com/appwrite/appwrite/pull/9515)
* Feat: domains count in [9514](https://github.com/appwrite/appwrite/pull/9514)
* Migration read from db in [9529](https://github.com/appwrite/appwrite/pull/9529)
* feat: add pool telemetry in [9530](https://github.com/appwrite/appwrite/pull/9530)
* Disable PDO persistence since we manage our own pool in [9526](https://github.com/appwrite/appwrite/pull/9526)
* chore: set min operations to 1 for reads and writes in [9536](https://github.com/appwrite/appwrite/pull/9536)
* Remove default region in [9430](https://github.com/appwrite/appwrite/pull/9430)
* Use cursor pagination with bigger limit for maintenance project loop in [9546](https://github.com/appwrite/appwrite/pull/9546)
* chore: stop tests on failure in [9525](https://github.com/appwrite/appwrite/pull/9525)
* chore: only update total count for privileged users in [9554](https://github.com/appwrite/appwrite/pull/9554)
* refactor: initialization of audit retention in [9563](https://github.com/appwrite/appwrite/pull/9563)
* Delete worker queries fixes in [9523](https://github.com/appwrite/appwrite/pull/9523)
* Bump database 0.62.x in [9568](https://github.com/appwrite/appwrite/pull/9568)
* Fix: schedules region filtering in [9577](https://github.com/appwrite/appwrite/pull/9577)
* Deletes worker fix selects for pagination in [9578](https://github.com/appwrite/appwrite/pull/9578)
* Add $permissions for delete documents selects in [9579](https://github.com/appwrite/appwrite/pull/9579)
* chore(audits): return queue pre-fetch results in [9533](https://github.com/appwrite/appwrite/pull/9533)
* Revert "chore(audits): return queue pre-fetch results" in [9586](https://github.com/appwrite/appwrite/pull/9586)
* Feat multi tenant insert in [9573](https://github.com/appwrite/appwrite/pull/9573)
* Add order by for cursor in [9588](https://github.com/appwrite/appwrite/pull/9588)
* Feat update fetch in [9592](https://github.com/appwrite/appwrite/pull/9592)
* Fix tenant casting in [9598](https://github.com/appwrite/appwrite/pull/9598)
* Feat update ws in [9602](https://github.com/appwrite/appwrite/pull/9602)
* Update database in [9603](https://github.com/appwrite/appwrite/pull/9603)
* Fix: image transformation cache in [9608](https://github.com/appwrite/appwrite/pull/9608)
* Remove audit payload in [9610](https://github.com/appwrite/appwrite/pull/9610)
* Sample rate from DSN in [9559](https://github.com/appwrite/appwrite/pull/9559)
* Restrict role change for sole org owner in [9615](https://github.com/appwrite/appwrite/pull/9615)
* chore: update php image to 0.8.1 in [9616](https://github.com/appwrite/appwrite/pull/9616)
* feat: refactor executor setup in [9420](https://github.com/appwrite/appwrite/pull/9420)
* chore: update gitpod.yml config in [9561](https://github.com/appwrite/appwrite/pull/9561)
* chore: update dependencies in [9625](https://github.com/appwrite/appwrite/pull/9625)
* Update migrations lib in [9628](https://github.com/appwrite/appwrite/pull/9628)
* feat: cache telemetry in [9624](https://github.com/appwrite/appwrite/pull/9624)
* Bump console to version 5.2.56 in [9631](https://github.com/appwrite/appwrite/pull/9631)
* Multi region support in [8667](https://github.com/appwrite/appwrite/pull/8667)
* Revert "Multi region support" in [9632](https://github.com/appwrite/appwrite/pull/9632)
* Revert "Revert "Multi region support"" in [9636](https://github.com/appwrite/appwrite/pull/9636)
* Fix tasks in [9644](https://github.com/appwrite/appwrite/pull/9644)
* chore: updated the migration version to 8.6 in [9646](https://github.com/appwrite/appwrite/pull/9646)
* Fix: merge the working of StatsUsage and StatsUsageDump in [9585](https://github.com/appwrite/appwrite/pull/9585)
* Update database in [9643](https://github.com/appwrite/appwrite/pull/9643)
* chore: fix error logging for CLI tasks in [9651](https://github.com/appwrite/appwrite/pull/9651)
* fix: usage test assertion in [9653](https://github.com/appwrite/appwrite/pull/9653)
* Fix keys in [9656](https://github.com/appwrite/appwrite/pull/9656)
* Feat: multi tenant dual writing in [9583](https://github.com/appwrite/appwrite/pull/9583)
* Fix/throwing 400 for null order attributes in [9657](https://github.com/appwrite/appwrite/pull/9657)
* feat: sdk group attribute in [9596](https://github.com/appwrite/appwrite/pull/9596)
* Add configurable function and build size in [9648](https://github.com/appwrite/appwrite/pull/9648)
* feat: update API endpoint in the code examples in [8933](https://github.com/appwrite/appwrite/pull/8933)
* chore: abstract token secret hiding to response model in [9574](https://github.com/appwrite/appwrite/pull/9574)
* chore: update sdks in [9655](https://github.com/appwrite/appwrite/pull/9655)
* feat: allow non-critical events to ignore exceptions when enqueuing the event in [9680](https://github.com/appwrite/appwrite/pull/9680)
* Revert "Add configurable function and build size" in [9681](https://github.com/appwrite/appwrite/pull/9681)
* core: introduce endpoint.docs in specs in [9685](https://github.com/appwrite/appwrite/pull/9685)
* fix: remove content-type header from get request specs in [9666](https://github.com/appwrite/appwrite/pull/9666)
* chore: update flutter sdk in [9691](https://github.com/appwrite/appwrite/pull/9691)
* Merge 1.6.x into feat-custom-cf-hostnames in [#8904](https://github.com/appwrite/appwrite/pull/8904)
* Improve compression param checks in [#8922](https://github.com/appwrite/appwrite/pull/8922)
* upgrade utopia storage in [#8930](https://github.com/appwrite/appwrite/pull/8930)
* Feat migration in [#8797](https://github.com/appwrite/appwrite/pull/8797)
* feat fix web routes in [#8962](https://github.com/appwrite/appwrite/pull/8962)
* Fix no pool access in [#9027](https://github.com/appwrite/appwrite/pull/9027)
* feat: use environment variable to check rules format in [#9039](https://github.com/appwrite/appwrite/pull/9039)
* Update storage.php in [#9037](https://github.com/appwrite/appwrite/pull/9037)
* Upgrade db 0.53.200 in [#9050](https://github.com/appwrite/appwrite/pull/9050)
* Chore: upgrade utopia storage in [#9066](https://github.com/appwrite/appwrite/pull/9066)
* Update usage-dump payload in [#9085](https://github.com/appwrite/appwrite/pull/9085)
* GitHub Workflows security hardening in [#3728](https://github.com/appwrite/appwrite/pull/3728)
* Update add-oauth2-provider.md in [#4313](https://github.com/appwrite/appwrite/pull/4313)
* update readme-cn some doc in [#5278](https://github.com/appwrite/appwrite/pull/5278)
* Add accessibility features in [#7042](https://github.com/appwrite/appwrite/pull/7042)
* Add Appwrite Cloud to read me. in [#5445](https://github.com/appwrite/appwrite/pull/5445)
* Migration throw error in [#9092](https://github.com/appwrite/appwrite/pull/9092)
* Fix usage payload bug in [#9097](https://github.com/appwrite/appwrite/pull/9097)
* chore: replace occurrences of dbForConsole to dbForPlatform in [#9096](https://github.com/appwrite/appwrite/pull/9096)
* fix(realtime): decrement connectionCounter only if connection is known in [#9055](https://github.com/appwrite/appwrite/pull/9055)
* payload bug fix in [#9098](https://github.com/appwrite/appwrite/pull/9098)
* Fix usage payload bug in [#9099](https://github.com/appwrite/appwrite/pull/9099)
* Usage payload debug in [#9101](https://github.com/appwrite/appwrite/pull/9101)
* Usage payload debug in [#9103](https://github.com/appwrite/appwrite/pull/9103)
* Usage payload debug in [#9104](https://github.com/appwrite/appwrite/pull/9104)
* Feat: createFunction abuse labels in [#9102](https://github.com/appwrite/appwrite/pull/9102)
* Docs-create-document in [#9105](https://github.com/appwrite/appwrite/pull/9105)
* Docs: Create document and unknown attribute error messages. in [#5427](https://github.com/appwrite/appwrite/pull/5427)
* Fix: update project accessed at from router and schedulers in [#9109](https://github.com/appwrite/appwrite/pull/9109)
* chore: initial commit in [#9111](https://github.com/appwrite/appwrite/pull/9111)
* chore: optimise webhooks payload in [#9115](https://github.com/appwrite/appwrite/pull/9115)
* Revert "chore: initial commit" in [#9117](https://github.com/appwrite/appwrite/pull/9117)
* chore: fix attribute name in [#9118](https://github.com/appwrite/appwrite/pull/9118)
* Migrate to redis abuse in [#9124](https://github.com/appwrite/appwrite/pull/9124)
* Added webhooks usage stats in [#9125](https://github.com/appwrite/appwrite/pull/9125)
* chore remove abuse cleanup in [#9137](https://github.com/appwrite/appwrite/pull/9137)
* fix: remove abuse delete trigger in [#9139](https://github.com/appwrite/appwrite/pull/9139)
* Remove firebase OAuth API endpoints in [#9144](https://github.com/appwrite/appwrite/pull/9144)
* chore: release client sdks in [#9112](https://github.com/appwrite/appwrite/pull/9112)
* Update general.php in [#9155](https://github.com/appwrite/appwrite/pull/9155)
* feat(swoole): allow configuration override of available cpus in [#9177](https://github.com/appwrite/appwrite/pull/9177)
* Usage databases api read writes addition in [#9142](https://github.com/appwrite/appwrite/pull/9142)
* Fix dead connections in [#9190](https://github.com/appwrite/appwrite/pull/9190)
* Add hostname to audits in [#9165](https://github.com/appwrite/appwrite/pull/9165)
* chore: shifted authphone usage tracking to api calls in [#9191](https://github.com/appwrite/appwrite/pull/9191)
* Revert "Fix dead connections" in [#9201](https://github.com/appwrite/appwrite/pull/9201)
* Add assertEventually to messaging provider logs test in [#9192](https://github.com/appwrite/appwrite/pull/9192)
* feat project sms usage in [#9198](https://github.com/appwrite/appwrite/pull/9198)
* chore: add audit labels to project resources in [#9056](https://github.com/appwrite/appwrite/pull/9056)
* fix sms usage in [#9207](https://github.com/appwrite/appwrite/pull/9207)
* Update database in [#9202](https://github.com/appwrite/appwrite/pull/9202)
* Fix dead connections in [#9213](https://github.com/appwrite/appwrite/pull/9213)
* Revert "Fix dead connections" in [#9214](https://github.com/appwrite/appwrite/pull/9214)
* Add logs db init for consistency in [#9163](https://github.com/appwrite/appwrite/pull/9163)
* Split the collection definitions in [#9153](https://github.com/appwrite/appwrite/pull/9153)
* Log path with populated parameters in [#9220](https://github.com/appwrite/appwrite/pull/9220)
* Add missing scope on function template in [#9208](https://github.com/appwrite/appwrite/pull/9208)
* Add relatedCollection default in [#9225](https://github.com/appwrite/appwrite/pull/9225)
* fix: function usage in [#9235](https://github.com/appwrite/appwrite/pull/9235)
* feat: optimise events payloads in [#9232](https://github.com/appwrite/appwrite/pull/9232)
* Optimise webhook events in [#9168](https://github.com/appwrite/appwrite/pull/9168)
* fix: maintenance job missing type in [#9238](https://github.com/appwrite/appwrite/pull/9238)
* Update Fetch to 0.3.0 in [#9245](https://github.com/appwrite/appwrite/pull/9245)
* Fix maintenance job in [#9247](https://github.com/appwrite/appwrite/pull/9247)
* chore: add missing case for executions in [#9248](https://github.com/appwrite/appwrite/pull/9248)
* Add index dependency exception in [#9226](https://github.com/appwrite/appwrite/pull/9226)
* chore: fix benchmarking test when made from fork in [#9233](https://github.com/appwrite/appwrite/pull/9233)
* Update SDK Generator versions in [#9188](https://github.com/appwrite/appwrite/pull/9188)
* chore: skipped job instead of throwing error in [#9250](https://github.com/appwrite/appwrite/pull/9250)
* Implement new SDK Class on 1.6.x in [#9237](https://github.com/appwrite/appwrite/pull/9237)
* Delete collection before Appwrite's attributes in [#9256](https://github.com/appwrite/appwrite/pull/9256)
* Feat batch usage dump in [#9255](https://github.com/appwrite/appwrite/pull/9255)
* Fix cloud tests in [#9261](https://github.com/appwrite/appwrite/pull/9261)
* Usage: Databases reads writes in [#9260](https://github.com/appwrite/appwrite/pull/9260)
* Update: Latest sdk specs in [#9274](https://github.com/appwrite/appwrite/pull/9274)
* Revert "Feat batch usage dump" in [#9276](https://github.com/appwrite/appwrite/pull/9276)
* feat: add fast2SMS adapter in [#9263](https://github.com/appwrite/appwrite/pull/9263)
* Update Sdk Generator dependency in [#9280](https://github.com/appwrite/appwrite/pull/9280)
* Transformed at addition in [#9281](https://github.com/appwrite/appwrite/pull/9281)
* Docs: clarify update endpoints only work on draft messages in [#9236](https://github.com/appwrite/appwrite/pull/9236)
* Update sdk generator dependency in [#9282](https://github.com/appwrite/appwrite/pull/9282)
* Revert "Transformed at addition" in [#9284](https://github.com/appwrite/appwrite/pull/9284)
* replaced init for cloud link in [#9285](https://github.com/appwrite/appwrite/pull/9285)
* Add transformed at in [#9289](https://github.com/appwrite/appwrite/pull/9289)
* Make migrations use Dynamic keys for destination in [#9291](https://github.com/appwrite/appwrite/pull/9291)
* Make sessions limit tests assert eventually in [#9298](https://github.com/appwrite/appwrite/pull/9298)
* Chore update database in [#9306](https://github.com/appwrite/appwrite/pull/9306)
* feat: add AMQP queues in [#9287](https://github.com/appwrite/appwrite/pull/9287)
* fix(test): use assertEventually instead of while(true) in [#9308](https://github.com/appwrite/appwrite/pull/9308)
* fix(certificate worker): events are published without queue name in [#9309](https://github.com/appwrite/appwrite/pull/9309)
* chore: update utopia-php/queue to 0.8.1 in [#9311](https://github.com/appwrite/appwrite/pull/9311)
* chore: update utopia-php/queue to 0.8.2 in [#9312](https://github.com/appwrite/appwrite/pull/9312)
* fix(schedule-tasks): revert back to direct pool usage in [#9313](https://github.com/appwrite/appwrite/pull/9313)
* feat: custom app schemes in [#9262](https://github.com/appwrite/appwrite/pull/9262)
* Revert "feat: custom app schemes" in [#9319](https://github.com/appwrite/appwrite/pull/9319)
* Restore "feat: custom app schemes"" in [#9320](https://github.com/appwrite/appwrite/pull/9320)
* Revert "Restore "feat: custom app schemes""" in [#9323](https://github.com/appwrite/appwrite/pull/9323)
* chore: update dependencies in [#9330](https://github.com/appwrite/appwrite/pull/9330)
* Feat: logs DB in [#9272](https://github.com/appwrite/appwrite/pull/9272)
* Catch invalid index in [#9329](https://github.com/appwrite/appwrite/pull/9329)
* Fix: missing call for image transformations counting in [#9342](https://github.com/appwrite/appwrite/pull/9342)
* Fix drop abuse on shared table project delete in [#9346](https://github.com/appwrite/appwrite/pull/9346)
* Only run all table mode tests on db update in [#9338](https://github.com/appwrite/appwrite/pull/9338)
* Fix: missing periodic metric in [#9350](https://github.com/appwrite/appwrite/pull/9350)
* feat(builds): check if function is blocked before building in [#9332](https://github.com/appwrite/appwrite/pull/9332)
* feat: batch create audit logs in [#9347](https://github.com/appwrite/appwrite/pull/9347)
* Chore: Update migrations in [#9355](https://github.com/appwrite/appwrite/pull/9355)
* Fix: metric time was not being written to DB in [#9354](https://github.com/appwrite/appwrite/pull/9354)
* Fix patch index validation in [#9356](https://github.com/appwrite/appwrite/pull/9356)
* Fix image trnasformation metrics in [#9370](https://github.com/appwrite/appwrite/pull/9370)
* Use batch delete in worker in [#9375](https://github.com/appwrite/appwrite/pull/9375)
* Fix Model Platform is missing response key: store in [#9361](https://github.com/appwrite/appwrite/pull/9361)
* Feat key segmented usage in [#9336](https://github.com/appwrite/appwrite/pull/9336)
* Feat messaging metrics in [#9353](https://github.com/appwrite/appwrite/pull/9353)
* Fix removed audits for shared v2 in [#9388](https://github.com/appwrite/appwrite/pull/9388)
* chore: bump utopia-php/image to 0.8.0 in [#9390](https://github.com/appwrite/appwrite/pull/9390)
* Fix outdated CLI commands in documentation in [#9122](https://github.com/appwrite/appwrite/pull/9122)
* disable logs display in [#9398](https://github.com/appwrite/appwrite/pull/9398)
* Log batches per project in [#9403](https://github.com/appwrite/appwrite/pull/9403)
* Batch per project in [#9410](https://github.com/appwrite/appwrite/pull/9410)
* Fix: stats resources only queue projects accessed in last 3 hours in [#9411](https://github.com/appwrite/appwrite/pull/9411)
* Track options requests in [#9397](https://github.com/appwrite/appwrite/pull/9397)
* chore: bump docker-base in [#9406](https://github.com/appwrite/appwrite/pull/9406)
* refactor: migrate Realtime::send calls to queueForRealtime in [#9325](https://github.com/appwrite/appwrite/pull/9325)
* Revert "Fix: stats resources only queue projects accessed in last 3 hours" in [#9424](https://github.com/appwrite/appwrite/pull/9424)
* Remove usage and usage dump in favor of stats-usage and stats-usage-dump in [#9339](https://github.com/appwrite/appwrite/pull/9339)
* Fix: disable dual writing in [#9429](https://github.com/appwrite/appwrite/pull/9429)
* Disable transformedAt update for console users in [#9425](https://github.com/appwrite/appwrite/pull/9425)
* chore: add image transformation stats to usage endpoint in [#9393](https://github.com/appwrite/appwrite/pull/9393)
* chore: added timeout to deployment builds in tests in [#9426](https://github.com/appwrite/appwrite/pull/9426)
* fix: model for image transformations in usage project in [#9442](https://github.com/appwrite/appwrite/pull/9442)
* Feat: calculate database storage in stats-resources in [#9443](https://github.com/appwrite/appwrite/pull/9443)
* Activities batch writes in [#9438](https://github.com/appwrite/appwrite/pull/9438)
* chore: bump cache 0.12.x in [#9412](https://github.com/appwrite/appwrite/pull/9412)
* chore: queue console project for maintenance delete in [#9479](https://github.com/appwrite/appwrite/pull/9479)
* chore: added logsdb for deletes worker in [#9462](https://github.com/appwrite/appwrite/pull/9462)
* Feat: calculate and log time taken for each project in [#9491](https://github.com/appwrite/appwrite/pull/9491)
* chore: update initializing dbForLogs in [#9494](https://github.com/appwrite/appwrite/pull/9494)
* Feat bulk audit delete in [#9487](https://github.com/appwrite/appwrite/pull/9487)
* Prepare 1.6.2 release in [#9499](https://github.com/appwrite/appwrite/pull/9499)
* Regenerate specs in [#9497](https://github.com/appwrite/appwrite/pull/9497)
* Regenerate examples in [#9498](https://github.com/appwrite/appwrite/pull/9498)
* chore: bump sdk in [#9414](https://github.com/appwrite/appwrite/pull/9414)
* update queue to 0.9.* in [#9505](https://github.com/appwrite/appwrite/pull/9505)
* Feat improve delete queries in [#9507](https://github.com/appwrite/appwrite/pull/9507)
* Feat: Add rule attributes in [#9508](https://github.com/appwrite/appwrite/pull/9508)
* Sync main into 1.6.x in [#9496](https://github.com/appwrite/appwrite/pull/9496)
* Bump console to version 5.2.53 in [#9495](https://github.com/appwrite/appwrite/pull/9495)
* Prepare 1.6.1 release in [#9294](https://github.com/appwrite/appwrite/pull/9294)
* Improve delete ordering in [#9512](https://github.com/appwrite/appwrite/pull/9512)
* Cleanups in [#9511](https://github.com/appwrite/appwrite/pull/9511)
* Feat dynamic regions in [#9408](https://github.com/appwrite/appwrite/pull/9408)
* Feat env vars to system lib in [#9515](https://github.com/appwrite/appwrite/pull/9515)
* Feat: domains count in [#9514](https://github.com/appwrite/appwrite/pull/9514)
* Migration read from db in [#9529](https://github.com/appwrite/appwrite/pull/9529)
* feat: add pool telemetry in [#9530](https://github.com/appwrite/appwrite/pull/9530)
* Disable PDO persistence since we manage our own pool in [#9526](https://github.com/appwrite/appwrite/pull/9526)
* chore: set min operations to 1 for reads and writes in [#9536](https://github.com/appwrite/appwrite/pull/9536)
* Remove default region in [#9430](https://github.com/appwrite/appwrite/pull/9430)
* Use cursor pagination with bigger limit for maintenance project loop in [#9546](https://github.com/appwrite/appwrite/pull/9546)
* chore: stop tests on failure in [#9525](https://github.com/appwrite/appwrite/pull/9525)
* chore: only update total count for privileged users in [#9554](https://github.com/appwrite/appwrite/pull/9554)
* refactor: initialization of audit retention in [#9563](https://github.com/appwrite/appwrite/pull/9563)
* Delete worker queries fixes in [#9523](https://github.com/appwrite/appwrite/pull/9523)
* Bump database 0.62.x in [#9568](https://github.com/appwrite/appwrite/pull/9568)
* Fix: schedules region filtering in [#9577](https://github.com/appwrite/appwrite/pull/9577)
* Deletes worker fix selects for pagination in [#9578](https://github.com/appwrite/appwrite/pull/9578)
* Add $permissions for delete documents selects in [#9579](https://github.com/appwrite/appwrite/pull/9579)
* chore(audits): return queue pre-fetch results in [#9533](https://github.com/appwrite/appwrite/pull/9533)
* Revert "chore(audits): return queue pre-fetch results" in [#9586](https://github.com/appwrite/appwrite/pull/9586)
* Feat multi tenant insert in [#9573](https://github.com/appwrite/appwrite/pull/9573)
* Add order by for cursor in [#9588](https://github.com/appwrite/appwrite/pull/9588)
* Feat update fetch in [#9592](https://github.com/appwrite/appwrite/pull/9592)
* Fix tenant casting in [#9598](https://github.com/appwrite/appwrite/pull/9598)
* Feat update ws in [#9602](https://github.com/appwrite/appwrite/pull/9602)
* Update database in [#9603](https://github.com/appwrite/appwrite/pull/9603)
* Fix: image transformation cache in [#9608](https://github.com/appwrite/appwrite/pull/9608)
* Remove audit payload in [#9610](https://github.com/appwrite/appwrite/pull/9610)
* Sample rate from DSN in [#9559](https://github.com/appwrite/appwrite/pull/9559)
* Restrict role change for sole org owner in [#9615](https://github.com/appwrite/appwrite/pull/9615)
* chore: update php image to 0.8.1 in [#9616](https://github.com/appwrite/appwrite/pull/9616)
* feat: refactor executor setup in [#9420](https://github.com/appwrite/appwrite/pull/9420)
* chore: update gitpod.yml config in [#9561](https://github.com/appwrite/appwrite/pull/9561)
* chore: update dependencies in [#9625](https://github.com/appwrite/appwrite/pull/9625)
* Update migrations lib in [#9628](https://github.com/appwrite/appwrite/pull/9628)
* feat: cache telemetry in [#9624](https://github.com/appwrite/appwrite/pull/9624)
* Bump console to version 5.2.56 in [#9631](https://github.com/appwrite/appwrite/pull/9631)
* Multi region support in [#8667](https://github.com/appwrite/appwrite/pull/8667)
* Revert "Multi region support" in [#9632](https://github.com/appwrite/appwrite/pull/9632)
* Revert "Revert "Multi region support"" in [#9636](https://github.com/appwrite/appwrite/pull/9636)
* Fix tasks in [#9644](https://github.com/appwrite/appwrite/pull/9644)
* chore: updated the migration version to 8.6 in [#9646](https://github.com/appwrite/appwrite/pull/9646)
* Fix: merge the working of StatsUsage and StatsUsageDump in [#9585](https://github.com/appwrite/appwrite/pull/9585)
* Update database in [#9643](https://github.com/appwrite/appwrite/pull/9643)
* chore: fix error logging for CLI tasks in [#9651](https://github.com/appwrite/appwrite/pull/9651)
* fix: usage test assertion in [#9653](https://github.com/appwrite/appwrite/pull/9653)
* Fix keys in [#9656](https://github.com/appwrite/appwrite/pull/9656)
* Feat: multi tenant dual writing in [#9583](https://github.com/appwrite/appwrite/pull/9583)
* Fix/throwing 400 for null order attributes in [#9657](https://github.com/appwrite/appwrite/pull/9657)
* feat: sdk group attribute in [#9596](https://github.com/appwrite/appwrite/pull/9596)
* Add configurable function and build size in [#9648](https://github.com/appwrite/appwrite/pull/9648)
* feat: update API endpoint in the code examples in [#8933](https://github.com/appwrite/appwrite/pull/8933)
* chore: abstract token secret hiding to response model in [#9574](https://github.com/appwrite/appwrite/pull/9574)
* chore: update sdks in [#9655](https://github.com/appwrite/appwrite/pull/9655)
* feat: allow non-critical events to ignore exceptions when enqueuing the event in [#9680](https://github.com/appwrite/appwrite/pull/9680)
* Revert "Add configurable function and build size" in [#9681](https://github.com/appwrite/appwrite/pull/9681)
* core: introduce endpoint.docs in specs in [#9685](https://github.com/appwrite/appwrite/pull/9685)
* fix: remove content-type header from get request specs in [#9666](https://github.com/appwrite/appwrite/pull/9666)
* chore: update flutter sdk in [#9691](https://github.com/appwrite/appwrite/pull/9691)
# Version 1.6.1
+1 -1
View File
@@ -1,4 +1,4 @@
> We just announced Timestamp Overrides for Appwrite Databases - [Learn more](https://appwrite.io/blog/post/announcing-timestamp-overrides)
> We just announced DB operators for Appwrite Databases - [Learn more](https://appwrite.io/blog/post/announcing-db-operators)
> Appwrite Cloud is now Generally Available - [Learn more](https://appwrite.io/cloud-ga)
+5
View File
@@ -103,6 +103,11 @@ CLI::setResource('console', function () {
return new Document(Config::getParam('console'));
}, []);
CLI::setResource(
'isResourceBlocked',
fn () => fn (Document $project, string $resourceType, ?string $resourceId) => false
);
CLI::setResource('getProjectDB', function (Group $pools, Database $dbForPlatform, $cache) {
$databases = []; // TODO: @Meldiron This should probably be responsibility of utopia-php/pools
+124
View File
@@ -2521,4 +2521,128 @@ return [
],
],
],
'transactions' => [
'$collection' => ID::custom(Database::METADATA),
'$id' => ID::custom('transactions'),
'name' => 'Transactions',
'attributes' => [
[
'$id' => ID::custom('status'),
'type' => Database::VAR_STRING,
'size' => 16, // pending | committing | committed | failed
'signed' => true,
'required' => false,
'default' => 'pending',
'array' => false,
'filters' => [],
],
[
'$id' => ID::custom('operations'),
'type' => Database::VAR_INTEGER,
'size' => 0,
'signed' => false,
'required' => true,
'default' => 0,
'array' => false,
'filters' => [],
],
[
'$id' => ID::custom('expiresAt'),
'type' => Database::VAR_DATETIME,
'size' => 0,
'signed' => true,
'required' => true,
'default' => null,
'array' => false,
'filters' => ['datetime'],
],
],
'indexes' => [
[
'$id' => ID::custom('_key_expiresAt'),
'type' => Database::INDEX_KEY,
'attributes' => ['expiresAt'],
'lengths' => [],
'orders' => [Database::ORDER_DESC],
],
],
],
'transactionLogs' => [
'$collection' => ID::custom(Database::METADATA),
'$id' => ID::custom('transactionLogs'),
'name' => 'Transaction Logs',
'attributes' => [
[
'$id' => ID::custom('transactionInternalId'),
'type' => Database::VAR_STRING,
'size' => Database::LENGTH_KEY,
'signed' => true,
'required' => true,
'default' => null,
'array' => false,
'filters' => [],
],
[
'$id' => ID::custom('databaseInternalId'),
'type' => Database::VAR_STRING,
'size' => Database::LENGTH_KEY,
'signed' => true,
'required' => true,
'default' => null,
'array' => false,
'filters' => [],
],
[
'$id' => ID::custom('collectionInternalId'),
'type' => Database::VAR_STRING,
'size' => Database::LENGTH_KEY,
'signed' => true,
'required' => true,
'default' => null,
'array' => false,
'filters' => [],
],
[
'$id' => ID::custom('documentId'),
'type' => Database::VAR_STRING,
'size' => Database::LENGTH_KEY,
'signed' => true,
'required' => false,
'default' => null,
'array' => false,
'filters' => [],
],
[
'$id' => ID::custom('action'),
'type' => Database::VAR_STRING,
'size' => 32, // create | update | upsert | increment | decrement | delete | bulkCreate | bulkUpdate | bulkUpsert | bulkDelete
'signed' => true,
'required' => true,
'default' => null,
'array' => false,
'filters' => [],
],
[
'$id' => ID::custom('data'),
'type' => Database::VAR_STRING,
'size' => 5_000_000, // Allow large payloads for bulk operations
'signed' => false,
'required' => true,
'default' => null,
'array' => false,
'filters' => ['json'],
],
],
'indexes' => [
[
'$id' => ID::custom('_key_transaction'),
'type' => Database::INDEX_KEY,
'attributes' => ['transactionInternalId'],
'lengths' => [],
'orders' => [],
],
],
],
];
+1
View File
@@ -49,6 +49,7 @@ $console = [
'githubSecret' => System::getEnv('_APP_CONSOLE_GITHUB_SECRET', ''),
'githubAppid' => System::getEnv('_APP_CONSOLE_GITHUB_APP_ID', '')
],
'smtpBaseTemplate' => APP_BRANDED_EMAIL_BASE_TEMPLATE,
];
return $console;
+62
View File
@@ -211,6 +211,11 @@ return [
'description' => 'User with the requested ID could not be found.',
'code' => 404,
],
Exception::USER_EMAIL_NOT_FOUND => [
'name' => Exception::USER_EMAIL_NOT_FOUND,
'description' => 'User email could not be found.',
'code' => 400,
],
Exception::USER_EMAIL_ALREADY_EXISTS => [
'name' => Exception::USER_EMAIL_ALREADY_EXISTS,
'description' => 'A user with the same email already exists in the current project.',
@@ -312,11 +317,21 @@ return [
'description' => 'OAuth2 provider returned some error.',
'code' => 424,
],
Exception::USER_EMAIL_NOT_VERIFIED => [
'name' => Exception::USER_EMAIL_NOT_VERIFIED,
'description' => 'User email is not verified',
'code' => 400,
],
Exception::USER_EMAIL_ALREADY_VERIFIED => [
'name' => Exception::USER_EMAIL_ALREADY_VERIFIED,
'description' => 'User email is already verified',
'code' => 409,
],
Exception::USER_PHONE_NOT_VERIFIED => [
'name' => Exception::USER_PHONE_NOT_VERIFIED,
'description' => 'User phone is not verified',
'code' => 400,
],
Exception::USER_PHONE_ALREADY_VERIFIED => [
'name' => Exception::USER_PHONE_ALREADY_VERIFIED,
'description' => 'User phone is already verified',
@@ -563,6 +578,11 @@ return [
'description' => 'The requested runtime is either inactive or unsupported. Please check the value of the _APP_FUNCTIONS_RUNTIMES environment variable.',
'code' => 404,
],
Exception::FUNCTION_ALREADY_EXISTS => [
'name' => Exception::FUNCTION_ALREADY_EXISTS,
'description' => 'Function with the requested ID already exists. Try again with a different ID or use ID.unique() to generate a unique ID.',
'code' => 409,
],
Exception::FUNCTION_ENTRYPOINT_MISSING => [
'name' => Exception::FUNCTION_ENTRYPOINT_MISSING,
'description' => 'Entrypoint for your Appwrite Function is missing. Please specify it when making deployment or update the entrypoint under your function\'s "Settings" > "Configuration" > "Entrypoint".',
@@ -966,6 +986,48 @@ return [
'code' => 409,
],
/** Transactions */
Exception::TRANSACTION_NOT_FOUND => [
'name' => Exception::TRANSACTION_NOT_FOUND,
'description' => 'Transaction with the requested ID could not be found.',
'code' => 404,
],
Exception::TRANSACTION_ALREADY_EXISTS => [
'name' => Exception::TRANSACTION_ALREADY_EXISTS,
'description' => 'Transaction with the requested ID already exists. Try again with a different ID or use ID.unique() to generate a unique ID.',
'code' => 409,
],
Exception::TRANSACTION_INVALID => [
'name' => Exception::TRANSACTION_INVALID,
'description' => 'The transaction is invalid. Please check the transaction state and try again.',
'code' => 400,
],
Exception::TRANSACTION_FAILED => [
'name' => Exception::TRANSACTION_FAILED,
'description' => 'The transaction has errored. Please check the transaction data and try again.',
'code' => 400,
],
Exception::TRANSACTION_EXPIRED => [
'name' => Exception::TRANSACTION_EXPIRED,
'description' => 'The transaction has expired. Please create a new transaction and try again.',
'code' => 410,
],
Exception::TRANSACTION_CONFLICT => [
'name' => Exception::TRANSACTION_CONFLICT,
'description' => 'The transaction has a conflict. Please resolve the conflict and try again.',
'code' => 409,
],
Exception::TRANSACTION_LIMIT_EXCEEDED => [
'name' => Exception::TRANSACTION_LIMIT_EXCEEDED,
'description' => 'The maximum number of operations per transaction has been exceeded.',
'code' => 400,
],
Exception::TRANSACTION_NOT_READY => [
'name' => Exception::TRANSACTION_NOT_READY,
'description' => 'The transaction is not ready yet. Please try again later.',
'code' => 400,
],
/** Project Errors */
Exception::PROJECT_NOT_FOUND => [
'name' => Exception::PROJECT_NOT_FOUND,
@@ -131,6 +131,14 @@
.social-icon > img {
margin: auto;
}
p.security-phrase:not(:empty) {
opacity: 0.7;
margin: 0;
padding: 0;
margin-top: 32px;
padding-top: 32px;
border-top: 1px solid #e8e9f0;
}
</style>
</head>
@@ -147,6 +155,7 @@
<img
height="32px"
src="{{logoUrl}}"
alt="Appwrite logo"
/>
</td>
</tr>
@@ -155,12 +164,12 @@
<table style="margin-top: 32px">
<tr>
<td>
<h1>{{subject}}</h1>
<h1>{{heading}}</h1>
</td>
</tr>
</table>
<table style="margin-top: 32px">
<table style="margin-top: 16px">
<tr>
<td>
{{body}}
+21 -1
View File
@@ -44,6 +44,21 @@
color: currentColor;
word-break: break-all;
}
a.button {
box-sizing: border-box;
display: inline-block;
text-align: center;
text-decoration: none;
padding: 9px 14px;
color: #ffffff;
background-color: #2D2D31;
border: 1px solid #414146;
border-radius: 8px;
}
a.button:hover,
a.button:focus {
opacity: 0.8;
}
table {
width: 100%;
border-spacing: 0 !important;
@@ -94,10 +109,15 @@
h* {
font-family: 'Poppins', sans-serif;
}
p {
margin-bottom: 10px;
}
p.security-phrase:not(:empty) {
opacity: 0.7;
margin-top: 32px;
padding-top: 32px;
border-top: 1px solid #e8e9f0;
}
</style>
</head>
@@ -1,6 +1,6 @@
<p>{{hello}}</p>
<p>{{body}}</p>
<p><a href="{{redirect}}" target="_blank" style="font-size: 14px; font-family: Inter, sans-serif; color: #ffffff; text-decoration: none; background-color: #2D2D31; border-radius: 8px; padding: 9px 14px; border: 1px solid #414146; display: inline-block; text-align:center; box-sizing: border-box;">{{buttonText}}</a></p>
<p><a href="{{redirect}}" target="_blank" class="button">{{buttonText}}</a></p>
<p>{{footer}}</p>
<p style="margin-bottom: 32px">
{{thanks}}
@@ -5,7 +5,7 @@
<table border="0" cellspacing="0" cellpadding="0" style="padding-top: 10px; padding-bottom: 10px; display: inline-block;">
<tr>
<td align="center" style="border-radius: 8px; background-color: #19191D;">
<a rel="noopener" target="_blank" href="{{redirect}}" style="font-size: 14px; font-family: Inter; color: #ffffff; text-decoration: none; border-radius: 8px; padding: 9px 14px; border: 1px solid #19191D; display: inline-block;">{{buttonText}}</a>
<a rel="noopener" target="_blank" href="{{redirect}}" class="button">{{buttonText}}</a>
</td>
</tr>
</table>
@@ -5,7 +5,7 @@
<table border="0" cellspacing="0" cellpadding="0" style="padding-top: 10px; padding-bottom: 10px; display: inline-block;">
<tr>
<td align="center" style="border-radius: 8px; background-color: #ffffff;">
<p style="font-size: 24px; text-indent: 18px; letter-spacing: 18px; font-family: 'Inter', sans-serif; color: #414146; text-decoration: none; border-radius: 8px; padding: 24px 12px; border: 1px solid #EDEDF0; display: inline-block; font-weight: bold; ">{{otp}}</p>
<p style="font-size: 24px; text-indent: 18px; letter-spacing: 18px; font-family: 'Inter', sans-serif; color: #414146; text-decoration: none; border-radius: 8px; margin-top: 0px; margin-bottom: 0px; padding: 24px 12px; border: 1px solid #EDEDF0; display: inline-block; font-weight: bold;">{{otp}}</p>
</td>
</tr>
</table>
+2 -4
View File
@@ -5,7 +5,7 @@
<table border="0" cellspacing="0" cellpadding="0" style="padding-top: 10px; padding-bottom: 10px; display: inline-block;">
<tr>
<td align="center" style="border-radius: 8px; background-color: #ffffff;">
<p style="font-size: 24px; text-indent: 18px; letter-spacing: 18px; font-family: Inter; color: #414146; text-decoration: none; border-radius: 8px; padding: 24px 12px; border: 1px solid #EDEDF0; display: inline-block; font-weight: bold; ">{{otp}}</p>
<p style="font-size: 24px; text-indent: 18px; letter-spacing: 18px; font-family: 'Inter', sans-serif; color: #414146; text-decoration: none; border-radius: 8px; margin-top: 0px; margin-bottom: 0px; padding: 24px 12px; border: 1px solid #EDEDF0; display: inline-block; font-weight: bold; ">{{otp}}</p>
</td>
</tr>
</table>
@@ -15,6 +15,4 @@
<p style="margin-bottom: 0px;">{{thanks}}</p>
<p style="margin-top: 0px;">{{signature}}</p>
<hr style="margin-block-start: 1rem; margin-block-end: 1rem;">
<p style="opacity: 0.7;">{{securityPhrase}}</p>
<p class="security-phrase">{{securityPhrase}}</p>
+5 -2
View File
@@ -3,8 +3,9 @@
"settings.locale": "en",
"settings.direction": "ltr",
"emails.sender": "{{project}} Team",
"emails.verification.subject": "Account Verification",
"emails.verification.subject": "Account Verification for {{project}}",
"emails.verification.preview": "Verify your email to activate your {{project}} account.",
"emails.verification.heading": "Verify your email to start using {{project}}",
"emails.verification.hello": "Hello {{user}},",
"emails.verification.body": "Follow this link to verify your email address to your {{b}}{{project}}{{/b}} account.",
"emails.verification.footer": "If you didnt ask to verify this address, you can ignore this message.",
@@ -33,6 +34,7 @@
"emails.sessionAlert.signature": "{{project}} team",
"emails.otpSession.subject": "OTP for {{project}} Login",
"emails.otpSession.preview": "Use OTP {{otp}} to sign in to {{project}}. Expires in 15 minutes.",
"emails.otpSession.heading": "Login with OTP to use {{project}}",
"emails.otpSession.hello": "Hello {{user}},",
"emails.otpSession.description": "Enter the following verification code when prompted to securely sign in to your {{b}}{{project}}{{/b}} account. This code will expire in 15 minutes.",
"emails.otpSession.clientInfo": "This sign in was requested using {{b}}{{agentClient}}{{/b}} on {{b}}{{agentDevice}}{{/b}} {{b}}{{agentOs}}{{/b}}. If you didn't request the sign in, you can safely ignore this email.",
@@ -41,12 +43,13 @@
"emails.otpSession.signature": "{{project}} team",
"emails.mfaChallenge.subject": "Verification Code for {{project}}",
"emails.mfaChallenge.preview": "Use code {{otp}} for two-step verification in {{project}}. Expires in 15 minutes.",
"emails.mfaChallenge.heading": "Complete two-step verification to use {{project}}",
"emails.mfaChallenge.hello": "Hello {{user}},",
"emails.mfaChallenge.description": "Enter the following code to confirm your two-step verification in {{b}}{{project}}{{/b}}. This code will expire in 15 minutes.",
"emails.mfaChallenge.clientInfo": "This verification code was requested using {{b}}{{agentClient}}{{/b}} on {{b}}{{agentDevice}}{{/b}} {{b}}{{agentOs}}{{/b}}. If you didn't request the verification code, you can safely ignore this email.",
"emails.mfaChallenge.thanks": "Thanks,",
"emails.mfaChallenge.signature": "{{project}} team",
"emails.recovery.subject": "Password Reset",
"emails.recovery.subject": "Password Reset for {{project}}",
"emails.recovery.preview": "Reset your {{project}} password using the link.",
"emails.recovery.hello": "Hello {{user}},",
"emails.recovery.body": "Follow this link to reset your {{b}}{{project}}{{/b}} password.",
+16 -16
View File
@@ -11,7 +11,7 @@ return [
[
'key' => 'web',
'name' => 'Web',
'version' => '19.0.0',
'version' => '21.2.1',
'url' => 'https://github.com/appwrite/sdk-for-web',
'package' => 'https://www.npmjs.com/package/appwrite',
'enabled' => true,
@@ -60,7 +60,7 @@ return [
[
'key' => 'flutter',
'name' => 'Flutter',
'version' => '18.0.0',
'version' => '20.2.1',
'url' => 'https://github.com/appwrite/sdk-for-flutter',
'package' => 'https://pub.dev/packages/appwrite',
'enabled' => true,
@@ -79,7 +79,7 @@ return [
[
'key' => 'apple',
'name' => 'Apple',
'version' => '11.0.0',
'version' => '13.2.1',
'url' => 'https://github.com/appwrite/sdk-for-apple',
'package' => 'https://github.com/appwrite/sdk-for-apple',
'enabled' => true,
@@ -116,7 +116,7 @@ return [
[
'key' => 'android',
'name' => 'Android',
'version' => '9.0.0',
'version' => '11.2.1',
'url' => 'https://github.com/appwrite/sdk-for-android',
'package' => 'https://search.maven.org/artifact/io.appwrite/sdk-for-android',
'enabled' => true,
@@ -139,7 +139,7 @@ return [
[
'key' => 'react-native',
'name' => 'React Native',
'version' => '0.12.0',
'version' => '0.17.1',
'url' => 'https://github.com/appwrite/sdk-for-react-native',
'package' => 'https://npmjs.com/package/react-native-appwrite',
'enabled' => true,
@@ -207,7 +207,7 @@ return [
[
'key' => 'web',
'name' => 'Console',
'version' => '0.1.0',
'version' => '0.1.1',
'url' => '',
'package' => '',
'enabled' => true,
@@ -226,7 +226,7 @@ return [
[
'key' => 'cli',
'name' => 'Command Line',
'version' => '9.1.0',
'version' => '10.2.1',
'url' => 'https://github.com/appwrite/sdk-for-cli',
'package' => 'https://www.npmjs.com/package/appwrite-cli',
'enabled' => true,
@@ -262,7 +262,7 @@ return [
[
'key' => 'nodejs',
'name' => 'Node.js',
'version' => '18.0.0',
'version' => '20.2.1',
'url' => 'https://github.com/appwrite/sdk-for-node',
'package' => 'https://www.npmjs.com/package/node-appwrite',
'enabled' => true,
@@ -281,7 +281,7 @@ return [
[
'key' => 'php',
'name' => 'PHP',
'version' => '16.0.0',
'version' => '17.4.1',
'url' => 'https://github.com/appwrite/sdk-for-php',
'package' => 'https://packagist.org/packages/appwrite/appwrite',
'enabled' => true,
@@ -300,7 +300,7 @@ return [
[
'key' => 'python',
'name' => 'Python',
'version' => '12.0.0',
'version' => '13.4.1',
'url' => 'https://github.com/appwrite/sdk-for-python',
'package' => 'https://pypi.org/project/appwrite/',
'enabled' => true,
@@ -319,7 +319,7 @@ return [
[
'key' => 'ruby',
'name' => 'Ruby',
'version' => '17.0.0',
'version' => '19.2.1',
'url' => 'https://github.com/appwrite/sdk-for-ruby',
'package' => 'https://rubygems.org/gems/appwrite',
'enabled' => true,
@@ -338,7 +338,7 @@ return [
[
'key' => 'go',
'name' => 'Go',
'version' => '0.10.0',
'version' => 'v0.13.1',
'url' => 'https://github.com/appwrite/sdk-for-go',
'package' => 'https://github.com/appwrite/sdk-for-go',
'enabled' => true,
@@ -357,7 +357,7 @@ return [
[
'key' => 'dotnet',
'name' => '.NET',
'version' => '0.16.0',
'version' => '0.21.2',
'url' => 'https://github.com/appwrite/sdk-for-dotnet',
'package' => 'https://www.nuget.org/packages/Appwrite',
'enabled' => true,
@@ -376,7 +376,7 @@ return [
[
'key' => 'dart',
'name' => 'Dart',
'version' => '17.0.0',
'version' => '19.2.1',
'url' => 'https://github.com/appwrite/sdk-for-dart',
'package' => 'https://pub.dev/packages/dart_appwrite',
'enabled' => true,
@@ -395,7 +395,7 @@ return [
[
'key' => 'kotlin',
'name' => 'Kotlin',
'version' => '10.0.0',
'version' => '12.2.1',
'url' => 'https://github.com/appwrite/sdk-for-kotlin',
'package' => 'https://search.maven.org/artifact/io.appwrite/sdk-for-kotlin',
'enabled' => true,
@@ -418,7 +418,7 @@ return [
[
'key' => 'swift',
'name' => 'Swift',
'version' => '11.0.0',
'version' => '13.2.1',
'url' => 'https://github.com/appwrite/sdk-for-swift',
'package' => 'https://github.com/appwrite/sdk-for-swift',
'enabled' => true,
+1 -1
View File
@@ -28,7 +28,7 @@ $member = [
'subscribers.write',
'subscribers.read',
'assistant.read',
'rules.read'
'rules.read',
];
$admins = [
+1 -1
View File
@@ -214,7 +214,7 @@ return [
'name' => 'Proxy',
'subtitle' => 'The Proxy Service allows you to configure actions for your domains beyond DNS configuration.',
'description' => '/docs/services/proxy.md',
'controller' => 'api/proxy.php',
'controller' => '', // Uses modules
'sdk' => true,
'docs' => true,
'docsUrl' => 'https://appwrite.io/docs/proxy',
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+183 -57
View File
@@ -58,6 +58,7 @@ use Utopia\Database\Validator\Query\Limit;
use Utopia\Database\Validator\Query\Offset;
use Utopia\Database\Validator\UID;
use Utopia\Locale\Locale;
use Utopia\Storage\Validator\FileName;
use Utopia\System\System;
use Utopia\Validator\ArrayList;
use Utopia\Validator\Assoc;
@@ -165,7 +166,8 @@ function sendSessionAlert(Locale $locale, Document $user, Document $project, Doc
->setVariables($emailVariables)
->setRecipient($email)
->trigger();
};
}
;
$createSession = function (string $userId, string $secret, Request $request, Response $response, Document $user, Database $dbForProject, Document $project, Locale $locale, Reader $geodb, Event $queueForEvents, Mail $queueForMails) {
@@ -838,7 +840,7 @@ App::patch('/v1/account/sessions/:sessionId')
$session
->setAttribute('providerAccessToken', $oauth2->getAccessToken(''))
->setAttribute('providerRefreshToken', $oauth2->getRefreshToken(''))
->setAttribute('providerAccessTokenExpiry', DateTime::addSeconds(new \DateTime(), (int)$oauth2->getAccessTokenExpiry('')));
->setAttribute('providerAccessTokenExpiry', DateTime::addSeconds(new \DateTime(), (int) $oauth2->getAccessTokenExpiry('')));
}
// Save changes
@@ -982,9 +984,11 @@ App::post('/v1/account/sessions/email')
;
if ($project->getAttribute('auths', [])['sessionAlerts'] ?? false) {
if ($dbForProject->count('sessions', [
Query::equal('userId', [$user->getId()]),
]) !== 1) {
if (
$dbForProject->count('sessions', [
Query::equal('userId', [$user->getId()]),
]) !== 1
) {
sendSessionAlert($locale, $user, $project, $session, $queueForMails);
}
}
@@ -1098,7 +1102,7 @@ App::post('/v1/account/sessions/anonymous')
Authorization::setRole(Role::user($user->getId())->toString());
$session = $dbForProject->createDocument('sessions', $session-> setAttribute('$permissions', [
$session = $dbForProject->createDocument('sessions', $session->setAttribute('$permissions', [
Permission::read(Role::user($user->getId())),
Permission::update(Role::user($user->getId())),
Permission::delete(Role::user($user->getId())),
@@ -1659,13 +1663,13 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect')
'providerEmail' => $email,
'providerAccessToken' => $accessToken,
'providerRefreshToken' => $refreshToken,
'providerAccessTokenExpiry' => DateTime::addSeconds(new \DateTime(), (int)$accessTokenExpiry),
'providerAccessTokenExpiry' => DateTime::addSeconds(new \DateTime(), (int) $accessTokenExpiry),
]));
} else {
$identity
->setAttribute('providerAccessToken', $accessToken)
->setAttribute('providerRefreshToken', $refreshToken)
->setAttribute('providerAccessTokenExpiry', DateTime::addSeconds(new \DateTime(), (int)$accessTokenExpiry));
->setAttribute('providerAccessTokenExpiry', DateTime::addSeconds(new \DateTime(), (int) $accessTokenExpiry));
$dbForProject->updateDocument('identities', $identity->getId(), $identity);
}
@@ -1735,7 +1739,7 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect')
'providerUid' => $oauth2ID,
'providerAccessToken' => $accessToken,
'providerRefreshToken' => $refreshToken,
'providerAccessTokenExpiry' => DateTime::addSeconds(new \DateTime(), (int)$accessTokenExpiry),
'providerAccessTokenExpiry' => DateTime::addSeconds(new \DateTime(), (int) $accessTokenExpiry),
'secret' => Auth::hash($secret), // One way hash encryption to protect DB leak
'userAgent' => $request->getUserAgent('UNKNOWN'),
'ip' => $request->getIP(),
@@ -2293,7 +2297,17 @@ App::post('/v1/account/tokens/email')
$subject = $locale->getText("emails.otpSession.subject");
$preview = $locale->getText("emails.otpSession.preview");
$heading = $locale->getText("emails.otpSession.heading");
$customTemplate = $project->getAttribute('templates', [])['email.otpSession-' . $locale->default] ?? [];
$smtpBaseTemplate = $project->getAttribute('smtpBaseTemplate', 'email-base');
$validator = new FileName();
if (!$validator->isValid($smtpBaseTemplate)) {
throw new Exception(Exception::GENERAL_BAD_REQUEST, 'Invalid template path');
}
$bodyTemplate = __DIR__ . '/../../config/locale/templates/' . $smtpBaseTemplate . '.tpl';
$detector = new Detector($request->getUserAgent('UNKNOWN'));
$agentOs = $detector->getOS();
@@ -2363,6 +2377,7 @@ App::post('/v1/account/tokens/email')
}
$emailVariables = [
'heading' => $heading,
'direction' => $locale->getText('settings.direction'),
// {{user}}, {{project}} and {{otp}} are required in the templates
'user' => $user->getAttribute('name'),
@@ -2376,10 +2391,23 @@ App::post('/v1/account/tokens/email')
'team' => '',
];
if ($smtpBaseTemplate === APP_BRANDED_EMAIL_BASE_TEMPLATE) {
$emailVariables = array_merge($emailVariables, [
'accentColor' => APP_EMAIL_ACCENT_COLOR,
'logoUrl' => APP_EMAIL_LOGO_URL,
'twitterUrl' => APP_SOCIAL_TWITTER,
'discordUrl' => APP_SOCIAL_DISCORD,
'githubUrl' => APP_SOCIAL_GITHUB_APPWRITE,
'termsUrl' => APP_EMAIL_TERMS_URL,
'privacyUrl' => APP_EMAIL_PRIVACY_URL,
]);
}
$queueForMails
->setSubject($subject)
->setPreview($preview)
->setBody($body)
->setBodyTemplate($bodyTemplate)
->setVariables($emailVariables)
->setRecipient($email)
->trigger();
@@ -2732,10 +2760,12 @@ App::post('/v1/account/jwts')
$response
->setStatusCode(Response::STATUS_CODE_CREATED)
->dynamic(new Document(['jwt' => $jwt->encode([
'userId' => $user->getId(),
'sessionId' => $current->getId(),
])]), Response::MODEL_JWT);
->dynamic(new Document([
'jwt' => $jwt->encode([
'userId' => $user->getId(),
'sessionId' => $current->getId(),
])
]), Response::MODEL_JWT);
});
App::get('/v1/account/prefs')
@@ -3480,12 +3510,12 @@ App::put('/v1/account/recovery')
$hooks->trigger('passwordValidator', [$dbForProject, $project, $password, &$user, true]);
$profile = $dbForProject->updateDocument('users', $profile->getId(), $profile
->setAttribute('password', $newPassword)
->setAttribute('passwordHistory', $history)
->setAttribute('passwordUpdate', DateTime::now())
->setAttribute('hash', Auth::DEFAULT_ALGO)
->setAttribute('hashOptions', Auth::DEFAULT_ALGO_OPTIONS)
->setAttribute('emailVerification', true));
->setAttribute('password', $newPassword)
->setAttribute('passwordHistory', $history)
->setAttribute('passwordUpdate', DateTime::now())
->setAttribute('hash', Auth::DEFAULT_ALGO)
->setAttribute('hashOptions', Auth::DEFAULT_ALGO_OPTIONS)
->setAttribute('emailVerification', true));
$user->setAttributes($profile->getArrayCopy());
@@ -3506,27 +3536,48 @@ App::put('/v1/account/recovery')
$response->dynamic($recoveryDocument, Response::MODEL_TOKEN);
});
App::post('/v1/account/verification')
App::post('/v1/account/verifications/email')
->alias('/v1/account/verification')
->desc('Create email verification')
->groups(['api', 'account'])
->label('scope', 'account')
->label('event', 'users.[userId].verification.[tokenId].create')
->label('audits.event', 'verification.create')
->label('audits.resource', 'user/{response.userId}')
->label('sdk', new Method(
namespace: 'account',
group: 'verification',
name: 'createVerification',
description: '/docs/references/account/create-email-verification.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_TOKEN,
)
],
contentType: ContentType::JSON,
))
->label('sdk', [
new Method(
namespace: 'account',
group: 'verification',
name: 'createEmailVerification',
description: '/docs/references/account/create-email-verification.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_TOKEN,
)
],
contentType: ContentType::JSON,
),
new Method(
namespace: 'account',
group: 'verification',
name: 'createVerification',
description: '/docs/references/account/create-email-verification.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_TOKEN,
)
],
contentType: ContentType::JSON,
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'account.createEmailVerification'
),
)
])
->label('abuse-limit', 10)
->label('abuse-key', 'url:{url},userId:{userId}')
->param('url', '', fn ($platforms, $devKey) => $devKey->isEmpty() ? new Redirect($platforms) : new URL(), 'URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.', false, ['platforms', 'devKey']) // TODO add built-in confirm page
@@ -3544,6 +3595,10 @@ App::post('/v1/account/verification')
throw new Exception(Exception::GENERAL_SMTP_DISABLED, 'SMTP Disabled');
}
if (empty($user->getAttribute('email'))) {
throw new Exception(Exception::USER_EMAIL_NOT_FOUND);
}
$url = htmlentities($url);
if ($user->getAttribute('emailVerification')) {
throw new Exception(Exception::USER_EMAIL_ALREADY_VERIFIED);
@@ -3582,7 +3637,17 @@ App::post('/v1/account/verification')
$body = $locale->getText("emails.verification.body");
$preview = $locale->getText("emails.verification.preview");
$subject = $locale->getText("emails.verification.subject");
$heading = $locale->getText("emails.verification.heading");
$customTemplate = $project->getAttribute('templates', [])['email.verification-' . $locale->default] ?? [];
$smtpBaseTemplate = $project->getAttribute('smtpBaseTemplate', 'email-base');
$validator = new FileName();
if (!$validator->isValid($smtpBaseTemplate)) {
throw new Exception(Exception::GENERAL_BAD_REQUEST, 'Invalid template path');
}
$bodyTemplate = __DIR__ . '/../../config/locale/templates/' . $smtpBaseTemplate . '.tpl';
$message = Template::fromFile(__DIR__ . '/../../config/locale/templates/email-inner-base.tpl');
$message
@@ -3642,6 +3707,7 @@ App::post('/v1/account/verification')
}
$emailVariables = [
'heading' => $heading,
'direction' => $locale->getText('settings.direction'),
// {{user}}, {{redirect}} and {{project}} are required in default and custom templates
'user' => $user->getAttribute('name'),
@@ -3651,10 +3717,23 @@ App::post('/v1/account/verification')
'team' => '',
];
if ($smtpBaseTemplate === APP_BRANDED_EMAIL_BASE_TEMPLATE) {
$emailVariables = array_merge($emailVariables, [
'accentColor' => APP_EMAIL_ACCENT_COLOR,
'logoUrl' => APP_EMAIL_LOGO_URL,
'twitterUrl' => APP_SOCIAL_TWITTER,
'discordUrl' => APP_SOCIAL_DISCORD,
'githubUrl' => APP_SOCIAL_GITHUB_APPWRITE,
'termsUrl' => APP_EMAIL_TERMS_URL,
'privacyUrl' => APP_EMAIL_PRIVACY_URL,
]);
}
$queueForMails
->setSubject($subject)
->setPreview($preview)
->setBody($body)
->setBodyTemplate($bodyTemplate)
->setVariables($emailVariables)
->setRecipient($user->getAttribute('email'))
->setName($user->getAttribute('name') ?? '')
@@ -3672,27 +3751,48 @@ App::post('/v1/account/verification')
->dynamic($verification, Response::MODEL_TOKEN);
});
App::put('/v1/account/verification')
App::put('/v1/account/verifications/email')
->alias('/v1/account/verification')
->desc('Update email verification (confirmation)')
->groups(['api', 'account'])
->label('scope', 'public')
->label('event', 'users.[userId].verification.[tokenId].update')
->label('audits.event', 'verification.update')
->label('audits.resource', 'user/{response.userId}')
->label('sdk', new Method(
namespace: 'account',
group: 'verification',
name: 'updateVerification',
description: '/docs/references/account/update-email-verification.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_TOKEN,
)
],
contentType: ContentType::JSON
))
->label('sdk', [
new Method(
namespace: 'account',
group: 'verification',
name: 'updateEmailVerification',
description: '/docs/references/account/update-email-verification.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_TOKEN,
)
],
contentType: ContentType::JSON
),
new Method(
namespace: 'account',
group: 'verification',
name: 'updateVerification',
description: '/docs/references/account/update-email-verification.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_TOKEN,
)
],
contentType: ContentType::JSON,
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'account.updateEmailVerification'
),
)
])
->label('abuse-limit', 10)
->label('abuse-key', 'url:{url},userId:{param-userId}')
->param('userId', '', new UID(), 'User ID.')
@@ -3739,7 +3839,8 @@ App::put('/v1/account/verification')
$response->dynamic($verification, Response::MODEL_TOKEN);
});
App::post('/v1/account/verification/phone')
App::post('/v1/account/verifications/phone')
->alias('/v1/account/verification/phone')
->desc('Create phone verification')
->groups(['api', 'account', 'auth'])
->label('scope', 'account')
@@ -3888,7 +3989,8 @@ App::post('/v1/account/verification/phone')
->dynamic($verification, Response::MODEL_TOKEN);
});
App::put('/v1/account/verification/phone')
App::put('/v1/account/verifications/phone')
->alias('/v1/account/verification/phone')
->desc('Update phone verification (confirmation)')
->groups(['api', 'account'])
->label('scope', 'public')
@@ -4660,7 +4762,17 @@ App::post('/v1/account/mfa/challenge')
$subject = $locale->getText("emails.mfaChallenge.subject");
$preview = $locale->getText("emails.mfaChallenge.preview");
$heading = $locale->getText("emails.mfaChallenge.heading");
$customTemplate = $project->getAttribute('templates', [])['email.mfaChallenge-' . $locale->default] ?? [];
$smtpBaseTemplate = $project->getAttribute('smtpBaseTemplate', 'email-base');
$validator = new FileName();
if (!$validator->isValid($smtpBaseTemplate)) {
throw new Exception(Exception::GENERAL_BAD_REQUEST, 'Invalid template path');
}
$bodyTemplate = __DIR__ . '/../../config/locale/templates/' . $smtpBaseTemplate . '.tpl';
$detector = new Detector($request->getUserAgent('UNKNOWN'));
$agentOs = $detector->getOS();
@@ -4724,6 +4836,7 @@ App::post('/v1/account/mfa/challenge')
}
$emailVariables = [
'heading' => $heading,
'direction' => $locale->getText('settings.direction'),
// {{user}}, {{project}} and {{otp}} are required in the templates
'user' => $user->getAttribute('name'),
@@ -4731,13 +4844,26 @@ App::post('/v1/account/mfa/challenge')
'otp' => $code,
'agentDevice' => $agentDevice['deviceBrand'] ?? $agentDevice['deviceBrand'] ?? 'UNKNOWN',
'agentClient' => $agentClient['clientName'] ?? 'UNKNOWN',
'agentOs' => $agentOs['osName'] ?? 'UNKNOWN'
'agentOs' => $agentOs['osName'] ?? 'UNKNOWN',
];
if ($smtpBaseTemplate === APP_BRANDED_EMAIL_BASE_TEMPLATE) {
$emailVariables = array_merge($emailVariables, [
'accentColor' => APP_EMAIL_ACCENT_COLOR,
'logoUrl' => APP_EMAIL_LOGO_URL,
'twitterUrl' => APP_SOCIAL_TWITTER,
'discordUrl' => APP_SOCIAL_DISCORD,
'githubUrl' => APP_SOCIAL_GITHUB_APPWRITE,
'termsUrl' => APP_EMAIL_TERMS_URL,
'privacyUrl' => APP_EMAIL_PRIVACY_URL,
]);
}
$queueForMails
->setSubject($subject)
->setPreview($preview)
->setBody($body)
->setBodyTemplate($bodyTemplate)
->setVariables($emailVariables)
->setRecipient($user->getAttribute('email'))
->trigger();
@@ -4860,8 +4986,8 @@ App::put('/v1/account/mfa/challenge')
$dbForProject->updateDocument('sessions', $session->getId(), $session);
$queueForEvents
->setParam('userId', $user->getId())
->setParam('sessionId', $session->getId());
->setParam('userId', $user->getId())
->setParam('sessionId', $session->getId());
$response->dynamic($session, Response::MODEL_SESSION);
});
@@ -4924,7 +5050,7 @@ App::post('/v1/account/targets/push')
],
'providerId' => !empty($providerId) ? $providerId : null,
'providerInternalId' => !empty($providerId) ? $provider->getSequence() : null,
'providerType' => MESSAGE_TYPE_PUSH,
'providerType' => MESSAGE_TYPE_PUSH,
'userId' => $user->getId(),
'userInternalId' => $user->getSequence(),
'sessionId' => $session->getId(),
@@ -5099,8 +5225,8 @@ App::get('/v1/account/identities')
$queries[] = Query::equal('userInternalId', [$user->getSequence()]);
/**
* Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries
*/
* Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries
*/
$cursor = \array_filter($queries, function ($query) {
return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]);
});
+1 -1
View File
@@ -538,7 +538,7 @@ App::get('/v1/health/queue/databases')
->inject('response')
->action(function (string $name, int|string $threshold, Database $queueForDatabase, Response $response) {
$threshold = \intval($threshold);
$size = $queueForDatabase->getSize();
$size = $queueForDatabase->setQueue($name)->getSize();
if ($size >= $threshold) {
throw new Exception(Exception::HEALTH_QUEUE_SIZE_EXCEEDED, "Queue size threshold hit. Current size is {$size} and threshold is {$threshold}.");
+6 -6
View File
@@ -3102,7 +3102,7 @@ App::post('/v1/messaging/messages/email')
case MessageStatus::SCHEDULED:
$schedule = $dbForPlatform->createDocument('schedules', new Document([
'region' => $project->getAttribute('region'),
'resourceType' => 'message',
'resourceType' => SCHEDULE_RESOURCE_TYPE_MESSAGE,
'resourceId' => $message->getId(),
'resourceInternalId' => $message->getSequence(),
'resourceUpdatedAt' => DateTime::now(),
@@ -3244,7 +3244,7 @@ App::post('/v1/messaging/messages/sms')
case MessageStatus::SCHEDULED:
$schedule = $dbForPlatform->createDocument('schedules', new Document([
'region' => $project->getAttribute('region'),
'resourceType' => 'message',
'resourceType' => SCHEDULE_RESOURCE_TYPE_MESSAGE,
'resourceId' => $message->getId(),
'resourceInternalId' => $message->getSequence(),
'resourceUpdatedAt' => DateTime::now(),
@@ -3462,7 +3462,7 @@ App::post('/v1/messaging/messages/push')
case MessageStatus::SCHEDULED:
$schedule = $dbForPlatform->createDocument('schedules', new Document([
'region' => $project->getAttribute('region'),
'resourceType' => 'message',
'resourceType' => SCHEDULE_RESOURCE_TYPE_MESSAGE,
'resourceId' => $message->getId(),
'resourceInternalId' => $message->getSequence(),
'resourceUpdatedAt' => DateTime::now(),
@@ -3863,7 +3863,7 @@ App::patch('/v1/messaging/messages/email/:messageId')
if (\is_null($currentScheduledAt) && !\is_null($scheduledAt)) {
$schedule = $dbForPlatform->createDocument('schedules', new Document([
'region' => $project->getAttribute('region'),
'resourceType' => 'message',
'resourceType' => SCHEDULE_RESOURCE_TYPE_MESSAGE,
'resourceId' => $message->getId(),
'resourceInternalId' => $message->getSequence(),
'resourceUpdatedAt' => DateTime::now(),
@@ -4084,7 +4084,7 @@ App::patch('/v1/messaging/messages/sms/:messageId')
if (\is_null($currentScheduledAt) && !\is_null($scheduledAt)) {
$schedule = $dbForPlatform->createDocument('schedules', new Document([
'region' => $project->getAttribute('region'),
'resourceType' => 'message',
'resourceType' => SCHEDULE_RESOURCE_TYPE_MESSAGE,
'resourceId' => $message->getId(),
'resourceInternalId' => $message->getSequence(),
'resourceUpdatedAt' => DateTime::now(),
@@ -4258,7 +4258,7 @@ App::patch('/v1/messaging/messages/push/:messageId')
if (\is_null($currentScheduledAt) && !\is_null($scheduledAt)) {
$schedule = $dbForPlatform->createDocument('schedules', new Document([
'region' => $project->getAttribute('region'),
'resourceType' => 'message',
'resourceType' => SCHEDULE_RESOURCE_TYPE_MESSAGE,
'resourceId' => $message->getId(),
'resourceInternalId' => $message->getSequence(),
'resourceUpdatedAt' => DateTime::now(),
+22 -1
View File
@@ -1756,7 +1756,28 @@ App::post('/v1/projects/:projectId/platforms')
]
))
->param('projectId', '', new UID(), 'Project unique ID.')
->param('type', null, new WhiteList([Platform::TYPE_WEB, Platform::TYPE_FLUTTER_WEB, Platform::TYPE_FLUTTER_IOS, Platform::TYPE_FLUTTER_ANDROID, Platform::TYPE_FLUTTER_LINUX, Platform::TYPE_FLUTTER_MACOS, Platform::TYPE_FLUTTER_WINDOWS, Platform::TYPE_APPLE_IOS, Platform::TYPE_APPLE_MACOS, Platform::TYPE_APPLE_WATCHOS, Platform::TYPE_APPLE_TVOS, Platform::TYPE_ANDROID, Platform::TYPE_UNITY, Platform::TYPE_REACT_NATIVE_IOS, Platform::TYPE_REACT_NATIVE_ANDROID], true), 'Platform type.')
->param(
'type',
null,
new WhiteList([
Platform::TYPE_WEB,
Platform::TYPE_FLUTTER_WEB,
Platform::TYPE_FLUTTER_IOS,
Platform::TYPE_FLUTTER_ANDROID,
Platform::TYPE_FLUTTER_LINUX,
Platform::TYPE_FLUTTER_MACOS,
Platform::TYPE_FLUTTER_WINDOWS,
Platform::TYPE_APPLE_IOS,
Platform::TYPE_APPLE_MACOS,
Platform::TYPE_APPLE_WATCHOS,
Platform::TYPE_APPLE_TVOS,
Platform::TYPE_ANDROID,
Platform::TYPE_UNITY,
Platform::TYPE_REACT_NATIVE_IOS,
Platform::TYPE_REACT_NATIVE_ANDROID,
], true),
'Platform type. Possible values are: web, flutter-web, flutter-ios, flutter-android, flutter-linux, flutter-macos, flutter-windows, apple-ios, apple-macos, apple-watchos, apple-tvos, android, unity, react-native-ios, react-native-android.'
)
->param('name', null, new Text(128), 'Platform name. Max length: 128 chars.')
->param('key', '', new Text(256), 'Package name for Android or bundle ID for iOS or macOS. Max length: 256 chars.', true)
->param('store', '', new Text(256), 'App store or Google Play store ID. Max length: 256 chars.', true)
-318
View File
@@ -1,318 +0,0 @@
<?php
use Appwrite\Event\Certificate;
use Appwrite\Event\Delete;
use Appwrite\Event\Event;
use Appwrite\Extend\Exception;
use Appwrite\Network\Validator\DNS;
use Appwrite\SDK\AuthType;
use Appwrite\SDK\ContentType;
use Appwrite\SDK\Method;
use Appwrite\SDK\Response as SDKResponse;
use Appwrite\Utopia\Database\Validator\Queries\Rules;
use Appwrite\Utopia\Response;
use Utopia\App;
use Utopia\Database\Database;
use Utopia\Database\Document;
use Utopia\Database\Exception\Query as QueryException;
use Utopia\Database\Query;
use Utopia\Database\Validator\Query\Cursor;
use Utopia\Database\Validator\UID;
use Utopia\Domains\Domain;
use Utopia\Logger\Log;
use Utopia\System\System;
use Utopia\Validator\AnyOf;
use Utopia\Validator\IP;
use Utopia\Validator\Text;
App::get('/v1/proxy/rules')
->groups(['api', 'proxy'])
->desc('List rules')
->label('scope', 'rules.read')
->label('sdk', new Method(
namespace: 'proxy',
group: null,
name: 'listRules',
description: '/docs/references/proxy/list-rules.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_PROXY_RULE_LIST,
)
]
))
->param('queries', [], new Rules(), 'Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/databases#querying-documents). Maximum of ' . APP_LIMIT_ARRAY_PARAMS_SIZE . ' queries are allowed, each ' . APP_LIMIT_ARRAY_ELEMENT_SIZE . ' characters long. You may filter on the following attributes: ' . implode(', ', Rules::ALLOWED_ATTRIBUTES), true)
->param('search', '', new Text(256), 'Search term to filter your list results. Max length: 256 chars.', true)
->inject('response')
->inject('project')
->inject('dbForPlatform')
->action(function (array $queries, string $search, Response $response, Document $project, Database $dbForPlatform) {
try {
$queries = Query::parseQueries($queries);
} catch (QueryException $e) {
throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage());
}
if (!empty($search)) {
$queries[] = Query::search('search', $search);
}
$queries[] = Query::equal('projectInternalId', [$project->getSequence()]);
/**
* Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries
*/
$cursor = \array_filter($queries, function ($query) {
return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]);
});
$cursor = reset($cursor);
if ($cursor) {
/** @var Query $cursor */
$validator = new Cursor();
if (!$validator->isValid($cursor)) {
throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription());
}
$ruleId = $cursor->getValue();
$cursorDocument = $dbForPlatform->getDocument('rules', $ruleId);
if ($cursorDocument->isEmpty()) {
throw new Exception(Exception::GENERAL_CURSOR_NOT_FOUND, "Rule '{$ruleId}' for the 'cursor' value not found.");
}
$cursor->setValue($cursorDocument);
}
$filterQueries = Query::groupByType($queries)['filters'];
$rules = $dbForPlatform->find('rules', $queries);
foreach ($rules as $rule) {
$certificate = $dbForPlatform->getDocument('certificates', $rule->getAttribute('certificateId', ''));
$rule->setAttribute('logs', $certificate->getAttribute('logs', ''));
$rule->setAttribute('renewAt', $certificate->getAttribute('renewDate', ''));
}
$response->dynamic(new Document([
'rules' => $rules,
'total' => $dbForPlatform->count('rules', $filterQueries, APP_LIMIT_COUNT),
]), Response::MODEL_PROXY_RULE_LIST);
});
App::get('/v1/proxy/rules/:ruleId')
->groups(['api', 'proxy'])
->desc('Get rule')
->label('scope', 'rules.read')
->label('sdk', new Method(
namespace: 'proxy',
group: null,
name: 'getRule',
description: '/docs/references/proxy/get-rule.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_PROXY_RULE,
)
]
))
->param('ruleId', '', new UID(), 'Rule ID.')
->inject('response')
->inject('project')
->inject('dbForPlatform')
->action(function (string $ruleId, Response $response, Document $project, Database $dbForPlatform) {
$rule = $dbForPlatform->getDocument('rules', $ruleId);
if ($rule->isEmpty() || $rule->getAttribute('projectInternalId') !== $project->getSequence()) {
throw new Exception(Exception::RULE_NOT_FOUND);
}
$certificate = $dbForPlatform->getDocument('certificates', $rule->getAttribute('certificateId', ''));
$rule->setAttribute('logs', $certificate->getAttribute('logs', ''));
$rule->setAttribute('renewAt', $certificate->getAttribute('renewDate', ''));
$response->dynamic($rule, Response::MODEL_PROXY_RULE);
});
App::delete('/v1/proxy/rules/:ruleId')
->groups(['api', 'proxy'])
->desc('Delete rule')
->label('scope', 'rules.write')
->label('event', 'rules.[ruleId].delete')
->label('audits.event', 'rules.delete')
->label('audits.resource', 'rule/{request.ruleId}')
->label('sdk', new Method(
namespace: 'proxy',
group: null,
name: 'deleteRule',
description: '/docs/references/proxy/delete-rule.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_NOCONTENT,
model: Response::MODEL_NONE,
)
],
contentType: ContentType::NONE
))
->param('ruleId', '', new UID(), 'Rule ID.')
->inject('response')
->inject('project')
->inject('dbForPlatform')
->inject('queueForDeletes')
->inject('queueForEvents')
->action(function (string $ruleId, Response $response, Document $project, Database $dbForPlatform, Delete $queueForDeletes, Event $queueForEvents) {
$rule = $dbForPlatform->getDocument('rules', $ruleId);
if ($rule->isEmpty() || $rule->getAttribute('projectInternalId') !== $project->getSequence()) {
throw new Exception(Exception::RULE_NOT_FOUND);
}
$dbForPlatform->deleteDocument('rules', $rule->getId());
$queueForDeletes
->setType(DELETE_TYPE_DOCUMENT)
->setDocument($rule);
$queueForEvents->setParam('ruleId', $rule->getId());
$response->noContent();
});
App::patch('/v1/proxy/rules/:ruleId/verification')
->desc('Update rule verification status')
->groups(['api', 'proxy'])
->label('scope', 'rules.write')
->label('event', 'rules.[ruleId].update')
->label('audits.event', 'rule.update')
->label('audits.resource', 'rule/{response.$id}')
->label('sdk', new Method(
namespace: 'proxy',
group: null,
name: 'updateRuleVerification',
description: '/docs/references/proxy/update-rule-verification.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_PROXY_RULE,
)
]
))
->param('ruleId', '', new UID(), 'Rule ID.')
->inject('response')
->inject('queueForCertificates')
->inject('queueForEvents')
->inject('project')
->inject('dbForPlatform')
->inject('log')
->action(function (string $ruleId, Response $response, Certificate $queueForCertificates, Event $queueForEvents, Document $project, Database $dbForPlatform, Log $log) {
$rule = $dbForPlatform->getDocument('rules', $ruleId);
if ($rule->isEmpty() || $rule->getAttribute('projectInternalId') !== $project->getSequence()) {
throw new Exception(Exception::RULE_NOT_FOUND);
}
$targetCNAME = null;
switch ($rule->getAttribute('type', '')) {
case 'api':
// For example: fra.cloud.appwrite.io
$targetCNAME = new Domain(System::getEnv('_APP_DOMAIN_TARGET_CNAME', ''));
break;
case 'redirect':
// For example: appwrite.network
$targetCNAME = new Domain(System::getEnv('_APP_DOMAIN_SITES', ''));
break;
case 'deployment':
switch ($rule->getAttribute('deploymentResourceType', '')) {
case 'function':
// For example: fra.appwrite.run
$targetCNAME = new Domain(System::getEnv('_APP_DOMAIN_FUNCTIONS', ''));
break;
case 'site':
// For example: appwrite.network
$targetCNAME = new Domain(System::getEnv('_APP_DOMAIN_SITES', ''));
break;
default:
break;
}
// no break
default:
break;
}
$validators = [];
if (!is_null($targetCNAME)) {
if ($targetCNAME->isKnown() && !$targetCNAME->isTest()) {
$validators[] = new DNS($targetCNAME->get(), DNS::RECORD_CNAME);
}
}
if ((new IP(IP::V4))->isValid(System::getEnv('_APP_DOMAIN_TARGET_A', ''))) {
$validators[] = new DNS(System::getEnv('_APP_DOMAIN_TARGET_A', ''), DNS::RECORD_A);
}
if ((new IP(IP::V6))->isValid(System::getEnv('_APP_DOMAIN_TARGET_AAAA', ''))) {
$validators[] = new DNS(System::getEnv('_APP_DOMAIN_TARGET_AAAA', ''), DNS::RECORD_AAAA);
}
if (empty($validators)) {
throw new Exception(Exception::GENERAL_SERVER_ERROR, 'At least one of domain targets environment variable must be configured.');
}
if ($rule->getAttribute('verification') === true) {
return $response->dynamic($rule, Response::MODEL_PROXY_RULE);
}
$validator = new AnyOf($validators, AnyOf::TYPE_STRING);
$domain = new Domain($rule->getAttribute('domain', ''));
$validationStart = \microtime(true);
if (!$validator->isValid($domain->get())) {
$log->addExtra('dnsTiming', \strval(\microtime(true) - $validationStart));
$log->addTag('dnsDomain', $domain->get());
$errors = [];
foreach ($validators as $validator) {
if (!empty($validator->getLogs())) {
$errors[] = $validator->getLogs();
}
}
$error = \implode("\n", $errors);
$log->addExtra('dnsResponse', \is_array($error) ? \json_encode($error) : \strval($error));
throw new Exception(Exception::RULE_VERIFICATION_FAILED);
}
// Ensure CAA won't block certificate issuance
if (!empty(System::getEnv('_APP_DOMAIN_TARGET_CAA', ''))) {
$validationStart = \microtime(true);
$validator = new DNS(System::getEnv('_APP_DOMAIN_TARGET_CAA', ''), DNS::RECORD_CAA);
if (!$validator->isValid($domain->get())) {
$log->addExtra('dnsTimingCaa', \strval(\microtime(true) - $validationStart));
$log->addTag('dnsDomain', $domain->get());
$error = $validator->getDescription();
$log->addExtra('dnsResponse', \is_array($error) ? \json_encode($error) : \strval($error));
throw new Exception(Exception::RULE_VERIFICATION_FAILED, 'Domain verification failed because CAA records do not allow Appwrite\'s certificate issuer.');
}
}
$dbForPlatform->updateDocument('rules', $rule->getId(), $rule->setAttribute('status', 'verifying'));
// Issue a TLS certificate when domain is verified
$queueForCertificates
->setDomain(new Document([
'domain' => $rule->getAttribute('domain'),
'domainType' => $rule->getAttribute('deploymentResourceType', $rule->getAttribute('type')),
]))
->trigger();
$queueForEvents->setParam('ruleId', $rule->getId());
$certificate = $dbForPlatform->getDocument('certificates', $rule->getAttribute('certificateId', ''));
$rule->setAttribute('logs', $certificate->getAttribute('logs', ''));
$response->dynamic($rule, Response::MODEL_PROXY_RULE);
});
+4
View File
@@ -225,6 +225,8 @@ App::get('/v1/storage/buckets')
$total = $dbForProject->count('buckets', $filterQueries, APP_LIMIT_COUNT);
} catch (OrderException $e) {
throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null.");
} catch (QueryException $e) {
throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage());
}
$response->dynamic(new Document([
'buckets' => $buckets,
@@ -853,6 +855,8 @@ App::get('/v1/storage/buckets/:bucketId/files')
throw new Exception(Exception::STORAGE_BUCKET_NOT_FOUND);
} catch (OrderException $e) {
throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null.");
} catch (QueryException $e) {
throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage());
}
$response->dynamic(new Document([
+2 -1
View File
@@ -1253,7 +1253,7 @@ App::error()
}
/**
* If its not a publishable error, track usage stats. Publishable errors are >= 500 or those explicitly marked as publish=true in errors.php
* If not a publishable error, track usage stats. Publishable errors are >= 500 or those explicitly marked as publish=true in errors.php
*/
if (!$publish && $project->getId() !== 'console') {
if (!Auth::isPrivilegedUser(Authorization::getRoles())) {
@@ -1355,6 +1355,7 @@ App::error()
case 409: // Error allowed publicly
case 412: // Error allowed publicly
case 416: // Error allowed publicly
case 422: // Error allowed publicly
case 429: // Error allowed publicly
case 451: // Error allowed publicly
case 501: // Error allowed publicly
+3 -2
View File
@@ -246,10 +246,11 @@ App::init()
$role = $apiKey->getRole();
$scopes = $apiKey->getScopes();
// Disable authorization checks for API keys
Authorization::setDefaultStatus(false);
if ($apiKey->getRole() === Auth::USER_ROLE_APPS) {
// Disable authorization checks for API keys
Authorization::setDefaultStatus(false);
$user = new Document([
'$id' => '',
'status' => true,
+9 -5
View File
@@ -10,6 +10,7 @@ use Swoole\Http\Response as SwooleResponse;
use Swoole\Http\Server;
use Swoole\Process;
use Swoole\Table;
use Swoole\Timer;
use Utopia\App;
use Utopia\Audit\Audit;
use Utopia\CLI\Console;
@@ -156,11 +157,16 @@ $http->on(Constant::EVENT_WORKER_START, function ($server, $workerId) {
Console::success('Worker ' . ++$workerId . ' started successfully');
});
$http->on(Constant::EVENT_BEFORE_RELOAD, function ($server, $workerId) {
$http->on(Constant::EVENT_WORKER_STOP, function ($server, $workerId) {
Timer::clearAll();
Console::success('Worker ' . ++$workerId . ' stopped successfully');
});
$http->on(Constant::EVENT_BEFORE_RELOAD, function ($server) {
Console::success('Starting reload...');
});
$http->on(Constant::EVENT_AFTER_RELOAD, function ($server, $workerId) {
$http->on(Constant::EVENT_AFTER_RELOAD, function ($server) {
Console::success('Reload completed...');
});
@@ -550,7 +556,7 @@ $http->on(Constant::EVENT_TASK, function () use ($register, $domains) {
/** @var Utopia\Database\Database $dbForPlatform */
$dbForPlatform = $app->getResource('dbForPlatform');
Console::loop(function () use ($dbForPlatform, $domains, &$lastSyncUpdate) {
Timer::tick(DOMAIN_SYNC_TIMER * 1000, function () use ($dbForPlatform, $domains, &$lastSyncUpdate) {
try {
$time = DateTime::now();
$limit = 1000;
@@ -589,8 +595,6 @@ $http->on(Constant::EVENT_TASK, function () use ($register, $domains) {
} catch (Throwable $th) {
Console::error($th->getMessage());
}
}, DOMAIN_SYNC_TIMER, 0, function ($error) {
Console::error($error);
});
});
+15 -2
View File
@@ -31,6 +31,7 @@ const APP_LIMIT_WRITE_RATE_DEFAULT = 60; // Default maximum write rate per rate
const APP_LIMIT_WRITE_RATE_PERIOD_DEFAULT = 60; // Default maximum write rate period in seconds
const APP_LIMIT_LIST_DEFAULT = 25; // Default maximum number of items to return in list API calls
const APP_LIMIT_DATABASE_BATCH = 100; // Default maximum batch size for database operations
const APP_LIMIT_DATABASE_TRANSACTION = 100; // Default maximum operations per transaction
const APP_KEY_ACCESS = 24 * 60 * 60; // 24 hours
const APP_USER_ACCESS = 24 * 60 * 60; // 24 hours
const APP_PROJECT_ACCESS = 24 * 60 * 60; // 24 hours
@@ -55,6 +56,10 @@ const APP_DATABASE_TIMEOUT_MILLISECONDS_WORKER = 300 * 1000; // 5 minutes
const APP_DATABASE_TIMEOUT_MILLISECONDS_TASK = 300 * 1000; // 5 minutes
const APP_DATABASE_QUERY_MAX_VALUES = 500;
const APP_DATABASE_ENCRYPT_SIZE_MIN = 150;
const APP_DATABASE_TXN_TTL_MIN = 60; // 1 minute
const APP_DATABASE_TXN_TTL_MAX = 3600; // 1 hour
const APP_DATABASE_TXN_TTL_DEFAULT = 300; // 5 minutes
const APP_DATABASE_TXN_MAX_OPERATIONS = 100; // Maximum operations per transaction
const APP_STORAGE_UPLOADS = '/storage/uploads';
const APP_STORAGE_SITES = '/storage/sites';
const APP_STORAGE_FUNCTIONS = '/storage/functions';
@@ -85,6 +90,7 @@ const APP_PLATFORM_CLIENT = 'client';
const APP_PLATFORM_CONSOLE = 'console';
const APP_VCS_GITHUB_USERNAME = 'Appwrite';
const APP_VCS_GITHUB_EMAIL = 'team@appwrite.io';
const APP_BRANDED_EMAIL_BASE_TEMPLATE = 'email-base-styled';
// Database Reconnect
const DATABASE_RECONNECT_SLEEP = 2;
@@ -104,8 +110,11 @@ const BUILD_TYPE_RETRY = 'retry';
// Deletion Types
const DELETE_TYPE_DATABASES = 'databases';
const DELETE_TYPE_DOCUMENT = 'document';
const DELETE_TYPE_COLLECTIONS = 'collections';
const DELETE_TYPE_TRANSACTION = 'transaction';
const DELETE_TYPE_EXPIRED_TRANSACTIONS = 'expired_transactions';
const DELETE_TYPE_PROJECTS = 'projects';
const DELETE_TYPE_SITES = 'sites';
const DELETE_TYPE_FUNCTIONS = 'functions';
@@ -262,7 +271,6 @@ const METRIC_SITES_ID_INBOUND = 'sites.{siteInternalId}.inbound';
const METRIC_SITES_ID_OUTBOUND = 'sites.{siteInternalId}.outbound';
// Resource types
const RESOURCE_TYPE_PROJECTS = 'projects';
const RESOURCE_TYPE_FUNCTIONS = 'functions';
const RESOURCE_TYPE_SITES = 'sites';
@@ -272,10 +280,15 @@ const RESOURCE_TYPE_PROVIDERS = 'providers';
const RESOURCE_TYPE_TOPICS = 'topics';
const RESOURCE_TYPE_SUBSCRIBERS = 'subscribers';
const RESOURCE_TYPE_MESSAGES = 'messages';
const RESOURCE_TYPE_EXECUTIONS = 'executions';
// Resource types for Tokens
const TOKENS_RESOURCE_TYPE_FILES = 'files';
const TOKENS_RESOURCE_TYPE_SITES = 'sites';
const TOKENS_RESOURCE_TYPE_FUNCTIONS = 'functions';
const TOKENS_RESOURCE_TYPE_DATABASES = 'databases';
// Resource types for Schedules
const SCHEDULE_RESOURCE_TYPE_EXECUTION = 'execution';
const SCHEDULE_RESOURCE_TYPE_FUNCTION = 'function';
const SCHEDULE_RESOURCE_TYPE_MESSAGE = 'message';
+2
View File
@@ -255,6 +255,8 @@ Database::addFilter(
->find('variables', [
Query::equal('resourceInternalId', [$document->getSequence()]),
Query::equal('resourceType', $resourceType),
Query::orderAsc('resourceType'),
Query::orderAsc(),
Query::limit(APP_LIMIT_SUBQUERY),
]);
}
+43 -27
View File
@@ -4,6 +4,7 @@ use Ahc\Jwt\JWT;
use Ahc\Jwt\JWTException;
use Appwrite\Auth\Auth;
use Appwrite\Auth\Key;
use Appwrite\Databases\TransactionState;
use Appwrite\Event\Audit;
use Appwrite\Event\Build;
use Appwrite\Event\Certificate;
@@ -151,7 +152,7 @@ App::setResource('queueForMigrations', function (Publisher $publisher) {
App::setResource('queueForStatsResources', function (Publisher $publisher) {
return new StatsResources($publisher);
}, ['publisher']);
App::setResource('platforms', function (Request $request, Document $console, Document $project) {
App::setResource('platforms', function (Request $request, Document $console, Document $project, Database $dbForPlatform) {
$console->setAttribute('platforms', [ // Always allow current host
'$collection' => ID::custom('platforms'),
'name' => 'Current Host',
@@ -190,11 +191,40 @@ App::setResource('platforms', function (Request $request, Document $console, Doc
], Document::SET_TYPE_APPEND);
}
$origin = \parse_url($request->getOrigin(), PHP_URL_HOST);
if (empty($origin)) {
$origin = \parse_url($request->getReferer(), PHP_URL_HOST);
}
// Safe if rule with same project ID exists
if (!empty($origin)) {
if (System::getEnv('_APP_RULES_FORMAT') === 'md5') {
$rule = Authorization::skip(fn () => $dbForPlatform->getDocument('rules', md5($origin ?? '')));
} else {
$rule = Authorization::skip(
fn () => $dbForPlatform->find('rules', [
Query::equal('domain', [$origin]),
Query::limit(1)
])
)[0] ?? new Document();
}
if (!$rule->isEmpty() && $rule->getAttribute('projectInternalId') === $project->getSequence()) {
$project->setAttribute('platforms', [
'$collection' => ID::custom('platforms'),
'type' => Platform::TYPE_WEB,
'name' => $origin,
'hostname' => $origin,
], Document::SET_TYPE_APPEND);
}
}
return [
...$console->getAttribute('platforms', []),
...$project->getAttribute('platforms', []),
];
}, ['request', 'console', 'project']);
}, ['request', 'console', 'project', 'dbForPlatform']);
App::setResource('user', function ($mode, $project, $console, $request, $response, $dbForProject, $dbForPlatform) {
/** @var Appwrite\Utopia\Request $request */
@@ -375,7 +405,7 @@ App::setResource('dbForProject', function (Group $pools, Database $dbForPlatform
if (\in_array($dsn->getHost(), $sharedTables)) {
$database
->setSharedTables(true)
->setTenant((int)$project->getSequence())
->setTenant((int) $project->getSequence())
->setNamespace($dsn->getParam('namespace'));
} else {
$database
@@ -428,7 +458,7 @@ App::setResource('getProjectDB', function (Group $pools, Database $dbForPlatform
if (\in_array($dsn->getHost(), $sharedTables)) {
$database
->setSharedTables(true)
->setTenant((int)$project->getSequence())
->setTenant((int) $project->getSequence())
->setNamespace($dsn->getParam('namespace'));
} else {
$database
@@ -458,7 +488,7 @@ App::setResource('getLogsDB', function (Group $pools, Cache $cache) {
return function (?Document $project = null) use ($pools, $cache, &$database) {
if ($database !== null && $project !== null && !$project->isEmpty() && $project->getId() !== 'console') {
$database->setTenant((int)$project->getSequence());
$database->setTenant((int) $project->getSequence());
return $database;
}
@@ -473,7 +503,7 @@ App::setResource('getLogsDB', function (Group $pools, Cache $cache) {
// set tenant
if ($project !== null && !$project->isEmpty() && $project->getId() !== 'console') {
$database->setTenant((int)$project->getSequence());
$database->setTenant((int) $project->getSequence());
}
return $database;
@@ -501,7 +531,7 @@ App::setResource('redis', function () {
$pass = System::getEnv('_APP_REDIS_PASS', '');
$redis = new \Redis();
@$redis->pconnect($host, (int)$port);
@$redis->pconnect($host, (int) $port);
if ($pass) {
$redis->auth($pass);
}
@@ -714,7 +744,7 @@ App::setResource('schema', function ($utopia, $dbForProject) {
// NOTE: `params` and `urls` are not used internally in the `Schema::build` function below!
$params = [
'list' => function (string $databaseId, string $collectionId, array $args) {
return [ 'queries' => $args['queries']];
return ['queries' => $args['queries']];
},
'create' => function (string $databaseId, string $collectionId, array $args) {
$id = $args['id'] ?? 'unique()';
@@ -963,7 +993,7 @@ App::setResource('resourceToken', function ($project, $dbForProject, $request) {
}
$accessedAt = $token->getAttribute('accessedAt', 0);
if (empty($accessedAt) || DatabaseDateTime::formatTz(DatabaseDateTime::addSeconds(new \DateTime(), - APP_RESOURCE_TOKEN_ACCESS)) > $accessedAt) {
if (empty($accessedAt) || DatabaseDateTime::formatTz(DatabaseDateTime::addSeconds(new \DateTime(), -APP_RESOURCE_TOKEN_ACCESS)) > $accessedAt) {
$token->setAttribute('accessedAt', DatabaseDateTime::now());
Authorization::skip(fn () => $dbForProject->updateDocument('resourceTokens', $token->getId(), $token));
}
@@ -1005,24 +1035,6 @@ App::setResource('httpReferrerSafe', function (Request $request, string $httpRef
return $referrer;
}
// Safe if rule with same project ID exists
if (!empty($origin)) {
if (System::getEnv('_APP_RULES_FORMAT') === 'md5') {
$rule = Authorization::skip(fn () => $dbForPlatform->getDocument('rules', md5($origin ?? '')));
} else {
$rule = Authorization::skip(
fn () => $dbForPlatform->find('rules', [
Query::equal('domain', [$origin]),
Query::limit(1)
])
)[0] ?? new Document();
}
if (!$rule->isEmpty() && $rule->getAttribute('projectInternalId') === $project->getSequence()) {
return $referrer;
}
}
// Unsafe; Localhost is always safe for ease of local development
$origin = 'localhost';
$protocol = \parse_url($request->getOrigin($httpReferrer), PHP_URL_SCHEME);
@@ -1030,3 +1042,7 @@ App::setResource('httpReferrerSafe', function (Request $request, string $httpRef
$referrer = (!empty($protocol) ? $protocol : $request->getProtocol()) . '://' . $origin . (!empty($port) ? ':' . $port : '');
return $referrer;
}, ['request', 'httpReferrer', 'platforms', 'dbForPlatform', 'project', 'utopia']);
App::setResource('transactionState', function (Database $dbForProject) {
return new TransactionState($dbForProject);
}, ['dbForProject']);
+22 -3
View File
@@ -604,11 +604,18 @@ $server->onOpen(function (int $connection, SwooleRequest $request) use ($server,
$code = 500;
}
$message = $th->getMessage();
// sanitize 0 && 5xx errors
if (($code === 0 || $code >= 500) && !App::isDevelopment()) {
$message = 'Error: Server Error';
}
$response = [
'type' => 'error',
'data' => [
'code' => $code,
'message' => $th->getMessage()
'message' => $message
]
];
@@ -705,11 +712,23 @@ $server->onMessage(function (int $connection, string $message) use ($server, $re
throw new Exception(Exception::REALTIME_MESSAGE_FORMAT_INVALID, 'Message type is not valid.');
}
} catch (Throwable $th) {
$code = $th->getCode();
if (!is_int($code)) {
$code = 500;
}
$message = $th->getMessage();
// sanitize 0 && 5xx errors
if (($code === 0 || $code >= 500) && !App::isDevelopment()) {
$message = 'Error: Server Error';
}
$response = [
'type' => 'error',
'data' => [
'code' => $th->getCode(),
'message' => $th->getMessage()
'code' => $code,
'message' => $message
]
];
+1 -1
View File
@@ -179,7 +179,7 @@ $image = $this->getParam('image', '');
appwrite-console:
<<: *x-logging
container_name: appwrite-console
image: <?php echo $organization; ?>/console:7.0.2
image: <?php echo $organization; ?>/console:7.4.7
restart: unless-stopped
networks:
- appwrite
+2 -2
View File
@@ -52,7 +52,7 @@
"utopia-php/cache": "0.13.*",
"utopia-php/cli": "0.15.*",
"utopia-php/config": "0.2.*",
"utopia-php/database": "1.*",
"utopia-php/database": "2.*",
"utopia-php/detector": "0.1.*",
"utopia-php/domains": "0.8.*",
"utopia-php/dns": "0.3.*",
@@ -62,7 +62,7 @@
"utopia-php/image": "0.8.*",
"utopia-php/locale": "0.8.*",
"utopia-php/logger": "0.6.*",
"utopia-php/messaging": "0.18.*",
"utopia-php/messaging": "0.19.*",
"utopia-php/migration": "1.*",
"utopia-php/orchestration": "0.9.*",
"utopia-php/platform": "0.7.*",
Generated
+160 -154
View File
@@ -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": "7553e976312b0423cc31544abb91caec",
"content-hash": "568800edca746c4e8d0d50648b25f589",
"packages": [
{
"name": "adhocore/jwt",
@@ -756,24 +756,21 @@
},
{
"name": "google/protobuf",
"version": "v4.32.0",
"version": "v4.32.1",
"source": {
"type": "git",
"url": "https://github.com/protocolbuffers/protobuf-php.git",
"reference": "9a9a92ecbe9c671dc1863f6d4a91ea3ea12c8646"
"reference": "c4ed1c1f9bbc1e91766e2cd6c0af749324fe87cb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/9a9a92ecbe9c671dc1863f6d4a91ea3ea12c8646",
"reference": "9a9a92ecbe9c671dc1863f6d4a91ea3ea12c8646",
"url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/c4ed1c1f9bbc1e91766e2cd6c0af749324fe87cb",
"reference": "c4ed1c1f9bbc1e91766e2cd6c0af749324fe87cb",
"shasum": ""
},
"require": {
"php": ">=8.1.0"
},
"provide": {
"ext-protobuf": "*"
},
"require-dev": {
"phpunit/phpunit": ">=5.0.0 <8.5.27"
},
@@ -797,9 +794,9 @@
"proto"
],
"support": {
"source": "https://github.com/protocolbuffers/protobuf-php/tree/v4.32.0"
"source": "https://github.com/protocolbuffers/protobuf-php/tree/v4.32.1"
},
"time": "2025-08-14T20:00:33+00:00"
"time": "2025-09-14T05:14:52+00:00"
},
{
"name": "league/csv",
@@ -1162,20 +1159,20 @@
},
{
"name": "open-telemetry/api",
"version": "1.5.0",
"version": "1.7.0",
"source": {
"type": "git",
"url": "https://github.com/opentelemetry-php/api.git",
"reference": "7692075f486c14d8cfd37fba98a08a5667f089e5"
"reference": "610b79ad9d6d97e8368bcb6c4d42394fbb87b522"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/opentelemetry-php/api/zipball/7692075f486c14d8cfd37fba98a08a5667f089e5",
"reference": "7692075f486c14d8cfd37fba98a08a5667f089e5",
"url": "https://api.github.com/repos/opentelemetry-php/api/zipball/610b79ad9d6d97e8368bcb6c4d42394fbb87b522",
"reference": "610b79ad9d6d97e8368bcb6c4d42394fbb87b522",
"shasum": ""
},
"require": {
"open-telemetry/context": "^1.0",
"open-telemetry/context": "^1.4",
"php": "^8.1",
"psr/log": "^1.1|^2.0|^3.0",
"symfony/polyfill-php82": "^1.26"
@@ -1191,7 +1188,7 @@
]
},
"branch-alias": {
"dev-main": "1.4.x-dev"
"dev-main": "1.7.x-dev"
}
},
"autoload": {
@@ -1228,20 +1225,20 @@
"issues": "https://github.com/open-telemetry/opentelemetry-php/issues",
"source": "https://github.com/open-telemetry/opentelemetry-php"
},
"time": "2025-08-07T23:07:38+00:00"
"time": "2025-10-02T23:44:28+00:00"
},
{
"name": "open-telemetry/context",
"version": "1.3.1",
"version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/opentelemetry-php/context.git",
"reference": "438f71812242db3f196fb4c717c6f92cbc819be6"
"reference": "d4c4470b541ce72000d18c339cfee633e4c8e0cf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/opentelemetry-php/context/zipball/438f71812242db3f196fb4c717c6f92cbc819be6",
"reference": "438f71812242db3f196fb4c717c6f92cbc819be6",
"url": "https://api.github.com/repos/opentelemetry-php/context/zipball/d4c4470b541ce72000d18c339cfee633e4c8e0cf",
"reference": "d4c4470b541ce72000d18c339cfee633e4c8e0cf",
"shasum": ""
},
"require": {
@@ -1287,7 +1284,7 @@
"issues": "https://github.com/open-telemetry/opentelemetry-php/issues",
"source": "https://github.com/open-telemetry/opentelemetry-php"
},
"time": "2025-08-13T01:12:00+00:00"
"time": "2025-09-19T00:05:49+00:00"
},
{
"name": "open-telemetry/exporter-otlp",
@@ -1355,16 +1352,16 @@
},
{
"name": "open-telemetry/gen-otlp-protobuf",
"version": "1.5.0",
"version": "1.8.0",
"source": {
"type": "git",
"url": "https://github.com/opentelemetry-php/gen-otlp-protobuf.git",
"reference": "585bafddd4ae6565de154610b10a787a455c9ba0"
"reference": "673af5b06545b513466081884b47ef15a536edde"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/opentelemetry-php/gen-otlp-protobuf/zipball/585bafddd4ae6565de154610b10a787a455c9ba0",
"reference": "585bafddd4ae6565de154610b10a787a455c9ba0",
"url": "https://api.github.com/repos/opentelemetry-php/gen-otlp-protobuf/zipball/673af5b06545b513466081884b47ef15a536edde",
"reference": "673af5b06545b513466081884b47ef15a536edde",
"shasum": ""
},
"require": {
@@ -1414,27 +1411,27 @@
"issues": "https://github.com/open-telemetry/opentelemetry-php/issues",
"source": "https://github.com/open-telemetry/opentelemetry-php"
},
"time": "2025-01-15T23:07:07+00:00"
"time": "2025-09-17T23:10:12+00:00"
},
{
"name": "open-telemetry/sdk",
"version": "1.7.1",
"version": "1.9.0",
"source": {
"type": "git",
"url": "https://github.com/opentelemetry-php/sdk.git",
"reference": "52690d4b37ae4f091af773eef3c238ed2bc0aa06"
"reference": "8986bcbcbea79cb1ba9e91c1d621541ad63d6b3e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/opentelemetry-php/sdk/zipball/52690d4b37ae4f091af773eef3c238ed2bc0aa06",
"reference": "52690d4b37ae4f091af773eef3c238ed2bc0aa06",
"url": "https://api.github.com/repos/opentelemetry-php/sdk/zipball/8986bcbcbea79cb1ba9e91c1d621541ad63d6b3e",
"reference": "8986bcbcbea79cb1ba9e91c1d621541ad63d6b3e",
"shasum": ""
},
"require": {
"ext-json": "*",
"nyholm/psr7-server": "^1.1",
"open-telemetry/api": "^1.4",
"open-telemetry/context": "^1.0",
"open-telemetry/api": "^1.7",
"open-telemetry/context": "^1.4",
"open-telemetry/sem-conv": "^1.0",
"php": "^8.1",
"php-http/discovery": "^1.14",
@@ -1468,7 +1465,7 @@
]
},
"branch-alias": {
"dev-main": "1.0.x-dev"
"dev-main": "1.9.x-dev"
}
},
"autoload": {
@@ -1511,7 +1508,7 @@
"issues": "https://github.com/open-telemetry/opentelemetry-php/issues",
"source": "https://github.com/open-telemetry/opentelemetry-php"
},
"time": "2025-09-05T07:17:06+00:00"
"time": "2025-10-02T23:44:28+00:00"
},
{
"name": "open-telemetry/sem-conv",
@@ -1572,16 +1569,16 @@
},
{
"name": "paragonie/constant_time_encoding",
"version": "v2.7.0",
"version": "v2.8.2",
"source": {
"type": "git",
"url": "https://github.com/paragonie/constant_time_encoding.git",
"reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105"
"reference": "e30811f7bc69e4b5b6d5783e712c06c8eabf0226"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/52a0d99e69f56b9ec27ace92ba56897fe6993105",
"reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105",
"url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/e30811f7bc69e4b5b6d5783e712c06c8eabf0226",
"reference": "e30811f7bc69e4b5b6d5783e712c06c8eabf0226",
"shasum": ""
},
"require": {
@@ -1635,7 +1632,7 @@
"issues": "https://github.com/paragonie/constant_time_encoding/issues",
"source": "https://github.com/paragonie/constant_time_encoding"
},
"time": "2024-05-08T12:18:48+00:00"
"time": "2025-09-24T15:12:37+00:00"
},
{
"name": "paragonie/random_compat",
@@ -1930,16 +1927,16 @@
},
{
"name": "phpseclib/phpseclib",
"version": "3.0.46",
"version": "3.0.47",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
"reference": "56483a7de62a6c2a6635e42e93b8a9e25d4f0ec6"
"reference": "9d6ca36a6c2dd434765b1071b2644a1c683b385d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/56483a7de62a6c2a6635e42e93b8a9e25d4f0ec6",
"reference": "56483a7de62a6c2a6635e42e93b8a9e25d4f0ec6",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/9d6ca36a6c2dd434765b1071b2644a1c683b385d",
"reference": "9d6ca36a6c2dd434765b1071b2644a1c683b385d",
"shasum": ""
},
"require": {
@@ -2020,7 +2017,7 @@
],
"support": {
"issues": "https://github.com/phpseclib/phpseclib/issues",
"source": "https://github.com/phpseclib/phpseclib/tree/3.0.46"
"source": "https://github.com/phpseclib/phpseclib/tree/3.0.47"
},
"funding": [
{
@@ -2036,7 +2033,7 @@
"type": "tidelift"
}
],
"time": "2025-06-26T16:29:55+00:00"
"time": "2025-10-06T01:07:24+00:00"
},
{
"name": "psr/container",
@@ -2599,16 +2596,16 @@
},
{
"name": "symfony/http-client",
"version": "v7.3.3",
"version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
"reference": "333b9bd7639cbdaecd25a3a48a9d2dcfaa86e019"
"reference": "4b62871a01c49457cf2a8e560af7ee8a94b87a62"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/333b9bd7639cbdaecd25a3a48a9d2dcfaa86e019",
"reference": "333b9bd7639cbdaecd25a3a48a9d2dcfaa86e019",
"url": "https://api.github.com/repos/symfony/http-client/zipball/4b62871a01c49457cf2a8e560af7ee8a94b87a62",
"reference": "4b62871a01c49457cf2a8e560af7ee8a94b87a62",
"shasum": ""
},
"require": {
@@ -2675,7 +2672,7 @@
"http"
],
"support": {
"source": "https://github.com/symfony/http-client/tree/v7.3.3"
"source": "https://github.com/symfony/http-client/tree/v7.3.4"
},
"funding": [
{
@@ -2695,7 +2692,7 @@
"type": "tidelift"
}
],
"time": "2025-08-27T07:45:05+00:00"
"time": "2025-09-11T10:12:26+00:00"
},
{
"name": "symfony/http-client-contracts",
@@ -3296,16 +3293,16 @@
},
{
"name": "utopia-php/abuse",
"version": "1.0.0",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/abuse.git",
"reference": "c5e2232033b507a07f72180dc56d37e1872ee7be"
"reference": "cd591568791556d246d901d6aaf9935ab02c3f9a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/abuse/zipball/c5e2232033b507a07f72180dc56d37e1872ee7be",
"reference": "c5e2232033b507a07f72180dc56d37e1872ee7be",
"url": "https://api.github.com/repos/utopia-php/abuse/zipball/cd591568791556d246d901d6aaf9935ab02c3f9a",
"reference": "cd591568791556d246d901d6aaf9935ab02c3f9a",
"shasum": ""
},
"require": {
@@ -3313,7 +3310,7 @@
"ext-pdo": "*",
"ext-redis": "*",
"php": ">=8.0",
"utopia-php/database": "1.*"
"utopia-php/database": "2.*"
},
"require-dev": {
"laravel/pint": "1.*",
@@ -3341,9 +3338,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/abuse/issues",
"source": "https://github.com/utopia-php/abuse/tree/1.0.0"
"source": "https://github.com/utopia-php/abuse/tree/1.0.1"
},
"time": "2025-08-13T09:12:54+00:00"
"time": "2025-09-04T12:46:54+00:00"
},
{
"name": "utopia-php/analytics",
@@ -3393,21 +3390,21 @@
},
{
"name": "utopia-php/audit",
"version": "1.0.0",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/audit.git",
"reference": "c0ed75f4d068f1f6c2e7149a909490d4214e72bb"
"reference": "5ef26d6a2ab2db7bb86288a1a6ef970307b46f22"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/audit/zipball/c0ed75f4d068f1f6c2e7149a909490d4214e72bb",
"reference": "c0ed75f4d068f1f6c2e7149a909490d4214e72bb",
"url": "https://api.github.com/repos/utopia-php/audit/zipball/5ef26d6a2ab2db7bb86288a1a6ef970307b46f22",
"reference": "5ef26d6a2ab2db7bb86288a1a6ef970307b46f22",
"shasum": ""
},
"require": {
"php": ">=8.0",
"utopia-php/database": "1.*"
"utopia-php/database": "2.*"
},
"require-dev": {
"laravel/pint": "1.*",
@@ -3434,9 +3431,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/audit/issues",
"source": "https://github.com/utopia-php/audit/tree/1.0.0"
"source": "https://github.com/utopia-php/audit/tree/1.0.1"
},
"time": "2025-08-13T09:09:00+00:00"
"time": "2025-09-04T12:46:43+00:00"
},
{
"name": "utopia-php/cache",
@@ -3638,16 +3635,16 @@
},
{
"name": "utopia-php/database",
"version": "1.4.1",
"version": "2.3.2",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/database.git",
"reference": "b5ea4d133a1a4e747b7522e61e072289129a06f4"
"reference": "35c978ddd20b649d119296094686d3cc9fcf161f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/database/zipball/b5ea4d133a1a4e747b7522e61e072289129a06f4",
"reference": "b5ea4d133a1a4e747b7522e61e072289129a06f4",
"url": "https://api.github.com/repos/utopia-php/database/zipball/35c978ddd20b649d119296094686d3cc9fcf161f",
"reference": "35c978ddd20b649d119296094686d3cc9fcf161f",
"shasum": ""
},
"require": {
@@ -3688,9 +3685,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/database/issues",
"source": "https://github.com/utopia-php/database/tree/1.4.1"
"source": "https://github.com/utopia-php/database/tree/2.3.2"
},
"time": "2025-09-05T13:23:52+00:00"
"time": "2025-10-07T03:09:32+00:00"
},
{
"name": "utopia-php/detector",
@@ -3795,16 +3792,16 @@
},
{
"name": "utopia-php/domains",
"version": "0.8.0",
"version": "0.8.2",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/domains.git",
"reference": "650463d2a1525273eb03223c48da9fb1a768bbf7"
"reference": "caa294dcebd05c8af876c8afef3e992faccdf645"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/domains/zipball/650463d2a1525273eb03223c48da9fb1a768bbf7",
"reference": "650463d2a1525273eb03223c48da9fb1a768bbf7",
"url": "https://api.github.com/repos/utopia-php/domains/zipball/caa294dcebd05c8af876c8afef3e992faccdf645",
"reference": "caa294dcebd05c8af876c8afef3e992faccdf645",
"shasum": ""
},
"require": {
@@ -3850,9 +3847,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/domains/issues",
"source": "https://github.com/utopia-php/domains/tree/0.8.0"
"source": "https://github.com/utopia-php/domains/tree/0.8.2"
},
"time": "2025-05-16T10:03:59+00:00"
"time": "2025-10-06T09:56:54+00:00"
},
{
"name": "utopia-php/dsn",
@@ -3942,16 +3939,16 @@
},
{
"name": "utopia-php/framework",
"version": "0.33.27",
"version": "0.33.28",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/http.git",
"reference": "d9d10a895e85c8c7675220347cc6109db9d3bd37"
"reference": "5aaa94d406577b0059ad28c78022606890dc6de0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/http/zipball/d9d10a895e85c8c7675220347cc6109db9d3bd37",
"reference": "d9d10a895e85c8c7675220347cc6109db9d3bd37",
"url": "https://api.github.com/repos/utopia-php/http/zipball/5aaa94d406577b0059ad28c78022606890dc6de0",
"reference": "5aaa94d406577b0059ad28c78022606890dc6de0",
"shasum": ""
},
"require": {
@@ -3983,9 +3980,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/http/issues",
"source": "https://github.com/utopia-php/http/tree/0.33.27"
"source": "https://github.com/utopia-php/http/tree/0.33.28"
},
"time": "2025-09-07T18:40:53+00:00"
"time": "2025-09-25T10:44:24+00:00"
},
{
"name": "utopia-php/image",
@@ -4139,16 +4136,16 @@
},
{
"name": "utopia-php/messaging",
"version": "0.18.2",
"version": "0.19.0",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/messaging.git",
"reference": "0d364edacf4d4867964c7e17f653031dd39394bf"
"reference": "0b866d54e70c792a3c4f5ca9c12a6d358a31f4b8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/messaging/zipball/0d364edacf4d4867964c7e17f653031dd39394bf",
"reference": "0d364edacf4d4867964c7e17f653031dd39394bf",
"url": "https://api.github.com/repos/utopia-php/messaging/zipball/0b866d54e70c792a3c4f5ca9c12a6d358a31f4b8",
"reference": "0b866d54e70c792a3c4f5ca9c12a6d358a31f4b8",
"shasum": ""
},
"require": {
@@ -4184,22 +4181,22 @@
],
"support": {
"issues": "https://github.com/utopia-php/messaging/issues",
"source": "https://github.com/utopia-php/messaging/tree/0.18.2"
"source": "https://github.com/utopia-php/messaging/tree/0.19.0"
},
"time": "2025-07-21T18:27:03+00:00"
"time": "2025-10-14T11:46:49+00:00"
},
{
"name": "utopia-php/migration",
"version": "1.0.1",
"version": "1.1.0",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/migration.git",
"reference": "38171023efd3abe650d2abc5ac65f5df52311da6"
"reference": "6fb6f8f032cd34c3c65728a55d494adeac2ff038"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/migration/zipball/38171023efd3abe650d2abc5ac65f5df52311da6",
"reference": "38171023efd3abe650d2abc5ac65f5df52311da6",
"url": "https://api.github.com/repos/utopia-php/migration/zipball/6fb6f8f032cd34c3c65728a55d494adeac2ff038",
"reference": "6fb6f8f032cd34c3c65728a55d494adeac2ff038",
"shasum": ""
},
"require": {
@@ -4207,7 +4204,7 @@
"ext-curl": "*",
"ext-openssl": "*",
"php": ">=8.1",
"utopia-php/database": "1.*",
"utopia-php/database": "2.*",
"utopia-php/dsn": "0.2.*",
"utopia-php/framework": "0.33.*",
"utopia-php/storage": "0.18.*"
@@ -4240,9 +4237,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/migration/issues",
"source": "https://github.com/utopia-php/migration/tree/1.0.1"
"source": "https://github.com/utopia-php/migration/tree/1.1.0"
},
"time": "2025-08-28T13:41:25+00:00"
"time": "2025-09-10T05:45:30+00:00"
},
{
"name": "utopia-php/orchestration",
@@ -4569,16 +4566,16 @@
},
{
"name": "utopia-php/storage",
"version": "0.18.13",
"version": "0.18.14",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/storage.git",
"reference": "3d8ce53ae042173bf230445e996056c5f65ded22"
"reference": "4f14ec952c6f4006dd0613e55bbf7631814fbc00"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/storage/zipball/3d8ce53ae042173bf230445e996056c5f65ded22",
"reference": "3d8ce53ae042173bf230445e996056c5f65ded22",
"url": "https://api.github.com/repos/utopia-php/storage/zipball/4f14ec952c6f4006dd0613e55bbf7631814fbc00",
"reference": "4f14ec952c6f4006dd0613e55bbf7631814fbc00",
"shasum": ""
},
"require": {
@@ -4621,9 +4618,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/storage/issues",
"source": "https://github.com/utopia-php/storage/tree/0.18.13"
"source": "https://github.com/utopia-php/storage/tree/0.18.14"
},
"time": "2025-05-26T13:10:35+00:00"
"time": "2025-10-07T10:21:47+00:00"
},
{
"name": "utopia-php/swoole",
@@ -5007,16 +5004,16 @@
"packages-dev": [
{
"name": "appwrite/sdk-generator",
"version": "1.3.2",
"version": "1.4.4",
"source": {
"type": "git",
"url": "https://github.com/appwrite/sdk-generator.git",
"reference": "375a6c9b168db6fdf58fbe0d49d2261d80700b4a"
"reference": "a20b20cfd70a1879f0d0fb2b4f669aa5ed836c49"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/375a6c9b168db6fdf58fbe0d49d2261d80700b4a",
"reference": "375a6c9b168db6fdf58fbe0d49d2261d80700b4a",
"url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/a20b20cfd70a1879f0d0fb2b4f669aa5ed836c49",
"reference": "a20b20cfd70a1879f0d0fb2b4f669aa5ed836c49",
"shasum": ""
},
"require": {
@@ -5052,9 +5049,9 @@
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
"support": {
"issues": "https://github.com/appwrite/sdk-generator/issues",
"source": "https://github.com/appwrite/sdk-generator/tree/1.3.2"
"source": "https://github.com/appwrite/sdk-generator/tree/1.4.4"
},
"time": "2025-09-05T15:50:35+00:00"
"time": "2025-10-13T09:20:49+00:00"
},
{
"name": "doctrine/annotations",
@@ -5130,6 +5127,7 @@
"issues": "https://github.com/doctrine/annotations/issues",
"source": "https://github.com/doctrine/annotations/tree/2.0.2"
},
"abandoned": true,
"time": "2024-09-05T10:17:24+00:00"
},
{
@@ -5281,16 +5279,16 @@
},
{
"name": "laravel/pint",
"version": "v1.24.0",
"version": "v1.25.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/pint.git",
"reference": "0345f3b05f136801af8c339f9d16ef29e6b4df8a"
"reference": "5016e263f95d97670d71b9a987bd8996ade6d8d9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/pint/zipball/0345f3b05f136801af8c339f9d16ef29e6b4df8a",
"reference": "0345f3b05f136801af8c339f9d16ef29e6b4df8a",
"url": "https://api.github.com/repos/laravel/pint/zipball/5016e263f95d97670d71b9a987bd8996ade6d8d9",
"reference": "5016e263f95d97670d71b9a987bd8996ade6d8d9",
"shasum": ""
},
"require": {
@@ -5301,9 +5299,9 @@
"php": "^8.2.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.82.2",
"illuminate/view": "^11.45.1",
"larastan/larastan": "^3.5.0",
"friendsofphp/php-cs-fixer": "^3.87.2",
"illuminate/view": "^11.46.0",
"larastan/larastan": "^3.7.1",
"laravel-zero/framework": "^11.45.0",
"mockery/mockery": "^1.6.12",
"nunomaduro/termwind": "^2.3.1",
@@ -5314,9 +5312,6 @@
],
"type": "project",
"autoload": {
"files": [
"overrides/Runner/Parallel/ProcessFactory.php"
],
"psr-4": {
"App\\": "app/",
"Database\\Seeders\\": "database/seeders/",
@@ -5346,7 +5341,7 @@
"issues": "https://github.com/laravel/pint/issues",
"source": "https://github.com/laravel/pint"
},
"time": "2025-07-10T18:09:32+00:00"
"time": "2025-09-19T02:57:12+00:00"
},
{
"name": "matthiasmullie/minify",
@@ -6236,16 +6231,16 @@
},
{
"name": "phpunit/phpunit",
"version": "9.6.25",
"version": "9.6.29",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "049c011e01be805202d8eebedef49f769a8ec7b7"
"reference": "9ecfec57835a5581bc888ea7e13b51eb55ab9dd3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/049c011e01be805202d8eebedef49f769a8ec7b7",
"reference": "049c011e01be805202d8eebedef49f769a8ec7b7",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9ecfec57835a5581bc888ea7e13b51eb55ab9dd3",
"reference": "9ecfec57835a5581bc888ea7e13b51eb55ab9dd3",
"shasum": ""
},
"require": {
@@ -6270,7 +6265,7 @@
"sebastian/comparator": "^4.0.9",
"sebastian/diff": "^4.0.6",
"sebastian/environment": "^5.1.5",
"sebastian/exporter": "^4.0.6",
"sebastian/exporter": "^4.0.8",
"sebastian/global-state": "^5.0.8",
"sebastian/object-enumerator": "^4.0.4",
"sebastian/resource-operations": "^3.0.4",
@@ -6319,7 +6314,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.25"
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.29"
},
"funding": [
{
@@ -6343,7 +6338,7 @@
"type": "tidelift"
}
],
"time": "2025-08-20T14:38:31+00:00"
"time": "2025-09-24T06:29:11+00:00"
},
{
"name": "psr/cache",
@@ -6835,16 +6830,16 @@
},
{
"name": "sebastian/exporter",
"version": "4.0.6",
"version": "4.0.8",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
"reference": "78c00df8f170e02473b682df15bfcdacc3d32d72"
"reference": "14c6ba52f95a36c3d27c835d65efc7123c446e8c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72",
"reference": "78c00df8f170e02473b682df15bfcdacc3d32d72",
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/14c6ba52f95a36c3d27c835d65efc7123c446e8c",
"reference": "14c6ba52f95a36c3d27c835d65efc7123c446e8c",
"shasum": ""
},
"require": {
@@ -6900,15 +6895,27 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/exporter/issues",
"source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6"
"source": "https://github.com/sebastianbergmann/exporter/tree/4.0.8"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
},
{
"url": "https://liberapay.com/sebastianbergmann",
"type": "liberapay"
},
{
"url": "https://thanks.dev/u/gh/sebastianbergmann",
"type": "thanks_dev"
},
{
"url": "https://tidelift.com/funding/github/packagist/sebastian/exporter",
"type": "tidelift"
}
],
"time": "2024-03-02T06:33:00+00:00"
"time": "2025-09-24T06:03:27+00:00"
},
{
"name": "sebastian/global-state",
@@ -7491,16 +7498,16 @@
},
{
"name": "symfony/console",
"version": "v7.3.3",
"version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7"
"reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7",
"reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7",
"url": "https://api.github.com/repos/symfony/console/zipball/2b9c5fafbac0399a20a2e82429e2bd735dcfb7db",
"reference": "2b9c5fafbac0399a20a2e82429e2bd735dcfb7db",
"shasum": ""
},
"require": {
@@ -7565,7 +7572,7 @@
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v7.3.3"
"source": "https://github.com/symfony/console/tree/v7.3.4"
},
"funding": [
{
@@ -7585,7 +7592,7 @@
"type": "tidelift"
}
],
"time": "2025-08-25T06:35:40+00:00"
"time": "2025-09-22T15:31:00+00:00"
},
{
"name": "symfony/filesystem",
@@ -8128,16 +8135,16 @@
},
{
"name": "symfony/process",
"version": "v7.3.3",
"version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
"reference": "32241012d521e2e8a9d713adb0812bb773b907f1"
"reference": "f24f8f316367b30810810d4eb30c543d7003ff3b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/32241012d521e2e8a9d713adb0812bb773b907f1",
"reference": "32241012d521e2e8a9d713adb0812bb773b907f1",
"url": "https://api.github.com/repos/symfony/process/zipball/f24f8f316367b30810810d4eb30c543d7003ff3b",
"reference": "f24f8f316367b30810810d4eb30c543d7003ff3b",
"shasum": ""
},
"require": {
@@ -8169,7 +8176,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/process/tree/v7.3.3"
"source": "https://github.com/symfony/process/tree/v7.3.4"
},
"funding": [
{
@@ -8189,20 +8196,20 @@
"type": "tidelift"
}
],
"time": "2025-08-18T09:42:54+00:00"
"time": "2025-09-11T10:12:26+00:00"
},
{
"name": "symfony/string",
"version": "v7.3.3",
"version": "v7.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c"
"reference": "f96476035142921000338bad71e5247fbc138872"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/17a426cce5fd1f0901fefa9b2a490d0038fd3c9c",
"reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c",
"url": "https://api.github.com/repos/symfony/string/zipball/f96476035142921000338bad71e5247fbc138872",
"reference": "f96476035142921000338bad71e5247fbc138872",
"shasum": ""
},
"require": {
@@ -8217,7 +8224,6 @@
},
"require-dev": {
"symfony/emoji": "^7.1",
"symfony/error-handler": "^6.4|^7.0",
"symfony/http-client": "^6.4|^7.0",
"symfony/intl": "^6.4|^7.0",
"symfony/translation-contracts": "^2.5|^3.0",
@@ -8260,7 +8266,7 @@
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v7.3.3"
"source": "https://github.com/symfony/string/tree/v7.3.4"
},
"funding": [
{
@@ -8280,7 +8286,7 @@
"type": "tidelift"
}
],
"time": "2025-08-25T06:35:40+00:00"
"time": "2025-09-11T14:36:48+00:00"
},
{
"name": "textalk/websocket",
@@ -8512,7 +8518,7 @@
],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"stability-flags": {},
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
@@ -8536,5 +8542,5 @@
"platform-overrides": {
"php": "8.3"
},
"plugin-api-version": "2.3.0"
"plugin-api-version": "2.6.0"
}
+1 -1
View File
@@ -219,7 +219,7 @@ services:
appwrite-console:
<<: *x-logging
container_name: appwrite-console
image: appwrite/console:7.0.2
image: appwrite/console:7.4.7
restart: unless-stopped
networks:
- appwrite
@@ -0,0 +1,22 @@
import io.appwrite.Client;
import io.appwrite.coroutines.CoroutineCallback;
import io.appwrite.services.Account;
Client client = new Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>"); // Your project ID
Account account = new Account(client);
account.createEmailVerification(
"https://example.com", // url
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return;
}
Log.d("Appwrite", result.toString());
})
);
@@ -0,0 +1,23 @@
import io.appwrite.Client;
import io.appwrite.coroutines.CoroutineCallback;
import io.appwrite.services.Account;
Client client = new Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>"); // Your project ID
Account account = new Account(client);
account.updateEmailVerification(
"<USER_ID>", // userId
"<SECRET>", // secret
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return;
}
Log.d("Appwrite", result.toString());
})
);
@@ -20,6 +20,7 @@ databases.createDocument(
"isAdmin" to false
), // data
listOf("read("any")"), // permissions (optional)
"<TRANSACTION_ID>", // transactionId (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
@@ -0,0 +1,33 @@
import io.appwrite.Client;
import io.appwrite.coroutines.CoroutineCallback;
import io.appwrite.services.Databases;
Client client = new Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>"); // Your project ID
Databases databases = new Databases(client);
databases.createOperations(
"<TRANSACTION_ID>", // transactionId
listOf(
{
"action": "create",
"databaseId": "<DATABASE_ID>",
"collectionId": "<COLLECTION_ID>",
"documentId": "<DOCUMENT_ID>",
"data": {
"name": "Walter O'Brien"
}
}
), // operations (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return;
}
Log.d("Appwrite", result.toString());
})
);
@@ -0,0 +1,22 @@
import io.appwrite.Client;
import io.appwrite.coroutines.CoroutineCallback;
import io.appwrite.services.Databases;
Client client = new Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>"); // Your project ID
Databases databases = new Databases(client);
databases.createTransaction(
60, // ttl (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return;
}
Log.d("Appwrite", result.toString());
})
);
@@ -15,6 +15,7 @@ databases.decrementDocumentAttribute(
"", // attribute
0, // value (optional)
0, // min (optional)
"<TRANSACTION_ID>", // transactionId (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
@@ -12,6 +12,7 @@ databases.deleteDocument(
"<DATABASE_ID>", // databaseId
"<COLLECTION_ID>", // collectionId
"<DOCUMENT_ID>", // documentId
"<TRANSACTION_ID>", // transactionId (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
@@ -0,0 +1,22 @@
import io.appwrite.Client;
import io.appwrite.coroutines.CoroutineCallback;
import io.appwrite.services.Databases;
Client client = new Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>"); // Your project ID
Databases databases = new Databases(client);
databases.deleteTransaction(
"<TRANSACTION_ID>", // transactionId
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return;
}
Log.d("Appwrite", result.toString());
})
);
@@ -13,6 +13,7 @@ databases.getDocument(
"<COLLECTION_ID>", // collectionId
"<DOCUMENT_ID>", // documentId
listOf(), // queries (optional)
"<TRANSACTION_ID>", // transactionId (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
@@ -0,0 +1,22 @@
import io.appwrite.Client;
import io.appwrite.coroutines.CoroutineCallback;
import io.appwrite.services.Databases;
Client client = new Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>"); // Your project ID
Databases databases = new Databases(client);
databases.getTransaction(
"<TRANSACTION_ID>", // transactionId
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return;
}
Log.d("Appwrite", result.toString());
})
);
@@ -15,6 +15,7 @@ databases.incrementDocumentAttribute(
"", // attribute
0, // value (optional)
0, // max (optional)
"<TRANSACTION_ID>", // transactionId (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
@@ -12,6 +12,7 @@ databases.listDocuments(
"<DATABASE_ID>", // databaseId
"<COLLECTION_ID>", // collectionId
listOf(), // queries (optional)
"<TRANSACTION_ID>", // transactionId (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
@@ -0,0 +1,22 @@
import io.appwrite.Client;
import io.appwrite.coroutines.CoroutineCallback;
import io.appwrite.services.Databases;
Client client = new Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>"); // Your project ID
Databases databases = new Databases(client);
databases.listTransactions(
listOf(), // queries (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return;
}
Log.d("Appwrite", result.toString());
})
);
@@ -14,6 +14,7 @@ databases.updateDocument(
"<DOCUMENT_ID>", // documentId
mapOf( "a" to "b" ), // data (optional)
listOf("read("any")"), // permissions (optional)
"<TRANSACTION_ID>", // transactionId (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
@@ -0,0 +1,24 @@
import io.appwrite.Client;
import io.appwrite.coroutines.CoroutineCallback;
import io.appwrite.services.Databases;
Client client = new Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>"); // Your project ID
Databases databases = new Databases(client);
databases.updateTransaction(
"<TRANSACTION_ID>", // transactionId
false, // commit (optional)
false, // rollback (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return;
}
Log.d("Appwrite", result.toString());
})
);
@@ -14,6 +14,7 @@ databases.upsertDocument(
"<DOCUMENT_ID>", // documentId
mapOf( "a" to "b" ), // data
listOf("read("any")"), // permissions (optional)
"<TRANSACTION_ID>", // transactionId (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
@@ -0,0 +1,33 @@
import io.appwrite.Client;
import io.appwrite.coroutines.CoroutineCallback;
import io.appwrite.services.TablesDB;
Client client = new Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>"); // Your project ID
TablesDB tablesDB = new TablesDB(client);
tablesDB.createOperations(
"<TRANSACTION_ID>", // transactionId
listOf(
{
"action": "create",
"databaseId": "<DATABASE_ID>",
"tableId": "<TABLE_ID>",
"rowId": "<ROW_ID>",
"data": {
"name": "Walter O'Brien"
}
}
), // operations (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return;
}
Log.d("Appwrite", result.toString());
})
);
@@ -20,6 +20,7 @@ tablesDB.createRow(
"isAdmin" to false
), // data
listOf("read("any")"), // permissions (optional)
"<TRANSACTION_ID>", // transactionId (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
@@ -0,0 +1,22 @@
import io.appwrite.Client;
import io.appwrite.coroutines.CoroutineCallback;
import io.appwrite.services.TablesDB;
Client client = new Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>"); // Your project ID
TablesDB tablesDB = new TablesDB(client);
tablesDB.createTransaction(
60, // ttl (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return;
}
Log.d("Appwrite", result.toString());
})
);
@@ -15,6 +15,7 @@ tablesDB.decrementRowColumn(
"", // column
0, // value (optional)
0, // min (optional)
"<TRANSACTION_ID>", // transactionId (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
@@ -12,6 +12,7 @@ tablesDB.deleteRow(
"<DATABASE_ID>", // databaseId
"<TABLE_ID>", // tableId
"<ROW_ID>", // rowId
"<TRANSACTION_ID>", // transactionId (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
@@ -0,0 +1,22 @@
import io.appwrite.Client;
import io.appwrite.coroutines.CoroutineCallback;
import io.appwrite.services.TablesDB;
Client client = new Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>"); // Your project ID
TablesDB tablesDB = new TablesDB(client);
tablesDB.deleteTransaction(
"<TRANSACTION_ID>", // transactionId
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return;
}
Log.d("Appwrite", result.toString());
})
);
@@ -13,6 +13,7 @@ tablesDB.getRow(
"<TABLE_ID>", // tableId
"<ROW_ID>", // rowId
listOf(), // queries (optional)
"<TRANSACTION_ID>", // transactionId (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
@@ -0,0 +1,22 @@
import io.appwrite.Client;
import io.appwrite.coroutines.CoroutineCallback;
import io.appwrite.services.TablesDB;
Client client = new Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>"); // Your project ID
TablesDB tablesDB = new TablesDB(client);
tablesDB.getTransaction(
"<TRANSACTION_ID>", // transactionId
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return;
}
Log.d("Appwrite", result.toString());
})
);
@@ -15,6 +15,7 @@ tablesDB.incrementRowColumn(
"", // column
0, // value (optional)
0, // max (optional)
"<TRANSACTION_ID>", // transactionId (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
@@ -12,6 +12,7 @@ tablesDB.listRows(
"<DATABASE_ID>", // databaseId
"<TABLE_ID>", // tableId
listOf(), // queries (optional)
"<TRANSACTION_ID>", // transactionId (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
@@ -0,0 +1,22 @@
import io.appwrite.Client;
import io.appwrite.coroutines.CoroutineCallback;
import io.appwrite.services.TablesDB;
Client client = new Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>"); // Your project ID
TablesDB tablesDB = new TablesDB(client);
tablesDB.listTransactions(
listOf(), // queries (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return;
}
Log.d("Appwrite", result.toString());
})
);
@@ -14,6 +14,7 @@ tablesDB.updateRow(
"<ROW_ID>", // rowId
mapOf( "a" to "b" ), // data (optional)
listOf("read("any")"), // permissions (optional)
"<TRANSACTION_ID>", // transactionId (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
@@ -0,0 +1,24 @@
import io.appwrite.Client;
import io.appwrite.coroutines.CoroutineCallback;
import io.appwrite.services.TablesDB;
Client client = new Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>"); // Your project ID
TablesDB tablesDB = new TablesDB(client);
tablesDB.updateTransaction(
"<TRANSACTION_ID>", // transactionId
false, // commit (optional)
false, // rollback (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return;
}
Log.d("Appwrite", result.toString());
})
);
@@ -14,6 +14,7 @@ tablesDB.upsertRow(
"<ROW_ID>", // rowId
mapOf( "a" to "b" ), // data (optional)
listOf("read("any")"), // permissions (optional)
"<TRANSACTION_ID>", // transactionId (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
@@ -0,0 +1,13 @@
import io.appwrite.Client
import io.appwrite.coroutines.CoroutineCallback
import io.appwrite.services.Account
val client = Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>") // Your project ID
val account = Account(client)
val result = account.createEmailVerification(
url = "https://example.com",
)
@@ -0,0 +1,14 @@
import io.appwrite.Client
import io.appwrite.coroutines.CoroutineCallback
import io.appwrite.services.Account
val client = Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>") // Your project ID
val account = Account(client)
val result = account.updateEmailVerification(
userId = "<USER_ID>",
secret = "<SECRET>",
)
@@ -20,4 +20,5 @@ val result = databases.createDocument(
"isAdmin" to false
),
permissions = listOf("read("any")"), // (optional)
transactionId = "<TRANSACTION_ID>", // (optional)
)
@@ -0,0 +1,24 @@
import io.appwrite.Client
import io.appwrite.coroutines.CoroutineCallback
import io.appwrite.services.Databases
val client = Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>") // Your project ID
val databases = Databases(client)
val result = databases.createOperations(
transactionId = "<TRANSACTION_ID>",
operations = listOf(
{
"action": "create",
"databaseId": "<DATABASE_ID>",
"collectionId": "<COLLECTION_ID>",
"documentId": "<DOCUMENT_ID>",
"data": {
"name": "Walter O'Brien"
}
}
), // (optional)
)
@@ -0,0 +1,13 @@
import io.appwrite.Client
import io.appwrite.coroutines.CoroutineCallback
import io.appwrite.services.Databases
val client = Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>") // Your project ID
val databases = Databases(client)
val result = databases.createTransaction(
ttl = 60, // (optional)
)
@@ -15,4 +15,5 @@ val result = databases.decrementDocumentAttribute(
attribute = "",
value = 0, // (optional)
min = 0, // (optional)
transactionId = "<TRANSACTION_ID>", // (optional)
)
@@ -12,4 +12,5 @@ val result = databases.deleteDocument(
databaseId = "<DATABASE_ID>",
collectionId = "<COLLECTION_ID>",
documentId = "<DOCUMENT_ID>",
transactionId = "<TRANSACTION_ID>", // (optional)
)
@@ -0,0 +1,13 @@
import io.appwrite.Client
import io.appwrite.coroutines.CoroutineCallback
import io.appwrite.services.Databases
val client = Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>") // Your project ID
val databases = Databases(client)
val result = databases.deleteTransaction(
transactionId = "<TRANSACTION_ID>",
)
@@ -13,4 +13,5 @@ val result = databases.getDocument(
collectionId = "<COLLECTION_ID>",
documentId = "<DOCUMENT_ID>",
queries = listOf(), // (optional)
transactionId = "<TRANSACTION_ID>", // (optional)
)
@@ -0,0 +1,13 @@
import io.appwrite.Client
import io.appwrite.coroutines.CoroutineCallback
import io.appwrite.services.Databases
val client = Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>") // Your project ID
val databases = Databases(client)
val result = databases.getTransaction(
transactionId = "<TRANSACTION_ID>",
)
@@ -15,4 +15,5 @@ val result = databases.incrementDocumentAttribute(
attribute = "",
value = 0, // (optional)
max = 0, // (optional)
transactionId = "<TRANSACTION_ID>", // (optional)
)
@@ -12,4 +12,5 @@ val result = databases.listDocuments(
databaseId = "<DATABASE_ID>",
collectionId = "<COLLECTION_ID>",
queries = listOf(), // (optional)
transactionId = "<TRANSACTION_ID>", // (optional)
)
@@ -0,0 +1,13 @@
import io.appwrite.Client
import io.appwrite.coroutines.CoroutineCallback
import io.appwrite.services.Databases
val client = Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>") // Your project ID
val databases = Databases(client)
val result = databases.listTransactions(
queries = listOf(), // (optional)
)
@@ -14,4 +14,5 @@ val result = databases.updateDocument(
documentId = "<DOCUMENT_ID>",
data = mapOf( "a" to "b" ), // (optional)
permissions = listOf("read("any")"), // (optional)
transactionId = "<TRANSACTION_ID>", // (optional)
)
@@ -0,0 +1,15 @@
import io.appwrite.Client
import io.appwrite.coroutines.CoroutineCallback
import io.appwrite.services.Databases
val client = Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>") // Your project ID
val databases = Databases(client)
val result = databases.updateTransaction(
transactionId = "<TRANSACTION_ID>",
commit = false, // (optional)
rollback = false, // (optional)
)
@@ -14,4 +14,5 @@ val result = databases.upsertDocument(
documentId = "<DOCUMENT_ID>",
data = mapOf( "a" to "b" ),
permissions = listOf("read("any")"), // (optional)
transactionId = "<TRANSACTION_ID>", // (optional)
)
@@ -0,0 +1,24 @@
import io.appwrite.Client
import io.appwrite.coroutines.CoroutineCallback
import io.appwrite.services.TablesDB
val client = Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>") // Your project ID
val tablesDB = TablesDB(client)
val result = tablesDB.createOperations(
transactionId = "<TRANSACTION_ID>",
operations = listOf(
{
"action": "create",
"databaseId": "<DATABASE_ID>",
"tableId": "<TABLE_ID>",
"rowId": "<ROW_ID>",
"data": {
"name": "Walter O'Brien"
}
}
), // (optional)
)
@@ -20,4 +20,5 @@ val result = tablesDB.createRow(
"isAdmin" to false
),
permissions = listOf("read("any")"), // (optional)
transactionId = "<TRANSACTION_ID>", // (optional)
)
@@ -0,0 +1,13 @@
import io.appwrite.Client
import io.appwrite.coroutines.CoroutineCallback
import io.appwrite.services.TablesDB
val client = Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setProject("<YOUR_PROJECT_ID>") // Your project ID
val tablesDB = TablesDB(client)
val result = tablesDB.createTransaction(
ttl = 60, // (optional)
)

Some files were not shown because too many files have changed in this diff Show More