Commit Graph

12364 Commits

Author SHA1 Message Date
harsh mahajan 145e48ea16 fix: address code review issues in granular project access
- listProjects in members page load now uses .catch(() => null) so a
  permissions or network error does not break the entire page
- projectAccessSelector disables "Add project" when projects list is
  empty (prevents unusable required dropdown row)
- createMember resets orgProjects on modal close so subsequent opens
  fetch a fresh list instead of showing a stale one
- edit modal init effect now checks supportsProjectRoles before setting
  accessType to 'specific', preventing a silent role re-submission when
  the org plan is downgraded below the project-roles threshold
2026-05-28 19:59:59 +05:30
harsh mahajan 8614a62750 lint 2026-05-28 19:47:59 +05:30
harsh mahajan a12c6b4d81 feat: granular project access for org members
Add support for assigning org members to specific projects with
per-project roles (owner, developer, editor, analyst) rather than
granting access to all projects in the organization.

- Add project-role helpers to billing store: isProjectSpecificRole,
  parseProjectRole, buildProjectRole, getRoleLabel, projectRoles
- Pass projectId to getScopes in project layout so project-specific
  members receive correct scopes inside their assigned projects
- Add owner-only guard on org settings page
- Load orgProjects alongside members in the members page load
- New projectAccessSelector component for inline project+role rows
  with duplicate-project prevention
- Invite and edit modals use radio toggle (All / Specific projects)
  with inline selector — gated to plans with supportsOrganizationRoles
- Members table shows per-project role badges for project-specific members
- roles.svelte accepts isProjectSpecific prop for contextual role descriptions
2026-05-28 19:03:36 +05:30
harsh mahajan e9d0a6fd0d fix: preserve boolean fields and deploymentRetention in git/domain flows
Extends the same fix to three non-settings flows that call functions.update
or sites.update and had the same bugs:

- functions/(modals)/createGit.svelte: enabled/logging || → ??; add deploymentRetention
- functions/domains/add-domain/+page.svelte: enabled/logging || → ??; add
  providerSilentMode, providerRootDirectory, buildSpecification, and deploymentRetention
  which were missing entirely from this connect() call
- sites/deployments/createGitDeploymentModal.svelte: enabled/logging/
  providerSilentMode || → ??; add deploymentRetention
2026-05-28 12:30:13 +05:30
harsh mahajan 47d78fa0fb fix: preserve boolean fields and deploymentRetention across all settings updates
Extends the fix from #3064 to the remaining 20 settings update components
for both functions and sites. Two bugs were present in every file not
touched by that PR:

1. `enabled`, `logging`, and `providerSilentMode` were passed through
   `|| undefined` instead of `?? undefined`, causing `false` values to
   be silently coerced to `undefined` and reset to their API defaults
   whenever any other setting was saved.

2. `deploymentRetention` was absent from every partial-update payload,
   so saving name, timeout, scopes, schedule, runtime, permissions,
   resource limits, build command, events, build triggers, or repository
   settings would silently reset the retention value.

