- Each project row in the organization billing breakdown now iterates
its resources for addon_* entries (amount > 0) and renders them as
child rows (e.g. Premium Geo DB under the project it was enabled on).
The backend already filters project-scoped addons out of the
team-level resources response, so the org "Addons" section shows only
org-scoped addons (BAA, premiumGeoDBOrg) while project-scoped ones
surface where they belong.
- Org-level addon labels now read addon.name from the UsageResource
payload that the getAggregation endpoint populates from billingAddons
config. Dropped the hard-coded billingAddonNames map so new addons
surface with their proper name without a console update.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Mirrors the BAA addon UX by fetching the addon price via
organizations.getAddonPrice(Addon.Premiumgeodb) from the settings
page loader, passing it through to the Premium Geo DB card and
enable modal, and rendering the monthly/prorated breakdown with
formatCurrency alongside the Enable CTA.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The apex-domain alert in the verify-domain flow only warned that CNAME
is provider-dependent. It now also tells users to disable the CDN proxy
(e.g. Cloudflare's orange cloud) since Appwrite serves traffic through
its own CDN.
Adds a Premium Geo DB section to the project settings page so users
can enable and disable the premium geolocation addon per-project on
cloud. The section supports the full addon lifecycle:
- Upgrade prompt when the current plan does not support the addon
- Enable flow with optional 3DS payment authentication
- Pending state with cancel & retry option
- Active state with disable action
- Scheduled-for-removal state with re-enable action
Uses the new project-scoped SDK methods: listAddons, createPremiumGeoDBAddon,
and deleteAddon. Bumps the @appwrite.io/console SDK pin accordingly.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- uploadFile now catches errors and sets status to 'failed' with error message
- Both create page and drag-drop check uploadFiles results for failures and
show error notifications
- Drag-drop validates file extensions against bucket allowedFileExtensions
before uploading, rejecting disallowed files with a notification
Allow selecting and dropping multiple files at once when uploading
to a storage bucket. Files are uploaded in parallel with a concurrency
limit of 5 to avoid overwhelming the browser and server.