Compare commits

..
Author SHA1 Message Date
Jake BarnbyandGitHub f43cbaf1a8 Update src/Appwrite/Platform/Workers/Migrations.php 2025-08-29 02:48:31 +12:00
ArnabChatterjee20k bef0aff7c9 optimised the memory usage by resource aggregation 2025-08-28 19:59:48 +05:30
ArnabChatterjee20k e2575e7360 linting 2025-08-28 19:21:11 +05:30
ArnabChatterjee20k f067d1fadf updated reset of the stats usage worker to reset metrics 2025-08-28 19:14:14 +05:30
ArnabChatterjee20k 743bcceb56 updated migration version 2025-08-28 19:13:24 +05:30
ArnabChatterjee20k a809832f05 lint 2025-08-28 19:10:00 +05:30
ArnabChatterjee20k 0737c78cb5 added processing of migration resource stats 2025-08-28 19:06:18 +05:30
Matej BačoandGitHub 8a76979ba8 Merge pull request #9147 from JoshiJoshiJoshi/feat-extend-function-headers
Feat: Add executionId and client IP to function headers
2025-08-27 10:10:59 +02:00
Khushboo VermaandGitHub c19122e97d Merge branch '1.8.x' into feat-extend-function-headers 2025-08-27 13:10:38 +05:30
Matej BačoandGitHub e7157b831a Merge pull request #10391 from appwrite/chore-update-method-in-docs
Update default method in description
2025-08-27 09:34:46 +02:00
Khushboo Verma a81d980334 Resolve merge conflicts 2025-08-27 12:54:22 +05:30
Khushboo Verma 1063b5979b Update default method in description 2025-08-27 12:51:42 +05:30
Matej BačoandGitHub 82e12d4fcd Merge pull request #10379 from appwrite/feat-add-execution-and-log-response-headers
Add execution id and log id to response headers
2025-08-27 09:16:28 +02:00
Khushboo Verma bca1996d99 Merge branch '1.7.x' into feat-extend-function-headers 2025-08-27 12:40:09 +05:30
Khushboo Verma c087449725 Fix schedule execution test 2025-08-27 12:39:38 +05:30
Khushboo VermaandGitHub 2d497cbdd5 Merge branch '1.8.x' into feat-add-execution-and-log-response-headers 2025-08-27 11:58:18 +05:30
Jake BarnbyandGitHub d3d226363e Merge pull request #10390 from appwrite/chore-update-cli
Update CLI
2025-08-27 17:58:29 +12:00
Jake Barnby 71a8eaf48b Update CLI 2025-08-27 17:19:13 +12:00
Jake BarnbyandGitHub b783d81b7e Merge pull request #10389 from appwrite/fix-request-filter
Fix request filter
2025-08-27 17:18:34 +12:00
Jake Barnby 4daad1b775 Ignore relationships that are not available 2025-08-27 16:48:08 +12:00
Jake Barnby 9b453e79ac Merge remote-tracking branch 'origin/1.7.x' into 1.8.x
# Conflicts:
#	src/Appwrite/Platform/Modules/Console/Http/Resources/Get.php
2025-08-27 16:30:11 +12:00
Jake Barnby f4c56ad757 Format 2025-08-27 16:21:29 +12:00
Jake BarnbyandGitHub 43e6bf5a2e Merge pull request #10382 from appwrite/update-union-pay-1.8.x
chore: update union china pay to just unionpay
2025-08-27 16:13:30 +12:00
Jake Barnby 55a2f2d1fa Merge remote-tracking branch 'origin/1.8.x' into fix-request-filter 2025-08-27 16:10:54 +12:00
Jake BarnbyandGitHub 4d0ca798a7 Merge pull request #10387 from appwrite/fix-scopes
Array scopes
2025-08-27 16:10:38 +12:00
Jake Barnby 0e9cdc68b1 Bump console 2025-08-27 16:10:10 +12:00
Jake Barnby 2111aab8ed Fix relationship request filter 2025-08-27 16:09:56 +12:00
Jake BarnbyandGitHub a37eef4928 Merge pull request #10388 from appwrite/fix-sequence-removal
Fix sequence removal
2025-08-27 15:36:02 +12:00
Jake Barnby 76db65583d Fix GQL test 2025-08-27 15:21:23 +12:00
Jake Barnby 1f2d659d76 Format 2025-08-27 14:58:22 +12:00
Jake BarnbyandGitHub acfacb526a Merge branch '1.8.x' into fix-sequence-removal 2025-08-27 14:52:27 +12:00
Jake BarnbyandGitHub 24e4207ba6 Merge branch '1.8.x' into fix-scopes 2025-08-27 14:52:01 +12:00
Jake BarnbyandGitHub ca9e697ca3 Merge pull request #10386 from appwrite/fix-domain-valdiator
Fix domain validator
2025-08-27 14:51:50 +12:00
Jake Barnby 4d675530d6 Remove response filter 2025-08-27 14:47:40 +12:00
Jake Barnby c1676bcffd Array scopes 2025-08-27 14:43:34 +12:00
Jake BarnbyandGitHub c31b72c3e9 Merge branch '1.8.x' into fix-domain-valdiator 2025-08-27 14:25:02 +12:00
Jake BarnbyandGitHub e71beeee51 Merge pull request #10383 from appwrite/copilot/fix-e24d8527-9979-4c83-bbee-437ac6c4d440
Apply sequence integer casting and attribute cleanup fixes to Row model, TablesDB tests, and document processing
2025-08-27 14:22:54 +12:00
Jake Barnby 35579bfda1 Fix domain validator 2025-08-27 14:21:22 +12:00
Steven Nguyen b57bef2d0c chore: fix lint error 2025-08-26 15:11:27 -07:00
Steven Nguyen 737e2f8624 fix: Remove $sequence attribute from documents on create and update
Including attribute can cause a invalid structure error as the incoming data may be an int but the database expects a string.
2025-08-26 15:10:23 -07:00
copilot-swe-agent[bot]andstnguyen90 bfd8b554cd Add $tenant attribute removal to Action.php processDocument method
Co-authored-by: stnguyen90 <1477010+stnguyen90@users.noreply.github.com>
2025-08-26 20:37:33 +00:00
copilot-swe-agent[bot]andstnguyen90 6763b8ecb6 Apply sequence integer casting fix to Row.php and add test assertion
Co-authored-by: stnguyen90 <1477010+stnguyen90@users.noreply.github.com>
2025-08-26 20:06:26 +00:00
copilot-swe-agent[bot] 61f9bd90e5 Initial plan 2025-08-26 20:01:34 +00:00
Chirag Aggarwal abc7757871 fomat 2025-08-26 21:45:53 +05:30
Chirag Aggarwal 005f405507 chore: update specs 2025-08-26 21:40:43 +05:30
Chirag Aggarwal 505cff5b9f chore: update union china pay to just unionpay 2025-08-26 21:38:55 +05:30
Luke B. SilverandGitHub 9fc39ddfce Merge pull request #10377 from appwrite/add-deprecated-versions-account
chore: add replacewith and deprecated since to account methods
2025-08-26 16:45:55 +01:00
Jake Barnby b7633969b4 Fix request filter for selections 2025-08-27 03:44:27 +12:00
Khushboo VermaandGitHub f0146d5e01 Merge branch '1.8.x' into feat-add-execution-and-log-response-headers 2025-08-26 19:20:53 +05:30
Jake Barnby c9f9db722b Fix spaces in templates 2025-08-27 01:40:32 +12:00
Jake Barnby 28e7f12932 Update CLI version 2025-08-27 01:34:03 +12:00
Khushboo Verma aac98b2ec7 Update function domain test 2025-08-26 18:56:26 +05:30
Khushboo VermaandGitHub e537337b8e Merge branch '1.8.x' into feat-add-execution-and-log-response-headers 2025-08-26 18:41:18 +05:30
Khushboo Verma f611893558 Remove execution headers from allowlist 2025-08-26 18:40:18 +05:30
Jake Barnby 34658aac9b Fix demo paths 2025-08-27 01:09:34 +12:00
Khushboo Verma 463fbe7d82 Merge branch '1.8.x' into feat-add-execution-and-log-response-headers 2025-08-26 18:37:33 +05:30
Jake Barnby d74bda7bd9 Update specs 2025-08-27 01:06:06 +12:00
Khushboo Verma 8df305576c Add execution id and log id to response headers 2025-08-26 18:34:43 +05:30
Chirag Aggarwal 53f778dc12 remove instance of 2025-08-26 17:43:11 +05:30
Chirag Aggarwal 6acde0b335 format 2025-08-26 17:38:05 +05:30
Chirag Aggarwal 5a35f1313b fix: version, remove boolean 2025-08-26 17:33:49 +05:30
Chirag Aggarwal 26228e96d9 chore: add replacewith and deprecated since to updatePhoneSession and updateMagicURLSession 2025-08-26 17:21:47 +05:30
Matej Bačo 88459923b0 Merge branch 'fix-domain-validator' into 1.7.x 2025-08-26 13:04:32 +02:00
Matej Bačo be240d9840 Merge branch 'fix-domain-validator' of https://github.com/appwrite/appwrite into fix-domain-validator 2025-08-26 13:04:15 +02:00
Matej BačoandGitHub c34f9cb0e1 Merge pull request #10374 from appwrite/fix-domain-validator
Fix: Domain validator
2025-08-26 13:00:44 +02:00
Matej Bačo 901a924af7 PR review changes 2025-08-26 12:53:25 +02:00
Matej BačoandGitHub 5c4a489162 Merge branch '1.7.x' into fix-domain-validator 2025-08-26 12:35:28 +02:00
Matej Bačo afc0a908ef Add new tests 2025-08-26 12:34:14 +02:00
Matej Bačo 01ea91dd97 fix tests 2025-08-26 12:26:38 +02:00
Luke B. SilverandGitHub 6a20ca1c26 Merge pull request #10372 from appwrite/fix-union-pay
chore: switch Union China Pay to just Union Pay
2025-08-26 11:18:34 +01:00
Matej Bačo 6ee95186ce Apply improved domain validator 2025-08-26 11:48:54 +02:00
Jake Barnby ba401ea42e Update docs 2025-08-26 21:29:44 +12:00
Khushboo Verma 753175d796 Replace x-real-ip with ->getIP() 2025-08-26 13:59:46 +05:30
Chirag Aggarwal e57e9142ab update specs 2025-08-26 13:13:26 +05:30
Chirag Aggarwal 735cc77a92 chore: switch Union China Pay to just Union Pay 2025-08-26 13:04:08 +05:30
Khushboo Verma 2ef79d5300 Merge branch '1.7.x' into feat-extend-function-headers 2025-08-26 12:56:22 +05:30
Khushboo Verma 1458505201 Address PR comments 2025-08-26 12:55:51 +05:30
Jake Barnby 976a578c27 Update base image 2025-08-26 17:34:11 +12:00
Jake Barnby 2601cc9604 Merge remote-tracking branch 'origin/1.7.x' into 1.8.x 2025-08-26 15:40:15 +12:00
Jake Barnby f85bf446e6 Sync docs 2025-08-26 15:40:03 +12:00
Luke B. SilverandGitHub 5436c16f85 Merge pull request #10370 from appwrite/chore-allow-publisherMessaging-override
chore: allow publisher messaging override in scheduler
2025-08-25 18:43:21 +01:00
loks0n 52e148761c chore: allow publisherMessaging override 2025-08-25 18:25:19 +01:00
Jake Barnby abf282b2de Merge remote-tracking branch 'origin/1.7.x' into 1.8.x
# Conflicts:
#	app/init/resources.php
#	composer.lock
2025-08-26 04:18:39 +12:00
Jake Barnby c4e5219ac7 Update lock 2025-08-26 04:17:51 +12:00
Luke B. SilverandGitHub 571b954587 Merge pull request #10369 from appwrite/deploy-fix-queue-health
deploy: fix queue health
2025-08-25 16:57:46 +01:00
loks0n 4bc3d89b15 deploy: fix queue health 2025-08-25 16:37:26 +01:00
Khushboo Verma 2876fad322 Merge branch '1.7.x' into feat-extend-function-headers 2025-08-25 12:50:59 +05:30
Jake BarnbyandGitHub 17bcfd44b7 Merge pull request #10365 from appwrite/1.7.x-bump
Bump 1.7.x
2025-08-25 19:17:33 +12:00
fogelito efa6682f47 bump 2025-08-25 10:00:59 +03:00
Jake Barnby 7aafa59399 Update generator 2025-08-25 17:14:27 +12:00
Jake Barnby 04f7def624 Merge remote-tracking branch 'origin/1.7.x' into 1.8.x
# Conflicts:
#	app/controllers/api/databases.php
#	tests/e2e/Services/Databases/Legacy/DatabasesBase.php
2025-08-25 16:05:57 +12:00
Jake BarnbyandGitHub d826e5c705 Merge pull request #10364 from appwrite/upsert-documnet-no-change-1.8
Upsert document no change
2025-08-25 16:03:33 +12:00
Jake BarnbyandGitHub 2dbe23844d Merge pull request #10363 from appwrite/upsert-document-no-change
Fix Upsert No change
2025-08-25 16:03:27 +12:00
fogelito ad96379623 Restrict array list 2025-08-24 18:09:38 +03:00
fogelito 959db2ea02 Restrict array list 2025-08-24 18:08:12 +03:00
fogelito ba79dda788 Check no change 2025-08-24 17:39:29 +03:00
fogelito d2dedf97bb Run tests 2025-08-24 11:48:15 +03:00
fogelito c7a769274e Fix nothing was updated 2025-08-24 11:33:10 +03:00
Jake Barnby 038290adef Specs + doc regen 2025-08-23 22:52:20 +12:00
Jake Barnby 3fbda66e6c Fix deprecation messages 2025-08-23 21:36:02 +12:00
Jake Barnby 4a18ae7cd1 Fix typo 2025-08-23 21:34:41 +12:00
Jake Barnby 33e166d7a6 Fix attribute refs 2025-08-23 21:34:35 +12:00
Jake Barnby aad6b51d8e Update generator + specs 2025-08-23 14:33:06 +12:00
Jake Barnby 5bbb806c02 Merge remote-tracking branch 'origin/1.7.x' into 1.8.x 2025-08-23 11:04:35 +12:00
Steven NguyenandGitHub 4a6a8053c4 Merge pull request #10329 from appwrite/fix-token-expiry
fix - incorrect file token expiry
2025-08-22 15:32:43 -07:00
Matej BačoandGitHub 50cad9a334 Merge pull request #10359 from appwrite/main
Sync main into 1.7.x
2025-08-22 19:27:35 +02:00
Matej BačoandGitHub f55b00faaf Merge pull request #10358 from appwrite/chore-use-assets-fonts
Chore: Utilize assets server for fonts
2025-08-22 12:29:41 +02:00
Matej Bačo 81301ea89d Utilize assets server for fonts 2025-08-22 12:12:33 +02:00
Matej BačoandGitHub 7e81f09747 Merge pull request #10357 from appwrite/feat-execution-deployment-id
Feat: execution.deploymentId response model
2025-08-22 11:48:08 +02:00
Matej Bačo 011a9cb7a3 Fix tests 2025-08-22 11:31:14 +02:00
Matej Bačo ebf48655a0 Formatting fix 2025-08-22 11:16:18 +02:00
Matej Bačo d7159ef483 Add deploymentId to execution response model 2025-08-22 11:11:37 +02:00
Jake BarnbyGitHubcoderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
355fd47c62 Update app/controllers/general.php
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-08-22 19:24:01 +12:00
Jake BarnbyandGitHub 45e31f2b1c Merge pull request #10348 from appwrite/fix-users-events
Fix users events & missed publisher logic for Functions
2025-08-22 19:17:43 +12:00
Darshan 4b6d25259f update: comment. 2025-08-22 11:49:54 +05:30
Darshan 07edb4e756 revert: database listener changes. 2025-08-22 11:40:32 +05:30
Darshan 60093bf3a0 fix: publisher consumers for functions. 2025-08-22 10:09:55 +05:30
EvanandGitHub 6225ad680e Merge branch '1.7.x' into fix-token-expiry 2025-08-21 11:04:30 -07:00
Evan 0371e488e9 test fix/lint 2025-08-21 11:02:53 -07:00
EvanandGitHub cfbbb4af50 Merge pull request #10354 from appwrite/cursor/update-token-tests-with-jwt-decode-75df
Update token tests with jwt decode
2025-08-21 09:35:27 -07:00
Cursor Agentandevanleair e6e7a728a0 Enhance token JWT validation in TokensConsoleClientTest with comprehensive checks
Co-authored-by: evanleair <evanleair@gmail.com>
2025-08-21 16:10:06 +00:00
DarshanandGitHub f747305f1e Merge branch '1.8.x' into fix-users-events 2025-08-21 18:19:55 +05:30
Jake Barnby fd13250b6d Update lock 2025-08-22 00:42:19 +12:00
Darshan 6df096da8b bump: lock. 2025-08-21 18:08:12 +05:30
Darshan fec1d03c15 Merge branch '1.8.x' into fix-users-events 2025-08-21 18:07:26 +05:30
Jake Barnby 557bffb350 Merge remote-tracking branch 'origin/1.7.x' into 1.8.x
# Conflicts:
#	composer.lock
2025-08-22 00:35:12 +12:00
DarshanandGitHub 267fe584a3 Merge branch '1.8.x' into fix-users-events 2025-08-21 17:59:43 +05:30
Darshan a1d74710d1 Merge branch '1.7.x' into 'fix-users-events'. 2025-08-21 17:52:38 +05:30
Matej BačoandGitHub d68e394c60 Merge pull request #10352 from appwrite/chore-improve-cookie-tests
Chore: Add cookies test
2025-08-21 14:00:55 +02:00
Matej Bačo 669844ba28 Add cookie test for site execution 2025-08-21 13:27:55 +02:00
Matej BačoandGitHub 5f59c4de24 Merge pull request #10350 from appwrite/fix-event-template-config
Fix event template configuration issues
2025-08-21 13:11:01 +02:00
Matej BačoandGitHub 36049cf9aa Merge pull request #9773 from samikshaaagarwal/samiksha/9510
Truncate logs in function worker
2025-08-21 12:58:57 +02:00
Jake BarnbyandGitHub f42964ffee Merge pull request #10346 from appwrite/fix-casing
Fix casing
2025-08-21 21:47:01 +12:00
Jake Barnby 5c0007abaa Update lock 2025-08-21 21:32:39 +12:00
Aditya OberaiandGitHub f7532bd9ae Fix event template configuration 2025-08-21 14:37:00 +05:30
Khushboo Verma 10eed78b73 Test truncation in one test 2025-08-21 14:32:48 +05:30
Khushboo Verma bc47ac7caa Truncate logs and errors from beginning 2025-08-21 12:49:31 +05:30
Darshan ef47618bf3 update: user create events logic. 2025-08-21 12:20:50 +05:30
Jake Barnby 6410e481d6 Lint 2025-08-21 18:29:39 +12:00
Khushboo Verma 3250542670 Merge branch '1.7.x' into fix-function-log-truncation-error 2025-08-21 11:53:48 +05:30
Steven NguyenandGitHub 6dc02756fd Merge pull request #10347 from appwrite/main
Sync main into 1.7.x
2025-08-20 17:16:47 -07:00
2beb6ba0cf Update tests/e2e/Services/Tokens/TokensConsoleClientTest.php
Co-authored-by: Steven Nguyen <1477010+stnguyen90@users.noreply.github.com>
2025-08-20 12:51:25 -07:00
Jake Barnby 842dce2659 Update tablesDb -> tablesDB 2025-08-21 02:20:05 +12:00
Jake Barnby 1b4f2f2275 Fix acronym methods, deprecate old versions 2025-08-21 02:08:27 +12:00
Khushboo Verma 1bd6b6452c Fix PR changes 2025-08-20 18:53:55 +05:30
Jake Barnby ef45001cec Fix base list doc desc 2025-08-21 01:15:53 +12:00
Jake Barnby 75bbd1b47a Fix inline doc refs 2025-08-21 01:15:30 +12:00
Jake Barnby 2b536b749d Fix docs refs 2025-08-21 01:15:13 +12:00
Mayank AgarwalandKhushboo Verma 7e292813bc Truncate logs in function worker 2025-08-20 18:43:32 +05:30
Mayank AgarwalandKhushboo Verma 492ff10ee7 Add async=false solution 2025-08-20 18:41:00 +05:30
Mayank AgarwalandKhushboo Verma 41743b1299 Add solution for function domain 2025-08-20 18:34:59 +05:30
Khushboo Verma ed16808930 Add executionId and client IP to execution headers 2025-08-20 16:35:40 +05:30
Jake Barnby 1505696d9c Increase wait timeout 2025-08-20 21:55:44 +12:00
Matej BačoandGitHub 7eaecd896e Merge pull request #10343 from appwrite/fix-external-dependencies
Fix: Remove external dependnecies (unnessessary)
2025-08-20 11:53:06 +02:00
Matej Bačo ca75ac3722 PR review improvements 2025-08-20 11:32:06 +02:00
Matej Bačo 79a0b6b6c3 Fix during QA 2025-08-20 11:21:21 +02:00
Matej Bačo bd4bb06c7e Remove bunnyCDN and Alpine external dependency 2025-08-20 11:11:39 +02:00
Matej BačoandGitHub e005276fe5 Merge pull request #10338 from appwrite/chore-upgrade-http
Chore: Upgrade HTTP
2025-08-20 10:20:17 +02:00
Jake Barnby 920ffefd0c Docs 2025-08-20 19:22:48 +12:00
Jake Barnby 50d61679bf Dart/flutter changelog/getting started cleanup 2025-08-20 19:21:51 +12:00
Jake Barnby cec5777ddb Update specs 2025-08-20 19:21:30 +12:00
Jake Barnby 2b425e25ac Fix inc/dec auth types 2025-08-20 18:46:55 +12:00
Jake Barnby 3286b1283d Fix tests 2025-08-20 18:21:37 +12:00
Jake Barnby 800cab185b Specs 2025-08-20 18:17:27 +12:00
Jake Barnby bf6e97b950 Fix docs 2025-08-20 18:13:41 +12:00
Jake Barnby 42a7f909a2 Fix workflow 2025-08-20 18:01:18 +12:00
Jake Barnby aa63a8d698 Fix lint 2025-08-20 17:50:35 +12:00
Jake Barnby 73a1e18a43 Add back dart example 2025-08-20 17:22:03 +12:00
Jake Barnby a2d7c3c138 Remove redundant param 2025-08-20 16:53:22 +12:00
Jake Barnby 8b905d0388 Update platforms 2025-08-20 16:53:07 +12:00
Steven NguyenandGitHub acc739b6a6 Merge pull request #10117 from appwrite/clarify-userid-param
Clarify userId param in endpoints that create accounts
2025-08-19 16:47:17 -07:00
Jake Barnby 82cb491a3c Fix attribute update refactor collision 2025-08-20 02:56:44 +12:00
Matej Bačo 52af439cac Fix backwards comptibility 2025-08-19 16:43:31 +02:00
Jake BarnbyandGitHub c88f1ed7ca Merge pull request #10333 from appwrite/feat-tablesdb
Feat tablesdb
2025-08-20 02:38:00 +12:00
Jake Barnby c1f2886e4a Pin framework to stable 2025-08-20 02:17:30 +12:00
Jake Barnby c636081e64 Fix specs 2025-08-20 02:05:14 +12:00
Jake Barnby e3807366a9 Fix service refs 2025-08-20 01:56:12 +12:00
Jake Barnby d899ed9b68 Update specs 2025-08-20 01:44:01 +12:00
Jake Barnby b965d1077c More fix namespace 2025-08-20 01:41:46 +12:00
Jake Barnby 14f8f9af4e Fix namespace 2025-08-20 01:39:18 +12:00
Jake Barnby 619092a8b2 Fix namespace 2025-08-20 01:34:27 +12:00
Jake Barnby a53be858a8 Fix email gql 2025-08-20 01:33:01 +12:00
Jake Barnby b298f0c67a Fix namespace 2025-08-20 01:29:38 +12:00
Jake Barnby bf161fad42 Format 2025-08-20 01:24:14 +12:00
Jake Barnby 855771bb6c Fix specs 2025-08-20 01:23:11 +12:00
Jake Barnby e3c932686a Fix references 2025-08-20 01:23:01 +12:00
Jake Barnby 2ade66d85e Casing 2025-08-20 01:02:58 +12:00
Matej Bačo 6f5d038340 adjust tests to new domain validator 2025-08-19 14:42:41 +02:00
Jake Barnby f27ac986fa Fix un-fixed ref 2025-08-19 23:14:36 +12:00
Jake Barnby 6f170fdb6d Fix static user refs 2025-08-19 23:13:47 +12:00
Matej Bačo 79375ad5b5 Reapply "http fix to double slashes and new domain validator"
This reverts commit 09383f068f.
2025-08-19 13:13:41 +02:00
Matej Bačo 09383f068f Revert "http fix to double slashes and new domain validator"
This reverts commit 8672e6f158.
2025-08-19 13:13:28 +02:00
Matej Bačo 8672e6f158 http fix to double slashes and new domain validator 2025-08-19 13:13:04 +02:00
Jake Barnby 64fd27ee06 Fix tablesDB GQL payloads for DB resource 2025-08-19 23:03:36 +12:00
Jake Barnby 6d2832831c Remove weird static/const mix 2025-08-19 23:03:18 +12:00
Jake Barnby c9641f72a8 Remove invalid test 2025-08-19 23:02:17 +12:00
Jake Barnby 8e900c6b04 Fix update/upsert set collection ID 2025-08-19 23:01:22 +12:00
Jake Barnby c323435dad Remove filter 2025-08-19 22:09:30 +12:00
Jake BarnbyandGitHub d5eaed8873 Merge pull request #10336 from appwrite/database-0.71.15
Databaselib  bump 0.71.15
2025-08-19 21:32:32 +12:00
fogelito 2718deac0f database 0.71.15 2025-08-19 12:09:18 +03:00
Jake Barnby 42d6a7b00d Fix hardcoded collectionId 2025-08-19 20:08:13 +12:00
EvanandGitHub 9f548af7dd Merge branch '1.7.x' into fix-token-expiry 2025-08-18 16:55:28 -07:00
Evan 3ed5699876 Better jwt handling and tests 2025-08-18 10:57:15 -07:00
Evan f5f6ec71de Address stnguyen90 feedback: simplify JWT logic and fix test expectations
- Remove excessive logic and 1-minute expiration hack as requested
- Simplify token expiry handling to directly use existing  value
- Remove problematic test that creates tokens with past expiry dates
- Update existing test to properly verify JWT expiration behavior
- Use proper base64url decoding for JWT payload testing
2025-08-18 09:39:19 -07:00
Ebenezer Don 3f55b46165 clarify userId behavior for magic-url and phone tokens 2025-08-18 17:18:12 +01:00
Ebenezer DonandGitHub 0553a36d1f Merge branch 'main' into clarify-userid-param 2025-08-18 16:33:24 +01:00
Jake Barnby 0e334e64f9 Revert stop on failure 2025-08-19 03:24:08 +12:00
Jake Barnby e58091d86b Fix tests 2025-08-19 03:16:55 +12:00
Jake Barnby d3d669e539 Test fixes 2025-08-19 02:57:52 +12:00
Jake Barnby 425d424e7c Fix index context 2025-08-19 02:17:31 +12:00
Jake Barnby 68bf4a6f44 Fix usage 2025-08-19 01:50:32 +12:00
Jake Barnby c1e37b9130 Fix dangling tests 2025-08-19 01:24:51 +12:00
Jake Barnby 434c199510 Fix spec gen 2025-08-19 01:24:41 +12:00
Jake Barnby 1771934af6 Fix context 2025-08-19 01:19:34 +12:00
Jake Barnby 6dd058d6e1 Update tests 2025-08-19 00:38:23 +12:00
Jake Barnby 867a950abd Update registry 2025-08-19 00:38:14 +12:00
Jake Barnby f67b90e376 TablesDB CRUD 2025-08-19 00:38:02 +12:00
Jake Barnby cfeced03e4 Move usage 2025-08-19 00:37:41 +12:00
Jake Barnby 372317bee7 Add log route 2025-08-19 00:37:11 +12:00
Jake Barnby 71a97a106a Remove db multimethod 2025-08-19 00:36:33 +12:00
Jake Barnby 4493131d86 Fix collection context 2025-08-19 00:34:28 +12:00
Jake Barnby c86b35fbb3 Add usage routes 2025-08-18 22:29:43 +12:00
Matej BačoandGitHub 84a1d77876 Merge pull request #10332 from appwrite/fix-preview-fonts
Fix: Improve font reliability
2025-08-18 12:22:41 +02:00
Matej Bačo 976427c9a4 Improve fonts 2025-08-18 11:58:45 +02:00
Jake Barnby ca03be5e41 Test fixes 2025-08-18 21:16:01 +12:00
Jake Barnby e4228fe2e5 Fix imports 2025-08-18 21:02:55 +12:00
Matej BačoandGitHub 6c46039103 Merge pull request #10331 from appwrite/fix-cicd-tests-sites
Improve sites test for stability
2025-08-18 10:41:23 +02:00
Jake Barnby 66a44dcd36 Fix test paths 2025-08-18 20:03:29 +12:00
Jake Barnby ea9cbd2f2c Switch removable attributes 2025-08-18 19:52:55 +12:00
Jake Barnby 34cf5a7c2f Lint 2025-08-18 19:26:21 +12:00
Jake Barnby 010e0fad7a Namespace fix 2025-08-18 19:22:50 +12:00
Jake Barnby 702058d657 Update workflow 2025-08-18 19:16:27 +12:00
Jake Barnby 670e869855 Migrate to TablesDB 2025-08-18 19:15:49 +12:00
Jake Barnby 51806082c4 Merge remote-tracking branch 'origin/1.7.x' into 1.8.x 2025-08-18 17:37:32 +12:00
Matej Bačo ad87a085a7 Improve font reliability 2025-08-17 14:13:33 +02:00
Matej Bačo a754763884 formatting fix 2025-08-16 19:08:07 +02:00
Matej Bačo aed97c545b Improve flakyness 2025-08-16 19:03:21 +02:00
Matej Bačo 746a76dc8e Add extensive build logging 2025-08-16 17:11:27 +02:00
Matej Bačo cab422510a Speed-up critical failures in assertEventuelly 2025-08-16 16:59:05 +02:00
Matej Bačo 95e54d0571 Fix tests 2025-08-16 16:12:41 +02:00
Matej Bačo 53772df202 Improve ci/cd logging 2025-08-16 14:14:38 +02:00
Matej BačoandGitHub 78c5d5aeff Merge pull request #10302 from appwrite/chore-remove-logging
Chore: Remove temp logging
2025-08-16 13:07:12 +02:00
Matej Bačo 051b99e9ce Linter fix 2025-08-16 12:49:58 +02:00
Evan 3a9353a78b linter 2025-08-15 17:35:49 -07:00
Evan eec62752ed fix - incorrect file token expiry 2025-08-15 16:27:48 -07:00
Jake Barnby c63e3bd75b Merge remote-tracking branch 'origin/1.7.x' into 1.8.x 2025-08-16 00:06:32 +12:00
Matej BačoandGitHub 2ffdfd10d4 Merge pull request #10328 from appwrite/fix-dynamic-key-expiration
Feat: Increase dynamic API key expiration
2025-08-15 13:02:16 +02:00
Matej Bačo 23bc39254c Increase dynamic API key expiration 2025-08-15 12:29:34 +02:00
Jake BarnbyandGitHub ad53fb2e43 Merge pull request #10321 from appwrite/dat-606
Added internal file param to handle upload to internal bucket
2025-08-15 22:13:59 +12:00
bc7e240626 updated the the description of the internal files
Co-authored-by: Jake Barnby <jakeb994@gmail.com>
2025-08-15 15:04:16 +05:30
Jake Barnby 3871833b84 Fix path 2025-08-15 20:18:37 +12:00
Jake Barnby dace50d9b7 Add missing attribute/index update events 2025-08-15 20:03:38 +12:00
Jake Barnby 71ed39e17e Revert "Fix index delete event"
This reverts commit c69ec97802.
2025-08-15 20:01:06 +12:00
Jake Barnby a5e9fbf362 Add grids upsert event 2025-08-15 19:54:01 +12:00
Jake Barnby c69ec97802 Fix index delete event 2025-08-15 19:51:42 +12:00
Jake Barnby 3bb5400939 Update 3rd aprty deps + fix tests 2025-08-15 19:49:52 +12:00
Jake Barnby de0b4dd733 Lint + lock 2025-08-15 19:39:59 +12:00
Jake Barnby 77af36a723 Port tests 2025-08-15 19:35:37 +12:00
Jake Barnby b38ac866b8 Merge remote-tracking branch 'origin/1.7.x' into 1.8.x
# Conflicts:
#	app/controllers/api/databases.php
#	composer.lock
2025-08-15 19:28:49 +12:00
Jake Barnby 64820ad5f5 Port inc/dec fixes 2025-08-15 19:28:22 +12:00
Steven NguyenandGitHub bb407a6493 Merge pull request #10317 from appwrite/fix-missing-upsert-event
fix: add missing upsert event
2025-08-14 14:35:03 -07:00
ArnabChatterjee20k 4fcaeaec0e Add internal file upload support and authorization checks in migrations 2025-08-14 18:10:00 +05:30
Jake BarnbyandGitHub 405aa7f4ba Merge pull request #10318 from appwrite/fix-catches
Fix uncaught invalid arg
2025-08-14 20:13:10 +12:00
Jake Barnby ff6c2b076d Port desc fixes 2025-08-14 19:40:43 +12:00
Jake Barnby 8455ded051 Fix events 2025-08-14 19:34:52 +12:00
Jake Barnby b4b0d66af4 Fix test 2025-08-14 19:32:30 +12:00
Jake Barnby 1e9d153110 Fix uncaught invalid arg 2025-08-14 19:22:38 +12:00
Jake Barnby 6043cc2fc9 Add upsert event 2025-08-14 17:34:56 +12:00
Matej BačoandGitHub 8a7a894b65 Merge pull request #10313 from Veera-mulge/change-desc
Update README.md
2025-08-13 14:53:06 +02:00
Jake Barnby 34709912bf Merge remote-tracking branch 'origin/1.7.x' into 1.8.x
# Conflicts:
#	app/config/specs/open-api3-latest-client.json
#	app/config/specs/open-api3-latest-console.json
#	app/config/specs/open-api3-latest-server.json
#	app/config/specs/swagger2-latest-client.json
#	app/config/specs/swagger2-latest-console.json
#	app/config/specs/swagger2-latest-server.json
#	app/controllers/api/databases.php
#	composer.lock
#	src/Appwrite/SDK/Specification/Format/OpenAPI3.php
2025-08-14 00:20:16 +12:00
Jake BarnbyandGitHub 6a3ea1feec Merge pull request #10310 from appwrite/update-remove-experimental-warnings
chore: remove experiment warnings from bulk methods
2025-08-14 00:15:35 +12:00
Chirag Aggarwal 9860cd46e3 update specs 2025-08-13 17:09:51 +05:30
Jake BarnbyandGitHub 8beb80d5b4 Merge pull request #10312 from appwrite/chore-update-dep
Update package
2025-08-13 22:34:24 +12:00
VeereshandGitHub f2f0ef2656 Update README.md 2025-08-13 15:54:13 +05:30
Jake Barnby 72253f3de2 Update package 2025-08-13 22:11:51 +12:00
Chirag Aggarwal 5f3dc7cb75 chore: add method desc and demo 2025-08-13 15:16:48 +05:30
Chirag Aggarwal a9d3f01485 update specs 2025-08-13 13:39:13 +05:30
Chirag Aggarwal af58d3f1d2 chore: remove experiment warnings from bulk methods 2025-08-13 13:37:00 +05:30
Matej Bačo 13a14d1b05 Remove temp logging 2025-08-12 10:39:50 +02:00
Steven NguyenandGitHub e9601ec546 Merge pull request #10286 from appwrite/feat-add-native-apple-sign-in-template
Add native sign in with Apple function template
2025-08-11 08:12:42 -07:00
Aditya Oberai 890be673d9 formatting 2025-08-08 15:55:50 +00:00
Aditya Oberai 93db3a9979 remove users scope for lemon squeezy payments template 2025-08-08 14:30:36 +00:00
Aditya Oberai 7929684c94 fix variable types and description 2025-08-08 14:20:41 +00:00
Aditya Oberai d85cd09d1a Update lemon squeezy payments template scopes 2025-08-08 14:19:21 +00:00
Aditya Oberai a217bd1d0f Add native sign in with Apple function template 2025-08-08 14:04:20 +00:00
Eldad A. FuxandGitHub 131f189b7b Merge pull request #10272 from appwrite/LauraDuRy-patch-6
Update README.md
2025-08-06 14:28:05 +01:00
Laura Du RyandGitHub ec8faccf29 Update README.md 2025-08-06 12:28:24 +02:00
Matej BačoandGitHub d275291b3f Merge pull request #10259 from Veera-mulge/change-desc
Update README.md
2025-08-04 15:15:31 +02:00
VeereshandGitHub 5095f7555d Update README.md 2025-08-04 16:53:07 +05:30
VeereshandGitHub 0bf4aa2ce5 Update README.md 2025-08-04 16:50:11 +05:30
Luke B. SilverandGitHub 01067aaf74 Merge pull request #10241 from Veera-mulge/change-desc
Update README file to remove the announcement
2025-07-31 10:08:46 +01:00
VeereshandGitHub b323b3a110 Update README.md 2025-07-31 14:36:08 +05:30
Ebenezer Don a2261b8ad0 Clarify userId param in endpoints that create accounts 2025-07-07 13:22:52 +01:00
3715 changed files with 100562 additions and 67887 deletions
+58 -2
View File
@@ -134,6 +134,14 @@ jobs:
- name: Run General Tests
run: docker compose exec -T appwrite test /usr/src/code/tests/e2e/General --debug
- name: Failure Logs
if: failure()
run: |
echo "=== Appwrite Worker Builds Logs ==="
docker compose logs appwrite-worker-builds
echo "=== OpenRuntimes Executor Logs ==="
docker compose logs openruntimes-executor
e2e_service_test:
name: E2E Service Test
runs-on: ubuntu-latest
@@ -146,7 +154,7 @@ jobs:
Avatars,
Console,
Databases/Legacy,
Databases/Grids,
Databases/TablesDB,
Functions,
FunctionsSchedule,
GraphQL,
@@ -202,6 +210,14 @@ jobs:
-e _APP_DATABASE_SHARED_TABLES_V1 \
appwrite test /usr/src/code/tests/e2e/Services/${{ matrix.service }} --debug --exclude-group devKeys,screenshots
- name: Failure Logs
if: failure()
run: |
echo "=== Appwrite Worker Builds Logs ==="
docker compose logs appwrite-worker-builds
echo "=== OpenRuntimes Executor Logs ==="
docker compose logs openruntimes-executor
e2e_shared_mode_test:
name: E2E Shared Mode Service Test
runs-on: ubuntu-latest
@@ -216,7 +232,7 @@ jobs:
Avatars,
Console,
Databases/Legacy,
Databases/Grids,
Databases/TablesDB,
Functions,
FunctionsSchedule,
GraphQL,
@@ -282,6 +298,14 @@ jobs:
-e _APP_DATABASE_SHARED_TABLES_V1 \
appwrite test /usr/src/code/tests/e2e/Services/${{ matrix.service }} --debug --exclude-group devKeys,screenshots
- name: Failure Logs
if: failure()
run: |
echo "=== Appwrite Worker Builds Logs ==="
docker compose logs appwrite-worker-builds
echo "=== OpenRuntimes Executor Logs ==="
docker compose logs openruntimes-executor
e2e_dev_keys:
name: E2E Service Test (Dev Keys)
runs-on: ubuntu-latest
@@ -315,6 +339,14 @@ jobs:
-e _APP_DATABASE_SHARED_TABLES_V1 \
appwrite test /usr/src/code/tests/e2e/Services/Projects --debug --group=devKeys
- name: Failure Logs
if: failure()
run: |
echo "=== Appwrite Worker Builds Logs ==="
docker compose logs appwrite-worker-builds
echo "=== OpenRuntimes Executor Logs ==="
docker compose logs openruntimes-executor
e2e_dev_keys_shared_mode:
name: E2E Shared Mode Service Test (Dev Keys)
runs-on: ubuntu-latest
@@ -362,6 +394,14 @@ jobs:
-e _APP_DATABASE_SHARED_TABLES_V1 \
appwrite test /usr/src/code/tests/e2e/Services/Projects --debug --group=devKeys
- name: Failure Logs
if: failure()
run: |
echo "=== Appwrite Worker Builds Logs ==="
docker compose logs appwrite-worker-builds
echo "=== OpenRuntimes Executor Logs ==="
docker compose logs openruntimes-executor
e2e_screenshots_keys:
name: E2E Service Test (Site Screenshots)
runs-on: ubuntu-latest
@@ -396,6 +436,14 @@ jobs:
-e _APP_DATABASE_SHARED_TABLES_V1 \
appwrite test /usr/src/code/tests/e2e/Services/Sites --debug --group=screenshots
- name: Failure Logs
if: failure()
run: |
echo "=== Appwrite Worker Builds Logs ==="
docker compose logs appwrite-worker-builds
echo "=== OpenRuntimes Executor Logs ==="
docker compose logs openruntimes-executor
e2e_screenshots_shared_mode:
name: E2E Shared Mode Service Test (Site Screenshots)
runs-on: ubuntu-latest
@@ -443,3 +491,11 @@ jobs:
-e _APP_DATABASE_SHARED_TABLES \
-e _APP_DATABASE_SHARED_TABLES_V1 \
appwrite test /usr/src/code/tests/e2e/Services/Sites --debug --group=screenshots
- name: Failure Logs
if: failure()
run: |
echo "=== Appwrite Worker Builds Logs ==="
docker compose logs appwrite-worker-builds
echo "=== OpenRuntimes Executor Logs ==="
docker compose logs openruntimes-executor
+1 -1
View File
@@ -12,7 +12,7 @@ RUN composer install --ignore-platform-reqs --optimize-autoloader \
--no-plugins --no-scripts --prefer-dist \
`if [ "$TESTING" != "true" ]; then echo "--no-dev"; fi`
FROM appwrite/base:0.10.3 AS final
FROM appwrite/base:0.10.4 AS final
LABEL maintainer="team@appwrite.io"
+2 -1
View File
@@ -1,5 +1,6 @@
> We just announced Timestamp Overrides for Appwrite Databases - [Learn more](https://appwrite.io/blog/post/announcing-timestamp-overrides)
> We just announced Auto-increment support for Appwrite Databases - [Learn more](https://appwrite.io/blog/post/announcing-auto-increment-support)
> Appwrite Cloud is now Generally Available - [Learn more](https://appwrite.io/cloud-ga)
> [Get started with Appwrite](https://apwr.dev/appcloud)
+6
View File
@@ -194,12 +194,18 @@ CLI::setResource('publisher', function (Group $pools) {
CLI::setResource('publisherDatabases', function (BrokerPool $publisher) {
return $publisher;
}, ['publisher']);
CLI::setResource('publisherFunctions', function (BrokerPool $publisher) {
return $publisher;
}, ['publisher']);
CLI::setResource('publisherMigrations', function (BrokerPool $publisher) {
return $publisher;
}, ['publisher']);
CLI::setResource('publisherStatsUsage', function (BrokerPool $publisher) {
return $publisher;
}, ['publisher']);
CLI::setResource('publisherMessaging', function (BrokerPool $publisher) {
return $publisher;
}, ['publisher']);
CLI::setResource('queueForStatsUsage', function (Publisher $publisher) {
return new StatsUsage($publisher);
}, ['publisher']);
+1 -1
View File
@@ -13,7 +13,7 @@ return [
'mastercard' => ['name' => 'Mastercard', 'path' => __DIR__ . '/credit-cards/mastercard.png'],
'naranja' => ['name' => 'Naranja', 'path' => __DIR__ . '/credit-cards/naranja.png'],
'targeta-shopping' => ['name' => 'Tarjeta Shopping', 'path' => __DIR__ . '/credit-cards/tarjeta-shopping.png'],
'union-china-pay' => ['name' => 'Union China Pay', 'path' => __DIR__ . '/credit-cards/union-china-pay.png'],
'unionpay' => ['name' => 'Union Pay', 'path' => __DIR__ . '/credit-cards/unionpay.png'],
'visa' => ['name' => 'Visa', 'path' => __DIR__ . '/credit-cards/visa.png'],
'mir' => ['name' => 'MIR', 'path' => __DIR__ . '/credit-cards/mir.png'],
'maestro' => ['name' => 'Maestro', 'path' => __DIR__ . '/credit-cards/maestro.png'],

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 78 KiB

+3 -3
View File
@@ -56,7 +56,7 @@ return [
'type' => Database::VAR_STRING,
'size' => 128,
'required' => false,
'default' => 'grids',
'default' => 'tablesdb',
'signed' => true,
'array' => false,
'filters' => [],
@@ -1927,7 +1927,7 @@ return [
'$id' => ID::custom('errors'),
'type' => Database::VAR_STRING,
'format' => '',
'size' => 1000000,
'size' => APP_FUNCTION_ERROR_LENGTH_LIMIT,
'signed' => true,
'required' => false,
'default' => null,
@@ -1938,7 +1938,7 @@ return [
'$id' => ID::custom('logs'),
'type' => Database::VAR_STRING,
'format' => '',
'size' => 1000000,
'size' => APP_FUNCTION_LOG_LENGTH_LIMIT,
'signed' => true,
'required' => false,
'default' => null,
+35 -17
View File
@@ -106,12 +106,15 @@ return [
'create' => [
'$description' => 'This event triggers when a row is created.',
],
'delete' => [
'$description' => 'This event triggers when a row is deleted.'
],
'update' => [
'$description' => 'This event triggers when a row is updated.'
],
'upsert' => [
'$description' => 'This event triggers when a document is upserted.',
],
'delete' => [
'$description' => 'This event triggers when a row is deleted.'
],
],
'indexes' => [
'$model' => Response::MODEL_COLUMN_INDEX,
@@ -120,6 +123,9 @@ return [
'create' => [
'$description' => 'This event triggers when an index is created.',
],
'update' => [
'$description' => 'This event triggers when an index is updated.',
],
'delete' => [
'$description' => 'This event triggers when an index is deleted.'
]
@@ -133,17 +139,20 @@ return [
],
'delete' => [
'$description' => 'This event triggers when an column is deleted.'
]
],
'update' => [
'$description' => 'This event triggers when a column is created.',
],
],
'create' => [
'$description' => 'This event triggers when a table is created.'
],
'update' => [
'$description' => 'This event triggers when a table is updated.',
],
'delete' => [
'$description' => 'This event triggers when a table is deleted.',
],
'update' => [
'$description' => 'This event triggers when a table is updated.',
]
],
'collections' => [
'$model' => Response::MODEL_COLLECTION,
@@ -156,12 +165,15 @@ return [
'create' => [
'$description' => 'This event triggers when a document is created.',
],
'delete' => [
'$description' => 'This event triggers when a document is deleted.'
],
'update' => [
'$description' => 'This event triggers when a document is updated.'
],
'upsert' => [
'$description' => 'This event triggers when a document is upserted.',
],
'delete' => [
'$description' => 'This event triggers when a document is deleted.'
],
],
'indexes' => [
'$model' => Response::MODEL_INDEX,
@@ -172,7 +184,10 @@ return [
],
'delete' => [
'$description' => 'This event triggers when an index is deleted.'
]
],
'update' => [
'$description' => 'This event triggers when a column is created.',
],
],
'attributes' => [
'$model' => Response::MODEL_ATTRIBUTE,
@@ -181,6 +196,9 @@ return [
'create' => [
'$description' => 'This event triggers when an attribute is created.',
],
'update' => [
'$description' => 'This event triggers when a column is created.',
],
'delete' => [
'$description' => 'This event triggers when an attribute is deleted.'
]
@@ -188,22 +206,22 @@ return [
'create' => [
'$description' => 'This event triggers when a collection is created.'
],
'update' => [
'$description' => 'This event triggers when a collection is updated.',
],
'delete' => [
'$description' => 'This event triggers when a collection is deleted.',
],
'update' => [
'$description' => 'This event triggers when a collection is updated.',
]
],
'create' => [
'$description' => 'This event triggers when a database is created.'
],
'update' => [
'$description' => 'This event triggers when a database is updated.',
],
'delete' => [
'$description' => 'This event triggers when a database is deleted.',
],
'update' => [
'$description' => 'This event triggers when a database is updated.',
]
],
'buckets' => [
'$model' => Response::MODEL_BUCKET,
@@ -1,9 +1,24 @@
<!doctype html>
<html>
<head>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Poppins:wght@500;600&display=swap">
<link rel="preconnect" href="https://assets.appwrite.io/" crossorigin>
<style>
@font-face {
font-family: 'Inter';
src: url('https://assets.appwrite.io/fonts/inter/Inter-Regular.woff2') format('woff2');
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'DM Sans';
src: url('https://assets.appwrite.io/fonts/dm-sans/dm-sans-v16-latin-600.woff2') format('woff2');
font-weight: 600;
font-style: normal;
font-display: swap;
}
</style>
<style>
@media (max-width:500px) {
.mobile-full-width {
+34 -52
View File
@@ -1,9 +1,32 @@
<!doctype html>
<html>
<head>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Poppins:wght@500;600&display=swap">
<link rel="preconnect" href="https://assets.appwrite.io/" crossorigin>
<style>
@font-face {
font-family: 'Inter';
src: url('https://assets.appwrite.io/fonts/inter/Inter-Regular.woff2') format('woff2');
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'DM Sans';
src: url('https://assets.appwrite.io/fonts/dm-sans/dm-sans-v16-latin-600.woff2') format('woff2');
font-weight: 600;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Poppins';
src: url('https://assets.appwrite.io/fonts/poppins/poppins-v23-latin-regular.woff2') format('woff2');
font-weight: 400;
font-style: normal;
font-display: swap;
}
</style>
<style>
body {
padding: 32px;
@@ -15,6 +38,7 @@
background-color: #ffffff;
margin: 0;
padding: 0;
line-height: 150%;
}
a {
color: currentColor;
@@ -67,58 +91,16 @@
border: none;
border-top: 1px solid #e8e9f0;
}
h* {
font-family: 'Poppins', sans-serif;
}
p {
margin-bottom: 10px;
}
</style>
</head>
<head>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Poppins:wght@500;600&display=swap"
rel="stylesheet">
<style>
a { color:currentColor; word-break: break-all; }
body {
background-color: #ffffff;
padding: 32px;
color: #616B7C;
font-size: 15px;
font-family: 'Inter', sans-serif;
line-height: 150%;
}
table {
width: 100%;
border-spacing: 0 !important;
}
table,
tr,
th,
td {
margin: 0;
padding: 0;
}
td {
vertical-align: top;
}
h* {
font-family: 'Poppins', sans-serif;
}
hr {
border: none;
border-top: 1px solid #E8E9F0;
}
p {
margin-bottom: 10px;
}
</style>
</head>
<body style="direction: {{direction}}">
<div style="display: none; overflow: hidden; max-height: 0; max-width: 0; opacity: 0; line-height: 1px;">
+16 -16
View File
@@ -11,7 +11,7 @@ return [
[
'key' => 'web',
'name' => 'Web',
'version' => '18.2.0',
'version' => '19.0.0',
'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' => '17.1.0',
'version' => '18.0.0',
'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' => '10.2.0',
'version' => '11.0.0',
'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' => '8.2.2',
'version' => '9.0.0',
'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.11.0',
'version' => '0.12.0',
'url' => 'https://github.com/appwrite/sdk-for-react-native',
'package' => 'https://npmjs.com/package/react-native-appwrite',
'enabled' => true,
@@ -226,7 +226,7 @@ return [
[
'key' => 'cli',
'name' => 'Command Line',
'version' => '8.3.0',
'version' => '9.0.2',
'url' => 'https://github.com/appwrite/sdk-for-cli',
'package' => 'https://www.npmjs.com/package/appwrite-cli',
'enabled' => true,
@@ -261,7 +261,7 @@ return [
[
'key' => 'nodejs',
'name' => 'Node.js',
'version' => '17.2.0',
'version' => '18.0.0',
'url' => 'https://github.com/appwrite/sdk-for-node',
'package' => 'https://www.npmjs.com/package/node-appwrite',
'enabled' => true,
@@ -280,7 +280,7 @@ return [
[
'key' => 'deno',
'name' => 'Deno',
'version' => '15.1.0',
'version' => '16.0.0',
'url' => 'https://github.com/appwrite/sdk-for-deno',
'package' => 'https://deno.land/x/appwrite',
'enabled' => true,
@@ -299,7 +299,7 @@ return [
[
'key' => 'php',
'name' => 'PHP',
'version' => '15.1.0',
'version' => '16.0.0',
'url' => 'https://github.com/appwrite/sdk-for-php',
'package' => 'https://packagist.org/packages/appwrite/appwrite',
'enabled' => true,
@@ -318,7 +318,7 @@ return [
[
'key' => 'python',
'name' => 'Python',
'version' => '11.1.0',
'version' => '12.0.0',
'url' => 'https://github.com/appwrite/sdk-for-python',
'package' => 'https://pypi.org/project/appwrite/',
'enabled' => true,
@@ -337,7 +337,7 @@ return [
[
'key' => 'ruby',
'name' => 'Ruby',
'version' => '16.1.0',
'version' => '17.0.0',
'url' => 'https://github.com/appwrite/sdk-for-ruby',
'package' => 'https://rubygems.org/gems/appwrite',
'enabled' => true,
@@ -356,7 +356,7 @@ return [
[
'key' => 'go',
'name' => 'Go',
'version' => '0.9.0',
'version' => '0.10.0',
'url' => 'https://github.com/appwrite/sdk-for-go',
'package' => 'https://github.com/appwrite/sdk-for-go',
'enabled' => true,
@@ -375,7 +375,7 @@ return [
[
'key' => 'dotnet',
'name' => '.NET',
'version' => '0.15.0',
'version' => '0.16.0',
'url' => 'https://github.com/appwrite/sdk-for-dotnet',
'package' => 'https://www.nuget.org/packages/Appwrite',
'enabled' => true,
@@ -394,7 +394,7 @@ return [
[
'key' => 'dart',
'name' => 'Dart',
'version' => '16.2.0',
'version' => '17.0.0',
'url' => 'https://github.com/appwrite/sdk-for-dart',
'package' => 'https://pub.dev/packages/dart_appwrite',
'enabled' => true,
@@ -413,7 +413,7 @@ return [
[
'key' => 'kotlin',
'name' => 'Kotlin',
'version' => '9.1.2',
'version' => '10.0.0',
'url' => 'https://github.com/appwrite/sdk-for-kotlin',
'package' => 'https://search.maven.org/artifact/io.appwrite/sdk-for-kotlin',
'enabled' => true,
@@ -436,7 +436,7 @@ return [
[
'key' => 'swift',
'name' => 'Swift',
'version' => '10.2.0',
'version' => '11.0.0',
'url' => 'https://github.com/appwrite/sdk-for-swift',
'package' => 'https://github.com/appwrite/sdk-for-swift',
'enabled' => true,
+6 -6
View File
@@ -66,15 +66,15 @@ return [
'optional' => true,
'icon' => '/images/services/databases.png',
],
'tables' => [
'key' => 'tables',
'name' => 'Tables',
'subtitle' => 'The Tables service allows you to create structured tables of rows, query and filter lists of rows',
'description' => '/docs/services/tables.md',
'tablesdb' => [
'key' => 'tablesdb',
'name' => 'TablesDB',
'subtitle' => 'The TablesDB service allows you to create structured tables of columns, query and filter lists of rows',
'description' => '/docs/services/tablesdb.md',
'controller' => '', // Uses modules
'sdk' => true,
'docs' => true,
'docsUrl' => 'https://appwrite.io/docs/client/tables',
'docsUrl' => 'https://appwrite.io/docs/client/tablesdb',
'tests' => false,
'optional' => true,
'icon' => '/images/services/databases.png',
+25 -16
View File
@@ -2622,7 +2622,7 @@
"tags": [
"account"
],
"description": "Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST \/v1\/account\/sessions\/token](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createSession) endpoint to complete the login process. The secret sent to the user's email is valid for 15 minutes.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).",
"description": "Sends the user an email with a secret key for creating a session. If the email address has never been used, a **new account is created** using the provided `userId`. Otherwise, if the email address is already attached to an account, the **user ID is ignored**. Then, the user will receive an email with the one-time password. Use the returned user ID and secret and submit a request to the [POST \/v1\/account\/sessions\/token](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createSession) endpoint to complete the login process. The secret sent to the user's email is valid for 15 minutes.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).\n",
"responses": {
"201": {
"description": "Token",
@@ -2673,7 +2673,7 @@
"properties": {
"userId": {
"type": "string",
"description": "User ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.",
"description": "User ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars. If the email address has never been used, a new account is created using the provided userId. Otherwise, if the email address is already attached to an account, the user ID is ignored.",
"x-example": "<USER_ID>"
},
"email": {
@@ -2755,7 +2755,7 @@
"properties": {
"userId": {
"type": "string",
"description": "Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.",
"description": "Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars. If the email address has never been used, a new account is created using the provided userId. Otherwise, if the email address is already attached to an account, the user ID is ignored.",
"x-example": "<USER_ID>"
},
"email": {
@@ -2977,7 +2977,7 @@
"properties": {
"userId": {
"type": "string",
"description": "Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.",
"description": "Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars. If the phone number has never been used, a new account is created using the provided userId. Otherwise, if the phone number is already attached to an account, the user ID is ignored.",
"x-example": "<USER_ID>"
},
"phone": {
@@ -3440,7 +3440,7 @@
"parameters": [
{
"name": "code",
"description": "Credit Card Code. Possible values: amex, argencard, cabal, cencosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro, rupay.",
"description": "Credit Card Code. Possible values: amex, argencard, cabal, cencosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, unionpay, visa, mir, maestro, rupay.",
"required": true,
"schema": {
"type": "string",
@@ -3458,7 +3458,7 @@
"mastercard",
"naranja",
"targeta-shopping",
"union-china-pay",
"unionpay",
"visa",
"mir",
"maestro",
@@ -3478,7 +3478,7 @@
"Mastercard",
"Naranja",
"Tarjeta Shopping",
"Union China Pay",
"Union Pay",
"Visa",
"MIR",
"Maestro",
@@ -4466,6 +4466,7 @@
"methods": [
{
"name": "createDocument",
"desc": "Create document",
"auth": {
"Project": []
},
@@ -4488,7 +4489,8 @@
"model": "#\/components\/schemas\/document"
}
],
"description": "Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console."
"description": "Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.",
"demo": "databases\/create-document.md"
}
],
"auth": {
@@ -4665,7 +4667,7 @@
"tags": [
"databases"
],
"description": "**WARNING: Experimental Feature** - This endpoint is experimental and not yet officially supported. It may be subject to breaking changes or removal in future versions.\n\nCreate or update a Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.",
"description": "Create or update a Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.",
"responses": {
"200": {
"description": "Document",
@@ -5203,7 +5205,7 @@
"x-appwrite": {
"method": "listExecutions",
"group": "executions",
"weight": 393,
"weight": 394,
"cookies": false,
"type": "",
"deprecated": false,
@@ -5278,7 +5280,7 @@
"x-appwrite": {
"method": "createExecution",
"group": "executions",
"weight": 391,
"weight": 392,
"cookies": false,
"type": "",
"deprecated": false,
@@ -5393,7 +5395,7 @@
"x-appwrite": {
"method": "getExecution",
"group": "executions",
"weight": 392,
"weight": 393,
"cookies": false,
"type": "",
"deprecated": false,
@@ -5467,7 +5469,7 @@
"x-appwrite": {
"method": "query",
"group": "graphql",
"weight": 307,
"weight": 308,
"cookies": false,
"type": "graphql",
"deprecated": false,
@@ -5519,7 +5521,7 @@
"x-appwrite": {
"method": "mutation",
"group": "graphql",
"weight": 306,
"weight": 307,
"cookies": false,
"type": "graphql",
"deprecated": false,
@@ -5987,7 +5989,7 @@
"x-appwrite": {
"method": "createSubscriber",
"group": "subscribers",
"weight": 353,
"weight": 354,
"cookies": false,
"type": "",
"deprecated": false,
@@ -6070,7 +6072,7 @@
"x-appwrite": {
"method": "deleteSubscriber",
"group": "subscribers",
"weight": 357,
"weight": 358,
"cookies": false,
"type": "",
"deprecated": false,
@@ -9845,6 +9847,11 @@
"description": "Function ID.",
"x-example": "5e5ea6g16897e"
},
"deploymentId": {
"type": "string",
"description": "Function's deployment ID used to create the execution.",
"x-example": "5e5ea5c16897e"
},
"trigger": {
"type": "string",
"description": "The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.",
@@ -9929,6 +9936,7 @@
"$updatedAt",
"$permissions",
"functionId",
"deploymentId",
"trigger",
"status",
"requestMethod",
@@ -9949,6 +9957,7 @@
"any"
],
"functionId": "5e5ea6g16897e",
"deploymentId": "5e5ea5c16897e",
"trigger": "http",
"status": "processing",
"requestMethod": "GET",
File diff suppressed because it is too large Load Diff
+128 -117
View File
@@ -2303,7 +2303,7 @@
"tags": [
"account"
],
"description": "Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST \/v1\/account\/sessions\/token](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createSession) endpoint to complete the login process. The secret sent to the user's email is valid for 15 minutes.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).",
"description": "Sends the user an email with a secret key for creating a session. If the email address has never been used, a **new account is created** using the provided `userId`. Otherwise, if the email address is already attached to an account, the **user ID is ignored**. Then, the user will receive an email with the one-time password. Use the returned user ID and secret and submit a request to the [POST \/v1\/account\/sessions\/token](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createSession) endpoint to complete the login process. The secret sent to the user's email is valid for 15 minutes.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).\n",
"responses": {
"201": {
"description": "Token",
@@ -2354,7 +2354,7 @@
"properties": {
"userId": {
"type": "string",
"description": "User ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.",
"description": "User ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars. If the email address has never been used, a new account is created using the provided userId. Otherwise, if the email address is already attached to an account, the user ID is ignored.",
"x-example": "<USER_ID>"
},
"email": {
@@ -2436,7 +2436,7 @@
"properties": {
"userId": {
"type": "string",
"description": "Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.",
"description": "Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars. If the email address has never been used, a new account is created using the provided userId. Otherwise, if the email address is already attached to an account, the user ID is ignored.",
"x-example": "<USER_ID>"
},
"email": {
@@ -2658,7 +2658,7 @@
"properties": {
"userId": {
"type": "string",
"description": "Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.",
"description": "Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars. If the phone number has never been used, a new account is created using the provided userId. Otherwise, if the phone number is already attached to an account, the user ID is ignored.",
"x-example": "<USER_ID>"
},
"phone": {
@@ -3129,7 +3129,7 @@
"parameters": [
{
"name": "code",
"description": "Credit Card Code. Possible values: amex, argencard, cabal, cencosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro, rupay.",
"description": "Credit Card Code. Possible values: amex, argencard, cabal, cencosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, unionpay, visa, mir, maestro, rupay.",
"required": true,
"schema": {
"type": "string",
@@ -3147,7 +3147,7 @@
"mastercard",
"naranja",
"targeta-shopping",
"union-china-pay",
"unionpay",
"visa",
"mir",
"maestro",
@@ -3167,7 +3167,7 @@
"Mastercard",
"Naranja",
"Tarjeta Shopping",
"Union China Pay",
"Union Pay",
"Visa",
"MIR",
"Maestro",
@@ -7506,6 +7506,7 @@
"methods": [
{
"name": "createDocument",
"desc": "Create document",
"auth": {
"Project": [],
"Session": []
@@ -7529,10 +7530,12 @@
"model": "#\/components\/schemas\/document"
}
],
"description": "Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console."
"description": "Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.",
"demo": "databases\/create-document.md"
},
{
"name": "createDocuments",
"desc": "Create documents",
"auth": {
"Project": [],
"Key": []
@@ -7553,7 +7556,8 @@
"model": "#\/components\/schemas\/documentList"
}
],
"description": "**WARNING: Experimental Feature** - This endpoint is experimental and not yet officially supported. It may be subject to breaking changes or removal in future versions.\n\nCreate new Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console."
"description": "Create new Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.",
"demo": "databases\/create-documents.md"
}
],
"auth": {
@@ -7635,7 +7639,7 @@
"tags": [
"databases"
],
"description": "**WARNING: Experimental Feature** - This endpoint is experimental and not yet officially supported. It may be subject to breaking changes or removal in future versions.\n\nCreate or update Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.\n",
"description": "Create or update Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.\n",
"responses": {
"200": {
"description": "Documents List",
@@ -7728,7 +7732,7 @@
"tags": [
"databases"
],
"description": "**WARNING: Experimental Feature** - This endpoint is experimental and not yet officially supported. It may be subject to breaking changes or removal in future versions.\n\nUpdate all documents that match your queries, if no queries are submitted then all documents are updated. You can pass only specific fields to be updated.",
"description": "Update all documents that match your queries, if no queries are submitted then all documents are updated. You can pass only specific fields to be updated.",
"responses": {
"200": {
"description": "Documents List",
@@ -7823,7 +7827,7 @@
"tags": [
"databases"
],
"description": "**WARNING: Experimental Feature** - This endpoint is experimental and not yet officially supported. It may be subject to breaking changes or removal in future versions.\n\nBulk delete documents using queries, if no queries are passed then all documents are deleted.",
"description": "Bulk delete documents using queries, if no queries are passed then all documents are deleted.",
"responses": {
"200": {
"description": "Documents List",
@@ -8012,7 +8016,7 @@
"tags": [
"databases"
],
"description": "**WARNING: Experimental Feature** - This endpoint is experimental and not yet officially supported. It may be subject to breaking changes or removal in future versions.\n\nCreate or update a Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.",
"description": "Create or update a Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.",
"responses": {
"200": {
"description": "Document",
@@ -8925,7 +8929,7 @@
"x-appwrite": {
"method": "list",
"group": "functions",
"weight": 377,
"weight": 378,
"cookies": false,
"type": "",
"deprecated": false,
@@ -8999,7 +9003,7 @@
"x-appwrite": {
"method": "create",
"group": "functions",
"weight": 374,
"weight": 375,
"cookies": false,
"type": "",
"deprecated": false,
@@ -9233,7 +9237,7 @@
"x-appwrite": {
"method": "listRuntimes",
"group": "runtimes",
"weight": 379,
"weight": 380,
"cookies": false,
"type": "",
"deprecated": false,
@@ -9283,7 +9287,7 @@
"x-appwrite": {
"method": "listSpecifications",
"group": "runtimes",
"weight": 380,
"weight": 381,
"cookies": false,
"type": "",
"deprecated": false,
@@ -9334,7 +9338,7 @@
"x-appwrite": {
"method": "get",
"group": "functions",
"weight": 375,
"weight": 376,
"cookies": false,
"type": "",
"deprecated": false,
@@ -9394,7 +9398,7 @@
"x-appwrite": {
"method": "update",
"group": "functions",
"weight": 376,
"weight": 377,
"cookies": false,
"type": "",
"deprecated": false,
@@ -9625,7 +9629,7 @@
"x-appwrite": {
"method": "delete",
"group": "functions",
"weight": 378,
"weight": 379,
"cookies": false,
"type": "",
"deprecated": false,
@@ -9687,7 +9691,7 @@
"x-appwrite": {
"method": "updateFunctionDeployment",
"group": "functions",
"weight": 383,
"weight": 384,
"cookies": false,
"type": "",
"deprecated": false,
@@ -9768,7 +9772,7 @@
"x-appwrite": {
"method": "listDeployments",
"group": "deployments",
"weight": 384,
"weight": 385,
"cookies": false,
"type": "",
"deprecated": false,
@@ -9852,7 +9856,7 @@
"x-appwrite": {
"method": "createDeployment",
"group": "deployments",
"weight": 381,
"weight": 382,
"cookies": false,
"type": "upload",
"deprecated": false,
@@ -9949,7 +9953,7 @@
"x-appwrite": {
"method": "createDuplicateDeployment",
"group": "deployments",
"weight": 389,
"weight": 390,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10035,7 +10039,7 @@
"x-appwrite": {
"method": "createTemplateDeployment",
"group": "deployments",
"weight": 386,
"weight": 387,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10139,7 +10143,7 @@
"x-appwrite": {
"method": "createVcsDeployment",
"group": "deployments",
"weight": 387,
"weight": 388,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10237,7 +10241,7 @@
"x-appwrite": {
"method": "getDeployment",
"group": "deployments",
"weight": 382,
"weight": 383,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10300,7 +10304,7 @@
"x-appwrite": {
"method": "deleteDeployment",
"group": "deployments",
"weight": 385,
"weight": 386,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10365,7 +10369,7 @@
"x-appwrite": {
"method": "getDeploymentDownload",
"group": "deployments",
"weight": 388,
"weight": 389,
"cookies": false,
"type": "location",
"deprecated": false,
@@ -10456,7 +10460,7 @@
"x-appwrite": {
"method": "updateDeploymentStatus",
"group": "deployments",
"weight": 390,
"weight": 391,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10528,7 +10532,7 @@
"x-appwrite": {
"method": "listExecutions",
"group": "executions",
"weight": 393,
"weight": 394,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10605,7 +10609,7 @@
"x-appwrite": {
"method": "createExecution",
"group": "executions",
"weight": 391,
"weight": 392,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10722,7 +10726,7 @@
"x-appwrite": {
"method": "getExecution",
"group": "executions",
"weight": 392,
"weight": 393,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10789,7 +10793,7 @@
"x-appwrite": {
"method": "deleteExecution",
"group": "executions",
"weight": 394,
"weight": 395,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10861,7 +10865,7 @@
"x-appwrite": {
"method": "listVariables",
"group": "variables",
"weight": 399,
"weight": 400,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10921,7 +10925,7 @@
"x-appwrite": {
"method": "createVariable",
"group": "variables",
"weight": 397,
"weight": 398,
"cookies": false,
"type": "",
"deprecated": false,
@@ -11013,7 +11017,7 @@
"x-appwrite": {
"method": "getVariable",
"group": "variables",
"weight": 398,
"weight": 399,
"cookies": false,
"type": "",
"deprecated": false,
@@ -11083,7 +11087,7 @@
"x-appwrite": {
"method": "updateVariable",
"group": "variables",
"weight": 400,
"weight": 401,
"cookies": false,
"type": "",
"deprecated": false,
@@ -11175,7 +11179,7 @@
"x-appwrite": {
"method": "deleteVariable",
"group": "variables",
"weight": 401,
"weight": 402,
"cookies": false,
"type": "",
"deprecated": false,
@@ -11247,7 +11251,7 @@
"x-appwrite": {
"method": "query",
"group": "graphql",
"weight": 307,
"weight": 308,
"cookies": false,
"type": "graphql",
"deprecated": false,
@@ -11301,7 +11305,7 @@
"x-appwrite": {
"method": "mutation",
"group": "graphql",
"weight": 306,
"weight": 307,
"cookies": false,
"type": "graphql",
"deprecated": false,
@@ -13104,7 +13108,7 @@
"x-appwrite": {
"method": "listMessages",
"group": "messages",
"weight": 361,
"weight": 362,
"cookies": false,
"type": "",
"deprecated": false,
@@ -13181,7 +13185,7 @@
"x-appwrite": {
"method": "createEmail",
"group": "messages",
"weight": 358,
"weight": 359,
"cookies": false,
"type": "",
"deprecated": false,
@@ -13326,7 +13330,7 @@
"x-appwrite": {
"method": "updateEmail",
"group": "messages",
"weight": 365,
"weight": 366,
"cookies": false,
"type": "",
"deprecated": false,
@@ -13473,7 +13477,7 @@
"x-appwrite": {
"method": "createPush",
"group": "messages",
"weight": 360,
"weight": 361,
"cookies": false,
"type": "",
"deprecated": false,
@@ -13648,7 +13652,7 @@
"x-appwrite": {
"method": "updatePush",
"group": "messages",
"weight": 367,
"weight": 368,
"cookies": false,
"type": "",
"deprecated": false,
@@ -13827,7 +13831,7 @@
"x-appwrite": {
"method": "createSms",
"group": "messages",
"weight": 359,
"weight": 360,
"cookies": false,
"type": "",
"deprecated": false,
@@ -13937,7 +13941,7 @@
"x-appwrite": {
"method": "updateSms",
"group": "messages",
"weight": 366,
"weight": 367,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14050,7 +14054,7 @@
"x-appwrite": {
"method": "getMessage",
"group": "messages",
"weight": 364,
"weight": 365,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14104,7 +14108,7 @@
"x-appwrite": {
"method": "delete",
"group": "messages",
"weight": 368,
"weight": 369,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14167,7 +14171,7 @@
"x-appwrite": {
"method": "listMessageLogs",
"group": "logs",
"weight": 362,
"weight": 363,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14243,7 +14247,7 @@
"x-appwrite": {
"method": "listTargets",
"group": "messages",
"weight": 363,
"weight": 364,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14319,7 +14323,7 @@
"x-appwrite": {
"method": "listProviders",
"group": "providers",
"weight": 333,
"weight": 334,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14396,7 +14400,7 @@
"x-appwrite": {
"method": "createApnsProvider",
"group": "providers",
"weight": 332,
"weight": 333,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14502,7 +14506,7 @@
"x-appwrite": {
"method": "updateApnsProvider",
"group": "providers",
"weight": 345,
"weight": 346,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14611,7 +14615,7 @@
"x-appwrite": {
"method": "createFcmProvider",
"group": "providers",
"weight": 331,
"weight": 332,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14697,7 +14701,7 @@
"x-appwrite": {
"method": "updateFcmProvider",
"group": "providers",
"weight": 344,
"weight": 345,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14786,7 +14790,7 @@
"x-appwrite": {
"method": "createMailgunProvider",
"group": "providers",
"weight": 323,
"weight": 324,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14902,7 +14906,7 @@
"x-appwrite": {
"method": "updateMailgunProvider",
"group": "providers",
"weight": 336,
"weight": 337,
"cookies": false,
"type": "",
"deprecated": false,
@@ -15021,7 +15025,7 @@
"x-appwrite": {
"method": "createMsg91Provider",
"group": "providers",
"weight": 326,
"weight": 327,
"cookies": false,
"type": "",
"deprecated": false,
@@ -15117,7 +15121,7 @@
"x-appwrite": {
"method": "updateMsg91Provider",
"group": "providers",
"weight": 339,
"weight": 340,
"cookies": false,
"type": "",
"deprecated": false,
@@ -15216,7 +15220,7 @@
"x-appwrite": {
"method": "createSendgridProvider",
"group": "providers",
"weight": 324,
"weight": 325,
"cookies": false,
"type": "",
"deprecated": false,
@@ -15322,7 +15326,7 @@
"x-appwrite": {
"method": "updateSendgridProvider",
"group": "providers",
"weight": 337,
"weight": 338,
"cookies": false,
"type": "",
"deprecated": false,
@@ -15431,7 +15435,7 @@
"x-appwrite": {
"method": "createSmtpProvider",
"group": "providers",
"weight": 325,
"weight": 326,
"cookies": false,
"type": "",
"deprecated": false,
@@ -15575,7 +15579,7 @@
"x-appwrite": {
"method": "updateSmtpProvider",
"group": "providers",
"weight": 338,
"weight": 339,
"cookies": false,
"type": "",
"deprecated": false,
@@ -15721,7 +15725,7 @@
"x-appwrite": {
"method": "createTelesignProvider",
"group": "providers",
"weight": 327,
"weight": 328,
"cookies": false,
"type": "",
"deprecated": false,
@@ -15817,7 +15821,7 @@
"x-appwrite": {
"method": "updateTelesignProvider",
"group": "providers",
"weight": 340,
"weight": 341,
"cookies": false,
"type": "",
"deprecated": false,
@@ -15916,7 +15920,7 @@
"x-appwrite": {
"method": "createTextmagicProvider",
"group": "providers",
"weight": 328,
"weight": 329,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16012,7 +16016,7 @@
"x-appwrite": {
"method": "updateTextmagicProvider",
"group": "providers",
"weight": 341,
"weight": 342,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16111,7 +16115,7 @@
"x-appwrite": {
"method": "createTwilioProvider",
"group": "providers",
"weight": 329,
"weight": 330,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16207,7 +16211,7 @@
"x-appwrite": {
"method": "updateTwilioProvider",
"group": "providers",
"weight": 342,
"weight": 343,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16306,7 +16310,7 @@
"x-appwrite": {
"method": "createVonageProvider",
"group": "providers",
"weight": 330,
"weight": 331,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16402,7 +16406,7 @@
"x-appwrite": {
"method": "updateVonageProvider",
"group": "providers",
"weight": 343,
"weight": 344,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16501,7 +16505,7 @@
"x-appwrite": {
"method": "getProvider",
"group": "providers",
"weight": 335,
"weight": 336,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16555,7 +16559,7 @@
"x-appwrite": {
"method": "deleteProvider",
"group": "providers",
"weight": 346,
"weight": 347,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16618,7 +16622,7 @@
"x-appwrite": {
"method": "listProviderLogs",
"group": "providers",
"weight": 334,
"weight": 335,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16694,7 +16698,7 @@
"x-appwrite": {
"method": "listSubscriberLogs",
"group": "subscribers",
"weight": 355,
"weight": 356,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16770,7 +16774,7 @@
"x-appwrite": {
"method": "listTopics",
"group": "topics",
"weight": 348,
"weight": 349,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16845,7 +16849,7 @@
"x-appwrite": {
"method": "createTopic",
"group": "topics",
"weight": 347,
"weight": 348,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16929,7 +16933,7 @@
"x-appwrite": {
"method": "getTopic",
"group": "topics",
"weight": 350,
"weight": 351,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16990,7 +16994,7 @@
"x-appwrite": {
"method": "updateTopic",
"group": "topics",
"weight": 351,
"weight": 352,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17068,7 +17072,7 @@
"x-appwrite": {
"method": "deleteTopic",
"group": "topics",
"weight": 352,
"weight": 353,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17131,7 +17135,7 @@
"x-appwrite": {
"method": "listTopicLogs",
"group": "topics",
"weight": 349,
"weight": 350,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17207,7 +17211,7 @@
"x-appwrite": {
"method": "listSubscribers",
"group": "subscribers",
"weight": 354,
"weight": 355,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17292,7 +17296,7 @@
"x-appwrite": {
"method": "createSubscriber",
"group": "subscribers",
"weight": 353,
"weight": 354,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17384,7 +17388,7 @@
"x-appwrite": {
"method": "getSubscriber",
"group": "subscribers",
"weight": 356,
"weight": 357,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17448,7 +17452,7 @@
"x-appwrite": {
"method": "deleteSubscriber",
"group": "subscribers",
"weight": 357,
"weight": 358,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17525,7 +17529,7 @@
"x-appwrite": {
"method": "list",
"group": "sites",
"weight": 406,
"weight": 407,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17596,7 +17600,7 @@
"x-appwrite": {
"method": "create",
"group": "sites",
"weight": 404,
"weight": 405,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17846,7 +17850,7 @@
"x-appwrite": {
"method": "listFrameworks",
"group": "frameworks",
"weight": 409,
"weight": 410,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17896,7 +17900,7 @@
"x-appwrite": {
"method": "listSpecifications",
"group": "frameworks",
"weight": 432,
"weight": 433,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17947,7 +17951,7 @@
"x-appwrite": {
"method": "get",
"group": "sites",
"weight": 405,
"weight": 406,
"cookies": false,
"type": "",
"deprecated": false,
@@ -18007,7 +18011,7 @@
"x-appwrite": {
"method": "update",
"group": "sites",
"weight": 407,
"weight": 408,
"cookies": false,
"type": "",
"deprecated": false,
@@ -18253,7 +18257,7 @@
"x-appwrite": {
"method": "delete",
"group": "sites",
"weight": 408,
"weight": 409,
"cookies": false,
"type": "",
"deprecated": false,
@@ -18315,7 +18319,7 @@
"x-appwrite": {
"method": "updateSiteDeployment",
"group": "sites",
"weight": 415,
"weight": 416,
"cookies": false,
"type": "",
"deprecated": false,
@@ -18396,7 +18400,7 @@
"x-appwrite": {
"method": "listDeployments",
"group": "deployments",
"weight": 414,
"weight": 415,
"cookies": false,
"type": "",
"deprecated": false,
@@ -18480,7 +18484,7 @@
"x-appwrite": {
"method": "createDeployment",
"group": "deployments",
"weight": 410,
"weight": 411,
"cookies": false,
"type": "upload",
"deprecated": false,
@@ -18582,7 +18586,7 @@
"x-appwrite": {
"method": "createDuplicateDeployment",
"group": "deployments",
"weight": 418,
"weight": 419,
"cookies": false,
"type": "",
"deprecated": false,
@@ -18663,7 +18667,7 @@
"x-appwrite": {
"method": "createTemplateDeployment",
"group": "deployments",
"weight": 411,
"weight": 412,
"cookies": false,
"type": "",
"deprecated": false,
@@ -18767,7 +18771,7 @@
"x-appwrite": {
"method": "createVcsDeployment",
"group": "deployments",
"weight": 412,
"weight": 413,
"cookies": false,
"type": "",
"deprecated": false,
@@ -18866,7 +18870,7 @@
"x-appwrite": {
"method": "getDeployment",
"group": "deployments",
"weight": 413,
"weight": 414,
"cookies": false,
"type": "",
"deprecated": false,
@@ -18929,7 +18933,7 @@
"x-appwrite": {
"method": "deleteDeployment",
"group": "deployments",
"weight": 416,
"weight": 417,
"cookies": false,
"type": "",
"deprecated": false,
@@ -18994,7 +18998,7 @@
"x-appwrite": {
"method": "getDeploymentDownload",
"group": "deployments",
"weight": 417,
"weight": 418,
"cookies": false,
"type": "location",
"deprecated": false,
@@ -19085,7 +19089,7 @@
"x-appwrite": {
"method": "updateDeploymentStatus",
"group": "deployments",
"weight": 419,
"weight": 420,
"cookies": false,
"type": "",
"deprecated": false,
@@ -19157,7 +19161,7 @@
"x-appwrite": {
"method": "listLogs",
"group": "logs",
"weight": 421,
"weight": 422,
"cookies": false,
"type": "",
"deprecated": false,
@@ -19229,7 +19233,7 @@
"x-appwrite": {
"method": "getLog",
"group": "logs",
"weight": 420,
"weight": 421,
"cookies": false,
"type": "",
"deprecated": false,
@@ -19292,7 +19296,7 @@
"x-appwrite": {
"method": "deleteLog",
"group": "logs",
"weight": 422,
"weight": 423,
"cookies": false,
"type": "",
"deprecated": false,
@@ -19364,7 +19368,7 @@
"x-appwrite": {
"method": "listVariables",
"group": "variables",
"weight": 425,
"weight": 426,
"cookies": false,
"type": "",
"deprecated": false,
@@ -19424,7 +19428,7 @@
"x-appwrite": {
"method": "createVariable",
"group": "variables",
"weight": 423,
"weight": 424,
"cookies": false,
"type": "",
"deprecated": false,
@@ -19516,7 +19520,7 @@
"x-appwrite": {
"method": "getVariable",
"group": "variables",
"weight": 424,
"weight": 425,
"cookies": false,
"type": "",
"deprecated": false,
@@ -19586,7 +19590,7 @@
"x-appwrite": {
"method": "updateVariable",
"group": "variables",
"weight": 426,
"weight": 427,
"cookies": false,
"type": "",
"deprecated": false,
@@ -19678,7 +19682,7 @@
"x-appwrite": {
"method": "deleteVariable",
"group": "variables",
"weight": 427,
"weight": 428,
"cookies": false,
"type": "",
"deprecated": false,
@@ -22073,7 +22077,7 @@
"x-appwrite": {
"method": "list",
"group": "files",
"weight": 440,
"weight": 441,
"cookies": false,
"type": "",
"deprecated": false,
@@ -22154,7 +22158,7 @@
"x-appwrite": {
"method": "createFileToken",
"group": "files",
"weight": 438,
"weight": 439,
"cookies": false,
"type": "",
"deprecated": false,
@@ -22244,7 +22248,7 @@
"x-appwrite": {
"method": "get",
"group": "tokens",
"weight": 439,
"weight": 440,
"cookies": false,
"type": "",
"deprecated": false,
@@ -22305,7 +22309,7 @@
"x-appwrite": {
"method": "update",
"group": "tokens",
"weight": 441,
"weight": 442,
"cookies": false,
"type": "",
"deprecated": false,
@@ -22376,7 +22380,7 @@
"x-appwrite": {
"method": "delete",
"group": "tokens",
"weight": 442,
"weight": 443,
"cookies": false,
"type": "",
"deprecated": false,
@@ -30226,6 +30230,11 @@
"description": "Function ID.",
"x-example": "5e5ea6g16897e"
},
"deploymentId": {
"type": "string",
"description": "Function's deployment ID used to create the execution.",
"x-example": "5e5ea5c16897e"
},
"trigger": {
"type": "string",
"description": "The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.",
@@ -30310,6 +30319,7 @@
"$updatedAt",
"$permissions",
"functionId",
"deploymentId",
"trigger",
"status",
"requestMethod",
@@ -30330,6 +30340,7 @@
"any"
],
"functionId": "5e5ea6g16897e",
"deploymentId": "5e5ea5c16897e",
"trigger": "http",
"status": "processing",
"requestMethod": "GET",
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
+22 -15
View File
@@ -2751,7 +2751,7 @@
"tags": [
"account"
],
"description": "Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST \/v1\/account\/sessions\/token](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createSession) endpoint to complete the login process. The secret sent to the user's email is valid for 15 minutes.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).",
"description": "Sends the user an email with a secret key for creating a session. If the email address has never been used, a **new account is created** using the provided `userId`. Otherwise, if the email address is already attached to an account, the **user ID is ignored**. Then, the user will receive an email with the one-time password. Use the returned user ID and secret and submit a request to the [POST \/v1\/account\/sessions\/token](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createSession) endpoint to complete the login process. The secret sent to the user's email is valid for 15 minutes.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).\n",
"responses": {
"201": {
"description": "Token",
@@ -2799,7 +2799,7 @@
"properties": {
"userId": {
"type": "string",
"description": "User ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.",
"description": "User ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars. If the email address has never been used, a new account is created using the provided userId. Otherwise, if the email address is already attached to an account, the user ID is ignored.",
"default": null,
"x-example": "<USER_ID>"
},
@@ -2886,7 +2886,7 @@
"properties": {
"userId": {
"type": "string",
"description": "Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.",
"description": "Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars. If the email address has never been used, a new account is created using the provided userId. Otherwise, if the email address is already attached to an account, the user ID is ignored.",
"default": null,
"x-example": "<USER_ID>"
},
@@ -3111,7 +3111,7 @@
"properties": {
"userId": {
"type": "string",
"description": "Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.",
"description": "Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars. If the phone number has never been used, a new account is created using the provided userId. Otherwise, if the phone number is already attached to an account, the user ID is ignored.",
"default": null,
"x-example": "<USER_ID>"
},
@@ -3592,7 +3592,7 @@
"parameters": [
{
"name": "code",
"description": "Credit Card Code. Possible values: amex, argencard, cabal, cencosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro, rupay.",
"description": "Credit Card Code. Possible values: amex, argencard, cabal, cencosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, unionpay, visa, mir, maestro, rupay.",
"required": true,
"type": "string",
"x-example": "amex",
@@ -3609,7 +3609,7 @@
"mastercard",
"naranja",
"targeta-shopping",
"union-china-pay",
"unionpay",
"visa",
"mir",
"maestro",
@@ -3629,7 +3629,7 @@
"Mastercard",
"Naranja",
"Tarjeta Shopping",
"Union China Pay",
"Union Pay",
"Visa",
"MIR",
"Maestro",
@@ -4798,7 +4798,7 @@
"tags": [
"databases"
],
"description": "**WARNING: Experimental Feature** - This endpoint is experimental and not yet officially supported. It may be subject to breaking changes or removal in future versions.\n\nCreate or update a Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.",
"description": "Create or update a Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.",
"responses": {
"200": {
"description": "Document",
@@ -5303,7 +5303,7 @@
"x-appwrite": {
"method": "listExecutions",
"group": "executions",
"weight": 393,
"weight": 394,
"cookies": false,
"type": "",
"deprecated": false,
@@ -5376,7 +5376,7 @@
"x-appwrite": {
"method": "createExecution",
"group": "executions",
"weight": 391,
"weight": 392,
"cookies": false,
"type": "",
"deprecated": false,
@@ -5492,7 +5492,7 @@
"x-appwrite": {
"method": "getExecution",
"group": "executions",
"weight": 392,
"weight": 393,
"cookies": false,
"type": "",
"deprecated": false,
@@ -5563,7 +5563,7 @@
"x-appwrite": {
"method": "query",
"group": "graphql",
"weight": 307,
"weight": 308,
"cookies": false,
"type": "graphql",
"deprecated": false,
@@ -5636,7 +5636,7 @@
"x-appwrite": {
"method": "mutation",
"group": "graphql",
"weight": 306,
"weight": 307,
"cookies": false,
"type": "graphql",
"deprecated": false,
@@ -6117,7 +6117,7 @@
"x-appwrite": {
"method": "createSubscriber",
"group": "subscribers",
"weight": 353,
"weight": 354,
"cookies": false,
"type": "",
"deprecated": false,
@@ -6201,7 +6201,7 @@
"x-appwrite": {
"method": "deleteSubscriber",
"group": "subscribers",
"weight": 357,
"weight": 358,
"cookies": false,
"type": "",
"deprecated": false,
@@ -9885,6 +9885,11 @@
"description": "Function ID.",
"x-example": "5e5ea6g16897e"
},
"deploymentId": {
"type": "string",
"description": "Function's deployment ID used to create the execution.",
"x-example": "5e5ea5c16897e"
},
"trigger": {
"type": "string",
"description": "The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.",
@@ -9971,6 +9976,7 @@
"$updatedAt",
"$permissions",
"functionId",
"deploymentId",
"trigger",
"status",
"requestMethod",
@@ -9991,6 +9997,7 @@
"any"
],
"functionId": "5e5ea6g16897e",
"deploymentId": "5e5ea5c16897e",
"trigger": "http",
"status": "processing",
"requestMethod": "GET",
File diff suppressed because it is too large Load Diff
+123 -116
View File
@@ -2438,7 +2438,7 @@
"tags": [
"account"
],
"description": "Sends the user an email with a secret key for creating a session. If the provided user ID has not be registered, a new user will be created. Use the returned user ID and secret and submit a request to the [POST \/v1\/account\/sessions\/token](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createSession) endpoint to complete the login process. The secret sent to the user's email is valid for 15 minutes.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).",
"description": "Sends the user an email with a secret key for creating a session. If the email address has never been used, a **new account is created** using the provided `userId`. Otherwise, if the email address is already attached to an account, the **user ID is ignored**. Then, the user will receive an email with the one-time password. Use the returned user ID and secret and submit a request to the [POST \/v1\/account\/sessions\/token](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#createSession) endpoint to complete the login process. The secret sent to the user's email is valid for 15 minutes.\n\nA user is limited to 10 active sessions at a time by default. [Learn more about session limits](https:\/\/appwrite.io\/docs\/authentication-security#limits).\n",
"responses": {
"201": {
"description": "Token",
@@ -2486,7 +2486,7 @@
"properties": {
"userId": {
"type": "string",
"description": "User ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.",
"description": "User ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars. If the email address has never been used, a new account is created using the provided userId. Otherwise, if the email address is already attached to an account, the user ID is ignored.",
"default": null,
"x-example": "<USER_ID>"
},
@@ -2573,7 +2573,7 @@
"properties": {
"userId": {
"type": "string",
"description": "Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.",
"description": "Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars. If the email address has never been used, a new account is created using the provided userId. Otherwise, if the email address is already attached to an account, the user ID is ignored.",
"default": null,
"x-example": "<USER_ID>"
},
@@ -2798,7 +2798,7 @@
"properties": {
"userId": {
"type": "string",
"description": "Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars.",
"description": "Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can't start with a special char. Max length is 36 chars. If the phone number has never been used, a new account is created using the provided userId. Otherwise, if the phone number is already attached to an account, the user ID is ignored.",
"default": null,
"x-example": "<USER_ID>"
},
@@ -3287,7 +3287,7 @@
"parameters": [
{
"name": "code",
"description": "Credit Card Code. Possible values: amex, argencard, cabal, cencosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, union-china-pay, visa, mir, maestro, rupay.",
"description": "Credit Card Code. Possible values: amex, argencard, cabal, cencosud, diners, discover, elo, hipercard, jcb, mastercard, naranja, targeta-shopping, unionpay, visa, mir, maestro, rupay.",
"required": true,
"type": "string",
"x-example": "amex",
@@ -3304,7 +3304,7 @@
"mastercard",
"naranja",
"targeta-shopping",
"union-china-pay",
"unionpay",
"visa",
"mir",
"maestro",
@@ -3324,7 +3324,7 @@
"Mastercard",
"Naranja",
"Tarjeta Shopping",
"Union China Pay",
"Union Pay",
"Visa",
"MIR",
"Maestro",
@@ -7663,7 +7663,7 @@
"model": "#\/definitions\/documentList"
}
],
"description": "**WARNING: Experimental Feature** - This endpoint is experimental and not yet officially supported. It may be subject to breaking changes or removal in future versions.\n\nCreate new Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console."
"description": "Create new Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console."
}
],
"auth": {
@@ -7749,7 +7749,7 @@
"tags": [
"databases"
],
"description": "**WARNING: Experimental Feature** - This endpoint is experimental and not yet officially supported. It may be subject to breaking changes or removal in future versions.\n\nCreate or update Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.\n",
"description": "Create or update Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.\n",
"responses": {
"200": {
"description": "Documents List",
@@ -7839,7 +7839,7 @@
"tags": [
"databases"
],
"description": "**WARNING: Experimental Feature** - This endpoint is experimental and not yet officially supported. It may be subject to breaking changes or removal in future versions.\n\nUpdate all documents that match your queries, if no queries are submitted then all documents are updated. You can pass only specific fields to be updated.",
"description": "Update all documents that match your queries, if no queries are submitted then all documents are updated. You can pass only specific fields to be updated.",
"responses": {
"200": {
"description": "Documents List",
@@ -7932,7 +7932,7 @@
"tags": [
"databases"
],
"description": "**WARNING: Experimental Feature** - This endpoint is experimental and not yet officially supported. It may be subject to breaking changes or removal in future versions.\n\nBulk delete documents using queries, if no queries are passed then all documents are deleted.",
"description": "Bulk delete documents using queries, if no queries are passed then all documents are deleted.",
"responses": {
"200": {
"description": "Documents List",
@@ -8110,7 +8110,7 @@
"tags": [
"databases"
],
"description": "**WARNING: Experimental Feature** - This endpoint is experimental and not yet officially supported. It may be subject to breaking changes or removal in future versions.\n\nCreate or update a Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.",
"description": "Create or update a Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.",
"responses": {
"200": {
"description": "Document",
@@ -8978,7 +8978,7 @@
"x-appwrite": {
"method": "list",
"group": "functions",
"weight": 377,
"weight": 378,
"cookies": false,
"type": "",
"deprecated": false,
@@ -9051,7 +9051,7 @@
"x-appwrite": {
"method": "create",
"group": "functions",
"weight": 374,
"weight": 375,
"cookies": false,
"type": "",
"deprecated": false,
@@ -9303,7 +9303,7 @@
"x-appwrite": {
"method": "listRuntimes",
"group": "runtimes",
"weight": 379,
"weight": 380,
"cookies": false,
"type": "",
"deprecated": false,
@@ -9353,7 +9353,7 @@
"x-appwrite": {
"method": "listSpecifications",
"group": "runtimes",
"weight": 380,
"weight": 381,
"cookies": false,
"type": "",
"deprecated": false,
@@ -9404,7 +9404,7 @@
"x-appwrite": {
"method": "get",
"group": "functions",
"weight": 375,
"weight": 376,
"cookies": false,
"type": "",
"deprecated": false,
@@ -9464,7 +9464,7 @@
"x-appwrite": {
"method": "update",
"group": "functions",
"weight": 376,
"weight": 377,
"cookies": false,
"type": "",
"deprecated": false,
@@ -9712,7 +9712,7 @@
"x-appwrite": {
"method": "delete",
"group": "functions",
"weight": 378,
"weight": 379,
"cookies": false,
"type": "",
"deprecated": false,
@@ -9774,7 +9774,7 @@
"x-appwrite": {
"method": "updateFunctionDeployment",
"group": "functions",
"weight": 383,
"weight": 384,
"cookies": false,
"type": "",
"deprecated": false,
@@ -9852,7 +9852,7 @@
"x-appwrite": {
"method": "listDeployments",
"group": "deployments",
"weight": 384,
"weight": 385,
"cookies": false,
"type": "",
"deprecated": false,
@@ -9933,7 +9933,7 @@
"x-appwrite": {
"method": "createDeployment",
"group": "deployments",
"weight": 381,
"weight": 382,
"cookies": false,
"type": "upload",
"deprecated": false,
@@ -10026,7 +10026,7 @@
"x-appwrite": {
"method": "createDuplicateDeployment",
"group": "deployments",
"weight": 389,
"weight": 390,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10112,7 +10112,7 @@
"x-appwrite": {
"method": "createTemplateDeployment",
"group": "deployments",
"weight": 386,
"weight": 387,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10219,7 +10219,7 @@
"x-appwrite": {
"method": "createVcsDeployment",
"group": "deployments",
"weight": 387,
"weight": 388,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10316,7 +10316,7 @@
"x-appwrite": {
"method": "getDeployment",
"group": "deployments",
"weight": 382,
"weight": 383,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10379,7 +10379,7 @@
"x-appwrite": {
"method": "deleteDeployment",
"group": "deployments",
"weight": 385,
"weight": 386,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10447,7 +10447,7 @@
"x-appwrite": {
"method": "getDeploymentDownload",
"group": "deployments",
"weight": 388,
"weight": 389,
"cookies": false,
"type": "location",
"deprecated": false,
@@ -10533,7 +10533,7 @@
"x-appwrite": {
"method": "updateDeploymentStatus",
"group": "deployments",
"weight": 390,
"weight": 391,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10601,7 +10601,7 @@
"x-appwrite": {
"method": "listExecutions",
"group": "executions",
"weight": 393,
"weight": 394,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10676,7 +10676,7 @@
"x-appwrite": {
"method": "createExecution",
"group": "executions",
"weight": 391,
"weight": 392,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10794,7 +10794,7 @@
"x-appwrite": {
"method": "getExecution",
"group": "executions",
"weight": 392,
"weight": 393,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10860,7 +10860,7 @@
"x-appwrite": {
"method": "deleteExecution",
"group": "executions",
"weight": 394,
"weight": 395,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10928,7 +10928,7 @@
"x-appwrite": {
"method": "listVariables",
"group": "variables",
"weight": 399,
"weight": 400,
"cookies": false,
"type": "",
"deprecated": false,
@@ -10988,7 +10988,7 @@
"x-appwrite": {
"method": "createVariable",
"group": "variables",
"weight": 397,
"weight": 398,
"cookies": false,
"type": "",
"deprecated": false,
@@ -11079,7 +11079,7 @@
"x-appwrite": {
"method": "getVariable",
"group": "variables",
"weight": 398,
"weight": 399,
"cookies": false,
"type": "",
"deprecated": false,
@@ -11147,7 +11147,7 @@
"x-appwrite": {
"method": "updateVariable",
"group": "variables",
"weight": 400,
"weight": 401,
"cookies": false,
"type": "",
"deprecated": false,
@@ -11240,7 +11240,7 @@
"x-appwrite": {
"method": "deleteVariable",
"group": "variables",
"weight": 401,
"weight": 402,
"cookies": false,
"type": "",
"deprecated": false,
@@ -11310,7 +11310,7 @@
"x-appwrite": {
"method": "query",
"group": "graphql",
"weight": 307,
"weight": 308,
"cookies": false,
"type": "graphql",
"deprecated": false,
@@ -11385,7 +11385,7 @@
"x-appwrite": {
"method": "mutation",
"group": "graphql",
"weight": 306,
"weight": 307,
"cookies": false,
"type": "graphql",
"deprecated": false,
@@ -13167,7 +13167,7 @@
"x-appwrite": {
"method": "listMessages",
"group": "messages",
"weight": 361,
"weight": 362,
"cookies": false,
"type": "",
"deprecated": false,
@@ -13243,7 +13243,7 @@
"x-appwrite": {
"method": "createEmail",
"group": "messages",
"weight": 358,
"weight": 359,
"cookies": false,
"type": "",
"deprecated": false,
@@ -13402,7 +13402,7 @@
"x-appwrite": {
"method": "updateEmail",
"group": "messages",
"weight": 365,
"weight": 366,
"cookies": false,
"type": "",
"deprecated": false,
@@ -13558,7 +13558,7 @@
"x-appwrite": {
"method": "createPush",
"group": "messages",
"weight": 360,
"weight": 361,
"cookies": false,
"type": "",
"deprecated": false,
@@ -13754,7 +13754,7 @@
"x-appwrite": {
"method": "updatePush",
"group": "messages",
"weight": 367,
"weight": 368,
"cookies": false,
"type": "",
"deprecated": false,
@@ -13949,7 +13949,7 @@
"x-appwrite": {
"method": "createSms",
"group": "messages",
"weight": 359,
"weight": 360,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14068,7 +14068,7 @@
"x-appwrite": {
"method": "updateSms",
"group": "messages",
"weight": 366,
"weight": 367,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14183,7 +14183,7 @@
"x-appwrite": {
"method": "getMessage",
"group": "messages",
"weight": 364,
"weight": 365,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14239,7 +14239,7 @@
"x-appwrite": {
"method": "delete",
"group": "messages",
"weight": 368,
"weight": 369,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14300,7 +14300,7 @@
"x-appwrite": {
"method": "listMessageLogs",
"group": "logs",
"weight": 362,
"weight": 363,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14373,7 +14373,7 @@
"x-appwrite": {
"method": "listTargets",
"group": "messages",
"weight": 363,
"weight": 364,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14446,7 +14446,7 @@
"x-appwrite": {
"method": "listProviders",
"group": "providers",
"weight": 333,
"weight": 334,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14522,7 +14522,7 @@
"x-appwrite": {
"method": "createApnsProvider",
"group": "providers",
"weight": 332,
"weight": 333,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14638,7 +14638,7 @@
"x-appwrite": {
"method": "updateApnsProvider",
"group": "providers",
"weight": 345,
"weight": 346,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14752,7 +14752,7 @@
"x-appwrite": {
"method": "createFcmProvider",
"group": "providers",
"weight": 331,
"weight": 332,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14844,7 +14844,7 @@
"x-appwrite": {
"method": "updateFcmProvider",
"group": "providers",
"weight": 344,
"weight": 345,
"cookies": false,
"type": "",
"deprecated": false,
@@ -14934,7 +14934,7 @@
"x-appwrite": {
"method": "createMailgunProvider",
"group": "providers",
"weight": 323,
"weight": 324,
"cookies": false,
"type": "",
"deprecated": false,
@@ -15062,7 +15062,7 @@
"x-appwrite": {
"method": "updateMailgunProvider",
"group": "providers",
"weight": 336,
"weight": 337,
"cookies": false,
"type": "",
"deprecated": false,
@@ -15188,7 +15188,7 @@
"x-appwrite": {
"method": "createMsg91Provider",
"group": "providers",
"weight": 326,
"weight": 327,
"cookies": false,
"type": "",
"deprecated": false,
@@ -15292,7 +15292,7 @@
"x-appwrite": {
"method": "updateMsg91Provider",
"group": "providers",
"weight": 339,
"weight": 340,
"cookies": false,
"type": "",
"deprecated": false,
@@ -15394,7 +15394,7 @@
"x-appwrite": {
"method": "createSendgridProvider",
"group": "providers",
"weight": 324,
"weight": 325,
"cookies": false,
"type": "",
"deprecated": false,
@@ -15510,7 +15510,7 @@
"x-appwrite": {
"method": "updateSendgridProvider",
"group": "providers",
"weight": 337,
"weight": 338,
"cookies": false,
"type": "",
"deprecated": false,
@@ -15624,7 +15624,7 @@
"x-appwrite": {
"method": "createSmtpProvider",
"group": "providers",
"weight": 325,
"weight": 326,
"cookies": false,
"type": "",
"deprecated": false,
@@ -15784,7 +15784,7 @@
"x-appwrite": {
"method": "updateSmtpProvider",
"group": "providers",
"weight": 338,
"weight": 339,
"cookies": false,
"type": "",
"deprecated": false,
@@ -15941,7 +15941,7 @@
"x-appwrite": {
"method": "createTelesignProvider",
"group": "providers",
"weight": 327,
"weight": 328,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16045,7 +16045,7 @@
"x-appwrite": {
"method": "updateTelesignProvider",
"group": "providers",
"weight": 340,
"weight": 341,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16147,7 +16147,7 @@
"x-appwrite": {
"method": "createTextmagicProvider",
"group": "providers",
"weight": 328,
"weight": 329,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16251,7 +16251,7 @@
"x-appwrite": {
"method": "updateTextmagicProvider",
"group": "providers",
"weight": 341,
"weight": 342,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16353,7 +16353,7 @@
"x-appwrite": {
"method": "createTwilioProvider",
"group": "providers",
"weight": 329,
"weight": 330,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16457,7 +16457,7 @@
"x-appwrite": {
"method": "updateTwilioProvider",
"group": "providers",
"weight": 342,
"weight": 343,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16559,7 +16559,7 @@
"x-appwrite": {
"method": "createVonageProvider",
"group": "providers",
"weight": 330,
"weight": 331,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16663,7 +16663,7 @@
"x-appwrite": {
"method": "updateVonageProvider",
"group": "providers",
"weight": 343,
"weight": 344,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16763,7 +16763,7 @@
"x-appwrite": {
"method": "getProvider",
"group": "providers",
"weight": 335,
"weight": 336,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16819,7 +16819,7 @@
"x-appwrite": {
"method": "deleteProvider",
"group": "providers",
"weight": 346,
"weight": 347,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16880,7 +16880,7 @@
"x-appwrite": {
"method": "listProviderLogs",
"group": "providers",
"weight": 334,
"weight": 335,
"cookies": false,
"type": "",
"deprecated": false,
@@ -16953,7 +16953,7 @@
"x-appwrite": {
"method": "listSubscriberLogs",
"group": "subscribers",
"weight": 355,
"weight": 356,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17026,7 +17026,7 @@
"x-appwrite": {
"method": "listTopics",
"group": "topics",
"weight": 348,
"weight": 349,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17100,7 +17100,7 @@
"x-appwrite": {
"method": "createTopic",
"group": "topics",
"weight": 347,
"weight": 348,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17189,7 +17189,7 @@
"x-appwrite": {
"method": "getTopic",
"group": "topics",
"weight": 350,
"weight": 351,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17250,7 +17250,7 @@
"x-appwrite": {
"method": "updateTopic",
"group": "topics",
"weight": 351,
"weight": 352,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17330,7 +17330,7 @@
"x-appwrite": {
"method": "deleteTopic",
"group": "topics",
"weight": 352,
"weight": 353,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17391,7 +17391,7 @@
"x-appwrite": {
"method": "listTopicLogs",
"group": "topics",
"weight": 349,
"weight": 350,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17464,7 +17464,7 @@
"x-appwrite": {
"method": "listSubscribers",
"group": "subscribers",
"weight": 354,
"weight": 355,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17546,7 +17546,7 @@
"x-appwrite": {
"method": "createSubscriber",
"group": "subscribers",
"weight": 353,
"weight": 354,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17635,7 +17635,7 @@
"x-appwrite": {
"method": "getSubscriber",
"group": "subscribers",
"weight": 356,
"weight": 357,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17699,7 +17699,7 @@
"x-appwrite": {
"method": "deleteSubscriber",
"group": "subscribers",
"weight": 357,
"weight": 358,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17771,7 +17771,7 @@
"x-appwrite": {
"method": "list",
"group": "sites",
"weight": 406,
"weight": 407,
"cookies": false,
"type": "",
"deprecated": false,
@@ -17844,7 +17844,7 @@
"x-appwrite": {
"method": "create",
"group": "sites",
"weight": 404,
"weight": 405,
"cookies": false,
"type": "",
"deprecated": false,
@@ -18112,7 +18112,7 @@
"x-appwrite": {
"method": "listFrameworks",
"group": "frameworks",
"weight": 409,
"weight": 410,
"cookies": false,
"type": "",
"deprecated": false,
@@ -18162,7 +18162,7 @@
"x-appwrite": {
"method": "listSpecifications",
"group": "frameworks",
"weight": 432,
"weight": 433,
"cookies": false,
"type": "",
"deprecated": false,
@@ -18213,7 +18213,7 @@
"x-appwrite": {
"method": "get",
"group": "sites",
"weight": 405,
"weight": 406,
"cookies": false,
"type": "",
"deprecated": false,
@@ -18273,7 +18273,7 @@
"x-appwrite": {
"method": "update",
"group": "sites",
"weight": 407,
"weight": 408,
"cookies": false,
"type": "",
"deprecated": false,
@@ -18536,7 +18536,7 @@
"x-appwrite": {
"method": "delete",
"group": "sites",
"weight": 408,
"weight": 409,
"cookies": false,
"type": "",
"deprecated": false,
@@ -18598,7 +18598,7 @@
"x-appwrite": {
"method": "updateSiteDeployment",
"group": "sites",
"weight": 415,
"weight": 416,
"cookies": false,
"type": "",
"deprecated": false,
@@ -18676,7 +18676,7 @@
"x-appwrite": {
"method": "listDeployments",
"group": "deployments",
"weight": 414,
"weight": 415,
"cookies": false,
"type": "",
"deprecated": false,
@@ -18757,7 +18757,7 @@
"x-appwrite": {
"method": "createDeployment",
"group": "deployments",
"weight": 410,
"weight": 411,
"cookies": false,
"type": "upload",
"deprecated": false,
@@ -18858,7 +18858,7 @@
"x-appwrite": {
"method": "createDuplicateDeployment",
"group": "deployments",
"weight": 418,
"weight": 419,
"cookies": false,
"type": "",
"deprecated": false,
@@ -18938,7 +18938,7 @@
"x-appwrite": {
"method": "createTemplateDeployment",
"group": "deployments",
"weight": 411,
"weight": 412,
"cookies": false,
"type": "",
"deprecated": false,
@@ -19045,7 +19045,7 @@
"x-appwrite": {
"method": "createVcsDeployment",
"group": "deployments",
"weight": 412,
"weight": 413,
"cookies": false,
"type": "",
"deprecated": false,
@@ -19143,7 +19143,7 @@
"x-appwrite": {
"method": "getDeployment",
"group": "deployments",
"weight": 413,
"weight": 414,
"cookies": false,
"type": "",
"deprecated": false,
@@ -19206,7 +19206,7 @@
"x-appwrite": {
"method": "deleteDeployment",
"group": "deployments",
"weight": 416,
"weight": 417,
"cookies": false,
"type": "",
"deprecated": false,
@@ -19274,7 +19274,7 @@
"x-appwrite": {
"method": "getDeploymentDownload",
"group": "deployments",
"weight": 417,
"weight": 418,
"cookies": false,
"type": "location",
"deprecated": false,
@@ -19360,7 +19360,7 @@
"x-appwrite": {
"method": "updateDeploymentStatus",
"group": "deployments",
"weight": 419,
"weight": 420,
"cookies": false,
"type": "",
"deprecated": false,
@@ -19428,7 +19428,7 @@
"x-appwrite": {
"method": "listLogs",
"group": "logs",
"weight": 421,
"weight": 422,
"cookies": false,
"type": "",
"deprecated": false,
@@ -19500,7 +19500,7 @@
"x-appwrite": {
"method": "getLog",
"group": "logs",
"weight": 420,
"weight": 421,
"cookies": false,
"type": "",
"deprecated": false,
@@ -19565,7 +19565,7 @@
"x-appwrite": {
"method": "deleteLog",
"group": "logs",
"weight": 422,
"weight": 423,
"cookies": false,
"type": "",
"deprecated": false,
@@ -19633,7 +19633,7 @@
"x-appwrite": {
"method": "listVariables",
"group": "variables",
"weight": 425,
"weight": 426,
"cookies": false,
"type": "",
"deprecated": false,
@@ -19693,7 +19693,7 @@
"x-appwrite": {
"method": "createVariable",
"group": "variables",
"weight": 423,
"weight": 424,
"cookies": false,
"type": "",
"deprecated": false,
@@ -19784,7 +19784,7 @@
"x-appwrite": {
"method": "getVariable",
"group": "variables",
"weight": 424,
"weight": 425,
"cookies": false,
"type": "",
"deprecated": false,
@@ -19852,7 +19852,7 @@
"x-appwrite": {
"method": "updateVariable",
"group": "variables",
"weight": 426,
"weight": 427,
"cookies": false,
"type": "",
"deprecated": false,
@@ -19945,7 +19945,7 @@
"x-appwrite": {
"method": "deleteVariable",
"group": "variables",
"weight": 427,
"weight": 428,
"cookies": false,
"type": "",
"deprecated": false,
@@ -22288,7 +22288,7 @@
"x-appwrite": {
"method": "list",
"group": "files",
"weight": 440,
"weight": 441,
"cookies": false,
"type": "",
"deprecated": false,
@@ -22369,7 +22369,7 @@
"x-appwrite": {
"method": "createFileToken",
"group": "files",
"weight": 438,
"weight": 439,
"cookies": false,
"type": "",
"deprecated": false,
@@ -22454,7 +22454,7 @@
"x-appwrite": {
"method": "get",
"group": "tokens",
"weight": 439,
"weight": 440,
"cookies": false,
"type": "",
"deprecated": false,
@@ -22515,7 +22515,7 @@
"x-appwrite": {
"method": "update",
"group": "tokens",
"weight": 441,
"weight": 442,
"cookies": false,
"type": "",
"deprecated": false,
@@ -22587,7 +22587,7 @@
"x-appwrite": {
"method": "delete",
"group": "tokens",
"weight": 442,
"weight": 443,
"cookies": false,
"type": "",
"deprecated": false,
@@ -30460,6 +30460,11 @@
"description": "Function ID.",
"x-example": "5e5ea6g16897e"
},
"deploymentId": {
"type": "string",
"description": "Function's deployment ID used to create the execution.",
"x-example": "5e5ea5c16897e"
},
"trigger": {
"type": "string",
"description": "The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.",
@@ -30546,6 +30551,7 @@
"$updatedAt",
"$permissions",
"functionId",
"deploymentId",
"trigger",
"status",
"requestMethod",
@@ -30566,6 +30572,7 @@
"any"
],
"functionId": "5e5ea6g16897e",
"deploymentId": "5e5ea5c16897e",
"trigger": "http",
"status": "processing",
"requestMethod": "GET",
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
+55
View File
@@ -2080,6 +2080,61 @@ return [
'type' => 'text'
]
],
'scopes' => ['databases.read', 'databases.write', 'collections.write', 'attributes.write', 'documents.read', 'documents.write']
],
[
'icon' => 'icon-apple',
'id' => 'sign-in-with-apple',
'name' => 'Sign in with Apple',
'score' => 6,
'tagline' => 'Use native Apple sign-in APIs on Apple devices with Appwrite Auth',
'permissions' => ['any'],
'events' => [],
'cron' => '',
'timeout' => 15,
'useCases' => ['auth'],
'runtimes' => [
...getRuntimes($templateRuntimes['DART'], 'dart pub get', 'lib/main.dart', 'dart/sign_in_with_apple')
],
'instructions' => 'For documentation and instructions, check out <a target="_blank" rel="noopener noreferrer" class="link" href="https://github.com/appwrite/templates/tree/main/dart/sign_in_with_apple">file</a>.',
'vcsProvider' => 'github',
'providerRepositoryId' => 'templates',
'providerOwner' => 'appwrite',
'providerVersion' => '0.2.*',
'variables' => [
[
'name' => 'BUNDLE_ID',
'description' => 'Bundle ID of the app. <a class="u-bold" target="_blank" href="https://developer.apple.com/documentation/xcode/preparing-your-app-for-distribution/#Set-the-bundle-ID">Learn more</a>.',
'value' => '',
'placeholder' => 'com.companyname.appname',
'required' => true,
'type' => 'text'
],
[
'name' => 'TEAM_ID',
'description' => 'Team ID of the Apple Developer account.',
'value' => '',
'placeholder' => '6K3...5PH',
'required' => true,
'type' => 'text'
],
[
'name' => 'KEY_ID',
'description' => 'Key ID required to communicate with Apple Developer services. <a class="u-bold" target="_blank" href="https://developer.apple.com/help/account/keys/get-a-key-identifier/">Learn more</a>.',
'value' => '',
'placeholder' => '9G8...6YF',
'required' => true,
'type' => 'text'
],
[
'name' => 'KEY_CONTENTS_ENCODED',
'description' => 'Contents of Key required to communicated with Apple Developer services, encoded in Base64. <a class="u-bold" target="_blank" href="https://developer.apple.com/help/account/keys/revoke-edit-and-download-keys">Learn more</a>.',
'value' => '',
'placeholder' => '7x8aA...Ab7c',
'required' => true,
'type' => 'password'
]
],
'scopes' => ['users.read', 'users.write']
]
];
+3 -3
View File
@@ -1006,7 +1006,7 @@ return [
getFramework('NEXTJS', [
'providerRootDirectory' => './',
'installCommand' => 'pnpm install',
'buildCommand' => 'npm run build',
'buildCommand' => 'pnpm build',
]),
],
'vcsProvider' => 'github',
@@ -1015,7 +1015,7 @@ return [
'providerVersion' => '0.1.*',
'variables' => [
[
'name' => 'NEXT_PUBLIC_APPWRITE_FUNCTION_PROJECT_ID',
'name' => 'NEXT_PUBLIC_APPWRITE_FUNCTION_API_ENDPOINT',
'description' => 'Endpoint of Appwrite server',
'value' => '{apiEndpoint}',
'placeholder' => '{apiEndpoint}',
@@ -1023,7 +1023,7 @@ return [
'type' => 'text'
],
[
'name' => 'NEXT_PUBLIC_APPWRITE_FUNCTION_API_ENDPOINT',
'name' => 'NEXT_PUBLIC_APPWRITE_FUNCTION_PROJECT_ID',
'description' => 'Your Appwrite project ID',
'value' => '{projectId}',
'placeholder' => '{projectId}',
+318 -131
View File
@@ -25,6 +25,7 @@ use Appwrite\Network\Validator\Redirect;
use Appwrite\OpenSSL\OpenSSL;
use Appwrite\SDK\AuthType;
use Appwrite\SDK\ContentType;
use Appwrite\SDK\Deprecated;
use Appwrite\SDK\Method;
use Appwrite\SDK\MethodType;
use Appwrite\SDK\Response as SDKResponse;
@@ -1917,7 +1918,7 @@ App::post('/v1/account/tokens/magic-url')
))
->label('abuse-limit', 60)
->label('abuse-key', ['url:{url},email:{param-email}', 'url:{url},ip:{ip}'])
->param('userId', '', new CustomId(), 'Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can\'t start with a special char. Max length is 36 chars.')
->param('userId', '', new CustomId(), 'Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can\'t start with a special char. Max length is 36 chars. If the email address has never been used, a new account is created using the provided userId. Otherwise, if the email address is already attached to an account, the user ID is ignored.')
->param('email', '', new Email(), 'User email.')
->param('url', '', fn ($platforms, $devKey) => $devKey->isEmpty() ? new Redirect($platforms) : new URL(), 'URL to redirect the user back to your app from the magic URL login. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.', true, ['platforms', 'devKey'])
->param('phrase', false, new Boolean(), 'Toggle for security phrase. If enabled, email will be send with a randomly generated phrase and the phrase will also be included in the response. Confirming phrases match increases the security of your authentication flow.', true)
@@ -2170,7 +2171,7 @@ App::post('/v1/account/tokens/email')
))
->label('abuse-limit', 10)
->label('abuse-key', ['url:{url},email:{param-email}', 'url:{url},ip:{ip}'])
->param('userId', '', new CustomId(), 'User ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can\'t start with a special char. Max length is 36 chars.')
->param('userId', '', new CustomId(), 'User ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can\'t start with a special char. Max length is 36 chars. If the email address has never been used, a new account is created using the provided userId. Otherwise, if the email address is already attached to an account, the user ID is ignored.')
->param('email', '', new Email(), 'User email.')
->param('phrase', false, new Boolean(), 'Toggle for security phrase. If enabled, email will be send with a randomly generated phrase and the phrase will also be included in the response. Confirming phrases match increases the security of your authentication flow.', true)
->inject('request')
@@ -2418,7 +2419,10 @@ App::put('/v1/account/sessions/magic-url')
)
],
contentType: ContentType::JSON,
deprecated: true,
deprecated: new Deprecated(
since: '1.6.0',
replaceWith: 'account.createSession'
),
))
->label('abuse-limit', 10)
->label('abuse-key', 'ip:{ip},userId:{param-userId}')
@@ -2456,7 +2460,10 @@ App::put('/v1/account/sessions/phone')
)
],
contentType: ContentType::JSON,
deprecated: true,
deprecated: new Deprecated(
since: '1.6.0',
replaceWith: 'account.createSession'
),
))
->label('abuse-limit', 10)
->label('abuse-key', 'ip:{ip},userId:{param-userId}')
@@ -2498,7 +2505,7 @@ App::post('/v1/account/tokens/phone')
))
->label('abuse-limit', 10)
->label('abuse-key', ['url:{url},phone:{param-phone}', 'url:{url},ip:{ip}'])
->param('userId', '', new CustomId(), 'Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can\'t start with a special char. Max length is 36 chars.')
->param('userId', '', new CustomId(), 'Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can\'t start with a special char. Max length is 36 chars. If the phone number has never been used, a new account is created using the provided userId. Otherwise, if the phone number is already attached to an account, the user ID is ignored.')
->param('phone', '', new Phone(), 'Phone number. Format this number with a leading \'+\' and a country code, e.g., +16175551212.')
->inject('request')
->inject('response')
@@ -4008,20 +4015,40 @@ App::get('/v1/account/mfa/factors')
->desc('List factors')
->groups(['api', 'account', 'mfa'])
->label('scope', 'account')
->label('sdk', new Method(
namespace: 'account',
group: 'mfa',
name: 'listMfaFactors',
description: '/docs/references/account/list-mfa-factors.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MFA_FACTORS,
)
],
contentType: ContentType::JSON
))
->label('sdk', [
new Method(
namespace: 'account',
group: 'mfa',
name: 'listMfaFactors',
description: '/docs/references/account/list-mfa-factors.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MFA_FACTORS,
)
],
contentType: ContentType::JSON,
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'account.listMFAFactors',
),
),
new Method(
namespace: 'account',
group: 'mfa',
name: 'listMFAFactors',
description: '/docs/references/account/list-mfa-factors.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MFA_FACTORS,
)
],
contentType: ContentType::JSON
)
])
->inject('response')
->inject('user')
->action(function (Response $response, Document $user) {
@@ -4049,20 +4076,40 @@ App::post('/v1/account/mfa/authenticators/:type')
->label('audits.event', 'user.update')
->label('audits.resource', 'user/{response.$id}')
->label('audits.userId', '{response.$id}')
->label('sdk', new Method(
namespace: 'account',
group: 'mfa',
name: 'createMfaAuthenticator',
description: '/docs/references/account/create-mfa-authenticator.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MFA_TYPE,
)
],
contentType: ContentType::JSON
))
->label('sdk', [
new Method(
namespace: 'account',
group: 'mfa',
name: 'createMfaAuthenticator',
description: '/docs/references/account/create-mfa-authenticator.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MFA_TYPE,
)
],
contentType: ContentType::JSON,
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'account.createMFAAuthenticator',
),
),
new Method(
namespace: 'account',
group: 'mfa',
name: 'createMFAAuthenticator',
description: '/docs/references/account/create-mfa-authenticator.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MFA_TYPE,
)
],
contentType: ContentType::JSON
)
])
->param('type', null, new WhiteList([Type::TOTP]), 'Type of authenticator. Must be `' . Type::TOTP . '`')
->inject('requestTimestamp')
->inject('response')
@@ -4126,20 +4173,40 @@ App::put('/v1/account/mfa/authenticators/:type')
->label('audits.event', 'user.update')
->label('audits.resource', 'user/{response.$id}')
->label('audits.userId', '{response.$id}')
->label('sdk', new Method(
namespace: 'account',
group: 'mfa',
name: 'updateMfaAuthenticator',
description: '/docs/references/account/update-mfa-authenticator.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_USER,
)
],
contentType: ContentType::JSON
))
->label('sdk', [
new Method(
namespace: 'account',
group: 'mfa',
name: 'updateMfaAuthenticator',
description: '/docs/references/account/update-mfa-authenticator.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_USER,
)
],
contentType: ContentType::JSON,
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'account.updateMFAAuthenticator',
),
),
new Method(
namespace: 'account',
group: 'mfa',
name: 'updateMFAAuthenticator',
description: '/docs/references/account/update-mfa-authenticator.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_USER,
)
],
contentType: ContentType::JSON
)
])
->param('type', null, new WhiteList([Type::TOTP]), 'Type of authenticator.')
->param('otp', '', new Text(256), 'Valid verification token.')
->inject('response')
@@ -4196,20 +4263,40 @@ App::post('/v1/account/mfa/recovery-codes')
->label('audits.event', 'user.update')
->label('audits.resource', 'user/{response.$id}')
->label('audits.userId', '{response.$id}')
->label('sdk', new Method(
namespace: 'account',
group: 'mfa',
name: 'createMfaRecoveryCodes',
description: '/docs/references/account/create-mfa-recovery-codes.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_MFA_RECOVERY_CODES,
)
],
contentType: ContentType::JSON
))
->label('sdk', [
new Method(
namespace: 'account',
group: 'mfa',
name: 'createMfaRecoveryCodes',
description: '/docs/references/account/create-mfa-recovery-codes.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_MFA_RECOVERY_CODES,
)
],
contentType: ContentType::JSON,
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'account.createMFARecoveryCodes',
),
),
new Method(
namespace: 'account',
group: 'mfa',
name: 'createMFARecoveryCodes',
description: '/docs/references/account/create-mfa-recovery-codes.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_MFA_RECOVERY_CODES,
)
],
contentType: ContentType::JSON
)
])
->inject('response')
->inject('user')
->inject('dbForProject')
@@ -4243,20 +4330,40 @@ App::patch('/v1/account/mfa/recovery-codes')
->label('audits.event', 'user.update')
->label('audits.resource', 'user/{response.$id}')
->label('audits.userId', '{response.$id}')
->label('sdk', new Method(
namespace: 'account',
group: 'mfa',
name: 'updateMfaRecoveryCodes',
description: '/docs/references/account/update-mfa-recovery-codes.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MFA_RECOVERY_CODES,
)
],
contentType: ContentType::JSON
))
->label('sdk', [
new Method(
namespace: 'account',
group: 'mfa',
name: 'updateMfaRecoveryCodes',
description: '/docs/references/account/update-mfa-recovery-codes.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MFA_RECOVERY_CODES,
)
],
contentType: ContentType::JSON,
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'account.updateMFARecoveryCodes',
),
),
new Method(
namespace: 'account',
group: 'mfa',
name: 'updateMFARecoveryCodes',
description: '/docs/references/account/update-mfa-recovery-codes.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MFA_RECOVERY_CODES,
)
],
contentType: ContentType::JSON
)
])
->inject('dbForProject')
->inject('response')
->inject('user')
@@ -4285,20 +4392,40 @@ App::get('/v1/account/mfa/recovery-codes')
->desc('List MFA recovery codes')
->groups(['api', 'account', 'mfaProtected'])
->label('scope', 'account')
->label('sdk', new Method(
namespace: 'account',
group: 'mfa',
name: 'getMfaRecoveryCodes',
description: '/docs/references/account/get-mfa-recovery-codes.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MFA_RECOVERY_CODES,
)
],
contentType: ContentType::JSON
))
->label('sdk', [
new Method(
namespace: 'account',
group: 'mfa',
name: 'getMfaRecoveryCodes',
description: '/docs/references/account/get-mfa-recovery-codes.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MFA_RECOVERY_CODES,
)
],
contentType: ContentType::JSON,
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'account.getMFARecoveryCodes',
),
),
new Method(
namespace: 'account',
group: 'mfa',
name: 'getMFARecoveryCodes',
description: '/docs/references/account/get-mfa-recovery-codes.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MFA_RECOVERY_CODES,
)
],
contentType: ContentType::JSON
)
])
->inject('response')
->inject('user')
->action(function (Response $response, Document $user) {
@@ -4324,20 +4451,40 @@ App::delete('/v1/account/mfa/authenticators/:type')
->label('audits.event', 'user.update')
->label('audits.resource', 'user/{response.$id}')
->label('audits.userId', '{response.$id}')
->label('sdk', new Method(
namespace: 'account',
group: 'mfa',
name: 'deleteMfaAuthenticator',
description: '/docs/references/account/delete-mfa-authenticator.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_NOCONTENT,
model: Response::MODEL_NONE,
)
],
contentType: ContentType::NONE
))
->label('sdk', [
new Method(
namespace: 'account',
group: 'mfa',
name: 'deleteMfaAuthenticator',
description: '/docs/references/account/delete-mfa-authenticator.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_NOCONTENT,
model: Response::MODEL_NONE,
)
],
contentType: ContentType::NONE,
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'account.deleteMFAAuthenticator',
),
),
new Method(
namespace: 'account',
group: 'mfa',
name: 'deleteMFAAuthenticator',
description: '/docs/references/account/delete-mfa-authenticator.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_NOCONTENT,
model: Response::MODEL_NONE,
)
],
contentType: ContentType::NONE
)
])
->param('type', null, new WhiteList([Type::TOTP]), 'Type of authenticator.')
->inject('response')
->inject('user')
@@ -4370,20 +4517,40 @@ App::post('/v1/account/mfa/challenge')
->label('audits.event', 'challenge.create')
->label('audits.resource', 'user/{response.userId}')
->label('audits.userId', '{response.userId}')
->label('sdk', new Method(
namespace: 'account',
group: 'mfa',
name: 'createMfaChallenge',
description: '/docs/references/account/create-mfa-challenge.md',
auth: [],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_MFA_CHALLENGE,
)
],
contentType: ContentType::JSON,
))
->label('sdk', [
new Method(
namespace: 'account',
group: 'mfa',
name: 'createMfaChallenge',
description: '/docs/references/account/create-mfa-challenge.md',
auth: [],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_MFA_CHALLENGE,
)
],
contentType: ContentType::JSON,
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'account.createMFAChallenge',
),
),
new Method(
namespace: 'account',
group: 'mfa',
name: 'createMFAChallenge',
description: '/docs/references/account/create-mfa-challenge.md',
auth: [],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_MFA_CHALLENGE,
)
],
contentType: ContentType::JSON
)
])
->label('abuse-limit', 10)
->label('abuse-key', 'url:{url},userId:{userId}')
->param('factor', '', new WhiteList([Type::EMAIL, Type::PHONE, Type::TOTP, Type::RECOVERY_CODE]), 'Factor used for verification. Must be one of following: `' . Type::EMAIL . '`, `' . Type::PHONE . '`, `' . Type::TOTP . '`, `' . Type::RECOVERY_CODE . '`.')
@@ -4592,20 +4759,40 @@ App::put('/v1/account/mfa/challenge')
->label('audits.event', 'challenges.update')
->label('audits.resource', 'user/{response.userId}')
->label('audits.userId', '{response.userId}')
->label('sdk', new Method(
namespace: 'account',
group: 'mfa',
name: 'updateMfaChallenge',
description: '/docs/references/account/update-mfa-challenge.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_SESSION,
)
],
contentType: ContentType::JSON
))
->label('sdk', [
new Method(
namespace: 'account',
group: 'mfa',
name: 'updateMfaChallenge',
description: '/docs/references/account/update-mfa-challenge.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_SESSION,
)
],
contentType: ContentType::JSON,
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'account.updateMFAChallenge',
),
),
new Method(
namespace: 'account',
group: 'mfa',
name: 'updateMFAChallenge',
description: '/docs/references/account/update-mfa-challenge.md',
auth: [AuthType::SESSION, AuthType::JWT],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_SESSION,
)
],
contentType: ContentType::JSON
)
])
->label('abuse-limit', 10)
->label('abuse-key', 'url:{url},challengeId:{param-challengeId}')
->param('challengeId', '', new Text(256), 'ID of the challenge.')
+15 -13
View File
@@ -23,10 +23,12 @@ use Utopia\Storage\Device;
use Utopia\Storage\Device\Local;
use Utopia\Storage\Storage;
use Utopia\System\System;
use Utopia\Validator\AnyOf;
use Utopia\Validator\Domain;
use Utopia\Validator\Integer;
use Utopia\Validator\Multiple;
use Utopia\Validator\Text;
use Utopia\Validator\URL;
use Utopia\Validator\WhiteList;
App::get('/v1/health')
@@ -397,7 +399,7 @@ App::get('/v1/health/certificate')
],
contentType: ContentType::JSON
))
->param('domain', null, new Multiple([new Domain(), new PublicDomain()]), Multiple::TYPE_STRING, 'Domain name')
->param('domain', null, new Multiple([new AnyOf([new URL(), new Domain()]), new PublicDomain()]), Multiple::TYPE_STRING, 'Domain name')
->inject('response')
->action(function (string $domain, Response $response) {
if (filter_var($domain, FILTER_VALIDATE_URL)) {
@@ -554,12 +556,12 @@ App::get('/v1/health/queue/deletes')
contentType: ContentType::JSON
))
->param('threshold', 5000, new Integer(true), 'Queue size threshold. When hit (equal or higher), endpoint returns server error. Default value is 5000.', true)
->inject('publisher')
->inject('publisherDeletes')
->inject('response')
->action(function (int|string $threshold, Publisher $publisher, Response $response) {
->action(function (int|string $threshold, Publisher $publisherDeletes, Response $response) {
$threshold = \intval($threshold);
$size = $publisher->getQueueSize(new Queue(Event::DELETE_QUEUE_NAME));
$size = $publisherDeletes->getQueueSize(new Queue(Event::DELETE_QUEUE_NAME));
if ($size >= $threshold) {
throw new Exception(Exception::HEALTH_QUEUE_SIZE_EXCEEDED, "Queue size threshold hit. Current size is {$size} and threshold is {$threshold}.");
@@ -587,12 +589,12 @@ App::get('/v1/health/queue/mails')
contentType: ContentType::JSON
))
->param('threshold', 5000, new Integer(true), 'Queue size threshold. When hit (equal or higher), endpoint returns server error. Default value is 5000.', true)
->inject('publisher')
->inject('publisherMails')
->inject('response')
->action(function (int|string $threshold, Publisher $publisher, Response $response) {
->action(function (int|string $threshold, Publisher $publisherMails, Response $response) {
$threshold = \intval($threshold);
$size = $publisher->getQueueSize(new Queue(Event::MAILS_QUEUE_NAME));
$size = $publisherMails->getQueueSize(new Queue(Event::MAILS_QUEUE_NAME));
if ($size >= $threshold) {
throw new Exception(Exception::HEALTH_QUEUE_SIZE_EXCEEDED, "Queue size threshold hit. Current size is {$size} and threshold is {$threshold}.");
@@ -620,12 +622,12 @@ App::get('/v1/health/queue/messaging')
contentType: ContentType::JSON
))
->param('threshold', 5000, new Integer(true), 'Queue size threshold. When hit (equal or higher), endpoint returns server error. Default value is 5000.', true)
->inject('publisher')
->inject('publisherMessaging')
->inject('response')
->action(function (int|string $threshold, Publisher $publisher, Response $response) {
->action(function (int|string $threshold, Publisher $publisherMessaging, Response $response) {
$threshold = \intval($threshold);
$size = $publisher->getQueueSize(new Queue(Event::MESSAGING_QUEUE_NAME));
$size = $publisherMessaging->getQueueSize(new Queue(Event::MESSAGING_QUEUE_NAME));
if ($size >= $threshold) {
throw new Exception(Exception::HEALTH_QUEUE_SIZE_EXCEEDED, "Queue size threshold hit. Current size is {$size} and threshold is {$threshold}.");
@@ -686,12 +688,12 @@ App::get('/v1/health/queue/functions')
contentType: ContentType::JSON
))
->param('threshold', 5000, new Integer(true), 'Queue size threshold. When hit (equal or higher), endpoint returns server error. Default value is 5000.', true)
->inject('publisher')
->inject('publisherFunctions')
->inject('response')
->action(function (int|string $threshold, Publisher $publisher, Response $response) {
->action(function (int|string $threshold, Publisher $publisherFunctions, Response $response) {
$threshold = \intval($threshold);
$size = $publisher->getQueueSize(new Queue(Event::FUNCTIONS_QUEUE_NAME));
$size = $publisherFunctions->getQueueSize(new Queue(Event::FUNCTIONS_QUEUE_NAME));
if ($size >= $threshold) {
throw new Exception(Exception::HEALTH_QUEUE_SIZE_EXCEEDED, "Queue size threshold hit. Current size is {$size} and threshold is {$threshold}.");
+257 -104
View File
@@ -13,6 +13,7 @@ use Appwrite\Permission;
use Appwrite\Role;
use Appwrite\SDK\AuthType;
use Appwrite\SDK\ContentType;
use Appwrite\SDK\Deprecated;
use Appwrite\SDK\Method;
use Appwrite\SDK\Response as SDKResponse;
use Appwrite\Utopia\Database\Validator\CompoundUID;
@@ -238,19 +239,38 @@ App::post('/v1/messaging/providers/smtp')
->label('event', 'providers.[providerId].create')
->label('scope', 'providers.write')
->label('resourceType', RESOURCE_TYPE_PROVIDERS)
->label('sdk', new Method(
namespace: 'messaging',
group: 'providers',
name: 'createSmtpProvider',
description: '/docs/references/messaging/create-smtp-provider.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_PROVIDER,
)
]
))
->label('sdk', [
new Method(
namespace: 'messaging',
group: 'providers',
name: 'createSmtpProvider',
description: '/docs/references/messaging/create-smtp-provider.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_PROVIDER,
)
],
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'messaging.createSMTPProvider',
),
),
new Method(
namespace: 'messaging',
group: 'providers',
name: 'createSMTPProvider',
description: '/docs/references/messaging/create-smtp-provider.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_PROVIDER,
)
]
)
])
->param('providerId', '', new CustomId(), 'Provider ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can\'t start with a special char. Max length is 36 chars.')
->param('name', '', new Text(128), 'Provider name.')
->param('host', '', new Text(0), 'SMTP hosts. Either a single hostname or multiple semicolon-delimited hostnames. You can also specify a different port for each host such as `smtp1.example.com:25;smtp2.example.com`. You can also specify encryption type, for example: `tls://smtp1.example.com:587;ssl://smtp2.example.com:465"`. Hosts will be tried in order.')
@@ -752,19 +772,38 @@ App::post('/v1/messaging/providers/fcm')
->label('event', 'providers.[providerId].create')
->label('scope', 'providers.write')
->label('resourceType', RESOURCE_TYPE_PROVIDERS)
->label('sdk', new Method(
namespace: 'messaging',
group: 'providers',
name: 'createFcmProvider',
description: '/docs/references/messaging/create-fcm-provider.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_PROVIDER,
)
]
))
->label('sdk', [
new Method(
namespace: 'messaging',
group: 'providers',
name: 'createFcmProvider',
description: '/docs/references/messaging/create-fcm-provider.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_PROVIDER,
)
],
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'messaging.createFCMProvider',
),
),
new Method(
namespace: 'messaging',
group: 'providers',
name: 'createFCMProvider',
description: '/docs/references/messaging/create-fcm-provider.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_PROVIDER,
)
]
)
])
->param('providerId', '', new CustomId(), 'Provider ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can\'t start with a special char. Max length is 36 chars.')
->param('name', '', new Text(128), 'Provider name.')
->param('serviceAccountJSON', null, new JSON(), 'FCM service account JSON.', true)
@@ -822,19 +861,38 @@ App::post('/v1/messaging/providers/apns')
->label('event', 'providers.[providerId].create')
->label('scope', 'providers.write')
->label('resourceType', RESOURCE_TYPE_PROVIDERS)
->label('sdk', new Method(
namespace: 'messaging',
group: 'providers',
name: 'createApnsProvider',
description: '/docs/references/messaging/create-apns-provider.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_PROVIDER,
)
]
))
->label('sdk', [
new Method(
namespace: 'messaging',
group: 'providers',
name: 'createApnsProvider',
description: '/docs/references/messaging/create-apns-provider.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_PROVIDER,
)
],
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'messaging.createAPNSProvider',
),
),
new Method(
namespace: 'messaging',
group: 'providers',
name: 'createAPNSProvider',
description: '/docs/references/messaging/create-apns-provider.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_PROVIDER,
)
]
)
])
->param('providerId', '', new CustomId(), 'Provider ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can\'t start with a special char. Max length is 36 chars.')
->param('name', '', new Text(128), 'Provider name.')
->param('authKey', '', new Text(0), 'APNS authentication key.', true)
@@ -1322,19 +1380,38 @@ App::patch('/v1/messaging/providers/smtp/:providerId')
->label('event', 'providers.[providerId].update')
->label('scope', 'providers.write')
->label('resourceType', RESOURCE_TYPE_PROVIDERS)
->label('sdk', new Method(
namespace: 'messaging',
group: 'providers',
name: 'updateSmtpProvider',
description: '/docs/references/messaging/update-smtp-provider.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_PROVIDER,
)
]
))
->label('sdk', [
new Method(
namespace: 'messaging',
group: 'providers',
name: 'updateSmtpProvider',
description: '/docs/references/messaging/update-smtp-provider.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_PROVIDER,
)
],
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'messaging.updateSMTPProvider',
),
),
new Method(
namespace: 'messaging',
group: 'providers',
name: 'updateSMTPProvider',
description: '/docs/references/messaging/update-smtp-provider.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_PROVIDER,
)
]
)
])
->param('providerId', '', new UID(), 'Provider ID.')
->param('name', '', new Text(128), 'Provider name.', true)
->param('host', '', new Text(0), 'SMTP hosts. Either a single hostname or multiple semicolon-delimited hostnames. You can also specify a different port for each host such as `smtp1.example.com:25;smtp2.example.com`. You can also specify encryption type, for example: `tls://smtp1.example.com:587;ssl://smtp2.example.com:465"`. Hosts will be tried in order.', true)
@@ -1894,19 +1971,38 @@ App::patch('/v1/messaging/providers/fcm/:providerId')
->label('event', 'providers.[providerId].update')
->label('scope', 'providers.write')
->label('resourceType', RESOURCE_TYPE_PROVIDERS)
->label('sdk', new Method(
namespace: 'messaging',
group: 'providers',
name: 'updateFcmProvider',
description: '/docs/references/messaging/update-fcm-provider.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_PROVIDER,
)
]
))
->label('sdk', [
new Method(
namespace: 'messaging',
group: 'providers',
name: 'updateFcmProvider',
description: '/docs/references/messaging/update-fcm-provider.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_PROVIDER,
)
],
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'messaging.updateFCMProvider',
),
),
new Method(
namespace: 'messaging',
group: 'providers',
name: 'updateFCMProvider',
description: '/docs/references/messaging/update-fcm-provider.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_PROVIDER,
)
]
)
])
->param('providerId', '', new UID(), 'Provider ID.')
->param('name', '', new Text(128), 'Provider name.', true)
->param('enabled', null, new Boolean(), 'Set as enabled.', true)
@@ -1970,19 +2066,38 @@ App::patch('/v1/messaging/providers/apns/:providerId')
->label('event', 'providers.[providerId].update')
->label('scope', 'providers.write')
->label('resourceType', RESOURCE_TYPE_PROVIDERS)
->label('sdk', new Method(
namespace: 'messaging',
group: 'providers',
name: 'updateApnsProvider',
description: '/docs/references/messaging/update-apns-provider.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_PROVIDER,
)
]
))
->label('sdk', [
new Method(
namespace: 'messaging',
group: 'providers',
name: 'updateApnsProvider',
description: '/docs/references/messaging/update-apns-provider.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_PROVIDER,
)
],
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'messaging.updateAPNSProvider',
),
),
new Method(
namespace: 'messaging',
group: 'providers',
name: 'updateAPNSProvider',
description: '/docs/references/messaging/update-apns-provider.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_PROVIDER,
)
]
)
])
->param('providerId', '', new UID(), 'Provider ID.')
->param('name', '', new Text(128), 'Provider name.', true)
->param('enabled', null, new Boolean(), 'Set as enabled.', true)
@@ -3024,19 +3139,38 @@ App::post('/v1/messaging/messages/sms')
->label('event', 'messages.[messageId].create')
->label('scope', 'messages.write')
->label('resourceType', RESOURCE_TYPE_MESSAGES)
->label('sdk', new Method(
namespace: 'messaging',
group: 'messages',
name: 'createSms',
description: '/docs/references/messaging/create-sms.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_MESSAGE,
)
]
))
->label('sdk', [
new Method(
namespace: 'messaging',
group: 'messages',
name: 'createSms',
description: '/docs/references/messaging/create-sms.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_MESSAGE,
)
],
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'messaging.createSMS',
),
),
new Method(
namespace: 'messaging',
group: 'messages',
name: 'createSMS',
description: '/docs/references/messaging/create-sms.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_MESSAGE,
)
]
)
])
->param('messageId', '', new CustomId(), 'Message ID. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can\'t start with a special char. Max length is 36 chars.')
->param('content', '', new Text(64230), 'SMS Content.')
->param('topics', [], new ArrayList(new UID()), 'List of Topic IDs.', true)
@@ -3851,19 +3985,38 @@ App::patch('/v1/messaging/messages/sms/:messageId')
->label('event', 'messages.[messageId].update')
->label('scope', 'messages.write')
->label('resourceType', RESOURCE_TYPE_MESSAGES)
->label('sdk', new Method(
namespace: 'messaging',
group: 'messages',
name: 'updateSms',
description: '/docs/references/messaging/update-sms.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MESSAGE,
)
]
))
->label('sdk', [
new Method(
namespace: 'messaging',
group: 'messages',
name: 'updateSms',
description: '/docs/references/messaging/update-sms.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MESSAGE,
)
],
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'messaging.updateSMS',
),
),
new Method(
namespace: 'messaging',
group: 'messages',
name: 'updateSMS',
description: '/docs/references/messaging/update-sms.md',
auth: [AuthType::ADMIN, AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MESSAGE,
)
]
)
])
->param('messageId', '', new UID(), 'Message ID.')
->param('topics', null, new ArrayList(new UID()), 'List of Topic IDs.', true)
->param('users', null, new ArrayList(new UID()), 'List of User IDs.', true)
+14 -4
View File
@@ -35,6 +35,7 @@ use Utopia\Storage\Compression\Compression;
use Utopia\Storage\Device;
use Utopia\System\System;
use Utopia\Validator\ArrayList;
use Utopia\Validator\Boolean;
use Utopia\Validator\Integer;
use Utopia\Validator\Text;
use Utopia\Validator\URL;
@@ -328,24 +329,33 @@ App::post('/v1/migrations/csv')
->param('bucketId', '', new UID(), 'Storage bucket unique ID. You can create a new storage bucket using the Storage service [server integration](https://appwrite.io/docs/server/storage#createBucket).')
->param('fileId', '', new UID(), 'File ID.')
->param('resourceId', null, new CompoundUID(), 'Composite ID in the format {databaseId:collectionId}, identifying a collection within a database.')
->param('internalFile', false, new Boolean(), 'Is the file stored in an internal bucket?', true)
->inject('response')
->inject('dbForProject')
->inject('dbForPlatform')
->inject('project')
->inject('deviceForFiles')
->inject('deviceForImports')
->inject('queueForEvents')
->inject('queueForMigrations')
->action(function (string $bucketId, string $fileId, string $resourceId, Response $response, Database $dbForProject, Document $project, Device $deviceForFiles, Device $deviceForImports, Event $queueForEvents, Migration $queueForMigrations) {
->action(function (string $bucketId, string $fileId, string $resourceId, bool $internalFile, Response $response, Database $dbForProject, Database $dbForPlatform, Document $project, Device $deviceForFiles, Device $deviceForImports, Event $queueForEvents, Migration $queueForMigrations) {
$isAPIKey = Auth::isAppUser(Authorization::getRoles());
$isPrivilegedUser = Auth::isPrivilegedUser(Authorization::getRoles());
$bucket = Authorization::skip(fn () => $dbForProject->getDocument('buckets', $bucketId));
if ($internalFile && !$isPrivilegedUser) {
throw new Exception(Exception::USER_UNAUTHORIZED);
}
$bucket = Authorization::skip(function () use ($internalFile, $dbForPlatform, $dbForProject, $bucketId) {
if ($internalFile) {
return $dbForPlatform->getDocument('buckets', 'default');
}
return $dbForProject->getDocument('buckets', $bucketId);
});
if ($bucket->isEmpty() || (!$isAPIKey && !$isPrivilegedUser)) {
throw new Exception(Exception::STORAGE_BUCKET_NOT_FOUND);
}
$file = Authorization::skip(fn () => $dbForProject->getDocument('bucket_' . $bucket->getSequence(), $fileId));
$file = Authorization::skip(fn () => $internalFile ? $dbForPlatform->getDocument('bucket_' . $bucket->getSequence(), $fileId) : $dbForProject->getDocument('bucket_' . $bucket->getSequence(), $fileId));
if ($file->isEmpty()) {
throw new Exception(Exception::STORAGE_FILE_NOT_FOUND);
}
+227 -92
View File
@@ -12,6 +12,7 @@ use Appwrite\Network\Platform;
use Appwrite\Network\Validator\Email;
use Appwrite\SDK\AuthType;
use Appwrite\SDK\ContentType;
use Appwrite\SDK\Deprecated;
use Appwrite\SDK\Method;
use Appwrite\SDK\Response as SDKResponse;
use Appwrite\Template\Template;
@@ -619,19 +620,38 @@ App::patch('/v1/projects/:projectId/api')
->desc('Update API status')
->groups(['api', 'projects'])
->label('scope', 'projects.write')
->label('sdk', new Method(
namespace: 'projects',
group: 'projects',
name: 'updateApiStatus',
description: '/docs/references/projects/update-api-status.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_PROJECT,
)
]
))
->label('sdk', [
new Method(
namespace: 'projects',
group: 'projects',
name: 'updateApiStatus',
description: '/docs/references/projects/update-api-status.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_PROJECT,
)
],
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'projects.updateAPIStatus',
),
),
new Method(
namespace: 'projects',
group: 'projects',
name: 'updateAPIStatus',
description: '/docs/references/projects/update-api-status.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_PROJECT,
)
]
)
])
->param('projectId', '', new UID(), 'Project unique ID.')
->param('api', '', new WhiteList(array_keys(Config::getParam('apis')), true), 'API name.')
->param('status', null, new Boolean(), 'API status.')
@@ -657,19 +677,38 @@ App::patch('/v1/projects/:projectId/api/all')
->desc('Update all API status')
->groups(['api', 'projects'])
->label('scope', 'projects.write')
->label('sdk', new Method(
namespace: 'projects',
group: 'projects',
name: 'updateApiStatusAll',
description: '/docs/references/projects/update-api-status-all.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_PROJECT,
)
]
))
->label('sdk', [
new Method(
namespace: 'projects',
group: 'projects',
name: 'updateApiStatusAll',
description: '/docs/references/projects/update-api-status-all.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_PROJECT,
)
],
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'projects.updateAPIStatusAll',
),
),
new Method(
namespace: 'projects',
group: 'projects',
name: 'updateAPIStatusAll',
description: '/docs/references/projects/update-api-status-all.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_PROJECT,
)
]
)
])
->param('projectId', '', new UID(), 'Project unique ID.')
->param('status', null, new Boolean(), 'API status.')
->inject('response')
@@ -2018,19 +2057,38 @@ App::patch('/v1/projects/:projectId/smtp')
->desc('Update SMTP')
->groups(['api', 'projects'])
->label('scope', 'projects.write')
->label('sdk', new Method(
namespace: 'projects',
group: 'templates',
name: 'updateSmtp',
description: '/docs/references/projects/update-smtp.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_PROJECT,
)
]
))
->label('sdk', [
new Method(
namespace: 'projects',
group: 'templates',
name: 'updateSmtp',
description: '/docs/references/projects/update-smtp.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_PROJECT,
)
],
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'projects.updateSMTP',
),
),
new Method(
namespace: 'projects',
group: 'templates',
name: 'updateSMTP',
description: '/docs/references/projects/update-smtp.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_PROJECT,
)
]
)
])
->param('projectId', '', new UID(), 'Project unique ID.')
->param('enabled', false, new Boolean(), 'Enable custom SMTP service')
->param('senderName', '', new Text(255, 0), 'Name of the email sender', true)
@@ -2115,19 +2173,38 @@ App::post('/v1/projects/:projectId/smtp/tests')
->desc('Create SMTP test')
->groups(['api', 'projects'])
->label('scope', 'projects.write')
->label('sdk', new Method(
namespace: 'projects',
group: 'templates',
name: 'createSmtpTest',
description: '/docs/references/projects/create-smtp-test.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_NOCONTENT,
model: Response::MODEL_NONE,
)
]
))
->label('sdk', [
new Method(
namespace: 'projects',
group: 'templates',
name: 'createSmtpTest',
description: '/docs/references/projects/create-smtp-test.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_NOCONTENT,
model: Response::MODEL_NONE,
)
],
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'projects.createSMTPTest',
),
),
new Method(
namespace: 'projects',
group: 'templates',
name: 'createSMTPTest',
description: '/docs/references/projects/create-smtp-test.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_NOCONTENT,
model: Response::MODEL_NONE,
)
]
)
])
->param('projectId', '', new UID(), 'Project unique ID.')
->param('emails', [], new ArrayList(new Email(), 10), 'Array of emails to send test email to. Maximum of 10 emails are allowed.')
->param('senderName', System::getEnv('_APP_SYSTEM_EMAIL_NAME', APP_NAME . ' Server'), new Text(255, 0), 'Name of the email sender')
@@ -2190,19 +2267,38 @@ App::get('/v1/projects/:projectId/templates/sms/:type/:locale')
->desc('Get custom SMS template')
->groups(['api', 'projects'])
->label('scope', 'projects.write')
->label('sdk', new Method(
namespace: 'projects',
group: 'templates',
name: 'getSmsTemplate',
description: '/docs/references/projects/get-sms-template.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_SMS_TEMPLATE,
)
]
))
->label('sdk', [
new Method(
namespace: 'projects',
group: 'templates',
name: 'getSmsTemplate',
description: '/docs/references/projects/get-sms-template.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_SMS_TEMPLATE,
)
],
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'projects.getSMSTemplate',
),
),
new Method(
namespace: 'projects',
group: 'templates',
name: 'getSMSTemplate',
description: '/docs/references/projects/get-sms-template.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_SMS_TEMPLATE,
)
]
)
])
->param('projectId', '', new UID(), 'Project unique ID.')
->param('type', '', new WhiteList(Config::getParam('locale-templates')['sms'] ?? []), 'Template type')
->param('locale', '', fn ($localeCodes) => new WhiteList($localeCodes), 'Template locale', false, ['localeCodes'])
@@ -2337,19 +2433,38 @@ App::patch('/v1/projects/:projectId/templates/sms/:type/:locale')
->desc('Update custom SMS template')
->groups(['api', 'projects'])
->label('scope', 'projects.write')
->label('sdk', new Method(
namespace: 'projects',
group: 'templates',
name: 'updateSmsTemplate',
description: '/docs/references/projects/update-sms-template.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_SMS_TEMPLATE,
)
]
))
->label('sdk', [
new Method(
namespace: 'projects',
group: 'templates',
name: 'updateSmsTemplate',
description: '/docs/references/projects/update-sms-template.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_SMS_TEMPLATE,
)
],
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'projects.updateSMSTemplate',
),
),
new Method(
namespace: 'projects',
group: 'templates',
name: 'updateSMSTemplate',
description: '/docs/references/projects/update-sms-template.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_SMS_TEMPLATE,
)
]
)
])
->param('projectId', '', new UID(), 'Project unique ID.')
->param('type', '', new WhiteList(Config::getParam('locale-templates')['sms'] ?? []), 'Template type')
->param('locale', '', fn ($localeCodes) => new WhiteList($localeCodes), 'Template locale', false, ['localeCodes'])
@@ -2441,20 +2556,40 @@ App::delete('/v1/projects/:projectId/templates/sms/:type/:locale')
->desc('Reset custom SMS template')
->groups(['api', 'projects'])
->label('scope', 'projects.write')
->label('sdk', new Method(
namespace: 'projects',
group: 'templates',
name: 'deleteSmsTemplate',
description: '/docs/references/projects/delete-sms-template.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_SMS_TEMPLATE,
)
],
contentType: ContentType::JSON
))
->label('sdk', [
new Method(
namespace: 'projects',
group: 'templates',
name: 'deleteSmsTemplate',
description: '/docs/references/projects/delete-sms-template.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_SMS_TEMPLATE,
)
],
contentType: ContentType::JSON,
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'projects.deleteSMSTemplate',
),
),
new Method(
namespace: 'projects',
group: 'templates',
name: 'deleteSMSTemplate',
description: '/docs/references/projects/delete-sms-template.md',
auth: [AuthType::ADMIN],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_SMS_TEMPLATE,
)
],
contentType: ContentType::JSON
)
])
->param('projectId', '', new UID(), 'Project unique ID.')
->param('type', '', new WhiteList(Config::getParam('locale-templates')['sms'] ?? []), 'Template type')
->param('locale', '', fn ($localeCodes) => new WhiteList($localeCodes), 'Template locale', false, ['localeCodes'])
+195 -79
View File
@@ -19,6 +19,7 @@ use Appwrite\Hooks\Hooks;
use Appwrite\Network\Validator\Email;
use Appwrite\SDK\AuthType;
use Appwrite\SDK\ContentType;
use Appwrite\SDK\Deprecated;
use Appwrite\SDK\Method;
use Appwrite\SDK\Response as SDKResponse;
use Appwrite\Utopia\Database\Validator\CustomId;
@@ -1756,19 +1757,38 @@ App::patch('/v1/users/:userId/mfa')
->label('audits.resource', 'user/{response.$id}')
->label('audits.userId', '{response.$id}')
->label('usage.metric', 'users.{scope}.requests.update')
->label('sdk', new Method(
namespace: 'users',
group: 'users',
name: 'updateMfa',
description: '/docs/references/users/update-user-mfa.md',
auth: [AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_USER,
)
]
))
->label('sdk', [
new Method(
namespace: 'users',
group: 'users',
name: 'updateMfa',
description: '/docs/references/users/update-user-mfa.md',
auth: [AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_USER,
)
],
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'users.updateMFA',
),
),
new Method(
namespace: 'users',
group: 'users',
name: 'updateMFA',
description: '/docs/references/users/update-user-mfa.md',
auth: [AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_USER,
)
]
)
])
->param('userId', '', new UID(), 'User ID.')
->param('mfa', null, new Boolean(), 'Enable or disable MFA.')
->inject('response')
@@ -1796,19 +1816,38 @@ App::get('/v1/users/:userId/mfa/factors')
->groups(['api', 'users'])
->label('scope', 'users.read')
->label('usage.metric', 'users.{scope}.requests.read')
->label('sdk', new Method(
namespace: 'users',
group: 'mfa',
name: 'listMfaFactors',
description: '/docs/references/users/list-mfa-factors.md',
auth: [AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MFA_FACTORS,
)
]
))
->label('sdk', [
new Method(
namespace: 'users',
group: 'mfa',
name: 'listMfaFactors',
description: '/docs/references/users/list-mfa-factors.md',
auth: [AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MFA_FACTORS,
)
],
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'users.listMFAFactors',
),
),
new Method(
namespace: 'users',
group: 'mfa',
name: 'listMFAFactors',
description: '/docs/references/users/list-mfa-factors.md',
auth: [AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MFA_FACTORS,
)
]
)
])
->param('userId', '', new UID(), 'User ID.')
->inject('response')
->inject('dbForProject')
@@ -1835,19 +1874,38 @@ App::get('/v1/users/:userId/mfa/recovery-codes')
->groups(['api', 'users'])
->label('scope', 'users.read')
->label('usage.metric', 'users.{scope}.requests.read')
->label('sdk', new Method(
namespace: 'users',
group: 'mfa',
name: 'getMfaRecoveryCodes',
description: '/docs/references/users/get-mfa-recovery-codes.md',
auth: [AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MFA_RECOVERY_CODES,
)
]
))
->label('sdk', [
new Method(
namespace: 'users',
group: 'mfa',
name: 'getMfaRecoveryCodes',
description: '/docs/references/users/get-mfa-recovery-codes.md',
auth: [AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MFA_RECOVERY_CODES,
)
],
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'users.getMFARecoveryCodes',
),
),
new Method(
namespace: 'users',
group: 'mfa',
name: 'getMFARecoveryCodes',
description: '/docs/references/users/get-mfa-recovery-codes.md',
auth: [AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MFA_RECOVERY_CODES,
)
]
)
])
->param('userId', '', new UID(), 'User ID.')
->inject('response')
->inject('dbForProject')
@@ -1880,19 +1938,38 @@ App::patch('/v1/users/:userId/mfa/recovery-codes')
->label('audits.resource', 'user/{response.$id}')
->label('audits.userId', '{response.$id}')
->label('usage.metric', 'users.{scope}.requests.update')
->label('sdk', new Method(
namespace: 'users',
group: 'mfa',
name: 'createMfaRecoveryCodes',
description: '/docs/references/users/create-mfa-recovery-codes.md',
auth: [AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_MFA_RECOVERY_CODES,
)
]
))
->label('sdk', [
new Method(
namespace: 'users',
group: 'mfa',
name: 'createMfaRecoveryCodes',
description: '/docs/references/users/create-mfa-recovery-codes.md',
auth: [AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_MFA_RECOVERY_CODES,
)
],
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'users.createMFARecoveryCodes',
),
),
new Method(
namespace: 'users',
group: 'mfa',
name: 'createMFARecoveryCodes',
description: '/docs/references/users/create-mfa-recovery-codes.md',
auth: [AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_CREATED,
model: Response::MODEL_MFA_RECOVERY_CODES,
)
]
)
])
->param('userId', '', new UID(), 'User ID.')
->inject('response')
->inject('dbForProject')
@@ -1932,19 +2009,38 @@ App::put('/v1/users/:userId/mfa/recovery-codes')
->label('audits.resource', 'user/{response.$id}')
->label('audits.userId', '{response.$id}')
->label('usage.metric', 'users.{scope}.requests.update')
->label('sdk', new Method(
namespace: 'users',
group: 'mfa',
name: 'updateMfaRecoveryCodes',
description: '/docs/references/users/update-mfa-recovery-codes.md',
auth: [AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MFA_RECOVERY_CODES,
)
]
))
->label('sdk', [
new Method(
namespace: 'users',
group: 'mfa',
name: 'updateMfaRecoveryCodes',
description: '/docs/references/users/update-mfa-recovery-codes.md',
auth: [AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MFA_RECOVERY_CODES,
)
],
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'users.updateMFARecoveryCodes',
),
),
new Method(
namespace: 'users',
group: 'mfa',
name: 'updateMFARecoveryCodes',
description: '/docs/references/users/update-mfa-recovery-codes.md',
auth: [AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_OK,
model: Response::MODEL_MFA_RECOVERY_CODES,
)
]
)
])
->param('userId', '', new UID(), 'User ID.')
->inject('response')
->inject('dbForProject')
@@ -1983,20 +2079,40 @@ App::delete('/v1/users/:userId/mfa/authenticators/:type')
->label('audits.resource', 'user/{response.$id}')
->label('audits.userId', '{response.$id}')
->label('usage.metric', 'users.{scope}.requests.update')
->label('sdk', new Method(
namespace: 'users',
group: 'mfa',
name: 'deleteMfaAuthenticator',
description: '/docs/references/users/delete-mfa-authenticator.md',
auth: [AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_NOCONTENT,
model: Response::MODEL_NONE,
)
],
contentType: ContentType::NONE
))
->label('sdk', [
new Method(
namespace: 'users',
group: 'mfa',
name: 'deleteMfaAuthenticator',
description: '/docs/references/users/delete-mfa-authenticator.md',
auth: [AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_NOCONTENT,
model: Response::MODEL_NONE,
)
],
contentType: ContentType::NONE,
deprecated: new Deprecated(
since: '1.8.0',
replaceWith: 'users.deleteMFAAuthenticator',
),
),
new Method(
namespace: 'users',
group: 'mfa',
name: 'deleteMFAAuthenticator',
description: '/docs/references/users/delete-mfa-authenticator.md',
auth: [AuthType::KEY],
responses: [
new SDKResponse(
code: Response::STATUS_CODE_NOCONTENT,
model: Response::MODEL_NONE,
)
],
contentType: ContentType::NONE
)
])
->param('userId', '', new UID(), 'User ID.')
->param('type', null, new WhiteList([Type::TOTP]), 'Type of authenticator.')
->inject('response')
+36 -11
View File
@@ -28,7 +28,6 @@ use Appwrite\Utopia\Response\Filters\V16 as ResponseV16;
use Appwrite\Utopia\Response\Filters\V17 as ResponseV17;
use Appwrite\Utopia\Response\Filters\V18 as ResponseV18;
use Appwrite\Utopia\Response\Filters\V19 as ResponseV19;
use Appwrite\Utopia\Response\Filters\V20 as ResponseV20;
use Appwrite\Utopia\View;
use Executor\Executor;
use MaxMind\Db\Reader;
@@ -357,13 +356,18 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw
}
}
$executionId = ID::unique();
$headers = \array_merge([], $requestHeaders);
$headers['x-appwrite-execution-id'] = $executionId ?? '';
$headers['x-appwrite-user-id'] = '';
$headers['x-appwrite-country-code'] = '';
$headers['x-appwrite-continent-code'] = '';
$headers['x-appwrite-continent-eu'] = 'false';
$ip = $request->getIP();
$headers['x-appwrite-client-ip'] = $ip;
$jwtExpiry = $resource->getAttribute('timeout', 900);
$jwtExpiry = $resource->getAttribute('timeout', 900) + 60; // 1min extra to account for possible cold-starts
$jwtObj = new JWT(System::getEnv('_APP_OPENSSL_KEY_V1'), 'HS256', $jwtExpiry, 0);
$jwtKey = $jwtObj->encode([
'projectId' => $project->getId(),
@@ -373,7 +377,6 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw
$headers['x-appwrite-trigger'] = 'http';
$headers['x-appwrite-user-jwt'] = '';
$ip = $headers['x-real-ip'] ?? '';
if (!empty($ip)) {
$record = $geodb->get($ip);
@@ -393,8 +396,6 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw
}
}
$executionId = ID::unique();
$execution = new Document([
'$id' => $executionId,
'$permissions' => [],
@@ -610,6 +611,12 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw
}
}
if ($deployment->getAttribute('resourceType') === 'functions') {
$executionResponse['headers']['x-appwrite-execution-id'] = $execution->getId();
} elseif ($deployment->getAttribute('resourceType') === 'sites') {
$executionResponse['headers']['x-appwrite-log-id'] = $execution->getId();
}
$headersFiltered = [];
foreach ($executionResponse['headers'] as $key => $value) {
if (\in_array(\strtolower($key), FUNCTION_ALLOWLIST_HEADERS_RESPONSE)) {
@@ -617,11 +624,32 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw
}
}
// Truncate logs if they exceed the limit
$maxLogLength = APP_FUNCTION_LOG_LENGTH_LIMIT;
$logs = $executionResponse['logs'] ?? '';
if (\is_string($logs) && \strlen($logs) > $maxLogLength) {
$warningMessage = "[WARNING] Logs truncated. The output exceeded {$maxLogLength} characters.\n";
$warningLength = \strlen($warningMessage);
$maxContentLength = max(0, $maxLogLength - $warningLength);
$logs = $warningMessage . ($maxContentLength > 0 ? \substr($logs, -$maxContentLength) : '');
}
// Truncate errors if they exceed the limit
$maxErrorLength = APP_FUNCTION_ERROR_LENGTH_LIMIT;
$errors = $executionResponse['errors'] ?? '';
if (\is_string($errors) && \strlen($errors) > $maxErrorLength) {
$warningMessage = "[WARNING] Errors truncated. The output exceeded {$maxErrorLength} characters.\n";
$warningLength = \strlen($warningMessage);
$maxContentLength = max(0, $maxErrorLength - $warningLength);
$errors = $warningMessage . ($maxContentLength > 0 ? \substr($errors, -$maxContentLength) : '');
}
/** Update execution status */
$status = $executionResponse['statusCode'] >= 500 ? 'failed' : 'completed';
$execution->setAttribute('status', $status);
$execution->setAttribute('logs', $executionResponse['logs']);
$execution->setAttribute('errors', $executionResponse['errors']);
$execution->setAttribute('logs', $logs);
$execution->setAttribute('errors', $errors);
$execution->setAttribute('responseStatusCode', $executionResponse['statusCode']);
$execution->setAttribute('responseHeaders', $headersFiltered);
$execution->setAttribute('duration', $executionResponse['duration']);
@@ -854,7 +882,7 @@ App::init()
}
if (version_compare($requestFormat, '1.8.0', '<')) {
$dbForProject = $getProjectDB($project);
$request->addFilter(new RequestV20($dbForProject, $request->getParams()));
$request->addFilter(new RequestV20($dbForProject, $route->getPathValues($request)));
}
}
@@ -994,9 +1022,6 @@ App::init()
if (version_compare($responseFormat, '1.7.0', '<')) {
$response->addFilter(new ResponseV19());
}
if (version_compare($responseFormat, '1.8.0', '<')) {
$response->addFilter(new ResponseV20());
}
if (version_compare($responseFormat, APP_VERSION_STABLE, '>')) {
$warnings[] = "The current SDK is built for Appwrite " . $responseFormat . ". However, the current Appwrite server version is " . APP_VERSION_STABLE . ". Please downgrade your SDK to match the Appwrite version: https://appwrite.io/docs/sdks";
}
+13 -5
View File
@@ -29,6 +29,7 @@ use Utopia\Database\DateTime;
use Utopia\Database\Document;
use Utopia\Database\Helpers\Role;
use Utopia\Database\Validator\Authorization;
use Utopia\Queue\Broker\Pool as BrokerPool;
use Utopia\Queue\Publisher;
use Utopia\System\System;
use Utopia\Telemetry\Adapter as Telemetry;
@@ -60,6 +61,12 @@ $parseLabel = function (string $label, array $responsePayload, array $requestPar
return $label;
};
/**
* This isolated event handling for `users.*.create` which is based on a `Database::EVENT_DOCUMENT_CREATE` listener may look odd, but it is **intentional**.
*
* Accounts can be created in many ways beyond `createAccount`
* (anonymous, OAuth, phone, etc.), and those flows are probably not covered in event tests; so we handle this here.
*/
$eventDatabaseListener = function (Document $project, Document $document, Response $response, Event $queueForEvents, Func $queueForFunctions, Webhook $queueForWebhooks, Realtime $queueForRealtime) {
// Only trigger events for user creation with the database listener.
if ($document->getCollection() !== 'users') {
@@ -372,9 +379,9 @@ App::init()
}
// Do now allow access if scope is not allowed
$scope = $route->getLabel('scope', 'none');
if (!\in_array($scope, $scopes)) {
throw new Exception(Exception::GENERAL_UNAUTHORIZED_SCOPE, $user->getAttribute('email', 'User') . ' (role: ' . \strtolower($roles[$role]['label']) . ') missing scope (' . $scope . ')');
$allowed = (array)$route->getLabel('scope', 'none');
if (empty(\array_intersect($allowed, $scopes))) {
throw new Exception(Exception::GENERAL_UNAUTHORIZED_SCOPE, $user->getAttribute('email', 'User') . ' (role: ' . \strtolower($roles[$role]['label']) . ') missing scopes (' . \json_encode($allowed) . ')');
}
// Do not allow access to blocked accounts
@@ -408,6 +415,7 @@ App::init()
->inject('project')
->inject('user')
->inject('publisher')
->inject('publisherFunctions')
->inject('queueForEvents')
->inject('queueForMessaging')
->inject('queueForAudits')
@@ -423,7 +431,7 @@ App::init()
->inject('plan')
->inject('devKey')
->inject('telemetry')
->action(function (App $utopia, Request $request, Response $response, Document $project, Document $user, Publisher $publisher, Event $queueForEvents, Messaging $queueForMessaging, Audit $queueForAudits, Delete $queueForDeletes, EventDatabase $queueForDatabase, Build $queueForBuilds, StatsUsage $queueForStatsUsage, Database $dbForProject, callable $timelimit, Document $resourceToken, string $mode, ?Key $apiKey, array $plan, Document $devKey, Telemetry $telemetry) use ($usageDatabaseListener, $eventDatabaseListener) {
->action(function (App $utopia, Request $request, Response $response, Document $project, Document $user, Publisher $publisher, BrokerPool $publisherFunctions, Event $queueForEvents, Messaging $queueForMessaging, Audit $queueForAudits, Delete $queueForDeletes, EventDatabase $queueForDatabase, Build $queueForBuilds, StatsUsage $queueForStatsUsage, Database $dbForProject, callable $timelimit, Document $resourceToken, string $mode, ?Key $apiKey, array $plan, Document $devKey, Telemetry $telemetry) use ($usageDatabaseListener, $eventDatabaseListener) {
$route = $utopia->getRoute();
@@ -535,7 +543,7 @@ App::init()
// Clone the queues, to prevent events triggered by the database listener
// from overwriting the events that are supposed to be triggered in the shutdown hook.
$queueForEventsClone = new Event($publisher);
$queueForFunctions = new Func($publisher);
$queueForFunctions = new Func($publisherFunctions);
$queueForWebhooks = new Webhook($publisher);
$queueForRealtime = new Realtime();
+3 -1
View File
@@ -143,8 +143,10 @@ const APP_AUTH_TYPE_KEY = 'Key';
const APP_AUTH_TYPE_ADMIN = 'Admin';
// Response related
const MAX_OUTPUT_CHUNK_SIZE = 10 * 1024 * 1024; // 10MB
const APP_FUNCTION_LOG_LENGTH_LIMIT = 1000000;
const APP_FUNCTION_ERROR_LENGTH_LIMIT = 1000000;
// Function headers
const FUNCTION_ALLOWLIST_HEADERS_REQUEST = ['content-type', 'agent', 'content-length', 'host'];
const FUNCTION_ALLOWLIST_HEADERS_REQUEST = ['content-type', 'agent', 'content-length', 'host', 'x-appwrite-client-ip'];
const FUNCTION_ALLOWLIST_HEADERS_RESPONSE = ['content-type', 'content-length'];
// Message types
const MESSAGE_TYPE_EMAIL = 'email';
+12 -12
View File
@@ -87,24 +87,24 @@ App::setResource('publisher', function (Group $pools) {
App::setResource('publisherDatabases', function (BrokerPool $publisher) {
return $publisher;
}, ['publisher']);
App::setResource('publisherFunctions', function (BrokerPool $publisher) {
return $publisher;
}, ['publisher']);
App::setResource('publisherMigrations', function (BrokerPool $publisher) {
return $publisher;
}, ['publisher']);
App::setResource('publisherStatsUsage', function (BrokerPool $publisher) {
return $publisher;
}, ['publisher']);
App::setResource('consumer', function (Group $pools) {
return new BrokerPool(consumer: $pools->get('consumer'));
}, ['pools']);
App::setResource('consumerDatabases', function (BrokerPool $consumer) {
return $consumer;
}, ['consumer']);
App::setResource('consumerMigrations', function (BrokerPool $consumer) {
return $consumer;
}, ['consumer']);
App::setResource('consumerStatsUsage', function (BrokerPool $consumer) {
return $consumer;
}, ['consumer']);
App::setResource('publisherMails', function (BrokerPool $publisher) {
return $publisher;
}, ['publisher']);
App::setResource('publisherDeletes', function (BrokerPool $publisher) {
return $publisher;
}, ['publisher']);
App::setResource('publisherMessaging', function (BrokerPool $publisher) {
return $publisher;
}, ['publisher']);
App::setResource('queueForMessaging', function (Publisher $publisher) {
return new Messaging($publisher);
}, ['publisher']);
+25 -2
View File
@@ -6,9 +6,32 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>404 Not Found</title>
<link rel="preconnect" href="https://assets.appwrite.io/" crossorigin>
<style>
@font-face {
font-family: 'Inter';
src: url('https://assets.appwrite.io/fonts/inter/Inter-Regular.woff2') format('woff2');
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Inter';
src: url('https://assets.appwrite.io/fonts/inter/Inter-Medium.woff2') format('woff2');
font-weight: 500;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Fira Code';
src: url('https://assets.appwrite.io/fonts/fira-code/FiraCode-Regular.woff2') format('woff2');
font-weight: 400;
font-style: normal;
font-display: swap;
}
</style>
<style>
@import url(https://fonts.bunny.net/css?family=fira-code:400|inter:400);
* {
margin: 0;
padding: 0;
+43 -20
View File
@@ -104,26 +104,38 @@ switch ($type) {
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.x.x/dist/alpine.min.js" defer></script>
<link rel="icon" type="image/svg+xml" href="<?php echo $url; ?>/images/logos/appwrite-icon.svg" />
<link rel="mask-icon" type="image/png" href="<?php echo $url; ?>/images/logos/appwrite-icon.png" />
<link
rel="preload"
href="/fonts/inter/inter-v8-latin-600.woff2"
as="font"
type="font/woff2"
crossorigin />
<link
rel="preload"
href="/fonts/inter/inter-v8-latin-regular.woff2"
as="font"
type="font/woff2"
crossorigin />
<link rel="preconnect" href="https://assets.appwrite.io/" crossorigin>
<style>
@font-face {
font-family: 'Inter';
src: url('https://assets.appwrite.io/fonts/inter/Inter-Regular.woff2') format('woff2');
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Inter';
src: url('https://assets.appwrite.io/fonts/inter/Inter-Medium.woff2') format('woff2');
font-weight: 500;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'Fira Code';
src: url('https://assets.appwrite.io/fonts/fira-code/FiraCode-Regular.woff2') format('woff2');
font-weight: 400;
font-style: normal;
font-display: swap;
}
</style>
<title><?php echo $this->print($title); ?></title>
<style>
@import url(https://fonts.bunny.net/css?family=fira-code:400|inter:400);
* {
margin: 0;
padding: 0;
@@ -452,9 +464,9 @@ switch ($type) {
</style>
</head>
<body x-data="{ page: 'error' }">
<body>
<div class="main">
<div x-show="page === 'error'" class="content <?php echo $isSimpleMessage ? 'large-error' : 'small-error' ?>">
<div id="views-error" class="content <?php echo $isSimpleMessage ? 'large-error' : 'small-error' ?>">
<div class="center"><span class="<?php echo $this->print($labelClass); ?>"><?php echo $this->print($label); ?></span></div>
<h1><?php echo $this->print($message); ?></h1>
<?php if (!empty($type)): ?>
@@ -474,14 +486,14 @@ switch ($type) {
<?php endif; ?>
<?php if ($development) : ?>
<button class="<?php echo count($buttons) === 0 ? 'bordered-button' : 'button' ?>" x-on:click="page = 'trace'">View error trace</button>
<button class="<?php echo count($buttons) === 0 ? 'bordered-button' : 'button' ?>" onclick="openTraceView()">View error trace</button>
<?php endif; ?>
</div>
</div>
<?php if ($development) : ?>
<div x-show="page === 'trace'" class="error-trace">
<button class="back-button" x-on:click="page = 'error'">
<div id="views-trace" style="display: none;" class="error-trace">
<button class="back-button" onclick="openErrorView()">
Back
</button>
<div class="trace-grid-header">Error trace</div>
@@ -512,6 +524,17 @@ switch ($type) {
<?php endif; ?>
</div>
<script>
function openErrorView() {
document.getElementById('views-trace').style.display = 'none';
document.getElementById('views-error').style.display = 'block';
}
function openTraceView() {
document.getElementById('views-trace').style.display = 'block';
document.getElementById('views-error').style.display = 'none';
}
</script>
</body>
</html>
+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:6.2.0
image: <?php echo $organization; ?>/console:7.0.2
restart: unless-stopped
networks:
- appwrite
+8
View File
@@ -251,6 +251,10 @@ Server::setResource('publisherDatabases', function (BrokerPool $publisher) {
return $publisher;
}, ['publisher']);
Server::setResource('publisherFunctions', function (BrokerPool $publisher) {
return $publisher;
}, ['publisher']);
Server::setResource('publisherMigrations', function (BrokerPool $publisher) {
return $publisher;
}, ['publisher']);
@@ -259,6 +263,10 @@ Server::setResource('publisherStatsUsage', function (BrokerPool $publisher) {
return $publisher;
}, ['publisher']);
Server::setResource('publisherMessaging', function (BrokerPool $publisher) {
return $publisher;
}, ['publisher']);
Server::setResource('consumer', function (Group $pools) {
return new BrokerPool(consumer: $pools->get('consumer'));
}, ['pools']);
+6 -6
View File
@@ -76,19 +76,19 @@
"utopia-php/telemetry": "0.1.*",
"utopia-php/vcs": "0.11.*",
"utopia-php/websocket": "0.3.*",
"matomo/device-detector": "6.1.*",
"dragonmantank/cron-expression": "3.3.*",
"matomo/device-detector": "6.4.*",
"dragonmantank/cron-expression": "3.4.*",
"phpmailer/phpmailer": "6.9.*",
"chillerlan/php-qrcode": "4.3.*",
"chillerlan/php-qrcode": "4.4.*",
"adhocore/jwt": "1.1.*",
"spomky-labs/otphp": "^10.0",
"spomky-labs/otphp": "10.0.*",
"webonyx/graphql-php": "14.11.*",
"league/csv": "9.14.*",
"league/csv": "9.24.*",
"enshrined/svg-sanitize": "0.22.*"
},
"require-dev": {
"ext-fileinfo": "*",
"appwrite/sdk-generator": "0.*.*",
"appwrite/sdk-generator": "*",
"phpunit/phpunit": "9.*",
"swoole/ide-helper": "5.1.2",
"phpstan/phpstan": "1.8.*",
Generated
+157 -129
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": "3456d5ee571287eb4ea90683279f209a",
"content-hash": "0da713ee5642eba1d30bc51c1a04a723",
"packages": [
{
"name": "adhocore/jwt",
@@ -343,31 +343,34 @@
},
{
"name": "chillerlan/php-qrcode",
"version": "4.3.4",
"version": "4.4.2",
"source": {
"type": "git",
"url": "https://github.com/chillerlan/php-qrcode.git",
"reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d"
"reference": "345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
"reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
"url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4",
"reference": "345ed8e4ffb56e6b3fcd9f42e3970b9026fa6ce4",
"shasum": ""
},
"require": {
"chillerlan/php-settings-container": "^2.1.4",
"chillerlan/php-settings-container": "^2.1.6 || ^3.2.1",
"ext-mbstring": "*",
"php": "^7.4 || ^8.0"
},
"require-dev": {
"phan/phan": "^5.3",
"phpunit/phpunit": "^9.5",
"setasign/fpdf": "^1.8.2"
"phan/phan": "^5.4.5",
"phpmd/phpmd": "^2.15",
"phpunit/phpunit": "^9.6",
"setasign/fpdf": "^1.8.2",
"squizlabs/php_codesniffer": "^3.11"
},
"suggest": {
"chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.",
"setasign/fpdf": "Required to use the QR FPDF output."
"setasign/fpdf": "Required to use the QR FPDF output.",
"simple-icons/simple-icons": "SVG icons that you can use to embed as logos in the QR Code"
},
"type": "library",
"autoload": {
@@ -394,7 +397,7 @@
"homepage": "https://github.com/chillerlan/php-qrcode/graphs/contributors"
}
],
"description": "A QR code generator. PHP 7.4+",
"description": "A QR code generator with a user friendly API. PHP 7.4+",
"homepage": "https://github.com/chillerlan/php-qrcode",
"keywords": [
"phpqrcode",
@@ -405,43 +408,39 @@
],
"support": {
"issues": "https://github.com/chillerlan/php-qrcode/issues",
"source": "https://github.com/chillerlan/php-qrcode/tree/4.3.4"
"source": "https://github.com/chillerlan/php-qrcode/tree/4.4.2"
},
"funding": [
{
"url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4",
"type": "custom"
},
{
"url": "https://ko-fi.com/codemasher",
"type": "ko_fi"
}
],
"time": "2022-07-25T09:12:45+00:00"
"time": "2024-11-15T15:36:24+00:00"
},
{
"name": "chillerlan/php-settings-container",
"version": "2.1.6",
"version": "3.2.1",
"source": {
"type": "git",
"url": "https://github.com/chillerlan/php-settings-container.git",
"reference": "5553558bd381fce5108c6d0343c12e488cfec6bb"
"reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/5553558bd381fce5108c6d0343c12e488cfec6bb",
"reference": "5553558bd381fce5108c6d0343c12e488cfec6bb",
"url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/95ed3e9676a1d47cab2e3174d19b43f5dbf52681",
"reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681",
"shasum": ""
},
"require": {
"ext-json": "*",
"php": "^7.4 || ^8.0"
"php": "^8.1"
},
"require-dev": {
"phpmd/phpmd": "^2.15",
"phpstan/phpstan": "^1.11",
"phpstan/phpstan-deprecation-rules": "^1.2",
"phpunit/phpunit": "^9.6",
"phpunit/phpunit": "^10.5",
"squizlabs/php_codesniffer": "^3.10"
},
"type": "library",
@@ -461,10 +460,9 @@
"homepage": "https://github.com/codemasher"
}
],
"description": "A container class for immutable settings objects. Not a DI container. PHP 7.4+",
"description": "A container class for immutable settings objects. Not a DI container.",
"homepage": "https://github.com/chillerlan/php-settings-container",
"keywords": [
"PHP7",
"Settings",
"configuration",
"container",
@@ -484,20 +482,20 @@
"type": "ko_fi"
}
],
"time": "2024-07-17T01:04:28+00:00"
"time": "2024-07-16T11:13:48+00:00"
},
{
"name": "composer/semver",
"version": "3.4.3",
"version": "3.4.4",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
"reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12"
"reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
"reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
"url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95",
"reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95",
"shasum": ""
},
"require": {
@@ -549,7 +547,7 @@
"support": {
"irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/semver/issues",
"source": "https://github.com/composer/semver/tree/3.4.3"
"source": "https://github.com/composer/semver/tree/3.4.4"
},
"funding": [
{
@@ -559,26 +557,22 @@
{
"url": "https://github.com/composer",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
"type": "tidelift"
}
],
"time": "2024-09-19T14:15:21+00:00"
"time": "2025-08-20T19:15:30+00:00"
},
{
"name": "dragonmantank/cron-expression",
"version": "v3.3.3",
"version": "v3.4.0",
"source": {
"type": "git",
"url": "https://github.com/dragonmantank/cron-expression.git",
"reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a"
"reference": "8c784d071debd117328803d86b2097615b457500"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a",
"reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a",
"url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500",
"reference": "8c784d071debd117328803d86b2097615b457500",
"shasum": ""
},
"require": {
@@ -591,10 +585,14 @@
"require-dev": {
"phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "^1.0",
"phpstan/phpstan-webmozart-assert": "^1.0",
"phpunit/phpunit": "^7.0|^8.0|^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.x-dev"
}
},
"autoload": {
"psr-4": {
"Cron\\": "src/Cron/"
@@ -618,7 +616,7 @@
],
"support": {
"issues": "https://github.com/dragonmantank/cron-expression/issues",
"source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3"
"source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0"
},
"funding": [
{
@@ -626,7 +624,7 @@
"type": "github"
}
],
"time": "2023-08-10T19:36:49+00:00"
"time": "2024-10-09T13:47:03+00:00"
},
{
"name": "enshrined/svg-sanitize",
@@ -758,23 +756,26 @@
},
{
"name": "google/protobuf",
"version": "v4.31.1",
"version": "v4.32.0",
"source": {
"type": "git",
"url": "https://github.com/protocolbuffers/protobuf-php.git",
"reference": "2b028ce8876254e2acbeceea7d9b573faad41864"
"reference": "9a9a92ecbe9c671dc1863f6d4a91ea3ea12c8646"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/2b028ce8876254e2acbeceea7d9b573faad41864",
"reference": "2b028ce8876254e2acbeceea7d9b573faad41864",
"url": "https://api.github.com/repos/protocolbuffers/protobuf-php/zipball/9a9a92ecbe9c671dc1863f6d4a91ea3ea12c8646",
"reference": "9a9a92ecbe9c671dc1863f6d4a91ea3ea12c8646",
"shasum": ""
},
"require": {
"php": ">=7.0.0"
"php": ">=8.1.0"
},
"provide": {
"ext-protobuf": "*"
},
"require-dev": {
"phpunit/phpunit": ">=5.0.0"
"phpunit/phpunit": ">=5.0.0 <8.5.27"
},
"suggest": {
"ext-bcmath": "Need to support JSON deserialization"
@@ -796,46 +797,48 @@
"proto"
],
"support": {
"source": "https://github.com/protocolbuffers/protobuf-php/tree/v4.31.1"
"source": "https://github.com/protocolbuffers/protobuf-php/tree/v4.32.0"
},
"time": "2025-05-28T18:52:35+00:00"
"time": "2025-08-14T20:00:33+00:00"
},
{
"name": "league/csv",
"version": "9.14.0",
"version": "9.24.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/csv.git",
"reference": "34bf0df7340b60824b9449b5c526fcc3325070d5"
"reference": "e0221a3f16aa2a823047d59fab5809d552e29bc8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/csv/zipball/34bf0df7340b60824b9449b5c526fcc3325070d5",
"reference": "34bf0df7340b60824b9449b5c526fcc3325070d5",
"url": "https://api.github.com/repos/thephpleague/csv/zipball/e0221a3f16aa2a823047d59fab5809d552e29bc8",
"reference": "e0221a3f16aa2a823047d59fab5809d552e29bc8",
"shasum": ""
},
"require": {
"ext-filter": "*",
"ext-json": "*",
"ext-mbstring": "*",
"php": "^8.1.2"
},
"require-dev": {
"doctrine/collections": "^2.1.4",
"ext-dom": "*",
"ext-xdebug": "*",
"friendsofphp/php-cs-fixer": "^v3.22.0",
"phpbench/phpbench": "^1.2.15",
"phpstan/phpstan": "^1.10.50",
"phpstan/phpstan-deprecation-rules": "^1.1.4",
"phpstan/phpstan-phpunit": "^1.3.15",
"phpstan/phpstan-strict-rules": "^1.5.2",
"phpunit/phpunit": "^10.5.3",
"symfony/var-dumper": "^6.4.0"
"friendsofphp/php-cs-fixer": "^3.75.0",
"phpbench/phpbench": "^1.4.1",
"phpstan/phpstan": "^1.12.27",
"phpstan/phpstan-deprecation-rules": "^1.2.1",
"phpstan/phpstan-phpunit": "^1.4.2",
"phpstan/phpstan-strict-rules": "^1.6.2",
"phpunit/phpunit": "^10.5.16 || ^11.5.22",
"symfony/var-dumper": "^6.4.8 || ^7.3.0"
},
"suggest": {
"ext-dom": "Required to use the XMLConverter and the HTMLConverter classes",
"ext-iconv": "Needed to ease transcoding CSV using iconv stream filters"
"ext-iconv": "Needed to ease transcoding CSV using iconv stream filters",
"ext-mbstring": "Needed to ease transcoding CSV using mb stream filters",
"ext-mysqli": "Requiered to use the package with the MySQLi extension",
"ext-pdo": "Required to use the package with the PDO extension",
"ext-pgsql": "Requiered to use the package with the PgSQL extension",
"ext-sqlite3": "Required to use the package with the SQLite3 extension"
},
"type": "library",
"extra": {
@@ -887,20 +890,20 @@
"type": "github"
}
],
"time": "2023-12-29T07:34:53+00:00"
"time": "2025-06-25T14:53:51+00:00"
},
{
"name": "matomo/device-detector",
"version": "6.1.6",
"version": "6.4.7",
"source": {
"type": "git",
"url": "https://github.com/matomo-org/device-detector.git",
"reference": "5cbea85106e561c7138d03603eb6e05128480409"
"reference": "e53eed31bb1530851feebe52bd64c3451da19e77"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/matomo-org/device-detector/zipball/5cbea85106e561c7138d03603eb6e05128480409",
"reference": "5cbea85106e561c7138d03603eb6e05128480409",
"url": "https://api.github.com/repos/matomo-org/device-detector/zipball/e53eed31bb1530851feebe52bd64c3451da19e77",
"reference": "e53eed31bb1530851feebe52bd64c3451da19e77",
"shasum": ""
},
"require": {
@@ -912,11 +915,12 @@
},
"require-dev": {
"matthiasmullie/scrapbook": "^1.4.7",
"mayflower/mo4-coding-standard": "^v8.0.0",
"phpstan/phpstan": "^0.12.52",
"mayflower/mo4-coding-standard": "^v9.0.0",
"phpstan/phpstan": "^1.10.44",
"phpunit/phpunit": "^8.5.8",
"psr/cache": "^1.0.1",
"psr/simple-cache": "^1.0.1",
"slevomat/coding-standard": "<8.16.0",
"symfony/yaml": "^5.1.7"
},
"suggest": {
@@ -956,7 +960,7 @@
"source": "https://github.com/matomo-org/matomo",
"wiki": "https://dev.matomo.org/"
},
"time": "2023-10-02T10:01:54+00:00"
"time": "2025-08-20T17:20:16+00:00"
},
{
"name": "mustangostang/spyc",
@@ -2772,7 +2776,7 @@
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.32.0",
"version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
@@ -2833,7 +2837,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0"
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0"
},
"funding": [
{
@@ -2844,6 +2848,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -2853,7 +2861,7 @@
},
{
"name": "symfony/polyfill-php82",
"version": "v1.32.0",
"version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php82.git",
@@ -2909,7 +2917,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php82/tree/v1.32.0"
"source": "https://github.com/symfony/polyfill-php82/tree/v1.33.0"
},
"funding": [
{
@@ -2920,6 +2928,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -3545,16 +3557,16 @@
},
{
"name": "utopia-php/database",
"version": "1.0.1",
"version": "1.2.3",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/database.git",
"reference": "33f35f5daeebd587f79abf362cfb512b9df3cd50"
"reference": "8a536fead840d9da6ee819fe6b80e0f047997f69"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/database/zipball/33f35f5daeebd587f79abf362cfb512b9df3cd50",
"reference": "33f35f5daeebd587f79abf362cfb512b9df3cd50",
"url": "https://api.github.com/repos/utopia-php/database/zipball/8a536fead840d9da6ee819fe6b80e0f047997f69",
"reference": "8a536fead840d9da6ee819fe6b80e0f047997f69",
"shasum": ""
},
"require": {
@@ -3595,9 +3607,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/database/issues",
"source": "https://github.com/utopia-php/database/tree/1.0.1"
"source": "https://github.com/utopia-php/database/tree/1.2.3"
},
"time": "2025-08-13T12:28:06+00:00"
"time": "2025-08-27T11:47:04+00:00"
},
{
"name": "utopia-php/detector",
@@ -3849,16 +3861,16 @@
},
{
"name": "utopia-php/framework",
"version": "0.33.20",
"version": "0.33.22",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/http.git",
"reference": "e1c7ab4e0b5b0a9a70256b1e00912e101e76a131"
"reference": "c01a815cb976c9255e045fc3bcc3f5fcf477e0bc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/http/zipball/e1c7ab4e0b5b0a9a70256b1e00912e101e76a131",
"reference": "e1c7ab4e0b5b0a9a70256b1e00912e101e76a131",
"url": "https://api.github.com/repos/utopia-php/http/zipball/c01a815cb976c9255e045fc3bcc3f5fcf477e0bc",
"reference": "c01a815cb976c9255e045fc3bcc3f5fcf477e0bc",
"shasum": ""
},
"require": {
@@ -3890,9 +3902,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/http/issues",
"source": "https://github.com/utopia-php/http/tree/0.33.20"
"source": "https://github.com/utopia-php/http/tree/0.33.22"
},
"time": "2025-05-18T23:51:21+00:00"
"time": "2025-08-26T10:29:50+00:00"
},
{
"name": "utopia-php/image",
@@ -4097,16 +4109,16 @@
},
{
"name": "utopia-php/migration",
"version": "1.0.0",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/utopia-php/migration.git",
"reference": "0e4499d9dd2c90c2be188cc5fb7a32d9a892b569"
"reference": "38171023efd3abe650d2abc5ac65f5df52311da6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/utopia-php/migration/zipball/0e4499d9dd2c90c2be188cc5fb7a32d9a892b569",
"reference": "0e4499d9dd2c90c2be188cc5fb7a32d9a892b569",
"url": "https://api.github.com/repos/utopia-php/migration/zipball/38171023efd3abe650d2abc5ac65f5df52311da6",
"reference": "38171023efd3abe650d2abc5ac65f5df52311da6",
"shasum": ""
},
"require": {
@@ -4147,9 +4159,9 @@
],
"support": {
"issues": "https://github.com/utopia-php/migration/issues",
"source": "https://github.com/utopia-php/migration/tree/1.0.0"
"source": "https://github.com/utopia-php/migration/tree/1.0.1"
},
"time": "2025-08-13T09:15:53+00:00"
"time": "2025-08-28T13:41:25+00:00"
},
{
"name": "utopia-php/orchestration",
@@ -4914,16 +4926,16 @@
"packages-dev": [
{
"name": "appwrite/sdk-generator",
"version": "0.41.29",
"version": "1.1.15",
"source": {
"type": "git",
"url": "https://github.com/appwrite/sdk-generator.git",
"reference": "4af563f3b0879747efc8434eb8ed8bf97e75039f"
"reference": "8e8e39634ba7558704522959d88f3542563a5444"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/4af563f3b0879747efc8434eb8ed8bf97e75039f",
"reference": "4af563f3b0879747efc8434eb8ed8bf97e75039f",
"url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/8e8e39634ba7558704522959d88f3542563a5444",
"reference": "8e8e39634ba7558704522959d88f3542563a5444",
"shasum": ""
},
"require": {
@@ -4959,9 +4971,9 @@
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
"support": {
"issues": "https://github.com/appwrite/sdk-generator/issues",
"source": "https://github.com/appwrite/sdk-generator/tree/0.41.29"
"source": "https://github.com/appwrite/sdk-generator/tree/1.1.15"
},
"time": "2025-08-04T04:34:45+00:00"
"time": "2025-08-27T04:59:35+00:00"
},
{
"name": "doctrine/annotations",
@@ -5440,16 +5452,16 @@
},
{
"name": "nikic/php-parser",
"version": "v5.6.0",
"version": "v5.6.1",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
"reference": "221b0d0fdf1369c71047ad1d18bb5880017bbc56"
"reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/221b0d0fdf1369c71047ad1d18bb5880017bbc56",
"reference": "221b0d0fdf1369c71047ad1d18bb5880017bbc56",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2",
"reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2",
"shasum": ""
},
"require": {
@@ -5468,7 +5480,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "5.0-dev"
"dev-master": "5.x-dev"
}
},
"autoload": {
@@ -5492,9 +5504,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
"source": "https://github.com/nikic/PHP-Parser/tree/v5.6.0"
"source": "https://github.com/nikic/PHP-Parser/tree/v5.6.1"
},
"time": "2025-07-27T20:03:57+00:00"
"time": "2025-08-13T20:13:15+00:00"
},
{
"name": "phar-io/manifest",
@@ -6143,16 +6155,16 @@
},
{
"name": "phpunit/phpunit",
"version": "9.6.24",
"version": "9.6.25",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "ea49afa29aeea25ea7bf9de9fdd7cab163cc0701"
"reference": "049c011e01be805202d8eebedef49f769a8ec7b7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ea49afa29aeea25ea7bf9de9fdd7cab163cc0701",
"reference": "ea49afa29aeea25ea7bf9de9fdd7cab163cc0701",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/049c011e01be805202d8eebedef49f769a8ec7b7",
"reference": "049c011e01be805202d8eebedef49f769a8ec7b7",
"shasum": ""
},
"require": {
@@ -6226,7 +6238,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.24"
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.25"
},
"funding": [
{
@@ -6250,7 +6262,7 @@
"type": "tidelift"
}
],
"time": "2025-08-10T08:32:42+00:00"
"time": "2025-08-20T14:38:31+00:00"
},
{
"name": "psr/cache",
@@ -7705,7 +7717,7 @@
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.32.0",
"version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
@@ -7764,7 +7776,7 @@
"portable"
],
"support": {
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0"
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0"
},
"funding": [
{
@@ -7775,6 +7787,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -7784,16 +7800,16 @@
},
{
"name": "symfony/polyfill-intl-grapheme",
"version": "v1.32.0",
"version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
"reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe"
"reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
"reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70",
"reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70",
"shasum": ""
},
"require": {
@@ -7842,7 +7858,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0"
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0"
},
"funding": [
{
@@ -7853,16 +7869,20 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-09-09T11:45:10+00:00"
"time": "2025-06-27T09:58:17+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.32.0",
"version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
@@ -7923,7 +7943,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0"
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0"
},
"funding": [
{
@@ -7934,6 +7954,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -7943,7 +7967,7 @@
},
{
"name": "symfony/polyfill-php81",
"version": "v1.32.0",
"version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php81.git",
@@ -7999,7 +8023,7 @@
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php81/tree/v1.32.0"
"source": "https://github.com/symfony/polyfill-php81/tree/v1.33.0"
},
"funding": [
{
@@ -8010,6 +8034,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -8399,7 +8427,7 @@
],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"stability-flags": {},
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
+4 -1
View File
@@ -71,6 +71,9 @@ services:
- traefik.http.routers.appwrite_api_https.service=appwrite_api
- traefik.http.routers.appwrite_api_https.tls=true
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Only needed for tests
- ./docker-compose.yml:/usr/src/code/docker-compose.yml # Only needed for tests
- ./.env:/usr/src/code/.env # Only needed for tests
- appwrite-uploads:/storage/uploads:rw
- appwrite-imports:/storage/imports:rw
- appwrite-cache:/storage/cache:rw
@@ -216,7 +219,7 @@ services:
appwrite-console:
<<: *x-logging
container_name: appwrite-console
image: appwrite/console:7.0.0-qa.8
image: appwrite/console:7.0.2
restart: unless-stopped
networks:
- appwrite
@@ -9,7 +9,7 @@ Client client = new Client(context)
Account account = new Account(client);
account.createMfaAuthenticator(
account.createMFAAuthenticator(
AuthenticatorType.TOTP, // type
new CoroutineCallback<>((result, error) -> {
if (error != null) {
@@ -9,7 +9,7 @@ Client client = new Client(context)
Account account = new Account(client);
account.createMfaChallenge(
account.createMFAChallenge(
AuthenticationFactor.EMAIL, // factor
new CoroutineCallback<>((result, error) -> {
if (error != null) {
@@ -8,7 +8,7 @@ Client client = new Client(context)
Account account = new Account(client);
account.createMfaRecoveryCodes(new CoroutineCallback<>((result, error) -> {
account.createMFARecoveryCodes(new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return;
@@ -9,7 +9,7 @@ Client client = new Client(context)
Account account = new Account(client);
account.deleteMfaAuthenticator(
account.deleteMFAAuthenticator(
AuthenticatorType.TOTP, // type
new CoroutineCallback<>((result, error) -> {
if (error != null) {
@@ -8,7 +8,7 @@ Client client = new Client(context)
Account account = new Account(client);
account.getMfaRecoveryCodes(new CoroutineCallback<>((result, error) -> {
account.getMFARecoveryCodes(new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return;
@@ -8,7 +8,7 @@ Client client = new Client(context)
Account account = new Account(client);
account.listMfaFactors(new CoroutineCallback<>((result, error) -> {
account.listMFAFactors(new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return;
@@ -9,7 +9,7 @@ Client client = new Client(context)
Account account = new Account(client);
account.updateMfaAuthenticator(
account.updateMFAAuthenticator(
AuthenticatorType.TOTP, // type
"<OTP>", // otp
new CoroutineCallback<>((result, error) -> {
@@ -8,7 +8,7 @@ Client client = new Client(context)
Account account = new Account(client);
account.updateMfaChallenge(
account.updateMFAChallenge(
"<CHALLENGE_ID>", // challengeId
"<OTP>", // otp
new CoroutineCallback<>((result, error) -> {
@@ -8,7 +8,7 @@ Client client = new Client(context)
Account account = new Account(client);
account.updateMfaRecoveryCodes(new CoroutineCallback<>((result, error) -> {
account.updateMFARecoveryCodes(new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return;
@@ -4,15 +4,17 @@ import io.appwrite.services.Databases;
Client client = new Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setAdmin("") //
.setKey(""); //
.setProject("<YOUR_PROJECT_ID>"); // Your project ID
Databases databases = new Databases(client);
databases.createDocuments(
databases.decrementDocumentAttribute(
"<DATABASE_ID>", // databaseId
"<COLLECTION_ID>", // collectionId
listOf(), // documents
"<DOCUMENT_ID>", // documentId
"", // attribute
0, // value (optional)
0, // min (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
@@ -0,0 +1,27 @@
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.incrementDocumentAttribute(
"<DATABASE_ID>", // databaseId
"<COLLECTION_ID>", // collectionId
"<DOCUMENT_ID>", // documentId
"", // attribute
0, // value (optional)
0, // max (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return;
}
Log.d("Appwrite", result.toString());
})
);
@@ -1,14 +1,14 @@
import io.appwrite.Client;
import io.appwrite.coroutines.CoroutineCallback;
import io.appwrite.services.Grids;
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
Grids grids = new Grids(client);
TablesDB tablesDB = new TablesDB(client);
grids.createRow(
tablesDB.createRow(
"<DATABASE_ID>", // databaseId
"<TABLE_ID>", // tableId
"<ROW_ID>", // rowId
@@ -0,0 +1,27 @@
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.decrementRowColumn(
"<DATABASE_ID>", // databaseId
"<TABLE_ID>", // tableId
"<ROW_ID>", // rowId
"", // column
0, // value (optional)
0, // min (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return;
}
Log.d("Appwrite", result.toString());
})
);
@@ -1,14 +1,14 @@
import io.appwrite.Client;
import io.appwrite.coroutines.CoroutineCallback;
import io.appwrite.services.Grids;
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
Grids grids = new Grids(client);
TablesDB tablesDB = new TablesDB(client);
grids.deleteRow(
tablesDB.deleteRow(
"<DATABASE_ID>", // databaseId
"<TABLE_ID>", // tableId
"<ROW_ID>", // rowId
@@ -1,14 +1,14 @@
import io.appwrite.Client;
import io.appwrite.coroutines.CoroutineCallback;
import io.appwrite.services.Grids;
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
Grids grids = new Grids(client);
TablesDB tablesDB = new TablesDB(client);
grids.getRow(
tablesDB.getRow(
"<DATABASE_ID>", // databaseId
"<TABLE_ID>", // tableId
"<ROW_ID>", // rowId
@@ -0,0 +1,27 @@
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.incrementRowColumn(
"<DATABASE_ID>", // databaseId
"<TABLE_ID>", // tableId
"<ROW_ID>", // rowId
"", // column
0, // value (optional)
0, // max (optional)
new CoroutineCallback<>((result, error) -> {
if (error != null) {
error.printStackTrace();
return;
}
Log.d("Appwrite", result.toString());
})
);
@@ -1,14 +1,14 @@
import io.appwrite.Client;
import io.appwrite.coroutines.CoroutineCallback;
import io.appwrite.services.Grids;
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
Grids grids = new Grids(client);
TablesDB tablesDB = new TablesDB(client);
grids.listRows(
tablesDB.listRows(
"<DATABASE_ID>", // databaseId
"<TABLE_ID>", // tableId
listOf(), // queries (optional)
@@ -1,14 +1,14 @@
import io.appwrite.Client;
import io.appwrite.coroutines.CoroutineCallback;
import io.appwrite.services.Grids;
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
Grids grids = new Grids(client);
TablesDB tablesDB = new TablesDB(client);
grids.updateRow(
tablesDB.updateRow(
"<DATABASE_ID>", // databaseId
"<TABLE_ID>", // tableId
"<ROW_ID>", // rowId
@@ -1,14 +1,14 @@
import io.appwrite.Client;
import io.appwrite.coroutines.CoroutineCallback;
import io.appwrite.services.Grids;
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
Grids grids = new Grids(client);
TablesDB tablesDB = new TablesDB(client);
grids.upsertRow(
tablesDB.upsertRow(
"<DATABASE_ID>", // databaseId
"<TABLE_ID>", // tableId
"<ROW_ID>", // rowId
@@ -9,6 +9,6 @@ val client = Client(context)
val account = Account(client)
val result = account.createMfaAuthenticator(
val result = account.createMFAAuthenticator(
type = AuthenticatorType.TOTP,
)
@@ -9,6 +9,6 @@ val client = Client(context)
val account = Account(client)
val result = account.createMfaChallenge(
val result = account.createMFAChallenge(
factor = AuthenticationFactor.EMAIL,
)
@@ -8,4 +8,4 @@ val client = Client(context)
val account = Account(client)
val result = account.createMfaRecoveryCodes()
val result = account.createMFARecoveryCodes()
@@ -9,6 +9,6 @@ val client = Client(context)
val account = Account(client)
val result = account.deleteMfaAuthenticator(
val result = account.deleteMFAAuthenticator(
type = AuthenticatorType.TOTP,
)
@@ -8,4 +8,4 @@ val client = Client(context)
val account = Account(client)
val result = account.getMfaRecoveryCodes()
val result = account.getMFARecoveryCodes()
@@ -8,4 +8,4 @@ val client = Client(context)
val account = Account(client)
val result = account.listMfaFactors()
val result = account.listMFAFactors()
@@ -9,7 +9,7 @@ val client = Client(context)
val account = Account(client)
val result = account.updateMfaAuthenticator(
val result = account.updateMFAAuthenticator(
type = AuthenticatorType.TOTP,
otp = "<OTP>",
)
@@ -8,7 +8,7 @@ val client = Client(context)
val account = Account(client)
val result = account.updateMfaChallenge(
val result = account.updateMFAChallenge(
challengeId = "<CHALLENGE_ID>",
otp = "<OTP>",
)
@@ -8,4 +8,4 @@ val client = Client(context)
val account = Account(client)
val result = account.updateMfaRecoveryCodes()
val result = account.updateMFARecoveryCodes()
@@ -4,13 +4,15 @@ import io.appwrite.services.Databases
val client = Client(context)
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
.setAdmin("") //
.setKey("") //
.setProject("<YOUR_PROJECT_ID>") // Your project ID
val databases = Databases(client)
val result = databases.createDocuments(
val result = databases.decrementDocumentAttribute(
databaseId = "<DATABASE_ID>",
collectionId = "<COLLECTION_ID>",
documents = listOf(),
documentId = "<DOCUMENT_ID>",
attribute = "",
value = 0, // (optional)
min = 0, // (optional)
)
@@ -0,0 +1,18 @@
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.incrementDocumentAttribute(
databaseId = "<DATABASE_ID>",
collectionId = "<COLLECTION_ID>",
documentId = "<DOCUMENT_ID>",
attribute = "",
value = 0, // (optional)
max = 0, // (optional)
)
@@ -1,14 +1,14 @@
import io.appwrite.Client
import io.appwrite.coroutines.CoroutineCallback
import io.appwrite.services.Grids
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 grids = Grids(client)
val tablesDB = TablesDB(client)
val result = grids.createRow(
val result = tablesDB.createRow(
databaseId = "<DATABASE_ID>",
tableId = "<TABLE_ID>",
rowId = "<ROW_ID>",
@@ -0,0 +1,18 @@
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.decrementRowColumn(
databaseId = "<DATABASE_ID>",
tableId = "<TABLE_ID>",
rowId = "<ROW_ID>",
column = "",
value = 0, // (optional)
min = 0, // (optional)
)
@@ -1,14 +1,14 @@
import io.appwrite.Client
import io.appwrite.coroutines.CoroutineCallback
import io.appwrite.services.Grids
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 grids = Grids(client)
val tablesDB = TablesDB(client)
val result = grids.deleteRow(
val result = tablesDB.deleteRow(
databaseId = "<DATABASE_ID>",
tableId = "<TABLE_ID>",
rowId = "<ROW_ID>",
@@ -1,14 +1,14 @@
import io.appwrite.Client
import io.appwrite.coroutines.CoroutineCallback
import io.appwrite.services.Grids
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 grids = Grids(client)
val tablesDB = TablesDB(client)
val result = grids.getRow(
val result = tablesDB.getRow(
databaseId = "<DATABASE_ID>",
tableId = "<TABLE_ID>",
rowId = "<ROW_ID>",
@@ -0,0 +1,18 @@
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.incrementRowColumn(
databaseId = "<DATABASE_ID>",
tableId = "<TABLE_ID>",
rowId = "<ROW_ID>",
column = "",
value = 0, // (optional)
max = 0, // (optional)
)

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