Also fixes `providerSilentMode: silentMode || undefined` in sites/
updateRepository.svelte to `silentMode` (matching the functions version),
so disabling silent mode is correctly preserved on save.
2026-05-28 12:22:39 +05:30
Darshan 6a1edd5092 fix: configs being reset.
fix: configs not being applied correctly.
2026-05-28 11:58:19 +05:30
harsh mahajan 6d84c25d15 lint issue 2026-05-27 18:35:11 +05:30
harsh mahajan 504d61b820 Fix row bulk delete freeze 2026-05-27 18:32:26 +05:30
Harsh Mahajan 7a26e29339 Merge pull request #3058 from appwrite/fix/build-trigger-filters
Add build trigger filters
2026-05-27 17:50:24 +05:30
harsh mahajan 80f4e87f4a fix: parallelize org project lookups in auth preview route 2026-05-27 17:26:09 +05:30
harsh mahajan eed9ee26e6 fix: replace helper text with tooltip info icon on build trigger filters 2026-05-27 17:17:34 +05:30
harsh mahajan d6c3d785b8 format 2026-05-27 17:13:14 +05:30
harsh mahajan 282ec7bb5a fix: migrate project API calls to org-scoped Organization SDK
Bumps @appwrite.io/console SDK to 35c3dea which introduces the Organization
class. All projects.list/create/update calls are now routed through
sdk.forConsole.organization(orgId) so requests carry the
X-Appwrite-Organization header required by the new API contract.
2026-05-27 17:09:10 +05:30
Harsh Mahajan 6d4b05f3f9 Merge pull request #3062 from appwrite/fix-oauth-provider-search-order
Fix OAuth provider search ordering
2026-05-26 13:05:57 +05:30
harsh mahajan c13588f971 Fix OAuth provider search ordering 2026-05-26 11:41:01 +05:30
Harsh Mahajan a17021c1f9 Merge pull request #3061 from appwrite/fix-git-integration-doc-link
fix: point GitHub integration 'Learn more' links to version-control docs
2026-05-26 08:21:31 +05:30
harsh mahajan 2c384f1c6e fix: point GitHub integration 'Learn more' links to version-control docs 2026-05-26 00:18:46 +05:30
Atharva Deosthale 3034949777 chore(console): rename promo to Presences API and swap cover image 2026-05-25 18:45:01 +05:30
Atharva Deosthale 1af515899a feat(console): swap promo banner to Presence API announcement
Replace the relationships-out-of-beta banner with the new Presence API
announcement linking to the appwrite.io blog post.
2026-05-25 11:20:20 +05:30
Damodar Lohani ded74e8850 fix(billing): use addon name from API instead of hardcoded label map
The plan summary table used a hardcoded `addon_<key> -> label` lookup
to render addon line items, with a fallback that called every unknown
addon an "overage". Switch to reading `addon.name` from the API
response, which the aggregation endpoint now populates from the addon
catalog.

The hardcoded map stays as a fallback for older cloud builds that
don't yet send `addon.name`, and a plain resourceId is the final
fallback in place of the misleading "overage (N)" string.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 05:53:04 +00:00
harsh mahajan a7eb64daba Add build trigger filters 2026-05-22 17:29:47 +05:30
Harsh Mahajan ffc553878d Merge pull request #3054 from appwrite/fix-billing-null-guards
Fix billing null guards
2026-05-21 13:09:05 +05:30
harsh mahajan 3862b0cde7 format 2026-05-21 12:49:39 +05:30
harsh mahajan 1d8876bfd9 fix: move credentials above Advanced accordion in OAuth modals 2026-05-21 12:49:01 +05:30
harsh mahajan dbbd29be3e fix: move client secret below Advanced accordion to match mainOAuth pattern 2026-05-21 12:46:34 +05:30
harsh mahajan ac30ff1f6c fix: revert OIDC advanced param to URL-based heuristic per design intent 2026-05-21 12:43:32 +05:30
harsh mahajan a247ab7e92 fix: address PR review — sanitize OAuth error message and revert OIDC param heuristic 2026-05-21 12:42:05 +05:30
harsh mahajan 14f55206b1 refactor: migrate googlePromptPicker to Svelte 5 runes 2026-05-21 12:40:24 +05:30
harsh mahajan 232628670e feat: Google OAuth prompt parameter and login OAuth error display
- Add dedicated googleOAuth.svelte modal with prompt picker in Advanced section
- Add googlePromptPicker.svelte: tag-based multi-select enforcing none exclusivity
- Wire prompt array through updateOAuth.ts to updateOAuth2Google SDK call
- Fix OIDC advanced param detection to URL-based logic (all URL params except wellKnownURL)
- Show OAuth failure URL error message on login page via onMount
2026-05-21 12:37:06 +05:30
Damodar Lohani a8b9e1d532 fix: allow deleting organization with failed invoices
The cloud backend (already merged) now cancels pending/failed invoices on
organization delete instead of throwing BILLING_INVOICE_PENDING. The
console was still gating the delete modal via the unpaid-invoices branch
of the delete-estimation endpoint, which rendered an alternate view
without the org-name confirmation input and left the Delete button
permanently disabled.

