diff --git a/.env b/.env
index 2373b618c2..09abb07be2 100644
--- a/.env
+++ b/.env
@@ -4,6 +4,7 @@ _APP_WORKER_PER_CORE=6
_APP_CONSOLE_WHITELIST_ROOT=disabled
_APP_CONSOLE_WHITELIST_EMAILS=
_APP_CONSOLE_WHITELIST_IPS=
+_APP_CONSOLE_COUNTRIES_DENYLIST=AQ
_APP_CONSOLE_HOSTNAMES=localhost,appwrite.io,*.appwrite.io
_APP_SYSTEM_EMAIL_NAME=Appwrite
_APP_SYSTEM_EMAIL_ADDRESS=team@appwrite.io
@@ -86,7 +87,7 @@ _APP_LOGGING_PROVIDER=
_APP_LOGGING_CONFIG=
_APP_GRAPHQL_MAX_BATCH_SIZE=10
_APP_GRAPHQL_MAX_COMPLEXITY=250
-_APP_GRAPHQL_MAX_DEPTH=3
+_APP_GRAPHQL_MAX_DEPTH=4
_APP_DOCKER_HUB_USERNAME=
_APP_DOCKER_HUB_PASSWORD=
_APP_VCS_GITHUB_APP_NAME=
@@ -97,4 +98,9 @@ _APP_VCS_GITHUB_CLIENT_SECRET=
_APP_VCS_GITHUB_WEBHOOK_SECRET=
_APP_MIGRATIONS_FIREBASE_CLIENT_ID=
_APP_MIGRATIONS_FIREBASE_CLIENT_SECRET=
-_APP_ASSISTANT_OPENAI_API_KEY=
\ No newline at end of file
+_APP_ASSISTANT_OPENAI_API_KEY=
+_APP_MESSAGE_SMS_TEST_DSN=
+_APP_MESSAGE_EMAIL_TEST_DSN=
+_APP_MESSAGE_PUSH_TEST_DSN=
+_APP_WEBHOOK_MAX_FAILED_ATTEMPTS=10
+_APP_PROJECT_REGIONS=default
\ No newline at end of file
diff --git a/.github/workflows/check-dependencies.yml b/.github/workflows/check-dependencies.yml
new file mode 100644
index 0000000000..17caf3aa6b
--- /dev/null
+++ b/.github/workflows/check-dependencies.yml
@@ -0,0 +1,19 @@
+name: Check dependencies
+
+# Adapted from https://google.github.io/osv-scanner/github-action/#scan-on-pull-request
+
+on:
+ pull_request:
+ branches: [main, 1.*.x]
+ merge_group:
+ branches: [main, 1.*.x]
+
+permissions:
+ # Require writing security events to upload SARIF file to security tab
+ security-events: write
+ # Only need to read contents
+ contents: read
+
+jobs:
+ scan-pr:
+ uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable.yml@v1.7.1"
\ No newline at end of file
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 0fc3fc2df3..f914e662d3 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -17,6 +17,12 @@ jobs:
fetch-depth: 2
submodules: recursive
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v3
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
@@ -35,11 +41,11 @@ jobs:
uses: docker/build-push-action@v4
with:
context: .
- platforms: linux/amd64
+ platforms: linux/amd64,linux/arm64
build-args: |
VERSION=${{ steps.meta.outputs.version }}
VITE_APPWRITE_GROWTH_ENDPOINT=https://growth.appwrite.io/v1
VITE_GA_PROJECT=G-L7G2B6PLDS
VITE_CONSOLE_MODE=cloud
push: true
- tags: ${{ steps.meta.outputs.tags }}
\ No newline at end of file
+ tags: ${{ steps.meta.outputs.tags }}
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
new file mode 100644
index 0000000000..5987eeeb0c
--- /dev/null
+++ b/.github/workflows/stale.yml
@@ -0,0 +1,23 @@
+name: Mark stale issues
+
+on:
+ schedule:
+ - cron: "0 0 * * *" # Midnight Runtime
+
+jobs:
+ stale:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/stale@v9
+ with:
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
+ stale-issue-message: "This issue has been labeled as a 'question', indicating that it requires additional information from the requestor. It has been inactive for 7 days. If no further activity occurs, this issue will be closed in 14 days."
+ stale-issue-label: "stale"
+ days-before-stale: 7
+ days-before-close: 14
+ remove-stale-when-updated: true
+ close-issue-message: "This issue has been closed due to inactivity. If you still require assistance, please provide the requested information."
+ close-issue-reason: "not_planned"
+ operations-per-run: 100
+ only-labels: "question"
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 2fb6840f6e..2cc4c700f7 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -123,6 +123,7 @@ jobs:
Users,
Webhooks,
VCS,
+ Messaging,
]
steps:
@@ -140,7 +141,7 @@ jobs:
run: |
docker load --input /tmp/${{ env.IMAGE }}.tar
docker compose up -d
- sleep 10
+ sleep 25
- name: Run ${{matrix.service}} Tests
run: docker compose exec -T appwrite test /usr/src/code/tests/e2e/Services/${{matrix.service}} --debug
diff --git a/.gitignore b/.gitignore
index 3151de5adb..ac88830b49 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@ debug/
app/sdks
dev/yasd_init.php
.phpunit.result.cache
+Makefile
diff --git a/.gitmodules b/.gitmodules
index 0c2321bcfa..c5a49ced3e 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,4 +1,4 @@
[submodule "app/console"]
path = app/console
url = https://github.com/appwrite/console
- branch = 3.2.16
+ branch = 4.0.6
diff --git a/.gitpod.yml b/.gitpod.yml
index d740c467cb..478b62fc8d 100644
--- a/.gitpod.yml
+++ b/.gitpod.yml
@@ -17,7 +17,6 @@ tasks:
ports:
- port: 8080
- onOpen: open-preview
visibility: public
vscode:
diff --git a/CHANGES.md b/CHANGES.md
index 606a8ff1b7..f106f97301 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,3 +1,404 @@
+# Version 1.5.5
+## What's Changed
+### Notable changes
+
+* Change SMS verification message to only have the code in [#7912](https://github.com/appwrite/appwrite/pull/7912)
+* Add new country `Taiwan` with its translations in [#7873](https://github.com/appwrite/appwrite/pull/7873)
+* Add Hong Kong (HK) to countries list in [#7962](https://github.com/appwrite/appwrite/pull/7962)
+* Add French Polynesia flag to flags.php in [#8007](https://github.com/appwrite/appwrite/pull/8007)
+* Enable auto upgrade for mariadb container in [#8020](https://github.com/appwrite/appwrite/pull/8020)
+
+## Fixes
+
+* Use team internal ID for checks and queries for membership in [#7836](https://github.com/appwrite/appwrite/pull/7836)
+* Use internal IDs for queries and checks in [#7839](https://github.com/appwrite/appwrite/pull/7839)
+* Remove redundant commas in [#7764](https://github.com/appwrite/appwrite/pull/7764)
+* Remove a redundant call to fetch the topic document again in [#7894](https://github.com/appwrite/appwrite/pull/7894)
+* Fix wrong refresh var for Autodesk in [#7897](https://github.com/appwrite/appwrite/pull/7897)
+* Fix email attachment example in [#7681](https://github.com/appwrite/appwrite/pull/7681)
+* Add missing chunkId param to create file abuse key in [#7913](https://github.com/appwrite/appwrite/pull/7913)
+* Fix delete message event not firing in [#7906](https://github.com/appwrite/appwrite/pull/7906)
+* Fix worker crash when using custom SMTP provider in [#7915](https://github.com/appwrite/appwrite/pull/7915)
+* Update email attachments param in [#7885](https://github.com/appwrite/appwrite/pull/7885)
+* Fix MFA protected group in [#7947](https://github.com/appwrite/appwrite/pull/7947)
+* Fix recovery code removal in [#7950](https://github.com/appwrite/appwrite/pull/7950)
+* Add recovery code to List factors in [#7949](https://github.com/appwrite/appwrite/pull/7949)
+* Fix challenge type check in [#7981](https://github.com/appwrite/appwrite/pull/7981)
+* Fix MFA links in specs in [#7966](https://github.com/appwrite/appwrite/pull/7966)
+* Add missing 'apis' attribute to projects collection in [#7997](https://github.com/appwrite/appwrite/pull/7997)
+* Update user create error message for console to be console specific in [#7996](https://github.com/appwrite/appwrite/pull/7996)
+* Add DB environment variables to appwrite-worker-mails in [#8002](https://github.com/appwrite/appwrite/pull/8002)
+* Delete related attributes on delete collection in [#7985](https://github.com/appwrite/appwrite/pull/7985)
+* Fix server errors from invalid or outdated cookies in [#8008](https://github.com/appwrite/appwrite/pull/8008)
+* Fix delete MFA authenticator response model in [#8005](https://github.com/appwrite/appwrite/pull/8005)
+* Fix MFA with admin mode in [#7984](https://github.com/appwrite/appwrite/pull/7984)
+
+## Miscellaneous
+
+* Update getEnv to use system lib in [#7895](https://github.com/appwrite/appwrite/pull/7895)
+* Update SDK and docs links in readme in [#7978](https://github.com/appwrite/appwrite/pull/7978)
+* Update README.md in [#6358](https://github.com/appwrite/appwrite/pull/6358)
+* Bump console to version 4.0.6 in [#8017](https://github.com/appwrite/appwrite/pull/8017)
+
+# Version 1.5.4
+## What's Changed
+### Fixes
+
+* Fix function build command in [#7813](https://github.com/appwrite/appwrite/pull/7813)
+* Bump executor version to fix docker conflict error in [#7804](https://github.com/appwrite/appwrite/pull/7804)
+* Fix webhooks failed connection in [#7848](https://github.com/appwrite/appwrite/pull/7848)
+* Fix msg91 params in [#7824](https://github.com/appwrite/appwrite/pull/7824)
+* Fix functions domain permissions in [#7853](https://github.com/appwrite/appwrite/pull/7853)
+
+### Miscellaneous
+
+* Bump console to version 4.0.5 in [#7863](https://github.com/appwrite/appwrite/pull/7863)
+
+# Version 1.5.3
+## What's Changed
+### Fixes
+
+* Fix Attribute not found when migrating users collection in [#7782](https://github.com/appwrite/appwrite/pull/7782)
+* Fix git deployments in [#7780](https://github.com/appwrite/appwrite/pull/7780)
+* Allow wildcards for url validation like OAuth2 success in [#7791](https://github.com/appwrite/appwrite/pull/7791)
+
+# Version 1.5.2
+## What's Changed
+* Fix stats migration by @abnegate in https://github.com/appwrite/appwrite/pull/7760
+* Fix index migrations by @abnegate in https://github.com/appwrite/appwrite/pull/7769
+* Fix Flutter/Dart SDKs by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7765
+* Fix push notifications with no image by @abnegate in https://github.com/appwrite/appwrite/pull/7771
+* Fix Python SDK by @abnegate in https://github.com/appwrite/appwrite/pull/7770
+* Fix Android SDK deployment by @abnegate in https://github.com/appwrite/appwrite/pull/7770
+
+
+**Full Changelog**: https://github.com/appwrite/appwrite/compare/1.5.1...1.5.2
+
+# Version 1.5.1
+## What's Changed
+* fix: usage containers by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7757
+
+**Full Changelog**: https://github.com/appwrite/appwrite/compare/1.5.0...1.5.
+
+# Version 1.5.0
+## What's Changed
+### New features
+- SSR support added. You can now handle sessions on your server app. [Learn more in docs](https://appwrite.io/docs/products/auth/server-side-rendering)
+- 2FA support is now added for Appwrite Auth and for Console users. [Learn about adding 2FA to your app](https://appwrite.io/docs/products/auth/2fa) [Learn about 2FA on Console](https://appwrite.io/docs/advanced/security/2fa)
+- Appwrite Messaging added. You can now send emails, SMS messages, and push notifications. [Learn more in docs](https://appwrite.io/docs/products/messaging)
+- Appwrite now has enums for all config strings for OAuth, messaging adaptors, and more. [Learn more in the docs](https://appwrite.io/docs/sdks)
+- New runtime versions for Dart, Bun, Ruby, Node, Deno, Python, PHP, Kotlin, Java, and Swift. [Learn more in docs](https://appwrite.io/docs/products/functions/runtimes)
+- Create custom login flows with custom sessions and tokens. [Learn more in docs](https://appwrite.io/docs/products/auth/custom-token)
+
+### Upgrading
+- Appwrite Cloud is not yet updated to 1.5.x, expect an announcement in the upcoming weeks. If you lock your Appwrite SDK version, this update is not breaking.
+- Follow the [self-hosted docs](https://appwrite.io/docs/advanced/self-hosting/update) to update your self-hosted Appwrite.
+- Update your SDKs to the latest versions. The API is backwards compatible, using old SDKs will not break existing apps, but you will not have access to new features.
+### Full changes
+* Sync 1.5.x by @abnegate in https://github.com/appwrite/appwrite/pull/6030
+* Sync master into 1.5.x by @fanatic75 in https://github.com/appwrite/appwrite/pull/6092
+* add collections to config file and messaging scopes to config file by @fanatic75 in https://github.com/appwrite/appwrite/pull/5930
+* Sync 1.4.x to 1.5.x by @fanatic75 in https://github.com/appwrite/appwrite/pull/6233
+* Feat add messaging response models by @fanatic75 in https://github.com/appwrite/appwrite/pull/5951
+* Feat messages event config by @fanatic75 in https://github.com/appwrite/appwrite/pull/5986
+* Sync main 1.5.x by @fanatic75 in https://github.com/appwrite/appwrite/pull/6514
+* Sync 1.5.x with 1.4.x by @fanatic75 in https://github.com/appwrite/appwrite/pull/6875
+* Feat provider controllers by @fanatic75 in https://github.com/appwrite/appwrite/pull/6023
+* Feat topics controller by @fanatic75 in https://github.com/appwrite/appwrite/pull/6032
+* Feat sms push controllers by @fanatic75 in https://github.com/appwrite/appwrite/pull/6950
+* Sync 1.4.x to 1.5.x by @fanatic75 in https://github.com/appwrite/appwrite/pull/6965
+* Providers from attribute by @fanatic75 in https://github.com/appwrite/appwrite/pull/6991
+* made review changes by @fanatic75 in https://github.com/appwrite/appwrite/pull/7010
+* removes provider from topics by @fanatic75 in https://github.com/appwrite/appwrite/pull/7014
+* review changes by @fanatic75 in https://github.com/appwrite/appwrite/pull/7048
+* Event label messaging by @fanatic75 in https://github.com/appwrite/appwrite/pull/7058
+* Feat logs messaging api by @fanatic75 in https://github.com/appwrite/appwrite/pull/7069
+* Chore sync main 1.5.x by @fanatic75 in https://github.com/appwrite/appwrite/pull/7115
+* Chore sync main by @abnegate in https://github.com/appwrite/appwrite/pull/7120
+* Add XDebug by @PineappleIOnic in https://github.com/appwrite/appwrite/pull/7082
+* More review changes by @fanatic75 in https://github.com/appwrite/appwrite/pull/7129
+* Feat target provider type by @fanatic75 in https://github.com/appwrite/appwrite/pull/7132
+* removes internal provider by @fanatic75 in https://github.com/appwrite/appwrite/pull/7151
+* Feat account target by @fanatic75 in https://github.com/appwrite/appwrite/pull/7152
+* 1.4.x by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7149
+* adds user name in subscriber response model by @fanatic75 in https://github.com/appwrite/appwrite/pull/7177
+* feat: add migration stats task by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7187
+* migrates enum attribute size to 255 by @fanatic75 in https://github.com/appwrite/appwrite/pull/7183
+* changes TextMagic to Textmagic in all places and uses email validator by @fanatic75 in https://github.com/appwrite/appwrite/pull/7188
+* chore: upgrade console to 3.2.9 by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7189
+* makes provider creation fields optional and adds target info in subsc… by @fanatic75 in https://github.com/appwrite/appwrite/pull/7195
+* Chore update sdks by @abnegate in https://github.com/appwrite/appwrite/pull/7180
+* adds target when creating user via server endpoint by @fanatic75 in https://github.com/appwrite/appwrite/pull/7217
+* Feat add message provider type by @abnegate in https://github.com/appwrite/appwrite/pull/7219
+* feat: update console by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7225
+* Implement Job based hamster by @PineappleIOnic in https://github.com/appwrite/appwrite/pull/7216
+* bump: console version by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7238
+* chore: update console version by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7240
+* misc changes by @fanatic75 in https://github.com/appwrite/appwrite/pull/7227
+* Update appwrite base image by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7241
+* Revert "Update appwrite base image" by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7256
+* feat: upgrade console to 3.2.15 by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7258
+* mail support string as attachment by @lohanidamodar in https://github.com/appwrite/appwrite/pull/7261
+* fix redis issue by encoding content by @lohanidamodar in https://github.com/appwrite/appwrite/pull/7262
+* Fix cookie issue by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7260
+* support mail template override by @lohanidamodar in https://github.com/appwrite/appwrite/pull/7251
+* feat: project usage custom date range by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7266
+* feat: usage breakdown by project by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7270
+* provide retention time as queue server resource by @lohanidamodar in https://github.com/appwrite/appwrite/pull/7272
+* fix: remove expired cookie by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7275
+* PEA-15 Refactor Deletes and maintenance worker by @lohanidamodar in https://github.com/appwrite/appwrite/pull/7273
+* Refactor usage execution trigger by @shimonewman in https://github.com/appwrite/appwrite/pull/7274
+* Fix max array size 1 by @abnegate in https://github.com/appwrite/appwrite/pull/7287
+* chore: update console by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7291
+* Fix SMS import by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7293
+* rename stats collection by @lohanidamodar in https://github.com/appwrite/appwrite/pull/7301
+* fix deletes worker by @lohanidamodar in https://github.com/appwrite/appwrite/pull/7310
+* Sync main with 1.4.x by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7312
+* combining network inbound by @shimonewman in https://github.com/appwrite/appwrite/pull/7298
+* chore: update console by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7313
+* Update console by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7314
+* chore: update console by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7315
+* chore: update console by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7316
+* chore: update console by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7319
+* chore: update hamster script by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7320
+* Refactor usage worker sn by @shimonewman in https://github.com/appwrite/appwrite/pull/7326
+* usageHook tweaks by @shimonewman in https://github.com/appwrite/appwrite/pull/7330
+* Refactor inf metric calc by @shimonewman in https://github.com/appwrite/appwrite/pull/7339
+* Fix user last activity not updating by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7292
+* Fix user identity attaching to wrong user by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7280
+* fix for file extension not supported by @lohanidamodar in https://github.com/appwrite/appwrite/pull/7349
+* Bump console to version 3.3.14 by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7358
+* Bump console to version 3.3.15 by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7359
+* Update tr.json by @fanksin in https://github.com/appwrite/appwrite/pull/7276
+* Improve large file handling by @lohanidamodar in https://github.com/appwrite/appwrite/pull/7351
+* PEA-38 compression constants by @lohanidamodar in https://github.com/appwrite/appwrite/pull/7366
+* Fix permission issue with chunk upload by @lohanidamodar in https://github.com/appwrite/appwrite/pull/7328
+* 1.4.x by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7317
+* Sync with main by @shimonewman in https://github.com/appwrite/appwrite/pull/7374
+* Feat: Max password length by @Meldiron in https://github.com/appwrite/appwrite/pull/7376
+* feat: console hostname env variable by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7360
+* Sync main by @lohanidamodar in https://github.com/appwrite/appwrite/pull/7384
+* Add `_APP_CONSOLE_HOSTNAMES` env var to allow more hostnames to the console project by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7377
+* Fix app console hostnames check by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7385
+* Add General E2E tests to CI pipeline by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7386
+* Fix app console hostnames check on refactor usage sn by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7387
+* executor: pass build timeout to runtimes by @iMacHumphries in https://github.com/appwrite/appwrite/pull/7350
+* Create an enum for Message status by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7380
+* [Feat]: Zoho OAuth Provider by @UtkarshAhuja2003 in https://github.com/appwrite/appwrite/pull/7365
+* Messaging uniform logic fixes by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7397
+* Webhook attempts PR suggestions by @Meldiron in https://github.com/appwrite/appwrite/pull/7402
+* fix: escape html in email params by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7409
+* Add a flag to install and upgrade commands to not start Appwrite by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7271
+* Add support for querying topic total by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7388
+* Adds uniform error logic for messaging worker and extra params for email by @fanatic75 in https://github.com/appwrite/appwrite/pull/7245
+* Update the delete identity endpoints to set the params and payload by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7348
+* Fix utopia-php/framework version by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7410
+* feat: account delete by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7415
+* chore: update collection name in hamster by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7417
+* Feat: Magic URL improvements by @Meldiron in https://github.com/appwrite/appwrite/pull/7416
+* feat: update assistant by @loks0n in https://github.com/appwrite/appwrite/pull/7421
+* Feat: Improve worker logging by @Meldiron in https://github.com/appwrite/appwrite/pull/7192
+* Added security phrase to magic URL by @Meldiron in https://github.com/appwrite/appwrite/pull/7424
+* fix: hotfix for redirect param in custom templates by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7437
+* Make OTP template more contextual by @vermakhushboo in https://github.com/appwrite/appwrite/pull/7434
+* Fix: Remove passwordAgain by @Meldiron in https://github.com/appwrite/appwrite/pull/7441
+* Rename usage_network_infinity to usage_bandwidth_infinity by @PineappleIOnic in https://github.com/appwrite/appwrite/pull/7443
+* Added cloud base templates to appwrite/appwrite by @vermakhushboo in https://github.com/appwrite/appwrite/pull/7440
+* Remove the endpoint param for APNS providers by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7418
+* Default topic description to an empty string instead of null by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7430
+* feat: SSR by @loks0n in https://github.com/appwrite/appwrite/pull/5777
+* Add support for draft messages by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7429
+* Add search param for list subscribers endpoint by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7382
+* Delete subscribers and update topic totals when deleting target by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7396
+* Fix list messages allowed queries by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7381
+* Allow filtering targets by provider type by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7419
+* Feat message scheduling by @abnegate in https://github.com/appwrite/appwrite/pull/7431
+* Fix create/update push target routes by @abnegate in https://github.com/appwrite/appwrite/pull/7461
+* Fix cc + bcc targets fetched by identifier instead of $id by @abnegate in https://github.com/appwrite/appwrite/pull/7468
+* Add endpoint to list a message's targets by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7463
+* Limit webhook failure attempts to 10 by @vermakhushboo in https://github.com/appwrite/appwrite/pull/7128
+* Follow existing style of code by @vermakhushboo in https://github.com/appwrite/appwrite/pull/7470
+* Refactored url construction by @vermakhushboo in https://github.com/appwrite/appwrite/pull/7478
+* hamster additions by @shimonewman in https://github.com/appwrite/appwrite/pull/7462
+* Feat: session renewal by @Meldiron in https://github.com/appwrite/appwrite/pull/7452
+* Feat: Email OTP by @Meldiron in https://github.com/appwrite/appwrite/pull/7422
+* feat: delete account by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7392
+* Fix: Email image endpoints by @Meldiron in https://github.com/appwrite/appwrite/pull/7474
+* Feat smtp test endpoint by @eldadfux in https://github.com/appwrite/appwrite/pull/7307
+* Update ruby by @abnegate in https://github.com/appwrite/appwrite/pull/7464
+* Refactor usage by @shimonewman in https://github.com/appwrite/appwrite/pull/7005
+* Fix: Certificate email style by @Meldiron in https://github.com/appwrite/appwrite/pull/7475
+* sync: 1.5.x with main by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7486
+* 1.5.x <- main by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7485
+* Refactor Usage Stats by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7311
+* Feat maintenance delete expired targets by @abnegate in https://github.com/appwrite/appwrite/pull/7460
+* Trigger deletes worker when target is deleted by @abnegate in https://github.com/appwrite/appwrite/pull/7490
+* Throw on enable if provider credentials are missing instead of ignoring by @abnegate in https://github.com/appwrite/appwrite/pull/7484
+* Add Queue Retry Command to Appwrite by @PineappleIOnic in https://github.com/appwrite/appwrite/pull/7391
+* Add failed queues endpoint to health by @PineappleIOnic in https://github.com/appwrite/appwrite/pull/7466
+* Feat: CNAME validation logs by @Meldiron in https://github.com/appwrite/appwrite/pull/7482
+* Add queue management commands by @PineappleIOnic in https://github.com/appwrite/appwrite/pull/7497
+* Add threshold to queue failed health endpoint by @PineappleIOnic in https://github.com/appwrite/appwrite/pull/7499
+* fix: use atomic operations for count updates by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7511
+* chore: add logs by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7513
+* chore: add logs by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7514
+* chore: add auth label to phone endpoint by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7515
+* JSON + OR query support by @fogelito in https://github.com/appwrite/appwrite/pull/7252
+* Labels limit by @fogelito in https://github.com/appwrite/appwrite/pull/7504
+* chore: update rate limits by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7523
+* Add message delete route by @abnegate in https://github.com/appwrite/appwrite/pull/7510
+* Feat remove description by @abnegate in https://github.com/appwrite/appwrite/pull/7518
+* Upgrade to PHP 8.2 by @eldadfux in https://github.com/appwrite/appwrite/pull/7067
+* Add SMTP provider by @abnegate in https://github.com/appwrite/appwrite/pull/7525
+* remove debug leftovers by @shimonewman in https://github.com/appwrite/appwrite/pull/7531
+* feat: ssr changes by @loks0n in https://github.com/appwrite/appwrite/pull/7532
+* Add webhook max failed attempts as env variable by @vermakhushboo in https://github.com/appwrite/appwrite/pull/7489
+* Feat: Rename security phrases by @Meldiron in https://github.com/appwrite/appwrite/pull/7533
+* Update to standard namespacing for enums by @abnegate in https://github.com/appwrite/appwrite/pull/7537
+* Remove redundant usage labels by @abnegate in https://github.com/appwrite/appwrite/pull/7536
+* Update containers by @abnegate in https://github.com/appwrite/appwrite/pull/7526
+* feat: mfa by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7346
+* Fix: client error reporting by @Meldiron in https://github.com/appwrite/appwrite/pull/7539
+* Feat session target delete by @abnegate in https://github.com/appwrite/appwrite/pull/7540
+* Fix spec generation by @abnegate in https://github.com/appwrite/appwrite/pull/7538
+* Feat block countries from certain regions by @vermakhushboo in https://github.com/appwrite/appwrite/pull/7487
+* Fix: Empty values in PATCH of users by @Meldiron in https://github.com/appwrite/appwrite/pull/7471
+* Add a 20 second delay to maintenance worker by @vermakhushboo in https://github.com/appwrite/appwrite/pull/7544
+* Add health certificate validity endpoint by @vermakhushboo in https://github.com/appwrite/appwrite/pull/7547
+* Add count for messages(sms) metric by @shimonewman in https://github.com/appwrite/appwrite/pull/7520
+* Fix user API mfa route auth by @abnegate in https://github.com/appwrite/appwrite/pull/7549
+* Fix graphql tests by @abnegate in https://github.com/appwrite/appwrite/pull/7553
+* Fix message status values and enums by @abnegate in https://github.com/appwrite/appwrite/pull/7552
+* Update param name by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7519
+* Fix SHA function enum name by @abnegate in https://github.com/appwrite/appwrite/pull/7554
+* Sync main with refactor-usage-sn by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7556
+* Usage queue poc by @shimonewman in https://github.com/appwrite/appwrite/pull/7503
+* Update team counts by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7561
+* PEA-233-prevent console user deletion before deleting their team by @lohanidamodar in https://github.com/appwrite/appwrite/pull/7500
+* PEA-233-prevent console user deletion before deleting their team by @lohanidamodar in https://github.com/appwrite/appwrite/pull/7563
+* Update place holders from [PARAM_NAME] to by @gewenyu99 in https://github.com/appwrite/appwrite/pull/7560
+* PEA-334 - Fix spec use cloud endpoint by default by @lohanidamodar in https://github.com/appwrite/appwrite/pull/7567
+* Merge main by @abnegate in https://github.com/appwrite/appwrite/pull/7568
+* Hardcode size and orders for Json Key Indexes by @fogelito in https://github.com/appwrite/appwrite/pull/7557
+* Feat support label queries by @abnegate in https://github.com/appwrite/appwrite/pull/7570
+* Fix missing user activity logs by @Souptik2001 in https://github.com/appwrite/appwrite/pull/7559
+* Refactor usage sn by @shimonewman in https://github.com/appwrite/appwrite/pull/7576
+* Catch errors parseQueries by @fogelito in https://github.com/appwrite/appwrite/pull/7558
+* fix Indexes by @fogelito in https://github.com/appwrite/appwrite/pull/7572
+* Fix updating message status by @abnegate in https://github.com/appwrite/appwrite/pull/7571
+* Fix telesign params by @abnegate in https://github.com/appwrite/appwrite/pull/7569
+* Fix email/sms template type enums getting the same values by @abnegate in https://github.com/appwrite/appwrite/pull/7551
+* Replace catching \Exception with \Throwable by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7555
+* cache collection attr migration by @shimonewman in https://github.com/appwrite/appwrite/pull/7575
+* Remove database methods from deletes worker by @shimonewman in https://github.com/appwrite/appwrite/pull/7135
+* Fix smtp provider update by @abnegate in https://github.com/appwrite/appwrite/pull/7578
+* usage logs updates by @shimonewman in https://github.com/appwrite/appwrite/pull/7588
+* Add unknown error is delivered total is 0 but there were no delivery … by @abnegate in https://github.com/appwrite/appwrite/pull/7579
+* Feat subscribe permission by @abnegate in https://github.com/appwrite/appwrite/pull/7580
+* Remove redundant hook by @abnegate in https://github.com/appwrite/appwrite/pull/7581
+* Update geodb by @abnegate in https://github.com/appwrite/appwrite/pull/7582
+* Project id to logger by @shimonewman in https://github.com/appwrite/appwrite/pull/7598
+* Refactor cache by @shimonewman in https://github.com/appwrite/appwrite/pull/5616
+* Feat topic totals per type by @abnegate in https://github.com/appwrite/appwrite/pull/7589
+* Update docker base by @abnegate in https://github.com/appwrite/appwrite/pull/7599
+* Update Response and Request filters aswell as Migrations for 1.5.x by @PineappleIOnic in https://github.com/appwrite/appwrite/pull/7457
+* fix: blocked users web controllers by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7601
+* dev: introduce redis insights by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7583
+* Update image lib by @abnegate in https://github.com/appwrite/appwrite/pull/7566
+* Update exception for github session not found by @vermakhushboo in https://github.com/appwrite/appwrite/pull/7375
+* Feat more phone validation by @loks0n in https://github.com/appwrite/appwrite/pull/7165
+* fix project network usage by @lohanidamodar in https://github.com/appwrite/appwrite/pull/7608
+* usage logs updates by @lohanidamodar in https://github.com/appwrite/appwrite/pull/7615
+* usage/usage-dump queue health endpoints by @shimonewman in https://github.com/appwrite/appwrite/pull/7614
+* Make self-hosted and cloud specs consistent by @abnegate in https://github.com/appwrite/appwrite/pull/7617
+* Remove callback resources from workers by @abnegate in https://github.com/appwrite/appwrite/pull/7618
+* Feat email attachments by @abnegate in https://github.com/appwrite/appwrite/pull/7611
+* Update GETTING_STARTED.md by @GuptaPratik02 in https://github.com/appwrite/appwrite/pull/6826
+* Refactor remove resource collection by @abnegate in https://github.com/appwrite/appwrite/pull/7620
+* Fix duplicate subscribers by @abnegate in https://github.com/appwrite/appwrite/pull/7624
+* Allow push images by @abnegate in https://github.com/appwrite/appwrite/pull/7594
+* fix: msg91 by @loks0n in https://github.com/appwrite/appwrite/pull/7626
+* Fix: Router CURL by @Meldiron in https://github.com/appwrite/appwrite/pull/7627
+* Add storage health check by @vermakhushboo in https://github.com/appwrite/appwrite/pull/7591
+* Revert "usage/usage-dump queue health endpoints" by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7629
+* Revert "Fix: Router CURL" by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7630
+* Fix: Router CURL by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7632
+* Use swoole process mode instead of base by @abnegate in https://github.com/appwrite/appwrite/pull/7635
+* feat: ssr dx by @loks0n in https://github.com/appwrite/appwrite/pull/7619
+* Remove preloading by @abnegate in https://github.com/appwrite/appwrite/pull/7637
+* fix: add mfa path to console by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7639
+* Fix 1.5.x Migrations by @PineappleIOnic in https://github.com/appwrite/appwrite/pull/7621
+* Provider null by @fogelito in https://github.com/appwrite/appwrite/pull/7625
+* Add ARM64 to docker publish by @PineappleIOnic in https://github.com/appwrite/appwrite/pull/7622
+* Fix tests by @abnegate in https://github.com/appwrite/appwrite/pull/7640
+* fix: email templates by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7641
+* Fix content-type of file by @vermakhushboo in https://github.com/appwrite/appwrite/pull/7643
+* Fix update topics permissions by @abnegate in https://github.com/appwrite/appwrite/pull/7638
+* Allow setting APNS to sandbox mode by @abnegate in https://github.com/appwrite/appwrite/pull/7645
+* Fix: Functions CI/CD tests by @Meldiron in https://github.com/appwrite/appwrite/pull/7647
+* Fix missing userId on update challenge by @abnegate in https://github.com/appwrite/appwrite/pull/7650
+* Fix mail reset attachment by @lohanidamodar in https://github.com/appwrite/appwrite/pull/7653
+* Fix return by @lohanidamodar in https://github.com/appwrite/appwrite/pull/7654
+* Fix-function-id-2 by @eldadfux in https://github.com/appwrite/appwrite/pull/7656
+* Only return allowed runtimes in runtime list route by @abnegate in https://github.com/appwrite/appwrite/pull/7659
+* Add twoWayKey checks and multiple many-to-many restrictions by @fogelito in https://github.com/appwrite/appwrite/pull/7153
+* chore: remove array sdk method by @loks0n in https://github.com/appwrite/appwrite/pull/7649
+* Use new migration error handling by @PineappleIOnic in https://github.com/appwrite/appwrite/pull/7652
+* fix: phone verification flaky by @loks0n in https://github.com/appwrite/appwrite/pull/7666
+* feat: test perf by @loks0n in https://github.com/appwrite/appwrite/pull/7665
+* Fix: False positive MFA by @Meldiron in https://github.com/appwrite/appwrite/pull/7664
+* Fix: Spanish template translations by @DH-555 in https://github.com/appwrite/appwrite/pull/7658
+* Bug 7597 - Adding default value by @navjotNSK in https://github.com/appwrite/appwrite/pull/7651
+* 1.5.x api descriptions by @gewenyu99 in https://github.com/appwrite/appwrite/pull/7667
+* Fix: Empty password validation by @Meldiron in https://github.com/appwrite/appwrite/pull/7662
+* [Fix]: Remove internal attributes on select query by @UtkarshAhuja2003 in https://github.com/appwrite/appwrite/pull/7648
+* Feat remove status param by @abnegate in https://github.com/appwrite/appwrite/pull/7670
+* Sync main by @abnegate in https://github.com/appwrite/appwrite/pull/7669
+* Rescheduling fixes by @abnegate in https://github.com/appwrite/appwrite/pull/7668
+* Disallow creating a session if one already exists by @abnegate in https://github.com/appwrite/appwrite/pull/7616
+* Fix duplication by @abnegate in https://github.com/appwrite/appwrite/pull/7679
+* Feat fix 1.5.x migrations by @PineappleIOnic in https://github.com/appwrite/appwrite/pull/7671
+* Allow ssl along with tls in custom smtp by @vermakhushboo in https://github.com/appwrite/appwrite/pull/7674
+* Change status code from 503 to 403 by @vermakhushboo in https://github.com/appwrite/appwrite/pull/7672
+* Train Assistant for Appwrite 1.5 by @loks0n in https://github.com/appwrite/appwrite/pull/7686
+* adding limit to queue retry by @shimonewman in https://github.com/appwrite/appwrite/pull/7692
+* fix: encode secret in oauth workaround by @loks0n in https://github.com/appwrite/appwrite/pull/7695
+* Update generator and deploy RC SDKs by @abnegate in https://github.com/appwrite/appwrite/pull/7545
+* Update endpoint description by @vermakhushboo in https://github.com/appwrite/appwrite/pull/7704
+* Chore sync 1.4.x into main by @stnguyen90 in https://github.com/appwrite/appwrite/pull/7697
+* chore: update error types for create account endpoints by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7698
+* usage/usage-dump queue health endpoints by @shimonewman in https://github.com/appwrite/appwrite/pull/7661
+* Refactor usage sn by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7660
+* Fix: MFA flows and docs by @Meldiron in https://github.com/appwrite/appwrite/pull/7709
+* update cover image for SDKs by @lohanidamodar in https://github.com/appwrite/appwrite/pull/7715
+* Feat: More Recovery code endpoints by @Meldiron in https://github.com/appwrite/appwrite/pull/7713
+* feat: mfa collection restructure by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7696
+* Fix: SDKs enums by @Meldiron in https://github.com/appwrite/appwrite/pull/7723
+* sync: main -> 1.5.x by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7705
+* Sync main 1.5.x by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7727
+* Updated header by @DylanG-64 in https://github.com/appwrite/appwrite/pull/7728
+* chore: update exector, runtimes by @loks0n in https://github.com/appwrite/appwrite/pull/7729
+* feat: pint by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7738
+* feat: cascading response/request filters by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7745
+* Revert 7629 revert 7614 chore usage queue health by @christyjacob4 in https://github.com/appwrite/appwrite/pull/7707
+* fix: migration 1.5.x by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7737
+* sync: main 1.5.x 3 by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/7747
+* Allow users to disable APIs by @vermakhushboo in https://github.com/appwrite/appwrite/pull/7725
+* Feat seperate image IDs by @abnegate in https://github.com/appwrite/appwrite/pull/7749
+* fix: account endpoint order by @loks0n in https://github.com/appwrite/appwrite/pull/7739
+* Feat image jwts by @abnegate in https://github.com/appwrite/appwrite/pull/7751
+
+## New Contributors
+* @fanksin made their first contribution in https://github.com/appwrite/appwrite/pull/7276
+* @iMacHumphries made their first contribution in https://github.com/appwrite/appwrite/pull/7350
+* @UtkarshAhuja2003 made their first contribution in https://github.com/appwrite/appwrite/pull/7365
+* @Souptik2001 made their first contribution in https://github.com/appwrite/appwrite/pull/7559
+* @GuptaPratik02 made their first contribution in https://github.com/appwrite/appwrite/pull/6826
+* @navjotNSK made their first contribution in https://github.com/appwrite/appwrite/pull/7651
+* @DylanG-64 made their first contribution in https://github.com/appwrite/appwrite/pull/7728
+
+**Full Changelog**: https://github.com/appwrite/appwrite/compare/1.4.13...1.5.0
+
# Version 1.4.14
## Changes
@@ -496,7 +897,7 @@
## Features
- Added Phone Authentication by @TorstenDittmann in https://github.com/appwrite/appwrite/pull/3357
- Added Twilio Support
- - Added TextMagic Support
+ - Added Textmagic Support
- Added Telesign Support
- Added Endpoint to create Phone Session (`POST:/v1/account/sessions/phone`)
- Added Endpoint to confirm Phone Session (`PUT:/v1/account/sessions/phone`)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 0522e33da5..9e3e6fcd81 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -148,6 +148,14 @@ Learn more at our [Technology Stack](#technology-stack) section.
- [Microservices vs Monolithic](https://www.mulesoft.com/resources/api/microservices-vs-monolithic#:~:text=Microservices%20architecture%20vs%20monolithic%20architecture&text=A%20monolithic%20application%20is%20built%20as%20a%20single%20unit.&text=To%20make%20any%20alterations%20to,formally%20with%20business%2Doriented%20APIs.)
- [MVVM](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel) - Appwrite console architecture
+##### Container Namespace Conventions
+To keep our services easy to understand within Docker we follow a naming convention for all our containers depending on it's intended use.
+
+`appwrite-worker-X` - Workers (`src/Appwrite/Platform/Workers/*`)
+`appwrite-task-X` - Tasks (`src/Appwrite/Platform/Tasks/*`)
+
+Other containes should be named the same as their service, for example `redis` should just be called `redis`.
+
##### Security
- [Appwrite Auth and ACL](https://github.com/appwrite/appwrite/blob/master/docs/specs/authentication.drawio.svg)
@@ -301,6 +309,143 @@ This will allow the Appwrite community to sufficiently discuss the new feature v
This is also important for the Appwrite lead developers to be able to provide technical input and potentially a different emphasis regarding the feature design and architecture. Some bigger features might need to go through our [RFC process](https://github.com/appwrite/rfc).
+## Adding New Usage Metrics
+
+These are the current metrics we collect usage stats for:
+
+| Metric | Description |
+|--------|-------------------------------------------------|
+| teams | Total number of teams per project |
+| users | Total number of users per project|
+| executions | Total number of executions per project |
+| databases | Total number of databases per project |
+| collections | Total number of collections per project |
+| {databaseInternalId}.collections | Total number of collections per database|
+| documents | Total number of documents per project |
+| {databaseInternalId}.{collectionInternalId}.documents | Total number of documents per collection |
+| buckets | Total number of buckets per project |
+| files | Total number of files per project |
+| {bucketInternalId}.files.storage | Sum of files.storage per bucket (in bytes) |
+| functions | Total number of functions per project |
+| deployments | Total number of deployments per project |
+| builds | Total number of builds per project |
+| {resourceType}.{resourceInternalId}.deployments | Total number of deployments per function |
+| executions | Total number of executions per project |
+| {functionInternalId}.executions | Total number of executions per function |
+| files.storage | Sum of files storage per project (in bytes) |
+| deployments.storage | Sum of deployments storage per project (in bytes) |
+| {resourceType}.{resourceInternalId}.deployments.storage | Sum of deployments storage per function (in bytes) |
+| builds.storage | Sum of builds storage per project (in bytes) |
+| builds.compute | Sum of compute duration per project (in seconds) |
+| {functionInternalId}.builds.storage | Sum of builds storage per function (in bytes) |
+| {functionInternalId}.builds.compute | Sum of compute duration per function (in seconds) |
+| network.requests | Total number of network requests per project |
+| executions.compute | Sum of compute duration per project (in seconds) |
+| network.inbound | Sum of network inbound traffic per project (in bytes)|
+| network.outbound | Sum of network outbound traffic per project (in bytes)|
+
+> Note: The curly brackets in the metric name represents a template and is replaced with a value when the metric is processed.
+
+Metrics are collected within 3 scopes Daily, monthly, an infinity. Adding new usage metric in order to aggregate usage stats is very simple, but very much dependent on where do you want to collect
+statistics ,via API or via background worker. For both cases you will need to add a `const` variable in `app/init.php` under the usage metrics list using the naming convention `METRIC_` as shown below.
+
+```php
+// Usage metrics
+const METRIC_FUNCTIONS = 'functions';
+const METRIC_DEPLOYMENTS = 'deployments';
+const METRIC_DEPLOYMENTS_STORAGE = 'deployments.storage';
+```
+
+Next follow the appropriate steps below depending on whether you're adding the metric to the API or the worker.
+
+**API**
+
+In file `app/controllers/shared/api.php` On the database listener, add to an existing or create a new switch case. Add a call to the usage worker with your new metric const like so:
+
+```php
+ case $document->getCollection() === 'teams':
+ $queueForUsage
+ ->addMetric(METRIC_TEAMS, $value); // per project
+ break;
+```
+There are cases when you need to handle metric that has a parent entity, like buckets.
+Files are linked to a parent bucket, you should verify you remove the files stats when you delete a bucket.
+
+In that case you need also to handle children removal using addReduce() method call.
+
+```php
+
+ case $document->getCollection() === 'buckets': //buckets
+ $queueForUsage
+ ->addMetric(METRIC_BUCKETS, $value); // per project
+ if ($event === Database::EVENT_DOCUMENT_DELETE) {
+ $queueForUsage
+ ->addReduce($document);
+ }
+ break;
+
+```
+
+In addition, you will also need to add some logic to the `reduce()` method of the Usage worker located in `/src/Appwrite/Platform/Workers/Usage.php`, like so:
+
+```php
+case $document->getCollection() === 'buckets':
+ $files = $dbForProject->getDocument('stats', md5(self::INFINITY_PERIOD . str_replace('{bucketInternalId}', $document->getInternalId(), METRIC_BUCKET_ID_FILES)));
+ $storage = $dbForProject->getDocument('stats', md5(self::INFINITY_PERIOD . str_replace('{bucketInternalId}', $document->getInternalId(), METRIC_BUCKET_ID_FILES_STORAGE)));
+
+ if (!empty($files['value'])) {
+ $metrics[] = [
+ 'key' => METRIC_FILES,
+ 'value' => ($files['value'] * -1),
+ ];
+ }
+
+ if (!empty($storage['value'])) {
+ $metrics[] = [
+ 'key' => METRIC_FILES_STORAGE,
+ 'value' => ($storage['value'] * -1),
+ ];
+ }
+ break;
+```
+
+**Background worker**
+
+You need to inject the usage queue in the desired worker on the constructor method
+```php
+/**
+* @throws Exception
+*/
+public function __construct()
+{
+ $this
+ ->desc('Functions worker')
+ ->groups(['functions'])
+ ->inject('message')
+ ->inject('dbForProject')
+ ->inject('queueForFunctions')
+ ->inject('queueForEvents')
+ ->inject('queueForUsage')
+ ->inject('log')
+ ->callback(fn (Message $message, Database $dbForProject, Func $queueForFunctions, Event $queueForEvents, Usage $queueForUsage, Log $log) => $this->action($message, $dbForProject, $queueForFunctions, $queueForEvents, $queueForUsage, $log));
+}
+```
+
+and then trigger the queue with the new metric like so:
+
+```php
+$queueForUsage
+ ->addMetric(METRIC_BUILDS, 1)
+ ->addMetric(METRIC_BUILDS_STORAGE, $build->getAttribute('size', 0))
+ ->addMetric(METRIC_BUILDS_COMPUTE, (int)$build->getAttribute('duration', 0) * 1000)
+ ->addMetric(str_replace('{functionInternalId}', $function->getInternalId(), METRIC_FUNCTION_ID_BUILDS), 1)
+ ->addMetric(str_replace('{functionInternalId}', $function->getInternalId(), METRIC_FUNCTION_ID_BUILDS_STORAGE), $build->getAttribute('size', 0))
+ ->addMetric(str_replace('{functionInternalId}', $function->getInternalId(), METRIC_FUNCTION_ID_BUILDS_COMPUTE), (int)$build->getAttribute('duration', 0) * 1000)
+ ->setProject($project)
+ ->trigger();
+```
+
+
## Build
To build a new version of the Appwrite server, all you need to do is run the build.sh file like this:
@@ -344,13 +489,13 @@ Things to remember when releasing SDKs:
## Debug
-Appwrite uses [yasd](https://github.com/swoole/yasd) debugger, which can be made available during build of Appwrite. You can connect to the debugger using VS Code's [PHP Debug](https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-debug) extension.
+Appwrite uses [XDebug](https://github.com/xdebug/xdebug) debugger, which can be made available during build of Appwrite. You can connect to the debugger using VS Code's [PHP Debug](https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-debug) extension.
-If you are in PHP Storm you don't need any plugin. Below are the settings required for remote debugger connection:
+If you are in PHP Storm you don't need any plugin. Below are the settings required for remote debugger connection:
-1. Create an init file.
-2. Duplicate **dev/yasd_init.php.stub** file and name it **dev/yasd_init.php**.
-3. Set **DEBUG** build arg in **appwrite** service in **docker-compose.yml** file.
+1. Set **DEBUG** build arg in **appwrite** service in **docker-compose.yml** file.
+2. If needed edit the **dev/xdebug.ini** file to your needs.
+3. Launch your Appwrite instance while your debugger is listening for connections.
### VS Code Launch Configuration
diff --git a/Dockerfile b/Dockerfile
index 5d06d6c828..1d2ac91ae0 100755
--- a/Dockerfile
+++ b/Dockerfile
@@ -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 --platform=$BUILDPLATFORM node:16.14.2-alpine3.15 as node
+FROM --platform=$BUILDPLATFORM node:20.11.0-alpine3.19 as node
COPY app/console /usr/local/src/console
@@ -29,7 +29,7 @@ ENV VITE_APPWRITE_GROWTH_ENDPOINT=$VITE_APPWRITE_GROWTH_ENDPOINT
RUN npm ci
RUN npm run build
-FROM appwrite/base:0.4.3 as final
+FROM appwrite/base:0.9.0 as final
LABEL maintainer="team@appwrite.io"
@@ -56,6 +56,7 @@ COPY ./public /usr/src/code/public
COPY ./bin /usr/local/bin
COPY ./docs /usr/src/code/docs
COPY ./src /usr/src/code/src
+COPY ./dev /usr/src/code/dev
# Set Volumes
RUN mkdir -p /storage/uploads && \
@@ -73,63 +74,43 @@ RUN mkdir -p /storage/uploads && \
# Executables
RUN chmod +x /usr/local/bin/doctor && \
- chmod +x /usr/local/bin/maintenance && \
chmod +x /usr/local/bin/install && \
- chmod +x /usr/local/bin/upgrade && \
+ chmod +x /usr/local/bin/maintenance && \
chmod +x /usr/local/bin/migrate && \
chmod +x /usr/local/bin/realtime && \
- chmod +x /usr/local/bin/schedule && \
+ chmod +x /usr/local/bin/schedule-functions && \
+ chmod +x /usr/local/bin/schedule-messages && \
chmod +x /usr/local/bin/sdks && \
chmod +x /usr/local/bin/specs && \
chmod +x /usr/local/bin/ssl && \
chmod +x /usr/local/bin/test && \
+ chmod +x /usr/local/bin/upgrade && \
chmod +x /usr/local/bin/vars && \
chmod +x /usr/local/bin/queue-retry && \
chmod +x /usr/local/bin/queue-count-failed && \
chmod +x /usr/local/bin/queue-count-processing && \
chmod +x /usr/local/bin/queue-count-success && \
chmod +x /usr/local/bin/worker-audits && \
+ chmod +x /usr/local/bin/worker-builds && \
chmod +x /usr/local/bin/worker-certificates && \
chmod +x /usr/local/bin/worker-databases && \
chmod +x /usr/local/bin/worker-deletes && \
chmod +x /usr/local/bin/worker-functions && \
- chmod +x /usr/local/bin/worker-builds && \
chmod +x /usr/local/bin/worker-mails && \
chmod +x /usr/local/bin/worker-messaging && \
- chmod +x /usr/local/bin/worker-webhooks && \
chmod +x /usr/local/bin/worker-migrations && \
- chmod +x /usr/local/bin/worker-hamster && \
+ chmod +x /usr/local/bin/worker-webhooks && \
chmod +x /usr/local/bin/worker-usage && \
chmod +x /usr/local/bin/worker-usage-dump
-
-# Cloud Executabless
-RUN chmod +x /usr/local/bin/hamster && \
- chmod +x /usr/local/bin/volume-sync && \
- chmod +x /usr/local/bin/patch-delete-schedule-updated-at-attribute && \
- chmod +x /usr/local/bin/patch-recreate-repositories-documents && \
- chmod +x /usr/local/bin/patch-delete-project-collections && \
- chmod +x /usr/local/bin/delete-orphaned-projects && \
- chmod +x /usr/local/bin/clear-card-cache && \
- chmod +x /usr/local/bin/calc-users-stats && \
- chmod +x /usr/local/bin/calc-tier-stats && \
- chmod +x /usr/local/bin/get-migration-stats && \
- chmod +x /usr/local/bin/create-inf-metric
-
# Letsencrypt Permissions
RUN mkdir -p /etc/letsencrypt/live/ && chmod -Rf 755 /etc/letsencrypt/live/
# Enable Extensions
-RUN if [ "$DEBUG" == "true" ]; then printf "zend_extension=yasd \nyasd.debug_mode=remote \nyasd.init_file=/usr/src/code/dev/yasd_init.php \nyasd.remote_port=9005 \nyasd.log_level=-1" >> /usr/local/etc/php/conf.d/yasd.ini; fi
-
-RUN if [ "$DEBUG" == "true" ]; then echo "opcache.enable=0" >> /usr/local/etc/php/conf.d/appwrite.ini; fi
-RUN echo "opcache.preload_user=www-data" >> /usr/local/etc/php/conf.d/appwrite.ini
-RUN echo "opcache.preload=/usr/src/code/app/preload.php" >> /usr/local/etc/php/conf.d/appwrite.ini
-RUN echo "opcache.enable_cli=1" >> /usr/local/etc/php/conf.d/appwrite.ini
-RUN echo "default_socket_timeout=-1" >> /usr/local/etc/php/conf.d/appwrite.ini
-RUN echo "opcache.jit_buffer_size=100M" >> /usr/local/etc/php/conf.d/appwrite.ini
-RUN echo "opcache.jit=1235" >> /usr/local/etc/php/conf.d/appwrite.ini
+RUN if [ "$DEBUG" == "true" ]; then cp /usr/src/code/dev/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini; fi
+RUN if [ "$DEBUG" = "false" ]; then rm -rf /usr/src/code/dev; fi
+RUN if [ "$DEBUG" = "false" ]; then rm -f /usr/local/lib/php/extensions/no-debug-non-zts-20220829/xdebug.so; fi
EXPOSE 80
-CMD [ "php", "app/http.php", "-dopcache.preload=opcache.preload=/usr/src/code/app/preload.php" ]
\ No newline at end of file
+CMD [ "php", "app/http.php" ]
\ No newline at end of file
diff --git a/README-CN.md b/README-CN.md
index 0ce27a0038..ba800a3bd6 100644
--- a/README-CN.md
+++ b/README-CN.md
@@ -11,6 +11,7 @@