8000 Update documentation by ItzNotABug · Pull Request #10030 · appwrite/appwrite · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Update documentation #10030

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 25 commits into
base: 1.8.x
Choose a base branch
from
Open

Update documentation #10030

wants to merge 25 commits into from

Conversation

ItzNotABug
Copy link
Member

What does this PR do?

HUGE but new specs and examples.

Note

Examples are only targeted to 1.8.x at the moment and not against latest. We can do that in the end.

Test Plan

N/A.

Related PRs and Issues

Checklist

  • Have you read the Contributing Guidelines on issues?
  • If the PR includes a change to an API's metadata (desc, label, params, etc.), does it also include updated API specs and example docs?

@ItzNotABug ItzNotABug requested a review from abnegate June 19, 2025 13:29
@ItzNotABug ItzNotABug self-assigned this Jun 19, 2025
Copy link
coderabbitai bot commented Jun 19, 2025
📝 Walkthrough

Walkthrough

This update introduces several key changes across the codebase. The email template for user actions (verification, recovery, invitation) now uses a styled button with localized text ({{buttonText}}) instead of displaying the raw URL, with new translation keys for button labels added across all supported locales. Corresponding controller logic is updated to supply the buttonText parameter to email templates. The router and general request handling now integrate logging via a new Log $log parameter, and origin/referrer handling is refactored for improved CORS and security checks, including new httpReferrer and httpReferrerSafe resources. The storage preview endpoint gains detailed performance timing and logging. Several shell scripts are standardized by removing the use of exec when invoking PHP commands. SDK version numbers for React Native and CLI are also updated in the platform configuration.

Possibly related PRs

  • Chore: Preview endpoint logging #10068: Modifies the same storage preview endpoint to inject Request and Project objects and adds performance timing and logging, directly overlapping with changes in this PR.
  • Override project via custom domains log #10011: Updates the router function in app/controllers/general.php to include a Log $log parameter and adjusts call sites, overlapping with the router and logging integration in this PR.
  • Fix template to use button #9590: Modifies the email template to use a button with {{buttonText}} and adds translation keys for button texts across locales, directly related to the email template and localization changes here.

Suggested reviewers

  • eldadfux
  • stnguyen90
✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
github-actions bot commented Jun 19, 2025

Security Scan Results for PR

Docker Image Scan Results

HIGH
Package Version Vulnerability Severity
binutils 2.42-r0 CVE-2025-0840 HIGH
libexpat 2.6.4-r0 CVE-2024-8176 HIGH
libxml2 2.12.7-r0 CVE-2024-56171 HIGH
libxml2 2.12.7-r0 CVE-2025-24928 HIGH
libxml2 2.12.7-r0 CVE-2025-27113 HIGH
libxml2 2.12.7-r0 CVE-2025-32414 HIGH
libxml2 2.12.7-r0 CVE-2025-32415 HIGH
pyc 3.12.9-r0 CVE-2024-12718 HIGH
pyc 3.12.9-r0 CVE-2025-4138 HIGH
pyc 3.12.9-r0 CVE-2025-4330 HIGH
pyc 3.12.9-r0 CVE-2025-4517 HIGH
python3 3.12.9-r0 CVE-2024-12718 HIGH
python3 3.12.9-r0 CVE-2025-4138 HIGH
python3 3.12.9-r0 CVE-2025-4330 HIGH
python3 3.12.9-r0 CVE-2025-4517
python3-pyc 3.12.9-r0 CVE-2024-12718 HIGH
python3-pyc 3.12.9-r0 CVE-2025-4138 HIGH
python3-pyc 3.12.9-r0 CVE-2025-4330 HIGH
python3-pyc 3.12.9-r0 CVE-2025-4517 HIGH
python3-pycache-pyc0 3.12.9-r0 CVE-2024-12718 HIGH
python3-pycache-pyc0 3.12.9-r0 CVE-2025-4138 HIGH
python3-pycache-pyc0 3.12.9-r0 CVE-2025-4330 HIGH
python3-pycache-pyc0 3.12.9-r0 CVE-2025-4517 HIGH
sqlite-libs 3.45.3-r1 CVE-2025-29087 HIGH
xz 5.6.2-r0 CVE-2025-31115 HIGH
xz-libs 5.6.2-r0 CVE-2025-31115 HIGH
golang.org/x/crypto v0.31.0 CVE-2025-22869 HIGH

Source Code Scan Results

🎉 No vulnerabilities found!

Copy link
github-actions bot commented Jun 19, 2025

✨ Benchmark results

  • Requests per second: 794
  • Requests with 200 status code: 142,997
  • P99 latency: 0.24161111

⚡ Benchmark Comparison

Metric This PR Latest version
RPS 794 1,040
200 142,997 187,317
P99 0.24161111 0.181187793

Copy link
pkg-pr-new bot commented Jun 23, 2025

Open in StackBlitz

npm i https://pkg.pr.new/appwrite/appwrite/@appwrite.io/console@10030

commit: 86dfed8

@ItzNotABug ItzNotABug requested a review from abnegate June 25, 2025 11:48
Base automatically changed from database-aliases to 1.8.x July 1, 2025 03:18
Copy link
@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 12

🔭 Outside diff range comments (2)
app/config/locale/translations/ne.json (1)

239-239: Foreign string slipped into Nepali file.

Line 239 (emails.magicSession.buttonText) is still in French.

-"emails.magicSession.buttonText": "Connectez-vous à {{project}}",
+"emails.magicSession.buttonText": "आफ्नो {{project}} मा लगइन गर्नुहोस्",
app/controllers/general.php (1)

59-764: Consider refactoring the router function to reduce complexity.

The static analysis correctly identifies that this function has become too complex:

  • 706 lines of code (threshold: 100)
  • 15 parameters (threshold: 10)
  • Cyclomatic complexity of 126 (threshold: 10)

This makes the code difficult to maintain, test, and understand.

Consider breaking down the router function into smaller, focused functions:

  1. Extract deployment handling logic (lines 143-582) into a separate function
  2. Extract preview authorization logic (lines 223-282) into a separate function
  3. Extract execution handling (lines 511-654) into a separate function
  4. Consider using a configuration object instead of 15 parameters

Would you like me to help create a refactoring plan or open an issue to track this technical debt?

♻️ Duplicate comments (5)
bin/screenshot (1)

3-3: Same process management concern as other shell scripts.

The removal of exec here follows the same pattern as the worker scripts. While this might be less critical for CLI tools, it still changes process execution behavior.

bin/worker-messaging (1)

3-3: Same process management concern as other worker scripts.

This follows the same pattern of removing exec as the other worker scripts, with the same potential implications for process management.

bin/worker-certificates (1)

3-3: Same process management concern as other worker scripts.

This follows the same pattern of removing exec as the other worker scripts, with the same potential implications for process management.

bin/doctor (1)

3-3: Same exec removal concern as other CLI scripts.

This change has the same process behavior implications as discussed in bin/upgrade. Ensure consistency across all CLI scripts is intentional.

bin/worker-audits (1)

3-3: Consider the impact on worker process lifecycle management.

For worker scripts, removing exec may have more significant implications since workers are typically long-lived processes. Verify that signal handling and process monitoring tools can still manage these workers effectively.

🧹 Nitpick comments (13)
app/worker.php (1)

485-487: Fix formatting and verify signal handling removal.