Drop the estimation-based gate (and the now-unused estimation fetch,
component, and import) so the confirm-name form always renders. The
backend will cancel any failed invoices server-side as part of the
delete. The informational upcoming-invoice Alert is preserved.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 01:27:55 +00:00
harsh mahajan b88f43b848 Guard project limitation plan lookup 2026-05-20 18:38:17 +05:30
harsh mahajan c6a1bfeae1 Fix billing null guards 2026-05-20 18:24:19 +05:30
Harsh Mahajan b550d729b5 Merge pull request #3051 from appwrite/fix-smtp-email-template-clear-fields
fix: allow clearing optional SMTP and email template sender fields
2026-05-20 17:31:14 +05:30
harsh mahajan 95f6655913 fix: use backend error message on 402 billing limit page 2026-05-20 11:06:11 +05:30
harsh mahajan 549c073aa6 fix: use generic billing limit copy for 402 error page
402 can be triggered by various billing limits, not only budget caps.
Update copy to reflect this.
2026-05-20 11:03:53 +05:30
harsh mahajan 838e066dbd feat: add dedicated 402 budget limit error page
Replace generic error display for 402 responses with a dedicated
budget limit error page. Includes a 'Go to billing' CTA when an
organization is in context, and a 'Change organization' secondary
action on both console-level and project-level error pages.
2026-05-20 10:55:25 +05:30
harsh mahajan e74f49f8be feat: add reset to default button on email templates 2026-05-19 18:57:47 +05:30
Harsh Mahajan 97d5e33a21 Update src/routes/(console)/project-[region]-[project]/auth/templates/emailTemplate.svelte
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-05-19 16:35:00 +05:30
harsh mahajan d1806f5fb6 fix: allow clearing optional SMTP and email template sender fields
Optional fields (senderEmail, replyToEmail, senderName, replyToName,
username, password) could not be cleared once set. The frontend used
|| undefined which silently dropped empty strings, so the backend
never received "" and the old value persisted on reload.

smtp/+page.svelte:
- Use ?? undefined instead of || undefined so empty strings are sent
- Fix isButtonDisabled deepEqual comparison: normalize types on both
  sides (?? '' for strings, ?? null for port, normalizeSecure() for
  secure) to avoid false positives from null/undefined mismatches
- Derive project from data.project so it stays reactive after
  invalidate() — fixes button not disabling after save without reload
- Remove second $effect that cleared fields on disable, which fought
  the first effect and kept the button permanently enabled

emailTemplate.svelte:
- Use ?? undefined instead of || undefined for sender/reply fields
- Add disabled={!isSmtpEnabled} to replyToEmail and replyToName,
  matching the existing behaviour of senderName and senderEmail
2026-05-19 16:13:54 +05:30
Atharva Deosthale c68e1108b9 feat: replace console banner with relationships GA announcement
Swap Terraform provider promo for the "Database relationships are out of
beta" announcement, linking to the GA blog post.
2026-05-18 13:21:14 +05:30
harsh mahajan b3466481db fix: make impersonated resource urls reactive 2026-05-18 11:30:31 +05:30
harsh mahajan b70adc86e7 fix: resolve codemirror editor type mismatch 2026-05-18 11:24:24 +05:30
harsh mahajan 41aca21b71 fix: add impersonation params to resource urls 2026-05-18 11:14:25 +05:30
Harsh Mahajan c4f6f7947f Merge pull request #3039 from appwrite/feat-signup-email-security
feat: add signup email security controls + ce refactor changes
2026-05-14 10:28:28 +05:30
Matej Bačo 67da40e12a Improve copy 2026-05-13 16:50:34 +02:00
Matej Bačo 13781d152a Improve email policies copy 2026-05-13 16:45:51 +02:00
harsh mahajan 5ee037a0b8 fix: button state 2026-05-13 18:05:47 +05:30
harsh mahajan f95ce503af more fixes 2026-05-13 13:44:05 +05:30
harsh mahajan dd6b6c8da7 remove type 2026-05-13 13:33:22 +05:30
harsh mahajan e01d05cd45 same fix 2026-05-13 13:08:21 +05:30