Two issues here:

  1. Formatting: The static analysis tool correctly identifies that the opening parenthesis should be on the next line
  2. Signal handling: The simplified callback removes SIGTERM signal handling which could affect graceful shutdown

Apply this diff to fix the formatting:

-    ->action(function () use ($workerName) {
+    ->action(function () use ($workerName) {
         Console::info("Worker $workerName  started");
     });

Please verify that removing the SIGTERM signal handler doesn't impact graceful worker shutdown in production environments.

app/config/locale/translations/kn.json (1)

24-24: Wording inconsistent with existing copy – prefer native term over transliteration.
Earlier strings in this file use the verb “ಮರುಹೊಂದಿಸಿ” (e.g., recovery.body). Using “ಮರುಸೆಟ್” mixes English transliteration with Kannada terminology and breaks consistency. Suggest switching to the established verb:

-"emails.recovery.buttonText": "ಗುಪ್ತಪದವನ್ನು ಮರುಸೆಟ್ ಮಾಡಿ",
+"emails.recovery.buttonText": "ಗುಪ್ತಪದವನ್ನು ಮರುಹೊಂದಿಸಿ",
app/config/locale/translations/af.json (1)

31-31: Invitation button text OK but consider minor wording tweak.
Current wording “Aanvaar uitnodiging na {{team}}” is understandable, yet “vir” is slightly more idiomatic in Afrikaans than “na”.

-"emails.invitation.buttonText": "Aanvaar uitnodiging na {{team}}",
+"emails.invitation.buttonText": "Aanvaar uitnodiging vir {{team}}",

Not critical – feel free to keep as is.

app/config/locale/translations/sn.json (1)

11-11: Consider avoiding English words in the Shona string

"Gadzirisa password" keeps the English word password instead of the usual Shona pasiwedhi.
If this is intentional for your audience, ignore; otherwise, update for consistency with the rest of the locale.

Also applies to: 24-24, 31-31

app/config/locale/translations/ko.json (1)

11-11: Minor wording polish for natural Korean
Current strings are technically correct but feel slightly awkward as CTA button labels.

-"이메일 주소를 확인합니다"
+"이메일 주소 확인하기"

-"{{team}} 초대를 수락하기"
+"{{team}} 초대 수락"

No functional impact—purely a UX tweak. Feel free to ignore if you prefer existing wording.

Also applies to: 24-24, 31-31

app/config/locale/translations/la.json (1)

24-24: Optional: translate “Reset password” into Latin

Most of the file attempts Latin wording, so keeping this key in English is slightly inconsistent.

-"emails.recovery.buttonText": "Reset password",
+"emails.recovery.buttonText": "Tesseram reconstitue",

(No functional impact – ignore if English is intentional.)

app/config/locale/translations/eo.json (1)

10-10: Esperanto labels are fine, but note wider inconsistency.

The three added strings are good.
However, surrounding keys still mix “Parsvorta”/​“Pasvorta” and inconsistent comma placement; consider a later sweep for overall consistency.

Also applies to: 23-23, 30-30

app/config/locale/translations/ne.json (1)

11-11: Minor wording tweak for recovery button.

“रिसेट पासवर्ड” reads a bit unnatural compared with the imperative style used in the other two labels.

-"emails.recovery.buttonText": "रिसेट पासवर्ड",
+"emails.recovery.buttonText": "पासवर्ड रिसेट गर्नुहोस्",

Also applies to: 24-24, 31-31

app/config/locale/translations/sa.json (2)

11-11: Hindi-Sanskrit mix – adjust to pure Sanskrit
"ईमेल-पत्त्रं सुनिश्चित करें" ends with the Hindi imperative “करें”.
A fully-Sanskrit form keeps consistency with the rest of the file.

-"emails.verification.buttonText": "ईमेल-पत्त्रं सुनिश्चित करें",
+"emails.verification.buttonText": "ईमेल-पत्त्रं प्रमाणयतु",

24-24: Same mix in recovery button text

-"emails.recovery.buttonText": "गुप्तशब्दं पुनः स्थापित करें",
+"emails.recovery.buttonText": "गुप्तशब्दं पुनः स्थापयतु",
app/config/locale/translations/lb.json (1)

11-11: Minor orthography nitpick
"E-Mail-Adress bestätegen" mixes German spelling; the Luxembourgish form normally omits the accent: bestätegenbestätegen.

-"emails.verification.buttonText": "E-Mail-Adress bestätegen",
+"emails.verification.buttonText": "E-Mail-Adress bestätegen",

(optional hyphen / narrow spaces as per style guide)

app/controllers/api/storage.php (1)

1041-1042: Optimize performance timing calculations.

The current implementation recalculates cumulative times repeatedly. Consider using intermediate timing variables for better readability and efficiency.

Apply this diff to optimize the timing calculations:

 $startTime = \microtime(true);
 
 $source = $deviceForFiles->read($path);
 
-$downloadTime = \microtime(true) - $startTime;
+$downloadEndTime = \microtime(true);
+$downloadTime = $downloadEndTime - $startTime;
 
 if (!empty($cipher)) { // Decrypt
     $source = OpenSSL::decrypt(
         $source,
         $file->getAttribute('openSSLCipher'),
         System::getEnv('_APP_OPENSSL_KEY_V' . $file->getAttribute('openSSLVersion')),
         0,
         \hex2bin($file->getAttribute('openSSLIV')),
         \hex2bin($file->getAttribute('openSSLTag'))
     );
 }
 
-$decryptionTime = \microtime(true) - $startTime - $downloadTime;
+$decryptionEndTime = \microtime(true);
+$decryptionTime = $decryptionEndTime - $downloadEndTime;
 
 switch ($algorithm) {
     case Compression::ZSTD:
         $compressor = new Zstd();
         $source = $compressor->decompress($source);
         break;
     case Compression::GZIP:
         $compressor = new GZIP();
         $source = $compressor->decompress($source);
         break;
 }
 
-$decompressionTime = \microtime(true) - $startTime - $downloadTime - $decryptionTime;
+$decompressionEndTime = \microtime(true);
+$decompressionTime = $decompressionEndTime - $decryptionEndTime;
 
 try {
     $image = new Image($source);
 } catch (ImagickException $e) {
     throw new Exception(Exception::STORAGE_FILE_TYPE_UNSUPPORTED, $e->getMessage());
 }
 
 $image->crop((int) $width, (int) $height, $gravity);
 
 if (!empty($opacity) || $opacity === 0) {
     $image->setOpacity($opacity);
 }
 
 if (!empty($background)) {
     $image->setBackground('#' . $background);
 }
 
 if (!empty($borderWidth)) {
     $image->setBorder($borderWidth, '#' . $borderColor);
 }
 
 if (!empty($borderRadius)) {
     $image->setBorderRadius($borderRadius);
 }
 
 if (!empty($rotation)) {
     $image->setRotation(($rotation + 360) % 360);
 }
 
 $data = $image->output($output, $quality);
 
-$renderingTime = \microtime(true) - $startTime - $downloadTime - $decryptionTime - $decompressionTime;
+$renderingEndTime = \microtime(true);
+$renderingTime = $renderingEndTime - $decompressionEndTime;
 
-$totalTime = \microtime(true) - $startTime;
+$totalTime = $renderingEndTime - $startTime;

Also applies to: 1045-1046, 1058-1059, 1071-1072, 1103-1106

app/init/resources.php (1)

954-996: Well-structured referrer sanitization with appropriate security checks.

The implementation correctly validates the referrer through multiple security layers and provides a sensible localhost fallback for local development.

Fix the multi-line function call formatting to comply with coding standards:

-App::setResource('httpReferrerSafe', function (Request $request, string $httpReferrer, array $clients, Database $dbForPlatform, Document $project, App $utopia): string {
+App::setResource('httpReferrerSafe', function (
+    Request $request,
+    string $httpReferrer,
+    array $clients,
+    Database $dbForPlatform,
+    Document $project,
+    App $utopia
+): string {
-            $rule = Authorization::skip(
-                fn () => $dbForPlatform->find('rules', [
-                    Query::equal('domain', [$origin]),
-                    Query::limit(1)
-                ])
-            )[0] ?? new Document();
+            $rule = Authorization::skip(fn () => $dbForPlatform->find('rules', [
+                Query::equal('domain', [$origin]),
+                Query::limit(1)
+            ]))[0] ?? new Document();
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a24c941 and 73b0b9d.

⛔ Files ignored due to path filters (190)
  • app/config/specs/open-api3-1.7.x-client.json is excluded by !app/config/specs/**
  • app/config/specs/open-api3-1.7.x-console.json is excluded by !app/config/specs/**
  • app/config/specs/open-api3-1.7.x-server.json is excluded by !app/config/specs/**
  • app/config/specs/open-api3-1.8.x-client.json is excluded by !app/config/specs/**
  • app/config/specs/open-api3-1.8.x-console.json is excluded by !app/config/specs/**
  • app/config/specs/open-api3-1.8.x-server.json is excluded by !app/config/specs/**
  • app/config/specs/open-api3-latest-client.json is excluded by !app/config/specs/**
  • app/config/specs/open-api3-latest-console.json is excluded by !app/config/specs/**
  • app/config/specs/open-api3-latest-server.json is excluded by !app/config/specs/**
  • app/config/specs/swagger2-1.7.x-client.json is excluded by !app/config/specs/**
  • app/config/specs/swagger2-1.7.x-console.json is excluded by !app/config/specs/**
  • app/config/specs/swagger2-1.7.x-server.json is excluded by !app/config/specs/**
  • app/config/specs/swagger2-1.8.x-client.json is excluded by !app/config/specs/**
  • app/config/specs/swagger2-1.8.x-console.json is excluded by !app/config/specs/**
  • app/config/specs/swagger2-1.8.x-server.json is excluded by !app/config/specs/**
  • app/config/specs/swagger2-latest-client.json is excluded by !app/config/specs/**
  • app/config/specs/swagger2-latest-console.json is excluded by !app/config/specs/**
  • app/config/specs/swagger2-latest-server.json is excluded by !app/config/specs/**
  • composer.lock is excluded by !**/*.lock
  • docs/examples/1.7.x/console-cli/examples/proxy/create-redirect-rule.md is excluded by !docs/examples/**
  • docs/examples/1.7.x/console-cli/examples/vcs/get-repository-contents.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/create-anonymous-session.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/create-email-password-session.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/create-email-token.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/create-j-w-t.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/create-magic-u-r-l-token.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/create-mfa-authenticator.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/create-mfa-challenge.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/create-mfa-recovery-codes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/create-o-auth2session.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/create-o-auth2token.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/create-phone-token.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/create-phone-verification.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/create-push-target.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/create-recovery.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/create-session.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/create-verification.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/create.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/delete-identity.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/delete-mfa-authenticator.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/delete-push-target.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/delete-session.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/delete-sessions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/get-mfa-recovery-codes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/get-prefs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/get-session.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/get.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/list-identities.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/list-mfa-factors.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/list-sessions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/update-email.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/update-m-f-a.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/update-magic-u-r-l-session.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/update-mfa-authenticator.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/update-mfa-challenge.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/update-mfa-recovery-codes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/update-name.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/update-password.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/update-phone-session.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/update-phone-verification.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/update-phone.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/update-prefs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/update-push-target.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/update-recovery.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/update-session.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/update-status.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/account/update-verification.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/avatars/get-browser.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/avatars/get-credit-card.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/avatars/get-favicon.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/avatars/get-flag.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/avatars/get-image.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/avatars/get-initials.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/avatars/get-q-r.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/databases/create-document.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/databases/create-documents.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/databases/delete-document.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/databases/get-document.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/databases/list-documents.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/databases/update-document.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/databases/upsert-document.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/functions/create-execution.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/functions/get-execution.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/functions/list-executions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/graphql/mutation.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/graphql/query.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/locale/get.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/locale/list-codes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/locale/list-continents.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/locale/list-countries-e-u.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/locale/list-countries-phones.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/locale/list-countries.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/locale/list-currencies.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/locale/list-languages.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/messaging/create-subscriber.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/messaging/delete-subscriber.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/storage/create-file.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/storage/delete-file.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/storage/get-file-download.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/storage/get-file-preview.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/storage/get-file-view.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/storage/get-file.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/storage/list-files.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/storage/update-file.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/tables/create-row.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/tables/create-rows.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/tables/delete-row.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/tables/get-row.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/tables/list-rows.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/tables/update-row.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/tables/upsert-row.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/teams/create-membership.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/teams/create.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/teams/delete-membership.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/teams/delete.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/teams/get-membership.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/teams/get-prefs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/teams/get.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/teams/list-memberships.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/teams/list.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/teams/update-membership-status.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/teams/update-membership.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/teams/update-name.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/java/teams/update-prefs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/create-anonymous-session.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/create-email-password-session.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/create-email-token.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/create-j-w-t.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/create-magic-u-r-l-token.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/create-mfa-authenticator.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/create-mfa-challenge.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/create-mfa-recovery-codes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/create-o-auth2session.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/create-o-auth2token.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/create-phone-token.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/create-phone-verification.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/create-push-target.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/create-recovery.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/create-session.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/create-verification.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/create.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/delete-identity.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/delete-mfa-authenticator.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/delete-push-target.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/delete-session.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/delete-sessions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/get-mfa-recovery-codes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/get-prefs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/get-session.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/get.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/list-identities.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/list-logs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/list-mfa-factors.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/list-sessions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/update-email.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/update-m-f-a.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/update-magic-u-r-l-session.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/update-mfa-authenticator.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/update-mfa-challenge.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/update-mfa-recovery-codes.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/update-name.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/update-password.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/update-phone-session.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/update-phone-verification.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/update-phone.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/update-prefs.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/update-push-target.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/update-recovery.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/update-session.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/update-status.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/account/update-verification.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin A3DB /avatars/get-browser.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/avatars/get-credit-card.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/avatars/get-favicon.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/avatars/get-flag.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/avatars/get-image.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/avatars/get-initials.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/avatars/get-q-r.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/databases/create-document.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/databases/create-documents.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/databases/delete-document.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/databases/get-document.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/databases/list-documents.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/databases/update-document.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/databases/upsert-document.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/functions/create-execution.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/functions/get-execution.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/functions/list-executions.md is excluded by !docs/examples/**
  • docs/examples/1.8.x/client-android/kotlin/graphql/mutation.md is excluded by !docs/examples/**
📒 Files selected for processing (107)
  • .github/workflows/benchmark.yml (1 hunks)
  • app/config/locale/templates/email-inner-base.tpl (1 hunks)
  • app/config/locale/translations/af.json (2 hunks)
  • app/config/locale/translations/ar-ma.json (2 hunks)
  • app/config/locale/translations/ar.json (2 hunks)
  • app/config/locale/translations/as.json (2 hunks)
  • app/config/locale/translations/az.json (2 hunks)
  • app/config/locale/translations/be.json (2 hunks)
  • app/config/locale/translations/bh.json (2 hunks)
  • app/config/locale/translations/bn.json (2 hunks)
  • app/config/locale/translations/ca.json (2 hunks)
  • app/config/locale/translations/da.json (2 hunks)
  • app/config/locale/translations/de.json (2 hunks)
  • app/config/locale/translations/el.json (2 hunks)
  • app/config/locale/translations/en.json (2 hunks)
  • app/config/locale/translations/eo.json (2 hunks)
  • app/config/locale/translations/es.json (2 hunks)
  • app/config/locale/translations/fa.json (2 hunks)
  • app/config/locale/translations/fr.json (2 hunks)
  • app/config/locale/translations/ga.json (2 hunks)
  • app/config/locale/translations/gu.json (2 hunks)
  • app/config/locale/translations/he.json (2 hunks)
  • app/config/locale/translations/hi.json (2 hunks)
  • app/config/locale/translations/hr.json (2 hunks)
  • app/config/locale/translations/hu.json (2 hunks)
  • app/config/locale/translations/id.json (2 hunks)
  • app/config/locale/translations/it.json (2 hunks)
  • app/config/locale/translations/ja.json (2 hunks)
  • app/config/locale/translations/jv.json (2 hunks)
  • app/config/locale/translations/kn.json (2 hunks)
  • app/config/locale/translations/ko.json (2 hunks)
  • app/config/locale/translations/la.json (2 hunks)
  • app/config/locale/translations/lb.json (2 hunks)
  • app/config/locale/translations/lt.json (2 hunks)
  • app/config/locale/translations/lv.json (2 hunks)
  • app/config/locale/translations/ml.json (2 hunks)
  • app/config/locale/translations/mr.json (2 hunks)
  • app/config/locale/translations/ms.json (2 hunks)
  • app/config/locale/translations/nb.json (2 hunks)
  • app/config/locale/translations/ne.json (2 hunks)
  • app/config/locale/translations/nl.json (2 hunks)
  • app/config/locale/translations/nn.json (2 hunks)
  • app/config/locale/translations/or.json (2 hunks)
  • app/config/locale/translations/pl.json (2 hunks)
  • app/config/locale/translations/pt-br.json (2 hunks)
  • app/config/locale/translations/pt-pt.json (2 hunks)
  • app/config/locale/translations/ro.json (2 hunks)
  • app/config/locale/translations/ru.json (2 hunks)
  • app/config/locale/translations/sa.json (2 hunks)
  • app/config/locale/translations/sd.json (2 hunks)
  • app/config/locale/translations/si.json (2 hunks)
  • app/config/locale/translations/sk.json (2 hunks)
  • app/config/locale/translations/sn.json (2 hunks)
  • app/config/locale/translations/sv.json (2 hunks)
  • app/config/locale/translations/ta.json (2 hunks)
  • app/config/locale/translations/te.json (2 hunks)
  • app/config/locale/translations/th.json (2 hunks)
  • app/config/locale/translations/tl.json (2 hunks)
  • app/config/locale/translations/tr.json (2 hunks)
  • app/config/locale/translations/uk.json (2 hunks)
  • app/config/locale/translations/ur.json (2 hunks)
  • app/config/locale/translations/vi.json (2 hunks)
  • app/config/locale/translations/zh-cn.json (2 hunks)
  • app/config/locale/translations/zh-tw.json (2 hunks)
  • app/config/platforms.php (2 hunks)
  • app/controllers/api/account.php (2 hunks)
  • app/controllers/api/projects.php (1 hunks)
  • app/controllers/api/storage.php (6 hunks)
  • app/controllers/api/teams.php (1 hunks)
  • app/controllers/api/users.php (1 hunks)
  • app/controllers/general.php (14 hunks)
  • app/controllers/shared/api.php (5 hunks)
  • app/init/registers.php (1 hunks)
  • app/init/resources.php (1 hunks)
  • app/views/install/compose.phtml (1 hunks)
  • app/worker.php (1 hunks)
  • bin/doctor (1 hunks)
  • bin/install (1 hunks)
  • bin/maintenance (1 hunks)
  • bin/migrate (1 hunks)
  • bin/queue-count-failed (1 hunks)
  • bin/queue-count-processing (1 hunks)
  • bin/queue-count-success (1 hunks)
  • bin/queue-retry (1 hunks)
  • bin/realtime (1 hunks)
  • bin/schedule-executions (1 hunks)
  • bin/schedule-functions (1 hunks)
  • bin/schedule-messages (1 hunks)
  • bin/screenshot (1 hunks)
  • bin/sdks (1 hunks)
  • bin/specs (1 hunks)
  • bin/ssl (1 hunks)
  • bin/stats-resources (1 hunks)
  • bin/test (1 hunks)
  • bin/upgrade (1 hunks)
  • bin/vars (1 hunks)
  • bin/worker-audits (1 hunks)
  • bin/worker-builds (1 hunks)
  • bin/worker-certificates (1 hunks)
  • bin/worker-databases (1 hunks)
  • bin/worker-deletes (1 hunks)
  • bin/worker-functions (1 hunks)
  • bin/worker-mails (1 hunks)
  • bin/worker-messaging (1 hunks)
  • bin/worker-migrations (1 hunks)
  • bin/worker-stats-resources (1 hunks)
  • bin/worker-stats-usage (1 hunks)
⛔ Files not processed due to max files limit (3)
  • bin/worker-webhooks
  • composer.json
  • docker-compose.yml
🧰 Additional context used
🧠 Learnings (2)
app/controllers/shared/api.php (1)
Learnt from: ItzNotABug
PR: appwrite/appwrite#9693
File: src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Delete.php:88-95
Timestamp: 2025-05-09T04:06:04.338Z
Learning: It's acceptable to use DATABASE_TYPE_DELETE_COLLECTION event type for both collections and tables because workers process these events based on whether setCollection() or setTable() was called, not on the event type itself.
app/controllers/general.php (2)
Learnt from: abnegate
PR: appwrite/appwrite#9743
File: src/Appwrite/Utopia/Request.php:0-0
Timestamp: 2025-05-12T06:07:51.470Z
Learning: In Appwrite's request handling architecture, the Request::getParams() method selects which SDK method to use based on parameter matching, but does not validate required parameters. The action execution flow handles parameter validation separately. This separation of concerns allows for more flexible handling of multi-method routes.
Learnt from: abnegate
PR: appwrite/appwrite#9743
File: src/Appwrite/Utopia/Request.php:33-36
Timestamp: 2025-05-12T06:05:27.133Z
Learning: In Appwrite's architecture, the Request class should only filter parameters when filters are explicitly registered. If no filters are present, all parameters should be passed through, and the route action is responsible for validating which parameters are present/valid.
🧬 Code Graph Analysis (5)
app/controllers/api/users.php (1)
src/Appwrite/Extend/Exception.php (1)
  • Exception (7-442)
app/controllers/api/teams.php (1)
src/Appwrite/Event/Event.php (1)
  • setParam (282-287)
app/controllers/shared/api.php (1)
src/Appwrite/Event/Database.php (3)
  • getDatabase (69-72)
  • getCollection (137-140)
  • getDocument (159-162)
app/controllers/api/projects.php (1)
src/Appwrite/Event/Event.php (1)
  • setParam (282-287)
app/controllers/api/account.php (1)
src/Appwrite/Event/Event.php (1)
  • setParam (282-287)
🪛 phpcs (3.7.2)
app/controllers/shared/api.php

[ERROR] 801-801: Opening parenthesis of a multi-line function call must be the last content on the line

(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)


[ERROR] 801-801: Opening parenthesis of a multi-line function call must be the last content on the line

(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)


[ERROR] 806-806: Closing parenthesis of a multi-line function call must be on a line by itself

(PEAR.Functions.FunctionCallSignature.CloseBracketLine)


[ERROR] 806-806: Closing parenthesis of a multi-line function call must be on a line by itself

(PEAR.Functions.FunctionCallSignature.CloseBracketLine)

app/worker.php

[ERROR] 485-485: Opening parenthesis of a multi-line function call must be the last content on the line

(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)

app/controllers/api/storage.php

[ERROR] 964-964: Opening parenthesis of a multi-line function call must be the last content on the line

(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)

app/init/resources.php

[ERROR] 949-949: Opening parenthesis of a multi-line function call must be the last content on the line

(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)


[ERROR] 952-952: Closing parenthesis of a multi-line function call must be on a line by itself

(PEAR.Functions.FunctionCallSignature.CloseBracketLine)


[ERROR] 954-954: Opening parenthesis of a multi-line function call must be the last content on the line

(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)


[ERROR] 978-978: Opening parenthesis of a multi-line function call must be the last content on the line

(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)


[ERROR] 981-981: Closing parenthesis of a multi-line function call must be on a line by itself

(PEAR.Functions.FunctionCallSignature.CloseBracketLine)


[ERROR] 996-996: Closing parenthesis of a multi-line function call must be on a line by itself

(PEAR.Functions.FunctionCallSignature.CloseBracketLine)

app/controllers/general.php

[ERROR] 59-59: Missing doc comment for function router()

(PEAR.Commenting.FunctionComment.Missing)


[ERROR] 814-814: Opening parenthesis of a multi-line function call must be the last content on the line

(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)


[ERROR] 1065-1065: Opening parenthesis of a multi-line function call must be the last content on the line

(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)


[ERROR] 1380-1380: Opening parenthesis of a multi-line function call must be the last content on the line

(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)


[ERROR] 1413-1413: Opening parenthesis of a multi-line function call must be the last content on the line

(PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket)

🪛 PHPMD (2.15.0)
app/controllers/general.php

59-764: The function router() has a Cyclomatic Complexity of 126. The configured cyclomatic complexity threshold is 10. (Code Size Rules)

(CyclomaticComplexity)


59-764: The function router() has an NPath complexity of 9223372036854775807. The configured NPath complexity threshold is 200. (Code Size Rules)

(NPathComplexity)


59-764: The function router() has 706 lines of code. Current threshold is set to 100. Avoid really long methods. (Code Size Rules)

(ExcessiveMethodLength)


59-764: The function router has 15 parameters. Consider reducing the number of parameters to less than 10. (Code Size Rules)

(ExcessiveParameterList)

⏰ Context from checks skipped due to timeout of 90000ms (4)
  • GitHub Check: Setup & Build Appwrite Image
  • GitHub Check: Setup & Build Appwrite Image
  • GitHub Check: Setup & Build SDK
  • GitHub Check: scan
🔇 Additional comments (105)
bin/worker-mails (1)

3-3: Approved: Process hierarchy improvement

Removing exec allows the shell process to remain active while the PHP worker runs as a child process. This change improves process management and aligns with standard shell script practices while preserving the same functionality and exit code behavior.

bin/queue-count-success (1)

3-3: Approved: Consistent with standardization effort

The removal of exec is consistent with the broader standardization across shell scripts. The queue counting functionality remains unchanged while improving process management.

bin/worker-functions (1)

3-3: Approved: Worker script consistency maintained

The modification aligns with the systematic refactoring of worker scripts. Function worker capabilities remain intact while adopting the standardized process execution pattern.

bin/schedule-functions (1)

3-3: Approved: Scheduler wrapper standardization

The change maintains function scheduling capabilities while adopting the standardized approach to process execution. The CLI functionality and argument handling remain unchanged.

bin/queue-count-processing (2)

3-3: Approved: Queue monitoring standardization complete

The final script in the standardization effort maintains queue counting functionality while adopting the improved process execution pattern. All shell script wrappers now follow a consistent architectural approach.


1-3: Request clarification on PR scope vs. title

While these shell script standardizations are technically sound and beneficial, the PR title indicates "Update documentation" but these changes are to executable scripts rather than documentation. Could you clarify if this PR has expanded beyond its original documentation scope, or if the title needs updating to reflect the actual changes?

bin/worker-deletes (1)

3-3: Confirm signal and shutdown behavior after removing exec

We searched for other worker scripts and process-management documentation—none reference exec or signal handling. Without exec, PHP now runs as a child of the shell, which can alter:

  • Signal propagation (SIGTERM/SIGINT may not reach PHP as before)
  • Container/service shutdown (potential orphaned shell or PHP processes)
  • Monitoring/supervisor expectations (they may track the wrong PID)

Please verify that:

  • Stopping the container or service cleanly kills the PHP process
  • Your deployment or supervisor tooling handles this change correctly
  • No orphaned processes, logging gaps, or metric regressions occur

• Location: bin/worker-deletes, line 3

bin/queue-count-failed (1)

3-3: Consistent with worker script changes but verify process handling.

This change aligns with the systematic removal of exec from other shell scripts. For utility scripts like queue counting, the impact is less critical than for long-running workers, but the process management behavior still changes.

.github/workflows/benchmark.yml (1)

67-67: Good addition for installation verification.

Adding version verification immediately after installing the benchmarking tool is a best practice that will help with debugging if the tool installation fails or the benchmark step encounters issues.

bin/test (1)

3-3: Test script change has minimal impact.

Removing exec from the test runner script is the least critical of these changes. Test execution and exit codes should work the same, though there could be minor implications for CI/CD pipelines that depend on specific process behavior.

bin/worker-migrations (1)

3-3: Shell process behavior change looks good, but question PR scope alignment.

The removal of exec is technically sound as it allows better signal handling and maintains the shell process for potential cleanup. However, this change seems unrelated to the stated PR objective of "Update documentation" - these are executable scripts, not documentation files.

Likely an incorrect or invalid review comment.

bin/worker-databases (1)

3-3: Consistent process handling improvement.

Same beneficial change as the previous script - removing exec allows the shell to remain active for better process management.

bin/stats-resources (1)

3-3: Good standardization of shell script behavior.

The consistent removal of exec across CLI and worker scripts creates uniform process handling behavior.

bin/vars (1)

3-3: LGTM - consistent with the standardization effort.

bin/ssl (1)

3-3: Approve: exec removal poses no configuration risks

I searched YAML, JSON, Docker, and other common config files for any references to the bin/ssl (and related) scripts and found none. The only file mentioning “process” is docker-compose.yml, but it does not invoke these scripts. You can safely proceed with the exec removal.

bin/maintenance (1)

3-3: Inconsistency: PR describes documentation update but shows code changes.

The PR objectives indicate this is a documentation update, but the provided files show shell script modifications. The removal of exec changes process execution behavior - the shell script now remains as a parent process instead of being replaced by the PHP process.

Consider the implications of this change:

  • Different signal handling behavior
  • Parent shell process remains in memory
  • Potential impact on process monitoring tools
#!/bin/bash
# Verify if this change is consistent across other CLI scripts
fd -t f -e '' '^bin' | head -20 | xargs grep -l 'php.*cli\.php'

Likely an incorrect or invalid review comment.

bin/schedule-executions (1)

3-3: Consistent with broader script standardization.

The removal of exec aligns with the pattern described in the AI summary across multiple CLI scripts. This standardizes process execution behavior but changes how the scripts handle process lifecycle.

bin/queue-retry (1)

3-3: Process execution standardization maintained.

Consistent with the pattern of removing exec across CLI scripts. The queue retry functionality will now run with the shell script as a parent process.

bin/sdks (1)

3-3: SDK generation script is consistent; manual CI/CD verification required

No references to bin/sdks were found in common CI/CD configuration files. Please manually confirm that any pipelines, scheduled jobs, or external automation invoking this script are updated to match its new execution model.

bin/schedule-messages (1)

3-3: Completes the CLI script standardization.

This final change maintains the consistent pattern of removing exec from CLI scripts. The message scheduling functionality will now run with proper parent-child process relationship.

bin/specs (1)

3-3: Add exit code propagation to handle PHP process termination properly.

Removing exec means the shell process no longer gets replaced by the PHP process, but the script doesn't handle exit code propagation. This could cause the shell script to always return 0 regardless of the PHP process outcome.

Apply this fix to properly handle exit codes:

-php /usr/src/code/app/cli.php specs $@
+php /usr/src/code/app/cli.php specs $@
+exit $?

Likely an incorrect or invalid review comment.

bin/worker-stats-usage (1)

3-3: Add exit code propagation to handle PHP process termination properly.

Removing exec means the shell process no longer gets replaced by the PHP process, but the script doesn't handle exit code propagation. This could cause the shell script to always return 0 regardless of the PHP process outcome.

Apply this fix to properly handle exit codes:

-php /usr/src/code/app/worker.php stats-usage $@
+php /usr/src/code/app/worker.php stats-usage $@
+exit $?

Likely an incorrect or invalid review comment.

bin/install (1)

3-3: Add exit code propagation to handle PHP process termination properly.

Removing exec means the shell process no longer gets replaced by the PHP process, but the script doesn't handle exit code propagation. This could cause the shell script to always return 0 regardless of the PHP process outcome.

Apply this fix to properly handle exit codes:

-php /usr/src/code/app/cli.php install $@
+php /usr/src/code/app/cli.php install $@
+exit $?

Likely an incorrect or invalid review comment.

bin/migrate (1)

3-3: Ensure all PHP‐invoking shell scripts propagate the PHP exit status

Removing exec without propagating the exit code means failures in the PHP process will be hidden and the script will always return 0. We need to add an explicit exit $? after each PHP invocation in our project’s bin/ scripts.

• Affected files in bin/:

  • doctor
  • install
  • maintenance
  • migrate
  • queue-count-failed
  • queue-count-processing
  • queue-count-success
  • queue-retry
  • realtime
  • schedule-executions
  • schedule-functions
  • schedule-messages
  • screenshot
  • sdks
  • specs
  • ssl
  • stats-resources
  • test
  • upgrade
  • vars
  • worker-audits
  • worker-builds
  • worker-certificates
  • worker-databases
  • worker-deletes
  • worker-functions
  • worker-mails
  • worker-messaging
  • worker-migrations
  • worker-stats-resources
  • worker-stats-usage
  • worker-webhooks

Example fix (shown for bin/migrate):

- php /usr/src/code/app/cli.php migrate "$@"
+ php /usr/src/code/app/cli.php migrate "$@"
+ exit $?

Please apply the same pattern—either use exec php … or append exit $?—to each of the above scripts so that any PHP failure correctly bubbles up.

Likely an incorrect or invalid review comment.

bin/worker-builds (1)

3-3: Confirm process supervision behavior after removing exec

We ran a repository-wide search and did not find any YAML/JSON configs or Dockerfiles referencing bin/worker-builds, and the only documentation hit was in CONTRIBUTING.md. Since process supervision (e.g. systemd, supervisord, Kubernetes, Docker entrypoint) might be managed outside this repo, please verify that dropping exec won’t affect signal handling or orphaned shells in your deployment environment.

• Review how bin/worker-builds is invoked in production (Docker ENTRYPOINT, systemd unit, k8s manifest, etc.)
• Ensure that without exec, the parent shell does not interfere with signals (SIGTERM/SIGINT) or exit codes
• If you rely on replacing the shell process, consider restoring exec or adjusting your supervisor config

Diff for clarity:

- exec php /usr/src/code/app/worker.php builds "$@"
  php  /usr/src/code/app/worker.php builds "$@"
bin/upgrade (1)

3-3: Consistent removal of exec across all CLI wrappers

  • All bin/ scripts now invoke php directly (no instances of exec php remain).
  • This change is uniform across every CLI shim, so process-replacement behavior has been altered everywhere.

Please confirm that replacing exec php with a plain php invocation—thereby keeping the shell as the parent process—matches your signal-handling, exit-code propagation, and deployment requirements.

app/config/platforms.php (1)

137-137: SDK version updates look appropriate.

The version bumps for React Native (0.9.1 → 0.10.0) and CLI (8.0.0 → 8.1.0) align with the broader improvements in this PR, including enhanced email templates and localization features.

Also applies to: 220-220

app/config/locale/translations/ja.json (1)

11-11: Japanese translations for email button text are accurate and well-integrated.

The new button text translations are linguistically appropriate:

  • Verifica F438 tion: "メールアドレスを確認する" (Verify email address)
  • Recovery: "パスワードをリセット" (Reset password)
  • Invitation: "{{team}}への招待を承諾する" (Accept invitation to {{team}})

The template variable {{team}} is correctly preserved, and these additions align well with the email template enhancements described in the PR.

Also applies to: 24-24, 31-31

app/config/locale/translations/en.json (1)

11-11: LGTM! Well-structured email button text additions.

The new translation keys follow consistent naming patterns and provide clear, actionable button labels. The use of the dynamic {{team}} placeholder in the invitation button text is appropriate and consistent with other template variables in the file.

Also applies to: 49-49, 56-56

app/init/registers.php (1)

39-40: LGTM! Improved separation of testing domains.

Splitting the single domain into separate SMS and webhook-specific domains improves testing organization and follows good separation of concerns. The change maintains the same security posture by only affecting non-production environments.

app/views/install/compose.phtml (1)

867-867: Approve: Bump executor image to v0.7.22 with static runtime support

The update from 0.7.20 → 0.7.22 is a low-risk, isolated maintenance change that introduces a new static runtime feature and has no documented breaking changes.

  • Image updated to openruntimes/executor:0.7.22
  • New Feature: static runtime support
  • No backward-incompatible changes noted
app/controllers/api/teams.php (1)

663-671: {{buttonText}} parameter wired correctly for localized CTA label
The added setParam('{{buttonText}}', $locale->getText('emails.invitation.buttonText')) brings the team-invitation flow in line with the new button-style email template. No issues spotted—default HTML escaping remains enabled, which is desirable here.

app/controllers/api/projects.php (1)

2278-2278: LGTM! Properly integrates localized button text.

The addition of the {{buttonText}} parameter follows the established pattern for template parameterization and correctly retrieves the localized string using the locale object. This change aligns well with the coordinated update to support styled buttons in email templates.

app/config/locale/templates/email-inner-base.tpl (1)

3-3: LGTM! Enhanced UX with proper button styling for email templates.

The replacement of the plain URL link with a styled button significantly improves the user experience. The inline CSS approach is appropriate for email templates since external stylesheets are often blocked by email clients. The styling choices (background color, border radius, padding) follow modern email design patterns.

Consider testing the button rendering across major email clients (Gmail, Outlook, Apple Mail) to ensure consistent appearance, as CSS support can vary between clients.

app/config/locale/translations/tl.json (1)

11-11: LGTM! Proper localization for email button text.

The three new translation keys for verification, recovery, and invitation email button text are appropriately translated to Tagalog and follow the established naming convention. The translations are contextually appropriate:

  • Verification: "Kumpirmahin ang email address"
  • Recovery: "I-reset ang password"
  • Invitation: "Tanggapin ang paanyaya sa {{team}}"

These additions properly support the coordinated email template enhancement across the application.

Also applies to: 24-24, 31-31

app/config/locale/translations/pt-br.json (1)

11-31: New translation keys correctly added and follow existing placeholder conventions

emails.verification.buttonText, emails.recovery.buttonText, and emails.invitation.buttonText are inserted with valid Brazilian-Portuguese copy and the expected {{team}} placeholder. JSON syntax (trailing commas) is intact and ordering within the e-mail-related block remains coherent.

No further action required.

app/config/locale/translations/lt.json (1)

11-31: Lithuanian button-text keys look good

The three new keys are present with accurate Lithuanian phrasing and proper {{team}} placeholder usage. JSON formatting is correct and aligns with surrounding entries.

Looks good to merge.

app/controllers/api/account.php (2)

3226-3234: buttonText template variable correctly injected

The additional setParam('{{buttonText}}', …) makes the recovery email compatible with the new button-based template. No functional issues spotted here.


3482-3490: Mirror change for verification email looks good

Consistent injection of the buttonText placeholder for the verification template. 👍

app/config/locale/translations/kn.json (2)

11-11: Button-label key added correctly – no issues.
Translation conveys the intended action clearly and uses proper terminology.


31-31: Invitation button text looks good.
Placeholder {{team}} preserved and grammar is natural.

app/config/locale/translations/af.json (2)

11-11: Verification button text added correctly.
Clear Afrikaans phrasing; placeholder-free string as expected.


24-24: Recovery button text reads well – no action needed.
Translation matches terminology used elsewhere (“wagwoord terugstel”).

app/controllers/api/users.php (1)

652-654: LGTM! Enhanced error handling for database queries.

The addition of QueryException handling complements the existing OrderException catch block and provides comprehensive error handling for database query issues during user retrieval and count operations. The implementation correctly rethrows the exception with the appropriate GENERAL_QUERY_INVALID error type while preserving the original error message.

app/config/locale/translations/it.json (3)

11-11: LGTM! Accurate Italian translation for email verification button.

The translation "Confermare l'indirizzo email" is correct Italian for the email verification button text and maintains consistency with the existing translation style.


24-24: LGTM! Appropriate Italian translation for password recovery button.

The translation "Reimposta password" is accurate Italian for the password recovery button text and aligns well with the existing recovery email context.


31-31: LGTM! Well-localized Italian translation for team invitation button.

The translation "Accetta invito a {{team}}" correctly preserves the template variable {{team}} and provides an accurate Italian translation for the team invitation button text.

app/config/locale/translations/ar.json (1)

11-11: LGTM – placeholders intact and wording reads naturally

No further action needed.

Also applies to: 24-24, 31-31

app/config/locale/translations/be.json (1)

11-11: LGTM – keys added with correct Belarusian phrasing and placeholder

All three entries match the new template requirements.

Also applies to: 24-24, 31-31

app/config/locale/translations/nl.json (1)

11-11: LGTM – Dutch translations and {{team}} placeholder look good

Nothing to change here.

Also applies to: 24-24, 31-31

app/controllers/shared/api.php (4)

25-25: LGTM: Console import added for logging functionality.

The import is correctly added and will be used for database event logging later in the file.


567-567: Cache TTL increased with clear documentation.

The comment explains the temporary increase to 180 days to ensure cached files remain accessible during the transition period.


834-836: Good optimization: Cache instance reuse.

Creating a single Cache instance for reuse in the cache saving logic is an efficient approach that avoids unnecessary object creation.


855-856: Cache file overwrite logic with clear explanation.

The comment effectively explains why the cache file is overwritten - to update modification times for TTL checks. This ensures proper cache expiration behavior.

app/config/locale/translations/sk.json (1)

11-11: LGTM: Slovak email button text localization added.

The three new translation keys for email verification, password recovery, and team invitation buttons are properly localized and follow the established naming convention. These support the enhanced email template button functionality.

Also applies to: 24-24, 31-31

app/config/locale/translations/sv.json (1)

11-11: LGTM: Swedish email button text localization added.

The translation keys are properly localized for Swedish and maintain consistency with the standardized email button text system being implemented across all locales.

Also applies to: 24-24, 31-31

app/config/locale/translations/vi.json (1)

11-11: LGTM: Vietnamese email button text localization added.

The Vietnamese translations are properly implemented and consistent with the standardized approach for email button text across all locale files.

Also applies to: 24-24, 31-31

app/config/locale/translations/bh.json (1)

11-11: LGTM: Bhojpuri email button text localization added.

The Bhojpuri translations in Devanagari script are properly implemented and complete the consistent localization effort for email button text across all supported languages.

Also applies to: 24-24, 31-31

app/config/locale/translations/da.json (1)

11-11: Translations & placeholders look correct – LGTM

The newly-added Danish button labels are clear and keep the {{ }} placeholders intact.
No issues spotted.

Also applies to: 24-24, 31-31

app/config/locale/translations/hi.json (1)

11-11: Hindi button-text strings read well

All three additions use natural imperative tone and preserve the template placeholders. Looks good.

Also applies to: 24-24, 31-31

app/config/locale/translations/es.json (1)

11-11: Spanish entries are sound

Correct use of verbs in imperative form and placeholder retention. No action needed.

Also applies to: 24-24, 31-31

app/config/locale/translations/mr.json (1)

11-11: Marathi translations verified

Word choice is appropriate and placeholders remain untouched. Good to merge.

Also applies to: 24-24, 31-31

app/config/locale/translations/or.json (1)

11-11: Button-text keys look good.

All three new keys follow the expected naming pattern and preserve the required {{team}} placeholder without translation – nice!

Also applies to: 24-24, 31-31

app/config/locale/translations/fr.json (1)

11-11: Translation keys added correctly.

Placeholders are intact ({{team}}) and the French phrasing is consistent with existing strings.

Also applies to: 24-24, 31-31

app/config/locale/translations/ga.json (1)

11-11: Irish button-text keys look great.

Placeholders are preserved, diacritics are correct, and wording aligns with the earlier strings.

Also applies to: 24-24, 31-31

app/config/locale/translations/zh-cn.json (1)

11-11: Chinese button texts added successfully.

Strings are concise, placeholders untouched, and punctuation follows existing style guidelines.

Also applies to: 24-24, 31-31

app/config/locale/translations/th.json (1)

11-11: New buttonText keys look good

Strings are accurate, placeholders remain intact, and style aligns with existing Thai translations.

Also applies to: 24-24, 31-31

app/config/locale/translations/ml.json (1)

11-11: Malayalam button-label additions are consistent

All three keys are localised correctly, preserve the {{team}} placeholder, and match the tone of the surrounding strings.

Also applies to: 24-24, 31-31

app/config/locale/translations/de.json (1)

11-11: German additions are accurate

Wording is idiomatic, placeholders correct, and umlauts/ß are handled properly.

Also applies to: 24-24, 31-31

app/config/locale/translations/ta.json (1)

11-11: Button-text translations look good

All three new keys follow existing naming conventions, keep handlebars intact ({{team}}), and the Tamil wording is concise. No issues found.

Also applies to: 24-24, 31-31

app/config/locale/translations/fa.json (1)

11-11: Translations & placeholders are consistent

The Persian strings read naturally and preserve the required {{team}} placeholder. Implementation aligns with other locales. ✅

Also applies to: 24-24, 31-31

app/config/locale/translations/pt-pt.json (1)

11-11: PT-PT entries validated

Strings are clear, capitalization matches surrounding keys and the {{team}} token is untouched. Ready to merge.

Also applies to: 24-24, 31-31

app/config/locale/translations/sd.json (1)

11-11: Sindhi additions verified

New button captions are well-formed and include the correct {{team}} variable. No further action required.

Also applies to: 24-24, 31-31

app/config/locale/translations/pl.json (1)

11-11: PL strings pass review

Polish translations retain placeholders and mirror style of existing entries. Looks good.

Also applies to: 24-24, 31-31

app/config/locale/translations/tr.json (1)

11-11: Button-text keys correctly added for TR locale
Placeholders & punctuation look good, no issues found.

Also applies to: 24-24, 31-31

app/config/locale/translations/ar-ma.json (1)

11-11: AR-MA button-text additions look good
Placeholders are intact and wording aligns with existing style.

Also applies to: 24-24, 31-31

app/config/locale/translations/nb.json (1)

11-11: NO locale keys added correctly
Translations read naturally and placeholders are valid.

Also applies to: 24-24, 31-31

app/config/locale/translations/uk.json (1)

11-11: UA locale button texts OK
No formatting or placeholder issues detected.

Also applies to: 24-24, 31-31

app/config/locale/translations/id.json (1)

11-11: Localized button texts added correctly

Strings read naturally, placeholders ({{team}}) are preserved, and JSON syntax remains valid.
LGTM.

Also applies to: 24-24, 31-31

app/config/locale/translations/as.json (1)

11-11: Assamese button labels look good

Accurate phrasing, consistent style, and placeholders intact.
No further action needed.

Also applies to: 24-24, 31-31

app/config/locale/translations/nn.json (1)

11-11: Norwegian Nynorsk additions verified

Terminology matches existing vocabulary; placeholders are correct.
All good.

Also applies to: 24-24, 31-31

app/config/locale/translations/ru.json (1)

11-11: Russian translations are accurate

Wording is appropriate, grammar correct, and {{team}} placeholder maintained.
Looks solid.

Also applies to: 24-24, 31-31

app/config/locale/translations/bn.json (1)

11-11: Bengali button text additions approved

Phrasing aligns with existing tone, placeholders unaffected, JSON still valid.
No issues found.

Also applies to: 24-24, 31-31

app/config/locale/translations/gu.json (1)

11-11: New button-text keys look correct and consistent.

The Gujarati CTA labels are accurate and follow the project’s placeholder and punctuation conventions.

Also applies to: 24-24, 31-31

app/config/locale/translations/zh-tw.json (1)

11-11: CTA 文字翻譯無誤,格式一致。

三條新增 key 的用語、括號佔位符與標點皆符合其他 zh-tw 條目。

Also applies to: 24-24, 31-31

app/config/locale/translations/ro.json (1)

11-11: 👍 Traducerile butoanelor sunt corecte.

Formulările respectă diacriticele și stilul restului fișierului.

Also applies to: 24-24, 31-31

app/config/locale/translations/ur.json (3)

11-11: Localized verification button label looks good
No issues spotted with the key name or value.


24-24: Localized recovery button label looks good
String is clear and follows the style of neighbouring entries.


31-32: Signature placeholder fix is correct
The missing closing braces bug on emails.invitation.signature is now resolved – good catch.

app/config/locale/translations/sa.json (1)

31-31: Invitation button text is fine
Uses the correct Sanskrit imperative “स्वीकुरुत”.

app/config/locale/translations/ca.json (1)

24-24: Recovery button label looks good
Translation is idiomatic Catalan.

app/config/locale/translations/lb.json (2)

24-24: Recovery button label looks good
Clear, idiomatic Luxembourgish.


31-31: Invitation button label looks good
Consistent with neighbouring translations.

app/config/locale/translations/az.json (1)

11-11: Translation keys added correctly – placeholders preserved

  • New keys follow existing naming conventions.
  • Placeholder {{team}} is intact and untranslated.
  • No JSON-syntax or escaping issues detected.

Nothing further to address here.

Also applies to: 24-24, 31-31

app/config/locale/translations/ms.json (1)

11-11: Malay button-text entries look good

All three additions respect the existing style guide and keep the {{team}} placeholder untouched.

Also applies to: 24-24, 31-31

app/config/locale/translations/te.json (1)

11-11: Telugu entries validated – no issues found

Strings are well-formed, use correct script punctuation, and retain {{team}} where required.

Also applies to: 24-24, 31-31

app/config/locale/translations/lv.json (1)

11-11: Latvian additions are consistent and placeholder-safe

Key naming, grammar, and placeholder usage ({{team}}) all align with project standards.

Also applies to: 24-24, 31-31

app/controllers/api/storage.php (3)

21-21: LGTM: Console import added for logging functionality.

The import is correctly placed and necessary for the logging enhancement in the preview endpoint.


957-957: LGTM: Request and Project injection for enhanced logging.

The additional injections are appropriate to support the performance logging functionality added to the preview endpoint.

Also applies to: 963-963


1107-1108: LGTM: Comprehensive performance logging.

The logging statement provides valuable metrics for monitoring file preview performance across all processing stages. The inclusion of project, bucket, file, and URI identifiers enables effective debugging and analysis.

app/config/locale/translations/si.json (1)

11-11: LGTM: Email button text translations added.

The new Sinhala translations for email button text are well-integrated and follow the existing naming conventions. The content is appropriate for verification, recovery, and invitation email contexts, supporting the broader email template enhancement.

Also applies to: 24-24, 31-31

app/init/resources.php (1)

949-953: LGTM! Simple referrer extraction.

The httpReferrer resource correctly extracts the raw HTTP referrer from the request.

app/controllers/general.php (3)

122-126: Good addition for error tracking in custom domain scenarios.

Adding the project ID as a log tag helps with debugging when the x-appwrite-project header is unavailable during custom domain function execution.


946-946: Improved origin handling with centralized referrer validation.

The changes simplify origin validation by:

  1. Using the injected httpReferrer for parsing
  2. Setting CORS headers with the sanitized httpReferrerSafe value
  3. Adding explicit localhost allowance for local development

This centralized approach improves maintainability and security.

Also applies to: 1020-1020, 1041-1041


1247-1250: Good defensive check to prevent duplicate log tags.

The check prevents adding duplicate projectId tags when it's already been set by the router.

@ItzNotABug ItzNotABug force-pushed the update-documentation branch from 73b0b9d to 86dfed8 Compare July 3, 2025 05:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants
0