From a66dae48f27ee7023483c1846b492b6ff05b277f Mon Sep 17 00:00:00 2001 From: Jordi Enric <37541088+jordienr@users.noreply.github.com> Date: Tue, 4 Aug 2026 14:36:06 +0200 Subject: [PATCH 01/83] fix(studio): restart action for table editor load errors FE-4054 (#48687) ## Problem When the table editor showed a "Failed to load tables" or "Failed to load schemas" error (for example, when the underlying database or API gateway is unhealthy), there was no working way to restart the project from that error state. Restarting only worked by navigating to Project Settings. ## Fix "Failed to load tables" goes through the existing `ErrorMatcher` classification system, which only showed troubleshooting steps (including a restart action) for connection-timeout errors. Added an `ERROR_MAPPINGS` entry for the unclassified/generic API error case, reusing the existing `RestartDatabaseTroubleshootingSection` and `RestartProjectDialog` components already used for connection timeouts. "Failed to load schemas" (in the shared `SchemaSelector`, used across the table editor and several Database pages) only offered a retry. Added a "Restart database" button next to it, wired to the same `RestartProjectDialog`. ## How to test - In the table editor, trigger a table-load failure that isn't a connection timeout (any generic API error). The error card should now show a "Try restarting your project" step with a working restart action. - Open the schema selector while schemas fail to load (e.g. mock a 503 from the schemas query). A "Restart database" button should appear next to "Reload schemas" and open the restart confirmation dialog. - `apps/studio/components/interfaces/ErrorHandling/ErrorMatcher.test.tsx` and `apps/studio/components/ui/SchemaSelector.test.tsx` cover both cases. FE-4054 ## Summary by CodeRabbit * **New Features** * Added database restart guidance when schema loading fails. * Added options to reload schemas or restart the database, including a confirmation prompt. * Added troubleshooting guidance for unclassified table-loading errors. * **Bug Fixes** * Improved error handling by displaying relevant fallback guidance for unknown errors while preserving classified troubleshooting instructions. --- .../ErrorHandling/ErrorMatcher.test.tsx | 26 +++++++++++++ .../interfaces/ErrorHandling/ErrorMatcher.tsx | 13 ++++++- .../RestartTroubleshootingFallback.tsx | 15 ++++++++ .../TableEditorLayout/TableEditorMenu.tsx | 2 + .../components/ui/SchemaSelector.test.tsx | 38 ++++++++++++++++++- apps/studio/components/ui/SchemaSelector.tsx | 18 +++++++-- 6 files changed, 106 insertions(+), 6 deletions(-) create mode 100644 apps/studio/components/interfaces/ErrorHandling/RestartTroubleshootingFallback.tsx diff --git a/apps/studio/components/interfaces/ErrorHandling/ErrorMatcher.test.tsx b/apps/studio/components/interfaces/ErrorHandling/ErrorMatcher.test.tsx index 01e58b27988..d3f551ce4d5 100644 --- a/apps/studio/components/interfaces/ErrorHandling/ErrorMatcher.test.tsx +++ b/apps/studio/components/interfaces/ErrorHandling/ErrorMatcher.test.tsx @@ -66,6 +66,32 @@ describe('ErrorMatcher', () => { expect(screen.getByText('UNKNOWN ERROR')).toBeInTheDocument() }) + it('renders the caller-provided fallback when the error is unclassified', () => { + render( + Custom fallback} + /> + ) + expect(screen.getByText('Custom fallback')).toBeInTheDocument() + }) + + it('ignores the caller-provided fallback when the error is classified', () => { + const error = new ConnectionTimeoutError('CONNECTION TERMINATED DUE TO CONNECTION TIMEOUT') + render( + Custom fallback} + /> + ) + expect(screen.queryByText('Custom fallback')).not.toBeInTheDocument() + expect(screen.getByText('Try restarting your project')).toBeInTheDocument() + }) + it('accepts error as object with message property', () => { render( - {Troubleshooting && } + {Troubleshooting ? : fallback} ) } diff --git a/apps/studio/components/interfaces/ErrorHandling/RestartTroubleshootingFallback.tsx b/apps/studio/components/interfaces/ErrorHandling/RestartTroubleshootingFallback.tsx new file mode 100644 index 00000000000..6d715d98ff6 --- /dev/null +++ b/apps/studio/components/interfaces/ErrorHandling/RestartTroubleshootingFallback.tsx @@ -0,0 +1,15 @@ +import { TroubleshootingAccordion } from './TroubleshootingAccordion' +import { RestartDatabaseTroubleshootingSection } from './TroubleshootingSections' + +const ERROR_TYPE = 'unknown' + +export function RestartTroubleshootingFallback() { + return ( + + + + ) +} diff --git a/apps/studio/components/layouts/TableEditorLayout/TableEditorMenu.tsx b/apps/studio/components/layouts/TableEditorLayout/TableEditorMenu.tsx index 80710c92136..7dcf8969319 100644 --- a/apps/studio/components/layouts/TableEditorLayout/TableEditorMenu.tsx +++ b/apps/studio/components/layouts/TableEditorLayout/TableEditorMenu.tsx @@ -21,6 +21,7 @@ import { parseSupaTable } from '@/components/grid/SupabaseGrid.utils' import { SupaTable } from '@/components/grid/types' import { ProtectedSchemaWarning } from '@/components/interfaces/Database/ProtectedSchemaWarning' import { ErrorMatcher } from '@/components/interfaces/ErrorHandling/ErrorMatcher' +import { RestartTroubleshootingFallback } from '@/components/interfaces/ErrorHandling/RestartTroubleshootingFallback' import { EditorMenuListSkeleton } from '@/components/layouts/TableEditorLayout/EditorMenuListSkeleton' import { ButtonTooltip } from '@/components/ui/ButtonTooltip' import { InfiniteListDefault, LoaderForIconMenuItems } from '@/components/ui/InfiniteList' @@ -305,6 +306,7 @@ export const TableEditorMenu = () => { error={error ?? 'Failed to load tables'} supportFormParams={{ projectRef: project?.ref }} className="mx-4 mt-3" + fallback={} /> )} diff --git a/apps/studio/components/ui/SchemaSelector.test.tsx b/apps/studio/components/ui/SchemaSelector.test.tsx index 0cff282ba8b..20500671f37 100644 --- a/apps/studio/components/ui/SchemaSelector.test.tsx +++ b/apps/studio/components/ui/SchemaSelector.test.tsx @@ -6,7 +6,7 @@ import { describe, expect, it, vi } from 'vitest' import { SchemaSelector } from './SchemaSelector' import { customRender } from '@/tests/lib/custom-render' -import { addAPIMock } from '@/tests/lib/msw' +import { addAPIMock, APIErrorBody } from '@/tests/lib/msw' mockAnimationsApi() @@ -41,6 +41,30 @@ const mockProjectAndSchemas = ({ highAvailability }: { highAvailability: boolean }) } +const mockProjectAndFailingSchemas = () => { + addAPIMock({ + method: 'get', + path: '/platform/projects/:ref', + // @ts-expect-error partial project response + response: { + cloud_provider: 'localhost', + id: 1, + inserted_at: '2021-08-02T06:40:40.646Z', + name: 'Default Project', + organization_id: 1, + ref: 'default', + region: 'local', + status: 'ACTIVE_HEALTHY', + }, + }) + addAPIMock({ + method: 'post', + path: '/platform/pg-meta/:ref/query', + response: () => + HttpResponse.json({ message: 'Service unavailable' }, { status: 503 }), + }) +} + const renderAndOpenSelector = async () => { customRender() @@ -66,4 +90,16 @@ describe('SchemaSelector', () => { expect(screen.getByRole('option', { name: 'multigres' })).toBeInTheDocument() }) + + it('offers to restart the database when schemas fail to load', async () => { + mockProjectAndFailingSchemas() + + customRender() + + await userEvent.click(await screen.findByRole('button', { name: 'Restart database' })) + + expect( + await screen.findByText(/are you sure you want to restart your database/i) + ).toBeInTheDocument() + }) }) diff --git a/apps/studio/components/ui/SchemaSelector.tsx b/apps/studio/components/ui/SchemaSelector.tsx index a051ce4c6f4..d7cd9d1a0c3 100644 --- a/apps/studio/components/ui/SchemaSelector.tsx +++ b/apps/studio/components/ui/SchemaSelector.tsx @@ -20,6 +20,7 @@ import { Skeleton, } from 'ui' +import { RestartProjectDialog } from '@/components/interfaces/ErrorHandling/RestartProjectDialog' import { useSchemasQuery } from '@/data/database/schemas-query' import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' import { useSchemasFilteredForHighAvailability } from '@/hooks/misc/useHighAvailability' @@ -65,6 +66,7 @@ export const SchemaSelector = forwardRef( ref ) => { const [internalOpen, setInternalOpen] = useState(false) + const [isRestartDialogVisible, setIsRestartDialogVisible] = useState(false) const isControlled = openProp !== undefined const open = isControlled ? openProp : internalOpen const setOpen = (next: boolean) => { @@ -119,9 +121,19 @@ export const SchemaSelector = forwardRef( Error: {(schemasError as any)?.message} - +
+ + +
+ setIsRestartDialogVisible(false)} + restartType="database" + /> )} From 31d1a639c0aa386b61732598fa782e39dbaa621d Mon Sep 17 00:00:00 2001 From: Guilherme Souza Date: Tue, 4 Aug 2026 09:58:13 -0300 Subject: [PATCH 02/83] docs: Update SDK references from recent releases (#47830) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Updates SDK reference docs and the client-side tracing guide based on recent releases across all six Supabase SDKs. ## SDKs analyzed | SDK | Repo | Latest commit | Latest tag | |-----|------|--------------|------------| | js | supabase/supabase-js | `e4e8864` | v3.0.0-next.29 | | dart | supabase/supabase-flutter | `c3e3602` | yet_another_json_isolate-v2.1.1 | | py | supabase/supabase-py | `6570638` | v3.0.0a1 | | swift | supabase/supabase-swift | `ebef170` | v2.51.0 | | kt | supabase-community/supabase-kt | `e23df20` | 3.7.0-beta-1 | | csharp | supabase-community/supabase-csharp | `3fad62f` | v1.1.2 | ## Documentation changes ### `apps/docs/spec/supabase_dart_v2.yml` - **OAuth Server API** ([supabase-flutter#1561](https://github.com/supabase/supabase-flutter/pull/1561)): Added `oauth-server-api` group stub and `listGrants()` / `revokeGrant()` method entries, matching the existing `common-client-libs-sections.json` nav IDs. - **`listBuckets()` options** ([supabase-flutter#1557](https://github.com/supabase/supabase-flutter/pull/1557)): Added example showing `ListBucketsOptions` with `search`, `limit`, `offset`, `sortColumn`, and `sortOrder`. ### `apps/docs/spec/supabase_py_v2.yml` - **`on_postgres_changes` `select` param** ([supabase-py#1524](https://github.com/supabase/supabase-py/pull/1524)): Added `listening-to-selected-columns` example for the new `select=["id", "name"]` parameter. - **Expanded filter operators** ([supabase-py#1524](https://github.com/supabase/supabase-py/pull/1524)): Updated `listening-to-row-level-changes` note to list all supported operators (`eq`, `neq`, `lt`, `lte`, `gt`, `gte`, `in`, `like`, `ilike`, `is`, `match`, `imatch`, `isdistinct`) plus `not.` prefix and comma-AND. ### `apps/docs/spec/supabase_swift_v2.yml` - **OpenTelemetry tracing setup** ([supabase-swift#1101](https://github.com/supabase/supabase-swift/pull/1101)): Added `initialize-client-with-opentelemetry` example under the `initializing` section documenting the `OpenTelemetry` SwiftPM package trait, provider wiring, and known `_invokeWithStreamedResponse` limitation. ### `apps/docs/content/guides/telemetry/client-side-tracing.mdx` - **Merged Swift and Dart tracing docs** into the existing JS guide ([supabase-swift#1101](https://github.com/supabase/supabase-swift/pull/1101), [supabase-flutter#1564](https://github.com/supabase/supabase-flutter/pull/1564)). - **Converted to tabbed layout** (``) with JavaScript / Swift / Dart tabs, matching the pattern used across other multi-SDK guides. - Updated title to "Client-side tracing" and nav label accordingly. ## SDKs with no doc-worthy changes - **js**: Bug fixes only (auth session clearing, realtime heartbeat suppression) β€” no new API surface. - **kt**: PKCE for `resend()` β€” behavioral enhancement, no new spec entry needed. - **csharp**: Chore/compliance/maintenance only. --- πŸ€– Generated with [Claude Code](https://claude.com/claude-code) ## Summary by CodeRabbit * **Documentation** * Added Dart β€œOAuth Server” API docs for listing OAuth grants and revoking grants (including signed-in context and the `clientId` parameter), with examples. * Extended Dart Storage docs with a new `listBuckets` example using `ListBucketsOptions` for filtering, pagination, and sorting. * Updated Python Realtime docs with generalized PostgREST-style row filter operators and added examples for listening to selected columns. * Reworked the β€œClient-side tracing” guide across JS, Swift, and Dart, including expanded configuration and troubleshooting (trace propagation and `traceparent` details). * Renamed the telemetry navigation label to β€œClient-side tracing.” --------- Co-authored-by: Claude Sonnet 4.6 --- .../NavigationMenu.constants.ts | 2 +- .../client-side-tracing.mdx | 142 ++++++++++++++++-- apps/docs/scripts/generate-dart-reference.ts | 2 +- apps/docs/spec/supabase_py_v2.yml | 26 +++- apps/docs/spec/supabase_swift_v2.yml | 20 +++ supa-mdx-lint/Rule003Spelling.toml | 1 + 6 files changed, 173 insertions(+), 20 deletions(-) diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index 08c99b5eed0..77cbb1c8ef8 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -3062,7 +3062,7 @@ export const telemetry: NavMenuConstant = { url: '/guides/monitoring-and-debugging/sentry-monitoring' as `/${string}`, }, { - name: 'Tracing with the JS SDK', + name: 'Tracing with the client SDKs', url: '/guides/monitoring-and-debugging/client-side-tracing' as `/${string}`, }, ], diff --git a/apps/docs/content/guides/monitoring-and-debugging/client-side-tracing.mdx b/apps/docs/content/guides/monitoring-and-debugging/client-side-tracing.mdx index 901017e3b29..44b8a378ac4 100644 --- a/apps/docs/content/guides/monitoring-and-debugging/client-side-tracing.mdx +++ b/apps/docs/content/guides/monitoring-and-debugging/client-side-tracing.mdx @@ -1,12 +1,22 @@ --- id: 'client-side-tracing' -title: 'Tracing with the JS SDK' -description: 'Propagate W3C trace context from the Supabase JS SDK through Supabase services' +title: 'Client-side tracing' +description: 'Propagate W3C trace context from the Supabase JS, Swift, and Dart SDKs through Supabase services' --- -The Supabase JS SDK can attach [W3C Trace Context](https://www.w3.org/TR/trace-context/) headers (`traceparent`, `tracestate`, `baggage`) to outgoing requests. The resulting `trace_id` flows through Supabase services and appears in API Gateway and Edge Function logs, so you can correlate client-side spans with the server-side logs they produced β€” end-to-end, across the network boundary. +The Supabase JS, Swift, and Dart SDKs can attach [W3C Trace Context](https://www.w3.org/TR/trace-context/) headers (`traceparent`, `tracestate`, `baggage`) to outgoing requests. The resulting `trace_id` flows through Supabase services and appears in API Gateway and Edge Function logs, so you can correlate client-side spans with the server-side logs they produced β€” end-to-end, across the network boundary. -Because the headers follow the W3C standard, any compliant tracing SDK (OpenTelemetry, Sentry, Datadog, Honeycomb, etc.) can pick up the trace on the server side, including in self-hosted collectors. +Because the headers follow the W3C standard, any compliant tracing SDK (such as OpenTelemetry, Sentry, Datadog, or Honeycomb) can pick up the trace on the server side, including in self-hosted collectors. + + + + ## Requirements @@ -34,7 +44,7 @@ Trace propagation isn't available through the CDN (UMD) build β€” there's no way The SDK reads from whatever `TracerProvider` you register globally β€” it doesn't configure one for you. If you haven't instrumented your app yet, follow the [OpenTelemetry JavaScript getting started guide](https://opentelemetry.io/docs/languages/js/getting-started/) to install an SDK (`@opentelemetry/sdk-trace-node` for Node, `@opentelemetry/sdk-trace-web` for browsers) and an exporter for your backend (OTLP, Jaeger, Zipkin, or a vendor-specific one). -The Supabase SDK only takes care of propagating the trace context that's already active when a request is made. +The Supabase SDK only propagates the trace context that's already active when a request is made. ## Enable trace propagation @@ -84,18 +94,9 @@ const supabase = createClient(SUPABASE_URL, SUPABASE_KEY, { | `enabled` | `boolean` | `false` | Enable trace propagation. | | `respectSamplingDecision` | `boolean` | `true` | If `true`, skip propagation when the upstream trace is not sampled. | -## Correlating with Supabase logs - -Once trace context is flowing through, the `trace_id` appears in: - -- **API Gateway logs** β€” every request to PostgREST, Auth, Storage, and Realtime -- **Edge Function logs** β€” invocations and any structured logs emitted from within the function - -If you forward Supabase logs to a third-party backend via [Log Drains](/docs/guides/monitoring-and-debugging/log-drains), you can join Supabase logs to your own client and server traces using the shared `trace_id`. This is especially useful for self-hosted setups where you already operate your own OpenTelemetry collector β€” Supabase logs become first-class citizens in your existing tracing UI. - ## Using a vendor tracing SDK -Many tracing SDKs are built on top of OpenTelemetry. They work with this guide as long as a W3C-compliant propagator is registered β€” but propagator behavior varies. Some vendor SDKs inject only their proprietary headers by default and need extra configuration to also emit the standard `traceparent` header. Check your vendor's OTel integration docs for the exact setup. +Many tracing SDKs are built on top of OpenTelemetry. They work with this guide as long as a W3C-compliant propagator is registered. Some vendor SDKs inject only their proprietary headers by default and need extra configuration to also emit the standard `traceparent` header. Check your vendor's OTel integration docs for the exact setup. ## Troubleshooting @@ -104,7 +105,116 @@ The SDK never throws when it can't propagate, which keeps it safe to enable but - **The tracing runtime isn't loaded** (version `2.112.0` and later). `tracePropagation` is enabled but your entry point never imports `@supabase/supabase-js/tracing`. The SDK logs a one-time console warning and sends requests without trace headers β€” look for that warning in your console. - **No active span at request time.** The SDK reads the _current_ context. If `supabase.from(...)` is called outside `tracer.startActiveSpan(...)` (or equivalent), there's nothing to propagate. Wrap the call in a span or use OpenTelemetry's automatic instrumentation. - **`@opentelemetry/api` is not installed** in the app making the request. On `2.112.0` and later the tracing subpath imports it directly, so a missing package surfaces as a module resolution error. On `2.106.0`–`2.111.x` it's loaded dynamically and the SDK silently no-ops. -- **No `TracerProvider` registered.** `@opentelemetry/api` defaults to a noop provider that produces non-recorded spans. Make sure your app calls `provider.register()` (or your vendor SDK's equivalent) before making requests. +- **No `TracerProvider` registered.** `@opentelemetry/api` defaults to a noop provider that produces non-recorded spans. Ensure your app calls `provider.register()` (or your vendor SDK's equivalent) before making requests. - **The upstream trace is not sampled.** By default the SDK respects upstream sampling decisions. Set `respectSamplingDecision: false` to propagate every request regardless of sampling. - **You're calling a non-Supabase host through a custom `fetch`.** Trace headers are only attached to Supabase domains (`*.supabase.co`, `*.supabase.in`, `localhost`). - **You're using the CDN (UMD) build.** Trace propagation isn't available there β€” the tracing runtime can't be loaded from a script tag. + + + + + +Requires `supabase-swift` `2.51.0` or later and `swift-tools-version: 6.1` or later (SwiftPM trait support). + +1. **Add the `OpenTelemetry` trait** to your dependency declaration in `Package.swift`: + + ```swift + // Package.swift + .package( + url: "https://github.com/supabase/supabase-swift.git", + from: "2.51.0", + traits: ["OpenTelemetry"] + ) + ``` + + No changes to `SupabaseClient` are required. After enabling the trait, the active OpenTelemetry span's trace context is automatically injected as a `traceparent` header on every outgoing request across PostgREST, Storage, Auth, Functions, and Realtime. When there is no active span, the header is not added. + +2. **Register a `TracerProvider`** at app start. The SDK reads from whatever provider you register globally: + + ```swift + import Supabase + import OpenTelemetryApi + import OpenTelemetrySdk + + let exporter = /* your OTLP / Jaeger / Zipkin exporter */ + let spanProcessor = SimpleSpanProcessor(spanExporter: exporter) + let provider = TracerProviderBuilder() + .add(spanProcessor: spanProcessor) + .build() + OpenTelemetry.registerTracerProvider(tracerProvider: provider) + ``` + +3. **Create your `SupabaseClient`**. Any active span is now propagated automatically: + + ```swift + let supabase = SupabaseClient( + supabaseURL: URL(string: "https://xyzcompany.supabase.co")!, + supabaseKey: "your-publishable-key" + ) + ``` + + + + + +Requires `supabase` `2.x` or later (Flutter or Dart-only). + +1. **Implement a `traceContextProvider`** that returns the current `TraceContext` from your tracing library. Return `null` when there is no active span. + +2. **Pass `TracePropagationOptions`** when creating the client: + + ```dart + import 'package:supabase/supabase.dart'; + + final supabase = SupabaseClient( + 'https://xyzcompany.supabase.co', + 'your-publishable-key', + tracePropagationOptions: TracePropagationOptions( + enabled: true, + traceContextProvider: () { + final span = YourTracer.activeSpan; + if (span == null) return null; + return TraceContext( + traceparent: span.traceparent, + tracestate: span.tracestate, + ); + }, + ), + ); + ``` + + For `supabase_flutter`, pass the same option through `Supabase.initialize`: + + ```dart + await Supabase.initialize( + url: 'https://xyzcompany.supabase.co', + anonKey: 'your-publishable-key', + tracePropagationOptions: TracePropagationOptions( + enabled: true, + traceContextProvider: () => yourTraceContextProvider(), + ), + ); + ``` + +## Options + +| Option | Type | Default | Description | +| ------------------------- | ----------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `enabled` | `bool` | `false` | Enable trace propagation. | +| `respectSamplingDecision` | `bool` | `true` | When `true`, skips propagation if the upstream trace is not sampled. Set to `false` to always attach a `trace_id` β€” useful for log correlation even when traces are not exported. | +| `traceContextProvider` | `TraceContextProvider?` | `null` | Callback returning the current `TraceContext`. Return `null` when there is no active span. | + +Headers are only injected on requests targeting Supabase hosts (`*.supabase.co`, `*.supabase.in`, your project host, and loopback addresses for local development). Third-party hosts never receive trace headers. + + + + + +## Correlating with Supabase logs + +After trace context is flowing through, the `trace_id` appears in: + +- **API Gateway logs** β€” every request to PostgREST, Auth, Storage, and Realtime +- **Edge Function logs** β€” invocations and any structured logs emitted from within the function + +If you forward Supabase logs to a third-party backend via [Log Drains](/docs/guides/monitoring-and-debugging/log-drains), you can join Supabase logs to your own client and server traces using the shared `trace_id`. This is especially useful for self-hosted setups where you already operate your own OpenTelemetry collector β€” Supabase logs become first-class citizens in your existing tracing UI. diff --git a/apps/docs/scripts/generate-dart-reference.ts b/apps/docs/scripts/generate-dart-reference.ts index 6171c1b47f9..f57cfc8db07 100644 --- a/apps/docs/scripts/generate-dart-reference.ts +++ b/apps/docs/scripts/generate-dart-reference.ts @@ -58,10 +58,10 @@ const OUT_PATH = join(VERSION_DIR, 'supabase_flutter.json') const HEADER_IDS = new Set([ 'auth-api', 'auth-mfa-api', + 'oauth-server-api', 'passkey-api', 'admin-api', 'admin-passkey-api', - 'oauth-server-api', 'admin-custom-providers-api', 'functions-api', 'database-api', diff --git a/apps/docs/spec/supabase_py_v2.yml b/apps/docs/spec/supabase_py_v2.yml index a75006f8135..5b77ff8d10e 100644 --- a/apps/docs/spec/supabase_py_v2.yml +++ b/apps/docs/spec/supabase_py_v2.yml @@ -7517,9 +7517,9 @@ functions: ``` - id: listening-to-row-level-changes name: Listen to row level changes - description: You can listen to individual rows using the format `{table}:{col}=eq.{val}` - where `{col}` is the column name, and `{val}` is the value which you want to match. + description: You can listen to individual rows using the format `{table}:{col}=op.{val}` - where `{col}` is the column name, `{op}` is the filter operator, and `{val}` is the value to match. notes: | - - ``eq`` filter works with all database types as under the hood, it's casting both the filter value and the database value to the correct type and then comparing them. + - Supported operators: ``eq``, ``neq``, ``lt``, ``lte``, ``gt``, ``gte``, ``in`` (e.g. ``"status=in.(active,pending)"``), ``like``, ``ilike``, ``is`` (e.g. ``"deleted_at=is.null"``), ``match``, ``imatch`` (POSIX regex), ``isdistinct`` (NULL-safe inequality). Prefix any operator with ``not.`` to negate it (e.g. ``"status=not.in.(draft,archived)"``). Combine multiple conditions with commas for an implicit ``AND`` (e.g. ``"amount=gt.100,status=in.(open,pending)"``). code: | ```python response = ( @@ -7528,6 +7528,28 @@ functions: .subscribe() ) ``` + - id: listening-to-selected-columns + name: Listen to selected columns only + description: | + Use the `select` parameter to receive only specific columns instead of the full row. + This reduces payload size, which is especially useful for tables with large `bytea` or `jsonb` columns. + code: | + ```python + def handle_record_updated(payload): + print("Updated country:", payload) + + response = ( + await supabase.channel("room1") + .on_postgres_changes( + "UPDATE", + schema="public", + table="countries", + select=["id", "name"], + callback=handle_record_updated, + ) + .subscribe() + ) + ``` - id: broadcast-message title: broadcastMessage() description: | diff --git a/apps/docs/spec/supabase_swift_v2.yml b/apps/docs/spec/supabase_swift_v2.yml index 921e5bde9d5..3c56ac8bc68 100644 --- a/apps/docs/spec/supabase_swift_v2.yml +++ b/apps/docs/spec/supabase_swift_v2.yml @@ -116,6 +116,26 @@ functions: Go to [Settings > API > Exposed schemas](/dashboard/project/_/settings/api) and add the schema which you want to expose to the API. Note: each client connection can only access a single schema, so the code above can access the `other_schema` schema but cannot access the `public` schema. + - id: initialize-client-with-opentelemetry + name: Initialize Client with OpenTelemetry tracing + description: | + Supabase Swift supports W3C `traceparent` header propagation via an opt-in SwiftPM package trait. + When enabled, the active OpenTelemetry span's trace context is automatically injected into every outgoing request across PostgREST, Storage, Auth, Functions, and Realtime β€” no additional runtime configuration needed. + + Enable the `OpenTelemetry` trait in your `Package.swift` dependency declaration: + code: | + ```swift + // Package.swift + .package( + url: "https://github.com/supabase/supabase-swift.git", + from: "2.51.0", + traits: ["OpenTelemetry"] + ) + ``` + notes: | + - Requires swift-tools-version 6.1 or later (trait support). + - The trait is **off by default** β€” no OTel dependency is linked unless you opt in. + - When no span is active, the header is not added; it is always safe to call unconditionally. - id: auth-api title: 'Overview' notes: | diff --git a/supa-mdx-lint/Rule003Spelling.toml b/supa-mdx-lint/Rule003Spelling.toml index 2a830738c95..309dd055091 100644 --- a/supa-mdx-lint/Rule003Spelling.toml +++ b/supa-mdx-lint/Rule003Spelling.toml @@ -404,6 +404,7 @@ allow_list = [ "mTLS", "Supavisor", "SvelteKit", + "SwiftPM", "SwiftUI", "Reddit", "Remapper", From de5d3cd115d88ec21b2542e486b618196c95c781 Mon Sep 17 00:00:00 2001 From: "Andrey A." <56412611+aantti@users.noreply.github.com> Date: Tue, 4 Aug 2026 15:02:30 +0200 Subject: [PATCH 03/83] docs(self-hosted): update manual setup instructions (#48692) --- apps/docs/content/guides/self-hosting/docker.mdx | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/apps/docs/content/guides/self-hosting/docker.mdx b/apps/docs/content/guides/self-hosting/docker.mdx index ab5dc066cf4..a471d369484 100644 --- a/apps/docs/content/guides/self-hosting/docker.mdx +++ b/apps/docs/content/guides/self-hosting/docker.mdx @@ -80,6 +80,7 @@ The script supports Linux only (Debian/Ubuntu and RHEL/CentOS/Fedora) and will: - Install prerequisites (`git`, `openssl`, `jq`) and Docker Engine if not already present - Sparse-clone the `docker/` directory from the main Supabase [repository](https://github.com/supabase/supabase/) - Create a project directory (`supabase-project` by default) and copy the configuration files into it +- Record the installed release version in `.supabase-version` for future `update.sh` upgrades - Prompt for the main URLs (`SUPABASE_PUBLIC_URL`, `API_EXTERNAL_URL`, `SITE_URL`, `PROXY_DOMAIN`) and write them to `.env` - Generate all secrets, including a random `DASHBOARD_PASSWORD`, and the asymmetric JWT signing key pair (runs `generate-keys.sh` and `add-new-auth-keys.sh`, and enables the matching entries in `docker-compose.yml`) - Pull the Docker images @@ -105,7 +106,7 @@ Not on Linux, or want to do it manually? See [Manual installation](#manual-insta ### Manual installation -This path gets the Docker Compose configuration onto your server; you'll configure secrets, keys, and URLs in the [next section](#configuring-and-securing-supabase). +This path gets the Docker Compose configuration onto your server, pinned to a specific tag. You'll set up secrets, keys, and URLs in the [next section](#configuring-and-securing-supabase). For a newer release, use the [latest tag](https://github.com/supabase/supabase/tags). .supabase-version + # Pull the latest images docker compose pull ``` @@ -149,7 +153,7 @@ Only downloads the `docker/` directory from the repository, saving bandwidth and ```sh # Get the code using git sparse checkout -git clone --filter=blob:none --no-checkout --depth=1 --quiet https://github.com/supabase/supabase +git clone --filter=blob:none --no-checkout --depth=1 --quiet --branch self-hosted/v0.7.1 https://github.com/supabase/supabase cd supabase git sparse-checkout init --cone git sparse-checkout set docker @@ -170,6 +174,9 @@ cp -rf supabase/docker/. supabase-project # Switch to the project directory and create a .env from the example cd supabase-project && cp .env.example .env +# Record the base version so update.sh can upgrade this install later +printf 'ref=self-hosted/v0.7.1\n' > .supabase-version + # Pull the latest images docker compose pull ``` From b3c5c9fc049051ca656d732872497f41521e7364 Mon Sep 17 00:00:00 2001 From: Charis <26616127+charislam@users.noreply.github.com> Date: Tue, 4 Aug 2026 09:02:39 -0400 Subject: [PATCH 04/83] feat(studio): logs snippets in SQL editor nav, search, and tabs (#48457) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What PR 7 of the SQL-editor query-source (Database vs Logs) stack. Surfaces `log_sql` snippets as a distinct query source across the SQL editor sidebar. Stacked on **`charislam/toolbar-ui-creation-flow`** (PR 6 β€” toolbar UI + creation flow); review/merge that first. Nothing is user-visible until the flags roll out β€” every entry point requires **both** `sqlEditorLogsSource` **and** `otelLegacyLogs`. ## Changes - **Nav** β€” a flag-gated **Logs** section (`LogsSnippetsSection`) backed by its own single-type `log_sql` query. The active snippet is injected only into the section it belongs to, via a shared `withActiveSnippet(snippets, active, belongsPredicate)` helper (also DRYs the private/favorites/shared injections). - **Search** (`SearchList`) β€” a **Logs** result group with a shared, extracted `SqlSnippetTree`; the "N results found" count now sums database + logs, with loading/empty states covering both queries. - **Tabs** β€” an immutable `sqlSource` field on tab/recent-item metadata (set at tab creation, lazily backfilled once the snippet loads via `useEffectEvent`), and a distinct `ScrollText` icon via a shared `LogsSnippetIcon`. Tab cleanup treats `log_sql` tabs as live and only prunes them when logs data is authoritative (`canPruneLogsTabs`), so a disabled/erroring logs query never wrongly deletes logs tabs or blocks database-tab cleanup. - **Data layer** β€” `useSqlSnippetsQuery` gains an optional `type` param so logs reuse the same `SnippetWithContent` shape as the other sections (no casts). ## Tests - `state/tabs.test.ts` β€” `sqlSource` backfill + creation-time carry-through. - `components/layouts/Tabs/Tabs.utils.test.tsx` β€” cleanup prunes stale database/logs snippets, keeps live ones, and preserves logs tabs when logs data isn't authoritative. ## Verification - `pnpm --filter studio typecheck` βœ“ - `pnpm --filter studio run lint:ratchet` βœ“ - `pnpm test:studio` (affected suites) βœ“ ## Summary by CodeRabbit * **New Features** * Added a collapsible Logs section to the SQL editor sidebar for browsing, sorting, selecting, renaming, and deleting log queries. * Expanded SQL search with separate, paginated results for database and log queries. * Added dedicated log-query icons across navigation, tabs, previews, and recent items. * **Bug Fixes** * Improved tab and recent-item cleanup while preserving active log queries and accurate source metadata. * **Tests** * Added coverage for log tab cleanup and SQL source metadata synchronization. --- .../SQLEditorNavV2/LogsSnippetsSection.tsx | 136 ++++++++++++ .../SQLEditorNavV2/SQLEditorNav.constants.ts | 2 + .../SQLEditorNavV2/SQLEditorNav.tsx | 115 ++++++++-- .../SQLEditorNavV2/SQLEditorNav.utils.ts | 21 ++ .../SQLEditorNavV2/SQLEditorTreeViewItem.tsx | 11 + .../SQLEditorNavV2/SearchList.tsx | 203 ++++++++++-------- .../SQLEditorNavV2/SqlSnippetTree.tsx | 122 +++++++++++ .../components/layouts/Tabs/RecentItems.tsx | 2 +- .../components/layouts/Tabs/SortableTab.tsx | 2 +- .../components/layouts/Tabs/TabPreview.tsx | 2 +- .../layouts/Tabs/Tabs.utils.test.tsx | 91 ++++++++ .../components/layouts/Tabs/Tabs.utils.ts | 93 +++++--- apps/studio/components/ui/EntityTypeIcon.tsx | 41 +++- apps/studio/data/content/keys.ts | 1 + .../studio/data/content/sql-snippets-query.ts | 22 +- apps/studio/pages/project/[ref]/sql/[id].tsx | 25 ++- apps/studio/state/tabs.test.ts | 40 ++++ apps/studio/state/tabs.tsx | 51 +++-- 18 files changed, 805 insertions(+), 175 deletions(-) create mode 100644 apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/LogsSnippetsSection.tsx create mode 100644 apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SqlSnippetTree.tsx create mode 100644 apps/studio/components/layouts/Tabs/Tabs.utils.test.tsx diff --git a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/LogsSnippetsSection.tsx b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/LogsSnippetsSection.tsx new file mode 100644 index 00000000000..1caf2bff1f9 --- /dev/null +++ b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/LogsSnippetsSection.tsx @@ -0,0 +1,136 @@ +import { keepPreviousData } from '@tanstack/react-query' +import { useParams } from 'common' +import { useEffect, useMemo } from 'react' +import { + InnerSideBarEmptyPanel, + InnerSideMenuCollapsible, + InnerSideMenuCollapsibleContent, + InnerSideMenuCollapsibleTrigger, +} from 'ui-patterns/InnerSideMenu' + +import { SQLEditorLoadingSnippets } from './SQLEditorLoadingSnippets' +import { + formatFolderResponseForTreeView, + getLastItemIds, + ROOT_NODE, + withActiveSnippet, +} from './SQLEditorNav.utils' +import { SqlSnippetTree } from './SqlSnippetTree' +import { getSnippetSource } from '@/components/interfaces/SQLEditor/querySource' +import { useContentCountQuery } from '@/data/content/content-count-query' +import { Snippet } from '@/data/content/sql-folders-query' +import { useSqlSnippetsQuery } from '@/data/content/sql-snippets-query' +import { useLatest } from '@/hooks/misc/useLatest' + +interface LogsSnippetsSectionProps { + open: boolean + onOpenChange: (open: boolean) => void + sort: 'inserted_at' | 'name' + /** The currently open snippet, surfaced in the list before the query fetches it. */ + activeSnippet?: Snippet + selectedSnippetIds: string[] + /** Bubbles loaded logs snippets up for tab cleanup, mirroring onFolderContentsChange. */ + onSnippetsLoaded: (info: { + snippets: Snippet[] + /** + * Whether `snippets` is the complete set of logs snippets. Only true once every + * page has been fetched β€” cleanup prunes tabs whose snippet is absent from the + * list, and a snippet on an unfetched page would otherwise look deleted. + */ + isComplete: boolean + isSettled: boolean + }) => void + onSelectDelete: (snippet: Snippet) => void + onSelectRename: (snippet: Snippet) => void +} + +/** + * A separate single-type `log_sql` query β€” logs snippets are a distinct backend and + * don't participate in folders, so they get their own flat section rather than merging + * with the cursor-paginated `sql` sections. + */ +export const LogsSnippetsSection = ({ + open, + onOpenChange, + sort, + activeSnippet, + selectedSnippetIds, + onSnippetsLoaded, + onSelectDelete, + onSelectRename, +}: LogsSnippetsSectionProps) => { + const { ref: projectRef } = useParams() + + const { data, isLoading, isSuccess, isError, hasNextPage, fetchNextPage, isFetchingNextPage } = + useSqlSnippetsQuery( + { projectRef, type: 'log_sql', sort }, + { placeholderData: keepPreviousData } + ) + + const { data: countData } = useContentCountQuery({ projectRef, type: 'log_sql' }) + const numSnippets = (countData?.private ?? 0) + (countData?.shared ?? 0) + + const snippets = useMemo(() => { + const pageSnippets = data?.pages.flatMap((page) => page.contents ?? []) ?? [] + + return withActiveSnippet( + pageSnippets, + activeSnippet, + (s) => getSnippetSource(s) === 'logs' + ) + .map((x) => ({ ...x, folder_id: null })) + .sort((a, b) => { + if (sort === 'name') return a.name.localeCompare(b.name) + return new Date(b.inserted_at).valueOf() - new Date(a.inserted_at).valueOf() + }) + }, [data?.pages, activeSnippet, sort]) + + const treeState = useMemo( + () => + snippets.length === 0 + ? [ROOT_NODE] + : formatFolderResponseForTreeView({ contents: snippets, folders: [] }), + [snippets] + ) + const lastItemIds = useMemo(() => getLastItemIds(treeState), [treeState]) + + const onSnippetsLoadedRef = useLatest(onSnippetsLoaded) + useEffect(() => { + onSnippetsLoadedRef.current({ + snippets, + isComplete: isSuccess && !hasNextPage, + isSettled: isSuccess || isError, + }) + }, [snippets, isSuccess, isError, hasNextPage]) + + return ( + + 0 ? ` (${numSnippets})` : ''}`} + /> + + {isLoading && } + {!isLoading && snippets.length === 0 && ( + + )} + {!isLoading && snippets.length > 0 && ( + + )} + + + ) +} diff --git a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorNav.constants.ts b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorNav.constants.ts index 72f80c44725..623bc4119c4 100644 --- a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorNav.constants.ts +++ b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorNav.constants.ts @@ -2,6 +2,7 @@ export type SectionState = { shared: boolean favorite: boolean private: boolean + logs: boolean community: boolean } @@ -9,5 +10,6 @@ export const DEFAULT_SECTION_STATE: SectionState = { shared: false, favorite: false, private: true, + logs: false, community: true, } diff --git a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorNav.tsx b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorNav.tsx index 9a536480ccb..57ef4715aea 100644 --- a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorNav.tsx +++ b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorNav.tsx @@ -1,5 +1,5 @@ import { keepPreviousData } from '@tanstack/react-query' -import { IS_PLATFORM, LOCAL_STORAGE_KEYS, useParams } from 'common' +import { IS_PLATFORM, LOCAL_STORAGE_KEYS, useFlag, useParams } from 'common' import { Heart } from 'lucide-react' import { useRouter } from 'next/router' import { useEffect, useMemo, useState } from 'react' @@ -15,15 +15,22 @@ import { } from 'ui-patterns/InnerSideMenu' import { DeleteSnippetsModal } from './DeleteSnippetsModal' +import { LogsSnippetsSection } from './LogsSnippetsSection' import { ReferenceSnippetsSection } from './ReferenceSnippetsSection' import { ShareSnippetModal } from './ShareSnippetModal' import { SQLEditorLoadingSnippets } from './SQLEditorLoadingSnippets' import { DEFAULT_SECTION_STATE, type SectionState } from './SQLEditorNav.constants' -import { formatFolderResponseForTreeView, getLastItemIds, ROOT_NODE } from './SQLEditorNav.utils' +import { + formatFolderResponseForTreeView, + getLastItemIds, + ROOT_NODE, + withActiveSnippet, +} from './SQLEditorNav.utils' import { SQLEditorTreeViewItem } from './SQLEditorTreeViewItem' import { UnshareSnippetModal } from './UnshareSnippetModal' import { DownloadSnippetModal } from '@/components/interfaces/SQLEditor/DownloadSnippetModal' import { MoveQueryModal } from '@/components/interfaces/SQLEditor/MoveQueryModal' +import { getSnippetSource } from '@/components/interfaces/SQLEditor/querySource' import { RenameQueryModal } from '@/components/interfaces/SQLEditor/RenameQueryModal' import { generateSnippetTitle } from '@/components/interfaces/SQLEditor/SQLEditor.constants' import { createSqlSnippetSkeletonV2 } from '@/components/interfaces/SQLEditor/SQLEditor.utils' @@ -65,8 +72,16 @@ export const SQLEditorNav = ({ sort = 'inserted_at' }: SQLEditorNavProps) => { shared: showSharedSnippets, favorite: showFavoriteSnippets, private: showPrivateSnippets, + logs: showLogsSnippets, } = sectionVisibility + // Both flags gate the entry point: `sqlEditorLogsSource` enables the feature and + // `otelLegacyLogs` confirms the org's logs live in the ClickHouse backend a logs + // snippet queries. + const isLogsSourceEnabled = useFlag('sqlEditorLogsSource') + const isOtelLogsEnabled = useFlag('otelLegacyLogs') + const canShowLogsSection = isLogsSourceEnabled && isOtelLogsEnabled + const [showMoveModal, setShowMoveModal] = useState(false) const [showDeleteModal, setShowDeleteModal] = useState(false) const [showRenameModal, setShowRenameModal] = useState(false) @@ -131,10 +146,11 @@ export const SQLEditorNav = ({ sort = 'inserted_at' }: SQLEditorNavProps) => { } ) - if (snippet && snippet.visibility === 'user' && !snippetInfo.snippetIds.has(snippet.id)) { - snippetInfo.snippetIds.add(snippet.id) - snippetInfo.snippets = [...snippetInfo.snippets, snippet] - } + snippetInfo.snippets = withActiveSnippet( + snippetInfo.snippets, + snippet, + (s) => s.visibility === 'user' && getSnippetSource(s) !== 'logs' + ) return snippetInfo }, [privateSnippetsPages?.pages, subResults, isLoading, isPlaceholderData, isFetching, snippet]) @@ -204,11 +220,11 @@ export const SQLEditorNav = ({ sort = 'inserted_at' }: SQLEditorNavProps) => { ) const favoriteSnippets = useMemo(() => { - let snippets = favoriteSqlSnippetsData?.pages.flatMap((page) => page.contents ?? []) ?? [] - - if (snippet && snippet.favorite && !snippets.find((x) => x.id === snippet.id)) { - snippets.push(snippet) - } + const snippets = withActiveSnippet( + favoriteSqlSnippetsData?.pages.flatMap((page) => page.contents ?? []) ?? [], + snippet, + (s) => !!s.favorite && getSnippetSource(s) !== 'logs' + ) return ( snippets @@ -255,11 +271,11 @@ export const SQLEditorNav = ({ sort = 'inserted_at' }: SQLEditorNavProps) => { ) const sharedSnippets = useMemo(() => { - let snippets = sharedSqlSnippetsData?.pages.flatMap((page) => page.contents ?? []) ?? [] - - if (snippet && snippet.visibility === 'project' && !snippets.find((x) => x.id === snippet.id)) { - snippets.push(snippet) - } + const snippets = withActiveSnippet( + sharedSqlSnippetsData?.pages.flatMap((page) => page.contents ?? []) ?? [], + snippet, + (s) => s.visibility === 'project' && getSnippetSource(s) !== 'logs' + ) return ( snippets.sort((a, b) => { @@ -284,12 +300,21 @@ export const SQLEditorNav = ({ sort = 'inserted_at' }: SQLEditorNavProps) => { [projectSnippetsTreeState] ) + // The Logs section owns its own query and bubbles loaded snippets here so tab + // cleanup treats them as live (and prunes stale ones). + const [logsSnippetsInView, setLogsSnippetsInView] = useState<{ + snippets: Snippet[] + isComplete: boolean + isSettled: boolean + }>({ snippets: [], isComplete: false, isSettled: false }) + const allSnippetsInView = useMemo( () => [ - ...(privateSnippetsPages?.pages.flatMap((x) => x.contents) ?? []), - ...(sharedSqlSnippetsData?.pages.flatMap((x) => x.contents) ?? []), + ...(privateSnippetsPages?.pages.flatMap((x) => x.contents ?? []) ?? []), + ...(sharedSqlSnippetsData?.pages.flatMap((x) => x.contents ?? []) ?? []), + ...logsSnippetsInView.snippets, ], - [privateSnippetsPages, sharedSqlSnippetsData] + [privateSnippetsPages, sharedSqlSnippetsData, logsSnippetsInView.snippets] ) // ========================== @@ -404,7 +429,12 @@ export const SQLEditorNav = ({ sort = 'inserted_at' }: SQLEditorNavProps) => { useEffect(() => { if (snippet !== undefined && isSuccess) { - if (snippet.visibility === 'project') { + // Source is checked before visibility: a logs snippet lives in the Logs section + // whatever its visibility, so branching on visibility first would open Private + // (or Shared) and leave the section the snippet is actually in collapsed. + if (getSnippetSource(snippet) === 'logs') { + setSectionVisibility({ ...sectionVisibility, logs: true }) + } else if (snippet.visibility === 'project') { setSectionVisibility({ ...sectionVisibility, shared: true }) } else if (snippet.visibility === 'user') { setSectionVisibility({ ...sectionVisibility, private: true }) @@ -457,10 +487,24 @@ export const SQLEditorNav = ({ sort = 'inserted_at' }: SQLEditorNavProps) => { const sqlEditorTabsCleanup = useSqlEditorTabsCleanup() useEffect(() => { - if (isSuccess) { - sqlEditorTabsCleanup({ snippets: allSnippetsInView as any }) + // Wait for the logs query to settle (when enabled) so a logs failure doesn't + // freeze database-tab cleanup. Logs tabs are only prunable once every logs page + // has been fetched β€” until then the list is partial and a tab whose snippet sits + // on an unfetched page would be pruned as stale, so they're preserved instead. + if (isSuccess && (!canShowLogsSection || logsSnippetsInView.isSettled)) { + sqlEditorTabsCleanup({ + snippets: allSnippetsInView, + canPruneLogsTabs: canShowLogsSection && logsSnippetsInView.isComplete, + }) } - }, [allSnippetsInView, isSuccess, sqlEditorTabsCleanup]) + }, [ + allSnippetsInView, + isSuccess, + canShowLogsSection, + logsSnippetsInView.isComplete, + logsSnippetsInView.isSettled, + sqlEditorTabsCleanup, + ]) return ( <> @@ -757,6 +801,31 @@ export const SQLEditorNav = ({ sort = 'inserted_at' }: SQLEditorNavProps) => { + {canShowLogsSection && ( + <> + + setSectionVisibility({ ...(sectionVisibility ?? DEFAULT_SECTION_STATE), logs: value }) + } + sort={sort} + activeSnippet={snippet} + selectedSnippetIds={selectedSnippets.map((x) => x.id)} + onSnippetsLoaded={setLogsSnippetsInView} + onSelectDelete={(snippet) => { + setShowDeleteModal(true) + setSelectedSnippets([snippet]) + }} + onSelectRename={(snippet) => { + setShowRenameModal(true) + setSelectedSnippetToRename(snippet) + }} + /> + + + + )} + diff --git a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorNav.utils.ts b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorNav.utils.ts index 65f8dbd2861..f0f12761928 100644 --- a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorNav.utils.ts +++ b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorNav.utils.ts @@ -53,6 +53,27 @@ export const formatFolderResponseForTreeView = ( return [root, ...formattedFolders, ...formattedContents] } +/** + * Append the active snippet to a section's list when it belongs there (per the + * section's predicate) and isn't already present. Each nav section lists + * server-filtered pages, so a just-opened or just-created snippet may not appear + * until a refetch β€” this surfaces it immediately, in the one section it belongs to. + */ +export function withActiveSnippet( + snippets: T[], + activeSnippet: T | undefined, + belongsInSection: (snippet: T) => boolean +): T[] { + if ( + activeSnippet !== undefined && + belongsInSection(activeSnippet) && + !snippets.some((snippet) => snippet.id === activeSnippet.id) + ) { + return [...snippets, activeSnippet] + } + return snippets +} + export function getLastItemIds(items: TreeViewItemProps[]) { let lastItemIds = new Set() diff --git a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorTreeViewItem.tsx b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorTreeViewItem.tsx index 21ae2a5e129..615eecc6aad 100644 --- a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorTreeViewItem.tsx +++ b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorTreeViewItem.tsx @@ -30,6 +30,7 @@ import { import { getSnippetSource } from '@/components/interfaces/SQLEditor/querySource' import { createSqlSnippetSkeletonV2 } from '@/components/interfaces/SQLEditor/SQLEditor.utils' +import { LogsSnippetIcon } from '@/components/ui/EntityTypeIcon' import { getContentById, getSqlSnippetById } from '@/data/content/content-id-query' import { useSQLSnippetFolderContentsQuery } from '@/data/content/sql-folder-contents-query' import { Snippet } from '@/data/content/sql-folders-query' @@ -111,6 +112,8 @@ export const SQLEditorTreeViewItem = ({ const isSharedSnippet = element.metadata.visibility === 'project' const isFavorite = element.metadata.favorite + const isLogsSnippet = getSnippetSource(element.metadata) === 'logs' + const isEditing = isFolderEditing(status) const isSaving = isFolderSaving(status) @@ -247,6 +250,14 @@ export const SQLEditorTreeViewItem = ({ isPreview={props.isPreview} isEditing={isEditing} isLoading={(isEnabled && isLoading) || isSaving} + icon={ + isLogsSnippet ? ( + + ) : undefined + } onEditSubmit={(value) => { if (onEditSave !== undefined) onEditSave(value) }} diff --git a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SearchList.tsx b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SearchList.tsx index 9d6a349b730..a9a9c89f336 100644 --- a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SearchList.tsx +++ b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SearchList.tsx @@ -1,29 +1,45 @@ import { keepPreviousData } from '@tanstack/react-query' -import { useParams } from 'common' +import { useFlag, useParams } from 'common' import { Loader2 } from 'lucide-react' import { useMemo, useState } from 'react' -import { TreeView } from 'ui' import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader' import { DeleteSnippetsModal } from './DeleteSnippetsModal' import { ShareSnippetModal } from './ShareSnippetModal' import { formatFolderResponseForTreeView, getLastItemIds } from './SQLEditorNav.utils' -import { SQLEditorTreeViewItem } from './SQLEditorTreeViewItem' +import { SqlSnippetTree } from './SqlSnippetTree' import { UnshareSnippetModal } from './UnshareSnippetModal' import { DownloadSnippetModal } from '@/components/interfaces/SQLEditor/DownloadSnippetModal' import { RenameQueryModal } from '@/components/interfaces/SQLEditor/RenameQueryModal' import { useContentCountQuery } from '@/data/content/content-count-query' -import { useContentInfiniteQuery } from '@/data/content/content-infinite-query' -import { Snippet, SNIPPET_PAGE_LIMIT } from '@/data/content/sql-folders-query' -import { createTabId, useTabsStateSnapshot } from '@/state/tabs' +import { Snippet } from '@/data/content/sql-folders-query' +import { useSqlSnippetsQuery } from '@/data/content/sql-snippets-query' interface SearchListProps { search: string } +/** Uppercase section heading shown above the Database and Logs result groups. */ +const SearchGroupHeading = ({ children }: { children: string }) => ( +

{children}

+) + +/** + * Flatten paginated snippet results into the flat (folderless) tree the search view + * renders. Keyed on `pages` (a stable reference from React Query) so the flatMap and + * tree build run once per data change rather than on every render. + */ +function useSnippetSearchTree(pages: { contents: Snippet[] }[] | undefined) { + return useMemo(() => { + const flat = (pages ?? []) + .flatMap((page) => page.contents ?? []) + .map((snippet) => ({ ...snippet, folder_id: null })) + const treeState = formatFolderResponseForTreeView({ folders: [], contents: flat }) + return { treeState, lastItemIds: getLastItemIds(treeState), count: flat.length } + }, [pages]) +} + export const SearchList = ({ search }: SearchListProps) => { - const { id } = useParams() - const tabs = useTabsStateSnapshot() const { ref: projectRef } = useParams() const [selectedSnippetToShare, setSelectedSnippetToShare] = useState() @@ -32,120 +48,121 @@ export const SearchList = ({ search }: SearchListProps) => { const [selectedSnippetToRename, setSelectedSnippetToRename] = useState() const [selectedSnippetToDelete, setSelectedSnippetToDelete] = useState() + // Logs snippets are a separate backend and don't share the `sql` cursor, so the + // search runs a second single-type query and renders them under their own group. + // Gated by both flags, mirroring the nav's Logs section. + const isLogsSourceEnabled = useFlag('sqlEditorLogsSource') + const isOtelLogsEnabled = useFlag('otelLegacyLogs') + const canShowLogsSection = isLogsSourceEnabled && isOtelLogsEnabled + + const searchName = search.length === 0 ? undefined : search + const { data, isPending: isLoading, hasNextPage, fetchNextPage, isFetchingNextPage, - } = useContentInfiniteQuery( - { - projectRef, - type: 'sql', - limit: SNIPPET_PAGE_LIMIT, - name: search.length === 0 ? undefined : search, - }, + } = useSqlSnippetsQuery( + { projectRef, type: 'sql', name: searchName }, { placeholderData: keepPreviousData } ) const { data: count, isPending: isLoadingCount } = useContentCountQuery( - { - projectRef, - type: 'sql', - name: search, - }, + { projectRef, type: 'sql', name: search }, { placeholderData: keepPreviousData } ) - const totalNumber = count ? count.private + count.shared : 0 - const snippets = useMemo( - // [Joshen] Set folder_id to null to ensure flat list - () => data?.pages.flatMap((page) => page.content.map((x) => ({ ...x, folder_id: null }))), - [data?.pages] + const { data: logsCount, isPending: isLoadingLogsCount } = useContentCountQuery( + { projectRef, type: 'log_sql', name: search }, + { enabled: canShowLogsSection, placeholderData: keepPreviousData } ) - const treeState = formatFolderResponseForTreeView({ folders: [], contents: snippets as any }) - const snippetsLastItemIds = useMemo(() => getLastItemIds(treeState), [treeState]) + const databaseCount = count ? count.private + count.shared : 0 + const logsResultCount = canShowLogsSection && logsCount ? logsCount.private + logsCount.shared : 0 + const totalNumber = databaseCount + logsResultCount + const isLoadingCounts = isLoadingCount || (canShowLogsSection && isLoadingLogsCount) + const hasCounts = count !== undefined || (canShowLogsSection && logsCount !== undefined) + + const { + data: logsData, + isPending: isLoadingLogs, + hasNextPage: hasNextLogsPage, + fetchNextPage: fetchNextLogsPage, + isFetchingNextPage: isFetchingNextLogsPage, + } = useSqlSnippetsQuery( + { projectRef, type: 'log_sql', name: searchName }, + { enabled: canShowLogsSection, placeholderData: keepPreviousData } + ) + + const databaseTree = useSnippetSearchTree(data?.pages) + const logsTree = useSnippetSearchTree(logsData?.pages) + const hasDatabaseResults = databaseTree.count > 0 + const hasLogsResults = logsTree.count > 0 + // Label the groups only when both are present; a single group needs no heading. + const showGroupHeadings = hasDatabaseResults && hasLogsResults + // The results body is loading until both source queries (when enabled) settle. + const isSearchLoading = isLoading || (canShowLogsSection && isLoadingLogs) return ( <>
- {isLoadingCount ? ( + {isLoadingCounts && (
- ) : !!count ? ( + )} + {!isLoadingCounts && hasCounts && (

- {totalNumber} result{totalNumber > 1 ? 's' : ''} found + {totalNumber} result{totalNumber === 1 ? '' : 's'} found

- ) : null} - {isLoading ? ( + )} + {isSearchLoading && (
- ) : ( - { - const isOpened = Object.values(tabs.tabsMap).some( - (tab) => tab.metadata?.sqlId === element.metadata?.id - ) - const tabId = createTabId('sql', { - id: element?.metadata?.id as unknown as Snippet['id'], - }) - const isPreview = tabs.previewTabId === tabId - const isActive = !isPreview && element.metadata?.id === id - const visibility = - element.metadata?.visibility === 'user' - ? 'Private' - : element.metadata?.visibility === 'project' - ? 'Shared' - : undefined - - return ( - - {element.name} - {!!visibility && ( - {visibility} - )} - - ), - }} - nameForTitle={element.name} - isBranch={false} - isOpened={isOpened && !isPreview} - isSelected={isActive} - isPreview={isPreview} - isLastItem={snippetsLastItemIds.has(element.id as string)} - status="idle" - className="items-start h-[40px] [&>svg]:translate-y-0.5" - onSelectDelete={() => setSelectedSnippetToDelete(element.metadata as Snippet)} - onSelectRename={() => setSelectedSnippetToRename(element.metadata as Snippet)} - onSelectDownload={() => setSelectedSnippetToDownload(element.metadata as Snippet)} - onSelectShare={() => setSelectedSnippetToShare(element.metadata as Snippet)} - onSelectUnshare={() => setSelectedSnippetToUnshare(element.metadata as Snippet)} - hasNextPage={hasNextPage} - fetchNextPage={fetchNextPage} - isFetchingNextPage={isFetchingNextPage} - onDoubleClick={(e) => { - e.preventDefault() - tabs.makeTabPermanent(tabId) - }} - /> - ) - }} - /> + )} + {!isSearchLoading && !hasDatabaseResults && !hasLogsResults && ( +

No queries found

+ )} + {!isSearchLoading && hasDatabaseResults && ( + <> + {showGroupHeadings && Database} + + + )} + {!isSearchLoading && canShowLogsSection && hasLogsResults && ( + <> + {showGroupHeadings && Logs} + + )}
diff --git a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SqlSnippetTree.tsx b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SqlSnippetTree.tsx new file mode 100644 index 00000000000..4ee68e623c2 --- /dev/null +++ b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SqlSnippetTree.tsx @@ -0,0 +1,122 @@ +import { useParams } from 'common' +import { TreeView } from 'ui' + +import type { TreeViewItemProps } from './SQLEditorNav.utils' +import { SQLEditorTreeViewItem } from './SQLEditorTreeViewItem' +import { getSnippetSource } from '@/components/interfaces/SQLEditor/querySource' +import { Snippet } from '@/data/content/sql-folders-query' +import { createTabId, useTabsStateSnapshot } from '@/state/tabs' + +interface SqlSnippetTreeProps { + ariaLabel: string + data: TreeViewItemProps[] + lastItemIds: Set + /** Additional (multi-)selected snippet ids to highlight beyond the active one. */ + selectedSnippetIds?: string[] + /** Search results show a source/visibility sublabel under each snippet name. */ + showVisibility?: boolean + itemClassName?: string + hasNextPage?: boolean + fetchNextPage?: () => void + isFetchingNextPage?: boolean + onSelectDelete?: (snippet: Snippet) => void + onSelectRename?: (snippet: Snippet) => void + onSelectDownload?: (snippet: Snippet) => void + onSelectShare?: (snippet: Snippet) => void + onSelectUnshare?: (snippet: Snippet) => void +} + +/** + * The sublabel under a snippet's name. Logs snippets are labeled by source rather + * than visibility: they have no share action, so "Private" says nothing that + * distinguishes them from the database query sitting right above them in the + * same result list, while "Logs" does. + */ +const snippetSublabel = (snippet: Snippet) => { + if (getSnippetSource(snippet) === 'logs') return 'Logs' + if (snippet.visibility === 'user') return 'Private' + if (snippet.visibility === 'project') return 'Shared' + return undefined +} + +export const SqlSnippetTree = ({ + ariaLabel, + data, + lastItemIds, + selectedSnippetIds, + showVisibility = false, + itemClassName, + hasNextPage, + fetchNextPage, + isFetchingNextPage, + onSelectDelete, + onSelectRename, + onSelectDownload, + onSelectShare, + onSelectUnshare, +}: SqlSnippetTreeProps) => { + const { id } = useParams() + const tabs = useTabsStateSnapshot() + + return ( + { + const snippet = element.metadata as Snippet + const isOpened = Object.values(tabs.tabsMap).some( + (tab) => tab.metadata?.sqlId === snippet.id + ) + const tabId = createTabId('sql', { id: snippet.id }) + const isPreview = tabs.previewTabId === tabId + const isActive = !isPreview && snippet.id === id + const isSelected = isActive || (selectedSnippetIds?.includes(snippet.id) ?? false) + const sublabel = showVisibility ? snippetSublabel(snippet) : undefined + + return ( + + {element.name} + {!!sublabel && ( + {sublabel} + )} + + ), + } + : element + } + nameForTitle={showVisibility ? (element.name as string) : undefined} + isBranch={false} + isOpened={isOpened && !isPreview} + isSelected={isSelected} + isPreview={isPreview} + isLastItem={lastItemIds.has(element.id as string)} + status="idle" + className={itemClassName} + onSelectDelete={onSelectDelete ? () => onSelectDelete(snippet) : undefined} + onSelectRename={onSelectRename ? () => onSelectRename(snippet) : undefined} + onSelectDownload={onSelectDownload ? () => onSelectDownload(snippet) : undefined} + onSelectShare={onSelectShare ? () => onSelectShare(snippet) : undefined} + onSelectUnshare={onSelectUnshare ? () => onSelectUnshare(snippet) : undefined} + hasNextPage={hasNextPage} + fetchNextPage={fetchNextPage} + isFetchingNextPage={isFetchingNextPage} + onDoubleClick={(e) => { + e.preventDefault() + tabs.makeTabPermanent(tabId) + }} + /> + ) + }} + /> + ) +} diff --git a/apps/studio/components/layouts/Tabs/RecentItems.tsx b/apps/studio/components/layouts/Tabs/RecentItems.tsx index 165dd480436..2bae3f19acb 100644 --- a/apps/studio/components/layouts/Tabs/RecentItems.tsx +++ b/apps/studio/components/layouts/Tabs/RecentItems.tsx @@ -71,7 +71,7 @@ export function RecentItems() { className="flex items-center gap-4 rounded-lg bg-surface-100 py-2 transition-colors hover:bg-surface-200" >
- +
diff --git a/apps/studio/components/layouts/Tabs/SortableTab.tsx b/apps/studio/components/layouts/Tabs/SortableTab.tsx index c66a3a003a1..8c3eccdd38c 100644 --- a/apps/studio/components/layouts/Tabs/SortableTab.tsx +++ b/apps/studio/components/layouts/Tabs/SortableTab.tsx @@ -104,7 +104,7 @@ export const SortableTab = ({ )} {...listeners} > - +
{shouldShowSchema && ( diff --git a/apps/studio/components/layouts/Tabs/TabPreview.tsx b/apps/studio/components/layouts/Tabs/TabPreview.tsx index f2fa1073a0c..ef5825f49ba 100644 --- a/apps/studio/components/layouts/Tabs/TabPreview.tsx +++ b/apps/studio/components/layouts/Tabs/TabPreview.tsx @@ -17,7 +17,7 @@ export const TabPreview = ({ tab }: { tab: string }) => { animate={{ opacity: 0.7 }} className="flex relative items-center gap-2 px-3 text-xs bg-dash-sidebar dark:bg-surface-100 shadow-lg rounded-xs h-10" > - + {tabData.label || 'Untitled'}
diff --git a/apps/studio/components/layouts/Tabs/Tabs.utils.test.tsx b/apps/studio/components/layouts/Tabs/Tabs.utils.test.tsx new file mode 100644 index 00000000000..8bb69423320 --- /dev/null +++ b/apps/studio/components/layouts/Tabs/Tabs.utils.test.tsx @@ -0,0 +1,91 @@ +import { act, renderHook } from '@testing-library/react' +import type { ReactNode } from 'react' +import { describe, expect, it } from 'vitest' + +import { useSqlEditorTabsCleanup } from './Tabs.utils' +import { createTabsState, TabsStateContext, type Tab } from '@/state/tabs' + +const dbTab = (id: string): Tab => ({ + id: `sql-${id}`, + type: 'sql', + label: id, + isPreview: false, + metadata: { sqlId: id, sqlSource: 'database' }, +}) + +const logsTab = (id: string): Tab => ({ + id: `sql-${id}`, + type: 'sql', + label: id, + isPreview: false, + metadata: { sqlId: id, sqlSource: 'logs' }, +}) + +function renderCleanup(store: ReturnType) { + const wrapper = ({ children }: { children: ReactNode }) => ( + {children} + ) + return renderHook(() => useSqlEditorTabsCleanup(), { wrapper }).result.current +} + +describe('useSqlEditorTabsCleanup', () => { + it('prunes tabs for deleted snippets (database and logs) while keeping live ones', () => { + const store = createTabsState('default') + store.addTab(dbTab('db-stale')) + store.addTab(logsTab('logs-stale')) + store.addTab(logsTab('logs-live')) + + const cleanup = renderCleanup(store) + + // The caller passes both `sql` and `log_sql` snippets it knows to be live; only + // `logs-live` is present, so the two stale tabs are pruned and it is kept. + act(() => cleanup({ snippets: [{ id: 'logs-live', type: 'log_sql', name: 'logs-live' }] })) + + expect(store.openTabs).toEqual(['sql-logs-live']) + expect(store.tabsMap['sql-db-stale']).toBeUndefined() + expect(store.tabsMap['sql-logs-stale']).toBeUndefined() + expect(store.tabsMap['sql-logs-live']).toBeDefined() + }) + + it('keeps a logs tab that still exists in the snippet list', () => { + const store = createTabsState('default') + store.addTab(logsTab('logs')) + + const cleanup = renderCleanup(store) + act(() => cleanup({ snippets: [{ id: 'logs', type: 'log_sql', name: 'logs' }] })) + + expect(store.openTabs).toEqual(['sql-logs']) + }) + + it('preserves logs tabs when logs snippets are not authoritative (canPruneLogsTabs false)', () => { + const store = createTabsState('default') + store.addTab(dbTab('db-stale')) + store.addTab(logsTab('logs')) + + const cleanup = renderCleanup(store) + // Logs section disabled / query errored: no logs snippets passed, and logs tabs + // must not be pruned β€” but stale database tabs still are. + act(() => cleanup({ snippets: [], canPruneLogsTabs: false })) + + expect(store.openTabs).toEqual(['sql-logs']) + expect(store.tabsMap['sql-db-stale']).toBeUndefined() + + // Recent items carry their own logs-source condition, so assert them separately. + const recentIds = store.recentItems.map((item) => item.id) + expect(recentIds).toContain('sql-logs') + expect(recentIds).not.toContain('sql-db-stale') + }) + + it('prunes recent items for deleted logs snippets while keeping live ones', () => { + const store = createTabsState('default') + store.addTab(logsTab('logs-stale')) + store.addTab(logsTab('logs-live')) + + const cleanup = renderCleanup(store) + act(() => cleanup({ snippets: [{ id: 'logs-live', type: 'log_sql', name: 'logs-live' }] })) + + const recentIds = store.recentItems.map((item) => item.id) + expect(recentIds).toContain('sql-logs-live') + expect(recentIds).not.toContain('sql-logs-stale') + }) +}) diff --git a/apps/studio/components/layouts/Tabs/Tabs.utils.ts b/apps/studio/components/layouts/Tabs/Tabs.utils.ts index eae4578697f..ad95bf40784 100644 --- a/apps/studio/components/layouts/Tabs/Tabs.utils.ts +++ b/apps/studio/components/layouts/Tabs/Tabs.utils.ts @@ -65,46 +65,69 @@ export function useSqlEditorTabsCleanup() { const tabMapRef = useLatest(tabs.tabsMap) const openTabsRef = useLatest(tabs.openTabs) - return useCallback(({ snippets }: { snippets: { id: string; type: string; name: string }[] }) => { - // these are tabs that are static content - // these canot be removed from localstorage based on this query request - const IGNORED_TAB_IDS = ['sql-templates', 'sql-quickstarts'] + return useCallback( + ({ + snippets, + canPruneLogsTabs = true, + }: { + snippets: { id: string; type: string; name: string }[] + // Whether `log_sql` snippets in `snippets` are authoritative. When false (the + // logs section is disabled or its query errored) we can't know which logs + // snippets exist, so logs tabs are preserved rather than pruned as stale. + canPruneLogsTabs?: boolean + }) => { + // these are tabs that are static content + // these canot be removed from localstorage based on this query request + const IGNORED_TAB_IDS = ['sql-templates', 'sql-quickstarts'] - // Identify all SQL snippets / content by their tab ids - const currentContentIds = [ - ...snippets - .filter((content) => content.type === 'sql') - .map((content) => createTabId('sql', { id: content.id })), - // append ignored tab IDs - ...IGNORED_TAB_IDS, - ] + // Identify all SQL snippets / content by their tab ids. Both database (`sql`) and + // logs (`log_sql`) snippets live in the `sql-` tab id space, so both are counted as + // live. Anything not in this set is treated as removed outside the session and pruned. + const currentContentIds = [ + ...snippets + .filter((content) => content.type === 'sql' || content.type === 'log_sql') + .map((content) => createTabId('sql', { id: content.id })), + // append ignored tab IDs + ...IGNORED_TAB_IDS, + ] - // Remove any snippet tabs that might no longer be existing (removed outside of the dashboard session) - const snippetTabsToBeCleaned = openTabsRef.current.filter( - (id: string) => id.startsWith('sql') && !currentContentIds.includes(id) - ) - tabs.removeTabs(snippetTabsToBeCleaned) + const isPrunable = (id: string) => + id.startsWith('sql') && + !currentContentIds.includes(id) && + (canPruneLogsTabs || tabMapRef.current[id]?.metadata?.sqlSource !== 'logs') - // Remove any recent items that might no longer be existing (removed outside of the dashboard session) - const recentItems = tabs.getRecentItemsByType('sql') - tabs.removeRecentItems( - recentItems - ? recentItems.filter((item) => !currentContentIds.includes(item.id)).map((item) => item.id) - : [] - ) + // Remove any snippet tabs that might no longer be existing (removed outside of the dashboard session) + const snippetTabsToBeCleaned = openTabsRef.current.filter(isPrunable) + tabs.removeTabs(snippetTabsToBeCleaned) - // [Joshen] Validate for opened tabs, if their label matches the snippet's name - update label if not - // As the snippets name could've been updated outside of the SQL Editor session - // e.g for a shared snippet, the owner could've updated the name of the snippet - const openSqlTabs = openTabsRef.current - .map((id) => tabMapRef.current[id]) - .filter((tab) => !!tab && editorEntityTypes['sql']?.includes(tab.type)) + // Remove any recent items that might no longer be existing (removed outside of the dashboard session) + const recentItems = tabs.getRecentItemsByType('sql') + tabs.removeRecentItems( + recentItems + ? recentItems + .filter( + (item) => + !currentContentIds.includes(item.id) && + (canPruneLogsTabs || item.metadata?.sqlSource !== 'logs') + ) + .map((item) => item.id) + : [] + ) - openSqlTabs.forEach((tab) => { - const snippet = snippets?.find((x) => tab.metadata?.sqlId === x.id) - if (!!snippet && snippet.name !== tab.label) tabs.updateTab(tab.id, { label: snippet.name }) - }) - }, []) + // [Joshen] Validate for opened tabs, if their label matches the snippet's name - update label if not + // As the snippets name could've been updated outside of the SQL Editor session + // e.g for a shared snippet, the owner could've updated the name of the snippet + const openSqlTabs = openTabsRef.current + .map((id) => tabMapRef.current[id]) + .filter((tab) => !!tab && editorEntityTypes['sql']?.includes(tab.type)) + + openSqlTabs.forEach((tab) => { + const snippet = snippets?.find((x) => tab.metadata?.sqlId === x.id) + if (!!snippet && snippet.name !== tab.label) tabs.updateTab(tab.id, { label: snippet.name }) + }) + }, + [] + ) } interface UseTabsScrollOptions { diff --git a/apps/studio/components/ui/EntityTypeIcon.tsx b/apps/studio/components/ui/EntityTypeIcon.tsx index f62f616ba10..2dc05a6df58 100644 --- a/apps/studio/components/ui/EntityTypeIcon.tsx +++ b/apps/studio/components/ui/EntityTypeIcon.tsx @@ -1,13 +1,36 @@ -import { Eye, GitBranch, Table2 } from 'lucide-react' +import { Eye, GitBranch, ScrollText, Table2 } from 'lucide-react' import { cn, SQL_ICON } from 'ui' +import type { SqlSnippetSource } from '@/components/interfaces/SQLEditor/querySource' import { ENTITY_TYPE } from '@/data/entity-types/entity-type-constants' +/** + * The single icon representing a logs (`log_sql`) snippet β€” reused by the tabs + * (via EntityTypeIcon) and the nav tree so the two can't drift. Callers pass the + * context-appropriate size/className; the icon and stroke stay the same. + */ +export const LogsSnippetIcon = ({ + size = 15, + strokeWidth = 1.5, + className, +}: { + size?: number + strokeWidth?: number + className?: string +}) => ( + +) + interface EntityTypeIconProps { type: 'sql' | 'schema' | 'new' | 'r' | 'v' | 'm' | 'f' | 'p' size?: number strokeWidth?: number isActive?: boolean + sqlSource?: SqlSnippetSource } export const EntityTypeIcon = ({ @@ -15,7 +38,23 @@ export const EntityTypeIcon = ({ size = 15, strokeWidth = 1.5, isActive, + sqlSource, }: EntityTypeIconProps) => { + if (type === 'sql' && sqlSource === 'logs') { + return ( + + ) + } + if (type === 'sql') { return ( +/** The snippet content types this query can list. Defaults to `'sql'`; the nav's + * Logs section passes `'log_sql'` to list logs snippets through the same shape. */ +type SqlSnippetType = 'sql' | 'log_sql' + interface GetSqlSnippetsVariables { projectRef?: string cursor?: string + type?: SqlSnippetType visibility?: SqlSnippet['visibility'] favorite?: boolean name?: string @@ -19,7 +24,7 @@ interface GetSqlSnippetsVariables { } export async function getSqlSnippets( - { projectRef, cursor, visibility, favorite, name, sort }: GetSqlSnippetsVariables, + { projectRef, cursor, type = 'sql', visibility, favorite, name, sort }: GetSqlSnippetsVariables, signal?: AbortSignal ) { if (typeof projectRef === 'undefined') { @@ -32,7 +37,7 @@ export async function getSqlSnippets( params: { path: { ref: projectRef }, query: { - type: 'sql', + type, cursor, visibility, favorite, @@ -60,7 +65,14 @@ export type SqlSnippetsData = Awaited> export type SqlSnippetsError = unknown export const useSqlSnippetsQuery = ( - { projectRef, sort, name, visibility, favorite }: Omit, + { + projectRef, + type = 'sql', + sort, + name, + visibility, + favorite, + }: Omit, { enabled = true, ...options @@ -73,9 +85,9 @@ export const useSqlSnippetsQuery = ( > = {} ) => useInfiniteQuery({ - queryKey: contentKeys.sqlSnippets(projectRef, { sort, name, visibility, favorite }), + queryKey: contentKeys.sqlSnippets(projectRef, { type, sort, name, visibility, favorite }), queryFn: ({ signal, pageParam: cursor }) => - getSqlSnippets({ projectRef, cursor, sort, name, visibility, favorite }, signal), + getSqlSnippets({ projectRef, cursor, type, sort, name, visibility, favorite }, signal), enabled: enabled && typeof projectRef !== 'undefined', initialPageParam: undefined, getNextPageParam(lastPage) { diff --git a/apps/studio/pages/project/[ref]/sql/[id].tsx b/apps/studio/pages/project/[ref]/sql/[id].tsx index f40ea989fbf..0f1514f93f2 100644 --- a/apps/studio/pages/project/[ref]/sql/[id].tsx +++ b/apps/studio/pages/project/[ref]/sql/[id].tsx @@ -2,11 +2,12 @@ import { usePrevious } from '@uidotdev/usehooks' import { useParams } from 'common/hooks/useParams' import Link from 'next/link' import { useRouter } from 'next/router' -import { useEffect } from 'react' +import { useEffect, useEffectEvent } from 'react' import { toast } from 'sonner' import { Button } from 'ui' import { Admonition } from 'ui-patterns/Admonition' +import { getSnippetSource } from '@/components/interfaces/SQLEditor/querySource' import { SQLEditor } from '@/components/interfaces/SQLEditor/SQLEditor' import { generateSnippetTitle } from '@/components/interfaces/SQLEditor/SQLEditor.constants' import { DefaultLayout } from '@/components/layouts/DefaultLayout' @@ -107,11 +108,33 @@ const SqlEditor: NextPageWithLayout = () => { metadata: { sqlId: id, name: snippet?.name, + // The snippet may not be loaded yet at tab-creation time; the effect + // below backfills the source once it is. Source is immutable, so once + // set it never needs updating again. + ...(snippet !== undefined && { sqlSource: getSnippetSource(snippet) }), }, }) // eslint-disable-next-line react-hooks/exhaustive-deps }, [router.isReady, id]) + // Backfill the tab's source once the snippet loads. Covers both a freshly + // created tab whose snippet arrived after creation and tabs persisted before + // `sqlSource` existed (absent β†’ filled from the loaded snippet type). Reads the + // latest tabs snapshot via useEffectEvent so the effect only re-runs on id/snippet. + const backfillTabSource = useEffectEvent(() => { + if (!id || id === 'new' || snippet === undefined) return + + const tabId = createTabId('sql', { id }) + const tab = tabs.tabsMap[tabId] + if (tab !== undefined && tab.metadata?.sqlSource === undefined) { + tabs.updateTab(tabId, { sqlSource: getSnippetSource(snippet) }) + } + }) + useEffect(() => { + backfillTabSource() + // eslint-disable-next-line react-hooks/exhaustive-deps -- useEffectEvent fn intentionally not a dep (eslint-plugin-react-hooks v5 doesn't correctly ignore useEffectEvent yet) + }, [id, snippet]) + // The snippet no longer exists (e.g. deleted from another tab or session): clean up // any stale tab and dashboard history references so navigation doesn't resurrect it, // then fall back to a new snippet instead of rendering a dead state diff --git a/apps/studio/state/tabs.test.ts b/apps/studio/state/tabs.test.ts index 9cbfa766a10..000814297f7 100644 --- a/apps/studio/state/tabs.test.ts +++ b/apps/studio/state/tabs.test.ts @@ -72,6 +72,46 @@ describe('tabs recent items', () => { }) }) +describe('tabs sql source metadata', () => { + beforeEach(() => { + localStorage.clear() + }) + + it('backfills sqlSource onto a tab and its recent item', () => { + const store = createTabsState('default') + + store.addTab({ + id: 'sql-a', + type: 'sql', + label: 'Logs query', + metadata: { sqlId: 'a', name: 'Logs query' }, + isPreview: false, + }) + + // Persisted before the field existed β†’ absent until backfilled from the snippet. + expect(store.tabsMap['sql-a'].metadata?.sqlSource).toBeUndefined() + + store.updateTab('sql-a', { sqlSource: 'logs' }) + + expect(store.tabsMap['sql-a'].metadata?.sqlSource).toBe('logs') + expect(store.recentItems[0].metadata?.sqlSource).toBe('logs') + }) + + it('carries sqlSource from a tab into its recent item on creation', () => { + const store = createTabsState('default') + + store.addTab({ + id: 'sql-a', + type: 'sql', + label: 'Logs query', + metadata: { sqlId: 'a', name: 'Logs query', sqlSource: 'logs' }, + isPreview: false, + }) + + expect(store.recentItems[0].metadata?.sqlSource).toBe('logs') + }) +}) + describe('tabs removal', () => { beforeEach(() => { localStorage.clear() diff --git a/apps/studio/state/tabs.tsx b/apps/studio/state/tabs.tsx index c0ef9b95fe2..85c1dc9d56a 100644 --- a/apps/studio/state/tabs.tsx +++ b/apps/studio/state/tabs.tsx @@ -12,6 +12,7 @@ import { import { proxy, subscribe, useSnapshot } from 'valtio' import { buildTableEditorUrl } from '@/components/grid/SupabaseGrid.utils' +import type { SqlSnippetSource } from '@/components/interfaces/SQLEditor/querySource' import { ENTITY_TYPE } from '@/data/entity-types/entity-type-constants' export const editorEntityTypes = { @@ -44,6 +45,14 @@ export interface Tab { tableId?: number sqlId?: string scrollTop?: number + /** + * For SQL tabs, which backend the snippet queries (`'database'` | `'logs'`), + * so the tab can show the matching icon without re-fetching the snippet. + * Absent on tabs persisted before this field existed β€” treat absent as + * `'database'` and backfill from the loaded snippet (source is immutable, so + * it never goes stale once set). + */ + sqlSource?: SqlSnippetSource } isPreview?: boolean createdAt?: Date @@ -98,6 +107,7 @@ export interface RecentItem { name?: string tableId?: number sqlId?: string + sqlSource?: SqlSnippetSource } } @@ -270,22 +280,35 @@ export function createTabsState(projectRef: string) { store.previewTabId = tab.id store.activeTab = tab.id }, - updateTab: (id: string, updates: { label?: string; scrollTop?: number }) => { - if (!!store.tabsMap[id]) { - if ('label' in updates) { - store.tabsMap[id].label = updates.label - // Keep the persisted name aligned with the visible label so browser titles - // and tab state recover cleanly after entity renames. - if (typeof updates.label === 'string' && store.tabsMap[id].metadata) { - store.tabsMap[id].metadata.name = updates.label - } + updateTab: ( + id: string, + updates: { label?: string; scrollTop?: number; sqlSource?: SqlSnippetSource } + ) => { + const tab = store.tabsMap[id] + if (!tab) return - const recentItem = store.recentItems.find((item) => item.id === id) - if (recentItem) syncRecentItemWithTab(recentItem, store.tabsMap[id]) - } - if ('scrollTop' in updates && store.tabsMap[id].metadata) { - store.tabsMap[id].metadata.scrollTop = updates.scrollTop + if ('label' in updates) { + tab.label = updates.label + // Keep the persisted name aligned with the visible label so browser titles + // and tab state recover cleanly after entity renames. + if (typeof updates.label === 'string' && tab.metadata) { + tab.metadata.name = updates.label } + + const recentItem = store.recentItems.find((item) => item.id === id) + if (recentItem) syncRecentItemWithTab(recentItem, tab) + } + if ('scrollTop' in updates && tab.metadata) { + tab.metadata.scrollTop = updates.scrollTop + } + // Backfill the immutable source onto a tab (and its recent item) that + // predates the field, so its icon resolves correctly once the snippet loads. + if (updates.sqlSource !== undefined) { + if (tab.metadata) tab.metadata.sqlSource = updates.sqlSource + else tab.metadata = { sqlSource: updates.sqlSource } + + const recentItem = store.recentItems.find((item) => item.id === id) + if (recentItem) syncRecentItemWithTab(recentItem, tab) } }, // Function to remove a tab from the store From 8b38e0d1ed92c2259d882ec30e16d756a2427de7 Mon Sep 17 00:00:00 2001 From: Charis <26616127+charislam@users.noreply.github.com> Date: Tue, 4 Aug 2026 09:02:40 -0400 Subject: [PATCH 05/83] feat(studio): ClickHouse dialect for logs snippet AI + rewrite to ClickHouse (#48501) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Feature, plus a refactor of the shared logs-rewrite flow. PR 8 of the SQL editor query-source series. Stacked on #48457 β€” review that one first, and merge this after it. ## What is the current behavior? A `log_sql` snippet runs against the ClickHouse-backed analytics endpoint, but the SQL editor's AI still writes Postgres: inline edits get Postgres system prompts, and the result is run through `sql-formatter`, which mangles ClickHouse backticks and `log_attributes` map lookups. Legacy Logs Explorer saved queries open in the editor as `log_sql` snippets. Those are BigQuery dialect and error against the ClickHouse endpoint the editor runs them on, with no in-editor way out β€” only the Logs Explorer offered a rewrite. The completion route was also asymmetric. It assembled a schema/code/instruction message for Postgres but forwarded `prompt` verbatim for ClickHouse, so a client wanting ClickHouse had to hand-build the equivalent string. ## What is the new behavior? **Inline AI speaks ClickHouse for logs snippets.** `sqlSourceToDialect` maps a snippet's source to `postgres`/`clickhouse` and `buildCompletionRequestBody` threads it through. For ClickHouse, `useSqlEditorAi` strips code fences from the response and skips `formatSql`. Execution and dialect both follow the snippet type, so a snippet's valid dialect never flips. **Rewrite to ClickHouse in the editor.** A banner offers the rewrite for a logs snippet whose text trips `looksLikeLegacyLogsQuery`, and proposes the result through the editor's existing AI diff view rather than replacing the snippet, so it's accepted or discarded like any other AI edit. Gated on `otelLegacyLogs`: on a non-migrated org the BigQuery text is still correct, so rewriting it would break a working query. The offer is a state machine (`offered` / `rewriting` / `failed` / `noRewriteNeeded` / `dismissed`) with a declarative table of valid transitions, so the states are mutually exclusive by construction and dismissal is terminal. A failure keeps its message and offers a retry; a response identical to the input is reported rather than opening an empty diff. **One place assembles completion prompts.** The route now uses a single template for both dialects, branching only the schema section and β€” for `intent: 'rewrite'` β€” the instruction. `lib/ai/clickhouse-logs.ts` is the single home for ClickHouse-logs prompt content, replacing two independently maintained descriptions of the same table. Clients carry no prompt text. **The rewrite flow is shared with the Logs Explorer.** Both surfaces previously hand-rolled the same sequence and had drifted: only one detected a no-op rewrite, they sourced `log_attributes` keys differently, and the Explorer formatted errors with an `as Error` cast. Both now use `useLegacyLogsRewrite` and the same state-driven banner, so the Explorer picks up no-op detection and typed error extraction. **Attribute keys are fetched on submit, not while typing.** The detected source would otherwise feed a reactive query key, making every edit that changed it cost another network call. `useLogsAttributeKeys` is imperative and goes through `queryClient.fetchQuery`, so a source already cached β€” including by the Explorer header and query panel, which subscribe reactively β€” is reused. This also closes a gap where inline edits never received keys at all, unlike full rewrites. `getErrorMessage` gains an optional typed fallback and no longer stringifies a bare object into `'[object Object]'`; every existing caller already hand-rolled a fallback, except `QueueSettings`, which interpolated the raw result and now passes one. Nothing here is user-visible until the `sqlEditorLogsSource` flag is enabled. Tests: dialect selection and request-body shape, the ClickHouse prompt content (including that the schema section does not restate the dialect rules), the reducer's valid and invalid transitions, `shouldOfferLegacyLogsRewrite`, on-submit key discovery with cache reuse, and `getErrorMessage`. ## Additional context ## Summary by CodeRabbit * **New Features** * Added an Assistant banner to help rewrite legacy BigQuery-style logs queries into ClickHouse SQL. * SQL assistance now adapts to the selected query type, including relevant log attribute context. * Rewrite suggestions can be reviewed as editor diffs before being applied. * **Bug Fixes** * Improved rewrite failure handling, retry options, dismissal behavior, and β€œno rewrite needed” messaging. * Error notifications now provide a clearer fallback message when details are unavailable. --- .../Queues/SingleQueue/QueueSettings.tsx | 2 +- .../SQLEditor/LegacyLogsRewriteBanner.tsx | 77 +++++++++ .../SQLEditor/SQLEditor.utils.test.ts | 26 +++ .../interfaces/SQLEditor/SQLEditor.utils.ts | 28 ++- .../SQLEditor/SQLEditorControllers.tsx | 2 +- .../SQLEditor/SQLEditorEditorPanel.tsx | 42 +++-- .../SQLEditor/useSqlEditorAi.test.tsx | 114 +++++++++++- .../interfaces/SQLEditor/useSqlEditorAi.ts | 57 +++++- .../Logs/LegacyLogsRewriteAdmonition.tsx | 107 ++++++++++++ .../Settings/Logs/LogsExplorerOtelBanner.tsx | 34 ---- apps/studio/data/logs/keys.ts | 2 + .../logs}/logs-sql-rewrite.test.ts | 75 ++++---- apps/studio/data/logs/logs-sql-rewrite.ts | 113 ++++++++++++ apps/studio/data/logs/otel-log-keys-query.ts | 29 +++- .../analytics/useLegacyLogsRewrite.test.tsx | 163 ++++++++++++++++++ .../hooks/analytics/useLegacyLogsRewrite.ts | 162 +++++++++++++++++ .../analytics/useLogsAttributeKeys.test.tsx | 124 +++++++++++++ .../hooks/analytics/useLogsAttributeKeys.ts | 43 +++++ .../ai/clickhouse-logs.ts} | 138 +++++---------- apps/studio/lib/ai/prompts.ts | 9 - apps/studio/lib/get-error-message.test.ts | 58 ++++--- apps/studio/lib/get-error-message.ts | 26 ++- apps/studio/pages/api/ai/code/complete.ts | 61 +++++-- .../project/[ref]/logs/explorer/index.tsx | 108 +++++------- 24 files changed, 1286 insertions(+), 314 deletions(-) create mode 100644 apps/studio/components/interfaces/SQLEditor/LegacyLogsRewriteBanner.tsx create mode 100644 apps/studio/components/interfaces/Settings/Logs/LegacyLogsRewriteAdmonition.tsx delete mode 100644 apps/studio/components/interfaces/Settings/Logs/LogsExplorerOtelBanner.tsx rename apps/studio/{components/interfaces/Settings/Logs => data/logs}/logs-sql-rewrite.test.ts (63%) create mode 100644 apps/studio/data/logs/logs-sql-rewrite.ts create mode 100644 apps/studio/hooks/analytics/useLegacyLogsRewrite.test.tsx create mode 100644 apps/studio/hooks/analytics/useLegacyLogsRewrite.ts create mode 100644 apps/studio/hooks/analytics/useLogsAttributeKeys.test.tsx create mode 100644 apps/studio/hooks/analytics/useLogsAttributeKeys.ts rename apps/studio/{components/interfaces/Settings/Logs/logs-sql-rewrite.ts => lib/ai/clickhouse-logs.ts} (50%) diff --git a/apps/studio/components/interfaces/Integrations/Queues/SingleQueue/QueueSettings.tsx b/apps/studio/components/interfaces/Integrations/Queues/SingleQueue/QueueSettings.tsx index b1496a1dc3c..05cfc78cf37 100644 --- a/apps/studio/components/interfaces/Integrations/Queues/SingleQueue/QueueSettings.tsx +++ b/apps/studio/components/interfaces/Integrations/Queues/SingleQueue/QueueSettings.tsx @@ -214,7 +214,7 @@ export const QueueSettings = ({}: QueueSettingsProps) => { toast.success('Successfully updated permissions') setOpen(false) } catch (error: unknown) { - toast.error(`Failed to update permissions: ${getErrorMessage(error)}`) + toast.error(`Failed to update permissions: ${getErrorMessage(error, 'unknown error')}`) } finally { setIsSaving(false) } diff --git a/apps/studio/components/interfaces/SQLEditor/LegacyLogsRewriteBanner.tsx b/apps/studio/components/interfaces/SQLEditor/LegacyLogsRewriteBanner.tsx new file mode 100644 index 00000000000..9bb41fe5430 --- /dev/null +++ b/apps/studio/components/interfaces/SQLEditor/LegacyLogsRewriteBanner.tsx @@ -0,0 +1,77 @@ +import { useDebounce } from '@uidotdev/usehooks' +import { useFlag } from 'common' +import { useMemo } from 'react' + +import { DiffType } from './SQLEditor.types' +import { useSqlEditorAssistant, useSqlEditorRun, useSqlEditorSnippet } from './SQLEditorControllers' +import { LegacyLogsRewriteAdmonition } from '@/components/interfaces/Settings/Logs/LegacyLogsRewriteAdmonition' +import { + LEGACY_LOGS_DIALECT_CHECK_DEBOUNCE_MS, + shouldOfferLegacyLogsRewrite, +} from '@/data/logs/logs-sql-rewrite' +import { useLegacyLogsRewrite } from '@/hooks/analytics/useLegacyLogsRewrite' +import { + getSqlEditorV2StateSnapshot, + useSqlEditorV2StateSnapshot, +} from '@/state/sql-editor/sql-editor-state' + +/** + * Offers to rewrite a logs snippet still written in the old BigQuery dialect + * (per-service `FROM` tables, `unnest(metadata)` joins) to ClickHouse SQL. Legacy + * Logs Explorer saved queries open in the SQL editor as `log_sql` snippets, and + * those queries error against the ClickHouse-backed endpoint the editor runs them + * on β€” this is the in-editor path out. + * + * The request itself is `useLegacyLogsRewrite` (shared with the Logs Explorer); + * this decides when to offer it and routes the result into the editor's existing + * AI diff view, so the user accepts or discards it the same way as any other AI + * edit rather than having the snippet rewritten under them. + * + * Mount with `key={id}` so the offer resets when the user switches snippets. This + * component must NOT be conditionally mounted by its parent β€” it hides itself, so + * that opening a diff doesn't unmount it and throw away a dismissal. + */ +export const LegacyLogsRewriteBanner = () => { + const { id } = useSqlEditorSnippet() + const { runSource } = useSqlEditorRun() + const { + diff: { isDiffOpen, setSourceSqlDiff, setSelectedDiffType }, + } = useSqlEditorAssistant() + + const isOtelLogsEnabled = useFlag('otelLegacyLogs') + const snapV2 = useSqlEditorV2StateSnapshot() + + // The store is written on every keystroke, so debounce before running the + // dialect heuristics β€” the banner's visibility doesn't need per-character + // precision, and a settled value avoids flapping mid-edit. + const liveSql = snapV2.snippets[id]?.snippet.content?.unchecked_sql ?? '' + const settledSql = useDebounce(liveSql, LEGACY_LOGS_DIALECT_CHECK_DEBOUNCE_MS) + + const isLogsSnippetNeedingRewrite = useMemo( + () => + runSource.type === 'logs' && + shouldOfferLegacyLogsRewrite({ sql: settledSql, isClickhouseLogsEnabled: isOtelLogsEnabled }), + [runSource.type, settledSql, isOtelLogsEnabled] + ) + + const { state, requestRewrite, dismiss } = useLegacyLogsRewrite({ + // Rewrite exactly what's in the editor now, not the debounced value the + // visibility check used β€” they differ if the user clicked mid-edit. + readSql: () => getSqlEditorV2StateSnapshot().snippets[id]?.snippet.content?.unchecked_sql ?? '', + onProposal: ({ original, modified }) => { + setSourceSqlDiff({ original, modified }) + setSelectedDiffType(DiffType.Modification) + }, + }) + + // An outcome the user hasn't acknowledged stays up even once the query no longer + // looks legacy β€” otherwise a successful proposal would yank its own result away. + const hasUnacknowledgedOutcome = state.status === 'failed' || state.status === 'noRewriteNeeded' + const canShowBanner = !isDiffOpen && (isLogsSnippetNeedingRewrite || hasUnacknowledgedOutcome) + + if (!canShowBanner) return null + + return ( + + ) +} diff --git a/apps/studio/components/interfaces/SQLEditor/SQLEditor.utils.test.ts b/apps/studio/components/interfaces/SQLEditor/SQLEditor.utils.test.ts index 982ef10bb16..aeefbdcfe32 100644 --- a/apps/studio/components/interfaces/SQLEditor/SQLEditor.utils.test.ts +++ b/apps/studio/components/interfaces/SQLEditor/SQLEditor.utils.test.ts @@ -29,6 +29,7 @@ import { resolveConnectionString, resolveDiffKeyAction, shouldAutoGenerateTitle, + sqlSourceToDialect, trimTrailingSemicolons, } from './SQLEditor.utils' import type { DatabaseEventTrigger } from '@/data/database-event-triggers/database-event-triggers-query' @@ -432,6 +433,31 @@ describe('SQLEditor.utils.ts:buildCompletionRequestBody', () => { completionMetadata: { prompt: 'add a where clause' }, }) }) + test('omits dialect when not provided, so the route keeps its Postgres default', () => { + const body = buildCompletionRequestBody({ + projectRef: 'default', + connectionString: null, + orgSlug: 'acme', + }) + expect(body).not.toHaveProperty('dialect') + }) + test('includes the dialect when provided', () => { + expect( + buildCompletionRequestBody({ + projectRef: 'default', + connectionString: null, + orgSlug: 'acme', + dialect: 'clickhouse', + }).dialect + ).toBe('clickhouse') + }) +}) + +describe('SQLEditor.utils.ts:sqlSourceToDialect', () => { + test('logs snippets get ClickHouse, database snippets get Postgres', () => { + expect(sqlSourceToDialect('logs')).toBe('clickhouse') + expect(sqlSourceToDialect('database')).toBe('postgres') + }) }) describe('SQLEditor.utils.ts:createSqlSnippetSkeletonV2', () => { diff --git a/apps/studio/components/interfaces/SQLEditor/SQLEditor.utils.ts b/apps/studio/components/interfaces/SQLEditor/SQLEditor.utils.ts index aa1ba912080..33ec043398d 100644 --- a/apps/studio/components/interfaces/SQLEditor/SQLEditor.utils.ts +++ b/apps/studio/components/interfaces/SQLEditor/SQLEditor.utils.ts @@ -497,25 +497,46 @@ export function assembleCompletionDiff( } /** - * Builds the request body sent to the AI completion endpoint. `options` is - * the caller-provided extra fields (e.g. `completionMetadata`), merged in - * last so it can override the defaults if it ever needs to. + * The SQL dialect the AI writes. Mirrors the `dialect` enum the completion API + * route accepts β€” a snippet's dialect follows its source and never flips, so a + * logs snippet always gets ClickHouse SQL and a database snippet Postgres. + */ +export type SqlDialect = 'postgres' | 'clickhouse' + +/** + * Maps a snippet's query source to the dialect the AI should write in. Logs + * snippets run against the ClickHouse-backed analytics endpoint; everything + * else runs against the user's Postgres database. + */ +export function sqlSourceToDialect(source: SqlSnippetSource): SqlDialect { + return source === 'logs' ? 'clickhouse' : 'postgres' +} + +/** + * Builds the request body sent to the AI completion endpoint. `dialect` is + * omitted when undefined so callers that don't care keep the route's Postgres + * default. `options` is the caller-provided extra fields (e.g. + * `completionMetadata`), merged in last so it can override the defaults if it + * ever needs to. */ export function buildCompletionRequestBody({ projectRef, connectionString, orgSlug, + dialect, options, }: { projectRef: string | undefined connectionString: string | undefined | null orgSlug: string | undefined + dialect?: SqlDialect options?: { completionMetadata?: unknown } }): { projectRef: string | undefined connectionString: string | undefined | null language: 'sql' orgSlug: string | undefined + dialect?: SqlDialect completionMetadata?: unknown } { return { @@ -523,6 +544,7 @@ export function buildCompletionRequestBody({ connectionString, language: 'sql', orgSlug, + ...(dialect !== undefined && { dialect }), ...(options ?? {}), } } diff --git a/apps/studio/components/interfaces/SQLEditor/SQLEditorControllers.tsx b/apps/studio/components/interfaces/SQLEditor/SQLEditorControllers.tsx index 0aa70a05313..f4738c230a9 100644 --- a/apps/studio/components/interfaces/SQLEditor/SQLEditorControllers.tsx +++ b/apps/studio/components/interfaces/SQLEditor/SQLEditorControllers.tsx @@ -191,7 +191,7 @@ export const SQLEditorControllersProvider = ({ children }: PropsWithChildren) => const isExecuting = isExecutingDb || isExecutingLogs - const ai = useSqlEditorAi({ id, editorMountCount, diff, prompt }) + const ai = useSqlEditorAi({ id, editorMountCount, diff, prompt, sqlSource: runSource.type }) const { acceptAiHandler, discardAiHandler } = ai useSqlEditorShortcuts({ diff --git a/apps/studio/components/interfaces/SQLEditor/SQLEditorEditorPanel.tsx b/apps/studio/components/interfaces/SQLEditor/SQLEditorEditorPanel.tsx index 149a713f4e5..6215f6580d6 100644 --- a/apps/studio/components/interfaces/SQLEditor/SQLEditorEditorPanel.tsx +++ b/apps/studio/components/interfaces/SQLEditor/SQLEditorEditorPanel.tsx @@ -4,6 +4,7 @@ import dynamic from 'next/dynamic' import { useCallback } from 'react' import { cn } from 'ui' +import { LegacyLogsRewriteBanner } from './LegacyLogsRewriteBanner' import { useSQLEditorContext } from './SQLEditorContext' import { useSqlEditorAssistant, @@ -171,23 +172,32 @@ const SQLEditorMainView = () => { ) } -/** The top (editor) resizable panel: loading state, diff view, and main editor. */ -export const SQLEditorEditorPanel = () => { - const { isLoading } = useSqlEditorSnippet() - const { diff } = useSqlEditorAssistant() - +function LoadingSpinner() { return ( -
- {isLoading ? ( -
- -
- ) : ( - <> - {diff.isDiffOpen && } - - - )} +
+
+ +
+
+ ) +} + +/** The top (editor) resizable panel: loading state, diff view, and main editor. */ +export const SQLEditorEditorPanel = () => { + const { id, isLoading } = useSqlEditorSnippet() + const { diff } = useSqlEditorAssistant() + + if (isLoading) { + return + } + + return ( +
+ +
+ {diff.isDiffOpen && } + +
) } diff --git a/apps/studio/components/interfaces/SQLEditor/useSqlEditorAi.test.tsx b/apps/studio/components/interfaces/SQLEditor/useSqlEditorAi.test.tsx index 244f4fc4431..60f2a399f3c 100644 --- a/apps/studio/components/interfaces/SQLEditor/useSqlEditorAi.test.tsx +++ b/apps/studio/components/interfaces/SQLEditor/useSqlEditorAi.test.tsx @@ -1,13 +1,17 @@ import { act, waitFor } from '@testing-library/react' +import { http, HttpResponse } from 'msw' import { afterEach, beforeEach, describe, expect, it } from 'vitest' import { useSqlEditorDiff, useSqlEditorPrompt } from './hooks' +import type { SqlSnippetSource } from './querySource' import { DiffType } from './SQLEditor.types' import { useSqlEditorAi } from './useSqlEditorAi' import { SIDEBAR_KEYS } from '@/components/layouts/ProjectLayout/LayoutSidebar/LayoutSidebarProvider' +import { API_URL } from '@/lib/constants' import { sidebarManagerState } from '@/state/sidebar-manager-state' import { sqlEditorDiffRequestState } from '@/state/sql-editor/sql-editor-diff-request' import { sqlEditorSessionState } from '@/state/sql-editor/sql-editor-session-state' +import { mswServer } from '@/tests/lib/msw' import { createInMemoryEditor, renderSqlEditorHook, @@ -18,15 +22,17 @@ import { const SNIPPET_ID = 'ai-snippet' +type HarnessProps = { editorMountCount?: number; sqlSource?: SqlSnippetSource } + /** * Composes the diff + prompt state hooks the AI hook depends on (production * wires these together in `SQLEditorControllers`), so tests drive the real * accept/discard/drain flows end to end. */ -function useAiHarness({ editorMountCount = 1 }: { editorMountCount?: number } = {}) { +function useAiHarness({ editorMountCount = 1, sqlSource = 'database' }: HarnessProps = {}) { const diff = useSqlEditorDiff() const prompt = useSqlEditorPrompt() - const ai = useSqlEditorAi({ id: SNIPPET_ID, editorMountCount, diff, prompt }) + const ai = useSqlEditorAi({ id: SNIPPET_ID, editorMountCount, diff, prompt, sqlSource }) return { ai, diff, prompt } } @@ -119,6 +125,110 @@ describe('useSqlEditorAi β€” accept / discard diff', () => { }) }) +describe('useSqlEditorAi β€” completion dialect', () => { + type CompletionRequestBody = { + dialect?: string + intent?: string + completionMetadata: { + prompt: string + selection: string + textBeforeCursor: string + textAfterCursor: string + availableKeys?: string[] + } + } + + /** Replaces the default completion mock so we can read what was posted. */ + function captureCompletionRequests(response: string) { + const bodies: CompletionRequestBody[] = [] + mswServer.use( + http.post(`${API_URL}/ai/code/complete`, async ({ request }) => { + bodies.push((await request.json()) as CompletionRequestBody) + return HttpResponse.json(response) + }) + ) + return bodies + } + + const context = { + beforeSelection: "select timestamp from logs where source = 'edge_logs'\n", + selection: 'limit 5', + afterSelection: '', + } + + it('posts the clickhouse dialect with the raw instruction and cursor context', async () => { + const bodies = captureCompletionRequests('limit 10') + const { result } = renderSqlEditorHook(useAiHarness, { + initialProps: { sqlSource: 'logs' }, + }) + + await act(async () => { + await result.current.ai.handlePrompt('only keep 5xx responses', context) + }) + + expect(bodies).toHaveLength(1) + expect(bodies[0].dialect).toBe('clickhouse') + // The route assembles the schema section and the selection-wrapped code around + // the instruction, so the client posts the instruction verbatim β€” the same + // shape as the Postgres path β€” and never hand-builds prompt text. + expect(bodies[0].completionMetadata.prompt).toBe('only keep 5xx responses') + expect(bodies[0].completionMetadata.selection).toBe('limit 5') + expect(bodies[0].completionMetadata.textBeforeCursor).toBe(context.beforeSelection) + // An inline edit is not a rewrite. + expect(bodies[0].intent).toBeUndefined() + }) + + it('posts the postgres dialect with the raw instruction for a database snippet', async () => { + const bodies = captureCompletionRequests('limit 10') + const { result } = renderSqlEditorHook(useAiHarness, { + initialProps: { sqlSource: 'database' }, + }) + + await act(async () => { + await result.current.ai.handlePrompt('bump the limit', context) + }) + + expect(bodies).toHaveLength(1) + expect(bodies[0].dialect).toBe('postgres') + expect(bodies[0].completionMetadata.prompt).toBe('bump the limit') + }) + + it('strips code fences and leaves clickhouse output unformatted', async () => { + captureCompletionRequests('```sql\nlimit 10\n```') + const { result } = renderSqlEditorHook(useAiHarness, { + initialProps: { sqlSource: 'logs' }, + }) + + await act(async () => { + await result.current.ai.handlePrompt('bump the limit', context) + }) + + await waitFor(() => expect(result.current.diff.isDiffOpen).toBe(true)) + // sql-formatter is Postgres-only, so the ClickHouse diff is the reassembled + // query verbatim β€” fences stripped, nothing else touched. + expect(result.current.diff.sourceSqlDiff).toEqual({ + original: `${context.beforeSelection}limit 5`, + modified: `${context.beforeSelection}limit 10`, + }) + }) + + it('still formats database output through sql-formatter', async () => { + captureCompletionRequests('limit 10') + const { result } = renderSqlEditorHook(useAiHarness, { + initialProps: { sqlSource: 'database' }, + }) + + await act(async () => { + await result.current.ai.handlePrompt('bump the limit', context) + }) + + await waitFor(() => expect(result.current.diff.isDiffOpen).toBe(true)) + expect(result.current.diff.sourceSqlDiff?.modified).not.toBe( + `${context.beforeSelection}limit 10` + ) + }) +}) + describe('useSqlEditorAi β€” debug', () => { it('onDebug opens the assistant sidebar and starts a debug chat from the failing snippet', async () => { seedSnippet({ id: SNIPPET_ID, name: 'Broken query', sql: 'selct 1;' }) diff --git a/apps/studio/components/interfaces/SQLEditor/useSqlEditorAi.ts b/apps/studio/components/interfaces/SQLEditor/useSqlEditorAi.ts index 97c5e589d6b..240d3462404 100644 --- a/apps/studio/components/interfaces/SQLEditor/useSqlEditorAi.ts +++ b/apps/studio/components/interfaces/SQLEditor/useSqlEditorAi.ts @@ -4,6 +4,7 @@ import { useCallback, useEffect, useEffectEvent, useMemo, useState } from 'react import { toast } from 'sonner' import type { useSqlEditorDiff, useSqlEditorPrompt } from './hooks' +import type { SqlSnippetSource } from './querySource' import { DiffType, type IStandaloneDiffEditor } from './SQLEditor.types' import { assembleCompletionDiff, @@ -13,12 +14,15 @@ import { createSqlSnippetSkeletonV2, extractDebugContext, planDiffRequestApplication, + sqlSourceToDialect, } from './SQLEditor.utils' import { useSQLEditorContext } from './SQLEditorContext' import { useSnippetTitleGenerator } from './useSnippetTitleGenerator' import { SIDEBAR_KEYS } from '@/components/layouts/ProjectLayout/LayoutSidebar/LayoutSidebarProvider' import { constructHeaders } from '@/data/fetchers' +import { stripSqlCodeFences } from '@/data/logs/logs-sql-rewrite' import { isError } from '@/data/utils/error-check' +import { useLogsAttributeKeys } from '@/hooks/analytics/useLogsAttributeKeys' import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' import { BASE_PATH } from '@/lib/constants' @@ -37,6 +41,11 @@ type UseSqlEditorAiArgs = { editorMountCount: number diff: ReturnType prompt: ReturnType + /** + * Where the snippet runs. Selects the dialect the AI writes in β€” logs snippets + * get ClickHouse SQL for the `logs` table, database snippets get Postgres. + */ + sqlSource: SqlSnippetSource } /** @@ -45,7 +54,13 @@ type UseSqlEditorAiArgs = { * lifecycle effects (one-shot diff-request drain, diff-editor value sync, and the * ask-AI widget visibility). */ -export function useSqlEditorAi({ id, editorMountCount, diff, prompt }: UseSqlEditorAiArgs) { +export function useSqlEditorAi({ + id, + editorMountCount, + diff, + prompt, + sqlSource, +}: UseSqlEditorAiArgs) { const { sourceSqlDiff, setSourceSqlDiff, @@ -77,6 +92,14 @@ export function useSqlEditorAi({ id, editorMountCount, diff, prompt }: UseSqlEdi const [isDiffEditorMounted, setIsDiffEditorMounted] = useState(false) const [showWidget, setShowWidget] = useState(false) + const dialect = sqlSourceToDialect(sqlSource) + const isClickhouse = dialect === 'clickhouse' + + // Grounds ClickHouse edits in the source's real log_attributes keys, the same way + // the whole-query rewrite does β€” otherwise inline edits invent dotted paths. + // Looked up when the user submits, not while they type. + const { fetchAttributeKeys } = useLogsAttributeKeys() + const handleNewQuery = useCallback( async (sql: string, name: string) => { if (!ref) return console.error('Project ref is required') @@ -196,6 +219,7 @@ export function useSqlEditorAi({ id, editorMountCount, diff, prompt }: UseSqlEdi projectRef: project?.ref, connectionString: project?.connectionString, orgSlug: org?.slug, + dialect, options: options?.body, }) ), @@ -210,9 +234,16 @@ export function useSqlEditorAi({ id, editorMountCount, diff, prompt }: UseSqlEdi const text: string = await response.json() const meta = options?.body?.completionMetadata ?? {} - const { original, modified } = assembleCompletionDiff(meta, text) + // The clickhouse system prompt forbids fences, but strip them defensively + // so a chatty model can't leak backticks into the snippet. + const { original, modified } = assembleCompletionDiff( + meta, + isClickhouse ? stripSqlCodeFences(text) : text + ) - const formattedModified = formatSql(modified) + // sql-formatter is Postgres-only β€” it mangles ClickHouse backticks and + // map lookups β€” so ClickHouse output goes into the diff unformatted. + const formattedModified = isClickhouse ? modified : formatSql(modified) setSourceSqlDiff({ original, modified: formattedModified }) setSelectedDiffType(DiffType.Modification) setPromptState((prev) => ({ ...prev, isLoading: false })) @@ -224,6 +255,8 @@ export function useSqlEditorAi({ id, editorMountCount, diff, prompt }: UseSqlEdi } }, [ + dialect, + isClickhouse, org?.slug, project?.connectionString, project?.ref, @@ -249,10 +282,23 @@ export function useSqlEditorAi({ id, editorMountCount, diff, prompt }: UseSqlEdi beforeSelection: context.beforeSelection, afterSelection: context.afterSelection, })) - const headerData = await constructHeaders() + // ClickHouse only: there's no server-side schema to fetch for the logs + // table, so the real log_attributes keys travel with the request. Detected + // from the whole document, which is what the three context fields spell. + const [headerData, availableKeys] = await Promise.all([ + constructHeaders(), + isClickhouse + ? fetchAttributeKeys( + context.beforeSelection + context.selection + context.afterSelection + ) + : undefined, + ]) const authorizationHeader = headerData.get('Authorization') + // The instruction goes over as-is for both dialects β€” the route assembles + // the schema section and the cursor context around it, so there's exactly + // one place that knows how a completion prompt is built. await complete(prompt, { ...(authorizationHeader ? { headers: { Authorization: authorizationHeader } } @@ -264,6 +310,7 @@ export function useSqlEditorAi({ id, editorMountCount, diff, prompt }: UseSqlEdi language: 'pgsql', prompt, selection: context.selection, + ...(availableKeys ? { availableKeys } : {}), }, }, }) @@ -271,7 +318,7 @@ export function useSqlEditorAi({ id, editorMountCount, diff, prompt }: UseSqlEdi setPromptState((prev) => ({ ...prev, isLoading: false })) } }, - [complete, setPromptState] + [complete, fetchAttributeKeys, isClickhouse, setPromptState] ) const handleDiffEditorMount = useCallback( diff --git a/apps/studio/components/interfaces/Settings/Logs/LegacyLogsRewriteAdmonition.tsx b/apps/studio/components/interfaces/Settings/Logs/LegacyLogsRewriteAdmonition.tsx new file mode 100644 index 00000000000..581c0b02334 --- /dev/null +++ b/apps/studio/components/interfaces/Settings/Logs/LegacyLogsRewriteAdmonition.tsx @@ -0,0 +1,107 @@ +import { Button } from 'ui' +import { Admonition } from 'ui-patterns/Admonition' + +import { ButtonTooltip } from '@/components/ui/ButtonTooltip' +import type { LegacyLogsRewriteState } from '@/hooks/analytics/useLegacyLogsRewrite' + +interface LegacyLogsRewriteAdmonitionProps { + state: LegacyLogsRewriteState + onRewrite: () => void + onDismiss: () => void +} + +const BANNER_CLASSES = 'mb-0 rounded-none border-x-0 border-t-0' + +/** + * Presentation for the BigQuery β†’ ClickHouse rewrite offer, covering every state + * of `useLegacyLogsRewrite`. Shared by the Logs Explorer and the SQL editor so the + * copy and the outcome handling live in one place β€” a surface only decides *when* + * to show this, not what each state says. + * + * Renders nothing once dismissed; callers can also hide it earlier if they have + * their own reasons to (the SQL editor hides it while a diff is open). + */ +export const LegacyLogsRewriteAdmonition = ({ + state, + onRewrite, + onDismiss, +}: LegacyLogsRewriteAdmonitionProps) => { + if (state.status === 'dismissed') return null + + if (state.status === 'failed') { + return ( + + + +
+ } + /> + ) + } + + // The dialect check is a heuristic, so an unchanged rewrite is the Assistant + // disagreeing with it. Say so and let the user close it, rather than proposing + // an empty diff or silently giving up. + if (state.status === 'noRewriteNeeded') { + return ( + + Dismiss + + } + /> + ) + } + + const isRewriting = state.status === 'rewriting' + + return ( + + + {/* Disabled mid-rewrite so the offer can't be dismissed out from under + an in-flight request β€” the two states stay mutually exclusive. */} + + Dismiss + +
+ } + /> + ) +} diff --git a/apps/studio/components/interfaces/Settings/Logs/LogsExplorerOtelBanner.tsx b/apps/studio/components/interfaces/Settings/Logs/LogsExplorerOtelBanner.tsx deleted file mode 100644 index 4f9bac9cd34..00000000000 --- a/apps/studio/components/interfaces/Settings/Logs/LogsExplorerOtelBanner.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { Button } from 'ui' -import { Admonition } from 'ui-patterns/Admonition' - -interface LogsExplorerOtelBannerProps { - isRewriting: boolean - onRewrite: () => void - onDismiss: () => void -} - -export const LogsExplorerOtelBanner = ({ - isRewriting, - onRewrite, - onDismiss, -}: LogsExplorerOtelBannerProps) => { - return ( - - - -
- } - /> - ) -} diff --git a/apps/studio/data/logs/keys.ts b/apps/studio/data/logs/keys.ts index 9aff8c9c58b..f2f8de82ddb 100644 --- a/apps/studio/data/logs/keys.ts +++ b/apps/studio/data/logs/keys.ts @@ -1,6 +1,8 @@ import { QuerySearchParamsType } from '@/components/interfaces/UnifiedLogs/UnifiedLogs.types' export const logsKeys = { + otelLogKeys: (projectRef: string | undefined, source: string | undefined) => + ['projects', projectRef, 'otel-log-keys', source] as const, unifiedLogsInfinite: ( projectRef: string | undefined, searchParams: QuerySearchParamsType | undefined diff --git a/apps/studio/components/interfaces/Settings/Logs/logs-sql-rewrite.test.ts b/apps/studio/data/logs/logs-sql-rewrite.test.ts similarity index 63% rename from apps/studio/components/interfaces/Settings/Logs/logs-sql-rewrite.test.ts rename to apps/studio/data/logs/logs-sql-rewrite.test.ts index 1b4f0646410..6e7a80c94ad 100644 --- a/apps/studio/components/interfaces/Settings/Logs/logs-sql-rewrite.test.ts +++ b/apps/studio/data/logs/logs-sql-rewrite.test.ts @@ -1,45 +1,36 @@ import { afterEach, describe, expect, it, vi } from 'vitest' import { - buildClickhouseRewritePrompt, detectLogSource, looksLikeLegacyLogsQuery, rewriteLogsSqlWithAI, + shouldOfferLegacyLogsRewrite, stripSqlCodeFences, } from './logs-sql-rewrite' -describe('buildClickhouseRewritePrompt', () => { - it('includes the query, the schema, and a reply-with-only-SQL instruction', () => { - const prompt = buildClickhouseRewritePrompt('select count(*) from edge_logs') - expect(prompt).toContain('select count(*) from edge_logs') - expect(prompt).toContain('log_attributes') - expect(prompt).toContain("source = 'edge_logs'") - expect(prompt.toLowerCase()).toContain('reply with only') +describe('shouldOfferLegacyLogsRewrite', () => { + const legacySql = 'select 1 from edge_logs cross join unnest(metadata) as m' + + it('offers the rewrite for BigQuery-dialect SQL once logs run on ClickHouse', () => { + expect(shouldOfferLegacyLogsRewrite({ sql: legacySql, isClickhouseLogsEnabled: true })).toBe( + true + ) }) - it('spells out the FROM-to-logs conversion and shows a worked example', () => { - const prompt = buildClickhouseRewritePrompt('select 1 from postgres_logs') - expect(prompt).toContain("from logs where source = 'postgres_logs'") - expect(prompt.toLowerCase()).toContain('remove every') - expect(prompt).toContain('cross join unnest') - expect(prompt).toContain('BigQuery:') - expect(prompt).toContain('ClickHouse:') - expect(prompt).toContain("log_attributes['parsed.error_severity']") + it('never offers it on a non-migrated org, where the BigQuery SQL is still correct', () => { + expect(shouldOfferLegacyLogsRewrite({ sql: legacySql, isClickhouseLogsEnabled: false })).toBe( + false + ) }) - it('lists the real log_attributes keys when provided and demands exact paths', () => { - const prompt = buildClickhouseRewritePrompt('select 1 from edge_logs', [ - 'request.headers.x_real_ip', - 'request.cf.country', - ]) - expect(prompt).toContain("log_attributes['request.headers.x_real_ip']") - expect(prompt).toContain("log_attributes['request.cf.country']") - expect(prompt.toLowerCase()).toContain('exact') - }) - - it('omits the keys section when none are provided', () => { - const prompt = buildClickhouseRewritePrompt('select 1 from edge_logs') - expect(prompt).not.toContain('actual log_attributes keys present') + it('does not offer it for SQL that is already ClickHouse, or for empty SQL', () => { + expect( + shouldOfferLegacyLogsRewrite({ + sql: "select timestamp from logs where source = 'edge_logs' limit 5", + isClickhouseLogsEnabled: true, + }) + ).toBe(false) + expect(shouldOfferLegacyLogsRewrite({ sql: '', isClickhouseLogsEnabled: true })).toBe(false) }) }) @@ -66,6 +57,21 @@ describe('detectLogSource', () => { it('returns undefined when nothing matches', () => { expect(detectLogSource('select 1')).toBeUndefined() }) + + it('ignores a column that merely ends in "source"', () => { + expect(detectLogSource("select 1 from logs where resource = 'nope'")).toBeUndefined() + expect(detectLogSource("select 1 from logs where datasource = 'nope'")).toBeUndefined() + }) + + it('still reads a qualified source column', () => { + expect(detectLogSource("select 1 from logs t where t.source = 'auth_logs'")).toBe('auth_logs') + }) + + it('prefers the real source column over a lookalike earlier in the query', () => { + expect(detectLogSource("select resource = 'nope' from logs where source = 'edge_logs'")).toBe( + 'edge_logs' + ) + }) }) describe('looksLikeLegacyLogsQuery', () => { @@ -112,7 +118,7 @@ describe('rewriteLogsSqlWithAI', () => { vi.unstubAllGlobals() }) - it('posts to the completion endpoint and returns the cleaned query', async () => { + it('declares the rewrite intent and sends the query as the selection', async () => { const fetchMock = vi.fn().mockResolvedValue({ ok: true, json: async () => '```sql\nselect 1 from logs\n```', @@ -122,6 +128,7 @@ describe('rewriteLogsSqlWithAI', () => { const result = await rewriteLogsSqlWithAI({ sql: 'select 1 from edge_logs', projectRef: 'abc', + availableKeys: ['request.method'], }) expect(result).toBe('select 1 from logs') @@ -129,8 +136,14 @@ describe('rewriteLogsSqlWithAI', () => { expect(url).toContain('/api/ai/code/complete') const body = JSON.parse(init.body) expect(body.dialect).toBe('clickhouse') + expect(body.intent).toBe('rewrite') + // The whole query is the selection, so the rewrite replaces all of it. expect(body.completionMetadata.selection).toBe('select 1 from edge_logs') - expect(body.completionMetadata.prompt.toLowerCase()).toContain('reply with only') + expect(body.completionMetadata.textBeforeCursor).toBe('') + expect(body.completionMetadata.textAfterCursor).toBe('') + expect(body.completionMetadata.availableKeys).toEqual(['request.method']) + // No prompt text is carried client-side β€” the route owns the instruction. + expect(body.completionMetadata.prompt).toBe('') }) it('throws when the request fails', async () => { diff --git a/apps/studio/data/logs/logs-sql-rewrite.ts b/apps/studio/data/logs/logs-sql-rewrite.ts new file mode 100644 index 00000000000..f9c21d798bd --- /dev/null +++ b/apps/studio/data/logs/logs-sql-rewrite.ts @@ -0,0 +1,113 @@ +import { BASE_PATH } from '@/lib/constants' + +export function stripSqlCodeFences(text: string): string { + const trimmed = text.trim() + const fenced = trimmed.match(/```(?:sql)?\s*\n?([\s\S]*?)\n?```/i) + return (fenced ? fenced[1] : trimmed).trim() +} + +const SOURCE_ALIASES: Record = { + pg_cron_logs: 'postgres_logs', +} + +export function detectLogSource(sql: string): string | undefined { + // `\b` so only a standalone `source` column counts β€” an unanchored match reads + // the value out of `resource = '...'` or `datasource = '...'` too. + const bySource = sql.match(/\bsource\s*=\s*'([^']+)'/i) + if (bySource) { + const source = bySource[1].toLowerCase() + return SOURCE_ALIASES[source] ?? source + } + const byFrom = sql.match(/\bfrom\s+([a-z_][a-z0-9_]*)/i) + if (byFrom) { + const table = byFrom[1].toLowerCase() + if (table === 'logs') return undefined + return SOURCE_ALIASES[table] ?? table + } + return undefined +} + +export function looksLikeLegacyLogsQuery(sql: string): boolean { + const lower = sql.toLowerCase() + if (/\bunnest\s*\(/.test(lower)) return true + if (/cast\s*\(\s*timestamp\s+as\s+datetime\s*\)/.test(lower)) return true + const byFrom = lower.match(/\bfrom\s+([a-z_][a-z0-9_]*)/) + return byFrom ? byFrom[1] !== 'logs' : false +} + +/** + * How long to let the query text settle before re-running the dialect check. + * Shared so every surface offering the rewrite reacts on the same cadence. + */ +export const LEGACY_LOGS_DIALECT_CHECK_DEBOUNCE_MS = 500 + +/** + * Whether to offer the ClickHouse rewrite for a query. Both the flag and the + * dialect check matter: on an org whose logs haven't moved to ClickHouse the + * BigQuery text is still *correct*, so offering to rewrite it would break a + * working query. Callers layer their own dismissal state on top. + */ +export function shouldOfferLegacyLogsRewrite({ + sql, + isClickhouseLogsEnabled, +}: { + sql: string + isClickhouseLogsEnabled: boolean +}): boolean { + return isClickhouseLogsEnabled && looksLikeLegacyLogsQuery(sql) +} + +export interface RewriteLogsSqlArgs { + sql: string + projectRef: string + connectionString?: string | null + orgSlug?: string + authorizationHeader?: string | null + availableKeys?: string[] +} + +/** + * Asks the completion route to rewrite a whole BigQuery logs query as ClickHouse + * SQL. The prompt itself lives server-side (`lib/ai/clickhouse-logs.ts`) β€” this + * only declares the intent and hands the query over as the selection, the same + * shape an inline edit uses, so exactly one place knows how a completion prompt + * is assembled. + */ +export async function rewriteLogsSqlWithAI(args: RewriteLogsSqlArgs) { + const { sql, projectRef, connectionString, orgSlug, authorizationHeader, availableKeys } = args + + const response = await fetch(`${BASE_PATH}/api/ai/code/complete`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + ...(authorizationHeader ? { Authorization: authorizationHeader } : {}), + }, + body: JSON.stringify({ + projectRef, + connectionString, + language: 'sql', + dialect: 'clickhouse', + intent: 'rewrite', + orgSlug, + completionMetadata: { + // The whole query is the selection, so the rewrite replaces all of it and + // the route supplies the instruction for the `rewrite` intent. + textBeforeCursor: '', + textAfterCursor: '', + prompt: '', + selection: sql, + availableKeys, + }, + }), + }) + + if (!response.ok) { + const errorText = await response.text() + throw new Error(errorText || 'Failed to rewrite the query') + } + + const raw = await response.json() + const rewritten = stripSqlCodeFences(typeof raw === 'string' ? raw : String(raw)) + if (!rewritten) throw new Error('The assistant returned an empty query') + return rewritten +} diff --git a/apps/studio/data/logs/otel-log-keys-query.ts b/apps/studio/data/logs/otel-log-keys-query.ts index c4918af0af8..33118f09a4c 100644 --- a/apps/studio/data/logs/otel-log-keys-query.ts +++ b/apps/studio/data/logs/otel-log-keys-query.ts @@ -1,11 +1,14 @@ -import { useQuery } from '@tanstack/react-query' +import { queryOptions, useQuery } from '@tanstack/react-query' import { executeAnalyticsSql } from './execute-analytics-sql' +import { logsKeys } from './keys' import { logsAllEndpointUrl } from './logs-endpoint' import { analyticsLiteral, safeSql } from './safe-analytics-sql' const LOOKBACK_HOURS = 24 * 7 +const KEYS_STALE_TIME = 5 * 60 * 1000 + export async function fetchOtelLogKeys({ projectRef, source, @@ -31,15 +34,31 @@ export async function fetchOtelLogKeys({ return rows.map((r) => r.key).filter(Boolean) } +/** + * Shared by the reactive hook and imperative `queryClient.fetchQuery` callers, so + * a lookup triggered on submit reuses whatever a subscribed component already + * cached for the same source (and vice versa). + */ +export function otelLogKeysQueryOptions({ + projectRef, + source, +}: { + projectRef: string + source: string +}) { + return queryOptions({ + queryKey: logsKeys.otelLogKeys(projectRef, source), + queryFn: ({ signal }) => fetchOtelLogKeys({ projectRef, source, signal }), + staleTime: KEYS_STALE_TIME, + }) +} + export function useOtelLogKeysQuery( { projectRef, source }: { projectRef?: string; source?: string }, { enabled = true }: { enabled?: boolean } = {} ) { return useQuery({ - queryKey: ['projects', projectRef, 'otel-log-keys', source], - queryFn: ({ signal }) => - fetchOtelLogKeys({ projectRef: projectRef ?? '', source: source ?? '', signal }), + ...otelLogKeysQueryOptions({ projectRef: projectRef ?? '', source: source ?? '' }), enabled: enabled && Boolean(projectRef) && Boolean(source), - staleTime: 5 * 60 * 1000, }) } diff --git a/apps/studio/hooks/analytics/useLegacyLogsRewrite.test.tsx b/apps/studio/hooks/analytics/useLegacyLogsRewrite.test.tsx new file mode 100644 index 00000000000..0dd6b1d4438 --- /dev/null +++ b/apps/studio/hooks/analytics/useLegacyLogsRewrite.test.tsx @@ -0,0 +1,163 @@ +import { act, waitFor } from '@testing-library/react' +import { delay, http, HttpResponse } from 'msw' +import { beforeEach, describe, expect, it, vi } from 'vitest' + +import { + INITIAL_LEGACY_LOGS_REWRITE_STATE, + legacyLogsRewriteReducer as reduce, + useLegacyLogsRewrite, + type LegacyLogsRewriteEvent, + type LegacyLogsRewriteState, +} from './useLegacyLogsRewrite' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { API_URL } from '@/lib/constants' +import { mswServer } from '@/tests/lib/msw' +import { renderSqlEditorHook, setupSqlEditorMocks } from '@/tests/lib/sql-editor-test-utils' + +const run = ( + events: LegacyLogsRewriteEvent[], + from: LegacyLogsRewriteState = INITIAL_LEGACY_LOGS_REWRITE_STATE +) => events.reduce(reduce, from) + +const FAILED: LegacyLogsRewriteEvent = { type: 'rewriteFailed', message: 'boom' } + +describe('legacyLogsRewriteReducer', () => { + it('starts out offering the rewrite', () => { + expect(INITIAL_LEGACY_LOGS_REWRITE_STATE).toEqual({ status: 'offered' }) + }) + + it('requesting a rewrite moves to rewriting, and a proposal returns to offered', () => { + expect(run([{ type: 'rewriteRequested' }])).toEqual({ status: 'rewriting' }) + expect(run([{ type: 'rewriteRequested' }, { type: 'rewriteProposed' }])).toEqual({ + status: 'offered', + }) + }) + + it('a failure lands in failed and keeps its message for the UI', () => { + expect(run([{ type: 'rewriteRequested' }, FAILED])).toEqual({ + status: 'failed', + message: 'boom', + }) + }) + + it('a failure is recoverable β€” the same request retries it', () => { + expect(run([{ type: 'rewriteRequested' }, FAILED, { type: 'rewriteRequested' }])).toEqual({ + status: 'rewriting', + }) + }) + + it('an unchanged response waits for acknowledgement instead of retiring silently', () => { + const noop = run([{ type: 'rewriteRequested' }, { type: 'rewriteNoop' }]) + expect(noop).toEqual({ status: 'noRewriteNeeded' }) + expect(run([{ type: 'dismissed' }], noop)).toEqual({ status: 'dismissed' }) + }) + + it('both outcomes can be dismissed, and neither can be retried into a new outcome', () => { + const failed = run([{ type: 'rewriteRequested' }, FAILED]) + expect(run([{ type: 'dismissed' }], failed)).toEqual({ status: 'dismissed' }) + // noRewriteNeeded only accepts dismissal β€” no silent retry. + const noop = run([{ type: 'rewriteRequested' }, { type: 'rewriteNoop' }]) + expect(run([{ type: 'rewriteRequested' }], noop)).toEqual({ status: 'noRewriteNeeded' }) + }) + + it('dismissal is terminal β€” nothing resurrects the offer', () => { + const dismissed = run([{ type: 'dismissed' }]) + expect(dismissed).toEqual({ status: 'dismissed' }) + expect( + run( + [ + { type: 'rewriteRequested' }, + { type: 'rewriteProposed' }, + FAILED, + { type: 'rewriteNoop' }, + ], + dismissed + ) + ).toEqual({ status: 'dismissed' }) + }) + + it('cannot be dismissed mid-rewrite, so a settling request never resurrects it', () => { + expect(run([{ type: 'rewriteRequested' }, { type: 'dismissed' }])).toEqual({ + status: 'rewriting', + }) + }) + + it('ignores events that are invalid for the current state', () => { + // No rewrite in flight to settle. + expect(run([{ type: 'rewriteProposed' }])).toEqual({ status: 'offered' }) + expect(run([{ type: 'rewriteNoop' }])).toEqual({ status: 'offered' }) + expect(run([FAILED])).toEqual({ status: 'offered' }) + // Already rewriting; a second request is a no-op rather than a restart. + expect(run([{ type: 'rewriteRequested' }, { type: 'rewriteRequested' }])).toEqual({ + status: 'rewriting', + }) + }) +}) + +describe('useLegacyLogsRewrite β€” dismiss', () => { + // No detectable source, so key discovery is skipped and the only outbound + // request is the completion call we control below. + const SQL_WITHOUT_SOURCE = 'select 1 from logs limit 5' + + /** Keeps a requested rewrite in flight for the duration of the test. */ + function stallTheRewrite() { + mswServer.use( + http.post(`${API_URL}/ai/code/complete`, async () => { + await delay(10_000) + return HttpResponse.json('select 1 from logs') + }) + ) + } + + /** + * Exposes the resolved project alongside the hook: `requestRewrite` no-ops + * without a project ref, so tests must wait for that query before asking. + */ + async function renderDismissHarness() { + const onDismissed = vi.fn() + const utils = renderSqlEditorHook(() => { + const { data: project } = useSelectedProjectQuery() + const rewrite = useLegacyLogsRewrite({ + readSql: () => SQL_WITHOUT_SOURCE, + onProposal: vi.fn(), + onDismissed, + }) + return { ...rewrite, projectRef: project?.ref } + }) + await waitFor(() => expect(utils.result.current.projectRef).toBe('default')) + return { ...utils, onDismissed } + } + + beforeEach(() => { + setupSqlEditorMocks() + }) + + it('dismisses from the offer and reports it', async () => { + const { result, onDismissed } = await renderDismissHarness() + + await act(async () => { + result.current.dismiss() + }) + + expect(result.current.state.status).toBe('dismissed') + expect(onDismissed).toHaveBeenCalledTimes(1) + }) + + it('does not report a dismissal the machine rejects mid-rewrite', async () => { + stallTheRewrite() + const { result, onDismissed } = await renderDismissHarness() + + act(() => { + void result.current.requestRewrite() + }) + await waitFor(() => expect(result.current.state.status).toBe('rewriting')) + + await act(async () => { + result.current.dismiss() + }) + + // Persisting this would suppress an offer that's still live. + expect(onDismissed).not.toHaveBeenCalled() + expect(result.current.state.status).toBe('rewriting') + }) +}) diff --git a/apps/studio/hooks/analytics/useLegacyLogsRewrite.ts b/apps/studio/hooks/analytics/useLegacyLogsRewrite.ts new file mode 100644 index 00000000000..9b0ac2aa2a5 --- /dev/null +++ b/apps/studio/hooks/analytics/useLegacyLogsRewrite.ts @@ -0,0 +1,162 @@ +import { useReducer } from 'react' + +import { constructHeaders } from '@/data/fetchers' +import { rewriteLogsSqlWithAI } from '@/data/logs/logs-sql-rewrite' +import { useLogsAttributeKeys } from '@/hooks/analytics/useLogsAttributeKeys' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { getErrorMessage } from '@/lib/get-error-message' + +export type LegacyLogsRewriteState = + | { status: 'offered' } + | { status: 'rewriting' } + | { status: 'failed'; message: string } + | { status: 'noRewriteNeeded' } + | { status: 'dismissed' } + +export type LegacyLogsRewriteEvent = + | { type: 'rewriteRequested' } + | { type: 'rewriteProposed' } + | { type: 'rewriteFailed'; message: string } + | { type: 'rewriteNoop' } + | { type: 'dismissed' } + +export const INITIAL_LEGACY_LOGS_REWRITE_STATE: LegacyLogsRewriteState = { status: 'offered' } + +/** + * The events each state accepts. Anything absent is an invalid transition and + * leaves the state untouched β€” notably `dismissed` is terminal, and the offer + * can't be dismissed mid-rewrite. + */ +const VALID_EVENTS: { + [S in LegacyLogsRewriteState['status']]: readonly LegacyLogsRewriteEvent['type'][] +} = { + offered: ['rewriteRequested', 'dismissed'], + rewriting: ['rewriteProposed', 'rewriteFailed', 'rewriteNoop'], + // A failure is recoverable: the same Rewrite control retries it. + failed: ['rewriteRequested', 'dismissed'], + noRewriteNeeded: ['dismissed'], + dismissed: [], +} + +function targetState(event: LegacyLogsRewriteEvent): LegacyLogsRewriteState { + switch (event.type) { + case 'rewriteRequested': + return { status: 'rewriting' } + // The proposal is handed to the caller; the offer returns to idle behind it so + // it's ready again if the user discards the proposal. + case 'rewriteProposed': + return { status: 'offered' } + case 'rewriteFailed': + return { status: 'failed', message: event.message } + case 'rewriteNoop': + return { status: 'noRewriteNeeded' } + case 'dismissed': + return { status: 'dismissed' } + } +} + +export function legacyLogsRewriteReducer( + state: LegacyLogsRewriteState, + event: LegacyLogsRewriteEvent +): LegacyLogsRewriteState { + if (!VALID_EVENTS[state.status].includes(event.type)) return state + return targetState(event) +} + +const CHANGED_WHILE_REWRITING_MESSAGE = + 'The query changed while the Assistant was working, so the rewrite no longer matches it.' + +const NO_RESPONSE_MESSAGE = 'The Assistant did not respond. Try again.' + +export type LegacyLogsRewriteProposal = { original: string; modified: string } + +type UseLegacyLogsRewriteArgs = { + /** + * Reads the query to rewrite at the moment the user asks. A callback rather than + * a value so the rewrite operates on exactly what the user sees, not on whatever + * a surface last rendered. + */ + readSql: () => string + /** Receives a rewrite worth reviewing. Each surface routes this to its own diff. */ + onProposal: (proposal: LegacyLogsRewriteProposal) => void + /** + * Called when the offer is dismissed, for surfaces that persist that. The + * machine covers the current session only β€” a surface that remembers dismissals + * across sessions layers that on top of its own visibility check, since a value + * read from storage isn't available in time to seed the machine. + */ + onDismissed?: () => void +} + +/** + * Owns the BigQuery β†’ ClickHouse rewrite request end to end: key discovery, the + * completion call, the stale-edit guard, no-op detection, and the resulting state. + */ +export function useLegacyLogsRewrite({ + readSql, + onProposal, + onDismissed, +}: UseLegacyLogsRewriteArgs) { + const { data: project } = useSelectedProjectQuery() + const { data: organization } = useSelectedOrganizationQuery() + const projectRef = project?.ref + + const [state, dispatch] = useReducer(legacyLogsRewriteReducer, INITIAL_LEGACY_LOGS_REWRITE_STATE) + + const { fetchAttributeKeys } = useLogsAttributeKeys() + + const requestRewrite = async () => { + if (!projectRef) return console.error('[useLegacyLogsRewrite] Project ref is required') + + const currentSql = readSql() + if (currentSql.trim().length === 0) return + + dispatch({ type: 'rewriteRequested' }) + try { + const [headerData, availableKeys] = await Promise.all([ + constructHeaders(), + fetchAttributeKeys(currentSql), + ]) + const rewritten = await rewriteLogsSqlWithAI({ + sql: currentSql, + projectRef, + connectionString: project?.connectionString, + orgSlug: organization?.slug, + authorizationHeader: headerData.get('Authorization'), + availableKeys, + }) + + // The user may have kept typing while the model worked; a proposal built from + // stale text would clobber those edits when accepted. + if (readSql() !== currentSql) { + dispatch({ type: 'rewriteFailed', message: CHANGED_WHILE_REWRITING_MESSAGE }) + return + } + + // An unchanged response means the query already runs on ClickHouse and the + // dialect heuristic was over-eager. Proposing it would show an empty diff. + if (rewritten.trim() === currentSql.trim()) { + dispatch({ type: 'rewriteNoop' }) + return + } + + onProposal({ original: currentSql, modified: rewritten }) + dispatch({ type: 'rewriteProposed' }) + } catch (error) { + dispatch({ type: 'rewriteFailed', message: getErrorMessage(error, NO_RESPONSE_MESSAGE) }) + } + } + + const dismiss = () => { + const dismissed: LegacyLogsRewriteEvent = { type: 'dismissed' } + // The transition table is the contract, not the UI that happens to disable the + // control: never report a dismissal the machine rejected (mid-rewrite, say), + // or a surface that persists it would suppress an offer that's still live. + if (legacyLogsRewriteReducer(state, dismissed) === state) return + dispatch(dismissed) + onDismissed?.() + } + + return { state, requestRewrite, dismiss } +} diff --git a/apps/studio/hooks/analytics/useLogsAttributeKeys.test.tsx b/apps/studio/hooks/analytics/useLogsAttributeKeys.test.tsx new file mode 100644 index 00000000000..8b9577015b1 --- /dev/null +++ b/apps/studio/hooks/analytics/useLogsAttributeKeys.test.tsx @@ -0,0 +1,124 @@ +import { act, waitFor } from '@testing-library/react' +import { HttpResponse } from 'msw' +import { beforeEach, describe, expect, it } from 'vitest' + +import { useLogsAttributeKeys } from './useLogsAttributeKeys' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { addAPIMock } from '@/tests/lib/msw' +import { renderSqlEditorHook, setupSqlEditorMocks } from '@/tests/lib/sql-editor-test-utils' + +const OTEL_ENDPOINT = '/platform/projects/:ref/analytics/endpoints/logs.all.otel' + +const queryFor = (source: string) => `select 1 from logs where source = '${source}'` + +/** Records the SQL of every key-discovery request so we can count them. */ +function mockKeyDiscovery({ fails = false }: { fails?: boolean } = {}) { + const requests: string[] = [] + addAPIMock({ + method: 'post', + path: OTEL_ENDPOINT, + response: async ({ request }) => { + const body = (await request.clone().json()) as { sql: string } + requests.push(body.sql) + if (fails) return HttpResponse.json({ message: 'boom' }, { status: 500 }) + return HttpResponse.json({ result: [{ key: 'request.method' }] }) + }, + }) + return requests +} + +/** + * Exposes the resolved project alongside the hook. Discovery needs a project ref, + * so tests must wait for that query before asking β€” otherwise a lookup no-ops and + * the request counts below would pass for the wrong reason. + */ +function useKeysHarness() { + const { data: project } = useSelectedProjectQuery() + const { fetchAttributeKeys } = useLogsAttributeKeys() + return { projectRef: project?.ref, fetchAttributeKeys } +} + +async function renderReadyHarness() { + const utils = renderSqlEditorHook(useKeysHarness) + await waitFor(() => expect(utils.result.current.projectRef).toBe('default')) + return utils +} + +beforeEach(() => { + setupSqlEditorMocks() +}) + +describe('useLogsAttributeKeys', () => { + it('makes no request until asked', async () => { + const requests = mockKeyDiscovery() + + await renderReadyHarness() + + expect(requests).toHaveLength(0) + }) + + it('returns the discovered keys for the query source when asked', async () => { + const requests = mockKeyDiscovery() + const { result } = await renderReadyHarness() + + let keys: string[] | undefined + await act(async () => { + keys = await result.current.fetchAttributeKeys(queryFor('edge_logs')) + }) + + expect(keys).toEqual(['request.method']) + expect(requests).toHaveLength(1) + expect(requests[0]).toContain("source = 'edge_logs'") + }) + + it('reuses the cached result for a source already looked up', async () => { + const requests = mockKeyDiscovery() + const { result } = await renderReadyHarness() + + await act(async () => { + await result.current.fetchAttributeKeys(queryFor('edge_logs')) + await result.current.fetchAttributeKeys(queryFor('edge_logs')) + }) + + expect(requests).toHaveLength(1) + }) + + it('looks up a different source separately', async () => { + const requests = mockKeyDiscovery() + const { result } = await renderReadyHarness() + + await act(async () => { + await result.current.fetchAttributeKeys(queryFor('edge_logs')) + await result.current.fetchAttributeKeys(queryFor('postgres_logs')) + }) + + expect(requests).toHaveLength(2) + expect(requests[1]).toContain("source = 'postgres_logs'") + }) + + it('resolves undefined without a request when no source is detectable', async () => { + const requests = mockKeyDiscovery() + const { result } = await renderReadyHarness() + + let keys: string[] | undefined + await act(async () => { + keys = await result.current.fetchAttributeKeys('select 1 from logs limit 5') + }) + + expect(keys).toBeUndefined() + expect(requests).toHaveLength(0) + }) + + it('resolves undefined rather than throwing when discovery fails', async () => { + mockKeyDiscovery({ fails: true }) + const { result } = await renderReadyHarness() + + let keys: string[] | undefined + await act(async () => { + keys = await result.current.fetchAttributeKeys(queryFor('edge_logs')) + }) + + // Keys are an enhancement β€” a failed lookup must not block the caller. + expect(keys).toBeUndefined() + }) +}) diff --git a/apps/studio/hooks/analytics/useLogsAttributeKeys.ts b/apps/studio/hooks/analytics/useLogsAttributeKeys.ts new file mode 100644 index 00000000000..52a20be8985 --- /dev/null +++ b/apps/studio/hooks/analytics/useLogsAttributeKeys.ts @@ -0,0 +1,43 @@ +import { useQueryClient } from '@tanstack/react-query' +import { useCallback } from 'react' + +import { detectLogSource } from '@/data/logs/logs-sql-rewrite' +import { otelLogKeysQueryOptions } from '@/data/logs/otel-log-keys-query' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' + +/** + * Looks up the real `log_attributes` keys for whichever source a logs query + * targets. The AI flows pass these along so the model uses exact dotted paths + * instead of inventing them. + * + * Deliberately imperative: discovery aggregates a week of logs, and the source is + * derived from query text the user is editing, so anything reactive fires requests + * for half-typed source names. Fetching at submit time means one request per + * action the user actually took. It still goes through the query client, so a + * result already cached for that source (by an earlier submit, or by a component + * subscribed via `useOtelLogKeysQuery`) is reused rather than refetched. + * + * Keys are an enhancement, never a requirement β€” a failed or impossible lookup + * resolves to `undefined` and the caller proceeds without them. + */ +export function useLogsAttributeKeys() { + const queryClient = useQueryClient() + const { data: project } = useSelectedProjectQuery() + const projectRef = project?.ref + + const fetchAttributeKeys = useCallback( + async (sql: string): Promise => { + const source = detectLogSource(sql) + if (!projectRef || source === undefined) return undefined + + try { + return await queryClient.fetchQuery(otelLogKeysQueryOptions({ projectRef, source })) + } catch { + return undefined + } + }, + [projectRef, queryClient] + ) + + return { fetchAttributeKeys } +} diff --git a/apps/studio/components/interfaces/Settings/Logs/logs-sql-rewrite.ts b/apps/studio/lib/ai/clickhouse-logs.ts similarity index 50% rename from apps/studio/components/interfaces/Settings/Logs/logs-sql-rewrite.ts rename to apps/studio/lib/ai/clickhouse-logs.ts index ca532f204a4..b50e17e05e2 100644 --- a/apps/studio/components/interfaces/Settings/Logs/logs-sql-rewrite.ts +++ b/apps/studio/lib/ai/clickhouse-logs.ts @@ -1,12 +1,34 @@ -import { BASE_PATH } from '@/lib/constants' +/** + * Everything the model needs to know about the ClickHouse-backed Supabase `logs` + * table, in one place. Both ClickHouse completion flows β€” the inline "edit this + * query" path and the whole-query BigQuery rewrite β€” are assembled from these, + * server-side in `pages/api/ai/code/complete.ts`, so there is exactly one + * description of the schema to keep current. + */ -export const LOGS_SCHEMA_REFERENCE = `The logs table (ClickHouse) has these columns: +/** System-prompt half: the dialect rules that hold for every ClickHouse request. */ +export const CLICKHOUSE_LOGS_COMPLETION_INSTRUCTIONS = ` +# Supabase logs SQL (ClickHouse) +You are writing SQL for Supabase logs, which run on a ClickHouse-backed engine. This is NOT Postgres and NOT BigQuery. Output valid ClickHouse SQL only. +- All logs are in a single table named \`logs\`, keyed by a \`source\` column. There are no per-service tables (no \`edge_logs\`, \`postgres_logs\`, and so on) and no \`unnest\` joins. +- Per-source fields live in the \`log_attributes\` Map(String, String), read as \`log_attributes['key']\`. Map values are strings, so wrap numeric ones in \`toInt32OrZero(...)\`. +- Use ClickHouse functions, not Postgres or BigQuery ones. Use \`match(col, 'regex')\` or \`col ILIKE '%text%'\` instead of \`regexp_contains\`, \`count()\` instead of \`count(*)\`, and select the \`timestamp\` column directly instead of \`cast(timestamp as datetime)\`. +- Do not quote identifiers with double quotes and do not append a trailing semicolon. +- Do not use \`select *\`, this is disallowed by the backend. +` + +/** + * User-message half: the concrete shape of the table. Complements the dialect + * rules above β€” this is the part that changes when a log source or its fields + * change, and it is the ClickHouse counterpart to the Postgres DDL section. + */ +const CLICKHOUSE_LOGS_COLUMN_REFERENCE = `The logs table has these columns: - id (String) - timestamp (DateTime64, UTC) formatted like 2026-06-22T09:34:06.215000 (ISO 8601, microsecond precision, no trailing Z) - event_message (String): the raw log line - severity_text (String): log level when present - source (String): the service the log belongs to. Always filter by it, e.g. where source = 'edge_logs'. -- log_attributes (Map(String, String)): structured per-source fields, read as log_attributes['key']. Values are strings, so wrap numeric ones in toInt32OrZero(...) for comparisons. +- log_attributes (Map(String, String)): structured per-source fields, read as log_attributes['key'] Sources and their common log_attributes keys: - edge_logs: request.method, request.path, request.search, response.status_code, identifier @@ -17,7 +39,7 @@ Sources and their common log_attributes keys: - function_logs: event_type, function_id, execution_id, level - storage_logs, realtime_logs, postgrest_logs, supavisor_logs, pgbouncer_logs: mostly id, timestamp, event_message, with extra fields in log_attributes -Rules: always filter by source; the editor applies the selected time range so a timestamp filter is usually unnecessary; the old BigQuery unnest joins become log_attributes['key'] lookups (drop the metadata root).` +The editor applies the user's selected time range as a request parameter, so an explicit timestamp filter is usually unnecessary.` function renderAvailableKeys(availableKeys?: string[]): string { if (!availableKeys || availableKeys.length === 0) return '' @@ -26,10 +48,25 @@ function renderAvailableKeys(availableKeys?: string[]): string { ${list}\n` } -export function buildClickhouseRewritePrompt(sql: string, availableKeys?: string[]): string { - return `${LOGS_SCHEMA_REFERENCE} -${renderAvailableKeys(availableKeys)} -Convert the BigQuery logs query below to ClickHouse SQL for the logs table. There are no per-service tables and no unnest joins in ClickHouse. Follow these rules exactly: +/** + * The ClickHouse schema section of the user message β€” the counterpart to + * `buildDatabaseSchemaSection` for Postgres. `availableKeys` are the real + * `log_attributes` keys observed for the query's source, when the caller + * discovered them. + */ +export function buildClickhouseLogsSchemaSection(availableKeys?: string[]): string { + return `${CLICKHOUSE_LOGS_COLUMN_REFERENCE}\n${renderAvailableKeys(availableKeys)}` +} + +/** + * The instruction for the whole-query BigQuery β†’ ClickHouse rewrite. Used in + * place of a user instruction when the request's intent is `rewrite`. + * + * It states that a rewrite is REQUIRED: the system prompt covers writing and + * editing ClickHouse SQL generally, and without an explicit demand here the model + * echoes the input back, which surfaces to the user as an empty diff. + */ +export const CLICKHOUSE_LOGS_REWRITE_INSTRUCTION = `Your task is to REWRITE the selected query. It is BigQuery SQL and will not run on ClickHouse, so returning it unchanged is likely wrong β€” every rule below that applies must be applied. 1. Replace the FROM table with the single logs table and filter by source. The old table name is the source value: "from postgres_logs as t" becomes "from logs where source = 'postgres_logs'". This is required, never select from a table like postgres_logs or edge_logs. 2. Remove every join that unnests metadata or its structs. This includes "cross join unnest(...)" and "left join unnest(...) on true". @@ -56,87 +93,4 @@ where source = 'postgres_logs' and log_attributes['parsed.error_severity'] in ('ERROR', 'FATAL', 'PANIC') group by log_attributes['parsed.error_severity'] order by count desc -limit 100 - -Reply with ONLY the rewritten SQL query: no explanation, no comments, and no markdown code fences. - -${sql}` -} - -export function stripSqlCodeFences(text: string): string { - const trimmed = text.trim() - const fenced = trimmed.match(/```(?:sql)?\s*\n?([\s\S]*?)\n?```/i) - return (fenced ? fenced[1] : trimmed).trim() -} - -const SOURCE_ALIASES: Record = { - pg_cron_logs: 'postgres_logs', -} - -export function detectLogSource(sql: string): string | undefined { - const bySource = sql.match(/source\s*=\s*'([^']+)'/i) - if (bySource) { - const source = bySource[1].toLowerCase() - return SOURCE_ALIASES[source] ?? source - } - const byFrom = sql.match(/\bfrom\s+([a-z_][a-z0-9_]*)/i) - if (byFrom) { - const table = byFrom[1].toLowerCase() - if (table === 'logs') return undefined - return SOURCE_ALIASES[table] ?? table - } - return undefined -} - -export function looksLikeLegacyLogsQuery(sql: string): boolean { - const lower = sql.toLowerCase() - if (/\bunnest\s*\(/.test(lower)) return true - if (/cast\s*\(\s*timestamp\s+as\s+datetime\s*\)/.test(lower)) return true - const byFrom = lower.match(/\bfrom\s+([a-z_][a-z0-9_]*)/) - return byFrom ? byFrom[1] !== 'logs' : false -} - -export interface RewriteLogsSqlArgs { - sql: string - projectRef: string - connectionString?: string | null - orgSlug?: string - authorizationHeader?: string | null - availableKeys?: string[] -} - -export async function rewriteLogsSqlWithAI(args: RewriteLogsSqlArgs) { - const { sql, projectRef, connectionString, orgSlug, authorizationHeader, availableKeys } = args - - const response = await fetch(`${BASE_PATH}/api/ai/code/complete`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - ...(authorizationHeader ? { Authorization: authorizationHeader } : {}), - }, - body: JSON.stringify({ - projectRef, - connectionString, - language: 'sql', - dialect: 'clickhouse', - orgSlug, - completionMetadata: { - textBeforeCursor: '', - textAfterCursor: '', - language: 'pgsql', - prompt: buildClickhouseRewritePrompt(sql, availableKeys), - selection: sql, - }, - }), - }) - - if (!response.ok) { - const errorText = await response.text() - throw new Error(errorText || 'Failed to rewrite the query') - } - - const raw = await response.json() - const rewritten = stripSqlCodeFences(typeof raw === 'string' ? raw : String(raw)) - if (!rewritten) throw new Error('The assistant returned an empty query') - return rewritten -} +limit 100` diff --git a/apps/studio/lib/ai/prompts.ts b/apps/studio/lib/ai/prompts.ts index 3a74b8b6dcc..81c6f0435f6 100644 --- a/apps/studio/lib/ai/prompts.ts +++ b/apps/studio/lib/ai/prompts.ts @@ -786,15 +786,6 @@ export const SQL_COMPLETION_INSTRUCTIONS = ` Do not quote identifiers unless they actually require it (uppercase letters, reserved words, or special characters). Plain lowercase identifiers should not be quoted. ` -export const CLICKHOUSE_LOGS_COMPLETION_INSTRUCTIONS = ` -# Supabase logs SQL (ClickHouse) -You are writing SQL for Supabase logs, which run on a ClickHouse-backed engine. This is NOT Postgres and NOT BigQuery. Output valid ClickHouse SQL only. -- All logs are in a single table named \`logs\`, keyed by a \`source\` column. There are no per-service tables (no \`edge_logs\`, \`postgres_logs\`, and so on) and no \`unnest\` joins. -- Per-source fields live in the \`log_attributes\` Map(String, String), read as \`log_attributes['key']\`. Map values are strings, so wrap numeric ones in \`toInt32OrZero(...)\`. -- Use ClickHouse functions, not Postgres or BigQuery ones. Use \`match(col, 'regex')\` or \`col ILIKE '%text%'\` instead of \`regexp_contains\`, \`count()\` instead of \`count(*)\`, and select the \`timestamp\` column directly instead of \`cast(timestamp as datetime)\`. -- Do not quote identifiers with double quotes and do not append a trailing semicolon. -` - export const LIMITATIONS_PROMPT = ` # Limitations - You are to only answer Supabase, database, or edge function related questions. All other questions should be declined with a polite message. diff --git a/apps/studio/lib/get-error-message.test.ts b/apps/studio/lib/get-error-message.test.ts index 57f12e24cbd..93cabc4b3ab 100644 --- a/apps/studio/lib/get-error-message.test.ts +++ b/apps/studio/lib/get-error-message.test.ts @@ -3,44 +3,48 @@ import { describe, expect, it } from 'vitest' import { getErrorMessage } from './get-error-message' describe('getErrorMessage', () => { - it('returns null for null', () => { - expect(getErrorMessage(null)).toBe(null) - }) - - it('returns null for undefined', () => { - expect(getErrorMessage(undefined)).toBe(null) - }) - - it('returns the string for string errors', () => { - expect(getErrorMessage('Something went wrong')).toBe('Something went wrong') - expect(getErrorMessage('')).toBe('') - }) - it('returns the message for Error instances', () => { expect(getErrorMessage(new Error('Failed to load'))).toBe('Failed to load') expect(getErrorMessage(new TypeError('Invalid type'))).toBe('Invalid type') }) - it('returns the message property for objects with message', () => { + it('returns a string throw, trimmed', () => { + expect(getErrorMessage('Something went wrong')).toBe('Something went wrong') + expect(getErrorMessage(' boom ')).toBe('boom') + }) + + it('reads a string message off a plain object', () => { expect(getErrorMessage({ message: 'Custom error' })).toBe('Custom error') - expect(getErrorMessage({ message: 123 })).toBe('123') - expect(getErrorMessage({ message: null })).toBe('null') }) - it('converts other types to string', () => { - expect(getErrorMessage(123)).toBe('123') - expect(getErrorMessage(true)).toBe('true') - expect(getErrorMessage(false)).toBe('false') - expect(getErrorMessage({})).toBe('[object Object]') - expect(getErrorMessage([])).toBe('') + it('returns null when there is no usable message', () => { + expect(getErrorMessage(null)).toBe(null) + expect(getErrorMessage(undefined)).toBe(null) + expect(getErrorMessage('')).toBe(null) + expect(getErrorMessage(' ')).toBe(null) + expect(getErrorMessage(123)).toBe(null) + expect(getErrorMessage(true)).toBe(null) + expect(getErrorMessage([])).toBe(null) }) - it('handles objects without message property', () => { - expect(getErrorMessage({ code: 500 })).toBe('[object Object]') - expect(getErrorMessage({ error: 'test' })).toBe('[object Object]') + it('never surfaces a stringified object as the message', () => { + expect(getErrorMessage({})).toBe(null) + expect(getErrorMessage({ code: 500 })).toBe(null) + expect(getErrorMessage({ error: 'test' })).toBe(null) + expect(getErrorMessage({ message: 123 })).toBe(null) + expect(getErrorMessage({ message: null })).toBe(null) + expect(getErrorMessage({ message: { nested: 'error' } })).toBe(null) }) - it('handles nested error objects', () => { - expect(getErrorMessage({ message: { nested: 'error' } })).toBe('[object Object]') + it('returns the fallback instead of null when one is given', () => { + expect(getErrorMessage(null, 'fallback')).toBe('fallback') + expect(getErrorMessage({}, 'fallback')).toBe('fallback') + expect(getErrorMessage({ message: ' ' }, 'fallback')).toBe('fallback') + expect(getErrorMessage(123, 'fallback')).toBe('fallback') + }) + + it('prefers a real message over the fallback', () => { + expect(getErrorMessage(new Error('Rewrite failed'), 'fallback')).toBe('Rewrite failed') + expect(getErrorMessage({ message: 'Bad request' }, 'fallback')).toBe('Bad request') }) }) diff --git a/apps/studio/lib/get-error-message.ts b/apps/studio/lib/get-error-message.ts index 87e7b4ace56..e88851c9992 100644 --- a/apps/studio/lib/get-error-message.ts +++ b/apps/studio/lib/get-error-message.ts @@ -1,12 +1,22 @@ /** - * Extracts a human-readable error message from various error types. + * Extracts a human-readable message from an unknown thrown value, optionally + * falling back when there isn't one. */ -export function getErrorMessage(error: unknown): string | null { - if (error === null || error === undefined) return null - if (typeof error === 'string') return error - if (error instanceof Error) return error.message - if (typeof error === 'object' && error !== null && 'message' in error) { - return String(error.message) +export function getErrorMessage(error: unknown): string | null +export function getErrorMessage(error: unknown, fallback: string): string +export function getErrorMessage(error: unknown, fallback?: string): string | null { + if (typeof error === 'string') { + const trimmed = error.trim() + if (trimmed.length > 0) return trimmed } - return String(error) + + if (typeof error === 'object' && error !== null && 'message' in error) { + const { message } = error + if (typeof message === 'string') { + const trimmed = message.trim() + if (trimmed.length > 0) return trimmed + } + } + + return fallback ?? null } diff --git a/apps/studio/pages/api/ai/code/complete.ts b/apps/studio/pages/api/ai/code/complete.ts index 326400a381e..84b9eff76b6 100644 --- a/apps/studio/pages/api/ai/code/complete.ts +++ b/apps/studio/pages/api/ai/code/complete.ts @@ -8,10 +8,14 @@ import z from 'zod' import { executeSql } from '@/data/sql/execute-sql-mutation' import { AiOptInLevel } from '@/hooks/misc/useOrgOptedIntoAi' import { getOrgAIDetails } from '@/lib/ai/ai-details' +import { + buildClickhouseLogsSchemaSection, + CLICKHOUSE_LOGS_COMPLETION_INSTRUCTIONS, + CLICKHOUSE_LOGS_REWRITE_INSTRUCTION, +} from '@/lib/ai/clickhouse-logs' import { getModel } from '@/lib/ai/model' import { DEFAULT_COMPLETION_MODEL, LOGS_REWRITE_MODEL } from '@/lib/ai/model.utils' import { - CLICKHOUSE_LOGS_COMPLETION_INSTRUCTIONS, COMPLETION_PROMPT, EDGE_FUNCTION_PROMPT, PG_BEST_PRACTICES, @@ -124,12 +128,24 @@ const requestBodySchema = z.object({ textAfterCursor: z.string(), prompt: z.string(), selection: z.string(), + /** + * The real `log_attributes` keys observed for the query's source, when the + * client discovered them. ClickHouse-only β€” there is no schema to fetch + * server-side for the logs table the way there is for Postgres DDL. + */ + availableKeys: z.array(z.string()).optional(), }), projectRef: z.string(), connectionString: z.string().nullish(), orgSlug: z.string().optional(), language: z.string().optional(), dialect: z.enum(['postgres', 'clickhouse']).optional(), + /** + * What the caller wants done. `rewrite` swaps the user instruction for the + * canonical BigQuery β†’ ClickHouse rewrite instruction, so the client never has + * to carry prompt text. ClickHouse-only; defaults to `edit`. + */ + intent: z.enum(['edit', 'rewrite']).optional(), }) async function handler(req: NextApiRequest, res: NextApiResponse) { @@ -150,8 +166,10 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { return res.status(400).json({ error: 'Invalid request body', issues: parseError.issues }) } - const { completionMetadata, projectRef, connectionString, orgSlug, language, dialect } = data - const { textBeforeCursor, textAfterCursor, prompt, selection } = completionMetadata + const { completionMetadata, projectRef, connectionString, orgSlug, language, dialect, intent } = + data + const { textBeforeCursor, textAfterCursor, prompt, selection, availableKeys } = + completionMetadata const isClickhouse = dialect === 'clickhouse' const authorization = req.headers.authorization @@ -232,8 +250,9 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { const system = isClickhouse ? source` - You rewrite SQL queries to ClickHouse SQL for the Supabase logs table. - Output only the rewritten SQL query: no explanation, no markdown, and no code fences. + You write and edit ClickHouse SQL for the Supabase logs table. + Reply with ONLY the SQL that replaces the block below, keeping the + surrounding query valid: no explanation, no comments, and no markdown code fences. ${CLICKHOUSE_LOGS_COMPLETION_INSTRUCTIONS} ${SECURITY_PROMPT} ` @@ -243,23 +262,31 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { ${SECURITY_PROMPT} ` - const userMessage = isClickhouse - ? prompt - : source` - ## Database Schema + const schemaSection = isClickhouse + ? { heading: 'Logs Schema', body: buildClickhouseLogsSchemaSection(availableKeys) } + : { + heading: 'Database Schema', + body: buildDatabaseSchemaSection({ includeSchema, schemaListResult, schemaDDLResult }), + } - ${buildDatabaseSchemaSection({ includeSchema, schemaListResult, schemaDDLResult })} + const instruction = + isClickhouse && intent === 'rewrite' ? CLICKHOUSE_LOGS_REWRITE_INSTRUCTION : prompt - ## Code + const userMessage = source` + ## ${schemaSection.heading} - \`\`\`${language ?? ''} - ${textBeforeCursor}${selection}${textAfterCursor} - \`\`\` + ${schemaSection.body} - ## Instruction + ## Code - ${prompt} - ` + \`\`\`${language ?? ''} + ${textBeforeCursor}${selection}${textAfterCursor} + \`\`\` + + ## Instruction + + ${instruction} + ` // Note: these must be of type `CoreMessage` to prevent AI SDK from stripping `providerOptions` // https://github.com/vercel/ai/blob/81ef2511311e8af34d75e37fc8204a82e775e8c3/packages/ai/core/prompt/standardize-prompt.ts#L83-L88 diff --git a/apps/studio/pages/project/[ref]/logs/explorer/index.tsx b/apps/studio/pages/project/[ref]/logs/explorer/index.tsx index 4d736497fc4..65153b9cb3c 100644 --- a/apps/studio/pages/project/[ref]/logs/explorer/index.tsx +++ b/apps/studio/pages/project/[ref]/logs/explorer/index.tsx @@ -1,5 +1,5 @@ import { useMonaco } from '@monaco-editor/react' -import { useLocalStorage } from '@uidotdev/usehooks' +import { useDebounce, useLocalStorage } from '@uidotdev/usehooks' import { IS_PLATFORM, LOCAL_STORAGE_KEYS, useFlag, useParams } from 'common' import dayjs from 'dayjs' import type { editor } from 'monaco-editor' @@ -8,11 +8,7 @@ import { useEffect, useMemo, useRef, useState } from 'react' import { toast } from 'sonner' import { Button, ResizableHandle, ResizablePanel, ResizablePanelGroup } from 'ui' -import { - detectLogSource, - looksLikeLegacyLogsQuery, - rewriteLogsSqlWithAI, -} from '@/components/interfaces/Settings/Logs/logs-sql-rewrite' +import { LegacyLogsRewriteAdmonition } from '@/components/interfaces/Settings/Logs/LegacyLogsRewriteAdmonition' import { EXPLORER_DATEPICKER_HELPERS, getDefaultHelper, @@ -36,7 +32,6 @@ import { buildLogQueryParams, resolveLogDateRange, } from '@/components/interfaces/Settings/Logs/logsDateRange' -import { LogsExplorerOtelBanner } from '@/components/interfaces/Settings/Logs/LogsExplorerOtelBanner' import { LogsQueryPanel } from '@/components/interfaces/Settings/Logs/LogsQueryPanel' import { LogTable } from '@/components/interfaces/Settings/Logs/LogTable' import UpgradePrompt from '@/components/interfaces/Settings/Logs/UpgradePrompt' @@ -52,16 +47,20 @@ import { UpsertContentPayload, useContentUpsertMutation, } from '@/data/content/content-upsert-mutation' -import { constructHeaders } from '@/data/fetchers' -import { fetchOtelLogKeys } from '@/data/logs/otel-log-keys-query' +import { + LEGACY_LOGS_DIALECT_CHECK_DEBOUNCE_MS, + shouldOfferLegacyLogsRewrite, +} from '@/data/logs/logs-sql-rewrite' import { untrustedLogSql } from '@/data/logs/safe-analytics-sql' +import { + useLegacyLogsRewrite, + type LegacyLogsRewriteProposal, +} from '@/hooks/analytics/useLegacyLogsRewrite' import { useLogsQuery } from '@/hooks/analytics/useLogsQuery' import { useLogsUrlState } from '@/hooks/analytics/useLogsUrlState' import { useCustomContent } from '@/hooks/custom-content/useCustomContent' import { useCheckEntitlements } from '@/hooks/misc/useCheckEntitlements' import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' -import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' -import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' import { useUpgradePrompt } from '@/hooks/misc/useUpgradePrompt' import { uuidv4 } from '@/lib/helpers' import { useProfile } from '@/lib/profile' @@ -101,9 +100,6 @@ export const LogsExplorerPage: NextPageWithLayout = () => { const useOtelEndpoint = useFlag('otelLegacyLogs') const { logsShowMetadataIpTemplate } = useIsFeatureEnabled(['logs:show_metadata_ip_template']) - const { data: project } = useSelectedProjectQuery() - const { data: organization } = useSelectedOrganizationQuery() - const allTemplates = useMemo(() => { const templates = getLogsTemplates(useOtelEndpoint) if (logsShowMetadataIpTemplate) return templates @@ -142,11 +138,7 @@ export const LogsExplorerPage: NextPageWithLayout = () => { const [warnings, setWarnings] = useState([]) const [showMissingLimitError, setShowMissingLimitError] = useState(false) const [selectedLog, setSelectedLog] = useState(null) - const [rewriteProposal, setRewriteProposal] = useState<{ - original: string - modified: string - } | null>(null) - const [isRewriting, setIsRewriting] = useState(false) + const [rewriteProposal, setRewriteProposal] = useState(null) const [rewriteBannerDismissed, setRewriteBannerDismissed] = useLocalStorage( `project-${projectRef}-logs-rewrite-banner-dismissed`, false @@ -189,7 +181,32 @@ export const LogsExplorerPage: NextPageWithLayout = () => { const results = logData const isLoading = logsLoading - const showRewriteCTA = useOtelEndpoint && looksLikeLegacyLogsQuery(editorValue) + // Debounced so the dialect heuristics don't run on every keystroke, matching the + // SQL editor's rewrite banner. + const settledEditorValue = useDebounce(editorValue, LEGACY_LOGS_DIALECT_CHECK_DEBOUNCE_MS) + const shouldShowRewriteCTA = useMemo( + () => + shouldOfferLegacyLogsRewrite({ + sql: settledEditorValue, + isClickhouseLogsEnabled: useOtelEndpoint, + }), + [settledEditorValue, useOtelEndpoint] + ) + + const { + state: rewriteState, + requestRewrite, + dismiss: dismissRewriteBanner, + } = useLegacyLogsRewrite({ + // Read straight from the editor instance β€” `editorValue` state can lag the + // most recent keystroke. + readSql: () => editorRef.current?.getValue() ?? editorValue, + onProposal: setRewriteProposal, + onDismissed: () => setRewriteBannerDismissed(true), + }) + const isRewriting = rewriteState.status === 'rewriting' + const hasUnacknowledgedRewriteOutcome = + rewriteState.status === 'failed' || rewriteState.status === 'noRewriteNeeded' const { mutateAsync: upsertContent, isPending: isUpsertingContent } = useContentUpsertMutation({ onError: (e) => { @@ -243,42 +260,6 @@ export const LogsExplorerPage: NextPageWithLayout = () => { addRecentLogSqlSnippet({ unchecked_sql: untrustedLogSql(template.searchString) }) } - const handleRewrite = async () => { - const currentSql = editorRef.current?.getValue() ?? editorValue - if (!currentSql.trim()) { - toast.info('Write a query to rewrite first') - return - } - setIsRewriting(true) - try { - const headerData = await constructHeaders() - const source = detectLogSource(currentSql) - const availableKeys = source - ? await fetchOtelLogKeys({ projectRef: projectRef!, source }).catch(() => undefined) - : undefined - const rewritten = await rewriteLogsSqlWithAI({ - sql: currentSql, - projectRef: projectRef!, - connectionString: project?.connectionString, - orgSlug: organization?.slug, - authorizationHeader: headerData.get('Authorization'), - availableKeys, - }) - // The editor may have changed while awaiting key discovery and the AI call; - // don't offer a proposal that would clobber intervening edits. - const latestSql = editorRef.current?.getValue() ?? editorValue - if (latestSql !== currentSql) { - toast.info('The query changed while rewriting. Please try again.') - return - } - setRewriteProposal({ original: currentSql, modified: rewritten }) - } catch (error) { - toast.error(`Couldn't rewrite the query: ${(error as Error).message}`) - } finally { - setIsRewriting(false) - } - } - const acceptRewrite = () => { if (!rewriteProposal) return editorRef.current?.setValue(rewriteProposal.modified) @@ -504,15 +485,16 @@ export const LogsExplorerPage: NextPageWithLayout = () => { templates={allTemplates.filter((template) => template.mode === 'custom')} onSelectTemplate={onSelectTemplate} warnings={warnings} - showRewriteAction={showRewriteCTA && rewriteBannerDismissed} + showRewriteAction={shouldShowRewriteCTA && rewriteBannerDismissed} isRewriting={isRewriting} - onRewrite={handleRewrite} + onRewrite={requestRewrite} /> - {showRewriteCTA && !rewriteBannerDismissed && ( - setRewriteBannerDismissed(true)} + {(hasUnacknowledgedRewriteOutcome || + (shouldShowRewriteCTA && !rewriteBannerDismissed)) && ( + )} From 21511042a3d1b2c3fb825c21dd5ef1a50bae4e09 Mon Sep 17 00:00:00 2001 From: Charis <26616127+charislam@users.noreply.github.com> Date: Tue, 4 Aug 2026 09:02:40 -0400 Subject: [PATCH 06/83] feat(studio): assistant logs context and reports guard (#48514) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Feature β€” final PR (9/9) of the SQL editor logs-source stack. **Base branch:** `charislam/sql-editor-inline-ai-clickhouse-dialect` (PR 8). Nothing here is user-visible: entry points stay behind `sqlEditorLogsSource` + `otelLegacyLogs`, and flag rollout happens after the whole stack merges. ## What is the current behavior? - The Assistant has no idea a SQL editor snippet targets the logs backend. Ask it about a logs snippet and it answers in Postgres, because the attached query is fenced as ` ```sql ` and nothing tells the model otherwise. - Because the `sql` fence is what `MessageMarkdown` treats as runnable Postgres, an attached ClickHouse query is rendered with a Run-against-Postgres affordance and branded with `untrustedSql`. - "Debug with Assistant" on a failed logs query produces a dialect-less prompt, so both the in-app assistant and the copyable version get debugged as Postgres. - A report referencing a `log_sql` snippet runs its ClickHouse SQL against the user's Postgres database and surfaces the resulting error. ## What is the new behavior? **Assistant panel.** The "Current Query" chip records which backend the attached query targets. That reaches the model two ways: each attachment is fenced with its own dialect (` ```clickhouse ` vs ` ```sql `), and a `containsLogsSnippets` flag rides on the user message as AI SDK `metadata`. The server reads the flag off the conversation and prepends the ClickHouse dialect rules plus the logs schema reference as a non-cached context message. Two design points worth calling out in review: - The flag lives on the **message**, not the request body, so Retry and the tool-approval continuation reproduce the context a message was originally asked in β€” neither of those passes a per-call body. - It's derived from **what's actually attached**, so detaching the chip drops the claim rather than leaving the two able to disagree. The `clickhouse` fence also keeps a logs query out of `MessageMarkdown`'s `sql` branch, so it's no longer offered as runnable Postgres or branded with `untrustedSql` β€” a boundary this stack's distinct brands exist to prevent crossing. **Debug flow.** `buildDebugChatArgs` attaches its query with a source for the same reason, and names the dialect in the prompt text so the copyable version stands on its own outside the app. **Reports.** A report only stores a snippet id, so whether it queries the logs backend is only knowable once the content loads. `ReportBlock` guards on the fetched type and renders a `LogsSnippetReportBlock` placeholder instead of executing. Double-guarded: no `sql` for a logs snippet (so it's out of the query key and `queryFn` short-circuits even on an explicit `refetch`) and `enabled` excludes it. **Incidental cleanups.** `buildAssistantContextMessages` extracted out of `generate-assistant-response`; a schema-access sentinel that was duplicated as a string literal across two files (and compared against) replaced with one exported constant; `SqlSnippet` deduplicated to a single declaration; `resolveSnippetSource` / `isLogsSource` shared instead of re-implemented per surface. **Tests.** 4 new/extended suites. Notable cases pinned: a message with no metadata must validate (`safeValidateUIMessages` applies `metadataSchema` to *every* message, so a required schema would 400 every existing conversation); only *user* messages count, so a model reply can't talk the server into a different dialect; a mixed-attachment message is flagged without overclaiming a single source; and `ReportBlock` registers no pg-meta mock for the logs cases, so an unhandled request failing the test *is* the assertion that logs SQL never reaches Postgres. Verified: `pnpm typecheck`, `lint:ratchet` (no regression), Prettier, and the full Studio suite (459 files / 4969 tests). ## Additional context ## Summary by CodeRabbit - **New Features** - Added support for recognizing log snippets in reports, with clear guidance to open them in the SQL editor or remove them. - AI Assistant now understands log snippets and provides ClickHouse-specific context, formatting, and troubleshooting guidance. - Snippets retain their source information when shared with the AI Assistant. - **Bug Fixes** - Prevented unsupported log snippets from being executed as regular database queries. - Improved source detection when opening snippets directly from links. --- .../ReportBlock/LogsSnippetReportBlock.tsx | 37 ++++++++ .../Reports/ReportBlock/ReportBlock.tsx | 27 +++++- .../SQLEditor/SQLEditor.utils.test.ts | 31 ++++++- .../interfaces/SQLEditor/SQLEditor.utils.ts | 45 +++++++--- .../interfaces/SQLEditor/querySource.test.ts | 42 +++++++++ .../interfaces/SQLEditor/querySource.ts | 27 +++++- .../interfaces/SQLEditor/useRunSource.ts | 10 +-- .../SQLEditor/useSqlEditorAi.test.tsx | 6 +- .../interfaces/SQLEditor/useSqlEditorAi.ts | 8 +- .../ui/AIAssistantPanel/AIAssistant.tsx | 36 ++++++-- .../ui/AIAssistantPanel/AIAssistant.types.ts | 2 - .../AIAssistant.utils.test.ts | 71 +++++++++++++++ .../ui/AIAssistantPanel/AIAssistant.utils.ts | 43 +++++++++ .../ui/AIAssistantPanel/AIOnboarding.tsx | 2 +- .../ui/AIAssistantPanel/AssistantChatForm.tsx | 10 +-- .../ui/AIAssistantPanel/SnippetRow.tsx | 17 +--- apps/studio/lib/ai/assistant-context.test.ts | 66 ++++++++++++++ apps/studio/lib/ai/assistant-context.ts | 79 ++++++++++++++++ .../lib/ai/assistant-message-metadata.test.ts | 90 +++++++++++++++++++ .../lib/ai/assistant-message-metadata.ts | 30 +++++++ .../lib/ai/generate-assistant-response.ts | 39 +++----- apps/studio/pages/api/ai/sql/generate-v4.ts | 11 ++- apps/studio/state/ai-assistant-state.tsx | 8 +- 23 files changed, 651 insertions(+), 86 deletions(-) create mode 100644 apps/studio/components/interfaces/Reports/ReportBlock/LogsSnippetReportBlock.tsx create mode 100644 apps/studio/lib/ai/assistant-context.test.ts create mode 100644 apps/studio/lib/ai/assistant-context.ts create mode 100644 apps/studio/lib/ai/assistant-message-metadata.test.ts create mode 100644 apps/studio/lib/ai/assistant-message-metadata.ts diff --git a/apps/studio/components/interfaces/Reports/ReportBlock/LogsSnippetReportBlock.tsx b/apps/studio/components/interfaces/Reports/ReportBlock/LogsSnippetReportBlock.tsx new file mode 100644 index 00000000000..c6114a47613 --- /dev/null +++ b/apps/studio/components/interfaces/Reports/ReportBlock/LogsSnippetReportBlock.tsx @@ -0,0 +1,37 @@ +import { ScrollText } from 'lucide-react' +import { ReactNode } from 'react' + +import { ReportBlockContainer } from './ReportBlockContainer' + +interface LogsSnippetReportBlockProps { + label: string + actions?: ReactNode +} + +/** + * Stands in for a snippet that queries the logs backend. Reports only run SQL + * against the user's database, so a `log_sql` snippet reference renders this + * instead of executing β€” see ReportBlock, which never issues a query for one. + */ +export const LogsSnippetReportBlock = ({ label, actions }: LogsSnippetReportBlockProps) => { + return ( + } + label={label} + actions={actions} + > +
+

+ Logs snippets aren't supported in reports yet +

+

+ Reports can't run queries against the logs backend yet. Open this snippet in the SQL + editor to view results, or remove it from this report. +

+
+
+ ) +} diff --git a/apps/studio/components/interfaces/Reports/ReportBlock/ReportBlock.tsx b/apps/studio/components/interfaces/Reports/ReportBlock/ReportBlock.tsx index ba68a57a127..2fea6cc8265 100644 --- a/apps/studio/components/interfaces/Reports/ReportBlock/ReportBlock.tsx +++ b/apps/studio/components/interfaces/Reports/ReportBlock/ReportBlock.tsx @@ -9,6 +9,7 @@ import { applyAutoLimit } from '../../SQLEditor/SQLEditor.utils' import { BURSTABLE_IO_METRIC_KEYS, DEPRECATED_REPORTS } from '../Reports.constants' import { ChartBlock } from './ChartBlock' import { DeprecatedChartBlock } from './DeprecatedChartBlock' +import { LogsSnippetReportBlock } from './LogsSnippetReportBlock' import { UnavailableChartBlock } from './UnavailableChartBlock' import { hasBurstableIO } from '@/components/interfaces/DiskManagement/DiskManagement.utils' import { ChartConfig } from '@/components/interfaces/SQLEditor/UtilityPanel/ChartConfig' @@ -79,8 +80,11 @@ export const ReportBlock = ({ } ) + const isLogsSnippet = data?.type === 'log_sql' + const autoLimit = 100 - const sql = isSnippet ? (data?.content as SqlSnippets.Content)?.unchecked_sql : undefined + const sql = + isSnippet && !isLogsSnippet ? (data?.content as SqlSnippets.Content)?.unchecked_sql : undefined // acceptUntrustedSql is usually not allowed outside a user-action event // handler, but it's explicitly fine here: adding this block to a report is // itself the user action that approves running its SQL. @@ -125,7 +129,7 @@ export const ReportBlock = ({ sql: formattedSql, }) }, - enabled: !isLoadingContent && contentError == null, + enabled: !isLoadingContent && contentError == null && !isLogsSnippet, refetchOnWindowFocus: false, }) @@ -151,6 +155,25 @@ export const ReportBlock = ({ } }, [isRefreshing, refetch]) + if (isLogsSnippet) { + return ( + } + className="w-7 h-7" + onClick={() => onRemoveChart({ metric: { key: item.attribute } })} + tooltip={{ content: { side: 'bottom', text: 'Remove chart' } }} + /> + ) : null + } + /> + ) + } + return ( <> {isSnippet ? ( diff --git a/apps/studio/components/interfaces/SQLEditor/SQLEditor.utils.test.ts b/apps/studio/components/interfaces/SQLEditor/SQLEditor.utils.test.ts index aeefbdcfe32..d981a2da927 100644 --- a/apps/studio/components/interfaces/SQLEditor/SQLEditor.utils.test.ts +++ b/apps/studio/components/interfaces/SQLEditor/SQLEditor.utils.test.ts @@ -393,13 +393,26 @@ describe('SQLEditor.utils.ts:buildDebugChatArgs', () => { test('builds the newChat payload from the snippet sql and error message', () => { const snippet = buildDebugSnippet('select 1;') const result = { error: { message: 'relation does not exist' } } - expect(buildDebugChatArgs(snippet, result)).toEqual({ + expect(buildDebugChatArgs(snippet, result, 'database')).toEqual({ name: 'Debug SQL snippet', - sqlSnippets: ['select 1;'], + sqlSnippets: [{ label: 'Current Query', content: 'select 1;', source: 'database' }], initialInput: 'Help me to debug the attached sql snippet which gives the following error: \n\nrelation does not exist', }) }) + + // The attachment is what puts sqlSource on the message the user then submits, so + // the debug flow has to attach a sourced snippet, not a bare string. + test('attaches the query with its source and names the dialect', () => { + const snippet = buildDebugSnippet('select count(*) from logs;') + const result = { error: { message: 'Unknown expression identifier' } } + expect(buildDebugChatArgs(snippet, result, 'logs').sqlSnippets).toEqual([ + { label: 'Current Query', content: 'select count(*) from logs;', source: 'logs' }, + ]) + expect(buildDebugChatArgs(snippet, result, 'logs').initialInput).toEqual( + 'Help me to debug the attached sql snippet which gives the following error: \n\nUnknown expression identifier\n\nThis query runs against the Supabase logs table on a ClickHouse-backed engine, not Postgres.' + ) + }) }) describe('SQLEditor.utils.ts:buildCompletionRequestBody', () => { @@ -1464,9 +1477,21 @@ describe('SQLEditor.utils:assembleCompletionDiff', () => { describe('SQLEditor.utils:buildDebugPromptText', () => { it('builds the debug prompt with the error message and SQL block', () => { - const result = buildDebugPromptText('select 1;', 'relation does not exist') + const result = buildDebugPromptText('select 1;', 'relation does not exist', 'database') expect(result).toContain('relation does not exist') expect(result).toContain('```sql\nselect 1;\n```') + expect(result).not.toContain('ClickHouse') + }) + + // This text is copyable and gets pasted into external models, so it has to name + // the dialect itself rather than relying on the message metadata. + it('names the dialect for a logs snippet', () => { + const sql = "select count() from logs where source = 'edge_logs'" + const result = buildDebugPromptText(sql, 'Unknown expression identifier', 'logs') + expect(result).toContain('Unknown expression identifier') + expect(result).toContain('ClickHouse') + expect(result).toContain('not Postgres') + expect(result).toContain('```clickhouse\n' + sql + '\n```') }) }) diff --git a/apps/studio/components/interfaces/SQLEditor/SQLEditor.utils.ts b/apps/studio/components/interfaces/SQLEditor/SQLEditor.utils.ts index 33ec043398d..188c8c0fdce 100644 --- a/apps/studio/components/interfaces/SQLEditor/SQLEditor.utils.ts +++ b/apps/studio/components/interfaces/SQLEditor/SQLEditor.utils.ts @@ -7,7 +7,7 @@ import { } from '@supabase/pg-meta' import { TABLE_EVENT_ACTIONS } from 'common/telemetry-constants' -import type { SqlSnippetSource } from './querySource' +import { isLogsSource, sqlSourceToFenceLanguage, type SqlSnippetSource } from './querySource' import { alterDatabasePreventConnectionStatements, destructiveSqlRegex, @@ -509,7 +509,7 @@ export type SqlDialect = 'postgres' | 'clickhouse' * else runs against the user's Postgres database. */ export function sqlSourceToDialect(source: SqlSnippetSource): SqlDialect { - return source === 'logs' ? 'clickhouse' : 'postgres' + return isLogsSource(source) ? 'clickhouse' : 'postgres' } /** @@ -550,11 +550,31 @@ export function buildCompletionRequestBody({ } /** - * Builds the prompt text used to ask the assistant to debug a failing snippet. + * Names the dialect for a logs snippet, whose SQL is ClickHouse against the `logs` + * table. The in-app assistant also learns this from the message's `sqlSource` + * metadata, but the same text is offered as "Copy prompt" and pasted into external + * models, so it has to stand on its own β€” otherwise a logs error gets Postgres advice. */ -export function buildDebugPromptText(sql: string, errorMessage: string): string { - const prompt = `Help me to debug the attached sql snippet which gives the following error: \n\n${errorMessage}` - return `${prompt}\n\nSQL Query:\n\`\`\`sql\n${sql}\n\`\`\`` +const CLICKHOUSE_LOGS_DEBUG_HINT = + 'This query runs against the Supabase logs table on a ClickHouse-backed engine, not Postgres.' + +/** The shared ask + error + dialect preamble behind both debug entry points. */ +function buildDebugRequestText(errorMessage: string, source: SqlSnippetSource): string { + const ask = `Help me to debug the attached sql snippet which gives the following error: \n\n${errorMessage}` + return isLogsSource(source) ? `${ask}\n\n${CLICKHOUSE_LOGS_DEBUG_HINT}` : ask +} + +/** + * Builds the prompt text used to ask the assistant to debug a failing snippet, and + * offered verbatim as the dropdown's copyable prompt. + */ +export function buildDebugPromptText( + sql: string, + errorMessage: string, + source: SqlSnippetSource +): string { + const fence = sqlSourceToFenceLanguage(source) + return `${buildDebugRequestText(errorMessage, source)}\n\nSQL Query:\n\`\`\`${fence}\n${sql}\n\`\`\`` } // Accepts either brand: the debug flow only reads the SQL as text (it's stripped @@ -586,13 +606,18 @@ export function extractDebugContext( */ export function buildDebugChatArgs( snippet: DebugSnippet, - result: DebugResult -): { name: string; sqlSnippets: string[]; initialInput: string } { + result: DebugResult, + source: SqlSnippetSource +): { + name: string + sqlSnippets: Array<{ label: string; content: string; source: SqlSnippetSource }> + initialInput: string +} { const { sql, errorMessage } = extractDebugContext(snippet, result) return { name: 'Debug SQL snippet', - sqlSnippets: [sql], - initialInput: `Help me to debug the attached sql snippet which gives the following error: \n\n${errorMessage}`, + sqlSnippets: [{ label: 'Current Query', content: sql, source }], + initialInput: buildDebugRequestText(errorMessage, source), } } diff --git a/apps/studio/components/interfaces/SQLEditor/querySource.test.ts b/apps/studio/components/interfaces/SQLEditor/querySource.test.ts index 5b79d3b7768..d0e4659d0da 100644 --- a/apps/studio/components/interfaces/SQLEditor/querySource.test.ts +++ b/apps/studio/components/interfaces/SQLEditor/querySource.test.ts @@ -5,10 +5,13 @@ import { datePickerValueToLogDateRange, DEFAULT_LOG_DATE_RANGE, getSnippetSource, + isLogsSource, isoDateTimeString, logDateRangesEqual, logDateRangeToDatePickerValue, resolveLogRunRange, + resolveSnippetSource, + sqlSourceToFenceLanguage, type LogDateRange, } from './querySource' import { @@ -50,6 +53,45 @@ describe('querySource.ts:getSnippetSource', () => { }) }) +describe('querySource.ts:isLogsSource', () => { + it('is true only for the logs source', () => { + expect(isLogsSource('logs')).toBe(true) + expect(isLogsSource('database')).toBe(false) + }) + + it('is false for an absent source', () => { + expect(isLogsSource(undefined)).toBe(false) + }) +}) + +describe('querySource.ts:sqlSourceToFenceLanguage', () => { + it('labels a logs query as clickhouse and everything else as sql', () => { + expect(sqlSourceToFenceLanguage('logs')).toBe('clickhouse') + expect(sqlSourceToFenceLanguage('database')).toBe('sql') + }) + + // Attachments can carry no source; those are Postgres SQL. + it('treats an absent source as sql', () => { + expect(sqlSourceToFenceLanguage(undefined)).toBe('sql') + }) +}) + +describe('querySource.ts:resolveSnippetSource', () => { + it('prefers the snippet type over the URL param', () => { + expect(resolveSnippetSource({ type: 'log_sql' }, undefined)).toBe('logs') + // A stale/mismatched param must not override a snippet that already exists. + expect(resolveSnippetSource({ type: 'sql' }, 'logs')).toBe('database') + }) + + // A fresh `/sql/new` tab has no snippet until the first keystroke, so the param is + // the only signal that it is a logs tab. + it('falls back to the URL param before the snippet exists', () => { + expect(resolveSnippetSource(undefined, 'logs')).toBe('logs') + expect(resolveSnippetSource(undefined, undefined)).toBe('database') + expect(resolveSnippetSource(undefined, 'nonsense')).toBe('database') + }) +}) + describe('querySource.ts:isoDateTimeString', () => { it('accepts a valid ISO datetime', () => { const raw = '2025-01-01T12:00:00.000Z' diff --git a/apps/studio/components/interfaces/SQLEditor/querySource.ts b/apps/studio/components/interfaces/SQLEditor/querySource.ts index 1ba1c4fd1ea..32e84bd78a3 100644 --- a/apps/studio/components/interfaces/SQLEditor/querySource.ts +++ b/apps/studio/components/interfaces/SQLEditor/querySource.ts @@ -1,7 +1,7 @@ import dayjs from 'dayjs' -import { generateDynamicHelper } from '@/components/interfaces/Settings/Logs/Logs.datePickerHelpers' import type { Unit } from '@/components/interfaces/Settings/Logs/Logs.datePickerHelpers' +import { generateDynamicHelper } from '@/components/interfaces/Settings/Logs/Logs.datePickerHelpers' import type { DatePickerValue } from '@/components/interfaces/Settings/Logs/Logs.DatePickers' import type { ResolvedLogDateRange } from '@/components/interfaces/Settings/Logs/logsDateRange' import type { Snippet } from '@/data/content/sql-folders-query' @@ -25,6 +25,19 @@ export function getSnippetSource(snippet: Pick): SqlSnippetSour return snippet.type === 'log_sql' ? 'logs' : 'database' } +export function isLogsSource(source: SqlSnippetSource | undefined): boolean { + return source === 'logs' +} + +/** + * The markdown fence language a source's SQL is written into a prompt with, so the model + * can tell a ClickHouse logs query from Postgres SQL. */ +export function sqlSourceToFenceLanguage( + source: SqlSnippetSource | undefined +): 'sql' | 'clickhouse' { + return isLogsSource(source) ? 'clickhouse' : 'sql' +} + /** * Parse a raw `source` value (e.g. the `?source=` query param a creation entry * threads through `/sql/new`) into a `SqlSnippetSource`. Only the explicit @@ -35,6 +48,18 @@ export function parseSqlSnippetSource(raw: string | undefined): SqlSnippetSource return raw === 'logs' ? 'logs' : 'database' } +/** + * Resolve where an open snippet's query runs, falling back to the `?source=` URL param + * when the snippet isn't in the store yet β€” a fresh `/sql/new` tab is materialized + * lazily on the first keystroke, and until then the param is the only signal. + */ +export function resolveSnippetSource( + snippet: Pick | undefined, + sourceParam: string | undefined +): SqlSnippetSource { + return snippet !== undefined ? getSnippetSource(snippet) : parseSqlSnippetSource(sourceParam) +} + /** * An ISO-8601 datetime proven valid at construction via a dayjs parse. Absolute * log ranges carry these instead of raw strings so an unvalidated datetime can diff --git a/apps/studio/components/interfaces/SQLEditor/useRunSource.ts b/apps/studio/components/interfaces/SQLEditor/useRunSource.ts index aa7cbf05b6f..95c83d782a5 100644 --- a/apps/studio/components/interfaces/SQLEditor/useRunSource.ts +++ b/apps/studio/components/interfaces/SQLEditor/useRunSource.ts @@ -3,10 +3,9 @@ import { useMemo } from 'react' import { DEFAULT_LOG_DATE_RANGE, - getSnippetSource, - parseSqlSnippetSource, + isLogsSource, + resolveSnippetSource, type QuerySource, - type SqlSnippetSource, } from './querySource' import { useSqlEditorSessionSnapshot } from '@/state/sql-editor/sql-editor-session-state' import { useSqlEditorV2StateSnapshot } from '@/state/sql-editor/sql-editor-state' @@ -29,12 +28,11 @@ export function useRunSource(id: string): QuerySource { const sessionSnap = useSqlEditorSessionSnapshot() const snippet = snapV2.snippets[id]?.snippet - const source: SqlSnippetSource = - snippet !== undefined ? getSnippetSource(snippet) : parseSqlSnippetSource(sourceParam) + const source = resolveSnippetSource(snippet, sourceParam) const logRange = sessionSnap.logRange[id] return useMemo(() => { - if (source === 'logs') { + if (isLogsSource(source)) { return { type: 'logs', dateRange: logRange ?? DEFAULT_LOG_DATE_RANGE } } return { type: 'database' } diff --git a/apps/studio/components/interfaces/SQLEditor/useSqlEditorAi.test.tsx b/apps/studio/components/interfaces/SQLEditor/useSqlEditorAi.test.tsx index 60f2a399f3c..b62fb4f45ec 100644 --- a/apps/studio/components/interfaces/SQLEditor/useSqlEditorAi.test.tsx +++ b/apps/studio/components/interfaces/SQLEditor/useSqlEditorAi.test.tsx @@ -245,7 +245,11 @@ describe('useSqlEditorAi β€” debug', () => { const activeChat = aiAssistantState.chats[aiAssistantState.activeChatId ?? ''] expect(activeChat?.name).toBe('Debug SQL snippet') - expect(aiAssistantState.sqlSnippets).toEqual(['selct 1;']) + // Attached with its source, which is what carries sqlSource onto the message the + // user submits from the prefilled composer. + expect(aiAssistantState.sqlSnippets).toEqual([ + { label: 'Current Query', content: 'selct 1;', source: 'database' }, + ]) expect(aiAssistantState.initialInput).toContain('syntax error at or near "selct"') }) diff --git a/apps/studio/components/interfaces/SQLEditor/useSqlEditorAi.ts b/apps/studio/components/interfaces/SQLEditor/useSqlEditorAi.ts index 240d3462404..36359ffe49a 100644 --- a/apps/studio/components/interfaces/SQLEditor/useSqlEditorAi.ts +++ b/apps/studio/components/interfaces/SQLEditor/useSqlEditorAi.ts @@ -128,15 +128,15 @@ export function useSqlEditorAi({ const result = sessionSnap.results[id]?.[0] const { sql, errorMessage } = extractDebugContext(snippet, result) - return buildDebugPromptText(sql, errorMessage) - }, [id, sessionSnap.results, snapV2.snippets]) + return buildDebugPromptText(sql, errorMessage, sqlSource) + }, [id, sessionSnap.results, snapV2.snippets, sqlSource]) const onDebug = useCallback(async () => { try { const snippet = snapV2.snippets[id] const result = sessionSnap.results[id]?.[0] openSidebar(SIDEBAR_KEYS.AI_ASSISTANT) - aiSnap.newChat(buildDebugChatArgs(snippet, result)) + aiSnap.newChat(buildDebugChatArgs(snippet, result, sqlSource)) } catch (error: unknown) { // [Joshen] There's a tendency for the SQL debug to chuck a lengthy error message // that's not relevant for the user - so we prettify it here by avoiding to return the @@ -147,7 +147,7 @@ export function useSqlEditorAi({ ) } } - }, [id, sessionSnap.results, snapV2.snippets, aiSnap, openSidebar]) + }, [id, sessionSnap.results, snapV2.snippets, aiSnap, openSidebar, sqlSource]) const acceptAiHandler = useCallback(async () => { try { diff --git a/apps/studio/components/ui/AIAssistantPanel/AIAssistant.tsx b/apps/studio/components/ui/AIAssistantPanel/AIAssistant.tsx index ca13118c5bc..02c2844a139 100644 --- a/apps/studio/components/ui/AIAssistantPanel/AIAssistant.tsx +++ b/apps/studio/components/ui/AIAssistantPanel/AIAssistant.tsx @@ -15,8 +15,8 @@ import { ButtonTooltip } from '../ButtonTooltip' import { ErrorBoundary } from '../ErrorBoundary/ErrorBoundary' import { InlineLinkClassName } from '../InlineLink' import { ASSISTANT_ERRORS } from './AiAssistant.constants' -import type { SqlSnippet } from './AIAssistant.types' import { + containsLogsSnippets, hasPendingToolApproval, onErrorChat, resolvePendingToolApprovalsAsDenied, @@ -31,6 +31,7 @@ import { } from './elements/Conversation' import { Message } from './Message' import { Markdown } from '@/components/interfaces/Markdown' +import { resolveSnippetSource } from '@/components/interfaces/SQLEditor/querySource' import { SIDEBAR_KEYS } from '@/components/layouts/ProjectLayout/LayoutSidebar/LayoutSidebarProvider' import { useCheckOpenAIKeyQuery } from '@/data/ai/check-api-key-query' import { useRateMessageMutation } from '@/data/ai/rate-message-mutation' @@ -40,6 +41,7 @@ import { useLocalStorageQuery } from '@/hooks/misc/useLocalStorage' import { useOrgAiOptInLevel } from '@/hooks/misc/useOrgOptedIntoAi' import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import type { AssistantMessageMetadata } from '@/lib/ai/assistant-message-metadata' import { getParallelApprovalIdsToReject } from '@/lib/ai/message-utils' import { DEFAULT_ASSISTANT_BASE_MODEL_ID, @@ -50,7 +52,7 @@ import { import { IS_PLATFORM } from '@/lib/constants' import { uuidv4 } from '@/lib/helpers' import { useTrack } from '@/lib/telemetry/track' -import type { AssistantModel } from '@/state/ai-assistant-state' +import type { AssistantModel, SqlSnippet } from '@/state/ai-assistant-state' import { useAiAssistantState, useAiAssistantStateSnapshot } from '@/state/ai-assistant-state' import { SHORTCUT_IDS } from '@/state/shortcuts/registry' import { useShortcut } from '@/state/shortcuts/useShortcut' @@ -64,7 +66,7 @@ interface AIAssistantProps { export const AIAssistant = ({ className }: AIAssistantProps) => { const router = useRouter() - const { id: entityId } = useParams() + const { id: entityId, source: sourceParam } = useParams() const { data: project } = useSelectedProjectQuery() const searchParams = useSearchParamsShallow() @@ -108,6 +110,10 @@ export const AIAssistant = ({ className }: AIAssistantProps) => { const inputRef = useRef(null) const { aiOptInLevel, isHipaaProjectDisallowed } = useOrgAiOptInLevel() + // Whether attached queries are sent at all. One definition, shared by the chat form + // (which folds them into the message text) and the message metadata (which states + // whether any of them was a logs query), so the two can't disagree. + const includeSnippetsInMessage = aiOptInLevel !== 'disabled' const showMetadataWarning = IS_PLATFORM && !!selectedOrganization && @@ -136,6 +142,10 @@ export const AIAssistant = ({ className }: AIAssistantProps) => { const snippet = snippets[entityId ?? ''] const snippetContent = snippet?.snippet?.content?.unchecked_sql + const openSnippetSource = isInSQLEditor + ? resolveSnippetSource(snippet?.snippet, sourceParam) + : undefined + const { data: tables } = useTablesQuery( { projectRef: project?.ref, @@ -355,11 +365,23 @@ export const AIAssistant = ({ className }: AIAssistantProps) => { setEditingMessageId(null) } + // Read off the attachments this message actually carries, so detaching the + // "Current Query" chip also drops the claim. Gated on the same condition that + // decides whether attachments make it into the text at all: with AI opt-in + // disabled the chip is shown but no query is sent, and claiming otherwise would + // have the server prepend ClickHouse context for a message holding no query. + // Rides on the message rather than the request, so a Retry reproduces the context + // the message was asked in. + const metadata: AssistantMessageMetadata = { + containsLogsSnippets: includeSnippetsInMessage && containsLogsSnippets(snap.sqlSnippets), + } + const payload = { role: 'user', createdAt: new Date(), parts: [{ type: 'text', text: finalContent }], id: uuidv4(), + metadata, } as MessageType snap.clearSqlSnippets() @@ -421,10 +443,12 @@ export const AIAssistant = ({ className }: AIAssistantProps) => { useEffect(() => { const isOpen = activeSidebar?.id === SIDEBAR_KEYS.AI_ASSISTANT if (isOpen && isInSQLEditor && !!snippetContent) { - snap.setSqlSnippets([{ label: 'Current Query', content: snippetContent }]) + snap.setSqlSnippets([ + { label: 'Current Query', content: snippetContent, source: openSnippetSource }, + ]) } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [activeSidebar?.id, isInSQLEditor, snippetContent]) + }, [activeSidebar?.id, isInSQLEditor, snippetContent, openSnippetSource]) return ( { newSnippets.splice(index, 1) snap.setSqlSnippets(newSnippets) }} - includeSnippetsInMessage={aiOptInLevel !== 'disabled'} + includeSnippetsInMessage={includeSnippetsInMessage} selectedModel={selectedModel} onSelectModel={(model) => snap.setModel(model)} /> diff --git a/apps/studio/components/ui/AIAssistantPanel/AIAssistant.types.ts b/apps/studio/components/ui/AIAssistantPanel/AIAssistant.types.ts index b87d413d76a..ea3611c4133 100644 --- a/apps/studio/components/ui/AIAssistantPanel/AIAssistant.types.ts +++ b/apps/studio/components/ui/AIAssistantPanel/AIAssistant.types.ts @@ -10,5 +10,3 @@ export interface AssistantSnippetProps { yAxis?: string name?: string } - -export type SqlSnippet = string | { label: string; content: string } diff --git a/apps/studio/components/ui/AIAssistantPanel/AIAssistant.utils.test.ts b/apps/studio/components/ui/AIAssistantPanel/AIAssistant.utils.test.ts index 49648982aaa..2f28dda6bdb 100644 --- a/apps/studio/components/ui/AIAssistantPanel/AIAssistant.utils.test.ts +++ b/apps/studio/components/ui/AIAssistantPanel/AIAssistant.utils.test.ts @@ -2,6 +2,8 @@ import type { UIMessage } from 'ai' import { describe, expect, test } from 'vitest' import { + containsLogsSnippets, + formatAttachedSnippets, hasPendingToolApproval, isReadOnlySelect, resolvePendingToolApprovalsAsDenied, @@ -157,3 +159,72 @@ describe('AIAssistant.utils.ts:resolvePendingToolApprovalsAsDenied', () => { expect(resolvePendingToolApprovalsAsDenied(messages)).toEqual(messages) }) }) + +describe('containsLogsSnippets', () => { + test('is true when an attached query is a logs query', () => { + expect( + containsLogsSnippets([{ label: 'Current Query', content: 'select 1', source: 'logs' }]) + ).toBe(true) + }) + + test('is false for a database query', () => { + expect( + containsLogsSnippets([{ label: 'Current Query', content: 'select 1', source: 'database' }]) + ).toBe(false) + }) + + test('is false once nothing is attached', () => { + expect(containsLogsSnippets([])).toBe(false) + expect(containsLogsSnippets(undefined)).toBe(false) + }) + + test('ignores plain string attachments, which carry no source', () => { + expect(containsLogsSnippets(['select 1'])).toBe(false) + }) + + test('is true when only some of several attachments are logs queries', () => { + expect( + containsLogsSnippets([ + 'select 1', + { label: 'Current Query', content: 'select 2', source: 'database' }, + { label: 'Other', content: 'select 3', source: 'logs' }, + ]) + ).toBe(true) + }) +}) + +describe('formatAttachedSnippets', () => { + test('fences a database query as sql', () => { + expect( + formatAttachedSnippets([{ label: 'Current Query', content: 'select 1', source: 'database' }]) + ).toBe('```sql\nselect 1\n```') + }) + + // The fence is how the model tells which attachment is ClickHouse. It also keeps a + // logs query out of MessageMarkdown's `sql` branch, which offers to run the block + // against Postgres and brands it with untrustedSql. + test('fences a logs query as clickhouse', () => { + expect( + formatAttachedSnippets([ + { + label: 'Current Query', + content: "select count() from logs where source = 'edge_logs'", + source: 'logs', + }, + ]) + ).toBe("```clickhouse\nselect count() from logs where source = 'edge_logs'\n```") + }) + + test('labels each attachment with its own dialect', () => { + expect( + formatAttachedSnippets([ + { label: 'A', content: 'select 1', source: 'database' }, + { label: 'B', content: 'select 2', source: 'logs' }, + ]) + ).toBe('```sql\nselect 1\n```\n```clickhouse\nselect 2\n```') + }) + + test('falls back to sql for a plain string attachment', () => { + expect(formatAttachedSnippets(['select 1'])).toBe('```sql\nselect 1\n```') + }) +}) diff --git a/apps/studio/components/ui/AIAssistantPanel/AIAssistant.utils.ts b/apps/studio/components/ui/AIAssistantPanel/AIAssistant.utils.ts index 801f35fb939..92d4b1d694e 100644 --- a/apps/studio/components/ui/AIAssistantPanel/AIAssistant.utils.ts +++ b/apps/studio/components/ui/AIAssistantPanel/AIAssistant.utils.ts @@ -2,6 +2,10 @@ import { isToolUIPart, type UIMessage } from 'ai' import { toast } from 'sonner' import { SAFE_FUNCTIONS } from './AiAssistant.constants' +import { + isLogsSource, + sqlSourceToFenceLanguage, +} from '@/components/interfaces/SQLEditor/querySource' import { authKeys } from '@/data/auth/keys' import { databaseExtensionsKeys } from '@/data/database-extensions/keys' import { databaseIndexesKeys } from '@/data/database-indexes/keys' @@ -12,6 +16,7 @@ import { enumeratedTypesKeys } from '@/data/enumerated-types/keys' import { handleError } from '@/data/fetchers' import { tableKeys } from '@/data/tables/keys' import { tryParseJson } from '@/lib/helpers' +import type { SqlSnippet } from '@/state/ai-assistant-state' import { ResponseError } from '@/types' export type MutationCategory = 'functions' | 'rls-policies' @@ -159,3 +164,41 @@ export const onErrorChat = (error: Error) => { } } } + +export function containsLogsSnippets(snippets: readonly SqlSnippet[] | undefined): boolean { + return (snippets ?? []).some( + (snippet) => typeof snippet !== 'string' && isLogsSource(snippet.source) + ) +} + +export const getSnippetLabel = (snippet: SqlSnippet, index: number): string => + typeof snippet === 'string' ? `Snippet ${index + 1}` : snippet.label + +export const getSnippetContent = (snippet: SqlSnippet): string => + typeof snippet === 'string' ? snippet : snippet.content + +/** + * The fence language an attached query is written into the message with. A logs query + * is fenced as `clickhouse` so the model can tell which attachment is ClickHouse + * against the `logs` table β€” a single message can carry both dialects. + * + * It also keeps the two apart in the rendered message: MessageMarkdown treats a `sql` + * fence as runnable Postgres (`DisplayBlockRenderer`, branded with `untrustedSql`), + * which a ClickHouse query must never be offered as. + */ +function getSnippetFenceLanguage(snippet: SqlSnippet): 'sql' | 'clickhouse' { + return sqlSourceToFenceLanguage(typeof snippet === 'string' ? undefined : snippet.source) +} + +/** + * Renders attached queries as the fenced code blocks appended to the message text, + * each labelled with its own dialect. + */ +export function formatAttachedSnippets(snippets: readonly SqlSnippet[]): string { + return snippets + .map( + (snippet) => + '```' + getSnippetFenceLanguage(snippet) + '\n' + getSnippetContent(snippet) + '\n```' + ) + .join('\n') +} diff --git a/apps/studio/components/ui/AIAssistantPanel/AIOnboarding.tsx b/apps/studio/components/ui/AIAssistantPanel/AIOnboarding.tsx index 928312db5d3..83df5deb1a1 100644 --- a/apps/studio/components/ui/AIAssistantPanel/AIOnboarding.tsx +++ b/apps/studio/components/ui/AIAssistantPanel/AIOnboarding.tsx @@ -4,10 +4,10 @@ import { BarChart, FileText, Shield } from 'lucide-react' import { AiIconAnimation, Button, Skeleton } from 'ui' import { codeSnippetPrompts, defaultPrompts } from './AIAssistant.prompts' -import type { SqlSnippet } from './AIAssistant.types' import { LINTER_LEVELS } from '@/components/interfaces/Linter/Linter.constants' import { createLintSummaryPrompt } from '@/components/interfaces/Linter/Linter.utils' import { useProjectLintsQuery, type Lint } from '@/data/lint/lint-query' +import type { SqlSnippet } from '@/state/ai-assistant-state' interface AIOnboardingProps { sqlSnippets?: SqlSnippet[] diff --git a/apps/studio/components/ui/AIAssistantPanel/AssistantChatForm.tsx b/apps/studio/components/ui/AIAssistantPanel/AssistantChatForm.tsx index 41bec723181..12913d7bdfa 100644 --- a/apps/studio/components/ui/AIAssistantPanel/AssistantChatForm.tsx +++ b/apps/studio/components/ui/AIAssistantPanel/AssistantChatForm.tsx @@ -5,10 +5,11 @@ import { ExpandingTextArea } from 'ui' import { cn } from 'ui/src/lib/utils' import { ButtonTooltip } from '../ButtonTooltip' -import { type SqlSnippet } from './AIAssistant.types' +import { formatAttachedSnippets } from './AIAssistant.utils' import { ModelSelector } from './ModelSelector' -import { getSnippetContent, SnippetRow } from './SnippetRow' +import { SnippetRow } from './SnippetRow' import type { AssistantModelId } from '@/lib/ai/model.utils' +import { type SqlSnippet } from '@/state/ai-assistant-state' export interface FormProps { /* The ref for the textarea, optional. Exposed for the CommandsPopover to attach events. */ @@ -83,10 +84,7 @@ const AssistantChatFormComponent = forwardRef( let finalMessage = value if (includeSnippetsInMessage && sqlSnippets && sqlSnippets.length > 0) { - const sqlSnippetsString = sqlSnippets - .map((snippet: SqlSnippet) => '```sql\n' + getSnippetContent(snippet) + '\n```') - .join('\n') - finalMessage = [value, sqlSnippetsString].filter(Boolean).join('\n\n') + finalMessage = [value, formatAttachedSnippets(sqlSnippets)].filter(Boolean).join('\n\n') } onSubmit(finalMessage) diff --git a/apps/studio/components/ui/AIAssistantPanel/SnippetRow.tsx b/apps/studio/components/ui/AIAssistantPanel/SnippetRow.tsx index 581b7fa92b6..2f68ab7cf02 100644 --- a/apps/studio/components/ui/AIAssistantPanel/SnippetRow.tsx +++ b/apps/studio/components/ui/AIAssistantPanel/SnippetRow.tsx @@ -3,21 +3,8 @@ import React from 'react' import { Button, HoverCard, HoverCardContent, HoverCardTrigger } from 'ui' import { CodeBlock } from 'ui-patterns/CodeBlock' -import { type SqlSnippet } from './AIAssistant.types' - -export const getSnippetLabel = (snippet: SqlSnippet, index: number): string => { - if (typeof snippet === 'string') { - return `Snippet ${index + 1}` - } - return snippet.label -} - -export const getSnippetContent = (snippet: SqlSnippet): string => { - if (typeof snippet === 'string') { - return snippet - } - return snippet.content -} +import { getSnippetContent, getSnippetLabel } from './AIAssistant.utils' +import { type SqlSnippet } from '@/state/ai-assistant-state' interface SnippetRowProps { snippets: SqlSnippet[] diff --git a/apps/studio/lib/ai/assistant-context.test.ts b/apps/studio/lib/ai/assistant-context.test.ts new file mode 100644 index 00000000000..8f641d01577 --- /dev/null +++ b/apps/studio/lib/ai/assistant-context.test.ts @@ -0,0 +1,66 @@ +import { describe, expect, it } from 'vitest' + +import { buildAssistantContextMessages, NO_SCHEMA_ACCESS_MESSAGE } from '@/lib/ai/assistant-context' + +const SCHEMAS = 'The available database schema names are: ["public"]' + +describe('buildAssistantContextMessages', () => { + it('describes the project when there is project context', () => { + const messages = buildAssistantContextMessages({ + projectRef: 'abcdefghijklmnopqrst', + chatName: 'Slow queries', + schemasString: SCHEMAS, + }) + + expect(messages).toHaveLength(1) + expect(messages[0].role).toBe('assistant') + expect(messages[0].content).toContain('abcdefghijklmnopqrst') + expect(messages[0].content).toContain(SCHEMAS) + expect(messages[0].content).toContain('Slow queries') + }) + + it('omits the project message when there is nothing to say', () => { + const messages = buildAssistantContextMessages({ + schemasString: NO_SCHEMA_ACCESS_MESSAGE, + }) + + expect(messages).toEqual([]) + }) + + it('adds the support instructions in support mode', () => { + const messages = buildAssistantContextMessages({ + schemasString: NO_SCHEMA_ACCESS_MESSAGE, + supportMode: true, + }) + + expect(messages).toHaveLength(1) + expect(messages[0].content).toContain('escalate_to_human') + }) + + it('adds ClickHouse instructions when the conversation attached a logs query', () => { + const messages = buildAssistantContextMessages({ + projectRef: 'abcdefghijklmnopqrst', + schemasString: SCHEMAS, + includesLogsSnippets: true, + }) + + expect(messages).toHaveLength(2) + const logsContext = messages[1].content + // The dialect rules, so it doesn't answer in Postgres... + expect(logsContext).toContain('ClickHouse') + // ...and the table reference, so it doesn't invent BigQuery-style unnests. + expect(logsContext).toContain('log_attributes') + expect(logsContext).toContain("where source = 'edge_logs'") + }) + + it('adds nothing extra for a database-only conversation', () => { + const messages = buildAssistantContextMessages({ + projectRef: 'abcdefghijklmnopqrst', + schemasString: SCHEMAS, + includesLogsSnippets: false, + }) + + expect(messages).toHaveLength(1) + expect(messages[0].content).not.toContain('ClickHouse') + }) +}) diff --git a/apps/studio/lib/ai/assistant-context.ts b/apps/studio/lib/ai/assistant-context.ts new file mode 100644 index 00000000000..1c4032b77a3 --- /dev/null +++ b/apps/studio/lib/ai/assistant-context.ts @@ -0,0 +1,79 @@ +import { + buildClickhouseLogsSchemaSection, + CLICKHOUSE_LOGS_COMPLETION_INSTRUCTIONS, +} from '@/lib/ai/clickhouse-logs' + +/** + * Stands in for the schema list when the org hasn't opted into sharing schemas. + * Doubles as a sentinel β€” "no project context worth sending" is decided by + * comparing against this exact sentence β€” so the producer and the comparison have + * to agree on it, hence one exported constant instead of copies per call site. + */ +export const NO_SCHEMA_ACCESS_MESSAGE = "You don't have access to any schemas." + +/** + * A request-scoped context message, sent as an assistant turn ahead of the + * conversation. Deliberately NOT part of the system prompt: the system prompt is + * static so Bedrock can cache it, and anything derived from the current project, + * chat, or open editor tab would break that cache. + */ +export type AssistantContextMessage = { role: 'assistant'; content: string } + +/** + * Tells the model that the snippet in the SQL editor targets the logs backend, so + * SQL it writes for that snippet comes back as ClickHouse for the `logs` table + * rather than Postgres. Carries the same dialect rules and table reference the + * inline editor completions use, so there's one description of the logs schema. + */ +function buildLogsSnippetContext(): string { + return [ + "Some SQL snippets are marked with the dialect 'clickhouse', which means they query the Supabase logs backend, not the Postgres database. Any SQL you write, edit, or debug for that snippet must be ClickHouse SQL against the logs table described below β€” the database schema and the Postgres tools don't apply to it. You can help a user iterate on their ClickHouse SQL query, but you cannot run it for them (the execute_query tool does not run log queries). Postgres SQL is still the right answer for anything else the user asks about their database, or for non-ClickHouse marked queries.", + CLICKHOUSE_LOGS_COMPLETION_INSTRUCTIONS.trim(), + buildClickhouseLogsSchemaSection().trim(), + ].join('\n\n') +} + +/** + * Assemble the context messages that precede the conversation: what project and + * chat this is, whether it's a support chat, and which backend the open SQL editor + * snippet targets. Pure and per-request β€” see {@link AssistantContextMessage} for + * why none of this belongs in the system prompt. + */ +export function buildAssistantContextMessages({ + projectRef, + chatName, + schemasString, + supportMode, + includesLogsSnippets, +}: { + projectRef?: string + chatName?: string + schemasString: string + supportMode?: boolean + /** Whether any user message in the conversation attached a logs (ClickHouse) query. */ + includesLogsSnippets?: boolean +}): AssistantContextMessage[] { + const messages: AssistantContextMessage[] = [] + + const hasProjectContext = !!projectRef || !!chatName || schemasString !== NO_SCHEMA_ACCESS_MESSAGE + if (hasProjectContext) { + messages.push({ + role: 'assistant', + content: `The user's current project is ${projectRef || 'unknown'}. Their available schemas are: ${schemasString}. The current chat name is: ${chatName || 'unnamed'}.`, + }) + } + + if (supportMode) { + messages.push({ + role: 'assistant', + content: + 'This is an active support chat. Help the user while they wait for a human agent. Keep guidance practical and concise. If the user asks for a human, or if the issue cannot be safely resolved, call escalate_to_human with a short reason. Only call resolve_support_conversation after the user explicitly confirms the issue is resolved; otherwise keep helping.', + }) + } + + if (includesLogsSnippets) { + messages.push({ role: 'assistant', content: buildLogsSnippetContext() }) + } + + return messages +} diff --git a/apps/studio/lib/ai/assistant-message-metadata.test.ts b/apps/studio/lib/ai/assistant-message-metadata.test.ts new file mode 100644 index 00000000000..2206121e900 --- /dev/null +++ b/apps/studio/lib/ai/assistant-message-metadata.test.ts @@ -0,0 +1,90 @@ +import type { UIMessage } from 'ai' +import { describe, expect, it } from 'vitest' + +import { + assistantMessageMetadataSchema, + messagesIncludeLogsSnippets, +} from '@/lib/ai/assistant-message-metadata' + +function userMessage(id: string, text: string, metadata?: unknown): UIMessage { + return { id, role: 'user', parts: [{ type: 'text', text }], metadata } as UIMessage +} + +function assistantMessage(id: string, text: string): UIMessage { + return { id, role: 'assistant', parts: [{ type: 'text', text }] } as UIMessage +} + +describe('assistantMessageMetadataSchema', () => { + // safeValidateUIMessages applies this schema to EVERY message's metadata, so a + // message with none (i.e. every message written before this field existed) has to + // pass β€” otherwise an existing conversation 400s on its next turn. + it('accepts a message with no metadata', () => { + expect(assistantMessageMetadataSchema.safeParse(undefined).success).toBe(true) + }) + + it('accepts metadata flagging attached logs queries', () => { + const result = assistantMessageMetadataSchema.safeParse({ containsLogsSnippets: true }) + expect(result.success).toBe(true) + expect(result.data?.containsLogsSnippets).toBe(true) + }) + + it('rejects a non-boolean flag', () => { + expect(assistantMessageMetadataSchema.safeParse({ containsLogsSnippets: 'yes' }).success).toBe( + false + ) + }) +}) + +describe('messagesIncludeLogsSnippets', () => { + it('detects a message that attached a logs query', () => { + expect( + messagesIncludeLogsSnippets([ + userMessage('1', 'show me 500s', { containsLogsSnippets: true }), + ]) + ).toBe(true) + }) + + it('stays true once any earlier message attached a logs query', () => { + expect( + messagesIncludeLogsSnippets([ + userMessage('1', 'show me 500s', { containsLogsSnippets: true }), + assistantMessage('2', 'select ...'), + userMessage('3', 'now count my users', { containsLogsSnippets: false }), + ]) + ).toBe(true) + }) + + it('is false for a conversation that only attached database queries', () => { + expect( + messagesIncludeLogsSnippets([ + userMessage('1', 'count my users', { containsLogsSnippets: false }), + assistantMessage('2', 'select ...'), + ]) + ).toBe(false) + }) + + it('is false when no message carries metadata', () => { + expect(messagesIncludeLogsSnippets([userMessage('1', 'hello')])).toBe(false) + expect(messagesIncludeLogsSnippets([userMessage('1', 'hello', {})])).toBe(false) + expect(messagesIncludeLogsSnippets([])).toBe(false) + }) + + // Only the user states which query they attached; an assistant message must not be + // able to talk the server into a different dialect. + it('ignores metadata on assistant messages', () => { + const assistantWithMetadata = { + id: '1', + role: 'assistant', + parts: [{ type: 'text', text: 'hi' }], + metadata: { containsLogsSnippets: true }, + } as UIMessage + expect(messagesIncludeLogsSnippets([assistantWithMetadata])).toBe(false) + }) + + it('is false rather than throwing on malformed persisted metadata', () => { + expect( + messagesIncludeLogsSnippets([userMessage('1', 'hi', { containsLogsSnippets: 'yes' })]) + ).toBe(false) + expect(messagesIncludeLogsSnippets([userMessage('1', 'hi', 'not an object')])).toBe(false) + }) +}) diff --git a/apps/studio/lib/ai/assistant-message-metadata.ts b/apps/studio/lib/ai/assistant-message-metadata.ts new file mode 100644 index 00000000000..d30af08387e --- /dev/null +++ b/apps/studio/lib/ai/assistant-message-metadata.ts @@ -0,0 +1,30 @@ +import type { UIMessage } from 'ai' +import z from 'zod' + +export const assistantMessageMetadataSchema = z + .object({ + /** + * Whether any query attached to this message is a logs (ClickHouse) query. A boolean + * rather than a single source, because one message can attach several queries and + * only some of them may target the logs backend β€” the per-attachment dialect is + * carried by each snippet's own fence in the message text. + */ + containsLogsSnippets: z.boolean().optional(), + }) + .optional() + +export type AssistantMessageMetadata = z.infer + +/** + * Whether any user message in the conversation attached a logs query. + * + * Parsed rather than cast β€” `UIMessage['metadata']` is `unknown`, and metadata can come + * from a chat persisted by an older build. + */ +export function messagesIncludeLogsSnippets(messages: UIMessage[]): boolean { + return messages.some((message) => { + if (message.role !== 'user') return false + const metadata = assistantMessageMetadataSchema.safeParse(message.metadata) + return metadata.success && metadata.data?.containsLogsSnippets === true + }) +} diff --git a/apps/studio/lib/ai/generate-assistant-response.ts b/apps/studio/lib/ai/generate-assistant-response.ts index 9679be6fb9b..f131119b549 100644 --- a/apps/studio/lib/ai/generate-assistant-response.ts +++ b/apps/studio/lib/ai/generate-assistant-response.ts @@ -14,6 +14,7 @@ import { source } from 'common-tags' import type { AssistantEvalInput } from '@/evals/scorer' import type { AiOptInLevel } from '@/hooks/misc/useOrgOptedIntoAi' +import { buildAssistantContextMessages, NO_SCHEMA_ACCESS_MESSAGE } from '@/lib/ai/assistant-context' import { IS_TRACING_ENABLED } from '@/lib/ai/braintrust-logger' import { CHAT_PROMPT, GENERAL_PROMPT, LIMITATIONS_PROMPT, SECURITY_PROMPT } from '@/lib/ai/prompts' import { sanitizeMessagePart } from '@/lib/ai/tools/tool-sanitizer' @@ -34,6 +35,7 @@ export async function generateAssistantResponse({ userId, orgId, planId, + includesLogsSnippets, systemProviderOptions, providerOptions, requestedModel, @@ -53,6 +55,8 @@ export async function generateAssistantResponse({ userId?: string orgId?: number planId?: string + /** Whether any user message in the conversation attached a logs (ClickHouse) query. */ + includesLogsSnippets?: boolean requestedModel?: string systemProviderOptions?: Record providerOptions?: Record @@ -98,7 +102,7 @@ export async function generateAssistantResponse({ ? shouldTrace ? await traced(async () => getSchemas(), { name: 'getSchemas', type: 'function' }) : await getSchemas() - : "You don't have access to any schemas." + : NO_SCHEMA_ACCESS_MESSAGE // Important: do not use dynamic content in the system prompt or Bedrock will not cache it const system = source` @@ -117,16 +121,6 @@ export async function generateAssistantResponse({ - \`realtime\` β€” Supabase Realtime ` - const hasProjectContext = - projectRef || chatName || schemasString !== "You don't have access to any schemas." - - const assistantContent = hasProjectContext - ? `The user's current project is ${projectRef || 'unknown'}. Their available schemas are: ${schemasString}. The current chat name is: ${chatName || 'unnamed'}.` - : undefined - const supportAssistantContent = supportMode - ? `This is an active support chat. Help the user while they wait for a human agent. Keep guidance practical and concise. If the user asks for a human, or if the issue cannot be safely resolved, call escalate_to_human with a short reason. Only call resolve_support_conversation after the user explicitly confirms the issue is resolved; otherwise keep helping.` - : undefined - const systemMessage: SystemModelMessage = { role: 'system', content: system, @@ -134,22 +128,13 @@ export async function generateAssistantResponse({ } const coreMessages: ModelMessage[] = [ - ...(assistantContent - ? [ - { - role: 'assistant' as const, - content: assistantContent, - }, - ] - : []), - ...(supportAssistantContent - ? [ - { - role: 'assistant' as const, - content: supportAssistantContent, - }, - ] - : []), + ...buildAssistantContextMessages({ + projectRef, + chatName, + schemasString, + supportMode, + includesLogsSnippets, + }), ...(await convertToModelMessages(messages)), ] diff --git a/apps/studio/pages/api/ai/sql/generate-v4.ts b/apps/studio/pages/api/ai/sql/generate-v4.ts index 3bb67ff91b1..5535ce02c60 100644 --- a/apps/studio/pages/api/ai/sql/generate-v4.ts +++ b/apps/studio/pages/api/ai/sql/generate-v4.ts @@ -8,6 +8,11 @@ import z from 'zod' import { executeSql } from '@/data/sql/execute-sql-mutation' import type { AiOptInLevel } from '@/hooks/misc/useOrgOptedIntoAi' import { getOrgAIDetails, getProjectAIDetails } from '@/lib/ai/ai-details' +import { NO_SCHEMA_ACCESS_MESSAGE } from '@/lib/ai/assistant-context' +import { + assistantMessageMetadataSchema, + messagesIncludeLogsSnippets, +} from '@/lib/ai/assistant-message-metadata' import { isTracingAllowed } from '@/lib/ai/braintrust-logger' import { generateAssistantResponse } from '@/lib/ai/generate-assistant-response' import { getModel } from '@/lib/ai/model' @@ -100,6 +105,7 @@ async function handlePost(req: NextApiRequest, res: NextApiResponse, claims?: Jw const messagesValidation = await safeValidateUIMessages({ messages: rawMessages, + metadataSchema: assistantMessageMetadataSchema, }) if (!messagesValidation.success) { return res.status(400).json({ @@ -109,6 +115,8 @@ async function handlePost(req: NextApiRequest, res: NextApiResponse, claims?: Jw } const messages = messagesValidation.data + const includesLogsSnippets = messagesIncludeLogsSnippets(messages) + let aiOptInLevel: AiOptInLevel = 'disabled' let hasAccessToAdvanceModel = false let orgHasHipaaAddon: boolean | undefined @@ -203,7 +211,7 @@ async function handlePost(req: NextApiRequest, res: NextApiResponse, claims?: Jw return schemas?.length > 0 ? `The available database schema names are: ${JSON.stringify(schemas)}` - : "You don't have access to any schemas." + : NO_SCHEMA_ACCESS_MESSAGE } const result = await generateAssistantResponse({ @@ -224,6 +232,7 @@ async function handlePost(req: NextApiRequest, res: NextApiResponse, claims?: Jw userId, orgId, planId, + includesLogsSnippets, requestedModel, systemProviderOptions, abortSignal: abortController.signal, diff --git a/apps/studio/state/ai-assistant-state.tsx b/apps/studio/state/ai-assistant-state.tsx index 9e51958f1ab..5355074cf65 100644 --- a/apps/studio/state/ai-assistant-state.tsx +++ b/apps/studio/state/ai-assistant-state.tsx @@ -7,6 +7,7 @@ import { createContext, PropsWithChildren, useContext, useEffect, useState } fro import { v4 as uuidv4 } from 'uuid' import { proxy, ref, snapshot, subscribe, useSnapshot } from 'valtio' +import type { SqlSnippetSource } from '@/components/interfaces/SQLEditor/querySource' import type { AiSupportStatus } from '@/data/feedback/ai-chat-front-sync' import { constructHeaders } from '@/data/fetchers' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' @@ -22,7 +23,12 @@ type SuggestionsType = { export type AssistantMessageType = MessageType -export type SqlSnippet = string | { label: string; content: string } +/** + * A query attached to the composer (the "Current Query" chip). `source` records which + * backend the attached query runs against, so the dialect travels with the query it + * describes. + */ +export type SqlSnippet = string | { label: string; content: string; source?: SqlSnippetSource } export type AssistantModel = AssistantModelId From 9be46e674a50af59f6f8d83ee4e8f84fa7d8317c Mon Sep 17 00:00:00 2001 From: Tobias Pfeiffer Date: Tue, 4 Aug 2026 15:02:43 +0200 Subject: [PATCH 07/83] Add me to humans.txt! (#48695) It's a me. ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? adds me to the humans.txt ## What is the current behavior? Tobi isn't in the list. ## What is the new behavior? Tobi is in the list. ## Additional context IMG_20210220_105358_Bokeh ## Summary by CodeRabbit * **Documentation** * Added Tobias Pfeiffer to the remote team member list. --- apps/docs/public/humans.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/docs/public/humans.txt b/apps/docs/public/humans.txt index 144db29f2ae..6ff0ca04631 100644 --- a/apps/docs/public/humans.txt +++ b/apps/docs/public/humans.txt @@ -295,6 +295,7 @@ Tim Frietas Tim Palmer Timothy Lim Tina Ha +Tobias Pfeiffer Tom Ashley Tom G TomΓ‘s Pozo From 469da990b665acc5147e62f32270e87815162f8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filipe=20Caba=C3=A7o?= Date: Tue, 4 Aug 2026 14:28:15 +0100 Subject: [PATCH 08/83] chore: Add Filipe to humans (#48698) --- apps/docs/public/humans.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/docs/public/humans.txt b/apps/docs/public/humans.txt index 6ff0ca04631..de32ff1b942 100644 --- a/apps/docs/public/humans.txt +++ b/apps/docs/public/humans.txt @@ -104,6 +104,7 @@ Fady A Fatuma Abdullahi Felipe Stival Ferhat Elmas +Filipe Cabaco Firas El Rachidi Francesco Sansalvadore Gabriel Claudino From ceace2e90b93aa4126018bf657b2ab1b55c05d85 Mon Sep 17 00:00:00 2001 From: Hoon <67215423+eejihoon@users.noreply.github.com> Date: Tue, 4 Aug 2026 23:31:59 +0900 Subject: [PATCH 09/83] fix(studio): account for SQL result column headers (#48676) ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Bug fix ## What is the current behavior? Fixes #48672. The SQL Editor results grid calculates each column's initial width from cell values only. When a long final column contains a short value such as `NULL`, scrolling to the end of a wide result set reveals a truncated header even though the full column name is needed to identify the result. ### Before Before: final SQL result column
header is truncated ## What is the new behavior? The initial width now accounts for both the column name and its cell values while preserving the existing minimum and maximum width constraints. ### After After: full SQL result column header
is visible ## Additional context The width calculation was extracted into a utility and covered for: - short headers and values - headers longer than their values - values longer than their headers - empty result sets - maximum-width capping Verification: - `pnpm --filter studio exec vitest --run components/interfaces/SQLEditor/UtilityPanel/Results.utils.test.ts tests/components/SQLEditor/Results.test.tsx` - `pnpm --filter studio run typecheck` - `pnpm --filter studio run lint:ratchet` - `pnpm run test:prettier` - `SKIP_ASSET_UPLOAD=1 pnpm run build:studio` ## Summary by CodeRabbit - **Improvements** - SQL query results now automatically size columns based on their headers and content. - Column widths remain within practical minimum and maximum limits for improved readability and usability. - **Tests** - Added coverage for minimum and maximum widths, content-based sizing, and empty result sets. --- .../SQLEditor/UtilityPanel/Results.tsx | 23 ++++------- .../UtilityPanel/Results.utils.test.ts | 41 +++++++++++++++++++ .../SQLEditor/UtilityPanel/Results.utils.ts | 16 ++++++++ 3 files changed, 64 insertions(+), 16 deletions(-) diff --git a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/Results.tsx b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/Results.tsx index 49f6883ea8e..393f243f8e0 100644 --- a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/Results.tsx +++ b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/Results.tsx @@ -11,7 +11,11 @@ import { import { CellDetailPanel } from './CellDetailPanel' import { ResultCell } from './ResultCell' -import { formatClipboardValue } from './Results.utils' +import { + calculateResultColumnWidth, + formatClipboardValue, + RESULT_COLUMN_MIN_WIDTH, +} from './Results.utils' import { handleCellKeyDown } from '@/components/grid/SupabaseGrid.utils' export const Results = ({ rows }: { rows: readonly any[] }) => { @@ -41,22 +45,9 @@ export const Results = ({ rows }: { rows: readonly any[] }) => { return
{name}
} - const EST_CHAR_WIDTH = 8.25 - const MIN_COLUMN_WIDTH = 100 - const MAX_COLUMN_WIDTH = 500 - const columns: CalculatedColumn[] = useMemo( () => Object.keys(rows?.[0] ?? []).map((key, idx) => { - const maxColumnValueLength = rows - .map((row) => String(row[key]).length) - .reduce((a, b) => Math.max(a, b), 0) - - const columnWidth = Math.max( - Math.min(maxColumnValueLength * EST_CHAR_WIDTH, MAX_COLUMN_WIDTH), - MIN_COLUMN_WIDTH - ) - return { idx, key, @@ -64,8 +55,8 @@ export const Results = ({ rows }: { rows: readonly any[] }) => { resizable: true, parent: undefined, level: 0, - width: columnWidth, - minWidth: MIN_COLUMN_WIDTH, + width: calculateResultColumnWidth(key, rows), + minWidth: RESULT_COLUMN_MIN_WIDTH, maxWidth: undefined, draggable: false, frozen: false, diff --git a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/Results.utils.test.ts b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/Results.utils.test.ts index 6006cde9feb..88224d90764 100644 --- a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/Results.utils.test.ts +++ b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/Results.utils.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from 'vitest' import { + calculateResultColumnWidth, convertResultsToCSV, convertResultsToJSON, convertResultsToMarkdown, @@ -12,6 +13,46 @@ import { } from './Results.utils' describe('Results.utils', () => { + describe('calculateResultColumnWidth', () => { + it('uses the minimum width when the column name and values are short', () => { + expect(calculateResultColumnWidth('id', [{ id: 1 }])).toBe(100) + }) + + it('accounts for a column name that is longer than its values', () => { + expect(calculateResultColumnWidth('source_campaign_id', [{ source_campaign_id: null }])).toBe( + 148.5 + ) + }) + + it('accounts for a value that is longer than the column name', () => { + expect(calculateResultColumnWidth('name', [{ name: 'a'.repeat(20) }])).toBe(165) + }) + + it('accounts for the formatted JSON representation of an object value', () => { + expect( + calculateResultColumnWidth('metadata', [{ metadata: { campaign: 'a'.repeat(20) } }]) + ).toBe(288.75) + }) + + it('accounts for the formatted JSON representation of an array value', () => { + expect(calculateResultColumnWidth('tags', [{ tags: ['a'.repeat(10), 'b'.repeat(10)] }])).toBe( + 222.75 + ) + }) + + it('caps the width when the column name exceeds the maximum', () => { + expect(calculateResultColumnWidth('a'.repeat(100), [])).toBe(500) + }) + + it('caps the width when a value exceeds the maximum', () => { + expect(calculateResultColumnWidth('value', [{ value: 'a'.repeat(100) }])).toBe(500) + }) + + it('uses the minimum width when there are no rows', () => { + expect(calculateResultColumnWidth('id', [])).toBe(100) + }) + }) + describe('formatClipboardValue', () => { it('returns empty string for null', () => { expect(formatClipboardValue(null)).toBe('') diff --git a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/Results.utils.ts b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/Results.utils.ts index ca19a5763ec..fb03dc9faf2 100644 --- a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/Results.utils.ts +++ b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/Results.utils.ts @@ -3,6 +3,22 @@ import Papa from 'papaparse' type ResultRow = Record +const ESTIMATED_CHARACTER_WIDTH = 8.25 +export const RESULT_COLUMN_MIN_WIDTH = 100 +const MAX_COLUMN_WIDTH = 500 + +export function calculateResultColumnWidth(columnName: string, rows: readonly ResultRow[]) { + const maxContentLength = rows.reduce( + (maxLength, row) => Math.max(maxLength, (formatCellValue(row[columnName]) ?? '').length), + columnName.length + ) + + return Math.min( + Math.max(maxContentLength * ESTIMATED_CHARACTER_WIDTH, RESULT_COLUMN_MIN_WIDTH), + MAX_COLUMN_WIDTH + ) +} + export function formatClipboardValue(value: unknown) { if (value === null) return '' if (typeof value == 'object' || Array.isArray(value)) { From 0e71933ce3fad9b1dc8595207950cc9754f54a77 Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Tue, 4 Aug 2026 23:16:49 +0800 Subject: [PATCH 10/83] [FE-4070] fix(studio): allow adding expressions to RLS policies (#48700) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A table RLS policy created via SQL without a `USING`/`WITH CHECK` clause stores `null` for that field, and the policy editor's payload diff skipped `null` fields entirely β€” so adding an expression later through the dashboard closed the panel as if saved but persisted nothing. This fixes the diff so those policies are editable, and cleans up adjacent issues in the same code path. **Changed:** - Extracted the update-payload diff from `PolicyEditorPanel`'s submit handler into a pure `generateUpdatePolicyPayload()` in `PolicyEditorPanel.utils.ts`. A stored `null` definition/check now counts as empty, so typing an expression into a previously empty editor produces a payload field. The diff is branched by command so INSERT policies only ever emit `WITH CHECK`, never an invalid `USING` clause. - The required-expression validation ("Please provide a SQL expression…") now applies only when creating a policy. When updating, a `null` clause is valid, so rename-only and role-only saves on such policies work; the update path instead rejects attempts to clear an existing `USING`/`WITH CHECK` expression with an inline error (`ALTER POLICY` can only replace an expression, not remove it). - Saving with no changes now closes the panel without a round trip β€” previously a null-vs-undefined comparison injected a present-but-`undefined` payload key, which sent a literal `BEGIN; COMMIT;` to the user's database. - Fixed the unsaved-changes check comparing the form's lowercase command against `'INSERT'` (never matched), which made closing an untouched INSERT policy editor prompt about unsaved changes. It now compares `selectedPolicy.command`. **Added:** - `PolicyEditorPanel.utils.test.ts` β€” 11 unit tests covering nullβ†’value transitions for definition and check, INSERT command mapping, valueβ†’value updates, no-op saves, and empty-value handling. ## To test - Run in the SQL editor: `create policy "p1" on for delete to authenticated;` (no `USING` clause), then edit `p1` in Database β†’ Policies, add a `USING` expression, and save. Confirm via `select pg_get_expr(polqual, polrelid) from pg_policy where polname = 'p1'` that the expression persisted. - Same for INSERT: `create policy "p2" on
for insert to authenticated;`, then add a `WITH CHECK` expression via the editor and confirm `polwithcheck` is set (and `polqual` stays null). - On `p1` (still without a `USING` expression? recreate it if you added one), rename the policy without touching the expression editors β€” the rename should save successfully. - Edit a policy that already has a `USING` expression, change it, and confirm the new expression persists (regression). - Open a policy and save without changing anything β€” the panel should close with no `policy-update` network request. - On a policy with an existing `USING` (or `WITH CHECK`) expression, clear that editor and save β€” an inline error should appear and no request should fire. - Open an INSERT policy that has a `WITH CHECK` expression, change nothing, and close the panel β€” it should close without an "Unsaved changes" prompt. ## Summary by CodeRabbit * **Bug Fixes** * Policy updates now submit only changed fields. * Improved handling of policy expressions, including INSERT-specific mappings. * Prevented removal of existing `USING` or `WITH CHECK` expressions where unsupported. * Empty expressions are omitted from update requests. * Updates are canceled when no changes are detected. * **Tests** * Added coverage for unchanged policies, expression updates, name and role changes, and INSERT policy behavior. --------- Co-authored-by: Alaister Young <10985857+alaister@users.noreply.github.com> --- .../PolicyEditorPanel.utils.test.ts | 102 ++++++++++++++++++ .../PolicyEditorPanel.utils.ts | 58 +++++++++- .../Policies/PolicyEditorPanel/index.tsx | 88 ++++++++------- 3 files changed, 211 insertions(+), 37 deletions(-) create mode 100644 apps/studio/components/interfaces/Database/Policies/PolicyEditorPanel/PolicyEditorPanel.utils.test.ts diff --git a/apps/studio/components/interfaces/Database/Policies/PolicyEditorPanel/PolicyEditorPanel.utils.test.ts b/apps/studio/components/interfaces/Database/Policies/PolicyEditorPanel/PolicyEditorPanel.utils.test.ts new file mode 100644 index 00000000000..65aae4e19d1 --- /dev/null +++ b/apps/studio/components/interfaces/Database/Policies/PolicyEditorPanel/PolicyEditorPanel.utils.test.ts @@ -0,0 +1,102 @@ +import type { PGPolicy } from '@supabase/pg-meta' +import { describe, expect, it } from 'vitest' + +import { generateUpdatePolicyPayload } from './PolicyEditorPanel.utils' + +type PolicyFixture = Pick + +const mockPolicy = (overrides: Partial = {}): PolicyFixture => ({ + name: 'my_policy', + roles: ['authenticated'], + command: 'DELETE', + definition: 'user_id = auth.uid()', + check: null, + ...overrides, +}) + +const baseForm = { + name: 'my_policy', + roles: ['authenticated'], + // The panel prefills editors with two leading spaces of indentation + using: ' user_id = auth.uid()', + check: undefined, +} + +describe('generateUpdatePolicyPayload', () => { + it('returns an empty payload when nothing changed', () => { + expect(generateUpdatePolicyPayload(mockPolicy(), baseForm)).toEqual({}) + }) + + it('includes the definition when a policy with a null definition gains a using expression', () => { + const payload = generateUpdatePolicyPayload(mockPolicy({ definition: null }), { + ...baseForm, + using: 'true', + }) + expect(payload).toEqual({ definition: 'true' }) + }) + + it('includes the definition when the using expression changed', () => { + const payload = generateUpdatePolicyPayload(mockPolicy(), { ...baseForm, using: 'true' }) + expect(payload).toEqual({ definition: 'true' }) + }) + + it('omits the definition when the using expression is empty', () => { + expect(generateUpdatePolicyPayload(mockPolicy(), { ...baseForm, using: '' })).toEqual({}) + expect(generateUpdatePolicyPayload(mockPolicy(), { ...baseForm, using: ' ' })).toEqual({}) + expect(generateUpdatePolicyPayload(mockPolicy(), { ...baseForm, using: undefined })).toEqual({}) + }) + + it('includes the check when a policy with a null check gains a check expression', () => { + const payload = generateUpdatePolicyPayload(mockPolicy({ command: 'UPDATE' }), { + ...baseForm, + check: 'is_admin()', + }) + expect(payload).toEqual({ check: 'is_admin()' }) + }) + + it('includes the check when the check expression changed', () => { + const payload = generateUpdatePolicyPayload( + mockPolicy({ command: 'UPDATE', check: 'is_admin()' }), + { ...baseForm, check: 'is_owner()' } + ) + expect(payload).toEqual({ check: 'is_owner()' }) + }) + + it('omits the check when the check expression is unchanged or empty', () => { + const withCheck = mockPolicy({ command: 'UPDATE', check: 'is_admin()' }) + expect(generateUpdatePolicyPayload(withCheck, { ...baseForm, check: ' is_admin()' })).toEqual( + {} + ) + expect(generateUpdatePolicyPayload(withCheck, { ...baseForm, check: '' })).toEqual({}) + }) + + it('maps the using editor to the check field for INSERT policies', () => { + const insertPolicy = mockPolicy({ command: 'INSERT', definition: null, check: null }) + const payload = generateUpdatePolicyPayload(insertPolicy, { ...baseForm, using: 'true' }) + expect(payload).toEqual({ check: 'true' }) + }) + + it('never includes a definition for INSERT policies', () => { + const insertPolicy = mockPolicy({ command: 'INSERT', definition: null, check: 'true' }) + const payload = generateUpdatePolicyPayload(insertPolicy, { + ...baseForm, + using: 'is_admin()', + check: 'ignored', + }) + expect(payload).toEqual({ check: 'is_admin()' }) + }) + + it('omits the check for INSERT policies when the expression is unchanged', () => { + const insertPolicy = mockPolicy({ command: 'INSERT', definition: null, check: 'true' }) + expect(generateUpdatePolicyPayload(insertPolicy, { ...baseForm, using: ' true' })).toEqual({}) + }) + + it('includes the name and roles when they changed', () => { + const payload = generateUpdatePolicyPayload(mockPolicy(), { + ...baseForm, + name: 'renamed_policy', + roles: ['anon', 'authenticated'], + }) + expect(payload).toEqual({ name: 'renamed_policy', roles: ['anon', 'authenticated'] }) + }) +}) diff --git a/apps/studio/components/interfaces/Database/Policies/PolicyEditorPanel/PolicyEditorPanel.utils.ts b/apps/studio/components/interfaces/Database/Policies/PolicyEditorPanel/PolicyEditorPanel.utils.ts index f0341e8a06b..6e483e8a36f 100644 --- a/apps/studio/components/interfaces/Database/Policies/PolicyEditorPanel/PolicyEditorPanel.utils.ts +++ b/apps/studio/components/interfaces/Database/Policies/PolicyEditorPanel/PolicyEditorPanel.utils.ts @@ -1,5 +1,12 @@ import type { PGPolicy } from '@supabase/pg-meta' -import { ident, keyword, safeSql, type SafeSqlFragment } from '@supabase/pg-meta/src/pg-format' +import { + ident, + keyword, + safeSql, + untrustedSql, + type SafeSqlFragment, + type UntrustedSqlFragment, +} from '@supabase/pg-meta/src/pg-format' import { isEqual } from 'lodash' // [Joshen] Not used but keeping this for now in case we do an inline editor @@ -77,6 +84,55 @@ export const generateCreatePolicyQuery = ({ return safeSql`${withUsing};` } +/** + * Diffs the editor form against the stored policy and returns only the fields + * that changed β€” an empty result means there is nothing to save. A stored + * `null` definition/check (policy created without that clause) counts as + * empty, so typing an expression into a previously empty editor is a change. + * Empty form values never produce a payload field, because ALTER POLICY can + * only replace an expression, not remove it. + * + * Expressions are returned as UntrustedSqlFragment β€” the caller promotes them + * with acceptUntrustedSql in the submit handler. + */ +export const generateUpdatePolicyPayload = ( + selectedPolicy: Pick, + policyForm: { + name: string + roles: string[] + using?: string + check?: string + } +): { + name?: string + roles?: string[] + definition?: UntrustedSqlFragment + check?: UntrustedSqlFragment +} => { + const payload: { + name?: string + roles?: string[] + definition?: UntrustedSqlFragment + check?: UntrustedSqlFragment + } = {} + const usingVal = policyForm.using?.trim() + const checkVal = policyForm.check?.trim() + + if (policyForm.name !== selectedPolicy.name) payload.name = policyForm.name + if (!isEqual(selectedPolicy.roles, policyForm.roles)) payload.roles = policyForm.roles + + if (selectedPolicy.command === 'INSERT') { + // For INSERT policies editor one holds the with check expression + if (!!usingVal && usingVal !== selectedPolicy.check) payload.check = untrustedSql(usingVal) + } else { + if (!!usingVal && usingVal !== selectedPolicy.definition) + payload.definition = untrustedSql(usingVal) + if (!!checkVal && checkVal !== selectedPolicy.check) payload.check = untrustedSql(checkVal) + } + + return payload +} + export const checkIfPolicyHasChanged = ( selectedPolicy: PGPolicy, policyForm: { diff --git a/apps/studio/components/interfaces/Database/Policies/PolicyEditorPanel/index.tsx b/apps/studio/components/interfaces/Database/Policies/PolicyEditorPanel/index.tsx index e24db3b4374..a7688b1fdae 100644 --- a/apps/studio/components/interfaces/Database/Policies/PolicyEditorPanel/index.tsx +++ b/apps/studio/components/interfaces/Database/Policies/PolicyEditorPanel/index.tsx @@ -12,7 +12,6 @@ import { import { PermissionAction } from '@supabase/shared-types/out/constants' import { useQueryClient } from '@tanstack/react-query' import { useParams } from 'common' -import { isEqual } from 'lodash' import { memo, useCallback, useEffect, useRef, useState } from 'react' import { useForm, useWatch } from 'react-hook-form' import { toast } from 'sonner' @@ -35,7 +34,11 @@ import * as z from 'zod' import { LockedCreateQuerySection, LockedRenameQuerySection } from './LockedQuerySection' import { PolicyDetailsV2 } from './PolicyDetailsV2' -import { checkIfPolicyHasChanged, generateCreatePolicyQuery } from './PolicyEditorPanel.utils' +import { + checkIfPolicyHasChanged, + generateCreatePolicyQuery, + generateUpdatePolicyPayload, +} from './PolicyEditorPanel.utils' import { PolicyEditorPanelHeader } from './PolicyEditorPanelHeader' import { PolicyTemplates } from './PolicyTemplates' import { QueryError } from './QueryError' @@ -172,12 +175,15 @@ export const PolicyEditorPanel = memo(function ({ name, roles: roles.length === 0 ? ['public'] : roles.split(', '), definition: editorOneFormattedValue, - check: command === 'INSERT' ? editorOneFormattedValue : editorTwoFormattedValue, + check: + selectedPolicy.command === 'INSERT' + ? editorOneFormattedValue + : editorTwoFormattedValue, }) : false return policyCreateUnsaved || policyUpdateUnsaved - }, [command, name, roles, selectedPolicy]) + }, [name, roles, selectedPolicy]) const { confirmOnClose, handleOpenChange, modalProps } = useConfirmOnClose({ checkIsDirty: hasUnsavedChanges, @@ -192,15 +198,14 @@ export const PolicyEditorPanel = memo(function ({ const usingExpr = command !== 'insert' ? using : undefined const checkExpr = command === 'insert' ? using : check - if (command === 'insert' && !checkExpr?.trim()) { - return setFieldError('Please provide a SQL expression for the WITH CHECK statement') - } else if (command !== 'insert' && !usingExpr?.trim()) { - return setFieldError('Please provide a SQL expression for the USING statement') - } else { - setFieldError(undefined) - } - if (selectedPolicy === undefined) { + if (command === 'insert' && !checkExpr?.trim()) { + return setFieldError('Please provide a SQL expression for the WITH CHECK statement') + } else if (command !== 'insert' && !usingExpr?.trim()) { + return setFieldError('Please provide a SQL expression for the USING statement') + } + setFieldError(undefined) + const sql = generateCreatePolicyQuery({ name, schema, @@ -222,34 +227,37 @@ export const PolicyEditorPanel = memo(function ({ }, }) } else if (selectedProject !== undefined) { - const payload: { - name?: string - definition?: SafeSqlFragment - check?: SafeSqlFragment - roles?: Array - } = {} const updatedRoles = roles.length === 0 ? ['public'] : roles.split(', ') - // Trim for string comparison against the stored policy values. The Save click is the - // explicit user gesture that promotes editor content to executable SQL. - const usingVal = using?.trim() - const checkVal = check?.trim() - - if (name !== selectedPolicy.name) payload.name = name - if (!isEqual(selectedPolicy.roles, updatedRoles)) payload.roles = updatedRoles - if (selectedPolicy.definition !== null && selectedPolicy.definition !== usingVal) - payload.definition = - usingVal === undefined ? undefined : acceptUntrustedSql(untrustedSql(usingVal)) + // A null definition/check is valid (the policy was created without that clause), so + // updates only require an expression where the policy already has one β€” ALTER POLICY + // can only replace an expression, not remove it. if (selectedPolicy.command === 'INSERT') { - // [Joshen] Cause editor one will be the check statement in this scenario - if (selectedPolicy.check !== usingVal) - payload.check = - usingVal === undefined ? undefined : acceptUntrustedSql(untrustedSql(usingVal)) + if (selectedPolicy.check !== null && !using?.trim()) { + return setFieldError( + 'The WITH CHECK expression cannot be removed. Provide a new expression, or delete and recreate the policy without it.' + ) + } } else { - if (selectedPolicy.check !== checkVal) - payload.check = - checkVal === undefined ? undefined : acceptUntrustedSql(untrustedSql(checkVal)) + if (selectedPolicy.definition !== null && !using?.trim()) { + return setFieldError( + 'The USING expression cannot be removed. Provide a new expression, or delete and recreate the policy without it.' + ) + } + if (selectedPolicy.check !== null && !check?.trim()) { + return setFieldError( + 'The WITH CHECK expression cannot be removed. Provide a new expression, or delete and recreate the policy without it.' + ) + } } + setFieldError(undefined) + + const payload = generateUpdatePolicyPayload(selectedPolicy, { + name, + roles: updatedRoles, + using, + check, + }) if (Object.keys(payload).length === 0) return onSelectCancel() @@ -257,7 +265,15 @@ export const PolicyEditorPanel = memo(function ({ projectRef: selectedProject.ref, connectionString: selectedProject?.connectionString, originalPolicy: selectedPolicy, - payload, + // The Save click is the explicit user gesture that promotes editor content + // to executable SQL. + payload: { + name: payload.name, + roles: payload.roles, + definition: + payload.definition === undefined ? undefined : acceptUntrustedSql(payload.definition), + check: payload.check === undefined ? undefined : acceptUntrustedSql(payload.check), + }, }) } } From e7d9c88cbc0aef6ed66f1a85cc0a41906bd6030b Mon Sep 17 00:00:00 2001 From: Miranda Limonczenko Date: Tue, 4 Aug 2026 09:00:29 -0700 Subject: [PATCH 11/83] fix(docs): resolve remaining heading-order issues found in Pass 2 diagnostic (#48664) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem After merging [#48456](https://github.com/supabase/supabase/pull/48456) (shared components) and [#48459](https://github.com/supabase/supabase/pull/48459) (per-page content fixes), a follow-up diagnostic pass found 22 remaining heading-order violations, logged as Pass 2 in the [triage report](https://app.notion.com/p/supabase/Playwright-E2E-Triage-Reports-3ab5004b775f81e3bc60d058fa5a02c1). None of them were caught by the earlier fixes because they came from places that scan didn't check: shared partials, raw HTML heading tags written directly in MDX, and a couple of shared/interactive components rendering hardcoded heading levels. ## Solution - `_partials/social_provider_setup.mdx`: `#### Local development` β†’ `###`, matching the `##` that always precedes it on all 14 social-login pages. - `guides/database/functions.mdx` and `guides/integrations/vercel-marketplace.mdx`: replaced raw `

`/`

` tags with correctly-nested real headings (`### Planets`/`### People`; `#### Deploy a Next.js app...`) β€” no styling workarounds needed since they nest naturally one level below their parent section. - `auth/quickstarts/{nextjs,react-native,react,astrojs}.mdx`: these 4 pages had no heading at all before the embedded `_partials/api_settings.mdx` partial's own `### Get API details` heading, so added a `## Quickstart` heading above the walkthrough to give it a valid parent. - `packages/ui`'s `Accordion` component: Radix's `AccordionPrimitive.Header` renders as an unconditional `

` regardless of where the accordion is used. That's shared across Studio, www, and design-system, not just docs, and surfaced on docs' vendor-agnostic telemetry page. Now rendered via `asChild` onto a plain `div` instead, since a generic accordion has no way to know what heading level (if any) is valid in a given page. - SQL-to-REST translator tool (`/docs/guides/api/sql-to-rest`): its `Assumptions`/`FAQs` section labels were hardcoded `

` with no `h2` anywhere on the page. Converted to styled spans rather than promoting to a real `

`, because real h1/h2/h3 tags in this codebase force a prose font-size that utility classes can't override β€” promoting the tag would have visibly changed its size. - `RealtimeLimitsEstimator` (embedded on both `postgres-changes` and `benchmarks`): its 3 section headings were hardcoded `

`, but the two embedding pages need different levels (h3 vs h4) for that spot to be valid β€” no single correct heading level. Converted to styled spans, same pattern used throughout this project for components embedded at varying heading depths. ## Manual testing 1. Check out this branch and run `pnpm dev:docs`. 2. Visit `/docs/guides/auth/social-login/auth-github` (or any other provider page) and confirm the "Local development" callout under "Find your callback URL" still looks and reads the same. 3. Visit `/docs/guides/database/functions` β†’ "Returning data sets" tab and confirm the "Planets" / "People" table captions still look the same. 4. Visit `/docs/guides/integrations/vercel-marketplace` β†’ "Quickstart" β†’ "Via template" and confirm the CTA card title still looks the same. 5. Visit `/docs/guides/auth/quickstarts/nextjs` (or react-native/react/astrojs) and confirm a "Quickstart" heading now appears above the walkthrough, and "Get API details" still renders correctly further down. 6. Run `pnpm dev:design-system` and open `/design-system/docs/components/accordion` β€” expand/collapse an item and confirm it still animates and looks identical; inspect the DOM and confirm the trigger's wrapper is a `div`, not an `h3`. 7. Visit `/docs/guides/api/sql-to-rest`, translate any query, and confirm the "Assumptions"/"FAQs" section labels still look the same. 8. Visit `/docs/guides/realtime/postgres-changes` and `/docs/guides/realtime/benchmarks`, scroll to the connection-limits calculator, and confirm its section labels still look the same on both pages. 9. (Optional, for a full re-check) Run `pnpm e2e:docs:a11y --all` against a deployed preview of this branch β€” only `/docs/guides/cli` (pre-existing 404, unrelated to headings) should fail; every other page should pass. Verified with a full Playwright run against a real preview deployment: **756 passed, 1 failed** (`/docs/guides/cli`, the pre-existing unrelated 404). Zero heading-order violations remain. ## Summary by CodeRabbit - **Documentation** - Added clearly labeled Quickstart sections to Astro, Next.js, React Native, and React authentication guides. - Improved heading hierarchy and formatting across social provider setup, database functions, and deployment documentation. - Updated estimator and SQL-to-REST section presentation for more consistent content structure. - **Bug Fixes** - Improved accordion trigger layout while preserving existing behavior, styling, accessibility, and icon display. --------- Co-authored-by: Claude Sonnet 5 --- .../RealtimeLimitsEstimator.tsx | 12 +++-- .../_partials/social_provider_setup.mdx | 6 +-- .../guides/auth/quickstarts/astrojs.mdx | 2 + .../guides/auth/quickstarts/nextjs.mdx | 2 + .../guides/auth/quickstarts/react-native.mdx | 2 + .../content/guides/auth/quickstarts/react.mdx | 2 + .../content/guides/database/functions.mdx | 4 +- .../integrations/vercel-marketplace.mdx | 2 +- .../ui-patterns/src/SqlToRest/sql-to-rest.tsx | 12 +++-- .../ui/src/components/shadcn/ui/accordion.tsx | 52 ++++++++++--------- 10 files changed, 56 insertions(+), 40 deletions(-) diff --git a/apps/docs/components/RealtimeLimitsEstimator/RealtimeLimitsEstimator.tsx b/apps/docs/components/RealtimeLimitsEstimator/RealtimeLimitsEstimator.tsx index 7f13c8bb837..660566d03f5 100644 --- a/apps/docs/components/RealtimeLimitsEstimator/RealtimeLimitsEstimator.tsx +++ b/apps/docs/components/RealtimeLimitsEstimator/RealtimeLimitsEstimator.tsx @@ -57,7 +57,9 @@ export default function RealtimeLimitsEstimater({}) { return (
-

Set your expected parameters

+ + Set your expected parameters +
@@ -107,7 +109,9 @@ export default function RealtimeLimitsEstimater({}) { {limits && (
-

Current maximum possible throughput

+ + Current maximum possible throughput +

@@ -158,7 +162,9 @@ export default function RealtimeLimitsEstimater({}) { .filter((v, i, a) => a.indexOf(v) === i) .map((computeAddOn) => (
-

{COMPUTE_LABELS[computeAddOn]}

+ + {COMPUTE_LABELS[computeAddOn]} +
diff --git a/apps/docs/content/_partials/social_provider_setup.mdx b/apps/docs/content/_partials/social_provider_setup.mdx index 399d31eda57..aa87b887f57 100644 --- a/apps/docs/content/_partials/social_provider_setup.mdx +++ b/apps/docs/content/_partials/social_provider_setup.mdx @@ -5,9 +5,7 @@ The next step requires a callback URL, which looks like this: `https:// - -#### Local development +### Local development When testing OAuth locally with the Supabase CLI, ensure your OAuth provider is configured with the local Supabase Auth callback URL: @@ -19,5 +17,3 @@ If this callback URL is missing or misconfigured, OAuth sign-in may fail or not See the [local development docs](/docs/guides/local-development) for more details. For testing OAuth locally with the Supabase CLI see the [local development docs](/docs/guides/local-development). - - diff --git a/apps/docs/content/guides/auth/quickstarts/astrojs.mdx b/apps/docs/content/guides/auth/quickstarts/astrojs.mdx index 1baa7521c43..c43992fc6ce 100644 --- a/apps/docs/content/guides/auth/quickstarts/astrojs.mdx +++ b/apps/docs/content/guides/auth/quickstarts/astrojs.mdx @@ -5,6 +5,8 @@ breadcrumb: 'Auth Quickstarts' hideToc: true --- +## Quickstart + diff --git a/apps/docs/content/guides/auth/quickstarts/nextjs.mdx b/apps/docs/content/guides/auth/quickstarts/nextjs.mdx index 30912b80e7e..eb56a6c7710 100644 --- a/apps/docs/content/guides/auth/quickstarts/nextjs.mdx +++ b/apps/docs/content/guides/auth/quickstarts/nextjs.mdx @@ -5,6 +5,8 @@ breadcrumb: 'Auth Quickstarts' hideToc: true --- +## Quickstart + diff --git a/apps/docs/content/guides/auth/quickstarts/react-native.mdx b/apps/docs/content/guides/auth/quickstarts/react-native.mdx index d8ed113a884..46c2c79c339 100644 --- a/apps/docs/content/guides/auth/quickstarts/react-native.mdx +++ b/apps/docs/content/guides/auth/quickstarts/react-native.mdx @@ -5,6 +5,8 @@ breadcrumb: 'Auth Quickstarts' hideToc: true --- +## Quickstart + diff --git a/apps/docs/content/guides/auth/quickstarts/react.mdx b/apps/docs/content/guides/auth/quickstarts/react.mdx index 63cc239e117..f624e8d03ec 100644 --- a/apps/docs/content/guides/auth/quickstarts/react.mdx +++ b/apps/docs/content/guides/auth/quickstarts/react.mdx @@ -5,6 +5,8 @@ breadcrumb: 'Auth Quickstarts' hideToc: true --- +## Quickstart + diff --git a/apps/docs/content/guides/database/functions.mdx b/apps/docs/content/guides/database/functions.mdx index e02dfed95a6..f7a35203620 100644 --- a/apps/docs/content/guides/database/functions.mdx +++ b/apps/docs/content/guides/database/functions.mdx @@ -164,7 +164,7 @@ For example, if we had a database with some Star Wars data inside: > -

Planets

+### Planets ``` | id | name | @@ -174,7 +174,7 @@ For example, if we had a database with some Star Wars data inside: | 3 | Kashyyyk | ``` -

People

+### People ``` | id | name | planet_id | diff --git a/apps/docs/content/guides/integrations/vercel-marketplace.mdx b/apps/docs/content/guides/integrations/vercel-marketplace.mdx index ac3c21bbf61..26c4be43088 100644 --- a/apps/docs/content/guides/integrations/vercel-marketplace.mdx +++ b/apps/docs/content/guides/integrations/vercel-marketplace.mdx @@ -23,7 +23,7 @@ Vercel Marketplace is currently in Public Alpha. If you encounter any issues or ### Via template
-
Deploy a Next.js app with Supabase Vercel Storage now
+

Deploy a Next.js app with Supabase Vercel Storage now

Uses the Next.js Supabase Starter Template

Deploy with Vercel diff --git a/packages/ui-patterns/src/SqlToRest/sql-to-rest.tsx b/packages/ui-patterns/src/SqlToRest/sql-to-rest.tsx index 23b57101cf0..b41ba063678 100644 --- a/packages/ui-patterns/src/SqlToRest/sql-to-rest.tsx +++ b/packages/ui-patterns/src/SqlToRest/sql-to-rest.tsx @@ -427,10 +427,12 @@ export default function SqlToRest({ > {relevantAssumptions.length > 0 && (
-

Assumptions

+ + Assumptions +
    {relevantAssumptions.map((assumption) => ( -
  1. +
  2. {assumption}
  3. ))} @@ -440,7 +442,9 @@ export default function SqlToRest({ {relevantFaqs.length > 0 && ( <> -

    FAQs

    + + FAQs + {relevantFaqs.map((faq) => ( -
    +
    , diff --git a/packages/ui/src/components/shadcn/ui/accordion.tsx b/packages/ui/src/components/shadcn/ui/accordion.tsx index ee0f3c73b7a..0585a052ac5 100644 --- a/packages/ui/src/components/shadcn/ui/accordion.tsx +++ b/packages/ui/src/components/shadcn/ui/accordion.tsx @@ -24,31 +24,33 @@ const AccordionTrigger = React.forwardRef< const computedTabIndex = getExplicitTabIndex(tabIndex, disabled) return ( - - svg]:rotate-180', - className - )} - {...props} - disabled={disabled} - tabIndex={computedTabIndex} - > - {children} - {!hideIcon && ( - + +
    + svg]:rotate-180', + className + )} + {...props} + disabled={disabled} + tabIndex={computedTabIndex} + > + {children} + {!hideIcon && ( + +
    ) }) From 0791b04eb8ad0ba3998f42376675e91ff4f7cd6a Mon Sep 17 00:00:00 2001 From: Charis <26616127+charislam@users.noreply.github.com> Date: Tue, 4 Aug 2026 12:16:18 -0400 Subject: [PATCH 12/83] feat(sql-editor): roll out manual saving by default (#48706) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Feature β€” progresses the SQL Editor manual saving rollout, and removes a fully rolled out feature flag. ## What is the current behavior? Manual saving (snippets save only on an explicit Save / Cmd+S rather than autosaving every edit) is opt-in. It requires both the `sqlEditorManualSave` ConfigCat flag and the user turning on the "Disable snippet auto-saving" feature preview themselves. That flag is now fully rolled out. ## What is the new behavior? - `sqlEditorManualSave` is removed, so the feature preview is listed for everyone. (Delete the flag in ConfigCat after a few months.) - New `sqlEditorManualSaveForced` flag progresses the rollout. It forces manual saving on regardless of what the user stored previously, including an explicit opt-out, via a new `isForced` field on `FeaturePreview` that `initializeFlags` resolves ahead of the localStorage lookup β€” so the feature preview modal reflects the forced state too, not just the save behavior. Turning the flag off reverts everyone who never opted in, so it remains a working kill switch. - Users the rollout switches over get a one-time dialog on their first SQL Editor route, explaining that snippets no longer autosave. Dismissal persists in `sql-editor-manual-save-notice-dismissed` (allowlisted, so it survives sign-out). - Users who opted into the preview themselves never see the dialog β€” it records their dismissal up front instead, since the notice needs to outlive the feature preview and once the preview is retired there's no stored opt-in left to recognize them by. - The preview keeps its switch so users who lose their local storage can opt in early, but once the rollout reaches them the "Disable feature" button is disabled with a tooltip explaining why. ### To test Turn on `sqlEditorManualSaveForced` on via the dev toolbar. - No `supabase-ui-sql-editor-manual-save` and no dismissal key β†’ dialog appears on `/project//sql`, toolbar shows the Save button. Dismiss, reload β†’ no dialog. - `supabase-ui-sql-editor-manual-save` set to `false` (previously opted out) β†’ still forced onto manual saving, and still gets the dialog. - `supabase-ui-sql-editor-manual-save` set to `true` β†’ no dialog, and the dismissal key is written automatically. - Flag off, no opt-in β†’ autosave, no dialog, and the "Disable autosave" power-off button still opens the preview modal. - Preview modal while forced β†’ "Disable feature" is disabled with a tooltip; another preview (e.g. Column-level privileges) still disables normally. ## Additional context --- .../FeaturePreview/FeaturePreviewContext.tsx | 16 +++- .../FeaturePreview/FeaturePreviewModal.tsx | 24 +++++- .../SqlEditorManualSavePreview.tsx | 5 ++ .../App/FeaturePreview/useFeaturePreviews.ts | 16 +++- .../SqlEditorManualSaveNoticeDialog.tsx | 85 +++++++++++++++++++ ...EditorManualSaveNoticeDialog.utils.test.ts | 42 +++++++++ .../SqlEditorManualSaveNoticeDialog.utils.ts | 36 ++++++++ .../SQLEditor/UtilityPanel/AutosaveStatus.tsx | 10 +-- .../SQLEditorLayout/SQLEditorLayout.tsx | 2 + packages/common/constants/local-storage.ts | 2 + 10 files changed, 221 insertions(+), 17 deletions(-) create mode 100644 apps/studio/components/interfaces/SQLEditor/SqlEditorManualSaveNoticeDialog.tsx create mode 100644 apps/studio/components/interfaces/SQLEditor/SqlEditorManualSaveNoticeDialog.utils.test.ts create mode 100644 apps/studio/components/interfaces/SQLEditor/SqlEditorManualSaveNoticeDialog.utils.ts diff --git a/apps/studio/components/interfaces/App/FeaturePreview/FeaturePreviewContext.tsx b/apps/studio/components/interfaces/App/FeaturePreview/FeaturePreviewContext.tsx index a0aaea6f28e..557c0e1327e 100644 --- a/apps/studio/components/interfaces/App/FeaturePreview/FeaturePreviewContext.tsx +++ b/apps/studio/components/interfaces/App/FeaturePreview/FeaturePreviewContext.tsx @@ -49,6 +49,14 @@ export const FeaturePreviewContextProvider = ({ children }: PropsWithChildren) = return { ...a, [b.key]: false } } + // A forced preview has become the default behavior, so it's on whatever + // the user stored previously β€” including an explicit opt-out. Applied + // here rather than in the individual `useIsXEnabled` helpers so that the + // feature preview modal reflects it too. + if (b.isForced) { + return { ...a, [b.key]: true } + } + const defaultOptIn = b.isDefaultOptIn const localStorageValue = safeLocalStorage.getItem(b.key) return { @@ -127,10 +135,14 @@ export const useIsJitDbAccessEnabled = () => { return jitDbAccessEnabled && flags[LOCAL_STORAGE_KEYS.UI_PREVIEW_JIT_DB_ACCESS] } +/** + * Whether the SQL Editor saves snippets only on request. True when the user + * opted into the preview themselves *or* the `sqlEditorManualSaveForced` rollout + * has reached them β€” the preview's `isForced` flag folds the latter into `flags`. + */ export const useIsSqlEditorManualSaveEnabled = () => { const { flags } = useFeaturePreviewContext() - const sqlEditorManualSaveEnabled = useFlag('sqlEditorManualSave') - return sqlEditorManualSaveEnabled && flags[LOCAL_STORAGE_KEYS.UI_PREVIEW_SQL_EDITOR_MANUAL_SAVE] + return flags[LOCAL_STORAGE_KEYS.UI_PREVIEW_SQL_EDITOR_MANUAL_SAVE] } export const useIsMarketplaceEnabled = () => { diff --git a/apps/studio/components/interfaces/App/FeaturePreview/FeaturePreviewModal.tsx b/apps/studio/components/interfaces/App/FeaturePreview/FeaturePreviewModal.tsx index c6134343abb..24ad9662f92 100644 --- a/apps/studio/components/interfaces/App/FeaturePreview/FeaturePreviewModal.tsx +++ b/apps/studio/components/interfaces/App/FeaturePreview/FeaturePreviewModal.tsx @@ -43,6 +43,7 @@ import { SqlEditorManualSavePreview } from './SqlEditorManualSavePreview' import { UnifiedLogsPreview } from './UnifiedLogsPreview' import { FeaturePreview, useFeaturePreviews } from './useFeaturePreviews' import { useBannerStack } from '@/components/ui/BannerStack/BannerStackProvider' +import { ButtonTooltip } from '@/components/ui/ButtonTooltip' import { IS_PLATFORM } from '@/lib/constants' import { useTrack } from '@/lib/telemetry/track' @@ -83,6 +84,7 @@ export const FeaturePreviewModal = () => { allFeaturePreviews.find((preview) => preview.key === selectedFeatureKey) ?? allFeaturePreviews[0] const isSelectedFeatureEnabled = flags[selectedFeature?.key] + const canDisableSelectedFeature = selectedFeature?.isForced !== true const selectedFeatureRoute = selectedFeature?.getRoute?.(ref) const hasRoute = selectedFeatureRoute !== undefined && ref !== undefined @@ -229,11 +231,25 @@ export const FeaturePreviewModal = () => { )} - {isSelectedFeatureEnabled ? ( - - ) : ( + + )} + {!isSelectedFeatureEnabled && (
    +

    + Manual saving is becoming the default for the SQL Editor. This preview can no longer be + turned off. To opt into manual saving before the change reaches your account, enable this + preview. +

    ) } diff --git a/apps/studio/components/interfaces/App/FeaturePreview/useFeaturePreviews.ts b/apps/studio/components/interfaces/App/FeaturePreview/useFeaturePreviews.ts index da9c80cf2ba..3587e6b175b 100644 --- a/apps/studio/components/interfaces/App/FeaturePreview/useFeaturePreviews.ts +++ b/apps/studio/components/interfaces/App/FeaturePreview/useFeaturePreviews.ts @@ -14,6 +14,12 @@ export type FeaturePreview = { isDefaultOptIn: boolean /** Visibility in the feature preview modal (For feature flagging a feature preview) */ enabled: boolean + /** + * Forces the preview on for this user, whatever they previously chose β€” for a + * preview that has become the default behavior. Overrides both `isDefaultOptIn` + * and a stored opt-out, and takes away the ability to turn the preview back off. + */ + isForced?: boolean /** Optional category that the feature preview falls under, defaults to "Others" in the UI otherwise */ category?: 'observability' | 'database' /** @@ -28,10 +34,10 @@ export const useFeaturePreviews = (): FeaturePreview[] => { const isPlatformWebhooksEnabled = useFlag('platformWebhooks') const jitDbAccessEnabled = useFlag('jitDbAccess') const isMarketplaceEnabled = useFlag('marketplaceIntegrations') - const isSqlEditorManualSaveEnabled = useFlag('sqlEditorManualSave') const isDatabaseConnectionsEnabled = useFlag('topForPostgres') const unifiedLogsDefaultOptIn = useFlag('unifiedLogsDefaultOptIn') + const isSqlEditorManualSaveForced = useFlag('sqlEditorManualSaveForced') return useMemo(() => { const previews: FeaturePreview[] = [ @@ -114,7 +120,11 @@ export const useFeaturePreviews = (): FeaturePreview[] => { isNew: true, isPlatformOnly: true, isDefaultOptIn: false, - enabled: isSqlEditorManualSaveEnabled, + enabled: true, + // Manual saving is becoming the default for the SQL Editor. The preview + // stays listed so users who lose their local storage can opt back in + // before the rollout reaches them. + isForced: isSqlEditorManualSaveForced, }, { key: LOCAL_STORAGE_KEYS.UI_PREVIEW_DATABASE_CONNECTIONS, @@ -133,10 +143,10 @@ export const useFeaturePreviews = (): FeaturePreview[] => { return previews.sort((a, b) => Number(b.isNew) - Number(a.isNew)) }, [ unifiedLogsDefaultOptIn, + isSqlEditorManualSaveForced, isPlatformWebhooksEnabled, jitDbAccessEnabled, isMarketplaceEnabled, - isSqlEditorManualSaveEnabled, isDatabaseConnectionsEnabled, ]) } diff --git a/apps/studio/components/interfaces/SQLEditor/SqlEditorManualSaveNoticeDialog.tsx b/apps/studio/components/interfaces/SQLEditor/SqlEditorManualSaveNoticeDialog.tsx new file mode 100644 index 00000000000..fbbf96cff05 --- /dev/null +++ b/apps/studio/components/interfaces/SQLEditor/SqlEditorManualSaveNoticeDialog.tsx @@ -0,0 +1,85 @@ +import { LOCAL_STORAGE_KEYS, safeLocalStorage, useFlag } from 'common' +import { useEffect } from 'react' +import { + Button, + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogSection, + DialogSectionSeparator, + DialogTitle, + KeyboardShortcut, +} from 'ui' + +import { shouldShowManualSaveNotice } from './SqlEditorManualSaveNoticeDialog.utils' +import { useFeaturePreviewContext } from '@/components/interfaces/App/FeaturePreview/FeaturePreviewContext' +import { useLocalStorageQuery } from '@/hooks/misc/useLocalStorage' +import { IS_PLATFORM } from '@/lib/constants' + +/** + * One-time notice for users the manual saving rollout switches over, shown the + * first time they land on a SQL Editor route. Users who opted into the preview + * themselves already know the behavior and never see it. + */ +export const SqlEditorManualSaveNoticeDialog = () => { + const { isInitialized } = useFeaturePreviewContext() + const isForced = useFlag('sqlEditorManualSaveForced') + + const [isNoticeDismissed, setIsNoticeDismissed, { isSuccess: isDismissalLoaded }] = + useLocalStorageQuery(LOCAL_STORAGE_KEYS.SQL_EDITOR_MANUAL_SAVE_NOTICE_DISMISSED, false) + + const hasOptedIntoPreview = + safeLocalStorage.getItem(LOCAL_STORAGE_KEYS.UI_PREVIEW_SQL_EDITOR_MANUAL_SAVE) === 'true' + + // Record the dismissal up front for users who opted in themselves. The notice + // outlives the feature preview β€” once the preview is retired there's no stored + // opt-in left to recognize them by, and without this they'd be shown a notice + // about behavior they chose. + useEffect(() => { + if (isDismissalLoaded && hasOptedIntoPreview && !isNoticeDismissed) { + setIsNoticeDismissed(true) + } + }, [isDismissalLoaded, hasOptedIntoPreview, isNoticeDismissed, setIsNoticeDismissed]) + + const isOpen = + isDismissalLoaded && + shouldShowManualSaveNotice({ + isPlatform: IS_PLATFORM, + isFeaturePreviewInitialized: isInitialized, + isForced, + hasOptedIntoPreview, + isNoticeDismissed, + }) + + return ( + !open && setIsNoticeDismissed(true)}> + + + Snippets no longer save automatically + + The SQL Editor now saves your snippets only when you save them. + + + + + + +
      +
    • + Save with the Save button next to Run, or with{' '} + +
    • +
    • Tabs with unsaved edits show a dot
    • +
    • Closing a tab with unsaved edits discards them
    • +
    +
    + + + + +
    +
    + ) +} diff --git a/apps/studio/components/interfaces/SQLEditor/SqlEditorManualSaveNoticeDialog.utils.test.ts b/apps/studio/components/interfaces/SQLEditor/SqlEditorManualSaveNoticeDialog.utils.test.ts new file mode 100644 index 00000000000..3b68fef5667 --- /dev/null +++ b/apps/studio/components/interfaces/SQLEditor/SqlEditorManualSaveNoticeDialog.utils.test.ts @@ -0,0 +1,42 @@ +import { describe, expect, it } from 'vitest' + +import { + shouldShowManualSaveNotice, + type ShouldShowManualSaveNoticeParams, +} from './SqlEditorManualSaveNoticeDialog.utils' + +const eligible: ShouldShowManualSaveNoticeParams = { + isPlatform: true, + isFeaturePreviewInitialized: true, + isForced: true, + hasOptedIntoPreview: false, + isNoticeDismissed: false, +} + +describe('shouldShowManualSaveNotice', () => { + it('shows the notice to a user the rollout switches over', () => { + expect(shouldShowManualSaveNotice(eligible)).toBe(true) + }) + + it('does not show the notice to a user who opted into the preview themselves', () => { + expect(shouldShowManualSaveNotice({ ...eligible, hasOptedIntoPreview: true })).toBe(false) + }) + + it('does not show the notice once dismissed', () => { + expect(shouldShowManualSaveNotice({ ...eligible, isNoticeDismissed: true })).toBe(false) + }) + + it('does not show the notice when the rollout flag is off', () => { + expect(shouldShowManualSaveNotice({ ...eligible, isForced: false })).toBe(false) + }) + + it('does not show the notice outside of the hosted platform', () => { + expect(shouldShowManualSaveNotice({ ...eligible, isPlatform: false })).toBe(false) + }) + + it('does not show the notice before the feature previews have initialized', () => { + expect(shouldShowManualSaveNotice({ ...eligible, isFeaturePreviewInitialized: false })).toBe( + false + ) + }) +}) diff --git a/apps/studio/components/interfaces/SQLEditor/SqlEditorManualSaveNoticeDialog.utils.ts b/apps/studio/components/interfaces/SQLEditor/SqlEditorManualSaveNoticeDialog.utils.ts new file mode 100644 index 00000000000..86556c08bba --- /dev/null +++ b/apps/studio/components/interfaces/SQLEditor/SqlEditorManualSaveNoticeDialog.utils.ts @@ -0,0 +1,36 @@ +export interface ShouldShowManualSaveNoticeParams { + /** Manual saving is a platform-only feature preview */ + isPlatform: boolean + /** Whether the feature preview flags reflect loaded values rather than pre-load defaults */ + isFeaturePreviewInitialized: boolean + /** Whether the rollout flag forces manual saving on for this user */ + isForced: boolean + /** Whether the user explicitly enabled the manual save preview themselves */ + hasOptedIntoPreview: boolean + isNoticeDismissed: boolean +} + +/** + * Whether to show the one-time notice explaining that snippets no longer + * autosave. + * + * Everyone the rollout switches over needs telling β€” including users who + * explicitly opted *out* of the preview, since the rollout overrides that + * choice. Only users who turned manual saving on themselves already know what + * the behavior is. + */ +export function shouldShowManualSaveNotice({ + isPlatform, + isFeaturePreviewInitialized, + isForced, + hasOptedIntoPreview, + isNoticeDismissed, +}: ShouldShowManualSaveNoticeParams): boolean { + return ( + isPlatform && + isFeaturePreviewInitialized && + isForced && + !hasOptedIntoPreview && + !isNoticeDismissed + ) +} diff --git a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/AutosaveStatus.tsx b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/AutosaveStatus.tsx index abff6c14b7a..2391bdc4400 100644 --- a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/AutosaveStatus.tsx +++ b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/AutosaveStatus.tsx @@ -1,4 +1,4 @@ -import { LOCAL_STORAGE_KEYS, useFlag } from 'common' +import { LOCAL_STORAGE_KEYS } from 'common' import { PowerOff } from 'lucide-react' import { Button, Tooltip, TooltipContent, TooltipTrigger } from 'ui' @@ -19,13 +19,7 @@ export const AutosaveStatus = ({ id }: AutosaveStatusProps) => { const isManualSaveEnabled = useIsSqlEditorManualSaveEnabled() const { selectFeaturePreview } = useFeaturePreviewModal() - // Whether the manual-save preview can actually be opted into. Mirrors the - // feature preview modal's own filter (platform-only + ConfigCat flag), so we - // don't offer to "disable autosave" when there's no preview to switch to. - // `isManualSaveEnabled` also being false for self-hosted / flag-off users is - // why it can't gate this affordance. - const sqlEditorManualSaveFlag = useFlag('sqlEditorManualSave') - const canEnableManualSave = IS_PLATFORM && sqlEditorManualSaveFlag + const canEnableManualSave = IS_PLATFORM if (isManualSaveEnabled) { const snippet = snapV2.snippets[id] diff --git a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorLayout.tsx b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorLayout.tsx index 6ce9d4ddad2..f97145a1a25 100644 --- a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorLayout.tsx +++ b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorLayout.tsx @@ -1,6 +1,7 @@ import { ReactNode } from 'react' import { OngoingQueriesPanel } from '@/components/interfaces/SQLEditor/OngoingQueriesPanel' +import { SqlEditorManualSaveNoticeDialog } from '@/components/interfaces/SQLEditor/SqlEditorManualSaveNoticeDialog' import { withAuth } from '@/hooks/misc/withAuth' export interface SQLEditorLayoutProps { @@ -12,6 +13,7 @@ const SQLEditorLayout = ({ children }: SQLEditorLayoutProps) => { <> {children} + ) } diff --git a/packages/common/constants/local-storage.ts b/packages/common/constants/local-storage.ts index 39f7bf1bd8a..edf85c0a1f8 100644 --- a/packages/common/constants/local-storage.ts +++ b/packages/common/constants/local-storage.ts @@ -50,6 +50,7 @@ export const LOCAL_STORAGE_KEYS = { SQL_EDITOR_SQL_BLOCK_ACKNOWLEDGED: (ref: string) => `sql-editor-sql-block-acknowledged-${ref}`, SQL_EDITOR_SECTION_STATE: (ref: string) => `sql-editor-section-state-${ref}`, SQL_EDITOR_SORT: (ref: string) => `sql-editor-sort-${ref}`, + SQL_EDITOR_MANUAL_SAVE_NOTICE_DISMISSED: 'sql-editor-manual-save-notice-dismissed', LOG_EXPLORER_SPLIT_SIZE: 'supabase_log-explorer-split-size', GRAPHQL_INTROSPECTION_NOTICE_COLLAPSED: (ref: string) => @@ -158,6 +159,7 @@ const LOCAL_STORAGE_KEYS_ALLOWLIST = [ LOCAL_STORAGE_KEYS.UI_PREVIEW_PLATFORM_WEBHOOKS, LOCAL_STORAGE_KEYS.UI_PREVIEW_JIT_DB_ACCESS, LOCAL_STORAGE_KEYS.UI_PREVIEW_SQL_EDITOR_MANUAL_SAVE, + LOCAL_STORAGE_KEYS.SQL_EDITOR_MANUAL_SAVE_NOTICE_DISMISSED, LOCAL_STORAGE_KEYS.UI_PREVIEW_MARKETPLACE, LOCAL_STORAGE_KEYS.LAST_SIGN_IN_METHOD, LOCAL_STORAGE_KEYS.HIDE_PROMO_TOAST, From 4a9b5a538b89996befe2825db41ad9413d6d13c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filipe=20Caba=C3=A7o?= Date: Tue, 4 Aug 2026 17:26:26 +0100 Subject: [PATCH 13/83] chore: update pg changes to add python to the code blocks (#47793) ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Adds code blocks for Python and new pg changes features ## Summary by CodeRabbit * **Documentation** * Updated Python code examples for Realtime Postgres Changes to use cleaner, working subscription syntax. * Fixed a missing comma in a multi-change example so the sample code is valid. * Added a missing Python example for selecting specific columns. Co-authored-by: Ali Waseem --- .../guides/realtime/postgres-changes.mdx | 80 +++++++++---------- 1 file changed, 37 insertions(+), 43 deletions(-) diff --git a/apps/docs/content/guides/realtime/postgres-changes.mdx b/apps/docs/content/guides/realtime/postgres-changes.mdx index 2443e3f8c03..5094cdf3b20 100644 --- a/apps/docs/content/guides/realtime/postgres-changes.mdx +++ b/apps/docs/content/guides/realtime/postgres-changes.mdx @@ -310,8 +310,7 @@ changes = supabase.channel('schema-db-changes').on_postgres_changes( "*", schema="public", callback=lambda payload: print(payload) -) -.subscribe() +).subscribe() ``` @@ -681,8 +680,7 @@ changes = supabase.channel('schema-db-changes').on_postgres_changes( "INSERT", schema="public", callback=lambda payload: print(payload) -) -.subscribe() +).subscribe() ``` @@ -693,8 +691,7 @@ changes = supabase.channel('schema-db-changes').on_postgres_changes( "UPDATE", schema="public", callback=lambda payload: print(payload) -) -.subscribe() +).subscribe() ``` @@ -705,8 +702,7 @@ changes = supabase.channel('schema-db-changes').on_postgres_changes( "DELETE", schema="public", callback=lambda payload: print(payload) -) -.subscribe() +).subscribe() ``` @@ -717,8 +713,7 @@ changes = supabase.channel('schema-db-changes').on_postgres_changes( "*", schema="public", callback=lambda payload: print(payload) -) -.subscribe() +).subscribe() ``` @@ -903,8 +898,7 @@ changes = supabase.channel('db-changes').on_postgres_changes( schema="public", table="todos", callback=lambda payload: print(payload) -) -.subscribe() +).subscribe() ``` @@ -1026,7 +1020,7 @@ myChannel.subscribe() changes = supabase.channel('db-changes').on_postgres_changes( "*", schema="public", - table="messages" + table="messages", callback=lambda payload: print(payload) ).on_postgres_changes( "INSERT", @@ -1162,8 +1156,7 @@ changes = supabase.channel('db-changes').on_postgres_changes( table="todos", filter="id=eq.1", callback=lambda payload: print(payload) -) -.subscribe() +).subscribe() ``` @@ -1360,8 +1353,7 @@ changes = supabase.channel('db-changes').on_postgres_changes( table="messages", filter="body=eq.hey", callback=lambda payload: print(payload) -) -.subscribe() +).subscribe() ``` @@ -1524,8 +1516,7 @@ changes = supabase.channel('db-changes').on_postgres_changes( table="messages", filter="body=neq.bye", callback=lambda payload: print(payload) -) -.subscribe() +).subscribe() ``` @@ -1687,8 +1678,7 @@ changes = supabase.channel('db-changes').on_postgres_changes( table="profiles", filter="age=lt.65", callback=lambda payload: print(payload) -) -.subscribe() +).subscribe() ``` @@ -1850,8 +1840,7 @@ changes = supabase.channel('db-changes').on_postgres_changes( table="profiles", filter="age=lte.65", callback=lambda payload: print(payload) -) -.subscribe() +).subscribe() ``` @@ -2013,8 +2002,7 @@ changes = supabase.channel('db-changes').on_postgres_changes( table="products", filter="quantity=gt.10", callback=lambda payload: print(payload) -) -.subscribe() +).subscribe() ``` @@ -2176,8 +2164,7 @@ changes = supabase.channel('db-changes').on_postgres_changes( table="products", filter="quantity=gte.10", callback=lambda payload: print(payload) -) -.subscribe() +).subscribe() ``` @@ -2339,8 +2326,7 @@ changes = supabase.channel('db-changes').on_postgres_changes( table="products", filter="name=in.(red,blue,yellow)", callback=lambda payload: print(payload) -) -.subscribe() +).subscribe() ``` @@ -2503,8 +2489,7 @@ changes = supabase.channel('db-changes').on_postgres_changes( table="articles", filter="title=ilike.%breaking%", callback=lambda payload: print(payload) -) -.subscribe() +).subscribe() ``` @@ -2667,8 +2652,7 @@ changes = supabase.channel('db-changes').on_postgres_changes( table="posts", filter="slug=match.^post-\\d+$", callback=lambda payload: print(payload) -) -.subscribe() +).subscribe() ``` @@ -2831,8 +2815,7 @@ changes = supabase.channel('db-changes').on_postgres_changes( table="todos", filter="completed_at=is.null", callback=lambda payload: print(payload) -) -.subscribe() +).subscribe() ``` @@ -2995,8 +2978,7 @@ changes = supabase.channel('db-changes').on_postgres_changes( table="orders", filter="status=isdistinct.shipped", callback=lambda payload: print(payload) -) -.subscribe() +).subscribe() ``` @@ -3158,8 +3140,7 @@ changes = supabase.channel('db-changes').on_postgres_changes( table="posts", filter="status=not.in.(draft,archived)", callback=lambda payload: print(payload) -) -.subscribe() +).subscribe() ``` @@ -3332,8 +3313,7 @@ changes = supabase.channel('db-changes').on_postgres_changes( table="orders", filter="amount=gt.100,status=eq.open", callback=lambda payload: print(payload) -) -.subscribe() +).subscribe() ``` @@ -3428,6 +3408,21 @@ let changes = await myChannel.postgresChange( await myChannel.subscribe() ``` + + +<$Show if="sdk:python"> + + +```python +changes = supabase.channel('changes').on_postgres_changes( + "*", + schema="public", + table="profiles", + select=["id", "username"], + callback=lambda payload: print(payload) +).subscribe() +``` + @@ -3595,8 +3590,7 @@ changes = supabase.channel('db-changes').on_postgres_changes( table="products", filter="name=in.(red,blue,yellow)", callback=lambda payload: print(payload) -) -.subscribe() +).subscribe() ``` From 89010c164903850f16dea662dffe53b9e18ba30c Mon Sep 17 00:00:00 2001 From: Charis <26616127+charislam@users.noreply.github.com> Date: Tue, 4 Aug 2026 13:26:02 -0400 Subject: [PATCH 14/83] fix(studio): show selected custom time range in SQL editor time range menu (#48709) ## What Display the actual selected custom date range in the Time Range dropdown's secondary text, instead of the static "Custom range" label. The range is formatted as `DD MMM, HH:mm - DD MMM, HH:mm` to match the existing format in the Logs Explorer's date-picker trigger button, ensuring visual consistency across the Logs UI. Fixes FE-4035 ## Test plan - [x] Typecheck passes: `pnpm typecheck` - [x] Manually verify: Open SQL Editor with `sqlEditorLogsSource` flag enabled, open the Time Range dropdown menu, select a Custom range, and confirm the dropdown's secondary text now displays the selected date range instead of "Custom range" ## Summary by CodeRabbit * **New Features** * Custom time ranges now display formatted start and end timestamps for clearer time selection. * Preset time ranges continue to show their existing helper text. --- .../UtilityPanel/QuerySourceMenu/TimeRangeSubMenu.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/QuerySourceMenu/TimeRangeSubMenu.tsx b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/QuerySourceMenu/TimeRangeSubMenu.tsx index 39517f8c7b6..f633d4a8a58 100644 --- a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/QuerySourceMenu/TimeRangeSubMenu.tsx +++ b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/QuerySourceMenu/TimeRangeSubMenu.tsx @@ -1,3 +1,4 @@ +import dayjs from 'dayjs' import { Check, Lock } from 'lucide-react' import { DropdownMenuItem, @@ -50,7 +51,9 @@ export const TimeRangeSubMenu = ({
    Time range - {isCustomRange ? 'Custom range' : (selectedPreset?.helper.text ?? 'Custom range')} + {isCustomRange + ? `${dayjs(range.from).format('DD MMM, HH:mm')} - ${dayjs(range.to).format('DD MMM, HH:mm')}` + : (selectedPreset?.helper.text ?? 'Custom range')}
    From 0bf5ca584dd037c885641f1e92ad66a491e57228 Mon Sep 17 00:00:00 2001 From: Guilherme Souza Date: Tue, 4 Aug 2026 14:37:14 -0300 Subject: [PATCH 15/83] docs: Update Swift/Kotlin postgrest specs and Swift Web3 sign-in (#48291) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Cross-referenced recent commits across all 6 SDK repos (supabase-js, supabase-flutter, supabase-py, supabase-swift, supabase-kt, supabase-csharp) against `apps/docs/spec/` and `apps/docs/content/guides/`. Most recent commits were CI/chore/release/patch-fix noise; the following genuine feature gaps were found and fixed. ## Changes analyzed - **supabase-swift**: `dryRun()`, `notIn()`, `maybeSingle()` (PR supabase/supabase-swift#1114) and `signInWithWeb3()` (PR supabase/supabase-swift#1138) - **supabase-kt**: `dryRun()`, `notIn()`, `maybeSingle()` (PR supabase-community/supabase-kt#1365) ## Documentation updates - `apps/docs/spec/supabase_swift_v2.yml` β€” added `notin`, `dry-run`, `maybe-single` filter/modifier entries and a `sign-in-with-web3` auth entry (Web3/Ethereum/Solana sign-in was already documented for JS and Dart, missing for Swift) - `apps/docs/spec/supabase_kt_v3.yml` β€” added `notin`, `maybe-single`, `dry-run` entries - `apps/docs/spec/common-client-libs-sections.json` β€” registered nav entries for the two brand-new cross-SDK ids (`notin`, `dry-run`); `sign-in-with-web3` was already registered ## Explicitly out of scope - **Kotlin `custom_claims_allowlist`** (added to `CustomOAuthProvider`/`CustomProviderBuilder` in supabase-kt) β€” skipped. The Kotlin spec has no admin custom-OAuth-provider section documented at all yet (create/list/get/update/delete), so adding just this one field would require authoring a whole new, currently-undocumented admin API section from scratch β€” too large/risky to guess correctly in this pass. Flagging for a follow-up. - Dart's recently-shipped storage features (vector buckets, analytics/Iceberg buckets, `purgeCache`, `downloadStream`, `listPaginated`) were checked and are already fully documented in `supabase_dart_v2.yml`. - Swift/Kotlin lacking Storage vector-bucket/analytics-bucket docs β€” out of scope, those SDKs didn't ship that feature in this commit range (Dart-only so far). ## Test plan - [x] `python3 -c "import yaml; yaml.safe_load(open(...))"` β€” both edited YAML specs parse cleanly - [x] `python3 -c "import json; json.load(open(...))"` β€” nav JSON parses cleanly - [ ] Visual check of the rendered reference pages for `notIn`/`dryRun`/`maybeSingle`/`signInWithWeb3` on Swift and Kotlin reference docs --- πŸ€– Generated with [Claude Code](https://claude.com/claude-code) ## Summary by CodeRabbit * **Documentation** * Added documentation for `notIn()` query filtering across supported Kotlin and Swift query operations. * Documented `maybeSingle()` for safely handling zero-or-one query results without raising a single-row error. * Added guidance for `dryRun()` mutations, including rollback behavior and returned results. * Added Swift authentication documentation for Web3 sign-in with Ethereum and Solana credentials. Co-authored-by: Claude Sonnet 5 --- .../spec/common-client-libs-sections.json | 16 +++ apps/docs/spec/supabase_kt_v3.yml | 91 +++++++++++++++++ apps/docs/spec/supabase_swift_v2.yml | 99 +++++++++++++++++++ 3 files changed, 206 insertions(+) diff --git a/apps/docs/spec/common-client-libs-sections.json b/apps/docs/spec/common-client-libs-sections.json index b6574b10733..4e06787fd8b 100644 --- a/apps/docs/spec/common-client-libs-sections.json +++ b/apps/docs/spec/common-client-libs-sections.json @@ -189,6 +189,14 @@ "parent": "filters", "type": "function" }, + { + "id": "notin", + "title": "Column is not in an array", + "slug": "notin", + "product": "database", + "parent": "filters", + "type": "function" + }, { "id": "contains", "title": "Column contains every element in a value", @@ -399,6 +407,14 @@ "product": "database", "parent": "modifiers", "type": "function" + }, + { + "id": "dry-run", + "title": "Test a mutation without committing it", + "slug": "dryrun", + "product": "database", + "parent": "modifiers", + "type": "function" } ] } diff --git a/apps/docs/spec/supabase_kt_v3.yml b/apps/docs/spec/supabase_kt_v3.yml index 90c7ab5cf1a..be7d643535d 100644 --- a/apps/docs/spec/supabase_kt_v3.yml +++ b/apps/docs/spec/supabase_kt_v3.yml @@ -1633,6 +1633,34 @@ functions: } ``` + - id: notin + title: notIn() + description: | + Finds all rows whose value on the stated `column` is not found on the specified `values`. The negation of `in_()`. + params: + - name: column + isOptional: false + type: String + description: The column to filter on. + - name: values + isOptional: false + type: List + description: The values to exclude. + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```kotlin + supabase.from("cities").select(columns = Columns.list("name")) { + filter { + City::name notIn listOf("Hobbiton", "Edoras") + //or + notIn("name", listOf("Hobbiton", "Edoras")) + } + } + ``` + - id: contains title: contains() description: | @@ -2776,6 +2804,69 @@ functions: hideCodeBlock: true isSpotlight: true + - id: maybe-single + title: maybeSingle() + $ref: '@supabase/postgrest-js.PostgrestTransformBuilder.maybeSingle' + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```kotlin + val result = supabase.from("characters").select(Columns.list("name")) { + limit(1) + maybeSingle() + } + ``` + data: + sql: | + ```sql + create table + characters (id int8 primary key, name text); + + insert into + characters (id, name) + values + (1, 'Luke'), + (2, 'Leia'), + (3, 'Han'); + ``` + response: | + ```json + { + "data": { + "name": "Luke" + }, + "status": 200, + "statusText": "OK" + } + ``` + hideCodeBlock: true + + - id: dry-run + title: dryRun() + description: | + Executes the mutation but rolls back the transaction instead of committing it, so no changes are persisted. + notes: | + - The mutation runs and its result (including side effects such as triggers) is returned in the response, but the transaction is rolled back afterward. + - Useful for testing mutations without touching real data. + - Requires PostgREST's `db-tx-end` setting to allow client-controlled transaction rollback. + examples: + - id: with-update + name: With `update()` + isSpotlight: true + code: | + ```kotlin + val toUpdate = City(name = "Mordor") + supabase.from("cities").update(toUpdate) { + filter { + City::name eq "Gondor" + } + dryRun() + } + // Row is not actually updated in the database. + ``` + - id: csv $ref: '@supabase/postgrest-js.PostgrestTransformBuilder.csv' title: csv() diff --git a/apps/docs/spec/supabase_swift_v2.yml b/apps/docs/spec/supabase_swift_v2.yml index 3c56ac8bc68..56e8d168e36 100644 --- a/apps/docs/spec/supabase_swift_v2.yml +++ b/apps/docs/spec/supabase_swift_v2.yml @@ -699,6 +699,44 @@ functions: // Open the URL using your preferred method to complete sign-in process. UIApplication.shared.open(url) ``` + - id: sign-in-with-web3 + title: 'signInWithWeb3()' + description: | + Signs in a user via a signed Sign in with Ethereum (EIP-4361) or Sign in with Solana message. + notes: | + - Supports Ethereum (Sign-In with Ethereum) and Solana (Sign-In with Solana), both of which derive from the [EIP-4361](https://eips.ethereum.org/EIPS/eip-4361) standard. + - Your app is responsible for building the message and obtaining the signature from the user's wallet (e.g. via a WalletConnect session or native wallet SDK) before calling this method. + - For `Web3Chain.ethereum` the signature is a `0x`-prefixed hex encoded string. For `Web3Chain.solana` it is a base64 encoded string. + examples: + - id: sign-in-with-ethereum + name: Sign in with an Ethereum wallet + isSpotlight: true + description: | + Sign the EIP-4361 message with the user's Ethereum wallet, then pass the message and its hex encoded signature. + code: | + ```swift + let session = try await supabase.auth.signInWithWeb3( + credentials: Web3Credentials( + chain: .ethereum, + message: siweMessage, + signature: signatureHex + ) + ) + ``` + - id: sign-in-with-solana + name: Sign in with a Solana wallet + description: | + Sign the message with the user's Solana wallet, then pass the message and its base64 encoded signature. + code: | + ```swift + let session = try await supabase.auth.signInWithWeb3( + credentials: Web3Credentials( + chain: .solana, + message: siwsMessage, + signature: signatureBase64 + ) + ) + ``` - id: sign-in-with-passkey title: 'signInWithPasskey()' notes: | @@ -3731,6 +3769,21 @@ functions: .in("name", values: ["Rio de Janeiro", "San Francisco"]) ``` + - id: notin + title: notIn() + description: | + Match only rows where `column` is not included in the `values` array. The negation of `in()`. + examples: + - id: with-select + name: With `select()` + code: | + ```swift + try await supabase + .from("cities") + .select("name, country_id") + .notIn("name", values: ["Rio de Janeiro", "San Francisco"]) + ``` + - id: contains title: contains() description: | @@ -4295,6 +4348,30 @@ functions: description: | Ensure that the RPC call affects at most 10 rows. Useful for limiting the impact of functions. + - id: dry-run + title: dryRun() + description: | + Executes the mutation but rolls back the transaction instead of committing it, so no changes are persisted. + notes: | + - The mutation runs and its result (including side effects such as triggers) is returned in the response, but the transaction is rolled back afterward. + - Useful for testing mutations without touching real data. + - Requires PostgREST's `db-tx-end` setting to allow client-controlled transaction rollback. + examples: + - id: with-update + name: With `update()` + isSpotlight: true + code: | + ```swift + try await supabase + .from("todos") + .update(["done": true]) + .eq("id", value: 1) + .select() + .dryRun() + .execute() + // Row is not actually updated in the database. + ``` + - id: single title: single() description: | @@ -4336,6 +4413,28 @@ functions: ``` hideCodeBlock: true isSpotlight: true + + - id: maybe-single + title: maybeSingle() + description: | + Like `single()`, this sets the `application/vnd.pgrst.object+json` accept header so the server enforces a single result. Unlike `single()`, when the query does not match exactly one row the resulting `PGRST116` error is not thrown β€” the response `value` is `nil` instead. + notes: | + - PostgREST returns `PGRST116` both when zero rows match and when more than one row matches. `maybeSingle()` returns `nil` for either case; use `single()` for the strict variant that always throws when the query does not match exactly one row. + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```swift + let todo: Todo? = try await supabase + .from("todos") + .select() + .eq("id", value: 42) + .maybeSingle() + .execute() + .value + ``` + - id: csv title: csv() examples: From b9053794a0df227f58710b3179813d48da2f81b4 Mon Sep 17 00:00:00 2001 From: Charis <26616127+charislam@users.noreply.github.com> Date: Tue, 4 Aug 2026 14:07:08 -0400 Subject: [PATCH 16/83] fix(studio): add tooltip explaining why Prettify SQL is disabled (#48712) ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Bug fix ## What is the current behavior? In the SQL Editor, the Prettify SQL action (both the "More actions" dropdown menu item and the toolbar button) is disabled for logs snippets, but gives no indication why. ## What is the new behavior? The disabled Prettify menu item now uses `DropdownMenuItemTooltip` and the disabled Prettify toolbar button uses `ButtonTooltip`, both showing "Can only prettify SQL queries" while disabled. Addresses review feedback from #48452 (Linear FE-4038). ## Additional context Resolves FE-4038 ## Summary by CodeRabbit * **Improvements** * Updated SQL editor tooltips with clearer, consistent messaging. * Log-source users now see an explanation when SQL formatting is unavailable. * Regular users continue to see the SQL prettify keyboard shortcut. --- .../SQLEditor/UtilityPanel/UtilityActions.tsx | 56 ++++++++++++------- 1 file changed, 36 insertions(+), 20 deletions(-) diff --git a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/UtilityActions.tsx b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/UtilityActions.tsx index a5c69be3d40..1803004efee 100644 --- a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/UtilityActions.tsx +++ b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/UtilityActions.tsx @@ -27,7 +27,9 @@ import { SqlSaveButton } from './SaveButton' import SavingIndicator from './SavingIndicator' import { useIsSqlEditorManualSaveEnabled } from '@/components/interfaces/App/FeaturePreview/FeaturePreviewContext' import { RoleImpersonationPopover } from '@/components/interfaces/RoleImpersonationSelector/RoleImpersonationPopover' +import { ButtonTooltip } from '@/components/ui/ButtonTooltip' import { DatabaseSelector } from '@/components/ui/DatabaseSelector' +import { DropdownMenuItemTooltip } from '@/components/ui/DropdownMenuItemTooltip' import { useLocalStorageQuery } from '@/hooks/misc/useLocalStorage' import { IS_PLATFORM } from '@/lib/constants' import { hotkeyToKeys } from '@/state/shortcuts/formatShortcut' @@ -153,13 +155,23 @@ export const UtilityActions = ({ )} - + Prettify SQL {formatKeys && } - + @@ -215,24 +227,28 @@ export const UtilityActions = ({ )} - - -
From a8a0a66853dc3cfc6657bf05ba795282c6fc82f5 Mon Sep 17 00:00:00 2001 From: "Andrey A." <56412611+aantti@users.noreply.github.com> Date: Tue, 4 Aug 2026 21:56:44 +0200 Subject: [PATCH 17/83] fix(self-hosted): avoid overwriting update.sh (#48690) --- docker/tests/test-update.sh | 34 ++++++++++++++++++++++++++++++ docker/update.sh | 42 ++++++++++++++++++++++++++++++------- 2 files changed, 68 insertions(+), 8 deletions(-) diff --git a/docker/tests/test-update.sh b/docker/tests/test-update.sh index 1165390ee74..c1bc0e770c1 100755 --- a/docker/tests/test-update.sh +++ b/docker/tests/test-update.sh @@ -339,6 +339,40 @@ assert_file_missing_pattern ".env" "NEW_KEY" "malformed manife assert_path_absent "backups" "malformed manifest: no backup taken" assert_file_contains ".supabase-version" "ref=self-hosted/v0.9.0" "malformed manifest: stamp not advanced" +echo "" +echo "=== update.sh: never overwrites the running script; stages the target's copy as .dist ===" + +# A dedicated upstream whose docker/ ships an update.sh that DIFFERS from the one +# we run, so the merge must divert it to update.sh.dist rather than rewrite the +# live script mid-run (which would corrupt this process). +SELFSRC="$WORK/selfsrc" +mkdir -p "$SELFSRC/docker" +cd "$SELFSRC" +git init -q +git config user.email t@t.t +git config user.name t +printf 'services:\n db:\n image: x\n' > docker/docker-compose.yml +printf 'KEEP=1\n' > docker/.env.example +cp "$DOCKER_DIR/.gitignore" docker/.gitignore +printf '#!/bin/sh\necho THIS-IS-THE-NEW-UPDATE-SH\n' > docker/update.sh +git add -A && git commit -qm self && git tag self-hosted/v2.0.0 + +SELFDEP="$WORK/selfdep" +mkdir -p "$SELFDEP" +printf 'services:\n db:\n image: x\n' > "$SELFDEP/docker-compose.yml" +printf 'KEEP=1\n' > "$SELFDEP/.env" +cp "$UPDATE_SH" "$SELFDEP/update.sh" # the running script = the real update.sh +printf 'ref=self-hosted/v2.0.0\n' > "$SELFDEP/.supabase-version" +cd "$SELFDEP" +rc=0 +SUPABASE_REPO_URL="$SELFSRC" sh ./update.sh --to self-hosted/v2.0.0 --yes > "$WORK/self.log" 2>&1 || rc=$? +if [ "$rc" = "0" ]; then ok "self-update run exits 0"; else bad "expected exit 0, got $rc"; fi +if cmp -s ./update.sh "$UPDATE_SH"; then ok "running update.sh left byte-identical"; else bad "running update.sh was modified in place"; fi +assert_no_line "./update.sh" '^(<<<<<<<|=======|>>>>>>>)' "no conflict markers written into the running update.sh" +assert_path_exists "$SELFDEP/update.sh.dist" "target's update.sh staged as update.sh.dist" +assert_file_contains "$SELFDEP/update.sh.dist" "THIS-IS-THE-NEW-UPDATE-SH" "update.sh.dist holds the target's version" +assert_file_contains "$WORK/self.log" "update.sh.dist" "summary points the user at update.sh.dist" + # --- summary ----------------------------------------------------------------- echo "" diff --git a/docker/update.sh b/docker/update.sh index b23151d34c2..cf3313b639f 100755 --- a/docker/update.sh +++ b/docker/update.sh @@ -70,6 +70,7 @@ cd "$(dirname "$0")" REPO_URL="${SUPABASE_REPO_URL:-https://github.com/supabase/supabase}" STAMP_FILE=".supabase-version" +SELF_NAME=$(basename "$0") DRY_RUN=0 ASSUME_YES=0 TO_REF="" @@ -177,7 +178,7 @@ fetch_snapshot() { _dest="$2" _work=$(mktemp -d "$TMP_ROOT/fetch.XXXXXX") if _sparse_init "$_work" \ - && git -C "$_work" fetch --depth=1 -q origin "$_ref" 2>/dev/null \ + && git -C "$_work" fetch --depth=1 --filter=blob:none -q origin "$_ref" 2>/dev/null \ && git -C "$_work" checkout -q FETCH_HEAD 2>/dev/null \ && [ -d "$_work/docker" ]; then mkdir -p "$_dest" @@ -311,9 +312,8 @@ $(grep -E '^[A-Za-z_][A-Za-z0-9_]*=' "$TARGET_DIR/.env.example" | cut -d= -f1) EOF fi echo "" - warn "This is NOT the full update. To see what would actually change (updated files," - warn "conflicts, breaking-change gate), record a base version - see the guidance above -" - warn "then re-run. Nothing was written." + warn "This is NOT the full update. To see what would actually change, record a base version." + warn "See the guidance above and re-run the script. Nothing was written." } # --- breaking-change gate (manifest-driven, before any writes) --------------- @@ -333,9 +333,9 @@ build_gate_report() { fi if [ -z "$BASE_VER" ] || [ -z "$TARGET_VER" ]; then - warn "Base or target is not a self-hosted/vX.Y.Z tag; cannot compute an exact" - warn "update window. Showing all applicable manual-action releases - review" - warn "which ones apply to your deployment." + warn "Base or target is not a self-hosted/vX.Y.Z tag; cannot compute an exact update window." + warn "Showing all applicable manual-action releases." + warn "Review which ones apply to your deployment." fi for k in $(jq -r 'keys[]' "$_manifest" 2>/dev/null); do @@ -469,6 +469,19 @@ merge_one_file() { fi } +# The running script is a vendor file too, but overwriting it in place would +# corrupt this process (the shell reads $0 as it runs). Never write it directly: +# if the target ships a different version, stage it as .dist to review. +stage_self_update() { + _t="$TARGET_DIR/$SELF_NAME" + if [ ! -f "$_t" ] || cmp -s "$SELF_NAME" "$_t"; then + record "unchanged" "$SELF_NAME" + return 0 + fi + [ "$DRY_RUN" = "1" ] || cp -f "$_t" "$SELF_NAME.dist" + record "self-staged" "$SELF_NAME" +} + merge_vendor_files() { _empty="$TMP_ROOT/empty" : > "$_empty" @@ -477,6 +490,10 @@ merge_vendor_files() { while IFS= read -r f; do [ -n "$f" ] || continue is_excluded "$f" && continue + if [ "$f" = "$SELF_NAME" ]; then + stage_self_update + continue + fi merge_one_file "$f" "$_empty" done < Date: Tue, 4 Aug 2026 16:01:14 -0400 Subject: [PATCH 18/83] fix(studio): use table + card component in log retention upgrade prompt (#48713) ## Summary - Refactor the SQL Editor / Logs "Log retention" upgrade-prompt dialog to use the design system's `Card` + `Table` components instead of a custom flexbox-div table, matching the pattern in `apps/design-system/registry/default/example/table-demo.tsx` - No behavior or data change Fixes FE-4034 Non-blocking review nit from #48452 (comment: https://github.com/supabase/supabase/pull/48452#issuecomment-5128918096) ## Test plan - [x] `pnpm --filter studio typecheck` passes - [x] `pnpm --filter studio run lint:ratchet` passes (no new warnings) - [x] Prettier check passes ## Summary by CodeRabbit * **Style** * Updated the upgrade prompt with a more consistent card and table layout. * Preserved existing plan names and log retention details. --- .../Settings/Logs/UpgradePrompt.tsx | 59 +++++++++++-------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/apps/studio/components/interfaces/Settings/Logs/UpgradePrompt.tsx b/apps/studio/components/interfaces/Settings/Logs/UpgradePrompt.tsx index fededa3cd64..7d717067421 100644 --- a/apps/studio/components/interfaces/Settings/Logs/UpgradePrompt.tsx +++ b/apps/studio/components/interfaces/Settings/Logs/UpgradePrompt.tsx @@ -1,6 +1,7 @@ import Link from 'next/link' import { Button, + Card, Dialog, DialogContent, DialogFooter, @@ -8,6 +9,12 @@ import { DialogSection, DialogSectionSeparator, DialogTitle, + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, } from 'ui' import { TIER_QUERY_LIMITS } from './Logs.constants' @@ -47,30 +54,34 @@ const UpgradePrompt: React.FC = ({

{description}

-
-
-

Plan

-

Retention duration

-
-
-
-

Free

-

{TIER_QUERY_LIMITS.FREE.text}

-
-
-

Pro

-

{TIER_QUERY_LIMITS.PRO.text}

-
-
-

Team

-

{TIER_QUERY_LIMITS.TEAM.text}

-
-
-

Enterprise

-

{TIER_QUERY_LIMITS.ENTERPRISE.text}

-
-
-
+ +
+ + + Plan + Retention duration + + + + + Free + {TIER_QUERY_LIMITS.FREE.text} + + + Pro + {TIER_QUERY_LIMITS.PRO.text} + + + Team + {TIER_QUERY_LIMITS.TEAM.text} + + + Enterprise + {TIER_QUERY_LIMITS.ENTERPRISE.text} + + +
+
From 549db119c44c25167461812041ba198bde2b31a4 Mon Sep 17 00:00:00 2001 From: "Andrey A." <56412611+aantti@users.noreply.github.com> Date: Tue, 4 Aug 2026 22:06:15 +0200 Subject: [PATCH 19/83] chore(self-hosted): update 2026-08-04 - 0.7.2 (#48707) --- docker/CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docker/CHANGELOG.md b/docker/CHANGELOG.md index 96081665b16..b40a5f0299c 100644 --- a/docker/CHANGELOG.md +++ b/docker/CHANGELOG.md @@ -15,6 +15,14 @@ See per-service updates below for details. Only the most important changes relev --- +## [0.7.2](https://github.com/supabase/supabase/releases/tag/self-hosted/v0.7.2) - 2026-08-04 + +### Utils and tests +- Fixed `update.sh` overwriting itself during an update; the new `update.sh` is now staged as `update.sh.new` for review instead of replacing the running script - PR [#48690](https://github.com/supabase/supabase/pull/48690) +- `update.sh` now fetches only the `docker/` directory (partial clone), making updates substantially faster and lighter - PR [#48690](https://github.com/supabase/supabase/pull/48690) + +--- + ## [0.7.1](https://github.com/supabase/supabase/releases/tag/self-hosted/v0.7.1) - 2026-08-03 ### Configuration From 216574678450109332062ff6056b2d6094680fff Mon Sep 17 00:00:00 2001 From: Charis <26616127+charislam@users.noreply.github.com> Date: Tue, 4 Aug 2026 16:23:12 -0400 Subject: [PATCH 20/83] fix(studio): keep SQL editor source menu open when switching sources (#48715) ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Bug fix ## What is the current behavior? Selecting Database/Logs in the SQL Editor's query-source dropdown closes the menu (Radix's default select behavior), so switching to Logs gives no visible indication that a Time range control just became available until the dropdown is reopened. ## What is the new behavior? Selecting a source keeps the dropdown open, so the newly-available source-specific controls (e.g. Time range for Logs) are immediately visible. ## Additional context Fixes FE-4036 ## Summary by CodeRabbit * **Bug Fixes** * Improved source switching in the SQL editor so the selection menu remains open while changing between database and logs sources. * Ensured source-specific controls update correctly after switching. * **Tests** * Added coverage for source selection, menu behavior, and source-specific control updates. --- .../QuerySourceMenu/QuerySourceMenu.tsx | 16 ++++- .../SQLEditor/QuerySourceMenu.test.tsx | 71 +++++++++++++++++++ 2 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 apps/studio/tests/components/SQLEditor/QuerySourceMenu.test.tsx diff --git a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/QuerySourceMenu/QuerySourceMenu.tsx b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/QuerySourceMenu/QuerySourceMenu.tsx index 027ae76bd2c..9e08a904d50 100644 --- a/apps/studio/components/interfaces/SQLEditor/UtilityPanel/QuerySourceMenu/QuerySourceMenu.tsx +++ b/apps/studio/components/interfaces/SQLEditor/UtilityPanel/QuerySourceMenu/QuerySourceMenu.tsx @@ -116,7 +116,13 @@ export const QuerySourceMenu = ({ id, runSource, canCreateLogsSnippet }: QuerySo - switchSource('database')}> + { + e.preventDefault() + switchSource('database') + }} + > Database @@ -124,7 +130,13 @@ export const QuerySourceMenu = ({ id, runSource, canCreateLogsSnippet }: QuerySo {!isLogs && } {(canCreateLogsSnippet || isLogs) && ( - switchSource('logs')}> + { + e.preventDefault() + switchSource('logs') + }} + > Logs diff --git a/apps/studio/tests/components/SQLEditor/QuerySourceMenu.test.tsx b/apps/studio/tests/components/SQLEditor/QuerySourceMenu.test.tsx new file mode 100644 index 00000000000..6985f0ad822 --- /dev/null +++ b/apps/studio/tests/components/SQLEditor/QuerySourceMenu.test.tsx @@ -0,0 +1,71 @@ +import { screen } from '@testing-library/react' +import userEvent from '@testing-library/user-event' +import { mockAnimationsApi } from 'jsdom-testing-mocks' +import { describe, expect, it } from 'vitest' + +import { DEFAULT_LOG_DATE_RANGE } from '@/components/interfaces/SQLEditor/querySource' +import { QuerySourceMenu } from '@/components/interfaces/SQLEditor/UtilityPanel/QuerySourceMenu/QuerySourceMenu' +import { customRender } from '@/tests/lib/custom-render' +import { addAPIMock } from '@/tests/lib/msw' + +// QuerySourceMenu renders a Radix dropdown (+ nested dialog), both of which use Web Animations. +mockAnimationsApi() + +addAPIMock({ + method: 'get', + path: '/platform/projects/:ref', + response: { + id: 1, + ref: 'default', + organization_id: 1, + name: 'Test Project', + status: 'ACTIVE_HEALTHY', + cloud_provider: 'AWS', + region: 'us-east-1', + db_host: 'db.default.supabase.co', + restUrl: 'https://default.supabase.co/rest/v1/', + inserted_at: '2024-01-01T00:00:00Z', + updated_at: '2024-01-01T00:00:00Z', + subscription_id: 'sub_123', + is_branch_enabled: false, + is_physical_backups_enabled: false, + high_availability: false, + integration_source: null, + connectionString: 'postgresql://postgres@localhost:5432/postgres', + is_hibernating: false, + }, +}) + +describe('QuerySourceMenu', () => { + it('keeps the dropdown open across a source switch, so the new source’s controls appear without reopening it', async () => { + // Selecting a source doesn't mutate `runSource` in place β€” it navigates to a + // fresh tab, and the parent re-renders this component with the new source once + // the route lands. Rerendering with the switched-to prop below stands in for + // that navigation, so the test observes exactly what the user does: does the + // dropdown have to be reopened to see the newly-available controls? + const { rerender } = customRender( + + ) + + await userEvent.click(screen.getByRole('button', { name: 'Query source: Database' })) + + expect(await screen.findByText('Run as')).toBeInTheDocument() + expect(screen.queryByText('Time range')).not.toBeInTheDocument() + + await userEvent.click(screen.getByText('Logs')) + + rerender( + + ) + + // The dropdown never closed, so the logs-only "Time range" control is visible + // immediately, and the database-only controls are gone β€” without the user + // having to reopen the menu. + expect(screen.getByText('Time range')).toBeInTheDocument() + expect(screen.queryByText('Run as')).not.toBeInTheDocument() + }) +}) From 89a5d03817b717d216645a735bbf986643e2fa76 Mon Sep 17 00:00:00 2001 From: "claude[bot]" <209825114+claude[bot]@users.noreply.github.com> Date: Tue, 4 Aug 2026 22:09:37 +0100 Subject: [PATCH 21/83] docs: add eu-central-2 to Edge Functions regional invocation page (#48721) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit _Requested by **Kalleby Santos** Β· [Slack thread](https://supabase.slack.com/archives/C02KMRX22NR/p1785871243937099?thread_ts=1785871243.937099&cid=C02KMRX22NR)_ ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Docs update β€” one-line content fix. ## What is the current behavior? The [Regional Invocations](https://supabase.com/docs/guides/functions/regional-invocation) page's "Available regions" section lists every Edge Functions region **except `eu-central-2`** (AWS Europe, Zurich). The region has been live in production for a while, but it was never added to the docs. A user reading this page to pick a region for `x-region` / `FunctionRegion` had no way to know Zurich was an option β€” the page reads as an exhaustive list, so the omission actively implies the region doesn't exist. Reported by Kalleby Santos (Edge Functions team). Linear: [FUNC-761 β€” Add eu-central-2 to regional invocation docs page](https://linear.app/supabase/issue/FUNC-761/add-eu-central-2-to-regional-invocation-docs-page) ## What is the new behavior? **Before:** the Europe group listed `eu-central-1`, `eu-west-1`, `eu-west-2`, `eu-west-3`. **After:** `eu-central-2` (Zurich) is listed alongside the others, so the page reflects the regions Edge Functions actually serves. ### How One line added to `apps/docs/content/guides/functions/regional-invocation.mdx`, in the **Europe** group directly after `eu-central-1`, following the list's existing sort-by-region-code order and the surrounding `` `code` (Short location) `` label style: ```diff **Europe:** - `eu-central-1` (Frankfurt) +- `eu-central-2` (Zurich) - `eu-west-1` (Ireland) - `eu-west-2` (London) - `eu-west-3` (Paris) ``` No other files changed. This page's region list is hand-maintained in the MDX and is deliberately narrower than the project-creation region list in `packages/shared-data/regions.ts` (which also includes `us-east-2` and `eu-north-1`), so no shared constant needed updating and no other product's region list was touched. ## Additional context **Verification that `eu-central-2` is a real Edge Functions invocation region** β€” confirmed in three independent places: 1. `supabase/platform` β†’ `pulumi/edge-runtime/Pulumi.prod.yaml:533` β€” `region: eu-central-2`, with `enabled: true` at `:531`. A fully provisioned prod region (360–540 always-on tasks), not a placeholder. Branch `develop`, HEAD `1f44167768f951c0c794313006bc2c9f9758c344`. 2. `supabase/platform` β†’ `pulumi/edge-runtime-next/stack-config/Pulumi.prod.aws.euc2.yaml:6` β€” `aws:region: eu-central-2` under the `Edge-Functions/K8s-Prod` environment, tagged `product: functions`. 3. `supabase/api-gateway` β†’ `customer-router/wrangler.toml` β€” `eu-central-2` is present in the `EDGE_FUNCTIONS_REGIONAL_ORIGINS` map (`eu-central-2 = "https://eu-central-2.edge-runtime.supabase.green"`). This is the table that resolves the `x-region` header, so regional invocation into Zurich is genuinely routable β€” not just deployed. **For a reviewer to confirm separately (intentionally not in this diff):** production infra has 16 enabled Edge Functions regions, so `us-east-2` (Ohio, `pulumi/edge-runtime/Pulumi.prod.yaml:507`, `enabled: true`) is *also* missing from this page. It's excluded here because we don't yet know whether that omission is deliberate; it's being confirmed with the team and can be a follow-up. πŸ€– Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_017UJhSvVpPfYNaHZ8Y1x3sy --- _Generated by [Claude Code](https://claude.ai/code/session_017UJhSvVpPfYNaHZ8Y1x3sy)_ Co-authored-by: Claude --- apps/docs/content/guides/functions/regional-invocation.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/docs/content/guides/functions/regional-invocation.mdx b/apps/docs/content/guides/functions/regional-invocation.mdx index dd59ecb023b..79f1128dbe1 100644 --- a/apps/docs/content/guides/functions/regional-invocation.mdx +++ b/apps/docs/content/guides/functions/regional-invocation.mdx @@ -37,6 +37,7 @@ The following regions are supported: **Europe:** - `eu-central-1` (Frankfurt) +- `eu-central-2` (Zurich) - `eu-west-1` (Ireland) - `eu-west-2` (London) - `eu-west-3` (Paris) From 9b3e0a9060854e13dba6b123f3c67af1ae618547 Mon Sep 17 00:00:00 2001 From: Danny White <3104761+dnywh@users.noreply.github.com> Date: Wed, 5 Aug 2026 16:06:58 +1000 Subject: [PATCH 22/83] show Vercel connection errors inline (#48473) ## What kind of change does this PR introduce? Bug fix. ## What is the current behavior? Vercel install and project-link failures use transient toasts. ## What is the new behavior? Failures remain visible below the relevant action and clear when the user retries or changes a selection. The Vercel mutation hooks expose errors without choosing their presentation. Interstitial callers render them inline, while existing non-interstitial callers explicitly retain their toasts. | Before | After | | --- | --- | | Install Vercel Integration
Supabase | Install Vercel Integration
Supabase | ## To test 1. Switch to `dnywh/inline-vercel-errors` (this branch). 2. Open `apps/studio/pages/integrations/vercel/install.tsx`. 3. Find the `actionError` assignment immediately below `useVercelIntegrationCreateMutation` and replace the whole assignment with: ```tsx const actionError = 'Creating Vercel integration failed: Test error' ``` 4. With local Studio running and while signed in, open `http://localhost:8082/integrations/vercel/install?code=test&configurationId=test&source=marketplace` 5. Confirm the error remains visible below **Install integration**. No Vercel installation or real authorisation code is required. 6. Revert the temporary edit. ## Summary by CodeRabbit ## Bug Fixes * Improved error handling across Vercel project connection and installation flows. * Validation, duplicate-connection, and connection failures now appear inline in the relevant setup steps. * Errors clear automatically when the selected project or organization changes. * Notifications remain available in supported flows, including new project creation and side-panel setup. --- .../VercelGithub/ProjectLinker.tsx | 58 +++++++++++------ .../VercelGithub/VercelGithub.types.ts | 2 + .../SidePanelVercelProjectLinker.tsx | 4 ++ ...ions-vercel-connections-create-mutation.ts | 7 +-- .../vercel-integration-create-mutation.ts | 7 +-- .../[slug]/deploy-button/new-project.tsx | 7 ++- .../[slug]/marketplace/choose-project.tsx | 39 +++++++----- .../pages/integrations/vercel/install.tsx | 63 ++++++++++++------- 8 files changed, 117 insertions(+), 70 deletions(-) diff --git a/apps/studio/components/interfaces/Integrations/VercelGithub/ProjectLinker.tsx b/apps/studio/components/interfaces/Integrations/VercelGithub/ProjectLinker.tsx index 2a491957170..8a4e66b84a5 100644 --- a/apps/studio/components/interfaces/Integrations/VercelGithub/ProjectLinker.tsx +++ b/apps/studio/components/interfaces/Integrations/VercelGithub/ProjectLinker.tsx @@ -8,6 +8,7 @@ import { SupabaseProjectSelector, } from './ProjectLinkerComponents' import { Project, ProjectLinkerProps } from './VercelGithub.types' +import { InterstitialActionError } from '@/components/layouts/InterstitialLayout' import ShimmerLine from '@/components/ui/ShimmerLine' import { useOrgProjectsInfiniteQuery } from '@/data/projects/org-projects-infinite-query' import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' @@ -31,6 +32,8 @@ export const ProjectLinker = ({ defaultForeignProjectId, mode, variant = 'default', + actionError, + onSelectionChange, }: ProjectLinkerProps) => { const [openProjectsDropdown, setOpenProjectsDropdown] = useState(false) const [openForeignProjectsComboBox, setOpenForeignProjectsComboBox] = useState(false) @@ -38,6 +41,7 @@ export const ProjectLinker = ({ defaultForeignProjectId ) const [selectedSupabaseProject, setSelectedSupabaseProject] = useState() + const [validationError, setValidationError] = useState() const { data: selectedOrganization } = useSelectedOrganizationQuery() const { data: orgProjects, isPending: loadingSupabaseProjects } = useOrgProjectsInfiniteQuery({ @@ -60,11 +64,15 @@ export const ProjectLinker = ({ const alreadyInstalled = flatInstalledConnectionsIds.has(foreignProjectId ?? '') if (alreadyInstalled) { - return toast.error( - `Unable to connect to ${selectedForeignProject.name}: Selected repository already has an installed connection to a project` - ) + const message = `Unable to connect to ${selectedForeignProject.name}: Selected repository already has an installed connection to a project` + if (variant === 'interstitial') { + setValidationError(message) + return + } + return toast.error(message) } + setValidationError(undefined) _onCreateConnections({ organizationIntegrationId: organizationIntegrationId!, connection: { @@ -95,6 +103,17 @@ export const ProjectLinker = ({ isLoading || !selectedSupabaseProject || !selectedForeignProject + const displayedActionError = actionError ?? validationError + const setForeignProjectSelection: typeof setForeignProjectId = (value) => { + setForeignProjectId(value) + setValidationError(undefined) + onSelectionChange?.() + } + const setSupabaseProjectSelection: typeof setSelectedSupabaseProject = (value) => { + setSelectedSupabaseProject(value) + setValidationError(undefined) + onSelectionChange?.() + } useEffect(() => { if (defaultSupabaseProject !== undefined && selectedSupabaseProject === undefined) @@ -134,7 +153,7 @@ export const ProjectLinker = ({ selectedSupabaseProject={selectedSupabaseProject} loadingSupabaseProjects={loadingSupabaseProjects} setOpen={setOpenProjectsDropdown} - setSelectedSupabaseProject={setSelectedSupabaseProject} + setSelectedSupabaseProject={setSupabaseProjectSelection} /> @@ -151,7 +170,7 @@ export const ProjectLinker = ({ loadingForeignProjects={loadingForeignProjects} foreignProjects={foreignProjects} integrationIcon={integrationIcon} - setForeignProjectId={setForeignProjectId} + setForeignProjectId={setForeignProjectSelection} onOpenChange={setOpenForeignProjectsComboBox} getForeignProjectIcon={getForeignProjectIcon} /> @@ -159,17 +178,20 @@ export const ProjectLinker = ({ )} - +
+ + +
) } @@ -216,7 +238,7 @@ export const ProjectLinker = ({ selectedSupabaseProject={selectedSupabaseProject} loadingSupabaseProjects={loadingSupabaseProjects} setOpen={setOpenProjectsDropdown} - setSelectedSupabaseProject={setSelectedSupabaseProject} + setSelectedSupabaseProject={setSupabaseProjectSelection} /> @@ -236,7 +258,7 @@ export const ProjectLinker = ({ loadingForeignProjects={loadingForeignProjects} foreignProjects={foreignProjects} integrationIcon={integrationIcon} - setForeignProjectId={setForeignProjectId} + setForeignProjectId={setForeignProjectSelection} onOpenChange={setOpenForeignProjectsComboBox} getForeignProjectIcon={getForeignProjectIcon} /> diff --git a/apps/studio/components/interfaces/Integrations/VercelGithub/VercelGithub.types.ts b/apps/studio/components/interfaces/Integrations/VercelGithub/VercelGithub.types.ts index aa745b4d43b..ced750b9887 100644 --- a/apps/studio/components/interfaces/Integrations/VercelGithub/VercelGithub.types.ts +++ b/apps/studio/components/interfaces/Integrations/VercelGithub/VercelGithub.types.ts @@ -33,4 +33,6 @@ export interface ProjectLinkerProps { defaultForeignProjectId?: string mode: 'Vercel' | 'GitHub' variant?: 'default' | 'interstitial' + actionError?: string + onSelectionChange?: () => void } diff --git a/apps/studio/components/interfaces/Organization/IntegrationSettings/SidePanelVercelProjectLinker.tsx b/apps/studio/components/interfaces/Organization/IntegrationSettings/SidePanelVercelProjectLinker.tsx index 774ee1f63d7..d765fa85c95 100644 --- a/apps/studio/components/interfaces/Organization/IntegrationSettings/SidePanelVercelProjectLinker.tsx +++ b/apps/studio/components/interfaces/Organization/IntegrationSettings/SidePanelVercelProjectLinker.tsx @@ -16,6 +16,7 @@ import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' import { BASE_PATH } from '@/lib/constants' import { EMPTY_ARR } from '@/lib/void' import { useSidePanelsStateSnapshot } from '@/state/side-panels' +import type { ResponseError } from '@/types' const VERCEL_ICON = ( @@ -82,6 +83,9 @@ export const SidePanelVercelProjectLinker = () => { sidePanelStateSnapshot.setVercelConnectionsOpen(false) }, + onError(error: ResponseError) { + toast.error(`Failed to create connection: ${error.message}`) + }, }) const onCreateConnections = useCallback( diff --git a/apps/studio/data/integrations/integrations-vercel-connections-create-mutation.ts b/apps/studio/data/integrations/integrations-vercel-connections-create-mutation.ts index 51238c1daae..88cb907238a 100644 --- a/apps/studio/data/integrations/integrations-vercel-connections-create-mutation.ts +++ b/apps/studio/data/integrations/integrations-vercel-connections-create-mutation.ts @@ -1,5 +1,4 @@ import { useMutation, useQueryClient } from '@tanstack/react-query' -import { toast } from 'sonner' import type { IntegrationConnectionsCreateVariables } from './integrations.types' import { integrationKeys } from './keys' @@ -67,11 +66,7 @@ export const useIntegrationVercelConnectionsCreateMutation = ({ }, async onError(data, variables, context) { snapshot.setLoading(false) - if (onError === undefined) { - toast.error(`Failed to create connection: ${data.message}`) - } else { - onError(data, variables, context) - } + await onError?.(data, variables, context) }, ...options, }) diff --git a/apps/studio/data/integrations/vercel-integration-create-mutation.ts b/apps/studio/data/integrations/vercel-integration-create-mutation.ts index 35603b759b5..dc60e11bdc6 100644 --- a/apps/studio/data/integrations/vercel-integration-create-mutation.ts +++ b/apps/studio/data/integrations/vercel-integration-create-mutation.ts @@ -1,5 +1,4 @@ import { useMutation, useQueryClient } from '@tanstack/react-query' -import { toast } from 'sonner' import { integrationKeys } from './keys' import { handleError, post } from '@/data/fetchers' @@ -69,11 +68,7 @@ export const useVercelIntegrationCreateMutation = ({ await onSuccess?.(data, variables, context) }, async onError(data, variables, context) { - if (onError === undefined) { - toast.error(`Failed to create Vercel integration: ${data.message}`) - } else { - onError(data, variables, context) - } + await onError?.(data, variables, context) }, ...options, }) diff --git a/apps/studio/pages/integrations/vercel/[slug]/deploy-button/new-project.tsx b/apps/studio/pages/integrations/vercel/[slug]/deploy-button/new-project.tsx index 02e1c050ab2..5092e50ec87 100644 --- a/apps/studio/pages/integrations/vercel/[slug]/deploy-button/new-project.tsx +++ b/apps/studio/pages/integrations/vercel/[slug]/deploy-button/new-project.tsx @@ -1,6 +1,7 @@ import { useParams } from 'common' import Head from 'next/head' import { useEffect, useState } from 'react' +import { toast } from 'sonner' import { isVercelUrl } from '@/components/interfaces/Integrations/Vercel/VercelIntegration.utils' import { @@ -54,7 +55,11 @@ const VercelIntegration: NextPageWithLayout = () => { } ) - const { mutateAsync: createConnections } = useIntegrationVercelConnectionsCreateMutation() + const { mutateAsync: createConnections } = useIntegrationVercelConnectionsCreateMutation({ + onError(error) { + toast.error(`Failed to create connection: ${error.message}`) + }, + }) useEffect(() => { if (!isSuccess) return diff --git a/apps/studio/pages/integrations/vercel/[slug]/marketplace/choose-project.tsx b/apps/studio/pages/integrations/vercel/[slug]/marketplace/choose-project.tsx index 7febfc533af..ccd04468424 100644 --- a/apps/studio/pages/integrations/vercel/[slug]/marketplace/choose-project.tsx +++ b/apps/studio/pages/integrations/vercel/[slug]/marketplace/choose-project.tsx @@ -2,7 +2,6 @@ import { useParams } from 'common' import { keyBy } from 'lodash' import Head from 'next/head' import { useCallback, useMemo } from 'react' -import { toast } from 'sonner' import { Card, CardContent } from 'ui' import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader' @@ -101,25 +100,29 @@ const VercelChooseProjectPage: NextPageWithLayout = () => { const snapshot = useIntegrationInstallationSnapshot() - const { mutate: createConnections, isPending: isCreatingConnection } = - useIntegrationVercelConnectionsCreateMutation({ - onSuccess() { - if (next && isVercelUrl(next)) { - snapshot.setLoading(false) - window.location.href = next - } - }, - onMutate() { - snapshot.setLoading(true) - }, - onError(error) { + const { + mutate: createConnections, + isPending: isCreatingConnection, + error: createConnectionsError, + reset: resetCreateConnectionsError, + } = useIntegrationVercelConnectionsCreateMutation({ + onSuccess() { + if (next && isVercelUrl(next)) { snapshot.setLoading(false) - toast.error(`Creating connection failed: ${error.message}`) - }, - }) + window.location.href = next + } + }, + onMutate() { + snapshot.setLoading(true) + }, + }) + const actionError = createConnectionsError + ? `Creating connection failed: ${createConnectionsError.message}` + : undefined const onCreateConnections = useCallback( (vars: Parameters[0]) => { + resetCreateConnectionsError() createConnections({ ...vars, connection: { @@ -135,7 +138,7 @@ const VercelChooseProjectPage: NextPageWithLayout = () => { }, }) }, - [createConnections] + [createConnections, resetCreateConnectionsError] ) const showLoadingState = @@ -212,6 +215,8 @@ const VercelChooseProjectPage: NextPageWithLayout = () => { } loadingForeignProjects={isLoadingVercelProjectsData} mode="Vercel" + actionError={actionError} + onSelectionChange={resetCreateConnectionsError} /> )} diff --git a/apps/studio/pages/integrations/vercel/install.tsx b/apps/studio/pages/integrations/vercel/install.tsx index fb2365a9730..9236e3f3359 100644 --- a/apps/studio/pages/integrations/vercel/install.tsx +++ b/apps/studio/pages/integrations/vercel/install.tsx @@ -3,7 +3,6 @@ import Head from 'next/head' import Link from 'next/link' import { useRouter } from 'next/router' import { useEffect, useMemo, useState } from 'react' -import { toast } from 'sonner' import { Badge, Button, @@ -24,7 +23,11 @@ import { VercelIntegrationLogo, } from '@/components/interfaces/Integrations/Vercel/VercelIntegrationInterstitial' import { getHasInstalledObject } from '@/components/layouts/IntegrationsLayout/Integrations.utils' -import { InterstitialAccountRow, InterstitialLayout } from '@/components/layouts/InterstitialLayout' +import { + InterstitialAccountRow, + InterstitialActionError, + InterstitialLayout, +} from '@/components/layouts/InterstitialLayout' import { useIntegrationsQuery } from '@/data/integrations/integrations-query' import { useVercelIntegrationCreateMutation } from '@/data/integrations/vercel-integration-create-mutation' import { useOrganizationsQuery } from '@/data/organizations/organizations-query' @@ -62,6 +65,7 @@ const VercelIntegration: NextPageWithLayout = () => { const { code, configurationId, currentProjectId, externalId, next, teamId, source } = useParams() const [selectedOrg, setSelectedOrg] = useState(null) + const [validationError, setValidationError] = useState() const { username, primaryEmail, avatarUrl } = useProfileNameAndPicture() const displayName = primaryEmail ?? username ?? '' @@ -146,46 +150,56 @@ const VercelIntegration: NextPageWithLayout = () => { break } default: - toast.error( + setValidationError( `Unsupported Vercel installation source: ${source}. Please contact support if this error persists.` ) } } - const { mutate, isPending: isLoadingVercelIntegrationCreateMutation } = - useVercelIntegrationCreateMutation({ - onMutate() { - snapshot.setLoading(true) - }, - onSuccess() { - handleRouteChange() - snapshot.setLoading(false) - }, - onError(error) { - snapshot.setLoading(false) - toast.error(`Creating Vercel integration failed: ${error.message}`) - }, - }) + const { + mutate, + isPending: isLoadingVercelIntegrationCreateMutation, + error: createIntegrationError, + reset: resetCreateIntegrationError, + } = useVercelIntegrationCreateMutation({ + onMutate() { + snapshot.setLoading(true) + }, + onSuccess() { + handleRouteChange() + snapshot.setLoading(false) + }, + onError() { + snapshot.setLoading(false) + }, + }) + const actionError = + validationError ?? + (createIntegrationError + ? `Creating Vercel integration failed: ${createIntegrationError.message}` + : undefined) function onInstall() { + setValidationError(undefined) + resetCreateIntegrationError() const orgSlug = selectedOrg?.slug const isIntegrationInstalled = orgSlug ? installed[orgSlug] : false if (!orgSlug) { - return toast.error('Please select an organization') + return setValidationError('Please select an organization') } if (!code) { - return toast.error('Vercel code missing') + return setValidationError('Vercel code missing') } if (!configurationId) { - return toast.error('Vercel Configuration ID missing') + return setValidationError('Vercel configuration ID missing') } if (!source) { - return toast.error('Vercel Configuration source missing') + return setValidationError('Vercel configuration source missing') } /** @@ -271,7 +285,11 @@ const VercelIntegration: NextPageWithLayout = () => { selectedOrg={selectedOrg} disabled={noOrganizations || dataLoading} installed={installed} - onSelectedOrgChange={setSelectedOrg} + onSelectedOrgChange={(organization) => { + setSelectedOrg(organization) + setValidationError(undefined) + resetCreateIntegrationError() + }} /> {missingParams.length > 0 && ( @@ -311,6 +329,7 @@ const VercelIntegration: NextPageWithLayout = () => { > {selectedOrg && installed[selectedOrg.slug] ? 'Continue' : 'Install integration'} + )} From 3c811b9c296f60bdbb93b5f59f472a457253dc61 Mon Sep 17 00:00:00 2001 From: Danny White <3104761+dnywh@users.noreply.github.com> Date: Wed, 5 Aug 2026 17:15:20 +1000 Subject: [PATCH 23/83] fix(studio): extend SupportForm project waitFor timeout (#48211) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What kind of change does this PR introduce? Test flake fix. ## What is the current behavior? `SupportFormPage` β†’ β€œsubmits support request with attachments…” can fail under CI load: - expected project selector text `Project 1` - received `No specific project` Org is applied first; the project is filled asynchronously via `onInitialLoad` after org projects fetch. That wait still used the default ~1s `waitFor`, while every sibling Project 1 assertion already uses `{ timeout: 5_000 }` (see #45852). ## What is the new behavior? - Attachments test waits up to 5s for Organization 1 + Project 1 - Same timeout for the org-switch β†’ Project 2 waiter (same pattern) No production code changes. ## Summary by CodeRabbit * **Tests** * Improved support form test reliability by allowing additional time for organization and project selectors to load during asynchronous interactions. --- .../__tests__/SupportFormPage.test.tsx | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/apps/studio/components/interfaces/Support/__tests__/SupportFormPage.test.tsx b/apps/studio/components/interfaces/Support/__tests__/SupportFormPage.test.tsx index 4fa7f81fc3d..751364b10fc 100644 --- a/apps/studio/components/interfaces/Support/__tests__/SupportFormPage.test.tsx +++ b/apps/studio/components/interfaces/Support/__tests__/SupportFormPage.test.tsx @@ -1228,9 +1228,12 @@ describe('SupportFormPage', () => { expect(getOrganizationSelector(screen)).toHaveTextContent('Organization 2') }) - await waitFor(() => { - expect(getProjectSelector(screen)).toHaveTextContent('Project 2') - }) + await waitFor( + () => { + expect(getProjectSelector(screen)).toHaveTextContent('Project 2') + }, + { timeout: 5_000 } + ) }) test('AI Assistant suggestion displays when valid project and organization are selected', async () => { @@ -1758,10 +1761,13 @@ describe('SupportFormPage', () => { const renderResult = renderSupportFormPage() unmount = renderResult.unmount - await waitFor(() => { - expect(getOrganizationSelector(screen)).toHaveTextContent('Organization 1') - expect(getProjectSelector(screen)).toHaveTextContent('Project 1') - }) + await waitFor( + () => { + expect(getOrganizationSelector(screen)).toHaveTextContent('Organization 1') + expect(getProjectSelector(screen)).toHaveTextContent('Project 1') + }, + { timeout: 5_000 } + ) await selectCategoryOption(screen, 'Database unresponsive') await waitFor(() => { From 8df721e97b815bcf8a0d8953c9dbc59173f08f63 Mon Sep 17 00:00:00 2001 From: "kemal.earth" <606977+kemaldotearth@users.noreply.github.com> Date: Wed, 5 Aug 2026 08:46:13 +0100 Subject: [PATCH 24/83] fix(design-system): `` syling update (#48696) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? This PR fixes a few known issues of our `` component, mainly: - Remove bright green hover state. Now matches `` and ``. - Input colours in general are matched up to others. - Dropdown colours, sizing, spacing matches that of ``. - Minimum height of trigger dropped down to `34px` to be inline with other input heights. - Inner padding reduced when options are toggled on and badges appear to keep initial `34px` height over one line. - Fixed the stroke width of optional trigger icon to `1.5`. This may need a second set of πŸ‘€ to make sure we haven't broken anywhere. Haven't spotted anything egregious giving it a pass so far. ## Summary by CodeRabbit * **Style** * Refined the multi-select appearance with updated borders, backgrounds, focus, hover, and open-state styling. * Improved readability with larger item text and lighter command-item text. * Adjusted spacing, rounding, icon weight, and selected-item highlighting for a cleaner interface. --- .../src/multi-select/multi-select.tsx | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/packages/ui-patterns/src/multi-select/multi-select.tsx b/packages/ui-patterns/src/multi-select/multi-select.tsx index a168f84cf53..6e91d0260ba 100644 --- a/packages/ui-patterns/src/multi-select/multi-select.tsx +++ b/packages/ui-patterns/src/multi-select/multi-select.tsx @@ -42,7 +42,7 @@ const DROPDOWN_MAX_HEIGHT = 300 const DROPDOWN_GAP = 8 const commandItemClass = cn( - 'relative text-foreground-lighter text-left px-2 py-1.5 rounded-sm', + 'relative text-foreground-light text-left px-2 py-1.5 rounded-xs', 'hover:text-foreground hover:!bg-overlay-hover w-full flex items-center space-x-2', 'peer-data-[value=true]:bg-overlay-hover' ) @@ -293,12 +293,13 @@ const MultiSelectorTrigger = React.forwardRef )} @@ -478,7 +479,7 @@ const MultiSelectorContent = React.forwardRef -
+
{children}
From 9952d6f10fb9a7b2d9d8c3312b279bfab2c4ba96 Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Wed, 5 Aug 2026 15:51:57 +0800 Subject: [PATCH 25/83] [FE-4067] fix(studio): re-allow all regions in local project creation (#48704) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Local dev stacks can run in any of the three supported regions (e.g. Bobbie's is in `ap-southeast-1`), but enabling High Availability on the project creation form pinned local to Frankfurt only. This unrestricts local so all three regions are selectable again. **Changed:** - `getHighAvailabilityRegionCode()` returns `undefined` for `local` (same as prod), so `filterHighAvailabilityRegions()` no longer collapses the list β€” staging stays pinned to `us-east-1` - The three-region warning in `RegionSelector` now adds a local-only recommendation: "Use Central EU (Frankfurt) unless you're on a personal dev stack." - Updated unit tests, including an `ap-southeast-1` fixture region to prove pass-through ## To test - On a local stack, open the new project form and enable High Availability β€” the region selector should offer all three regions (East US, Frankfurt, Southeast Asia) instead of locking to Frankfurt, and the warning should recommend Frankfurt unless you're on a personal dev stack - Confirm staging behavior is unchanged (HA still pins to East US) - `pnpm --filter studio exec vitest run components/interfaces/ProjectCreation` ## Summary by CodeRabbit * **Bug Fixes** * Local development projects can now use high-availability regions beyond Central EU. * Region filtering and availability messaging now correctly reflect the active environment, including staging restrictions. * **User Experience** * Added guidance recommending Central EU for local projects, unless using a personal development stack. * Region selection now provides clearer environment-specific information when options are limited. --------- Co-authored-by: Alaister Young <10985857+alaister@users.noreply.github.com> Co-authored-by: Joshen Lim --- .../ProjectCreation.utils.test.ts | 19 +++++++++++-------- .../ProjectCreation/ProjectCreation.utils.ts | 6 ++++-- .../ProjectCreation/RegionSelector.tsx | 14 ++++++++++---- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/apps/studio/components/interfaces/ProjectCreation/ProjectCreation.utils.test.ts b/apps/studio/components/interfaces/ProjectCreation/ProjectCreation.utils.test.ts index cb820643b13..ec08c1218ef 100644 --- a/apps/studio/components/interfaces/ProjectCreation/ProjectCreation.utils.test.ts +++ b/apps/studio/components/interfaces/ProjectCreation/ProjectCreation.utils.test.ts @@ -24,15 +24,18 @@ describe('High Availability project creation constraints', () => { }) it.each([ - ['local', 'eu-central-1'], + ['local', undefined], ['staging', 'us-east-1'], ['prod', undefined], - ])('limits %s projects to the required region', (environment, expectedRegion) => { - const regions = [{ code: 'us-east-1' }, { code: 'eu-central-1' }] + ])( + 'applies the %s region restriction to high availability projects', + (environment, expectedRegion) => { + const regions = [{ code: 'us-east-1' }, { code: 'eu-central-1' }, { code: 'ap-southeast-1' }] - expect(filterHighAvailabilityRegions(regions, true, environment)).toEqual( - expectedRegion === undefined ? regions : [{ code: expectedRegion }] - ) - expect(filterHighAvailabilityRegions(regions, false, environment)).toEqual(regions) - }) + expect(filterHighAvailabilityRegions(regions, true, environment)).toEqual( + expectedRegion === undefined ? regions : [{ code: expectedRegion }] + ) + expect(filterHighAvailabilityRegions(regions, false, environment)).toEqual(regions) + } + ) }) diff --git a/apps/studio/components/interfaces/ProjectCreation/ProjectCreation.utils.ts b/apps/studio/components/interfaces/ProjectCreation/ProjectCreation.utils.ts index a316856a645..a99780d99c7 100644 --- a/apps/studio/components/interfaces/ProjectCreation/ProjectCreation.utils.ts +++ b/apps/studio/components/interfaces/ProjectCreation/ProjectCreation.utils.ts @@ -47,8 +47,9 @@ export const instanceLabel = (instance: string | undefined): string => { export const getHighAvailabilityRegionCode = ( environment = process.env.NEXT_PUBLIC_ENVIRONMENT ) => { - if (environment === 'local') return 'eu-central-1' + // Local dev stacks can run in any of the supported regions, so they're left unrestricted if (environment === 'staging') return 'us-east-1' + if (environment === 'local') return 'eu-central-1' return undefined } @@ -57,8 +58,9 @@ export const filterHighAvailabilityRegions = ( highAvailability: boolean, environment = process.env.NEXT_PUBLIC_ENVIRONMENT ) => { + const isLocal = environment === 'local' const regionCode = getHighAvailabilityRegionCode(environment) - return highAvailability && regionCode !== undefined + return highAvailability && !isLocal && regionCode !== undefined ? regions.filter((region) => region.code === regionCode) : regions } diff --git a/apps/studio/components/interfaces/ProjectCreation/RegionSelector.tsx b/apps/studio/components/interfaces/ProjectCreation/RegionSelector.tsx index 42119e81ffa..55f5898d54c 100644 --- a/apps/studio/components/interfaces/ProjectCreation/RegionSelector.tsx +++ b/apps/studio/components/interfaces/ProjectCreation/RegionSelector.tsx @@ -69,6 +69,8 @@ const getDisplayNameForSmartRegion = (name: string): string => { return name } +const isLocal = process.env.NEXT_PUBLIC_ENVIRONMENT === 'local' + export const RegionSelector = ({ form, instanceSize, @@ -104,7 +106,7 @@ export const RegionSelector = ({ const allSmartRegions = availableRegionsData?.all.smartGroup ?? [] const allRegions = availableRegionsData?.all.specific ?? [] const restrictHighAvailabilityRegion = - highAvailability && highAvailabilityRegionCode !== undefined + highAvailability && !isLocal && highAvailabilityRegionCode !== undefined const smartRegions = highAvailability ? [] : allSmartRegions const recommendedSmartRegions = new Set( @@ -131,9 +133,8 @@ export const RegionSelector = ({ ) const isLoading = smartRegionEnabled ? isLoadingAvailableRegions : isLoadingDefaultRegion - const showNonProdFields = - process.env.NEXT_PUBLIC_ENVIRONMENT === 'local' || - process.env.NEXT_PUBLIC_ENVIRONMENT === 'staging' + const isLocalEnvironment = process.env.NEXT_PUBLIC_ENVIRONMENT === 'local' + const showNonProdFields = isLocalEnvironment || process.env.NEXT_PUBLIC_ENVIRONMENT === 'staging' const allSelectableRegions = [...smartRegions, ...regionOptions] @@ -220,6 +221,11 @@ export const RegionSelector = ({
  • Central EU (Frankfurt)
  • Southeast Asia (Singapore)
  • + {isLocalEnvironment && ( +

    + Use Central EU (Frankfurt) unless you're on a personal dev stack. +

    + )}
    ) )} From af384e136febd551ac8ad0376abb8e7e40f2d0bc Mon Sep 17 00:00:00 2001 From: "Andrey A." <56412611+aantti@users.noreply.github.com> Date: Wed, 5 Aug 2026 14:19:11 +0200 Subject: [PATCH 26/83] chore(self-hosted): update tags in docker guide (#48739) --- apps/docs/content/guides/self-hosting/docker.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/docs/content/guides/self-hosting/docker.mdx b/apps/docs/content/guides/self-hosting/docker.mdx index a471d369484..a9323d8106e 100644 --- a/apps/docs/content/guides/self-hosting/docker.mdx +++ b/apps/docs/content/guides/self-hosting/docker.mdx @@ -122,7 +122,7 @@ A shallow clone of the full Supabase repository. Works on any OS with `git` inst ```sh # Get the code -git clone --depth 1 --branch self-hosted/v0.7.1 https://github.com/supabase/supabase +git clone --depth 1 --branch self-hosted/v0.7.2 https://github.com/supabase/supabase # Make your new supabase project directory mkdir supabase-project @@ -139,7 +139,7 @@ cp -rf supabase/docker/. supabase-project cd supabase-project && cp .env.example .env # Record the base version so update.sh can upgrade this install later -printf 'ref=self-hosted/v0.7.1\n' > .supabase-version +printf 'ref=self-hosted/v0.7.2\n' > .supabase-version # Pull the latest images docker compose pull @@ -153,7 +153,7 @@ Only downloads the `docker/` directory from the repository, saving bandwidth and ```sh # Get the code using git sparse checkout -git clone --filter=blob:none --no-checkout --depth=1 --quiet --branch self-hosted/v0.7.1 https://github.com/supabase/supabase +git clone --filter=blob:none --no-checkout --depth=1 --quiet --branch self-hosted/v0.7.2 https://github.com/supabase/supabase cd supabase git sparse-checkout init --cone git sparse-checkout set docker @@ -175,7 +175,7 @@ cp -rf supabase/docker/. supabase-project cd supabase-project && cp .env.example .env # Record the base version so update.sh can upgrade this install later -printf 'ref=self-hosted/v0.7.1\n' > .supabase-version +printf 'ref=self-hosted/v0.7.2\n' > .supabase-version # Pull the latest images docker compose pull From 1f0fb64ce97410548719cf3c1e36d6ee2c8219b9 Mon Sep 17 00:00:00 2001 From: Tina Ha Date: Wed, 5 Aug 2026 09:09:13 -0400 Subject: [PATCH 27/83] docs: CLI 'Transport error' caused by antivirus/proxy TLS interception (#48719) ## Summary - Adds a troubleshooting entry for the Supabase CLI's generic `HttpClientError: Transport error` when a Management API call (e.g. `projects list`, `link`) fails. - Root cause documented: antivirus software or corporate SSL-inspecting proxies (e.g. Norton Safe Web/Web & Mail Shield, Zscaler, Netskope) substituting their own TLS certificate, which the CLI's HTTP client rejects and reports as a generic transport error rather than a certificate error. - Includes a vendor-agnostic diagnostic method (compare `curl`/browser vs. CLI behavior, check the served certificate's Issuer field) plus the specific Norton fix confirmed via a support ticket (disabling Smart Firewall alone does not stop the interception; Safe Web/Web & Mail Shield does). ## Test plan - [ ] `pnpm --filter docs lint:mdx` passes in CI - [ ] Frontmatter renders correctly on the troubleshooting page ## Summary by CodeRabbit * **Documentation** * Added troubleshooting guidance for Supabase CLI transport errors caused by antivirus software or corporate TLS inspection. * Included diagnostic steps, common error messages, and resolution guidance for Norton 360 and SSL-inspecting proxies. --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Rodrigo Mansueli Co-authored-by: Ali Waseem --- ...or-antivirus-firewall-tls-interception.mdx | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 apps/docs/content/troubleshooting/supabase-cli-transport-error-antivirus-firewall-tls-interception.mdx diff --git a/apps/docs/content/troubleshooting/supabase-cli-transport-error-antivirus-firewall-tls-interception.mdx b/apps/docs/content/troubleshooting/supabase-cli-transport-error-antivirus-firewall-tls-interception.mdx new file mode 100644 index 00000000000..a9407c54c11 --- /dev/null +++ b/apps/docs/content/troubleshooting/supabase-cli-transport-error-antivirus-firewall-tls-interception.mdx @@ -0,0 +1,41 @@ +--- +title = "Supabase CLI fails with 'Transport error' (antivirus/proxy TLS interception)" +topics = [ "cli", "platform" ] +keywords = [ "windows", "norton", "tls interception", "certificate", "transport error", "ssl inspection", "firewall", "web and mail shield", "zscaler", "netskope" ] + +[[errors]] +message = "Transport error" + +[[errors]] +message = "UNABLE_TO_VERIFY_LEAF_SIGNATURE" +--- + +This typically affects CLI commands that call the Management API, such as `supabase projects list` and `supabase link`: + +``` +failed to list projects: HttpClientError: Transport error (GET https://api.supabase.com/v1/projects) +``` + +## Why this happens + +The CLI's HTTP client buckets any failure that happens before it receives an HTTP response β€” timeouts, connection resets, certificate rejections β€” under one generic `TransportError` label. The message alone doesn't tell you which of these occurred, which makes this error hard to diagnose from the output alone. + +One confirmed cause: antivirus software or corporate SSL-inspecting proxies that intercept HTTPS traffic to scan it. These install a local root certificate and re-sign connections so they can decrypt, inspect, and re-encrypt traffic in transit β€” a documented feature of products like Norton (under names like "Web and Mail Shield" or "Safe Web") and of enterprise network security proxies. The CLI receives the substituted certificate instead of Supabase's real one and rejects it, surfacing as the generic transport error above rather than a certificate-specific one. + +Other HTTP clients on the same machine can behave differently, which is a useful diagnostic signal. In one confirmed case (Norton 360 on Windows), `curl` connected successfully while the CLI failed, and Node's `fetch()` surfaced a more specific `UNABLE_TO_VERIFY_LEAF_SIGNATURE` error for the same request. + +## How to diagnose + +- Compare behavior across HTTP clients on the same machine. If `curl -v https://api.supabase.com` or a browser succeeds while the CLI fails, the network path itself is fine and something local to the machine is the difference. +- Check the certificate being served for `api.supabase.com`. In a browser, click the padlock icon next to the address bar and check the certificate's **Issuer** field. It should be a public CA (e.g. Google Trust Services). If it's your antivirus vendor or a corporate proxy CA instead, that's what's intercepting the connection. +- If you're on a corporate network, check whether your organization uses an SSL-inspecting proxy and whether its root CA is installed and trusted on your machine. + +## How to resolve + +Only disable HTTPS/TLS inspection after the diagnostic step above confirms it's the cause β€” a `Transport error` can also come from an unrelated timeout or connection reset, and disabling scanning you don't need reduces your protection unnecessarily. + +Once confirmed, identify and disable the specific feature doing the inspection. This is often a separate setting from the general firewall or "protection" toggle, so disabling the main antivirus switch alone may not be enough. Treat this as temporary while you resolve connectivity β€” prefer a narrower host-specific exclusion for `api.supabase.com` over disabling scanning outright, if your software supports one. + +For **Norton 360 on Windows**, the responsible feature is **Safe Web / Web & Mail Shield**, not Smart Firewall β€” disabling Smart Firewall alone does not stop the interception. After disabling it, confirm the certificate reverts to the expected issuer before retrying. + +If you're behind a corporate SSL-inspecting proxy, this is managed by your IT/security team rather than something you can change locally β€” they can add an exclusion for `api.supabase.com` on the proxy side if needed. From 69b1f0615280b7121f5778d6f248b1d6f848618b Mon Sep 17 00:00:00 2001 From: Ana <30495040+ana1337x@users.noreply.github.com> Date: Wed, 5 Aug 2026 10:24:44 -0400 Subject: [PATCH 28/83] docs(blog): add Enhancements for Postgres Changes launch post (#48711) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? - Adds the launch blog post for Enhancements for Postgres Changes, dated 2026-08-05 - Adds the social card and listing thumbnail for the post ## What is the current behavior? N/A. New post. ## What is the new behavior? - New post at `/blog/postgres-changes-filters-and-column-selection` covering AND filter composition, the expanded filter operator set, and column selection on Postgres Changes subscriptions - Authored by Filipe CabaΓ§o, using the existing `filipe` author id, so no change to `apps/www/lib/authors.json` ## Additional context **Please do not merge before 7:00 am PT on 2026-08-05.** ## Summary by CodeRabbit ## Documentation * Added a product blog post covering enhanced Postgres Changes filtering, including comma-separated AND filters across multiple columns. * Documented additional filter operators and the new filter builder. * Explained optional column selection for event payloads, permissions and row-level security behavior, DELETE limitations, unsupported options, client-version requirements, usage examples, and upgrade guidance. --------- Co-authored-by: Ana --- ...s-changes-filters-and-column-selection.mdx | 105 ++++++++++++++++++ .../og.png | Bin 0 -> 830911 bytes .../thumb.png | Bin 0 -> 1017879 bytes 3 files changed, 105 insertions(+) create mode 100644 apps/www/_blog/2026-08-05-postgres-changes-filters-and-column-selection.mdx create mode 100644 apps/www/public/images/blog/postgres-changes-filters-and-column-selection/og.png create mode 100644 apps/www/public/images/blog/postgres-changes-filters-and-column-selection/thumb.png diff --git a/apps/www/_blog/2026-08-05-postgres-changes-filters-and-column-selection.mdx b/apps/www/_blog/2026-08-05-postgres-changes-filters-and-column-selection.mdx new file mode 100644 index 00000000000..a9b394a3f41 --- /dev/null +++ b/apps/www/_blog/2026-08-05-postgres-changes-filters-and-column-selection.mdx @@ -0,0 +1,105 @@ +--- +title: 'Postgres Changes gets AND filters, new operators, and column selection' +description: 'Postgres Changes subscriptions can now combine filters with AND, match on more operators, and select only the columns you need in the payload.' +author: filipe +date: '2026-08-05' +categories: + - product +tags: + - realtime + - postgres +imgSocial: 'postgres-changes-filters-and-column-selection/og.png' +imgThumb: 'postgres-changes-filters-and-column-selection/thumb.png' +toc_depth: 2 +--- + +Postgres Changes just got more capable. We're shipping three improvements: filters that combine across multiple columns, more filter operators, and column selection so a subscription returns only the fields you ask for. All three are available now. + +Postgres Changes lets you subscribe to inserts, updates, and deletes on a Postgres table and receive them over a WebSocket as they happen. + +## Filter on more than one column + +A support inbox is a good example. You want a live view of the tickets that are open and assigned to your team, and nothing else. Until now a filter could only look at one column, so you could match on status or on team, but not both at once. The workaround was to subscribe to every open ticket in the table and drop the ones for other teams once they reached your app. + +Filters now compose. Separate them with a comma and every condition has to match: + +```typescript +supabase + .channel('team-inbox') + .on( + 'postgres_changes', + { + event: 'UPDATE', + schema: 'public', + table: 'tickets', + filter: 'status=eq.open,team=eq.billing', + }, + (payload) => console.log(payload) + ) + .subscribe() +``` + +## More filter operators + +Filters also support `like` and `ilike` for patterns, `is` for null and boolean checks, `match` and `imatch` for POSIX regular expressions, and `isdistinct` for NULL-safe inequality. Prefix any of them with `not.` to invert it: + +```typescript +filter: 'email=like.%@example.com' +filter: 'deleted_at=is.null' +filter: 'state=isdistinct.active' +filter: 'status=not.eq.archived' +``` + +If you'd rather build filters in code than assemble strings, there's a builder: + +```typescript +import { postgresChangesFilter } from '@supabase/supabase-js' + +filter: postgresChangesFilter().eq('status', 'open').gte('priority', 3) +``` + +Chained conditions combine with AND, the same as the comma form. This gets Postgres Changes closer to the filter syntax the Supabase client libraries already use elsewhere. + +## Select which columns you receive + +Filters narrow which rows arrive. Column selection narrows what's inside them. Every event used to carry the whole row, ticket body and metadata included, even when your UI only rendered a subject line. + +Add a `select` option and only those columns come back in the payload: + +```typescript +supabase + .channel('team-inbox') + .on( + 'postgres_changes', + { + event: '*', + schema: 'public', + table: 'tickets', + select: ['id', 'subject', 'updated_at'], + }, + (payload) => console.log(payload) + ) + .subscribe() +``` + +The table's primary key always comes through, even if you leave it out, so you can still tell which row changed. This one is opt in: existing subscriptions keep receiving the full row until you add `select`. + +## What this does to your usage + +Realtime [bills on messages](https://supabase.com/docs/guides/realtime/pricing) and egress. A database change counts as one message for every client subscribed to it, so an event a filter rejects saves a message per subscriber. A payload trimmed by `select` sends fewer bytes to every subscriber. Both reduce billable usage, so the same workload costs less. + +## Things to know + +- Column selection requires `@supabase/supabase-js` 2.109.0 or newer. The filter changes work with the client library you already have. +- The columns you list must be selectable by the subscribing role. Row Level Security still applies. +- DELETE events only carry the row's primary key, so column filters can't be evaluated on deletes. +- Only AND composition shipped in this release. OR is not supported. + +## What's not supported yet + +Postgres Changes filters don't cover the whole PostgREST surface. Array and JSON containment, full text search, and range operators aren't included, and neither is OR composition. None of these are scheduled yet. If one of them would unblock you, tell us in [feature requests](https://github.com/orgs/supabase/discussions/categories/feature-requests) and describe your use case. + +## Get started + +- Read the [Postgres Changes documentation](https://supabase.com/docs/guides/realtime/postgres-changes) for the full operator table and publication setup +- If you're already subscribed to Postgres Changes, nothing changes unless you add a filter or a `select` option diff --git a/apps/www/public/images/blog/postgres-changes-filters-and-column-selection/og.png b/apps/www/public/images/blog/postgres-changes-filters-and-column-selection/og.png new file mode 100644 index 0000000000000000000000000000000000000000..2f30592d1a3487b7a62a1d18f42803350a1016ed GIT binary patch literal 830911 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

    Li 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%0ALt7fm2MxrfPfDr=Ck==}{5 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 KP_9(8jQC$?HZws0 literal 0 HcmV?d00001 diff --git a/apps/www/public/images/blog/postgres-changes-filters-and-column-selection/thumb.png b/apps/www/public/images/blog/postgres-changes-filters-and-column-selection/thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..c53289aa5d0467a353c1b4c8298e310d849a6fe4 GIT binary patch literal 1017879 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

    J~B%zDUCU0&4}phh7Jb(HE_87zStVmjPt*N$(% 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 z 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

    y$PG#8ezihtyi31hediu_A;IEx3j5t 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

    U+w0$*Gruf>$ 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
    +4C+5r(8~$Q5{^jZ_^Ae5Q?6o=(q-{<1sE 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

    aLL(MZ?1ZT~v4`!kX$JJcJc4W7%1nvx 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ʶf>lY4T(oC$p+uj zpu^&xY)Mdw!c3GIi7tZIMo)3nza zbNth;%)u!1F=}o6#1fdvki5ktICVDIeagG|(Zq8Jixb{t;pfL*6c~D7JJB6SVuY^= z!k^dvPdV$WC6EtQjf(Y<0N63RgYM0M#|KfFS>1~_gmCs1{>q~h4T_q%=x5Xg9cxWW zJ-N#d)HtCRR>N(_e5mO?bpso0z!=cln*Ch{92h_TlSF-k&>lTVmIeVdu&AtQcJF!l z4FT)uF3LQEMmuhw>n!$_TNKzs^O$Gz4Pk)_sZy;v<{bN$A?HU>LQfCE@H&Qf=4nE@>Z}<|3E7 zGvVE2_lsg%(~J{<()dvx;F{a>M4E^`p3~a>sNC5iWwN)c-aQ9%X-B^vF$cU?MSl#a zQBwM9*GShMiA@%1C8p74L{8+})=*?^RCA{=GpdCgLqIIv0vV;~(*y2l@_Vd(yv zKv-YHnrrv@AcipR ze+6y_)>p^4QGN6sYy@;F<{B0h%VeoAG-WRol@{rzlcEn8P;mg!YPqS(c*V%6o>EBn zClbCH@{Y%h)k<;T$n?t|{+J*p!;qu70f$_I`<2bRff*LdiFg(m{S4B=V5o{H`Ku0siD4eJ?jcgk>+Rm}-b<_ES zvQldpzC1nKjf$u?Z!~fdeB+tQji~6OwX=bE$l+Sd`<~KQPZYmWdqrd@+LU;ujQ-0U;)t;!$`eUjFCsV*bc_sKz%T zrW^M*l=SE^64UDiqkr;xD|Hr0T~|%agyf7zn|5TjK4^-L5z8DCIF_Ju>Bri#%!2tT z|L1(1_(GX-=u~oy`nWkR84PGaD}1ulg7YCtd)v@oOT( z0GQ*m-@=rLm=zP*HIorQ*BTrU@+09Cky*>$tBrwqL6F&L1eUa1|zPCELyhwzKW5muXuRBmarcUrkoO zXu1zmd=i(b##>5WrClMhbR;HM1WkOp61g@SCEXy@c+^aHGZzYUEXLHL%Ih=xX|jhz zUBTHdGOh+9cL8+afN4m)!|)(L(Um`+AKdq^BR(CGq7%tG>p@YE-;o754>1hqZFol% zsPm|F|9+PyU>B?UD&?VTttm8Nv^*5Kb{+{4{1`1L3llM;WmG%VJRF%8{Ode^6I=fa zm1rTF#0c1{aDE2s+4q&v=ltzSfM5P_%kjRK9c*Gy_UXsGbfQq*X6`!po?BLpsBDOe{NFN6hJ`HHgh`b-YVg6R*Nl%wBCqwcM z2(D%=a9-33qWd9(A8mT;t_+$Djn!VQGmDmk9XZy+eK275=(H}BpzA)>05`Z zm4#csAa<-gJbsllh|A@~b4zg*_j*h{Hw4S7M%#%P8o?@A=SZK} zzzHkFbk3{7=vR0$*q%F#KMb790g@_vvl+3sD1O6HHdb&|}t z>#F?%t_A|6?M4GdMvEh1ZW3kzyCp^S=@ZVZfJQ^h!kQZ8Zcb6U#Zjt%Mkxi@ZgFW9 zMVsG?r>Y`Q({J%=EaK=GFax<97ZDQctJzJ!*t{ z2{yCU4+tS7hP3qvpG}qLLloiM4r1MUYqA42P6Rx5%KV@GK$-P_OC3hK;r?gPYS}Aa z0i_G^vx6Xv8Z2V;e+jx)5#A$cFvY1X1jV*8NNR-fP!R;ws&$iE_dON5ZpD<&6mzv+ zp{@b82op5#8}%tb0&YTQ7j!gtTU`vzsO@ltwc$7!RsUvwAQsljs4*k&GQxQ@-LJat z5uIC#^Xxu;SzJDhfeS{Yz5TB2^yGiiN_MEHQ_o+qv1XMPuERjah|#aX@8RQD!DG#x z6C1o_;bpl;r)HRFj!R9<4lbZTI3L|?O#R<{8ns?;zD$JW8g}>b(y`VHHw=KUQeu^% z7ty*COrs?`c`A78b5wQNo%Z!;yEFs0iwvWhn0P6g+2fY(VE>xx{bmTUiocAmC8whg zYgXF48eOmv{i2=&Lc*onSf8IR9a71rlg=HoNh_%}mi8tVL@Fln%2MK2K(`2ajYd6u zVtq=9ZRf&b{w70N+7kDiu~T`fHZU--qN>Va-1U1pC&T0B;J*jOY~iRiV!SCf1kiv< zM*t=xl~(tT8yOkd`Te_dFq8iiP-ljN9svG5&t3ie{EFVai&{=t`Se{@L&MD(Iq70U z8ld4FSpewWlq164o`%6jg>fG0{l;g#@VDO_JX*=Z3`e<*dn;6usI6*StA#EvHIXpt1#TnzMZk6U^0r($zJy)LXfH&j@S^ znRh~0Jzjgrgrk4p%sNa;ALyYypm~i0K`<{G7!>DeHcQJ#M%vTt6Cc5HVTVx%VZSfZOPSTl zY2%MKUM3@v^`RKuNhZmEuH0YOZ%B3Jz`?Hq#6m*UR-GDD_iJ8soBOH!cv8Y@U!5%3 zGay!mDkgf~Mx2*C+^N?HH{_t3d)YMzgwg>sSuZsG995K7)Cv!U!b;}Y?(Fb<0P%$$ zV9~IpZux)6o1cPScqKjwCvl(#cW?&+K!nYw!%oJ9NA?!8d;K3pJ@HPTrN_lG% zh_1?51mV+$fk6oZaMdIwnp0RO3#n?I+nU`BM+dMr>`vgL)jOmR%GSqcu=(${6|J~B z?R&L=EpRP89^W{$nUM%m<5Cp}gw#{AbQwl@1(Plli*0w9=M64s4MDOha~7U{?E_fw ziemPugT;CgwS3f_m9FZ%&a8%?C}>gpgu+Jd&SiTOtW^vnlDWQbPWI!n|FW7)K(fUM zG@KxsM3p8so(}m2O^W{G&=-WXwNY^@EwyI5MaTY~R?N8hWr^z(x)}Tj=r01R9^P3Q zy%9!9nim)saT(~Cg9sTHN!|NjBF*nroomCVbI1IPiUXuRN)-1ozNfVXB`EWW=~~?4 zlctZyppx6*&D*i=?Xo8Ted?$ zKzTV645nHrliL2;UtDX7hAoK0r7y`^8s(#(4Kb;nFRBexT0~b2%Rs#H8g$zO87y|_ z4ZEeP69+d3JZ3vY;O-al(rWy(C{ATK`JDCnX1ICRrtm$nkOGqCYQ;Ck9o=JwSy{UcOXu~YAW$_JB-kHC%j|4xDl$r!S<+&0za zj5jXSdI~T1j3`#~u@LcPr)G6{m14)9d+rZJHgmTxZl69pxtt_rZ8;RqfOG`CJgN$C z{QU?G#FZ*^Tj>2ukxjP6MdUO8)1!?mC$_3ixZ)z2O7CR$zv7Xw)|1i(LU4|w)ONC% z$}1!=wbZdPxFKi%jgJMWiIUeSet;_J2Z!ZCb*u{^_Gy8q#OVgU5ZcOgQX@;LAb~XSPbIc-I0c z=#@IY?(a<1DMYXJqky0M9p;2_0#T(QMD744(CAMxU1H4iBVADKo(b3%+F$!0Xqp;3 zK)#4WlcgcKh&8}J9XS0+#%g`kksErXX_n~YbD2GC?oX^^>75QE= zsRh8u8SrS`CDsGf>wqU*bPA0Sm8JviL*Q+5w!o*ts2OO<)zZ*T$RAU})+-FN`#*o- zr>o59mDuNq>u7o&n|cC6Ne{1{vhIFTaM@_r?pt@#D4+|bU-jC1s#J;vKc<2($7oR6 zbzH@_DyUtg$;C$ULOg1-;sE*Cg|0iL<%lC0#JQe1KZMICnXhY{61RC=VRiotNTqzo z-bpATVlE|m56S}_J8A%Bim4}#>gnf|vL4c8HEh_$y?6}q8lo>K^j$dCGix(d$T5`P zgm9HE2>KWRlV(*~LZbE*bukPt?)jM7^qTBz=%~isTxf%hMQ2~tMgMfk{=BOR^S;JX zB^8IBu&P$5JcD5b;VAU)FU{32|BlB+eMd6((j3mI-XgYMLLs?>of&j?NZ>$#APwP+w0`l3-migAZlO|@0;-iRteG4Fcya;n zOw0-iK#prHV7OA`;LBpMp2G)%aBp2vbh-?f$uvh_zWYml0%p!ch(yT^_=!wgMl+=O zWU`FCBQ;vtK?*q{b2L*K}WKI?ir`#o#(E`~M-kM-D4819W4;$wH zvxjnh-6*hnG#darGL7D&Q?vMf0%(qNnel`gt|perIAsn=cHutFeK;Lt0QV+9GWuaU z;HIblEJlfiiEuHBOXz+7DBul0f2p`R54>xD)U{f_O zc)^VYKY##D zW6w!SrJC-R^@e1%rp|-K+1@1v6>|s_xD}HDrXFvw-Q#ULjMl*%=(hpO&Ua2@_6g(| z)?iysDgou6dssQ`Yh+uV0dK1u{}4rS>qm+=kOk4V-Rm8Q&-;_MYp?y7L)m$K?xGkc zb{inVsRlBq9V%WW^sQ_+l)xL(F4hhoPSjRPsn}=Y(wcAJmT2&G`+huxq5F^qaICZZ zb3!iu1~NiJlV9w|Dmv3vfXt)xlW*K=Od%7nH&1RtfD(3kogBYdgEEZ)+zd&)0sA*g8PmT01`omn8#X zOzB(7+k=%S0nhGcyj`Z7CQQ$sYZ2#l9c5-;KV^AL_tJ)zqmNE&DgHI05t_3F+g@yijfj7c(Qh;58xCH+5n%r-}^YR5Kh0VFFMrR)Rbk=G_JGirq0VUh#m z8J8Or10KYG`-31=_9dz7-{sf?>d+WUKw}$Px+9=!zo0jP7N|Qurhoh2+;|HzP$u6N zqHFibi_3|X=NqQ?2;;!slbAuq*opfUhn=8n?wzoG1%bd_HG%8zV-q*GLoRZ6B&eAK z4OJ`dkPP3Vzr+ql+8-oO_XC>xm7Y9`h%t$9Z)I}>I%Zl@18D5)?YPjN5PS>k0iKcq zfZbm57utL@x+Z{5Kn5zpMR_b{BV}9hS(axLljFmggiTWarx;5Sn`f+=Ohf-KP*tU{|q?e@qNAt6aF5Q=DR;BE51Hw9sK(OXyqz0O^&@tC4&Z4Sr zQp#>W#D_W0e{COTq;$9n@sAPU)FPjtHLtoeX^`Q-v8DzV6&u$Qjg)UPn&qLkCh4E% z4}PbVHvk+B{d7Jr<$3nS`|QKK$tzSuof>M5RBFy*vVU{{=|;-I=_)T6|Gyoduw1;@ z9A!+6tJ9b_h2@t$vPg5-$xZ5q*<>(GsVh^^{hal(rzCkTP7w|W%X(e`u)>(7LN)@p@llp_7g?RdlYS?ozVl+!-_}P5Y zoAZSUqjoAM+O~nX+(D1EGd=$WbWD?T>&*+@1#h6+RV}6x{6F`O7(iChEUIKM9DJi? zR*gV^GV#awSw|0?E}26gi`D%xu_Mz3I(X)%BeORmuye*_+_D@4B-it{ z@MvZag zp1VISY3^i;UrwoN_VN3c&>Q_nT0|LR?#X=gtYSdbsbnmhC|@$e!^AO@F6ft_gyL0B z^j{YAcVH11Zn|0hYG?VcgS-3#6OrQIm+o!17=URpC8i)lOUQEIJ--!#m;S>o+b&6( zEcu7B1Vi~3xVbk6-K`_~_Q%CDB3>(|XNSSGli9ZFSBWa`G6gkUewfTgY6C&B9n~a7 zQo2`|K;jdU{9MKJ&T`oL1-1^+og+_Os;;H?ms8r4lFjCt12ANF9ibv-V{uB;`eT9L z?kpeAcZCeD_Ogp9Fh+&nd00|Nb4u+tM{*A$!1@(&wi`PNFtpUjrW{-C$B&sRDE>CD zYT`B1W%&L}1+gSW$b}M)zmz(*Om=BwyL4?h{Zp`gt=R`nmVYV!bUU}K3*Hz3M*PAd zN%|K?pAcoq_)gPR!l<<0p>Q6vMzn1FTO6_U1 z=wGkf6)pN4zyto!+&byDp&|)niWJ{mjOmqU6w@FpAs|+osA_p2M+C4;VoBsx)1m;( zNEW@|y=SXk&O)(9A5IVwaLvqW&Uedy;|RpmZX)ZT6BJ6h&biKWhg(=!R8&@W0YbH? zh)4&^^vVj$#okd%Y)g-=dHRP8`LpBTb0gjL0&!TRY_t`tE_ZV!G&@x;Z(Z}?sQNQGh>7v^rC_NOB z=LY#1Ex$@rB=sa>LYkP6J$#oK$%01wfxRtmhCps zqRu987h*Xsa@o_^A{x~e+sTjO&rm7O1;zlgXR$EaB#;vx5W}1c0=(J@s&lV+vK5A< z3S8%m-FJA?^3@7%Nq$h!layPBLrmq=INK{3a304bDcLWsT&jr{604G}Vf2#Oy)$rA z1WLSVCHVf^)li$z2F}jp2pLUu$&F(5pI0Pq*FtvP9j5LUK*LwIZU05)%qP1QHZ#A% z-V%%ciJy(klWvVALSel4>04}~%~TP60ywP$bWX2fUDY&=_DR&?um$>ktC-s!iyXtR zwEQiH{mG^&>$9WT-XSwp((Su17#6PR0Qv}JBw$*-zORCdtn*a*;*wAsL?i0ydwl8J z`@Y)tH!%MEbnuCp9o}QYdt^?@rf!i!LJa3IX%Gu9&>4nQrAZ-S^s#=?ixmu$ z;rUn~V-IAG5aECZ1ddb)4p^Y+(he6y(-g-W0|z^Q&`ZV0B;xiILE<~A-NP_qftlq7QPui{)4(Im=9=K-0rp2!XXd43f8z--vET>O%TLEi2*DJso`9GT_M>yKW`LUe0cfZn!{i)V`mj5;T z%S)rjAEgYMF$CUNgHj}1DbtbVMGD)&vlI7>@?TEq1Dt^s>aXIjF`(*rOgkXp)=PB1 zI$(aZ5czVoKd(I|A)!6~#p7idZ0#4sd%*6M_JTAwY$4MC$t4vCWPGj z1se-$u|&{La|Hzj7Z;Zm8Z~5sI$CSEv~XvAE5n}kS?IWYap*fmCTMHP%^8i#v#GN64@J;0~q1NI0 z%B^Cto%w_Bb%2GH$;tT5vqYkRH~F`J)ema(?8$peag&G<^{VIT$rfRv7XDIV=;L+lpFEV2iVO1Y1EpnF;!KWSj| zU!Xc*y}7PC8C8*X1?DgOxdyM^(LW{@Qn@L06Ft9nmB_b6RJ(Cg$pJB?A*=riHrVcL&| zVGbSpnia4xVN9I6zhPsijDUCTf_12R&jaV{+XX;F3vEIG;3?Ad>T%xqr!Br|r6Z=s zCsztHe8`iIha{p zD=x7qyts6QARq_38rF2e^yqR2r`9vlxA6a4NAOPbw`8epCn`*GXvpacq6~Igh%M^g zHLLt&wE7VH}Lv1E)o#Kd>m`8NrFy3?r5H6zg+VoqNz_v8X#DADzsxQp!0qB7eR zUQw8$J4Oaz;b6{qX_?eYqCMeMkoE~2PXbXVA?d|SkB9~QOH?D|M6BUaEA*t0lLkp( zo2j{=e47~$;V`x$HGz5PQ1N2s@Stixek20aDVJx@RNUP7m!G@4s{`FFgM)*qg@t3s zVQfY0eF{cjQzYDe@u9V>ze(Hhq^B#|K7TIkzcryZt!djGkojk8BF&OWg(1)qO-3S$wBQsz&2jH|a z2RsBO875t+YEf*a z!=-6wo1MsAW>bg8aN@6I&S4~t4ty$-FvreOZ55H}`{(0%qM_7!bZp-d31ZN6XStp1 zB7I9el;%PT+-#<+=KUHG(G)$MN(z{x%`7;z0-buvCV*U(MApXjQxF%eK1oJ9fGJi& zGMO5^*Lz+eI~AQv-d3S77ki@M3vi%l|Et#_F?@snZ3@yT`swrV*p|&0`dItVx3G`G zE<#=mj?K)GDEAECF+mh{VzoATM-?50J0Y*`$`_b2LqsaY-Hyk&%KAF=b6?vSO^O3F z6X{`IKoYC+o4A~f(GK;LV=$Y=xSjl}&VfM?{=WeHBw_sco$A%IP{sc~MXgUFO-xiT>b7*|IAk_K9;|BeF z{j}NtBBl9wTT*PPwc)*VGgJ zj2p1e`|jCvJUAb=b?@?wz1jzT=b}WLXPZs@f&C9pne}zCYLVj~s1j=K?qH2h`Yp-9 z5ycVZjv19pLL~Qs`)X9tx$y4h#n@7| zc)AzXJ0s5s`Qx>^YVkY%M4{a+2&Dr{cS-YPh%#%eL;^?H;UOE;vp$qSV`}pwylCc+7rpjlkutKS{5eIs0cnu96=bzKejL48N2*EZa1v z_Q#cCP2ud`F%R<>(hM`(&g;`}y#?j>C_&-}jG^Q^y6!CoH6KHI)wMi3@6FSY&?jk$ zO*rAO-E09{+WSp`jfzf|W$9T}xs^EU{`C&ZmxKpkWUWwl-WktwI`$B48+qgS6}nlo z%Y|PfoHvUdSZ=WFoJE9!5|Yoq2b95Uudmyjr=~!TQz7pT@B_q znvMIZ$otpJkqYGPk=y2>+nw$lmdM=L^u$&o zq+A0naH}{jwP$OugA{mP+|bp6fi%AXu17Fl6zL})Ffw&to2C{*R19SFL2Tfqafx5W z8SOX-&ljMC`CJ?Bj+pr`EiJh!{Ftw|M)MQObh7JUuD@Ddz`unmEZYKzK%j>_@gES- z3B^*Ao=#??1RhK?jGu<-PsG^b#C)B*Z;=a!NmYqD^c~3`EHn{w>%Hy3B9;fXD3zvF z(w?auqR3Pi%j-_fo1pna;&(3uo-+s1l%*)rs{ydq~AwBxez7*Po9+er9an*&{$mz^Vcc_ z;=`Ic0_#K_yMj!@f8oALCHUB*+cQn5HkbZ5$8R4da68fuzn!*4ADt`N4@c^kxX+nU z2wTUNT)7#1JBM&t2V$ItUNM>79gNMM{C()EBz_nMneEQG@#KD^n=n;F;3dasyG2dA zM0Wn!YVHgru>OwG?O9X|MqEjY0YQ3||DwGp2v=$JpHB*0Y6yfszm&g>@$Y!#Clu06 z)iEidgRK2Ah#*XgR2=8nU&j4~JF=o;r0&AZ=;ntBcZE(x@>ZGg|}{elk_b27A)^nI)^_1M?wd}we03Vw%U)ORY58aa#C#YVOr{+tEA z%QSLYN0hw~4JvM5ckYz(EqNxZcr};AP4PHNtBl^K0;q6~BUIn}pj2&4PRTa!YE~86 zdC%SjvV1z%U#|>y4>oUb@=2LIh{z-|(rTAbmOm*astPpg|5)JE?qs1>_)!eQGw!fD ze_1xa^P?ScyGhONk15|UTK)vnYz^hsrpp#{*FEYD=AR3atn{bM8VQ2nO0^+~G~R zg+3PCi!&+Q5X%Qf2pByiF)LgzH-}#61BbRp^`GWMyUd|fS_MMZEe1GFuNMcaid`Ev zVnWP#kuAdbcbb~WJ9kp5$4W`$U&E5NKi)FSzlC-XZ$D|_e^&wjuiv$Hp{jx-xd*H$$$?Cv+UV1`giHdbh-Fj z;7P;qva0lsq+QMKfL<>#n+X~>BZU;YpOh3IfFha6WCIUcU0LdW!b-p8NbQ#?j+MJf zzVr$?l3zj9D&v*ki1U}?K*kcf$$Yb_+dkHGz3&4v3S+WMa56q#@6s*e5qHtnQ(we6 zLGYPy>#IzVX7107yydNIu_P3_AD^tvD(K)4Zb|GU@}ipw{!Js#_Rkct$b#kM{y?EB<5mRcSTMc)vaqJi3e# z`Vl!Sm-iB(?x&RORY6P|BXZrJV&#}_Xl@Gc=%wV(n6?h?MgMT`Yv^v#1eESJw|R0F z9Sn7uk%{nB=>c{QIoHAv9Ky(ubvt5PBJ*LzX7bT)wGPT80@S8%3(@lva<6_Rh~}9m zTy3jsqe4Ag6d2W#u035O{)+gWe~!%3=JhB#!zd%>c~#V}$nvqCU@l%-Ur>LDWV;;j zCx`8oJ=@&Q$-MXpzy^yz@FtK%>FXajwoc4NP&to{XzZ%5`Rh-)1h9MPa$rZK5n2G0 z=nm9IRZIl+DZzDcyl;am>;(rPrhf%I?QJ@`PL?~qUy_qef;R!q?OzW&D~tibfAa&J z)}I8}|8DZ~I%)cZUcI477kpFuR)vnnaf_cb2z_|7yl5;@Bj7(j4`@lbW5kC zl*DL6RM-H)k)j~d-5}ivqI7qMh{Wjbkdzh}C>;`dUw;3u-~C`O9xw(MjPp9r<8vJE zm4B-3h2v;(U%9#W5cO}-K}1y6LWK6PMdwlI|+2r ztUShVu?O;OyMOhS31g%1(;}EDVXA0qql}V(_bDm4g@w4&#d`fG+rxA)0K>%~>99O- zDr4D4)Z_u=cs4G;oN6~-=GgoD=Vt~uNcPtWi`k1&ecF0XA=tJBwQ&6yuvuiY(rcCn zkUY_4rgn@xC|bzoYI6wMOd#Hcs%1m(g@}sN{Fv977vo1p9fi5fAwi_ z{0m=Sm;OAqk2`S%z;aP9tXtqtKv4!)514U&HanMK%%7pft6@|K%g?~4i>R_y8|-RK zbKI5@@V(;@@Vl%=UVmQ|-F)}Lat0^fVg~2ig!cuxPU|(JP1_aykMq3+tD$3oR^y^ldr=T z-h>D)k3tG24x}Yb$XO{?-*-Dg`*UY)*jvP6E9I>Y*PA=99yeKwhHlXGai&{nV_f!= zVmER2WL~<81W)IYKh2D6INsJ^G6~xvhu=y|--pEUuyl;u){7i;7xCkwubrJj7_s)O zT&Np`V=3bpMj`=NO8I?H`$*V$bBn#CIh>07^y>7UdW~+}99xi+Z$<8uh`@p@Fl_{B zj~4L{rsb;#j$zl25q^~<>0DG+eHG4Xa6i1#kh*Nzz6BVQikX=z60zQh%;5WP%Rx?(m?A8_!0Egm3%cYh$=S<_e zwrXuFUxcLmq;+(?5tcSS9x9D@{28RUk$69#_q;y9Jn-OTkkrY0^=*yMPr|gx7SipH z)6#W`3gw^K>b~RDK%2ENG4y8`XS$ZC83`aO+vgO*pkLII4HOUi>d&AWF>>iYPG(FJ zi_FkYA)Slt^9_?kYE!U#$fOvzsjHvwTo|yMHcpn@U4tg}--y7v$!#^w_fvZB(=<)M z89xAMKeJTe9!Vdgh=VvFm$r1TJ0GF}?4Ff1&HFH&#GDkJfEDjV*GwDUa;nejYl)*K z*m_oic~8{YD;tQpx(zKnZ|>4+_cR6MjtJ&5yl98x{z6VK{t!K#lM74zc$x2d^`IbS zR84gV>S>8FKV>L{&X_aIAW%IR@u$BxvG!_(oAjeN7;7PwgnD^?{mB3}*1+ED%47cb ze0J^Mg}+^K`vHA@;R+A?t7t`A@4#ANm2l%d0o9_|P~j%5iv+QNlx}k4&f2Jk+uUOn zvdr&MXD16hbWH^LJK24$ZHk>`PdhrpfWP@ra)-rHxf90U>RCfKr4h$R^zG?`8c@Z7 zkR8Lh-AmDts@F)lQ7Azch~K1oPAo?wj6a^G#hLqgXmkuh6mKnJnaE^74k?$9YWPrd zuJyL&dR&jpS7KffLJcbaJbuhq*bp>@=dfC$)RM~aXF{L?ArC}X_Q_W&5oa=IUTuE< zM!YM6-yi@_0If&>l0;tz)>K3=g+7m*zhf@~ba6a3){6G;JiO<#O+j-0@j09+QT{!9 zsEK{DgNYm-f0271Rzg-NJEC{K`4awZzZ3HHy&{p+bz<5pGZTI8R^GAlm-zPXO6sUM ze-(XmbJ#O3=|@TGz8veu(Gjix`;t}W8E(7*PTM2w>Sv$yx)4!V+H?p%H~se{EqgC0 z8h&y;R7JC4w@M$-slLhE+FG}?VTxfu{?^f)v-Sg0?ibbbBy?aTW> zBeGRro~JB!z?NcbyM{pSJomKogk|tAC{5mg>U9;Mqt}+&0Wfd?HZ`m~tTZkqCB-2u z9B(c-`Lf5?SD&>)5$LQyap6_>Tv7D#i&;+Iyz+kVi~O&~wYZOIwY@C#_Q{Q21w9eb z3pzi23eOY+;+J0h%Wh9$tx5KBR_&N0AgS9*FVstXZ>y6r3!E&xNSZ??$AKlDM+GYX zOWWxRNyi&&7FSK3%eVcd71MD>Mbr9+E!FQR8+m^GcU!tEF1sV%tNM;4`ui<3di5HI zrsG();qTcu*v*>6jQxDk;bZ)lz7KT1L-Cv0AIIlIzMiN5AwtQh6gagC1|r+N*z-h#d5482T`8GC?^rmUds=b$~O~f>Z?EF zA6Q)t+1O}=ZbD8sWG-Sx<@}GLh~;(J9Yj((`LQ(zMl1<0Yi79zw9${GK=4S00~1jB zbo&f$PvSxhNY+Cc_S^|P=H*2nR`tAz;aes)%I~;YNih(<8MO&{%Hg%Fno`W(bWbJf z*nSLd5iQ=%^GCFWJu?=;?vQ|L20dkU^~Sf|y|X07Lg_E(43Rn|z&QdpN8}dmRqevq zP3u9um^;RB!|Ik_QYQ%?cX(&Ys`8%Pfe2=nWE@1yWJ%0h_~Pg}LGa)z&ZDj5dpUmq z`y8h#KpTp`G!*q!J(^9mj^8+I|K@mipze8ln+;Q5tpCL&kmj9aiLX7)Eox8oO4!DQ zI_Rl_I0s8d zmaaN-QBf6p5$>rcI~w|-Q@-bFK96PRXCk4J)*NF`gYw=V!=`IUqL-M_7Y2HpGr$k= zYr>@2@h=|mxbfWGU6QW7`7qzKfj^S%%&5ynDBUh1P!hOff?bmYfdv8vI(CLNXxGVZ zJzaa$bR0a)h8(!;d2fUKmQVkrNwvC5`&Lgjp9D&zIG@;H=D)yX6dp#^Aih0!|ecuZ()#r+yU0m+T+8db)|24OR z=0EE89e=p(1GdKJz0dXLeSgOz{eJifNFNdEnEnNajkL1B0hy!JkzNI9_yRu!Vf7)2 zp|*XbRf|i>RDAVp{$S{30$(YLU`V~HySb3mVlwwb?eT_>^wF(i?M`V2YA63M;c$FM z)L?ma?w6m?AvODlhO=^I!6m<1x_2X(1H+TlxWRG@ttkj?uii)-ZvI8?bR443IY zMOymB@wGm%V&!T)<5>wpfZ51B3!iwTh(3%KDW+eT3=x$(G!wABR=Ci)C1K7AkTOG_ z>)yUT&Ghv7#&m@`WV#w)(H}St=x-0|SYE}oJqJIztMy^}Rh9)%n4E$Bu|f2CIL_+Y zp`S~Crl;Gfsi!xvZ$}@zwRG9{m^3`cnJN0mmG5*k7Ke)4dU*jT@%F=)pDoX=+VXJT zk_V`}Gh?eli`by5%+dGI{B;uK50!10>!c>dtwbp3mx4eOzD%rf^Wplk75s<-%MdJ(NNl$?kO))ol{Tq_I_ACFO%-?oc9=Y~8qOP^uQA8LL8eQ- zv5?jdL~i!St6N%foSdG@t}~0qzi?f!{Rl;K)I=YcT774a(0OQX!MuB8Vqzj=n0QU$ zr+CibCB8w6)#=cP0U$_@^oX)c^(#%6PO-G*!4MQ;HlYP(Pg^5_0MMd zBdqdzbNuPr*wq$O=DPgvGB3~NhVh+ zfYYE?Lj#E+cT`#Wn5S43pme;8UCz)SDI9P6lpC^qs80RQu~OSFr7EsB|8_@_{#6w4 zI|Ryd(&I%gKOE-#T*wA^5)G$hQ4dntO05OD5ly?CX?}^&8Xr1L-uSO?31-|@yWv$O z%j+WVdb$`tcCDpI1bLKxkwdWmjvBg{EW{u8+yjhTdYK?^O$|WkPg)BhY z*vKBl7L`Lk9q1lKu@B$YT3Zbhir_iRWeU#p+Av3{5(;ZseKmL~VEmLMgxw0mcEl&A z7__PmBBe{Q&voE+KZ4lyztFNbUHu#sU`j@&>J$n#nmldzUQ*F1gx`MBp_X8nJ?^3? zAhX*yjw`zW-H9O%lH$Tlfui_#4{SgDS0`>AyJT zPawrvT>4o0;ta+&M}j^dofQVu;70$de&I>XQHEgUcnxK@f0qd|eB02-sG2X`Mdl)u zj)r!<7BUSy9%T@DdFwxt?o1WE^vKd_i5C!S7+v}fyXX5FOZaWo-47f?O$gVBN6yqA z+&lNdNnQ5l>I~OpysshIEMiJ*(O9W5Ii?n8LmV}G^ElTVlmQUx%$?!-y_0_#pE3FdFH8Yak$VLO{cKg}>;b5Z@H5 zm*ck+jr6@j0G}cjP&}qdW&G_ivUq{rCmaAHetN;t;Y3GqTFlDn4`s~Vw(n-Q)p}25 z{^4}H!j#Bdla*$)L#hSKX@N3fwHbK2yZP`52J`FNREkw;`-|chlV)Jm4+@|H*@G^yQnY6AEe6d& zwVS)8TQfpGrEMR)n_|+yqxFYs8=lE^YNtLFWV9jnl_Vabz{{;X!JC)-@wHj*aP?^F z)7PWLIoady-(_J1*VWUjXhl6O!?KRShZO>nX5juj5Q(o!X%kYfkPT)P}6-ESc|%fDtJ$_+>L_w7 zO>xu93p(hXntu#CK<1}#l9jGnc>{H# z*0qa&h^4w$%o_V78y{uVy}7123jYym1oJvEZ|FD?qUktAR9wgZ4WA9TRYaZ^|Bd}! z-4@Op-xm5qo;y+2Pr-sOeNA^<{V`HNfNj#gePbMml|(QcjNhpNlL}6kE0pUsOp7xl zMX)U+A8gwAbge4;yLB7A!i%~g;*Z@$GT1DF_+LcAdb-HA0s%ce2+`%c9nSN%VY3{N52fCOb`yHp=cOr}wrip!qSN7P1M^mXJq-(F+%OfwU zR3lI)c2N3=kv8!faOV10orOB3mPeE+gffo422>OdWkficsi@pF5kwctnzR%EY+liz znk_P#71G8nXV)`nvc9s0m%jb$Wi0ATm>IbV=lsYVp4265i`Mj8oSXQQhl}v+HJUIU>*7{_Cj-shq~d@P0lQEKf`hdL#(?F=piP%%F>o3Vh^Y2 zqz2To)vwyqD-iks)i!;YHEO}2*U6s9OkbP;Q7buepv19i$1jM9sDM0{Zm3*XC?YXe?QUWGnvGuI|@+3)9N?X z0RiOmyyv=Qh2mc}Ku}>}`syEyKU|&Tu)%C)IHqES;fcGToa0k@3<-Jq0)obvSuxc& z6Pll@Z1!NK%02Q%dgdJUsJC`8I`zwCu#a{-}BFvzh4*^3mIqO-JsGcO1_0 z!M@3;I_gfc-4Hf3Nn2K)+MY*Pz=20sg4T0`>WplCtyegOq|5GpIXBt6`0dvXB}%`4 zzw*vRm;cfa0mO30dWHXVaDo4HaPA1M9MGcZ1g=I4a%Clq%binR3ArL{$S2{r7?{H) zroJMD3};y`@AvS}376Ff$=C(zbsdEb8+=Le?)fp0j zU3M}(hhKE8xZ!%ubO}EwF zJ-W5I$@H`YzWNRDO0QO=j<@RGir%_;|5%w{yf$^6xdV+FU9yR);+E?Z#u|qouH^6h zPE|qptz>Bt-%9TCimBRjyh_)^TW?_EN{a%K*PRUHPe3WyL{xi-DOi==1+XKaIpjH- z0pT{@gaf&LbkvO!K?dM^f~GC+*-8PEp=cmi{9gX~!=JiubQM2&^DW|0?5eQRRNfbR z4(#fGpKKGkkQ2e-A~TrT@&%yNs$zNhIpi~xjDl>XgJ3%HGWjlQO<2r+@-oTKZnn(8 zzKdSe0^CnLCH9mdf+a#~n*H)K=DR|ku5IR|G~0d(%%tlccMQV9UjJs&M|GL?E`etA z!@A&lQ@!W`39K)IT7-~A@?G^T*=d5_NAQBud zJ*?K5WjbubEM~R>%DA$eyJig5$Jp70pdW#T3AG)?8EZ@J>tE0NQzf(b;JcXp5u|DR zEgFJgs=k%&Gxa5MGa+U38G0T{YuHWCJf4#>W)}GG?H1{p>#j41IFoea`ta4ge)MTNg;=$|PRikDHu+aG-1n@ALqIWz z*vM*FY(bF7Y|>p>CBaP?7{&(Co1!6q6(;FW6LjPy^<5P%-Ib#c3!2DFKan(@BpgSf z$grz+n+)A>XUhmno@K%ly`{t?v=eeN(S7`%6+(h2zbeeVZN+4-jqLDa>5|*OA9S3l z8L~!xUV9LCc4d*PEo#B9U$CL|Ntps>m>HJ--ir1{OAA%7y2_{7ZQiS)W~n>Y2kseQ=eN&p^MQ}+fF zNqsrCnhzwVNgTF7p?YlpS<;mQ&5E6K_Cs7!GqIDm6h#lr{JKU)^~@LUI?zSKhZcA5 zRxOSb5hB(rZZkUbaql-IRbMu+OE-~g;y%@XV1X0nkpVn^{NM8d8t!IqeC^4MEYkDH zK*#Kq=hG5NzT<#a2XQ(6*pU{bkVmq{&L3)geR3Syg@He&gY&hpmwEaVrhl-UKd?+| zy(S-7Ij2Zv_9EtgbPFjTZ++*sv)WgreQ3ck+k08Fp6gL_vHZ67SEp3%@00X-*WatP zyA$yu)<4~V8%cNt=6A#x49CMtFjx+NKx$4E*K0Ym?ylYvd?va zRXF!DzvBjK_txYzzuj4Gu>rp*t;7s+JF+b%!hAuNFf?jc{L(GOy(U25V&%)D!uOJo zuLA*TyI6s>Bb7rhKB-vPwFAOd@lP8Jh(0%NXnoS+zxY34+nqrPd4g1yiQwwE;uU&5 z9j9(J&!>8bj^lb}=L)NsGoL^)VG|ik2a87#8|I4mlhNNlRIyu^Pc!?CBjE6d`5#Re zuh^Gi=f`ra_UYf)&I;~SKSJTEn|nZPS@+iW)bwh*=&Q8k5yIr~?3<~l+py{F;<%(% z!YrX(`{1;^++P!Eshw3vi@ue4sXbZb{ac^ik~@WaAMQXLCx=SbLw*|Zj4{y9^pcbd zRkx?*Ne;Nag&?HgYPLf-1>Owy8X4X`aA6>F^T!l6Kq2g;AGXTCqKYFl=pi^_dBkky z8|z4=@kV(3yodgh{tX2RUQ`CO5sUc3YpCFOkJ2S$Ew2If{4k>F7xOGPTIxCxZpe$h z1(1VElGI^-fZPo~RFl@W;;V@KUGvhg(`X(W(TnuN z6nCnqeOdp*GhSrmXrLFG?G+WcNbJR@W=$R|^DQEL1urs)5`Z>fRHPBCg#(2j+ zZDA!#iuLSQk4UIhFMFQ!$9!D;CW<5A{XI(;A)pKNo?}-7un%{jo-Eotnc)q>p9hW= z^j@-g1q7fZ8@lO%rueRINtq}z&V2(_%_lG47c;g;RVHpg_T;}8I1YMmH?fHffN?qz zUC-C!84lz@+MB`>z!>E0-VvV$14*?c>EtJx0$Upny*4`QvV8kyb^yjl7OYxkK&xM+ z5QIJIZe>dY)SJ>Jw%iNd)moplzQ4uM$sH-SX|Nh1`hw6tU;9}7wvb(bhjcLa95&s| zY?7+@?mpgXj|<{Y5I4&;KlA)0&D>}JSkO9}Zt4VL!)EKqSWy-_j*HS{MCjBlS z{=h?BnNsouGqoU9Hqssi`7cZ=vsb)i2_iQoayKac=&sbnLz(pfW@;7Ti#m zJ>_|PsM_L99)e(7d?MX|FM?s5*vG!p58(@#$+2q1WUlgnUzBnlg>+1V`~vZ?iacR& z3IQ=rnHEjnNbOK(=JcMvx5PAv`u|d z_Vz*k(lu6~bwU4_93+o|uqe;I$2-Q<7ZOd{5eg6YkNNU7ySvALRwhok*d5D4tiQ%6 zD(^y|%GZMO3jIUJs3rTG;slMh8Oj$7i;tG5ry{7T3tH}ATA86(;kg>EjIcBKF`!&_5?N%bhvXgXP zQ#VZ$8O=B>?O+=!!tGp999Mym`%^O0MsHUIm_D>v9$%w>F5~S!h-+35sz6A|B37R+ zvzl@g@4c%~#j3gX&%`(!|2r~*5`bNF$aiq9bW;~an>X=U2kSZZr@XtDf=(8&J?VMJM~_o{JSq}Ep{(!{I@)6EpI&>3w|z1 zPanU@*l%Xok^R;8?h8c@+|B9FO0&qJgPioGL&irJskrf5NfO-~lBRf$HOyD!{FVGj z$+ZF?XDAsA`3=M{#x$d-l`~!=N2e4|24>(B)Ik>D*mJjZUN@fxCB2ET<}`My#)eEz zSlAk~m@&C0{Go=&J~f@st{Wg|*Ra(T$hwM=fj)f)xq?NwDm375IHP>C^S0K(YDe}c z;-4n%7)4|_^NWg@=fchzrAcx_)~v!xU0J=cVF5sXorqZB^b~>cY)$=8mmedYX`+^} zgFH8#>4`Io@3!sGq&x*B_axikbii1w>`Z< zQA+$Ob5d+NjjbecQHfas5U!n^oR-aI#;{v4%!SK#lZsNl#cE{j&j_4^8 zyMh<)NXDqVW^gLt8UD|S$LuS}bR;<%TI@jZd^=x;V)T`z55m#c#!Q z)TBHMs>6i#`|1-t7M)2mCQvt{d``W&R+5GtuTIa7B279Oyr*Rjqqii}S6wrB zumLPQ=yJ9%5tkvclLmXY4?5$k=21vF$vB3sH(^8#zgE&Z8P@r|zvmE!YVL%YGK}Y_ z2is6M&+b1idl39!RzkciOEnooCti}ZwF@MSsmn=O5%uJ}i$)PsO{}VjF3}LHuSq$S z_;P!8WJOY1fhw+wU4{d5rB1pGF!TeTU0u0=pDdo&Q>%`@)@0`!uJB{ZjA9EW9>i@Y z6X}E1{S-En&rI>{WAZdQZhJ&+vmL?3mu->zFaJjDRR5tw=mkWq?E6P7Y?9 z&O6)~#=%v6nROyFI&obd}?jRFWAiFiOCz2sYDH`?51p;vIFEY+a?} zMkIrA)0omxZ!SvxW|A}3mr$VPK|0f-lsQ*kP1`!5@Wi+sQnLGQG%Ntc@Usxe4&f<8I-ei8e` zr`}1Q@4F9rto0r`tXPQaEW}6hSLOMA(*|xfKEFJW0e?u5{u_cL3xC-AgxUi!PO=I5 zlR;@CwM0(j6I>fN&@2j(X#|#q{tRGckCFWJ4d52>lhZ4PcGiY2YibC7j9gyq1->;& zVfVLu*BCY7HSPB1UqmLlSK>G;iL>X6--E+PfvLAGo-c&6f!*u> zw`I69U?HEe`>P*#s*2~{<~8`fRG|%3d=s7zLgEmjH;~F5Mp5=iu=&C$ee)ao(3Y8q zi_!#o(KPdlq#h+6y%y5hSC_fGHwr}K9Utse|Fppj9EFVu3-fL`?%>tLgKeb5MpLfa zgCX+`DNORPL32J;A0P`+zD_WOem#YTv1am66bYHPVfH1TVlM8RMdtlvd2|02gJvMG z_2j5PU;}1lgjF9qS$H5@uxcoEscgj5x5qjG*fr26?C8?Ex+F`0*5U^A`!dQng8?H2 z+{A>zB!BBDC1OAM^Jipy!!Mrec#A&+8I7n;Y+#c5Iw1xDG+e3zK^tII!O_@HEz19$ zfMX6OOr$PvXn4O~^ACw0p+JbHxOr~Ak@q`qJ9%kpw{7L}+g;-p-%F<#%n}+XhDI(W zTlt{anLpweTY(IB5veT2XLNyu`YQR%%dgtR(%wMNLOU5#2<%?tAN-DWOpOcvYLjHu zX0d62*E(8XP|`V-ShF*C>LXZdB%;pQO+_(0$KS;IMcJW&_8bwC_~h?{KrU8+zuuqK z?x8=J1rAI-=#h$hcyd%5!B-y6Ey2=M!Wp;4u^Uxk1Pp0Ro(165z?4sqrCE=nHl#x~ zTu{2zsFJ7+@X9RZ0;@W(WV}Bm&Ls4>bCu@rKba@c8hLpH*dQu}c4KLF&!||6PP-9) zWCmJCVT*6)iHIKNjK<`Uac3Oo5}CcD=47oCNXf_Dq_11}2hXuLrOD%)A~Q>fSc`#q zQgE!r;0MVs6Q-|v_p(NPWeCgz-i4o)Sa!kHR(IJt&cOIhPIDc29olpy8Nk0Q@-V65jY^CItjnztI!FDx5@Gd6vqjXqa(q3lxgA8-Ac6)g^4hgZvIXE{J|d|xq$P3^^pD2&D+)jY3}qX3vZ4fHdnyRa z;-eDJ`Lb>ldx^s^LuBPlkyN7sR(6K@8f~=Jm`x(%+0rVP3~p+=?SCG=LbD*xQO{7j z*V5QCWwD|9`@m&odnCh22y#yL@oIKqA^zFRIF*LDZJpR5qKs-LSOUKiYr;mtjhH3ZUv4;H`hFnpo#A|_0DB1f$MDj${vl+m|kqw@oEh~j>8JdPrIEZ!zt2U*wb zPIxX&{F_)?U(t)DPp~a?Vab1BGPL|rTQ}KUo=Qj8zpTi}24P8N4I!ZU!W>W3zI9_# zK-^eTe$>P2k7?5z52jkDJfxNRJ^lA&RW{Pe6UBnfMfCOe^2xL07<2JeV6E)v5%MRH z`eb`k8EAuz){z0}T=^e7l>Sn|&3d_Sn&~X`BraIO6>>m64BP@bYtw&SJ!O>HwZ6YB z(Y!g{N#_D;I@*SwJhD0((zxrQ>aESPZ`-hhq?~bAnn@n~pFa&SKgga1W%+*?j72!p zXgcLhCKQX{8SPe>6tfl3$1vMP(h-YN7A*{L%+pX+f!ST?uQ_#s~uggEaA16sba{L)mU?XsmYA&kjsB zBWay#0@rfhij~@lSi(_(yq{R2NDAiB$D93@GbQ?rEE=H1tM5TnbXV{|ey_nL6_Rcs z3Ifv;Z>p=Wr?biLKchFQE+KvVl|twHSJ9A@fTVyEX^nhCrTbS3ds}5}flB1szLE!C z#Ed@oK6-NQMvcfRM8O%v!bj!C>hx=@4eJK`sptvwyYV=TqE$zX72j2E&E*L{y>t4a zFn-f9aY+%eB`j&-#eq7}Okh?)U^ipp?}}tmJa{#>Uk;dGeeB)Hget>gNoBs4_qNOWql(B_0Ee<#C-n(oeKG>MS^sv#KkL@K zh|Wh>L!_ulAI3?AIEDfz%BR~>W)e?ka>Uyy!hdK3-R=UaRQCWr5ypje!Yb5o8;`5> zRzIZ8t`$=^U(y(oGxZ&ZSRJ;vP(@kE6s9xk{J!*2-FB3{93YvZH0m*4;w8)~u^8+q zgPVk^kMXuY9pj$X?^~k2^}F>|oJ*~h`3Ph&>R|R7$D{D5s>9P<^b=S5a%TU{{!a$~ zz5^C2oNvrm43B>LG4L<3^zB}|@jOZo#_-gU)W2_@HPaM{%KD z|A;E6=%P8}q*2}j^h65ydEzmKuAM2*JF(yRr<~u$u7T4gnbxnW9tb%>h6i;|?HT$=2 zdNC#&Jtl@AoeP1q1G=d<-1f69sPuGN^>b03l+Jkky1HvEX|wSSAuGp0)F5iDgqz=h zd&_Fn!gh%4{n%va*aSh7Hg#h~S47-#j2y{rWXS87A4ev(7IlS?fkBjd%H^>z;u3)W$dbPiY=zL&JN7N!;!`ab{q&P~5 zPf8Q7egRfSFCxBgn%CE@{})R`p#Y=R&da@P3Df@67ngq;?1(q6gDhGxH*Td2tbpo9 zaGMW8eRg6YBQx}1F!Z26`sY4-j6TUs%m5jJDuM`6_)u;1(-RDdHo2Ac(Fe~s76yk~ z-`|&!;|8FL_7{IYTdoj&CtFer)_cXkgQp5@r)c7D;R>PXEg(!uXKVeUzVk0;0sa%92ol>H+R6?zGnGDF zaD|J8fE~#r;A^wHlliin5d7=hb6zRKNES!1Q=*dHa}P8Jie>Et}%uH8)w?chNS zyk!`Fk2)H}1Qq8JXZ=|Cb1V_wPjB=iR9}dPH#?{j^it$Z?Y=AH)3QBrvvayYc>gFw z9(ziu{Ioy}v_%_xuncCDv9;5ijgG^;b~1)uIbrsAQi ze$dIU=sW8JN(IPhpIr}fzd_I?Zmb#%kk69Ig0hjHN*O&2%M_yMXRXB@sTMcwci2z` z&;62Okw%|VH0DMgHn{UByA~ep)>}D+4B}9r+2=K9ia+M}G)(y<&)cQ|u`AueXpw*+ ze8%Nlu`w1eTErv22p|yvgs8rWIPFTlx7L9dw80cCQx9AeUM#b%P&8BTl=cjKnw@XH z!UsaXkgN`1hT^v;EZuhKR`D@_TDOo;8k5kz84W^a1-g3T++V-{#JZC*VLiOJNBncP zemP+)#a&jOib&(M?Vjrnnr zH`E!6oZ#1Q0NHKcb=JD|y5$X`Zk5;9KL4Vd#e0{?W*0{uD$Xl@bv}1JMr^$8LaELK- z%?c`qhrj5KqU`8htY<+TuYW5*c5%@H`yyci`VSnU0R+k$;b>~J-cx1KNHBrs=@DHG z)o8V1SHg$>kKc@L&5T;tJFwk|1wh)W#8aoZB43Bh-M?`RNEzF-*Pd{AcoUrK^S|T=WyWXDRO9xMcq?Mn$xx@bFvdSCeXoR8F?B z{pm(WZg*6&W9 zV}Go)NDS80br&ervvO(wu5LBLiw49Vi>C*UC#~xi^)wLq=Uq1QO5f2aD$jl9vi>Rq zA2G@)O%Tq`^M$OaMjAXXKk;;g_2(&m3#RGkt{Z5W)QQZO8buJ=YZ<~X8OkxquAMAn zoRE{y!}cXJ(U$0iLE-&0>I^z!4__X}L^JU342nSIiAbV{`oMhwFZewM2UJd}(9lh@ zu_dZ($;EjelGr=Q$UjfL$xF9wThTjfqh-m@@ri?A)PVt8Ky8=knjx^f9q9c5;RR6{ zgKY(C>^8~r1b3P{<<4#1m&WBAy3MjkT!}ALb6#O6v}W+g%63`*=LJa2H;U!_>8gtP z1QT-FzrVH{Lw7I;7AFG<460dw;}ktm{rtpt^(79{s<^I{lKhphlG@DUm@?DYS*8z; zR{MI6zpv7pJrCUMP5bpxvSkedc~ zx)QE6etJAG>yt0%dq;bxWQBHWb?y*nal6N53Nf$Gac4@It&gWj|h6=BQKkC(N7I!OVac|Tx`5p+Gc#RraGF`tgVCKyPN z0!KD;LLqY=ohb764{NIi`t`*x;ZIioSL%THR1X z8S@G-V^c1n;*t0-N6aLW&tgB1I=DF*wAJ?xxWqSP_+& zTr_6irTxG4CMakXZ2pf~RaI;%<1Nwl3Zv9YmfGA{Sht9c$cuD1Kle{tbvs08}dDGmMo z71W_gqR|^*UiO5C zZ!r2%mfQkxT33qxu5$R3`K!m*9^xpLR&hxvGT#Ya!`|rxexYwNTnQLH65V1dT)O1c z`nj;%DbQBccOvbbW*i?~uB=`^1QF3NbW0W0fRPl==EG%S`Bu`)jmhiB-H2ydMIUc7 z>RVH=D54mMv_`_Y_^68#V6YW{>9h=!o&P2>LK_;~lAZ-s6}w?KkJSj|5F#E6C2CHp zTYEJ4PB@>eJ%+tG*<~$8J6v9px@ngR*);&BnZ>pHcnkTrOCyh&{o`NNnseyPG_npkBD_KHp=KjPvul^H=yw)U=IoX`N0WOv%N{ zBS|^;o_*fsHIV!yL7am<>6adC%9SpkKV7eY;rJ-suh_FDvZD*hCr7!6GV%r?^1R?Sh(A1fQFNS? zG;m^yob5-@cY@2r^}|Cb&Ta&w;Bxd*^dk+GZgh&V)BvgJNApQYcd4#gL=jQ#C&Pl$ z9gY`m#3^NXw?`>pv)Qt$oF{G&Ae}QXYya?*JM%{4CRwRnpdMl%ArhR$i7wT{xRCuA z4nbgxYgrFdVyRK>ePEKsrqdVHz_&x8BM zPKr){27G`t4P8u$Sr81t8=&`Ll)q4YR}0pxYSQCVoru=a0I6;?wGV7;x6=NuHf+p_Fk!)zFu5LfPd&9F^t`NE>66LV7J+9* zNixHqdTYb1>Z3I1f*Ph4c$nHr1nc9>Pd=$nw(oNZDE@)qAORy@fP2sfktSj zfs|p|s9ENzH(|rVH$y3qrN0k@{GmYDg2AYM$lTgs%{#$Rj(-MoJWriwN?~mjJKU)+ z+lD_w-h#M-t=`<7G-T2kZ7Aax*sVyiC)LLq_xqX9cmAEtl+)vXbH<0jS$68&7Rzj~ z`en4sq4QChPZye{(9aY{n2_U3j#m?Plik^tK@H%sUR<41)YCezSt+>sy7m}D zDH`mLiW;WFc5$StNQ^ux_`z0DL$ANB3s@!MLW@K-=oIivIqq?^JBjDf*X=0*Wd;==o}TR*?ndsObXAFL-T<$H8=co`yXBux@9jP z7q^5tpW|L@M&>I*G3bbXs$K?Yr@4uYFS3|3uRC2 zscT=q3+BL-t@xGqQS5jeu5KC=k5r3n=t82m%aZ>zciIt2NCJPra=?6&^F8R9t}J`w zsN<_?^T~HkoFzc2Fm4nyH73W4Dlqe^>r9U8N03<0=#4>*K zCQB&yvH9R`vM2tpP`ve+1!A8bF{Day=LQo&{Z|5;D24-vc6!#P^6w?ToC4ViCN_q` zM-kWvRq8H^aP~s0dr{$4=45t@*W9&7XknQo$8HrC^I4ojXPx!4SUt;`*89LBM?MIj zCjT^nUH&;Dp9H^23^_$k_P(<=9HLF%&}S9*h)A2hF9)$O5Nn&^4KlF&oNF~t&q=NG zj=L;%C*((Q^%BNTSjMw=uAC?>6R)6Eqv=4dA`%eaM{ikA7F55{?wKVKZ0n>25mTcxLi%XSHlw*mI`HC|@zWV8B_3)qrW2evpiAk_1iAFN{^O0z&L z$JNxq1<)UCmel``ske@b^6{d*hZ+VLy1N^sQ@W*_A*355Md=!HXq8X|Y3XjMp-Th_ zNhxWNkk0q{{_eVWy=yT`{R44{o;lAxdw=#qHDFn?o&`pp7jUeLscZIF8OSeJ2XENs>Z+K_@%lAX?Mm9%w zuh}Lcog=-ev7CZfb2GN$h#0^GTk`S5hsI2monoUpd(<0_?rds+knorso-~4)jDM9v$Di!nc2_mSNQi*kDJ(E zVkbwki)3aBgt$|yXS&PvP236G&nqVeoOmZn`r-DaSSoBzY?hjRqn4Q7W-jkY%Zx9X zU6RTH%~esgT&Mr~Zmp;zuG!_B)kjRB-&mXu7;s59#m!Rl2Q%LIn{V?+ZIyk&10;1Y zHC!KI{iju4>>RA>GP@#T8~IF^<~ zoab=HxRiY-m-hBm+h*Td+)1yxH{9c!A+}d>k9G_3;jBSFn>@@CGX*D^I`Lhl3DQ(R z>WyTQNoY1r5^p3G*6>E1vNv1+>HY&70=3>n$iJ`|K8SYyNnJR?Vhs=bvJ2(k)r3r9 zAghy9vr33w?3WE2cq#xkS@Y^)f7XuybjnrxfN_iNPb<>>I~9xD5K7S$j}SJR z$I_-pOv@LJCAoIsX>pa5ydt$Afp>}r6pjBS<0z|wYD3riU@~_!+uD){!r8GjLJ@RE zN5pRpJBS9XRtD!CQ*C?+qZ%SnA1H@iRZYQwvMOJP-0t{2xl2TCVGYX}O=yCPEgqsdA`t_^a^4;97n|<~D}h!CAOI{?eqXWb z7zcU%F|Fkv4E~G`EazFKySLT1kyx!wz`Bf$NkrI*af`#G7VoTo~wpm@wWjfM4Rw#__-i10FM%x>u_T5K-md_L|a> zqgzZ-q%D)EQD4x(j8T&qcP@%=gej zRxtZVUIf@v(pFB((mMyK5RfY85RNMn#D&)=#j6PetDK^~&R|6s*v2Ehol@6NsBohj z+j=Unu$ldig7Q72mx;jjziJVnQd80R?&^5xcW02qyHxe%ufImLXMg_e1@lHmLP`oR zIP*6Cf-;^l2CvahLD^9#jHP#)G;#b_s(t zNzy2mde3q4zTHv$eF@TFPLJ^zu^=%|uA!1MYV5-Ld>GaSZRsCt3ny0=)t(*`pP5qk1A-ZZQfmawF#!Kq;iSsdkm z#`zxqLKDT`(AiDA9E#%pVYk7|XZ!Pl-fq-R7TNeU6yfrtBe6{95&b>=odBCf2+HO& znFPWizC!OEy${b!W6uSqftzp%xmO}%h>26Ml_$`O!{6*Pb>(wtZO^oEpvo^LYQO5D z*?LCf*mX^{76SMr-M`RQKJuZLpJ}qCWQ>j6Loec{D-Ir`tIL}^j^)}9`&1kAL z2Z|t!Fm;P1hvecwN|1i06GWx-!lzlaxe5CNqtfbLe5)HI6{Y_yM!~r!pd%j=`Wtv}Y0sw5pz=UWe{ z5MiH*4?NSpV-(Lr*C*M zeOQMI4l!THO-n=r#GJlZ&Xav#pwwZ7pT*6I!5lC}cZL=&_tm!|hvp-V3V=Y~g&DY} zS6BpC?W}*c5#}+26rZp*jgCPu;BCDJe=ns0YDw8=4P`0?(pPJyUP|ua+?S!?DvEa7 z>wUqcU?5)MisQbHLr5Z}S8v(IW$k#q?>P7$p6MsZ*y$z-c1Z(U#;C=}te@p#^b|a! z&MdSUl}UUVNZ9bUBaU?_6rTQd6}jl!?L<9S`HC;kZyjDr*Fw86`%l6$mEjpe^mSB* zkbnAWEBg0WnEbCE`~UzDk@4qi37|Ee5@2B}9YxWqapz#YRT2q%Yl3bw0TQ;nNyzwa zir!E`M0N~;DK1*$TY;U<@me>M>oByb==Iw+e_SIgW}%iJbDG{=a82TLG7jTQjV75` z?X;TwFCxYf0;GBY&Ltxb;ar6dTFr-p8TF^B3%&niT4?>xv=D|?2Pr3dE-p`g)d)X$ zu{Xbofz4W?E0Jo5hyFq4#Lp7_DBn3qX^HLj3hh-32N|!ZXoi*wdX&AB)6>&o&P5Q- z&cg9i#J}8WN4?r_W?%s!A)&&B3|{`>dLBv#N5>4#n5>2MA{%YE)`sqT@M4kH-DSu3 zwyvG_)36JgC1R6NCwL#Qw~vuVhIdb}WT)7iAic%FD|q7Z(vX|8^Q45P2MeHhMg3 zj}Ld0y=INhgl1-D^TEoxwDJnVVZXLWGU0!x-E0Xu zO~7%S;=f-$(bOJ#l+&Bjy9&9oQ?WAvCFZKamhmbQ-tL4_s!Pd(j9Rf1w2xChhyVTMk#~2IGWBq$BXD=2GkGzpx*NC!Znt~@HCS~=r_c$1w23c-jlK zkIV6cAz%5APE7=!9%^b255jD2ey!Rq0I$8wCwvW=ueao6VUM!A!RykAGQnvPRcpPj z&NPguGslF@N-(nSn+K{K!%Bu?)`QLm7^(E8LH#`z6jlvoDR*OQmN|PA;Pc|Mb;4qZ?q@ zs|cVg%vJ2(YAVe-@`saJe(Y_|1#0N7zpDBOGomno!*GHR9Z|#y^NF!;(-zn0_Ry-E zE3$1xf$)M`guvurI8#z)c%oV|Nm1Rvq|wWE>n@-%%2ZGRdn4d}N_^(dd`$~zaHZ4b z`hX^4xI-ld^jq2voA06U72^kgh^XayPf+5l@Ge-UkC7xqMHd2CV7Tl}ZrV^6812Ve z7+(m`6ONujbkloEv?E^7j-0wW`klXY?4W|`5;1TP8Z*rgo4k+law7!jA(fvjy2%n8 zb9;VY{8-w)js^Uyu5(}8Og2yxWGt^wU6QmC z|B5@er_ZTt@c7viT4qW}g!F->g4?tsORQ*pm3pEs2~e$#6PP>4D_a+hET7o!gb6)i z<9UYA?%;<+9k9#xDSnmhyXo`X*iBxwL7s<{em|B62toIad+s+r80~*O)<&Dax40kI zX!fD#WupO=EF6L2+O=wLpj-80rD@U=-f*LOOv-+)4EmkA^wO+Yejs=L!DX`4UAIDt z(cpnE8A6&55V?hRUAu_Zxp#tRsY<0aPi9o)?1rOLUP&cJXjo${{Sa`yoL99;>BKW1 zSB4d8_l>H2dC8B#7mEyI3qCB&7udmh!(dlH@LfgV)fI!gpMkw~x5%Do6Fh-%OfeI^ zi7l6&`Y-@$J7C|!+~SQv^)1{Cr!F96vQ6Tli18s~)KbYgx%_D5ea*LYJF{ABOj%|5m` zHgqaZVwl&8s&US#&lA~EbgGI>34uZ%U-Cy+Mzh|7+=W$at0gzZ`TkMVDbYl8z7~R_ z{L61hg15+^(OGusmUZSC-t%#!1Hm`FS=yawQcYXkl{irS{-BN)m^xs7XiE1H`#R&_+V&B&%+laY~4Jiz}Z zJizlRA|p|SMMVpMBMKv*pjFzbdZOfK0Xy)gPoF5d3NDI6eJd#XzBPF?;X0d7-~JRW zdbQ`;>63I;bfk5p4&2#&&w=k`^<0IyO2EqB2e7;q%}ciX(sIC(wSb}}$MRZl4;q{0 zvv0$h%K@v||3=Ye%dInO2t%-W*?(eeLzfXSos4G1p5s=9bW}yiCQ^5dS!dJt<1L~} zP^E61_afZVmY3sue_xa?`O$1@%fxY-eCeARvK*LEwF0gSl(qYBR#M8phm^v)F&*6A zWEpB%$0gSI!lZF`=U08P9Iy(i~+8oPpB&R)UJ z27uSi73_Wi_>n#Eua*12C$C$ZWGg72XXG;mRH~qpa4mNhG+0OS%$u&0W=#1_a-<&o zwv~p$U`%}U{a`A{$`7KKtK|#OQa*_K&M++0K_bsDadvi9@N-bO@bPV+zJJ!j_k4yy zJkjq8$4X~%=}u+>gm`SBb$w*iknS0;WGUtYQZ%Mnm$>q=wYz-Q`1?;`X6SI1Ikm8? zNLuKtJz80Gy%=glnz}2T5wq3;q}2HZqs00-PuimwOB8=CM>4PAu=i*72$NYC2)Bj; ze^S*4ulWKrius=l(378T6v-?Hv$dbyfHdG>#p)Ta^iGv9vNSQgMljYU1^vdoXv~D! zsyPMM1TD?^*MHUzVT2-c9Et@T33)e!{4{ZQd00rX1iz1GwC1n-~ z7B2SKV_0FrE2#~KhNKhJ)?P~_=?|=f|d<5H2v1t^;n4aPXDL(SrX$k z!U$TJHsY37rHUO+x`|F;XKldRXOa#lFybxvV31mxl>i+u`!jk~dx7Bb0iFnYm`=)d zL!%01Hc4_I28oe1f|>bZRX;P2UJF~g9C8_60VEeiOlv~_3v-V2EBWHfn8j&qzL%)N zB|g{l**1_YOoQP-Snt*IBpIM6BLpIf&`%KWZ>G1KWTLo#zP6bK%Bjjol0z?roTwuj zEWVq(1sMvxL*cQb>Nw{-Ie)QzC+W+k85&K4Pmv*oGQ!%RC+^5g^*kl-)vV$!fXNvm z)aRXlVry@fPMLG~H6JGu`iP|o^QRFKm5PhTwCwGD;IsQ%y(18^;+MF$r#KRYfYP)6 zUoQZu8t0LcS}#TNv!Y!jef7T+&)BERmssuUZxo^^C(W?)8r~CnU_())`7vrDCET;8 z1O2d@ce!haEP%Fy6F5J(D(3fFw%2odlN4ub#R(1o!Q&0pvH$&xH26=?8{p%A6V?mx z&RjVBI+%o;)_}i}@ghz1!;EkZ0RHnFEvQM2wF$X`Z5MBhJryUCg{#5S9{z0m@TYuA znEwYT>?c;mYgC4d2*%o%@np1Igk40hUN9LlM>1B2Ly#uuaRh1#)+y)~55nQh8IYfo zpKYmXq4)mdzyT(rqRPCb9^+sQ2^W98OQ2}ryECC26!e_BVmMbhoD>P;QBcO5Skx;+l#j}4 zuZ~nMwiUDdx4p-MAJN7G?zqQ;j;Y534sbL>4oMTGLn)Ot#F#?eshKK<7%Cg_kT;}| zVJ;OfOAOgB(+$uqx3`65$5Lk1G6@Sc!QsEDt!xI!!v@ZNJVjP#{zex0rsU_nrB%=X z+`Zb{Te^3!HJ3*Go>wgmxE#+Wcf&JB@CR$f|0~>cGv*u2>4=#i|Bc*`4NV|j4NYOS z3QhSf`-qcJD)T^|5qc_}@wD}1GqLo==4|V$Zu1+l0@oqmsQhGG&X>q$LXbJGG1TfK zB*Ry3lN|ig85IgJjdw(lW}+BxVyYc+1}g^X=CcE@Gc1K1ej(W<(JY(g{GEg6HNO_f z#!kXWHx)d0y81$_)^D>WgzSBu=_HXi8l#~xJ$_81iB-u1bZtoc29sP78?H?;y466B z7$*stsHG{!i4wYYBBlSZ2g7Sa7WP-#=u4H`Il&wpe5@S~fC1?;JV$~s*AyAh7@lfh)D@09?N505M5H;PQ zwp?kAt9{jyeIA=NOAMYYwlp0gp?oy~j|>hchHK!*dDLgbf^?|M5|o2Q8Ut64up z>YPrN9eZufTX}hnWoJn`ek1M~jh3gwtx#o(gtkGg(w!!H|J)|Q1P^E~tHVgilYI;jZ>4R)HYCyabo}!zhGP4M)I+y8c7vE zvOTHAkN&!E=r?**F#(kUn{bJ}vnHp9H=LQe{Oqyrs=f1RXq~%duRT<|GR#Q=x9kL1 zJEz&>zlhzCGBA|Wy-;ot_er(I3VPES=`bYQ8>6vmJDq-9`*-;l%=gyUz4e^kJ>Ue# zJ?z@;F!-FhQv6Z0q^c`sG@~kR#3OpD8)T*dmUaDB@LWA<}fU^jH8uJz&=t9>Ly+i(GaAB~$RK9jUxho5YPU_Ve?j0LWTw+MnY% z4NCZnlrl;`3OU)%Rhn9mY^wg4J|Je(w5CAh@hsAj;Hyn{&B|IV+u`qZHm*Q!3tp+8 z7y^Y!Ke`JG;Xr4w#;fJlv?HSmlNv|g+0PQb{-(|g&ZdyYPf`Jbt3T~-c_J)u$at&^ z$xLgUB>__^TUDLikl=~(L;Nj%MCjj>S+#vJTPfzMuNCWwK!?+W0gt!))B(_Lx)?RM zU6p8}SpT%!-6{a`DDCXXpW9n^xPY_qBO>ta0x@`^H?6Cji9tNo+Viea;=+O7KbWE^ z+A;<+O-HrLuht@MKCH*sh2mZhyM+CmN43FDQH8lk|NQ!0{(Cdrx$}|7QR;!svGW|I zMD~J>EhmfyH;5hp6gE}i=*`-#WoF<9*^*ILR@Rld|ETXT>XB_o{YomOohj+7fG}&wq0TCLXCEF?^%8CUpOy+T&UzvrW z-9rjH@K=HN6B_W1_f&0>*==?N*zr+OjS(a+?BC6Zj;P<)Ya*8P)C>Gi5#g8a7Fe*EY1-cI=gSkOo%A_o1O zi9Coj9h2RJi09XEQxJryoi%(bZ(c%(I+f#-9-we~zYdIT zIAQ_0^@CuID=yi@S!$c3RHPtPeGb(60&#u*N*+p}by+VN#6xFp|6z==Q~;U*3HwV= z1y4q*dDGypw8e0TZ&8VrMt;@Dton)FAP9a$C@68TF`51z^M)(eZ_)^GnAHqV8ZgO5 zNZoi8aT+sN3gE1d)<|uNkYT0WaQ`@@$5=E@nzi4t3@Z8q}00{)Q zqTNvqn6f<|yRN)$0cKgtI%Q?(7$l#s{$=_|-;AQ=SGIJ`Tz zK+RqohL9JOt0vadjv$nWGdyj2)WfN3e2s>m6)L@HU*%8**{9ZHi#lMxR+sfJ51tQX zR>H;W`EPrjdQ|uuJb~tlk0#ZDw!ZZqy{e5WaLAAXEfY!9j5#;FS*vUn&KtA#&bL-2 z$DTODx^qAJcMYw~rQW2OMxKDvb4Iea*ZXuRwd3|Gqfry@FmgnwRk{^K6&CuqZ1Ah1 zm@A1w2}Mp)%A=V(u;AV5$)I6D7g^@9%ZL2qHVO+C~3- zDT{teK=KFsWt(aNp}4{tv@;V#7^x8om1_Tm!t=IOEvlwe8Y`EHAwIl#Yb?|5Xt9ar zt_8TYyDv2-X&G*WATX9YgT%~>b|nZCnM&g;4H~~gPHs3sW3+<>N7^SeD6);Orl+U% z^!0mB!_f^1#hVP7%(Juo-TXQOF$Z6(a2U(*?q@Wu16a8M z5?HrPzL}6C+-CQ_&ZE$(0>2_}g`)#(k@gf`F4r)GZ_(8>xzkkKjooECqXgSzFvXhJ zW3BofZYP#yGQn=aPwVm0$YOugrKjT z-|8LJzttxygJ(~8qz6|_F1@ekH-++=FmcAjl|UI3C{ZL^^tr0tGu z#{8nZ~)S$(^l-iW$q+}pZj(`1le=w97RmgJIBq4$6L;p!&rH8W-n^1=l%(R%jsIh#4fMD&t5AG zBJJ^M3U3P+M=wvCQsW79ht~G4u{Rb5+2`2zv}dF65UYBB>I+_1gOK%9^!lT?0=!5H zF_>bw9hCxhbe%&I-k-;f;$I3!>&U4*Da-Ue3~Nq`H3Gzh*bMY7Ed2$IcLtADl*Nr@ zv$@e2odY+1I)TJB1LDt6YVmxOl7m>UVIj~vAFGv)+AxZd>n#LY$pK|JcOcexI6YFC z&Nk58bU#ayzA6;8+4_vLyL8V~EqfwCC-V=3?)ekz1YIyWpb10-7#t5}ofSh}2QUm7 zd)TMH2VNY^*5Ftx3qjL~=Hm2Aow|t)YUonz+Tz;<3L3K5zTotjL3xG8XkGDB~SS$1LjH3IO z1?L$Dhz}iopGPSI(VFG)-^WK`?Zxcn5W->(QYMv`*=i2rgBB z5ry}I%z{;vgk|63)Uy-k4@LWTv=j|*?W0(dm95>0?+f=SW(3830EF;<-UU4x%vLy` zku*!^J{ z&tI}WIgXk8*`v#By5;!JR$>2EOG^S11j z00jk`$|fO=atMQv(0k-F0OaPO{I6guuOMJrkidfV86RbhbHLt3ZZ2K3y`DXzGWE~b z9A-L+Glg3;FTB(LGBi0$Fb^lrWi~&LND@xA*pwQmQ(j8WQ*jNu<)OXXqmh@IOYk04 z^iJ#!uwv}TKgGbs*C`c|^rw1t!X(Ecj3Q&dJyIS~Z2!(0u=ikKDi_SY=`miw(>PVi z`llkGRFEPan`#y))TkCy`Mt%RBoM3)&AMy1N1{RNOt^*Y>{&8nrN7iv~} z>T90jB|JlV=gRkaF;j(I!1qGfHqex}Dpw2nmvy~;*5u*LffI*gDx5m+;Tm@MQ95$s zG%pq)e4Yx%zifqRB~vJWbo8l|4Sac|6$-rqtI)SaeO}NY{9pi9)D;$PW?-b6#8O%L zdr4r;iP9_-HQ1Z>xer{^k2RgP(nP^JCR*S+O=sw_oP@yrrq^hXR{t%N$wQO-ei{c* zS~pxu8y!7TzO4ZHrF*7e3XrEN1Rmd>>VK_NtoQ{6F>vGs_U{F+fi)xPS)Tdwl3x9v zPy-KQXxSFjHH~*{+Mb*Vb0AK)IzJBoZoNyf<62=dJyRR4%JfGJEdsxYLcZQCI-O0x zi#5`OFr5>^{X)qrl*YX7{#~DS0$vnnKcfMyO0Ah(AWNUv zOs)X#M~kV8kI>&ynQYABV#!MxJTC?r?(j=kBVcc-+*xPvn^XGwmsUvZcf6ICev7dt zA_pfo`m+IWFpWzG#?BBE1M@o+wS7KeTt0flIWB@1ZfN>Fida1g2-NfCqn-N*}6T z!=w|FEg@?lE%btR4_)W4sMjEE2N6I6%gEzKP$o8J)^C;Z*ntO4copA{$+%kt)2cRi z$6#J|!V^?wdrwzt?2ZA?qtAqkCVdO7AI85lQXv$8j}TMS9{^RN96bLq)Kp1_RU5=A zRHG_gnYbq})SMq??whog`Q9FO!X{r)B4Hzm8b&oQo) z|Ne7}u(ju(_wJwvLG;M;({KE*4)HW;8%Y1VsZGpw_dPsc?b$;+-qc*h6mQ=oJ+!>z zAp0(b;KV)9&6tX4?cuV-H#1)G?3-`)yFxXY5dAjdPdWw`|Hg$IT5f?}#zk071BW?a z>XVM8F|S4wEucY#5NUAx91R}u;1CW^$***-fF zoHMHAaOPj0M8sy&<}PyhA2d*sOx=Bt&_A?m0>^8`?ocfeZ0v9 z%gOS*#<>ie+!eL%v<;gM<&4I(XS7xm20vozPIuvKeK*$?bwL|tt5y!3wq+szp=2K@ z6uI%q8ow%BA`cR1j<;0q9E!$2_ainNY|VjS&|HTopwG4qTLyz?kDjOLN#HYL+4+Z*;m&-ze%xDWs!hl7Vr_hd z-O+}>Bj?5$Ibn=LKP0~U;M7CWNU=T1TdP7x8Ap@YHa?jST+cKasjVR}2>lR=vu5$h z&w+p924~_$#}rqm;vcHzp-;!1|Jz?9(iSk6!_dg4HFj_LU;bcpiLF@fd$@M-)%8F+vd*e{JKZj0*0ZXn7RysW>C^>;{p)Y>An z%-3rfw>?$bi&$%U4|pqI-@jVSoP3OC+J)dTg8D@~QW+Qph>|L$(6e%pm_$8PLp-lEUF0&|%yPZ6g9?LFezia{n%EJ4FRZOi{SFh>`Q?!BP+VSB zwY633FCR$1P%S7Z=pkqs9}=74%VJv7f5h9&h~kKDITe^-r;$kgy2*0t-#Hy>&2Gc% z&tLfl&x>!3^DcBlMx4Chmy~CBQG9nKV$L|>qC8kJe~2g=4s4!%?Dv9X2XJ^yx^xy~ z32PuJz%{`I4S6_PQKAe)RH_iw!WHP&b&47&!S)g2^Al6q=Y#de^&86nF@&J+x> zuKu6Ew5R-WpPK}u6xwFwZ-KUldnI!h{lLmgCs^H~`!;m6jaoe=RViRkNR{#~eQ7Fq z{l)9fGscX^y)Ri0qpHqrw>0V|9;!+M99f0$7KXR-TTahoNqP#zRaE(dQJE>#8wS4i z@$urz2RJ}@%l2w|mi3cqidvPw^gu+z+EgTyA)qlHCHXVSdDMK|#C4cL@E?XHg#Z~)2Yog1O zX@+nh+Q{8NaUBpzMA@Ez6A9eZ6qE83HgtO3zFrlxf?&lvR=-0c8}>Z=_Z{;vaVlt5frg`bTl>6V&W(v^Joc()R&|YQnYD zAqo=Cj2yY<;OFm1aOO9NE6XFg%RzWX;L7qMdZp?l5>P@e&dG@FHJ5B1sU5emwZ|PJ zK!V^;J`TktPYI24V}FVQ=6FH~b?(s5Y6It2X0eO+9)J3^09RQYCqCY>JxrP?j6Wpu zb168Svpvb76%k&=polj_8e@7!xlync2b|)T&7$N&$W$q?$8vi>WLjekDfZ#}t0||% z8=x}hn=v6rTaP6@nxzXmG#IdFV?Lw51IM;>!oO>L=>=F8)<14{ylj7Dx4tj>Y|9zz$Y#n9g(0-*D3^4P?10KNq-Vaa2utRN56d6GCrNwwJ2_`c_y*E;Z z7$k4krRT#Eq;4!pMw0V2-=L(|$LcZ%^-}HxV6~k|s~PhsMcJYTr?>HQ_2nBau9wXy zRGoEjJ~M2z!u{R`j-c<3)<3021{a@&e|<~PfonRsFxa~$OJ9X!SPfb3G$!6pa@|R7zoO;i6i7V>n&JG zClrvoBBfuZV&glV1nl|>cNcDG0`a?Ies`_f{mwNJaJu4#`LE#ubr7Otba^|L$jA`B zf~z&(tj;4F&3)F^1xz3VLiHsnR24 zNft7yby@L^yobo$wqxhB$$LatGT<_|>Md>lixPmkxT$Ue__ z{&PS9N2kAIaR$8SKb8CX#xmtqNs~fEt=clq*}eAO`U4;TE$nM=9!1Bxt4e1d)<_@H za;t^n1o7WqkJ5JdJcI;Hu7(yrvVwj?oF-Od&#{Skt z5jFA9vc%poaL(rZ0=J-wD*dC&sZ8*OGg&LL(GlY1o4*xGaa&$fLv;#$1sNj!Od3H0 z5DV)^Mn-J1Nr3a6h2HDcTECko#k`4d z*81cV#4>(!%+GzQnYhZqc6lu&X?;oGBMk-ZpAjHud-6&p8T;SG3Z2-f)mS$Gs0zOZ zaHW*?L3)!tk>`zu5S_yLj-R1|;$u#y^ZxUM zWT)S~^?Xm5|9(GU3w;U0_j{hg7^+FV^fefjDe8tleCt@hg;1Pm6SC67nQU;5<8Ym5 z&CO*-j(o=^XVRG5vN9)v9%7rf`ux`_-8d*+l!fkgo`%tbKTNoCtEzT(oPbHnC3yDx zpCS8CLR-T1vC-8jfZD53y`d* zm#KMh+ntmL{ty8wJ|JDF4ygF>BOJ|ejV zrwJ{#uq{^p`X*&3nN;`05Ych*`InvZb11G=jLWy$^1R!^p~UlUI-7hIeTc2@;H1YO z8wDMZ?B{l3)|3Eul}pXflueX2Q8;0(&3eK4yUD_pudpJqe>yQsG!nA9&^o_bj@nw; zsrBsh6%V@x(@8#H0P+Kk6Mks;5jXwN@?{@|d0pZr*zSQ_qCC}_xdIcZg6jOoj7DoG z4HEm7D-yZ@X(3};Y=NFe%nrv&mMwx~hfME2C4IzP*Z3`Mh$PaD%q@|JMtkH#!20V&MIX8!Zvt%xJXwxt&x^zQr3t zjI+Mscb+zC+%QwL3PDP<;v{)?MvoI2F#EtM_snFlD&Yp$CDfJCb#fYyPYb=Vgve=m z%}4Y~cR7#uHWIK5pfr~@)TUl=y{0w~I}bI;ZxEA2RzSZB#1$Oqe@^pfrtk1+veKgr z!C52M>&r9LUeTXvJRXd?apDhI+05#EkN{fWBm?mu=@NkYnSWQ^kqb+?iaXn1ryBlY zjIUmCZ6Ae1qf{2FuJ*V49@|{(0Tsc=tgqdJNjA50mMrZfMv?@*nHybKlyfQQmqP&12IiX(ryBj z^QRp$uqpn?+dl2z+*f4Z5=v9-pak8BB>US8akAK_79HRymwFpMgQ?;}pLZbs*Bjn) z`+ZgV#mL2C9lAO0Q}YLPzcJBNP~~%w@qZqlG(6j>?g8cWKh||of4z+ha1-!KT9`f- zzx&V2cI8O#)y=VwXBp3rixfnUjXOz){qGQ%W*QIrf@IqKs}k;53gTHbF<8=j{(hjm zt&Os?vl9kz$o_+V5ReUA=|LHRzBr>aUc_Qf4~-zlRC9rg?o^1tMDlON)D#Mg8w2mq zYU>P&v@2f}9j{o7JO-p^!G^6U1E3BD{zD zst$N4Zwzs9Z;Lc3Sn!!IhoT;0z2Fi}qa6Ro)5r;;$N(^vU z8eEQkGz0+=urFvR-(@fh1xk$yN(z*}7BHg{%l~@8U_8+l?uS!j7XtL9wO$Ljn_jX2 z9y4t7Oxbu~k?q-UGpQ}zM0wpp(|_*$T%gX8*Y#|hiO&Yx_Mu{};>G3>3#=JEPrXs= z!H|0LOix)tT`zS8@sapyt*6Aqd+Yj_|KWYu=G)AtXw@GNXus&M$xM>N;sJSO0J#6z zt@MuVer_c8!;l7MeUkI4zLSORJM;4m9loI)GqI~X3Q;T5*?6zgdU4>fsDfo6*nUJT zUoDgb(3zn^*eA1as4eMe^2xy|!qh#lfqQzr5Id@6ba?Z%HO(qi_jf2rV;wbQGPDne zE?3mwrBH(G`_L4&-I{Gy-y7hB6~$`;{h(xJot?tE!M_v=?x~oXG#kwm*ue@%XxJ}- z!hP{UFsNm*oZD!4iU@UtKoWqGjQ<&*J=w8~+TJV^o14RDH}ThGs_yiyvuS9weEBV9 zke;YFv(J78L!pn1&p~E^^C8s-?d5O;r?~*&Eqnbc1QlSO4}xYE8^mh=3}*v7vs4LB zTijw{qNgBTuUz%pIk@rDUy9`ONXAm=O9-dVnbJ|yL0MjV7mTI`F{tz<*|?+5s%3S z$y4j@t7$hT|1ByJj`-&>Vdm<^w8)tQE)}5#2hJEFtz6a zcZi|xDR{$D>pGq#00SZr)HRn!OR;E}c-8|5QuogC(o$=fY9hhwl^uM?*>=)l;d!4{ zxPq-P9a3Mon;xw$)b(YUyQzx4>`k2?5i>QG8Z(D>BRqaG{otAjAWYVj9=VuLo@RIH zCZxUWBP16k5c!ixUBI_XmwPg~FEOV{OoAJtAfwrqRBPOf{4Ks@x`N7}KaJw1%*``E zY&}{YE%S_gaZNm#>Rb@E?oclj#}dx|mQ(KEv4SePD&--6R6hep3r$(o3WeW^RD0MH z<@Uq+kKKpe=Z(^5g5@nV3TGcoy;yd7#}0q28Oa7;7yu`rbf3Wm(}H&dMnYsaIKOPq zwpMNS$e+kH9?x}n9`C>0i+^>J=vAi{k4fETmD7?%>uDzy7kg*Z9@YXz!yS0jj8T69 z5ODq0M<$1MkRM+D!WWUG3R?3@=0&ZkG(r~@?aMOl%OgXk(n&HKy5e&nzDc15bVp*tfyL8uPGUYhpRCj=6cUIC^wJPOPyrmm@Ut)M|fm_>}c z`hg!-c#pA3IBp&k^1m^l7n}W z8@^VHJLK_Lm`+u#|yF$c(xUkRsxHlaG;JfGV&@Fves7>bl<>! zi7N*6{RZN((!%ajZ99EGB@;;9%oBqB^|CYNYfW&hQ}u%w5P+rCroYZYmL_8b>E$i} zIk@g;IbWGouGj@1LbROtFK;9L_E z4?1C{S$LE*KL6ZTwAeJP<8I@hBy;R*g&zDDXJ>C^rDv95kh@w5Hal`+u*IlkltAI| z{3j_lu<^(FECkGq=E@}<>Va!G=H4gy)Wg-@*C-_x&_0eT?0$GW(RE=oc>oK}K6#_Q zZ+WuVj1{#cpI1~4lVpW|;p=!kGWp5P`s5%+!kt|echQbMN_zW~^?AG`n%kcjz;UdX zq#k9kC*b5X2feBZoywQ3BPsqwl%*#-(WDP=5{e(L4CX|w<%s-2Wr%29cHziw#4^aR zR5(Vq)LkBu!vfFI#uqNQK9O4~IgH`i|9YlkF=0p!H^Li_81RZRVdn54Vfx9&SmS~* z_#+57-ASk5WO7!5r@zB9uYQc)#9lJCP#ySl6gQTG_f#5~b&pMnO3YB1jly9v z?^=6N8*9YGRfwT%XHw`lfWaek#$}unh<3o&k@S(eCf{-Y8K6WvZUW^4X4Lq_Z+WDG z->LMA(l}Gs2?BNwZ`of92YFX+Z~=eL@%3*};uBdFk)+SIiQK20q6LVW$p_brChxRj z2MwV*T96q!Nsg^2jN*+j#j*~3E>h(LjoMkShu{C_ut)JRWX-ty3GvH&x5f6CTi?c) zGR(V|mQgi8wygL7+1H&^tp9NMf2OeJ|E6#;e(O?gKb)6VZG~?%0n_wtXHf;AhUA($ zrqo`zZ2evM-GHw5le{k55xKJ!qk}c%RR99^R3bX8EroZ=pLOw%vu6BU1+t3*pEtbN z+F$X-Aop#-@fNNQJo-p-ank>~f2%jk63Z7!0pm8auE^o+F}cWrCcreZ7Zw$d1z7&z z%vG$xoP!mkuf>y-hz~Wdn2P#98B<8_u;e25eqqrHyn-K#0oo>?(zXgVfnJ$fk~T)bEt1809bbvxU?ITbglei4H13WqU;$=uSKf)k(Dk4L;W}|F4-tdbC ziXNuI&rKcCRzgJ?ee7%rL!`id`&~CE5Nk7YsM?}cTw(@9CST}-VMyod@7$3ma3go@ zY4iRaGow( zmV8y=cfVZPkGZu_WQ|q0Fb9i62G0!l*9xIgMrnx*%A^IPRcaYmOy*s<%Jp{(qXxV| zQ9#c`tTBgdqWcY55eFHwu>cxi8iN?7BlAb2jB?P0`b^LOHz{e)|Hsr{2SxpO@Bc8d z(%rGt(jlGFv9yFpNi8f03Q8*7-JpPkbV$iA2nYzcbfT&^T7**8evEjUoaRONi)1Pp?ErYUXy>nM>f=Z|!& z&BKQ`@nh;gq1Lr#Dx4fs1GPhtJQOJqeD=K_O=6bF!Ck?6$v3^Xuebr@nFNrvM+6A3 z@y`v!Pne%jgcwePst!vkibn6*0;4dRd+P}mmc@xO! z|NG}~RQ1|l$ML^)gsXg?fO`pIeB}n0wW2jLVoOjoF%ERXv$IZv%^*M4?14a>MyUIE z{{#q1m#~!MqeJQK`r^u($VWoO^a~nZ$-h2+>FH$`@imj340lcm>H7B$gXT|7QB%K< zgQ=t26l>x~X<%DNrQ>ruE)BV?)PA3fDS!n;Jq~BQ**K!*bX86%q5uqNj9X5hpZzOv zs$%!?aKaP_lW@SgEd&mV@bj|qfJI&5H*uwdOcFR+G*i_Z52kf0!yWK0iC7WjkfmbM zMJN44DGW z^DW*`(qGhRLvmr^D(f+WDJ$0xCSYZTX0#qz=goy8qsb$HKK0)gNKK0Ms|(5YmxI29 zcgc1=1B|oR=c}l;k+55lRL>;DSxu777)E$N(>sKT6cklQyoYBqC z^Mppk*n)AixvRU%Yp|WR7s8{G_WGSIBLF)`R4dWBTwe4SebFvcxt~9R7|WjAhMgL&RG9(FLOJEA=BP7LJwKB3I4D!)JBkcRrjSJAG?EUM;z60> zu)Tfm&XTOinY9sRx2wb15ITihqTrT%hIw&d5AlKi_P{GCa_-pQ(yaOI*zLvPm(R1F zQiDtS@IGDp%(dZvmJEY9z>=|0B}}syv5B!;nFHSKZ2Up4GkBR!;y0=Mu(*j`gHAW| zntaN=?B$`?$P^ZWR|nzgZcqbcVlr~}RdohUv9yAu*|#7xfUmJ#Z1tUOdB>l`EI)V@ z{vXUiM~4tN!Jtc^NYq?Ww7CD+$U-#EX}}{Pk^aVlDspyiZt!AYSS>JOaU+{k=*@)% zwwbtkKZ(ZpXX(arCg>`4gV^7=8Gb*Oz^J**cB=SQlX?T9`Sx%$aor}5y$kYad~11+ z7AJpGS8|^W)Ctp6r3F8gx3q7!yR2+|RQB0#laio-P$#NaifAzdgWGLI-1;vj*;FnD z%&>%6*_bVInrG80K6Zmybpzmyu8iG>MzRFO?@K9Yob-G#th19{>8tNhEGB!gMCQaB zcfidmP>WYqw5gJh(gfLmf|QmL7L(d^w|YM$Jd(PPTGW4t&Daqt@cBd2EiT?gkwZWl zo~w8fUkDipIXjt)>&0q73}6DLhxva2cHewm%;UIF+J@owsm__i8oxf@*O@em1(fOw zL~yYZ zBeK`_R)2KkM_l9jE8!+B<_++J^jQB3@=XZ*|}HERL*!8Oa#+`DHZqePoJEc zRn>RY^eaUK$UR#dGUQMkEuiipn(1fONZiGjv;j`dt%nS%HCpYsI@6wlC3w1tD7+{J zzK0!YR4?Pg-*Sg=z9`~R5PEDUzD=-R{N)S}sDh!1`pGtzH2RjeG>+GAVH?{U<9|J3 zRv$j7GRnM7Mst!YKxSj#0&=@SequtoyA#ig{`^0++cI*<1Io{ew-Pnr2Y#TNr6AqC zp$p8h?wWB(w!PZ@mMMRQQI_;)R3scQ+QLmvg6?-Kn?Ke1@100D?#Kf# zB#ZgHD?7jj;vR$n=dZHEdv1sel<3oh-;M*h+};nFmxs|9CIa(I3EOUT)3(S8BQ!#A zrK#h2&$E96-o?+~6QtJxSy~i6oF)~!;vV+0WJ39gN>KWQK}{e2rv}2pTI17!0X8x8 z;LgA(F^`n?93JYQw%DY9eB>lL#REV=Sb#%vbEh!PpP+;e z9iY{-WraEqc*edgra%=h<2Xezp+w76oCnn0ZkG+Lg7ghrXq}+N z#7ve}LX$tN!8Afm@t}J9t`8(ZllbFpXRi1RC*t>8C7%IKu6b;#6DXX_jkCAVaEi5q z9rQpJqI$qxm2BVIB9Ae%(Ck?Yczge&;K+LK+hfGDmIL5h$z;Q{T&E|u5@@NT6VQE1 zMQlLGWOoz59KVk0r1_N8 zH1U|nx{-c0$)=~8cByZ8V-b1-M-(2R%*05br~Q6aZR!##d7#4VzJ#;PV!YkrJP(YtvZ$7<+dcYnP5Q_a*XWazs!TF z!%1IN=b3NKga2LQ*1Lf=dPD-CA$XW(;AoSz1l6JB$Y4K?`C2?Okw^3N;36jpeAG2H z26Ht1c@ymIL-)GMKLIDDt+IjgIawy+zLp8MR>s6We}mu>LJ8a_vjOSy-%=!(gRg3HdyEuTLod3Ccw?Rm|o3Ex91R-lLB*!=+ zvI%Edp=3s$f1e0s`%?J-R*W~gc?j{0RzUp;KLC=kzSOqf2)xLVED#T5_@MHd+`c~w zN{t&X5XV*xg9~E6c*+T6*w2Xom5(FIC771`A}Ar;VzD>LSO|&l{PxDMK6x=r#39}w zcRq4ussg-Y3W%>oY3~L7YTDhHvv+0+JSVLM_T|EfBK@w}}`+znVO?Of>ao36U7@!!440w3=g_-VL)$sl-Yh)Y5!DtQ=+c_;?N10OB9= z)Ram>bDh7%hDSC*;OZqu{}1vqC*T$sSKUFnFVv4m;?A%TD*$@ox^Y1@QOT}kign7C zx8wut-!b*yh>Q2y{dWs|nosK4|I)0Jw3ESCJBEP+kN+AhKpt&NGC%6>?Ds$d^nkL< zRaj2C=6aih4U_w}hp!9z6{yoi9!0`|UUu5J`o|%!q|FUO74s$CH%Y}rK*uHfAWZ@s zR0RFx#x%ROZ*(+tVeO&)aK$GbL_|UOBz38t;OrMEY;cl)bM}w}5PXwIN5){!4t%Hd z=HnNxOJfFJ!=0%^jR4<5bw??1prPust=7G!2i07mlZ0fmKMJ=+A!Fu)+uA{Ym}Nr%V2>|4wR~<;VJexjP{^0#ue0 ztG1g6ZNZcVWymH$p9b+hcwdro0VcFV=lrJlUVcAa?nN(AJrwSr>i*VMf~Y3-BJu!e z>MOv>b%QV1Ok4C15N+q`Ur~}UJ?X}nX?eFZJ~I>5+A6n515#>!K@yzU$eo!qYzmq) zHZl3{yv^*}OXBytvmMj(^YH*4x457nLcuxBnvV{DYT7I-SJk+q7cH zB@mG-4JVCq)n+c*;V!hlG7-1& z`QUtuOD}phEpXy5o1{Z%J#ETY@Bbk{MpIs4~Epdp` z44Dz4V)oS`m7su$3^VYEQs{&!nOn}-G5dkp(NC9?YC`~+Q|^9a`*!SLgc zpkq}QiSr*SI-=Meq0<5Ht{=O12JG~_+67K%?$hqclx(yo^ zn;Ph6&M}WH0+*KeXGi`qBC+eMT&i{0&T?KtPk7p_3?7XkJhz5vEw|%| zRnVc{vq+jerQgh6h`wXA>Dj{0U%9o7JHDY~q*aW~n<)lt2_I~$E>W*Rm-fh~@vOpp zScUzfoSjCePqMyDvTGE}eWU#N`Ztg^^YOn#YrrZHXep~D61%iAd1q7T>X?bD{(oM8 zlY?6O85uyOh+nuIz!Uuk91SnHZeO#7a900tQ_TC+rJoZ8gOe12IW5J5G3zOoqsT({I6MxYLGl-|{q+Nyh|J`cEnH#v-N(!yHxhu^OJRM_muatx zSp~kq2Bfd4+V@gjLZ_7v`d6>2#PNx=9&sl?JqBE;609S)&zUq4pZmx%IFS*=Ca<4j zjh&c~(JQ)+hKy#9{Q717Z8kw-*8jj7LkEO-cCF()8a=v**Y-dJ@H9Fo+%aa#KO#RK z@vRfgFZTyQSGy_PiF#3Mhqd})-`OZ%>&IhQRdhFvvEApf{qITwh^vvG!?paGGx6@l z^;a{hH!;7lx)pnVJSaT<9TKeDD6+7_^4ABRwBj62CVPTzBk<*O#5@(9A z!hcnZ!(QCuq;i4%)2kqjBn>#e@Vr66;Ksu^U+ysWus2IS@5K|kgF6CS`hmBeoyPnFUQo6|;FJGgLV-8u?jW`v^7GSE;m=SSfjPl?dCRBI zAGE*)m-M1J6X#sNs4>kzK@*~4d z^*xg&Y21EAWFezI64{niQ1yx^%8a0|E6oa5^%;3U(Intc4gDlBj!#GKvg&`(A*oo5 zvuhZZJ2>>OZ-!?n%`%BWz_K1QGJb~Lby1t+>F3apYKlt`v}2wIuVImZw0PC=JO5ZT zX0-uMvE4Rz!TUb);h;N8fy+Z7v-6FEiKAVM^1tp>6>t6?>I*f!qHhxrQBteab}`K z8@l??iSbCTTDH;57o+ZBRDZS#cmV1m-fOR3pX~VFu1sUXz-Q$3wy}qGk5HeAODeAig&->%2p264@R;uIJE-sjM1P(S=L8ve(%^ zdI{}fW&|0fBz{>XfB}9H4f2)@V~n=9b8iJ31#5_~I9=A>`omY#5s!K?_$`(J z&Wo7{D?0^S7&Iw>o3Vz^;kOJI(nkA7<*8ylO#q{9Mlw%bO@Mz-@KAJT@EB z;C@88nTaHo@I6Ukl1(kf!as*NXN(0dA2thx!LfUIRO2px-AN`KP$obPs4y*j@r}lx z*U>Rip4;t(MZ3Ff;5NBk>d1Lr%L1Z;%=sH1`gmD=`1370AZF}n1BAi9&CSLq^1+}! z%y8ni!m2zF2lln;ho}FNJwWnN&Eb1QV$6m09ExW+Q^zK#C6fQu1X@=tSEg2wYA1*P ze)!{_a#R2@#XosGWAV;1-Q^=KxLM8hW7-~)NonR5PvYyhkPVAQ=Sm3!|Lo;0CL$rL zqF;Uzk9tw1!qI!~z+Rn(ZyQ{l+6ROY;CgOy0VixC5k=pml%08Pk>!fniMHvO{*!Ii zcjr8Dhhk-QnDKTumGj=ko+p&E0cScc{=l2!-8Rn4w*g=%{5R5g5Nt3kOx1(^;SC>a zCFTVES52Y(zSJ;~`BQ5T`frVLL%mh>JNc;Y$PEJ-2U$@*T2{zc`o1)buj;+ z(b4!%8a_5GeoE3gAo6JZ)Zh!7!!+iJV|Be~ZHWZ$C~&+Q*}YLm!iz%sIE5&=(cYTB1e&kIe$0 z=Y~Ty1|v#Ms_rHyN#i(6if)|fUzmv4@v>wNVs@dku~$N@W^2?ISkELdpWDx~^{X=j zLNUMZ0&7++$Oq~c`?Ek(kO;%9Wi z_~&Ya)mq7~78ayJi~cE5niuXC3O7OMo)t-VmVbDnM)MoeT7b1*FPF(qK^I_`sZFzX zk(f8+I42s}jY|I<9uZ~eH2V(hxp<4A6Lg1Leb@B>{hfTD_|?o;jD}6%=fd~I!izqf z>zS_k?W7PH0g}-Ymm~?@w>dGL`|0KLtt?Dm5U|^x9J+TaknQg*Dta4WH6q0NrJ86U z@s$i48i*bdiJ%@;D(01>%&4cBJ!V|yVInp?P8+pV2&aPSE>^ z;*ZC^E`Z^1`d^!>g`A$;M5%KIj*T1MHV>de66Jfb_5G+i2`K~JG$mIU@!AJJp{x9W zE!J|%XXz#*2z_fE)Q3)#ZMNHHp}@}KIs+qvD4^)bp@6%SSR>)nS9nbco+RJIy&E?a zl||Njafacp5N~qu#2zDKY*fuHqvLHx#z#zZ`C$Km?=to~Tcq(*Fc14j}PYx&Nn;XpD#K;x9VdhDpLeZ|N0q}U`l!---T;q zXqlyc0eWC6`PNaCs9fF%#?OxJe=Y<~eN8%O>m2O$8Hi#KN(g&iL*SzDS6#O z_Jt`N&+4(tDb#J}n?tHIkcTY{ldoAD3*%h5=6Rd!V$$=9Qn>P^3=jYw@n$H$w;B6j zWjmI1Hsakr`p0bZwjhmH9xA4Cjc4d{T+;QKOY_{%BV3>BPTHn`U2GQ%ciL~g%>R5; zUvT$Oeb|a?>?kXg{`oI&WACy150HE_mMEEBKQy5@t)ud|x*}8IwU7oy-k%FXIsYSl zpZ()}_tjHwV5j!ZOJ6!7Zg)$Q4xmK>b=lJaFSg6d2_?G?lF z;`Q-sox$w^3HBG+Fe?H1}=BZhHvw3}o=^c*a z+Wk2ZQKQ(I4QHIyPfkeQFI>@C$?g{wda@`Y>^lZiAs`l644t>FgOL-;?%^ZI2(M0> z+O)5(qfM$r?9Yg}FYp)^Tw^evUc)xMutL&UHP=|` zaPI>U&j#suJkdv@))O-D)R2jb&p&VdFs%Bh2h=D`8Wip0W zQJN^uAo!5fjy#3!I1DOaYr~k))U@y^J7XT1M(VnzY9!<2?UqL}*OMW!eJ zl$Dy^8xNyUv%VdjE_{;G9G$_=NTCe5M^%O5z@i`_(1T`>;zWBzMMcNy)-U=H$YCr- zwY>kiaD+tgeLxhFkB`r1Db}gKedo69MyGY@*9PXE^9x#KSZ;2v*^l>+0l^`{=!>51 z?;5KDy3WQ%$vkdx#eeAEtH}IYAn2wQFXE$W;(d`E{vZUEbS@&FaXra`zCG;V=WSnA z*h%NfWo|*i8m%As7SGnHHZu7SXg0m((n1^aXZZ#gh9`=ltFwqS1~eNl%s#}!;Is)ppL4-$(=lvY3Vou&nblm zru6|gQ>N(BBeOc|RP$&hQqjGL^=?R|_#^js<{!@Ds^whT1|47#sMNzSwMHTGf2xMB zUn063+de3(U=w!{O|*<@bLu`nUUGm7{pIditUZfkW1Ih^LzfL%K=%32|05WPTPxa> z^?pqiZdFs_He1|AM0K|BiZ8lt{+nG`{m%NnH|;H{JBndBj9oD8jR%z!omF<+Y~@V{ z|F#%l0Q*u)J@k>L2bD4LN;!p>?iwRd$cyvajQlA)k$KhFb;}DAZz|h%CaTtoTYDbB z7KHlA4nF7p)6H(~yYC_Xg4hBvifrK4`9>6*%^Nc%$*Lv=77Q#SZPI4`fS&edisV)j zz)I#gc`j0CH%FhBt?-&w@^O3Qs_Y`l$WgK9E4N}#WY@tedYuJWcExA@sb%4B5rl7S ze{$bP`}-VS+W>zGA-&ek>(d_Fy2UB+&FNJ=*-}7lE6*L4(<>+)2k`N}J0 zBXdT7xE)7UR;BW}5xXK=20%opRb12cz1K!h6E48*QI!U{@OjHJKl(o6sMp%C>0XF| z4(S3Bdwu&II2V@aY>BW&a;r&V(%{M;Ecx#ZRlwU zX@G=9?vK$}PK=Bii~J)?!exq0bPmCPu@!3U!Mu~%;YtE?I65HbWlync!(iXY?W|jM zh3|~$BX|BR!A}}UMLdVTIc+YC(NxV2*J=u7MXt<9IOPRJB$`^uT6cZ^tJu8&JW7ne zk3YGQ*4C)jczvX+R+f~8;&)^tYLsgB1`-rb^9G%@CD|Zu59v?R;m!^q~6Hka3U_;A9cm?98L;dygUDx90(H z6l_j2!0kl}?1ym~bAclJz4ajjbFSXi+|XId$pa5CCK?c zD%F``Z?9o06ULu}_a|8Q8Duls)yM+B;W)113FNWD-0NK##>5(ijF#z?Xn=2XnEs=b zkU5T#quBEAbLl}@jzd0$d0gw}LaEGv!*rje@%~+jJ3JUU5NxLOWdg#=L)JmVUJbHN z&En=JG34Zp`8uj(X$5qWo}5Z0ocRw)HJYDLRrO9yD_yW;;8Hq|v)f(quz0qHSs~<1 z;;g{ou0w?e5#GV?7(mx~OhIOm8#y)6)1PY`z3}I(KhGpQA(mQ`$$0q4he}3EmTd$;w^08y zG=Fd(!yPv4Rls2sm4!MEQ~2n>`&_4|gp<=J1|^HJ&!*j zuQMQqvh?IFPa?LpmnYUbN~K`=)4Xix%OXRhk(#i#|DY~C^a|1>!dR?c*xYmdX zu%o6(G{{Xp2*V_9%nzEHGvE?de9tOt+45fDcq*s)J0C#9DsBOIeSm4a9YR<2Jdi3Y z+aYE;K|SWZw9A|iUA-U<$61TgR-o$3)@?zj4o@T``(;TM>Fc=F`;qO$)5F93(3 z7L#g=k&z7!@%0Z*s9{>#DDNoSiZ+~VC!u$+iW%4q;VvU-OnH`RNde|ow)sP3vlV7^ zB^f6%EO5|!S!#;hKJ}mVTlJp3xwR4TzPOkW-(#KB`QbA!9X7tL80NN#X?FTVED*zl zP2;sT+E~iPa0eYDi|2T&)kGn5iLRPIBnwD)BT1SK2WSfmaE`-4y5ta6(o@Wro2SnX z#C$k+TL3IFdL!Wf>Yu7J$>ojp3~ejLWC8*k(S79*yh8N9veyBWy=n~%QA2HdYzLBn zJ1`k5O<>c_FY`e~^x6}hX5y-Y0gFfd440&ArBUZ}m)H{5=WJ(OXX0mq$};wAY{F`4 zh4{h|+9)7+cDxRRz6{sHVF>f3+E#vFfnY2~_u$Qy>(cLFA{ z9*Vb1?M(cpHTF6t&d&TAI3IjtiF7=C^hm~I-)#K|tS5S`e@GMR2cnRWl7jz76|8e0 zRJ8$xOaOTuRV5`6pQ!U`Rf$p8m4SS{+Oz+FaiCWR!_;FZU3f4yQ03;6f@@^rhsq^5 z&cU~tnE2u+n_*$(FrZZ`D+!n-U|6os1L@xc_{?o+LESWUq!x(9E)}8>qI|Hpfe1En zl8*O?=bZ`SX(8EcCLsB(r+QK4)e{2%loamv`Z$-xZgHN)c4XsWM6u7>kJ(}9JEWyG z6;l|e%;~3J5sWB4l3nEEDh?%s27B-f#nc;_h+5h_=x@@X*q(!XS(D)7M;Uk5V#EGB zfx4|%6u`x_%3!}1xT2gySlJn=?D}3yBMt=5aNd`w@v?BsjFy39RBa@Qm&f8)Xs7RpCZkd3M4C8le~<&x z(7tf3Ry6-FX~W-#Y83V)e@?O~IimZOzeqB`%rtaWv5@2_kVpmwkh+P^!uTKDeI^6#lOe2wjGq(9R7oBvgb@ZufzLGnPhu1xk1<36145zj zT(9lLxcIJvIEjCre>`jTi)msa(*xDAm-t2EPvwD3Wh>%ecdj^GYfIG3?R%9MEUMi% zkp7H|-vk@6LwB@+07Xj`D5iN0#7ydy24)Tt(Zi z(&XCPZXx9Pg2t@h9idC>t%ZQ%k7tYb(@rmF#^dI;xV-qh zUo(db;beA(3OoVvme;WJq)>?fwq21QXke;8{?%UIk>kc~wV_amr=oExXx5d1+H_Gb z5W&1w`ayM6aYdVS^Bh(cs<=`0zk!y{&l9zD#u$7^ea9|ul^jo5D*afun_Ki2-)s# z>{o`gBxe*lY>A|&r{7uv?IQd#&W?1exj#Yz-b*y~`?pw=Mslzv0B@4eB%@BGK8pt! zfp@>820!}6qXg!HL9ZuPw+QP)KCPjRe`1@p_lveaW+lVq;>TjL21WOIb^|j7iEFr# zTG0TS%+!keGd0{+=yjyT4~C31NT!`A3@=s#DLd$RliFcQ5OTJOWtLJVvvQB@MP+>sKP-C9@%<_6u<~UWbHWqfN4fgI zg)-uvig59s%xdX@w@m(qKs~=bAv@7OMbViY$am?;F$d|WVR>!} zT(u97yoE60*@wi($-UOZfDcHM#$7TmRUoeyVdq?zGM>VY33;j@Tq25{+QSR@-+mP@ zYqRd8YsBSyF0n{mHiby37TF)BOH2*Sls3(|*z12)|1&4zq#()2E-0YZXT(45?$6n~ zV40L^no+Q~8z9b<6L{wjLjfVXhux98EMpjlK)0o`APL6A3B(jni3vhN^k06w^p2 zlKmbKo=jcUv$jFutQ0lsU^8#PF92}UOg@sY=?t2`V95% z;rDEnUQvk7kw=<`&mo-E%oWSTfKmsSrB*htPrxW^7o0iBc^hqC`C*3B{L3+2(O@iN zM`{G6MWfx;FyU;&y7A}58|JrpS6E|~mxR`>_ug`6|2BX%4R*DK8|7mMK>B)h^I(pl zBcPMqP)T|9j)G{$pcR-L^7=mBEOm*|K7`TMkcXVnGa`E>-oC`9d8|)UUC5-&gCUT8 zV&AI0BC|ZR!K!N-xNsi0?8pM9K5hBc5xd0-B)Lh+Gt_ zYC|c~nUcJu!TlfI+1D2rp!z586tT=81i4A>c(;?DARrebOqX7GmfzMRIaHwX;J5t$^8$24#Xlq^ep2ix>~9CQM;-YEZ9AZxTD)=5W&&TP`q4sM*xKnRJgO!R=4I0L?`^n@ zJw^5MNl8=3Y#aFJmUfZms3Tghh0T1~j?@GEh0{w=w`M|N#~5;oDY<#7{OsXXwEMp= zSTNp=gY=V&{|&-j@;@PO+1<2Btnqh@mppepHi6;MJ^WPK{i#VabJgkBeGvxiM<_oK ziUQ~nfyr4B$Ifs9YI}WnL94S#%0*Ti5!Ps;aEN=4tyxj1h!eQXAI7uw{>f!o5T{Z^ z5on;59YrR}YdEmXkEMpk!B!rD{?Lw&1qNa|)HdO>*riBlT+kqk#>KCjQXl>FPd{tR z&VJRYNa;!ngl+P?bpvcfL{_Qk+m}bHU}7HtubPBwS!WM`3PA?bQ&X%!Aj$^TNNhU> z&6{G3I6SVwfdOS>W9l-!+_*$Wsk)=Mnc&MqTby>DVVc#*6H zq@Qjo;~;~s$$PEa?Hf|&?|@5xO9 zkGZQaH$4SzrX4enr*xcVgYaaGTF9-!9V}xx39f!1ibmtNp#4j<1aBUu?J{o1h zS2e@ZJ(79006W5Ks^k{w@8@bJpRzciM?uC@3k2#$$wBo0l9WQS1S7T!*v%$QFLKJS z$x%fY#6bt+ZVB`qOfM0+Pi1Yd@M8q^KiT2nx4a&46eGnnJ39LlQ=#d|PSHdB#7>1y zaEmZcj^|vjLL-1k?GzS6*@#D~vE-nSP~OYaOK5Kd{R(Pj`n5P4`pWfsJCP~#dKGwF zzt;_VN2zXU8Ihf9lrnAJbJEYey5@(D%vE@^m3mPcp3-$%P#_R%8q7;bABQH*D#5FDInd;Y@JkphMh=FsMYEBr> z8+lcho^9;%XI6H?C5C5^?B^H2vDPJk7pgn9cV9rOMeI~A&#a-eU`c|QBshruWCkz+ zMuvU+p!(;kF!+V`BzLjEH_Dz@AL(2O#MZvy$1Aa8atG1^YYo5c$l7PXN<_WnowTct z^OfjumJfK|bg`=$n`LEgU`h19wF@r5Pu0j2I|A|5IUY8CY|xplx~Ip8XVyrTBGrMV z@C(@z0d=su<Uq)w#jgd+GeMt(?jhTJp7VszA08;NP}DTVCr% zY(}%2NQL=VDYX%=RsI71)lw=37KcAuqF+ouO{+{|vuGm_$tHJuEe4y6Qu@LP55r;D z6L#|I+K*@0HN}Wu#rcW*bv@Yg)?CQ|FYNJ^uy1b{Lv7qLx#n(^CQZ08ZE#8uk!GPuZ&+y$nMs+BTEe=C_Dz>2t zrY>B4RRgXy{xm2^AucZNKXl4CB^2iaH159447IXihf~;}rUuu)iGeXUzZqs3=frJu zGWP>xD%9&?74rC{gz$?R8H%$(DL&M`9?6ynxB=(@bY%>(?*;nsKhVcF#=E=#y_jhH zFj84jfzPgy^v_|S1nTw)>HKD{9$)8^pu-QEui@7GP^!uEp^k5bqBg*01+N64b=rXj z=rr1(Z5(KRKJrzqAp;vjeS9YIz(SfQn?Z@-G)x8xxxx%PIjnHHeY|t^4!Rsn9Y0=| z$Pu?RZTN z7X#MNImQu1GW;c%D3*Jys-PQh0iO-HuHW`e`Me*fqF9zZ!zQUI`+Z4bUfg8Q&P3e< z5tpSuiPcgt;YskZ&T!x=ZRXkbJe~KEWcGXJ-oxghl!YfW&=YiJ7MAy_0Dk*1^;u4_mw2^|gfQoN z2U#9Ui31wC9UfLn$U@cA)ytoMR{1kYBA}PQq8<;AB% zWabpVSsCy5GtP5B_fqkd^9fb zZ=^;;%~15Sdm$0)kuysiYo0}A-kpH1jWw>zvS831$S8G$&(24*PwWFz!iwypDNS{m z?dHQD}TK)y_Z*V4$)#H_%6w4 zn2p2XT*hwNM$)r==h9SZ{MSw?qEh``7p+7SA+XKWoEU`_aHyC*Lezw?QHE7>02+*S zEQ1rzdOl`8M}JJ55*t?4vrYzsJPBer6_oobE7Mz&(%CN8A8>kVJ`h#x(Y}I-Umt?ctcfV8gv@ONy^#p zNjxN+=`E`ba+fzpai+gH8OZlR?<6hTSj@NAG{<$7ni>i8-Y_IQ5eoC7v0A)?!1LPt)t_!kI&dURhg`SD5E(HV`q%>-TpNwnmd5p_=qdkuY>pW1p!ZMdpme?r zFjL{``1dM&!o0`b<$^Ih;BY!5Ts)iwwax2Hl8^-KO&2B_Vn*q@GAiRlEQCGw>60E= zdR)G#Rya|Rw7w@|6uiaZ*S`awT(kp|ykOz0IqS5<7tyng;yzFM!9r&ZU$*R6Sx*~Wy77>Ro9K@A2Ld)`Df-GmC4+q{CJJu-IZoeb@1%Ie{5 z49aC*l0#eA)gP=rEo%(;^&I6B_(;Gu{QiH!q&LZ_Jgz{^_c##5eZ)9O@I}yG`u>4) zE5&cC|DJJ?nG_0iS6HmE|2K%whnhk1QWR#lRIT$AZ&}%CLd`rVEHIHc_t;t$gLBpjfics_ssmgX}9fYcu>U`Dps!RIj+RLB$YGB_6*A$|GQuoM@sLR!a?D z?M;OH#D;K(rDr_0=w&rBHKm=e#7l#)Q~#;L>!p|o0iBTzL&ta@I?s%6RBrX=m4u%I znx!HseHC6d#A3QoHQEi0!rWc@nIHew21t*h5wcE*B&4;wzrAw#R`kZI*6tBt3hhb$ z;-H_e@E6`zG`~KY8*f;wE&}7yeL)&_7DW)ksjyLw*gShSW^fQgr*C+C5A-hQ`0`Qh zbiY2WwC9K3y)8_^HlwnT-1QIe5BZaX9+x(o)JF3#Ju=;+N}{vhj6UkK<>)s*t|x1wUSKC`k0|2*6P_J$;ej0Tl|itNh?`y3 z*f#lUv#L!Wf#YdRKZTc1J_j(>wQTXjnifbi_F zu-VgAq3%GOAJFTZuZDL-uqzDVpms9ugA-s!Q$F{EoLx{*ZG-f?HrY%L$m)&8MsnlP z(yyh3*e%yx)a4h`;=N%xs!>#LQQIvRjo~>|+^%>E&F)&ZYRhv3&8}*yI+8*+$n8uS?ky~D$ z-e6P-F(Pn;LZB%r&~y}%98(h{Xl$?Fx9k2N=8Di~dlzxkIlZ)eT@lG|N^H8=}wsO|?*nc;JIlg!VJ=4h^v^v=UVs_h+5sSu(1Ir6%b0FZPRAK*Xkj(cE*p={Ry}r^H zV-X@1cPDj!`Eb*u%{I5*dSHoddZPr`2p9CTm2qx|;$Z`X&e|0IBeRaDzp?MCwwd?;}Y zD4_ZxuhxjCbZ0}SR_NW-pV#sZ_21mzzhPv+Fi9F);W9_)*5CjJC1|z1a4IXm>54=? z{eI&V`+zrEyM@I6l*CNsWfu%#x0i)V)hAA5wSTNy2<~)5?Gs!ee8+y_!Ftw zpOXKv>|}4{^N-sXYBqm*lzwvkZ>RJB-?c^!g9}LCUl-77>tYgI4zbgaWvDptvvgzM zDa$=St3M8ZXA7qYi4g{*fbm)n=qv9sQMR^E%0evr1S${#$(`spN&^70qiK-~JtZ30z(CM_6j#sB(IY+YA@Pq)@qs*Dpa`4fO{?)#qHrx$(-1 zWmJ+&#}s`R3KmQ*#)nv{m2Jkc!waM`$zku^>H)R0?2|i3_7B@9U2Kb~@pP@n;v-={ zf*8Wt^#BHZRXC@Ev@Wm;Zvs;1(pION`Y*-CF%q6F;fFXJs&%Gk$A2F6b&~ZW|7CNF zZxVE!Z+5+-SafrCA#$|N@3iQRBf)rK`){CXGvFFG^X|?Yd6=6l{P5ML2=J~6U-kZS zT6hO~WHm%)@fSb4y)l2r~NfK+F8 z8LIgS%!Q<1>y7!NGeye~AmYhyz+4u&`C!bgr)@{HztAjx9Z33vQU}W`3H}MvlX8-! zggr!-`8E;|$IIFB6};A@rJ@GKZx1p6nhv~yDN%v((9o7g5z;zm98C8v890q@B;!SK z_v0k}oUwHy%y@0~kM*Gs_pzKgvXESY|C!OdFmrlC4aUsGH!kdF;YV7vsTUy7Ff2+C ztIy|RUu|Ve;I>We(y`DE>n)~5Nb2KFqdDGILj@A7sdRhX!77E8;kuBwrCW77`&~W# z5KjK9EA`}$z1S&n4&`o_Fubr1v@l-T=O|uyZz|e<4Yd@ks^X zM(LSjUlLNtPzcbcU`r5oRmJf6`k!k(Tts}93PnglJ^ zFN*zIgT6^~y?bI}5pq{>4<$3L+g!15VL^0`~fJj#cv*C2ip~ zEqcR1JEAsQQ{7@=6ruuAEBl`T)W05(mnF_AjtlRJ{U*br1@Bh}W0gf`#BIpb1*_@% z_0avS9Pr{*U?ENb`CQe8IN3C{Qwv8o7q;;|Qk#3jpxsVTb+9Gv6=iVQORgQ+mN@%4 zqrxHz^i3(+DQ=)VMJ1dkuR?yzsAi@P0Fm$aBonJge3@xnLGpA~Dst&m5yN62Q*UeU zlxSf$e(IUe8|tNO?`wjG8xB30EusaVgs5B5tkPC7U2l-`dbX^5=ipYnaxL7*aO`^g zmU42~9m>~oF$E0~q;JO5RBAI}fZ`s_+zGb7!N&G5jv1arCjYRF>EIrKsFBv4`g$)k z^^z0y1>QZ@?ElXbh5Yo6zD!(i zK%;=wZaXW24a@%CQrWxZJbjlQ{vTN>^gpt4{|i*%W07)bsa$Dz`3Ut59&;7y9{EKI zRb|wx1L*@nU`g8d52W;RLc$LKB4T9`?AZ{6*HF?KZJt4P>JI#r<3M7Qi2S!g@vI0A zq(XEPu)p)=!JJzr7(wHKc%5WL6>x8%5@&>hUS!0$0Cvs&{e7$OL@Ta9+Q?9Jgfp_g ztZOoNMOVy6kbGp2jcx}$MJt=PPM@`1Px&6>IEgY5=0alVclVAIkST$Z%6L|j>tH;= zLm&n&kppYK$Jui~1?IW3Of&dZ3$MR&dQSI;yI~x{X*FQpDu!K+gg)9V`*>A|wrSFl zPdF6OYZE7Xy=$?{9+2ry`DSz+OL5XU83UA6o&)d^1^|AGsjKwm>LY8Y6KL{N0EVA| z^@M{2ldM0=nQ*7RGV-ckns8YN|n>?(N<(==U z=6U_C$$NACdgAt!xAmrHitqX8dgk(%HvjRaK0u|T-3sn8mRSSAeI~Y<0jbk>7-xiD zQBi?m2|xpt`R%%5B9+~ip^Z$VaZU@KM@+j7H2_B~dhR$E@G1w0_`LwM2!N?O;HV{99hC{Gj?J6LRzdvi6Qxd93(C;A zYI*P@)WE$U`rs%_r`=Y-rBhqsvhxL-=~6@_AhOdz5=S@2^agEfE1nU!QokRj$TEd< zaIqHesm*6|WOLC)d`;QX`CLPEiRM^(I;tr|TbytgqObej9_h?sPS8#%tu^Lj5F^?B z%;p>~LN1qjCW4@ASHZO?+`#(d>9Q$*&Tnd7wOr0b%F0psJIQLZL@M7JrGC<#jZ<6! z3i9;q&6tq6v=Pc4uP6>w@!3z-=(7~o-vc)0cflq<5)EFGoy`^K)JqKW#S_O}NfiW$ zz0$d48en*rU!^vyC7<1i!tlwa>$P5og~xJ!JQZ~ykdjo2UidZ9Syg{bfvY40aSyL2 z&5`#J1Gf4^*L`*I92X?|j5cL?OI0lMjPk1ZiG0MbJEm#8cqEd&2DtY#x&+gcB5Icn zFW+#SZY-Cpmz{Z`H%i3uef;)`d(2(~~OM(__7O}E9! znfDF4mO^Q^q`#laXA}Nm@(0VtwY-H%yO~4eKU-+cx2|o!b!&)q-IAEe+-aD}-ZB(R z+_O*qxuyB(+%-ZKN57DejpVPsdBFt(OU;CjOo za?9+r^XMDp^*Gu)IVvQaR`gC%_%`i7s#C1|1Dqrb^A)N_CAn}cjBpZ8@R{!FKdduq zQIeL$k0^Ok07I{pC_3xgj8Ebz;Cf^be^8>&jc4xgPuxhXm-pABB0OVZXt3c?|21D4 z`t?<^g(s%|&$Yqsm1{o7J?V+nP&^;MFNrZ|q2Va^mIH<6yc+cLxnz8{KYa2!4k(AY zq*8t*EM-7G;J-l8$A2df`P1VxcNxzL$K^a{>W%%>)#F42T(|#?XuBVF<&7Klmf z{wFj9Q40oe!?i2ybLp6E=97!c?dOBzg9~IHUsP@X~25c$7=K&Vxn{fA-$R< zqtRL(7oyEf1TuF6wHWq8T$WziG5H0G$TpdN?Ham6r3{e@3sM7!TEU1`+&?EXvtI`n z(WHY*o*AiI&#D22>J|O;)=D@MHtIjOun<2vsTG?u%Je?u{tXXOKHK-Sax}+@JUD+e zP@gqU@>n^d17d)`1j%P)0MW>ST!_XX`G3{dZ_CIP1zZW#fNd&{L;56z22* zIG7fDYvZ<6#1SoKj)W$KL`Tt8ws?J~@ebCW0{%{45Eog^p`kMLIa#9*<7bRk(+C`k zaSZpbh$%)k2M^6Re9{sdAL+B02Dz$GXr3DL#j?`p^>L;`v2sd@K0d0}$xEYBKklI) zC7}5-Iemn&wgtP^qFHC7H*vAn+Y(?az-8pP#;nv_OPM zpm&l}&@u?7iAv|=Xk14@h?8=Y0Cip|E5g}dfU00LR4J_tU0l!@MlNE&_k~+f8nTDAyZ*77g^b)PQBBHFy*hyR%?P!n8YP(9=ExWwr!Vj6E zaz0spe%2*5q_UN@Pc<^^4lcACgo~&N{E%3h)04?XM3_I2fo+2+yd7r2VOorsd!iLq zp+w$}a|}K<;#56Ot2&xhW7aVM8d=yw$CZl|YWBoGibZlo2-lC6rOHs12NQxFPg zr8ilm*j&PCPt*s?bcs!>4x|$2&;aL5xX?H1K^Ij9O$dBFhq#qxP6yD*6kZ|`mP5bP zFTcxM^g{Ujvp3n1=ZS#V?4GLl^8-Zc^%WLi^yKHEy~P*R4oh_8eToRPkT^rcbq}RE zBwgY*;Q6`Oiq@Bc-e90* z`}%Gska;NY#Rw(g1;b-jJnkI=CsGt6V5NzinL%g=YRxhZ7nT**b69tb{Q;Lq=FA=& z^~{p^t7$?B92RZK|O9{l=e^V)qp)Z%p zD@19D$%PY{$BoWr0EQr?S4Rp4uiX@u8Wo-XO2h)kQ|mvQ|3<0+OLKR0s_48(H|^BQPDxO-BtO*TR2EQ12G=NZ&+2~CZDskC`)?`vu;ML) z|8P%WaMn&ChV6x;_yb8^-!G|e-|Ktvn1ll-4V(4r3cXMAqJY=(61@-npK2BnXFC8! z*LXEp9)%IvNDH!_Ir4tZ5&=z=@L89w%?|7smJ99EdQ=Wk2~l`dmSzg4kCa76$}oi~ zaZw@~pVi6-CdX4{bGoB3N}adBsja)qzhFp}w{mfF+w-Z1LxQgUY^cdb*0E`&ud|rM zhSx+!BE{AyT`(RI38?Mt?fvVb;)eVy&W0w@^2+g;&@Fb17AkuZD^q2TC0@10Ck0Q7 zUU9r80K^wf_AyE3I^{u z7a{W^g1J}R;NH1@eZ^}Ct|l0ot?&3$nBe%7tZ>M2Jg+JY$EZ}Lju%)=_P53LQ5Gd< z696YWXIYlj;CEYSkjJYpt-I&X@cOkU8V%VS#@(Jr1{Uepcui1u(f6b(=YzGnZrVOIenHB!=DBpVP&EybbinE`ijV2g7zES_bfohtnO z-tD7{_+m=NTQVQbwf%zenY(Q%)RupM=;PCGCkcT9>&EH|^9NCimNtoo#r&NYNxf^d z!Uzbt#&RmeRch(F4%h?scAn+8N(4c=L+tTvnwv|`6sDDEx%hh_p1-V$MZHhdU-f_` z$$Km!Nyhw@!%f^?vTW9V$Y%m-w7HO|K7J6e=>jUMaEypXA`aNSb$C|=@798q=cxg< z-j@OqDsLiK@VZ}!MD4pTSi2o@VD4V0St811&M;O1y%&t01V#e@%!~@-DB>gR!F>~g z<_4wsX0=4>S^Hr2H|}gmP$Va?XS^JH;wmH5c_ng5?BhKR0ECtRs3)G7-$}@yr4z;2 zTvF{YLPgl(mfd*?5Dp}Uie>t+iSS3HdBC{HnL zB4gy;bt2?GX98{x9s%2`SkdxUe}(}F(BPUv^f@#YxZMxjDt;NhRs0LQj-RK)nkn$X zUs5mKqH6tp#F(UcV4tM%N7Fuj7Bv%l;53uHq%xDdMb!Fphw(3UTEkH$f&IvIMz0gS ziXv;VMY%Pp!(DMaIA=3yMKfIEEh4NLf&Z6LrIRCAwVe|9zUVf~L~+d7$HFKL{AL>O zWTH}tMe`ag(v-g0MY}ev&sGmq;wZPwry?}TOUzH#+3#|?0|b`c)dQ_ieprka*{BFm z`KCGf2CDGMI&B$U^^dj4T^A9%_X(*K`_w>@FV5smmgk^b6n8Kp7Xy*?RR?^(K6XZa zzCnSm8=OXEfY6AD))J^5u5`=yInnAeyN|#KPHzOY!73M2VPxwj zoENuQ1SOIY5uEk=7c&p!0u~rIiSv@a0ABXxo!+7kKwb?1LK?Fhs#^xhf;_QAO)t3?dwF>w^cVTzdik1)DG6$3pR_8kJ6FObBI6x>=Oqu2@KMcXv1 z`ETtCn1~c#|I?~8_l(fHGpS&Mm#ASGQ6aFm-)-+rVE{|7X(m);we+U{r!6 ztkN5VhLk-J!={gvf`2HxhTRT5;aX(lk?+uNc?nvKX#nv2JifoO6*`- z6ZEdoUn@2^c;d%@c2|%cb5Y{cGB&0ts6bDa2)tm^DwZ0P9kWp`B}Oy^{f>Wz5?B`Q zKc=WRYRlDjc(6HmUhL06TdWX~q4!ru1Fg0r|0z_z-X}34e*XMz7Jt z^w={ph}z$e7pq)ob~`S%w?Uo3&DdABXRk}iQ<#rjBVp)JM&J?roH-Jp=Rq*763b;m zc4T>=jmUWY<>>2maPM9=&!BqA5Vqx_8Q*XvJYOH#aYrn+shg3s?}toU5|EW*Irnm> zOUU#U%>>3rU_z?*C9FizryA>9H6X@?-(m1!wgg(?CMhZmuw`>ECG+ncTRmyZ!rSnk zlXFU*&~hJl@$#PA)A){Vf6la=qYJQ3s`y(oo6cOYup)8sSj4qB<9s?pqwu~xKBrhu zwm!vX|L2&t2rxl+GDF~vfN-zqdAxr!U@T1A`2eimvAtsy>FmII(dIu%0bDG5dfr8@sq_%R`!H84XLZEZCp{W%| z#kT(a7J*8o6B3G2VEH-I5+?DF3U&54UO#x)FiH+_5H``8l)tBa1P}VDLZiHq$Uk5hQ+|_(v2)#e|!k}c9v<;zWBjhhAm+?ae(8I zdb@P>Z8D^Ls;c~c49KZG>&qfcIOzr{y{+-_AaEO+2D-We;yp%pLSCd(Dii(cH|K+D zPV1)C3nANmKHxqLE#FA$iumWI{4osH`w{MYDMj3HU132g$QA*as?d6kHg~|urcbBZ z>A<}C+LoZ2GfuGtR3MXUO++9pHjSVeh6F7x)r^g2lkvRU4*}fY+@0ntpKsT?LJ#y& z8*(SaraX<@C!zi)vt% z**Xf|-K0C&yp-JpUb#Q%=W{Yy^CJcC$_!(Z`NC&099bslq{Aa5_( zqHrz*d`r|pYE#Nq?*gDw&%Oe+tQReNx~@>>DO3cs+-;(!NOB)$}9y zl}=s~>gT3fS&iV+GF}BcJjO2f*;-wRdaKiG+FLLJQqS2 zYZKAMO!U%61;)6F4jqJ`Pn!Ca1CH670=>&l1aj|WqB zSBA_sm^)TE%UW!4=ds^||E*CM=w>-XworF;7~!e2rl75vwhJ)=Q8k2CzBwG|GCd;X zp)j!XHwapYex}rqUxewSPT+=;;%Sr`_u2ZB-DjKq`lRPKhT72;zQiNd#^2Sg6Q^=F zQG0Y{f^^YUo7oZOw~(!L4d@pe`jhI@`Cp+PbW+Rh6+!qPW9V#ut^DMFI`DD&<%0zL z{?pqJf}*#H2S^M0eVF?Wc1PMzUDB7D0}~?}JUja`PQQ}pVEP2(HvYD6(a&~V%vvjnz0qWOm4TAd^N=V`0oaLl)Or38?dcf>zc!oA)#BS6tmcJrTplqpWhux z5qs@^I~l?;vZwE5KudTTfNhyk#@;D`HDm9LZ4u)z)HXIku$4qbjQ^EhluX(HVcgzU z?xhm0%G+wNtpbX=QL4gL**k2@l#lO`XtbM@#(#gT{Uw8;tnmu~H)FO5lrsYwd8iUn z0@Pf%|L|uh=Txe<;2KwUst7dM42nG3r=piOs|+?*W;31%GqWeL&l`8!wB@~0lpd$&t-aK=tbzvR3~R7 z^Jp&PP>yri&))#_4X;dDhqj}?BX_I^vsIl3Y74-L(9XbjDvf}}< z+IlIGOf0tr93-JPa40?xt8&8_xpub*BvS2sM0lI}gef`|9C=tHGh9_cw?3Wwv(@XA z27o|`Z4c%>I~XD~PLI{23$WHPnZ}_mCFpQKTYo{yb+9rIHg%=oBsJUGUo&&P^FqavNVC4% zF9J0A%DIeo^R-> zHP8p*Xk(jdzqlBP>Xb>0>qajg2&>Kdddp^Bel5L}gJIb$8G0n$O_VnhR_-J}W%S&k(&*V(l%4^;KmWScTt|M}Y zEr7WvA}m|{1lkYv#RnS{JkfLA%EyVVmm(7fPC#g;*{YJ^TRt`DCe zh6PP2I!AR7C$Sa|i}XRIObjs408-9j1j+iw#tF^MJR>O|3054D^`rT7i;D?!4G^CPdU+_ZtQe4dVF9Ed2}j8i`>3|$P!|)P zq{pLNI5yrn9yIh-MXd6!RX_A-QOX{WAiX_g4JJ^4zeQ8S1mV}X#nl4PX~Dtuua&(*BF@kg25Ya3gIS~_mGhgJ8J9Wr6T zKQ|9@g(zk|J=O&an(VR0xkC#;gIF$(A&}uJs&Q$~{MO5MlozDhs!dz)ozpVf-4=1HJ zk}KshF*frgHA%hTzBTI)Rz5K_FsAJH-lFIR7vRBV@FJa1In~am5x7cD6R>rfqxn+T z$Mf}Keo5<7bmc#MWzh`tL3>{Hw-do6>jd}mlQAr|dJe|$DGimTC0VhXeAtq?iJRA; zFPdS02UF55WE!IW{zRx;nk(E-M#7HP;xBupptmL-eu?8cjRb9zDP3~Qcm>$NE7_(t z?FR8@p(O*-b3ZKYdcg6`TqI@UUY^5o@a_B@$v9@Bhs|Rgx1@q)>D~ns3NkVf=c^aj&ckZpx-#vaY6p^rHMV_sId)`mAGL zwRX69iLd3vx(*OsXPWtu9d~uz4K*oWgA5QOOuIr8v30}X;~$=qD(>bdzl@1AT#T{+ zG!M3T#w|N%HO;pwAXfORF7@(*Ky%5R@Ug`svPI9MpOoLNc2~fzpV+5I?nX<0G$8v& z!F5rOm?h12A*qy?(lL>V_~g4EvQ^dDC#Rn8pQ_aQoq{j`Z)67G?HTqdDh{;1^2?Zr?bvYw^mBLW-e4boD-e8IYIy}_L%zQx+r;)1dAf(ivj(uxQoOW-c8g;W@PrC@@S!SoK;jp|5Jgn|E~)C zEKctRJ)5u%5Gs4k|EsAjt)L6WgW7nw>CIq&B|fgg<=^^kbyY7 zy&a4@hVvXK**CN{Ap*ASl9H)$d|%ZmhV@oBu13hu^_*bMT3)9{r?u~01lX*B8bE&U zYWdQB=&vu}y9}8x`|U4+c`p67OU1l6jA8rdhREh}^cN~v13a`E6>eg+aK|igcTM=k}N_wvs*?!}zua@`Pyb^B1ry!2QcF6$zFzo_deohv24otJ*NPFeMrUu;#;p^xNNK~+NU_O4L@bMeyZRY6Epoep{~R@{G*gSj-S`yQ!Pf6^iU)9rimAV+3o zodIz}WYY{a(o%%>HF`@FZGL08_R9(H9 z1?pG~!F5dtfL7~fepdNnp85C3V7_cZ*4uAz&is4O=NNJ8v@7pqM>Q2}Kz?4-VSz&c zBD9ZF^vso7?-0C&4>PKZ;y_3KO1~+^wNkKU zLHTMYB*rjQWUlj-Y-&BQSVCzzz|#O=ik133E)X^$FoMzRnPP+ToLI56)>oLIDi)aD z$DYIyL8p2c@0HzVT`%FmGA!Bz@2^vBv7HkX>$$E0YSkE}f_|p~ffS;g zaCOS^z*XZ$T~<2jOthK?0kV}%(6&mW$N4X|L>;8hPNw?!E)(|XoU7&$mFbj~%0g`! zoU&fniq^{PTR@d1Jlx2^ms79*;P&#nZU47hY2Bz0ck?w;N~&~mPdeY6!Sx)|w^2Ig z6gD01YV%skfC(E@$W*spCXwUP{+PS2*s;Pa;Q;+?mMXpcU5wL9&Vh6zckJt03##=) z%lCM_-!Il$QIY8eg4c6^gf2m($N_Oezy{Ioh}j5a)ugSCUD5h&UKZENLpGVkwo>~E z+G#pRcL16?dT|MUk~3q>(r#gY-48*=nU;#Zv`27R|KNNAceMLkt~TU`ij^{{o+r&{ zh4Bu+Y=ER6k$yl0ZjKhjX7WyBTC*k}CkP_%9KCc)6BJ*vY9VD9CFfPfJ@{Rc_rCY3 z;-F;p`HVlhrb}DtLJ^2`884~qjbT{U#?z^2d})> zM(NYrEj;V3xc?7r0kRkSWWQ4TyKzG|Yr_@-@_=`wXO%7ik;vJtlukm3?-EobX$|A&O5hX%sVj)rlfnVOqOO%7r&Y<;&%(2UG*b8hyu)UKU) z;EH_PTy3{A>?bdn+^WG7kfXx~mNm-*Ay3FXbU@RD*h0A?ew+p_~OLK1%3C(4=>I0~z3@;}~^XF9BKV`qCV= zXJ-s#NWVu_##+*OZx7Db_N{n)KF?X@$Gi2%!=#)_esDz|gpEYS_z#MX%+g^qj9wQ`D}*Gl%m7x_ zx;p0GB|b65dQ|iFUy5rQ*9)xhs^1CRRMq#E)BDBY@_XU>1&Pojwr!{RQfLVJT)k_p z{)&9h0R^h!=){lOK!TilENao4=l1K>zg|UqACG16TVE=_gI`c!^X>OsuLd!obtm!63!S;wav`-NoX z{Zgy@5LQ>{G4E*<-m|Do*tzVZuGh**L9M^}6W{Q7*dHc^f7P zPTl;~xQ|Eot$vR$rGoCJfQH4e5mwl~T#RDNMNjifd$`h+*rbgyY6?F_e> zaO@4m%ET7j5ZR^g-E^TAP^?iNH*84yC0L$_3xaIs3Vz;^7{ zjcD%v&D;Mrz_gUJ^$tDwHCFMgh9@&^IAe9e}cB5^qL;2UAPohJ*afjo^x302qh%q&zNB`T)*kwni8pakHBM&;T z+byB6+UShkW;a}l_*r~Lb~z2jilF-YT7@qvkpp@562VlQ0+cdbm|;(kvk9j|#`EuA z$gJK5=cS)k=yNb^&HSdPgQKVmGFysj<-Dau~`V5yzuG=H#@8GmkVEzSJ%n+*V=?(#ncPZmoj0U;3y6iIur<1wMrVDu^# zoU=lLyz)zzu}tQL?f^ktTB&%TJXh_4UcUMEe6OOZ2?t=Uy|pkf>hL){43kLVTqK+2 z+^!?3G-nnj@7vniK%{}$h>fjxvLh%X#3S)8J(~;VE9xod1`#T$qN&`yll-ICEsus< zhP6$vg54n%y-LDy7z+fXJ95!Wcp3^UZi^%~E2l!dkuaYs1O~ko*NsCchQ}dcf`+Xd zE z#9djoR;(v1M}IQAR8{*pOLHWdRj@UpJ3v=;6ACJR@1RXzMSRQN^ztAz|34OBjT#Zw z)mz*^Ww+w9wj34l`7_D|Wv~zL?w5AF5Yf)kt$y`cI$EX0SgmdBS+xnK2+3D*4%{R> z-w{4%@F#kQKJqNsN_ktvHbRoA8YhVFp(a!*5cLUq#F5!~1w6o0@@b{jj|!n zVH;6P&yh=0Pnh?js|rCofp)_kU?ZCwfpyGY2)~m(wqbXVS+ZVFiX_ndMN%kvhS6Md zkG0(M#Myn??{RW>{v1vPAiPOwVRWh=dQx7W^OnK9@D9%2f?1~-I_sdWb>Vu?G$%qv z1i4@_Wn06{1`}*^Gsp6F^*)Y%8%Fu2nT!ZVR{=$%ffhrp_*3w+ZUUj{7e zhLLqR?}nM#1pdgsf1=KR{UK6kD@c*Q_~j?aV4z`j81>?vaJ*H&JwZ^R z!Eg(b&GPd{R9UjRl9UO)cL6l*ob#NnB8|-={Fh=xY5iGO!PDDBjT5Fe7iE`UbAkyc zZ_Hapc$Bj}9H#vZK}ii_l`H|v%XuV$nv7{4V7Z!%rOK*=Ba2uzZ4~M!6aUSE^_Nb# zMp(fwn)I6Gq}^84p)2)+@LM^C-bR+Ay?FF*6F=LnvX|KV@2di{YB%zppr0#X+4aRXY*dXz z?`t7Eny;N;!+{Yzp#mL9Zc!%Ri0A90a1Q7EjsP1%D0$sg-h_G+^`T0awIW;=)N^B)3=KNcH4@ez$>N3c@qYp@H8zcA z5Uv;_wve`1v-kz$2>*`0gUDqUBL-$57VY(>{!;xt(+ZZ{%)#M@h`?{w_ic}ol9DKe z;NYQ8zP~f&3_$hy`T5)3wXJEOP$wvOU6HT;!w1M8BhyYdIB?TN`BeVWb>-9RJW-G0 za7Z#Clg@}wJ>|qKp3_0-$>pa{5{+gb3Dabs#I#CeQqK3LG@=a}0PLyYkADm&`kbuj}888=;iN+qOBe$?nV+P6{6pL_@^yUBQ1pd_9 zLJcTMH#UyGxn^dS3KEJZv){H(4x zmnwIATdA;Q#MoNn&ezs>VXtLB;9jckj@>QD1}`SGd_S&K)=Z859mygfvwQ2ytUU0R zf>$ml9D);|=FV;~oa>T($VR%rUzYC`HFi=t{51$eIaXB#`*G!M*Rs-RDfGKYFb1!K!M(F-`(ijpwwifg*ffoh*w zoRiPHJ{C)m4y`*v(g{Ju?M+^bzL6W%Czno}^Y0B^!Dsh3e^SCmTp`b-Z?&J^4dNNu z;ec0-co4GmWd&kA#E#Pr$BB{*0(}|leaK2bcu9)z^v3Joua2B+6Aa!7uLj(fcwYaK zUEi&;++%2!DVo9>ht=1fIGzLEtlFlSW>7=B_=+YmSWt(wDHoUI ziJ~_7T|~W=;hke?KP>B~dawj>;Oo&hhZ(!Gj5Dv~`l{v3%)W#}twF8XkCX()wTRHI zbMqV{6Dq0l5PIV7&A-`}4n34KqGGw1{~pk%LKpi$wqJ6{Ewl*xivJz|PSzu!AYHN3 zbtWa|VMBaZF2&#GDt&#P}pFkgB0f0LPbA$IRakB=`GP0Bd;b%0F> z2^_2`7JbDClxH1poPk0W7=~0yx<5gZot=VeXOhb@LM=(hYh5BfO2KP>{W6KDO{J4f zttk$~oRT`n21pL}nFyf1P|4PID_uHaoT%2t-90B>F4CyOk)Rjcp={+clt_{%?3$a` zdLyGCyPW&U{Boe+&N^k6Zk>cP zE*Av@6@IX-KE8t=oOtpu7E$F98zqk#EqoK}XB~Yv{O1ILHF{cN^pN}8F8TZb8x6e- zgOa4#P6cMn6o8g#=mb{^k;LD!HFF_9b=&#>*kpQ2UDqbw`YSasonU17Bb>wr4qW+5 z5X3tSF3pz0QRrv~zyFmvK4Ld%@9BY@E28l{D=eOpve5MS5sB zb$&P$`+oliBlKp>I--?a7aC-R5O99TMC;+d7IhgRN> zefz96Bd4HT1dbo?aB8PZ_m^9cj;j{7%l6%3=ZC=+vSb*G2`tOM6V?3uAp`hgwS?Nijp zBeV>npA2uA&$X<>|6Eve0^_%ylfD+L?HX^wR#Oz@8=<5gVl^n-Ud<9>Oocw`!5_ zM-GjnZMUMyh6eT5m6iOpHFn35s`lfXh*77(a*T2JuQ&l=$BIVs{%+_J26r-Pi;f&B z$shHSAfPa=rMxJPR_b=hv4;nu)@i9{&{s)6`WhFM&Gw*;mVGf8^-oduKa?neL&KcsWmFr zrpy~Yq#JcI3SxdWEk?sKV33zA7&*^5AQmD^fGN)Y6X{p8Q&ss&Vjl@2I}(IKtEW#t zy1~W9u~deSrs?#@OqLMNBm00b>uX9>y&CIR2SV7@>>qses;%FA6}n*29+;^7?WB>H zdKZr5L@>c|a*)0OPOo}E@OlMIu`)Clsb@bWg-vt`D63cGilUxQoU5&1J z-qoufkSCF=?u`$w?lZJOJ*hwopArX|98v%al2QA3-B%r>AvOVN zJQo)iqY}>RV9@a9R&TFNMDK#CN*F?Lo@-<8)G6Fc;UrN+Jhdc35wdIx9kATL$VmErswDZrEZdT)dy`j7vfnic_&a@T))CqDQ}9caYi)Dkw$V_ z6c{JS$wqTEL*=sR!BoLTbyd2^|My0Q6e5?Poh%CL(^)WBh7IIUE z>C+KtRyd7On)!s(j5r2*cIAt0V{iRlrL`Cnn9~jeb-#VN58+VDw)#cVrTXSykOBp& zE(>M+yJQkf{ukL+9atDS@7T<~vynFT7MQl4Yz^o|x1!6xFEmTOL-x__sUXW)a!A;y zchHulq_Yga@)@5A@FMvHYb05k>pPT0soV_wRAL^tOO&M3(@wT?D5=}gNb%9fmB~g= zxY&M@OLel)g_z4FeP6!W_SiJ2qsEnv+Sf-1Qz1yw87AU$SkOug6CSgOsXsj;H3&k@Ke-;L@P@8{vCakcx*>X+olp>TTVlEOk{>Gq>RCL15cn&rqla^(mju1_oX|vK?Ui(K_4m3d zD6i{gVxuda<~IX>R1^%#&6)I4VmZG!t$oSpydf8l~0d0iJ zTnFM2SBW@mFABK-)_hDngse9UA@-oBdzCo#fExkApA@$9=-BGGf&6qiIDQhN3c8KqT86_MYw9i3I7F^~Nc2QapB-kDc;RW? zyOyqeV4sJsY9+b+f_3ACZW9ECy3z1+{pA-_zpwh9EPrC8ThtL@!A0_ihB-yh`%Zz2v&Ay)Ld4J!@SQB%73xCxY&_+xqoX50y7_ z>OvDCNFj$MBWH?#ZC1vnT2AZ!TAhFVYcqZeWG}R@4Slu!YXfhFfF{&=%|VuWRBpZM zI}6)pxiS*WCx#4MlSn(Qp9yt)fz1kOKfwo#=0Qf!n!*^?qs7w81Ki-nzx@Tb98$l3 z0++mzS8~}O@G?@>qfPY)NH^jZ-J-^bX``EGN8zW*qN4JSeAcn@A8Ds$l&K6871M&# zwEh^r^b(wYCuWXNAK?6>MaYLE*YV|0Vq+b&NE+qPr^ZTumDp{9hDXN19d~}Xn|&d@ zf%vUuQB$L>akU=S_nIp5`Vn!XGFZR&xH(-(*!hxgyV`=VCR$Ti3*$E)+L zh9j8_^35LMQoaHeh|ph3yYl&saiklZSFT8+AX)Tq{5CLgd9KU;#yO}R-HCvWVtiF- z24Nx!w3hsejHFv{$(Xy7m7$2&b$o`Nc&Q|oJ--^=x=73mNn7?&s2O;p#V2MX-d zHS`mYT8!RvzD~c!6UbgnptD=1e`ySgKz}$vri58nz`V-%-hHwJy|1sY=i}p}KaEM2 zX9B5Ek$q6zPYNf!_Th?JAJDNJ@*eh5E`1q8xi}AMQfPu4ER+)@rIX%cJg1&`j7C48 zQ(`({E90VW4cr7OG4;D?K{tN@*J-0hsiX0sK}Eny%qiR87?l^${S9lQem|DG#>7nq z*aH7BtOc&+%`DVN-(9GG$sHY*3HL{mU}2T1^h3mjJq;(KKR7c47d1o;a}KewdKI^e zpr`NDA4EvkP-e8&p|?v6YC6syS_!ob|Bg$aJ{%-d=ikTgwV5rF6i00xsz0q)vze|$ zw|Jd{4ToUN0ZTPeX)W-v(=`RE7O|BY#~nfAdTZEBq%WS%p2c|GA;vJi$qFt%Lschf zx$jHKU&SUYr%_n4GST+3V(b~w=WCLsa)!Jf1akF%cbW)^#BQ!Ej9+c2qA@FYZm7n! z>}L(+-4FBlnwc;gaVtQ69}OX)4v|*%Ws!2;TjQwEe7;lG%_wvoO!yIGRBX#6!whHwNclXKR| zXeVT9rV{vba)E;v{7GyYKL4E_%u^0mWWA=acMu!~&qI?m2lTRkr8!8BM6kh+k-c~-O=xAzZyrM zO#~nb14~CtwJM%x!@epV^6}6oEAq(i#9LlFci z=}rMr=?+OL=?3ZUc)vdP`{Tb^3s?(g=9+Wu{n`7(9}Xp*$^mjC5G6~Lg4P+o5Cdk( z?cLq@>G=z5=io7GND3=sNTk)$TJNGCA$OGpa-|1BY(c{5-UFGxO~~5;OI-{9cf7z2 zzTlfXp#VoPLD@}E^ryTR6p7Yn(!jvIZ;eT1m_f<-p5sG5c%IlVOc80amxE*x(G=&o zBKsRsVLL0x&Ibg5fn~V0V%ChHS1;xyh}et_QtiF+6V4hOXuWJ+-9RCLn*`CC%q~S` zt4K7UcW@J{C8w44Xcn5EqGnr;h%IM>u8_O+xkQToRrdXD-{#M1-~OYji=McyJKG!M zWcxRcpnXCXR@FDZ1pR_@m8e=3%4u!$#wp-VP9Lt1Q1`@~8#{3#>o67AXLsH6 zX&FiJO>Wm)@J%6g(aipXH*6tJgR8LBA$VwC`noy-+WP3_BylTC)_yH{wk`Ua>`D2| z$PxHproAWmqLJf&Xy$e`SJ&XXM*h*~SjKXd40ed-D5`M+i_-}|5sIEWm5@cDAi^1B3=SI@5J9XAvVtWRzJdd7Xk?2nGDLeblev!mb6nUX-+ z`(l2K_MOtu_(XH45gB;=etqj05j97i%8|>N1vnp-b1XjVFbdShQsZVk+}m%T+v`_9 zK0RjuL(!WH39g4n^Ow2u0gQ{so2gF9#1_+}m%-II2@2pi|y|pF=XF z^gVNi7AUZ(>+9AqG73AeeG>UY?A*KA=#Y0IXLi->|88mBG|lTqNBtK{?4-RskrJZZ zj1ZrMzSU7H`j}#6^IJA-o5F%jWQ-v#*qp1YcW-qRkf(*@X=lR`(YOG(@12(y${TqY z#iSRsXV>(Gxv}euoU@=N;~Imn3cvIdsp$~pC*#i}5gLH%?`Xz6Ul}U)9&HDJMP|wK zbV*y%k<6)pnS++VSvMI?dB`Ua%#VS3cviUe{Oa;1^IYXwDH@@}5?IX? zmeBt5b&YU(2_0aerjD@c;zy>5UGrtCLA?~5oxjIWSdCt>Ru(&!xvFh3IR!?lUnkMb zY;X)|!uC~Y15vAXOM3hKR()Ra?#ti}%h|XKVZh^XxA`l3mhRA|a>$l3I1FIL<>NA6 zgzVc@lJF;^&t~nh<>7(RN(mveSZzVQDdK$Yl^?juqniKOP`{zo%!yB|#R&s~W>|&K zPpEMiIYEv;yC9yXD`9^Gzo7>5Kc+haGq}{ z5ptbsA=ZQP&+kl>gX7MNuUTrv$d$dmE4^g~6j}~M2f9Rg+zhFtDCS17F!qGeXgA00 z%z>(N`1&i_^(3w$e1ak@4l5+MXpv&#-9o8O484c4$uB=SGFX9o+V0!g_GE<>)p9`2 ztk~f4NFt?|VPBnr>#W#RO$45XYdtCE)oIjzCP^7+7IzJt060*^O*eilexO3rb1vlD zswOC55^tW;j+OAYzU&mwFXy$Gn$f!TU)@+|Pg#kG~UFiT<`aR#Bixl_! zZAz=P=uZv4b0~4p;$hXO;h8NzUl=xi7cNp$Pl`e{ddo=KFPU$RS-`o82Xt*pcPe3| zYgh_?9V|e@P#LQ?nP2np~0oqc?Evcd50dafWAeOnEDtJ#((<^?Sw#GeVJ=8ytyQPhun zZ@+Ew9D2O%{T!bz&6|-~(-^I0U`%Lc_K6pt^rCd+vBjeuF~vf#yS8VrzUqwo&v-_l zO>W>?_*KQe`se7y1!Bu>VD91~xE1A-&`O|hn^<#xThiPuJBfU^!j;ge9Bo)P@K77{ zPFth=S|y^6;l&sbQ;Yu-Q(ONNQ@Q*eV5Hed8hl|flIV4*s~Z@^BAaHQG8jFd?<50L z9HL&z3vDC6y5ihX>87Wp@mg;&v#^lxm{o*=U~yzbjPu-vL+oDsbRDa2s3MEPwVPzv z%{q*wm=_BHXPk8sM@=sxBBH#i3Kyj6yjKV31CHMM4s22QBqUv%AcZ#{bbnz3TLcY! zL*#h8*lh3UnC7V}iZ9tzG2bw$9ac3p@s;wdot&H;`pqS`%Y@HW{1v#fg&Z$5$ab-D z^jcvZbEfp%>u<2Oq@kLEe{8mDs{;Pea>e_Uz&ccuit{hGjdLrvj?t)QQ+c?N^}h&6 zX#(BrOSjQ{>9rzqSvO9Xs&!8p5W5Zx(aa9DTdVAPwPw(b{F&Lp-oeVzS&ki367vEI zH7*w7TmBcA3{ib%*m@jul;ZA;0y)1Qj*k%v-@SNhtplfmXTO@}+2K)t+JbIp@);H4 z-NntL8yYE^hz{U)k?`zinqy)qMvl>>f@)OUcZikVYImigFZ%kA^aCrUA_q!}2gD4b z*YU^1Fcp495!H3TfZrkk)ye6jwNkW#Z6=4a*+HM_$|XQkY{Swrou@@HM+r

    DqCpY8<%fc?9)RV>7&u6Oa9> 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

    71Xm$Kw9HdKR}{Zo{aZ}PJE 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�MYUyy9D+Tex8^fg1z73`IgS!aum9aq`FJCsBT5 z%_*uiU+#7AL#4QS9O>Nf zboq0g-IJg6HXyRAbI6U9PB3MfB~I09m8jDRG7?T48la77Vz+B^)?wh2GFt7;`<{q) z;VhbM$E~?sjGnK2uw1?%&kP7cCrO;am8`BfRHz-tt5!mgOpf_#dkJ5B`DjOO+>G94 zK2nrtVeWwRyre)`<&S7?fRpPKS$w00R7Tw)iV$qVVRTqhE+rf}0L({r;Zoi=6Iiyt zRs~UXl>a6=d<_08XNjFxz?v>M0P|*Rq0a==g3Ip(1DF`x>8OAOEd6EA0aTNPC$Q!R z*f+hC{R&@xD$43~35v7pE>7&ED`zvV2Q?NcwVH_8gOhZCoIJ%0?t?P#BK~e9ZIaf4 zwr9=i&wtVMX8kkXEp6J>yU!@HW&L8ZZMoP#Zq}=o)7>^cplhL-(1IdZMTBy|c9UGR zvI0Y=x2$~t?RD+Tw0u};%0QLMy=B6WlJ*(l5ky{QQ;T}dOf&0Lf9$2nMbW>~m52&j z0{yi!AyOBSdbos$YADy%ykvZ$Fd5PalEB>q)5KU5*cl`S175>;Wjr zF=xB8jMtUKwjYGD>*%6?Y-H8-P6uJ~>kyNJyTy#8(TA*OO8oe(uyyd6a;DwF2KG9} znNFn&TnQF_b|q)=p!d$v`79bf@ZCMNm;e4F48L*$Ur)E6jwb+llWLcOWcogIC|D%| zw+>|oU)~+XV>sCxr}ZG0bL?%zz;?8t6;`Jpro2A}0#%gAvN5me{Rq0F`AXGp8;j)N5V+3;uXxE8G+N9@55m7e!RthPP-p}xa)tlKA?VDnr0mtA zwm*w1VdAc%G7V3`Bj5OfR9p1WyRG+TS@pNMvbt#Nbo|(_$D7p#Dp(OhdUKOD(pW>X zlZvLouEDTh_1L-&4dcJD4oYORV&V*b6Z97ae)&D+UQYZ#)3r3ZW}370DWPrlcrW&Y z(sfk6-p*{k{!YFG+sK2X;gru6X!=+eaRiIcUU`# zc>ON8g&jFNOYW8ZC~C|wys#?(TrrSs*6P1?ziBaIz)(q1@BGTRb@*?O<=?+Ek5-Td zfs5|85Dd^wr;@1H8m*Jrl?}&}B-sphU(8?UX;yQ_Bflc&!KnI9dYnX$B17|z&>6k+`r z;bMh?MYcd7SP0w}l}PlMU$BMk z?QDf@+FqT|4A(Y=jEz<;@Li1O7*CGTiRX;|qJ!elc@Pk%mp`EyF0yE})~3emn-H!P z9oKASK3|GY{k^6Nhah}t5nqbU%H4{-qy zQv;rsAMq@G>Dcmm692A2m7@WYY2=jljveoqz@U!CX;7(R9LLF>nvzlc z$j#{+i5L<@_2?ZSMCh(djr>jVI(oJ+`Awx#Nku7*eh0}HsJup%4+gG~`?V@a25GPo z5cOEq8{8>>>b%3!`Ar30gsW>!+hv79n%;$T``lxtF>+AeL?SKZERFwaDH2?b?;ISl z=P-&nYSaZD(-H#dwUVj>(rGr+(t^szI`K(%#(N0FB`5Fsl_pIw*xI)32*K zcXU7XSN@{ad%xGA(qE#*Q|R*gT0f^NLG>LoP~(7lpqSxg4+k5#B@S%EG}&QP_o@P% zVL0nP4QZh0=QdejYeu{b(DLAnetJW2KMkJej`C9#_pqTr3ZE`ZOXqB25wO^t4ttJrL+x^p6x6*a{5n|>#J2lI;( zQ%xkz{5L@PS7>0-+|esYkW6j9acWu5ks#lW-C9W%%V~xJO=&yQ35}gPD?+_1YePI?>nVPp!`b>Pwu-;Jl^&|N$uB)dP zci#Hm*xJ^Q_WHLWx6g3x^%5brDaOf3i!o0V3FK;Gkk$3Qa7&rXxST4d&n;n>4$r)$W>@C0`cb%OQ6c@r|F{D=|A? zpT+6lk@&sm^`ZYH3i=;lw*BP~qH≦J7CKgX7<<_WwQ2nZa9VvQgs)I;0dKfB6_+ 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 z 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

    R{tsz>Mk-JO8T*eK-l~Da?4L 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

    KvdZ8oMWS%^DIXXRK-xI6aFBYkR@6vT*( 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 literal 0 HcmV?d00001 From ffd6d6636ddfcb5956d0c1e4799777cbfaf48980 Mon Sep 17 00:00:00 2001 From: Charis <26616127+charislam@users.noreply.github.com> Date: Wed, 5 Aug 2026 10:39:58 -0400 Subject: [PATCH 29/83] refactor(studio): static tab kind registry and tab id codec (PR 1/9) (#48718) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary First PR in the tab/snippet decoupling stack. Purely additive: no existing call sites change behavior except the `EntityTypeIcon` rewire, which preserves its API exactly. - **`state/tabs/kinds.ts`** β€” static `TAB_KINDS` descriptor table (`TabKind`, `TabSurface`, `surfaceOf`, `kindsOnSurface`, `isTabKind`). Leaf-safe: its only reference to the domain `Tab` type is a type-only import, so it stays importable at module scope (needed later for the valtio store and the persistence migration reader) without creating a runtime cycle. - **`state/tabs/kinds.icons.tsx`** β€” per-kind icon leaf module (`ui` + `lucide-react` + `TabKind` type only), plus the preserved `LogsSnippetIcon`. - **`state/tabs/tab-id.ts`** β€” `createTabId` / `parseTabId` / `toUrlSegment` / `parseUrlSegment(segment, surface)` codec. `parseUrlSegment` is surface-scoped: a bare segment only resolves to a kind when the surface has exactly one bare kind (true for `sql`). The table surface has five bare kinds (`r`/`v`/`m`/`f`/`p`) with no URL disambiguator between them, matching `/editor/[id]`, which learns kind from the fetched entity rather than the URL β€” so a bare table segment correctly resolves to nothing. - **`components/ui/EntityTypeIcon.tsx`** β€” rewired to a thin wrapper delegating to `kinds.icons.tsx`, preserving its exact prop API (`type`, `size`, `strokeWidth`, `isActive`, `sqlSource`) for all existing consumers. - **`state/tabs/tab-id.test.ts`** β€” codec round-trips per kind, bare-vs-prefixed URL segments, the `templates`/`examples`/`new` sentinels, and surface scoping (including the table-surface ambiguity above). Full plan: `apps/studio/TABS_DECOUPLING_PLAN.md` (not included in this PR). ## Test plan - [x] `pnpm typecheck` - [x] `pnpm lint --filter=studio` (0 errors) - [x] `pnpm --filter studio run lint:ratchet` (warning counts did not increase) - [x] `pnpm test:studio` (full suite green, including 50 new/updated tests in `state/tabs/`) - [x] `pnpm format` (no-op) ## Summary by CodeRabbit * **New Features** * Added consistent icons and metadata for SQL, notebook, chat, table, view, and related tab types. * Added support for creating, parsing, and converting tab identifiers to URL segments. * Improved handling of tab types across SQL and table surfaces. * **Bug Fixes** * Invalid, empty, or ambiguous tab identifiers and URL segments are now rejected. * **Tests** * Added coverage for tab identifiers, URL conversion, supported tab types, and edge cases. --- .../SQLEditorNavV2/SQLEditorTreeViewItem.tsx | 2 +- apps/studio/components/ui/EntityTypeIcon.tsx | 96 ++------------ apps/studio/state/tabs/kinds.icons.tsx | 117 ++++++++++++++++++ apps/studio/state/tabs/kinds.ts | 89 +++++++++++++ apps/studio/state/tabs/tab-id.test.ts | 112 +++++++++++++++++ apps/studio/state/tabs/tab-id.ts | 60 +++++++++ 6 files changed, 392 insertions(+), 84 deletions(-) create mode 100644 apps/studio/state/tabs/kinds.icons.tsx create mode 100644 apps/studio/state/tabs/kinds.ts create mode 100644 apps/studio/state/tabs/tab-id.test.ts create mode 100644 apps/studio/state/tabs/tab-id.ts diff --git a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorTreeViewItem.tsx b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorTreeViewItem.tsx index 615eecc6aad..8d9a35c3db7 100644 --- a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorTreeViewItem.tsx +++ b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorTreeViewItem.tsx @@ -30,7 +30,6 @@ import { import { getSnippetSource } from '@/components/interfaces/SQLEditor/querySource' import { createSqlSnippetSkeletonV2 } from '@/components/interfaces/SQLEditor/SQLEditor.utils' -import { LogsSnippetIcon } from '@/components/ui/EntityTypeIcon' import { getContentById, getSqlSnippetById } from '@/data/content/content-id-query' import { useSQLSnippetFolderContentsQuery } from '@/data/content/sql-folder-contents-query' import { Snippet } from '@/data/content/sql-folders-query' @@ -44,6 +43,7 @@ import { type FolderStatus, } from '@/state/sql-editor/sql-editor-lifecycle' import { useSqlEditorV2StateSnapshot } from '@/state/sql-editor/sql-editor-state' +import { LogsSnippetIcon } from '@/state/tabs/kinds.icons' interface SQLEditorTreeViewItemProps extends Omit< ComponentProps, diff --git a/apps/studio/components/ui/EntityTypeIcon.tsx b/apps/studio/components/ui/EntityTypeIcon.tsx index 2dc05a6df58..3427a1654a4 100644 --- a/apps/studio/components/ui/EntityTypeIcon.tsx +++ b/apps/studio/components/ui/EntityTypeIcon.tsx @@ -1,29 +1,8 @@ -import { Eye, GitBranch, ScrollText, Table2 } from 'lucide-react' +import { GitBranch } from 'lucide-react' import { cn, SQL_ICON } from 'ui' import type { SqlSnippetSource } from '@/components/interfaces/SQLEditor/querySource' -import { ENTITY_TYPE } from '@/data/entity-types/entity-type-constants' - -/** - * The single icon representing a logs (`log_sql`) snippet β€” reused by the tabs - * (via EntityTypeIcon) and the nav tree so the two can't drift. Callers pass the - * context-appropriate size/className; the icon and stroke stay the same. - */ -export const LogsSnippetIcon = ({ - size = 15, - strokeWidth = 1.5, - className, -}: { - size?: number - strokeWidth?: number - className?: string -}) => ( - -) +import { TAB_KIND_ICONS } from '@/state/tabs/kinds.icons' interface EntityTypeIconProps { type: 'sql' | 'schema' | 'new' | 'r' | 'v' | 'm' | 'f' | 'p' @@ -33,6 +12,7 @@ interface EntityTypeIconProps { sqlSource?: SqlSnippetSource } +/** Thin wrapper over the per-kind icons in `state/tabs/kinds.icons`, preserving this component's flexible prop-based API for callers without a whole `Tab` to hand. */ export const EntityTypeIcon = ({ type, size = 15, @@ -40,22 +20,11 @@ export const EntityTypeIcon = ({ isActive, sqlSource, }: EntityTypeIconProps) => { - if (type === 'sql' && sqlSource === 'logs') { - return ( - - ) + if (type === 'schema') { + return } - if (type === 'sql') { + if (type === 'new') { return ( - ) - } - - if (type === 'schema') { - return - } - - if (type === ENTITY_TYPE.VIEW) { - return ( - - ) - } - + const KindIcon = TAB_KIND_ICONS[type] return ( -

    + ) } diff --git a/apps/studio/state/tabs/kinds.icons.tsx b/apps/studio/state/tabs/kinds.icons.tsx new file mode 100644 index 00000000000..04c49527786 --- /dev/null +++ b/apps/studio/state/tabs/kinds.icons.tsx @@ -0,0 +1,117 @@ +import { Eye, MessageSquare, NotebookPen, ScrollText, Table2 } from 'lucide-react' +import type { ReactNode } from 'react' +import { cn, SQL_ICON } from 'ui' + +import type { TabKind } from './kinds' + +export const LogsSnippetIcon = ({ + size = 15, + strokeWidth = 1.5, + className, +}: { + size?: number + strokeWidth?: number + className?: string +}) => ( + +) + +interface KindIconProps { + // Structurally compatible with `Tab` (`state/tabs.tsx`) without importing it, keeping this module a leaf (ui + lucide-react + `TabKind` only). + tab: { metadata?: { sqlSource?: 'database' | 'logs' } } + size?: number + strokeWidth?: number + isActive?: boolean +} + +type KindIconComponent = (props: KindIconProps) => ReactNode + +const SqlKindIcon = ({ tab, size = 15, strokeWidth = 1.5 }: KindIconProps) => { + if (tab.metadata?.sqlSource === 'logs') { + return ( + + ) + } + + return ( + + ) +} + +const TableKindIcon = ({ size = 15, strokeWidth = 1.5, isActive }: KindIconProps) => ( + +) + +const ViewKindIcon = ({ size = 15, strokeWidth = 1.5, isActive }: KindIconProps) => ( + +) + +const badgeKindIcon = (letter: string, colorClassName: string): KindIconComponent => + function BadgeKindIcon() { + return ( +
    + {letter} +
    + ) + } + +const MaterializedViewKindIcon = badgeKindIcon('M', 'text-purple-1100 bg-purple-500') +const ForeignTableKindIcon = badgeKindIcon( + 'F', + 'text-warning-600/80 dark:text-yellow-900 bg-yellow-500' +) +const PartitionedTableKindIcon = badgeKindIcon( + 'P', + 'text-foreground-light bg-surface-400 dark:bg-border-stronger' +) + +const NotebookKindIcon = ({ size = 15, strokeWidth = 1.5 }: KindIconProps) => ( + +) + +const ChatKindIcon = ({ size = 15, strokeWidth = 1.5 }: KindIconProps) => ( + +) + +/** Per-kind icon, keyed identically to `TAB_KINDS` β€” see `kinds.ts` for the descriptor table. */ +export const TAB_KIND_ICONS: Record = { + sql: SqlKindIcon, + notebook: NotebookKindIcon, + chat: ChatKindIcon, + r: TableKindIcon, + v: ViewKindIcon, + m: MaterializedViewKindIcon, + f: ForeignTableKindIcon, + p: PartitionedTableKindIcon, +} diff --git a/apps/studio/state/tabs/kinds.ts b/apps/studio/state/tabs/kinds.ts new file mode 100644 index 00000000000..48ba307a799 --- /dev/null +++ b/apps/studio/state/tabs/kinds.ts @@ -0,0 +1,89 @@ +import type { ReactNode } from 'react' + +import { TAB_KIND_ICONS } from './kinds.icons' +import type { Tab } from '@/state/tabs' + +/** Which tab strip / layout a kind renders in β€” strip filtering, bulk-close, and recents key off this instead of an id-prefix check. */ +export type TabSurface = 'sql' | 'table' + +/** `sql` covers both Postgres and logs snippets; `Tab.metadata.sqlSource` discriminates */ +export type TabKind = 'sql' | 'notebook' | 'chat' | 'r' | 'v' | 'm' | 'f' | 'p' + +interface TabKindDescriptor { + surface: TabSurface + /** URL segment prefix. `null` = bare segment β€” `sql` (legacy) and every table kind, since `/editor/` is already bare and unprefixed today. */ + urlPrefix: string | null + /** Singular noun for shared copy, e.g. a not-found message: "This could not be found." */ + noun: string + supportsPreview: boolean + Icon: (props: { tab: Tab }) => ReactNode +} + +export const TAB_KINDS: Record = { + sql: { + surface: 'sql', + urlPrefix: null, + noun: 'query', + supportsPreview: true, + Icon: TAB_KIND_ICONS.sql, + }, + notebook: { + surface: 'sql', + urlPrefix: 'notebook', + noun: 'notebook', + supportsPreview: true, + Icon: TAB_KIND_ICONS.notebook, + }, + chat: { + surface: 'sql', + urlPrefix: 'chat', + noun: 'chat', + supportsPreview: true, + Icon: TAB_KIND_ICONS.chat, + }, + r: { + surface: 'table', + urlPrefix: null, + noun: 'table', + supportsPreview: true, + Icon: TAB_KIND_ICONS.r, + }, + v: { + surface: 'table', + urlPrefix: null, + noun: 'view', + supportsPreview: true, + Icon: TAB_KIND_ICONS.v, + }, + m: { + surface: 'table', + urlPrefix: null, + noun: 'materialized view', + supportsPreview: true, + Icon: TAB_KIND_ICONS.m, + }, + f: { + surface: 'table', + urlPrefix: null, + noun: 'foreign table', + supportsPreview: true, + Icon: TAB_KIND_ICONS.f, + }, + p: { + surface: 'table', + urlPrefix: null, + noun: 'partitioned table', + supportsPreview: true, + Icon: TAB_KIND_ICONS.p, + }, +} + +export const isTabKind = (value: string): value is TabKind => + Object.prototype.hasOwnProperty.call(TAB_KINDS, value) + +const TAB_KIND_LIST = Object.keys(TAB_KINDS).filter(isTabKind) + +export const surfaceOf = (kind: TabKind): TabSurface => TAB_KINDS[kind].surface + +export const kindsOnSurface = (surface: TabSurface): Array => + TAB_KIND_LIST.filter((kind) => TAB_KINDS[kind].surface === surface) diff --git a/apps/studio/state/tabs/tab-id.test.ts b/apps/studio/state/tabs/tab-id.test.ts new file mode 100644 index 00000000000..618499d0d63 --- /dev/null +++ b/apps/studio/state/tabs/tab-id.test.ts @@ -0,0 +1,112 @@ +import { describe, expect, it } from 'vitest' + +import { kindsOnSurface, TAB_KINDS, type TabKind } from './kinds' +import { createTabId, parseTabId, parseUrlSegment, toUrlSegment } from './tab-id' + +const ALL_KINDS = Object.keys(TAB_KINDS) as Array + +/** Test-only narrowing: every call site below passes a known-non-empty literal. */ +function mustCreateTabId(kind: TabKind, contentId: string): string { + const tabId = createTabId(kind, contentId) + if (tabId === null) throw new Error(`createTabId unexpectedly returned null for ${kind}`) + return tabId +} + +describe('createTabId / parseTabId round-trip', () => { + it.each(ALL_KINDS)('round-trips a uuid-like content id for kind %s', (kind) => { + const contentId = '3fa85f64-5717-4562-b3fc-2c963f66afa6' + const tabId = mustCreateTabId(kind, contentId) + + expect(tabId).toBe(`${kind}-${contentId}`) + expect(parseTabId(tabId)).toEqual({ kind, contentId }) + }) + + it('returns null for an empty content id, so createTabId/parseTabId never disagree', () => { + expect(createTabId('sql', '')).toBeNull() + }) + + it('rejects an id with an unknown kind', () => { + expect(parseTabId('bogus-123')).toBeNull() + }) + + it('rejects an id whose kind is an inherited Object property name', () => { + expect(parseTabId('constructor-123')).toBeNull() + expect(parseTabId('toString-123')).toBeNull() + }) + + it('rejects an id with no dash separator', () => { + expect(parseTabId('sql')).toBeNull() + }) + + it('rejects an id with an empty content id', () => { + expect(parseTabId('sql-')).toBeNull() + }) + + it('splits on the first dash only, so a dashed content id survives', () => { + expect(parseTabId('notebook-3fa85f64-5717-4562-b3fc-2c963f66afa6')).toEqual({ + kind: 'notebook', + contentId: '3fa85f64-5717-4562-b3fc-2c963f66afa6', + }) + }) +}) + +describe('toUrlSegment: bare vs. prefixed', () => { + it.each(['sql', 'r', 'v', 'm', 'f', 'p'] as const)( + 'drops the prefix for the bare kind %s', + (kind) => { + expect(toUrlSegment(mustCreateTabId(kind, 'abc'))).toBe('abc') + } + ) + + it.each(['notebook', 'chat'] as const)('keeps the prefix for kind %s', (kind) => { + expect(toUrlSegment(mustCreateTabId(kind, 'abc'))).toBe(`${kind}-abc`) + }) + + it('returns null for a malformed tab id', () => { + expect(toUrlSegment('not-a-real-kind-abc')).toBeNull() + }) + + it('passes through a null tab id, so it composes directly with createTabId', () => { + expect(toUrlSegment(createTabId('sql', ''))).toBeNull() + }) +}) + +describe('parseUrlSegment: surface scoping', () => { + it('resolves a bare segment to the sql kind on the sql surface', () => { + expect(parseUrlSegment('abc', 'sql')).toEqual({ kind: 'sql', contentId: 'abc' }) + }) + + it('resolves a prefixed segment to its kind on the sql surface', () => { + expect(parseUrlSegment('notebook-abc', 'sql')).toEqual({ kind: 'notebook', contentId: 'abc' }) + expect(parseUrlSegment('chat-abc', 'sql')).toEqual({ kind: 'chat', contentId: 'abc' }) + }) + + it('falls back to the bare sql kind for a segment that looks table-prefixed, since sql has no other claim on it', () => { + // "r-123" isn't a `notebook-`/`chat-` segment, so on the sql surface it's just + // a raw (if odd-looking) content id β€” the table kind `r` is out of scope here. + expect(parseUrlSegment('r-123', 'sql')).toEqual({ kind: 'sql', contentId: 'r-123' }) + }) + + it('does not resolve a sql-surface-only prefix on the table surface', () => { + expect(parseUrlSegment('notebook-abc', 'table')).toBeNull() + }) + + it.each(kindsOnSurface('table'))( + 'does not resolve a bare segment on the table surface, which has %s among several ambiguous bare kinds', + (kind) => { + expect(TAB_KINDS[kind].urlPrefix).toBeNull() + expect(parseUrlSegment('123', 'table')).toBeNull() + } + ) + + it('returns null for an empty segment', () => { + expect(parseUrlSegment('', 'sql')).toBeNull() + }) + + it.each(['templates', 'examples', 'new'])( + 'resolves the "%s" sentinel to the bare sql kind, not a UUID', + (sentinel) => { + expect(parseUrlSegment(sentinel, 'sql')).toEqual({ kind: 'sql', contentId: sentinel }) + } + ) +}) diff --git a/apps/studio/state/tabs/tab-id.ts b/apps/studio/state/tabs/tab-id.ts new file mode 100644 index 00000000000..f0408e6c73c --- /dev/null +++ b/apps/studio/state/tabs/tab-id.ts @@ -0,0 +1,60 @@ +import { isTabKind, kindsOnSurface, TAB_KINDS, type TabKind, type TabSurface } from './kinds' + +export interface ParsedTabId { + kind: TabKind + contentId: string +} + +/** A tab's id is always `${kind}-${contentId}` β€” kind names never contain a dash. Returns null for an empty contentId, since `parseTabId` can't invert it. */ +export function createTabId(kind: TabKind, contentId: string): string | null { + if (!contentId) return null + return `${kind}-${contentId}` +} + +/** Inverse of `createTabId`. Returns null for a malformed id or an unknown kind. */ +export function parseTabId(tabId: string): ParsedTabId | null { + const dashIndex = tabId.indexOf('-') + if (dashIndex === -1) return null + + const kind = tabId.slice(0, dashIndex) + const contentId = tabId.slice(dashIndex + 1) + if (!contentId || !isTabKind(kind)) return null + + return { kind, contentId } +} + +/** The URL segment a tab id renders as. Drops the prefix for a bare kind (`sql-` β†’ ``, and every table kind); keeps it otherwise (`notebook-` β†’ `notebook-`). Passes through a null `tabId`, so it composes directly with `createTabId`. */ +export function toUrlSegment(tabId: string | null): string | null { + if (tabId === null) return null + + const parsed = parseTabId(tabId) + if (!parsed) return null + + const { urlPrefix } = TAB_KINDS[parsed.kind] + return urlPrefix === null ? parsed.contentId : `${urlPrefix}-${parsed.contentId}` +} + +/** Inverse of `toUrlSegment`, scoped to a surface. A bare segment resolves only when exactly one bare kind exists on the surface (`sql`); the table surface's five bare kinds have no URL disambiguator, matching `/editor/[id]`, which learns kind from the fetched entity rather than the URL. */ +export function parseUrlSegment(segment: string, surface: TabSurface): ParsedTabId | null { + if (!segment) return null + + let bareKind: TabKind | null = null + let bareKindIsAmbiguous = false + + for (const kind of kindsOnSurface(surface)) { + const { urlPrefix } = TAB_KINDS[kind] + if (urlPrefix === null) { + if (bareKind === null) bareKind = kind + else bareKindIsAmbiguous = true + continue + } + + const prefix = `${urlPrefix}-` + if (segment.startsWith(prefix)) { + const contentId = segment.slice(prefix.length) + if (contentId) return { kind, contentId } + } + } + + return bareKind && !bareKindIsAmbiguous ? { kind: bareKind, contentId: segment } : null +} From 55095dcd006f53c186b3fbbfd6aa90c222df87c7 Mon Sep 17 00:00:00 2001 From: Etienne Stalmans Date: Wed, 5 Aug 2026 17:07:22 +0200 Subject: [PATCH 30/83] chore: highlight totp app friendly name (#48755) ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? UI update ## What is the current behavior? We only show the alternative factor's name, if one exists. ## What is the new behavior? When presenting user with the MFA screen, make the MFA factor's friendly_name appear. ## Additional context Before: Screenshot 2026-08-05 at 15 41 07 After: Screenshot 2026-08-05 at 15 38 27 Screenshot 2026-08-05 at 15 37 43 ## Summary by CodeRabbit * **Bug Fixes** * Improved multi-factor authentication prompts with clearer formatting and more consistent factor labels. * Ensured the primary code label appears whenever a verification factor is selected. * Added a fallback label for authentication factors without a display name. --- .../interfaces/SignIn/SignInMfaForm.tsx | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/apps/studio/components/interfaces/SignIn/SignInMfaForm.tsx b/apps/studio/components/interfaces/SignIn/SignInMfaForm.tsx index 3e9d040ae21..92bc0850ef8 100644 --- a/apps/studio/components/interfaces/SignIn/SignInMfaForm.tsx +++ b/apps/studio/components/interfaces/SignIn/SignInMfaForm.tsx @@ -26,6 +26,11 @@ const schema = z.object({ const formId = 'sign-in-mfa-form' +function getFactorDisplayName(factor: Pick | null | undefined): string { + const name = factor?.friendly_name?.trim() + return name && name.length > 0 ? name : 'your authenticator app' +} + interface SignInMfaFormProps { context?: 'forgot-password' | 'sign-in' } @@ -142,9 +147,14 @@ export const SignInMfaForm = ({ context = 'sign-in' }: SignInMfaFormProps) => { + Code generated by{' '} + + {getFactorDisplayName(selectedFactor)} + + + ) : null } > @@ -208,9 +218,13 @@ export const SignInMfaForm = ({ context = 'sign-in' }: SignInMfaFormProps) => { onClick={() => setSelectedFactor(factors.totp.find((f) => f.id !== selectedFactor?.id)!) } - >{`Authenticate using ${ - factors.totp.find((f) => f.id !== selectedFactor?.id)?.friendly_name - }?`}
    + > + Authenticate using{' '} + + {getFactorDisplayName(factors.totp.find((f) => f.id !== selectedFactor?.id))} + + ? + )}
  • From aed332b663870821aaf3b1a072dbf6883ad7cc91 Mon Sep 17 00:00:00 2001 From: Jordi Enric <37541088+jordienr@users.noreply.github.com> Date: Wed, 5 Aug 2026 17:13:34 +0200 Subject: [PATCH 31/83] feat: migrate Edge Functions report to ClickHouse OTEL logs (#48756) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem The Edge Functions report (`observability/edge-functions`) only queries BigQuery. As part of the broader Reportsβ†’ClickHouse OTEL migration (DEBUG-73), we need each report migrated one at a time behind the `otelReports` flag. ## Fix Adds a ClickHouse OTEL SQL variant (`METRIC_SQL_OTEL`) for the 4 Edge Functions metrics (TotalInvocations, ExecutionStatusCodes, InvocationsByRegion, ExecutionTime), querying the unified `logs` table filtered to `source = 'function_edge_logs'`, with fields read from `log_attributes` (`function_id`, `response.status_code`, `response.headers.x_sb_edge_region`, `execution_time_ms`) β€” the same mapping already used by `edge-functions-last-hour-stats-query.ts`. `edgeFunctionReports()` now takes a `useOtel` flag that picks between the BQ and OTEL query sets and forwards it to `fetchLogs`. The page wires this up via `useFlag('otelReports')`, matching the pattern used for the Auth report. No behavior change while the flag is off β€” report still fetches from BigQuery. Also removed two pieces of dead code spotted in `report.utils.ts` while touching it: the unused `useEdgeFnIdToName` hook and a `STATUS_CODE_COLORS` map that was an exact duplicate of `REPORT_STATUS_CODE_COLORS` (the one actually imported elsewhere). This PR is standalone β€” no dependency on the in-flight Auth report OTEL stack. ## How to test - `pnpm vitest run data/reports/v2/edge-functions.config.otel.test.ts` β€” 9 new tests covering the OTEL SQL shape (single logs table, unix-microsecond timestamp bucketing, field mapping, filters). - `pnpm vitest run data/reports` and `pnpm vitest run data/edge-functions components/interfaces/Reports` β€” existing suites (46 + 54 tests) still pass, confirming no regression to the BQ path. - Manually: with `otelReports` flag enabled, visit a project's Edge Functions observability report and confirm charts render from the ClickHouse endpoint. ## Summary by CodeRabbit * **New Features** * Added OpenTelemetry support for Edge Functions observability metrics, including invocations, status codes, regional activity, and execution time. * Reports can now dynamically use either the standard or OpenTelemetry logs source. * **Bug Fixes** * Improved filtering and timestamp handling for OpenTelemetry-based Edge Functions metrics. * Added coverage for status, execution time, function, and region filters. --- apps/studio/data/reports/report.utils.ts | 38 +---- .../v2/edge-functions.config.otel.test.ts | 75 ++++++++++ .../data/reports/v2/edge-functions.config.ts | 135 ++++++++++++++++-- .../[ref]/observability/edge-functions.tsx | 5 +- 4 files changed, 210 insertions(+), 43 deletions(-) create mode 100644 apps/studio/data/reports/v2/edge-functions.config.otel.test.ts diff --git a/apps/studio/data/reports/report.utils.ts b/apps/studio/data/reports/report.utils.ts index 9c52a8759d4..67f646f33fd 100644 --- a/apps/studio/data/reports/report.utils.ts +++ b/apps/studio/data/reports/report.utils.ts @@ -1,7 +1,7 @@ import { type ComparisonOperator } from '@/components/interfaces/Reports/v2/ReportsNumericFilter' import { AnalyticsInterval } from '@/data/analytics/constants' -import { useEdgeFunctionsQuery } from '@/data/edge-functions/edge-functions-query' import { executeAnalyticsSql } from '@/data/logs/execute-analytics-sql' +import { logsAllEndpointUrl } from '@/data/logs/logs-endpoint' import { safeSql, type SafeLogSqlFragment } from '@/data/logs/safe-analytics-sql' export type Granularity = 'minute' | 'hour' | 'day' @@ -66,49 +66,19 @@ export const REPORT_STATUS_CODE_COLORS: { [key: string]: { light: string; dark: default: { light: '#757575', dark: '#9E9E9E' }, } -export const useEdgeFnIdToName = ({ projectRef }: { projectRef: string }) => { - const { data: edgeFunctions, isPending: isLoading } = useEdgeFunctionsQuery({ - projectRef, - }) - - function edgeFnIdToName(id: string) { - return edgeFunctions?.find((fn) => fn.id === id)?.name - } - - return { - edgeFnIdToName, - isLoading, - } -} - export async function fetchLogs( projectRef: string, sql: SafeLogSqlFragment, startDate: string, - endDate: string + endDate: string, + useOtel = false ) { return await executeAnalyticsSql({ projectRef, - endpoint: '/platform/projects/{ref}/analytics/endpoints/logs.all', + endpoint: logsAllEndpointUrl(useOtel), sql, iso_timestamp_start: startDate, iso_timestamp_end: endDate, method: 'get', }) } - -export const STATUS_CODE_COLORS: { [key: string]: { light: string; dark: string } } = { - '400': { light: '#FFD54F', dark: '#FFF176' }, - '401': { light: '#FF8A65', dark: '#FFAB91' }, - '403': { light: '#FFB74D', dark: '#FFCC80' }, - '404': { light: '#90A4AE', dark: '#B0BEC5' }, - '409': { light: '#BA68C8', dark: '#CE93D8' }, - '410': { light: '#A1887F', dark: '#BCAAA4' }, - '422': { light: '#FF9800', dark: '#FFB74D' }, - '429': { light: '#E65100', dark: '#F57C00' }, - '500': { light: '#B71C1C', dark: '#D32F2F' }, - '502': { light: '#9575CD', dark: '#B39DDB' }, - '503': { light: '#0097A7', dark: '#4DD0E1' }, - '504': { light: '#C0CA33', dark: '#D4E157' }, - default: { light: '#757575', dark: '#9E9E9E' }, -} diff --git a/apps/studio/data/reports/v2/edge-functions.config.otel.test.ts b/apps/studio/data/reports/v2/edge-functions.config.otel.test.ts new file mode 100644 index 00000000000..7d53b098f09 --- /dev/null +++ b/apps/studio/data/reports/v2/edge-functions.config.otel.test.ts @@ -0,0 +1,75 @@ +import { describe, expect, it } from 'vitest' + +import { METRIC_SQL_OTEL } from './edge-functions.config' + +const sql = (fragment: { toString(): string }) => String(fragment) + +describe('METRIC_SQL_OTEL', () => { + it('queries the single OTEL logs table by source, never a per-service table', () => { + const out = sql(METRIC_SQL_OTEL.TotalInvocations('1h')) + + expect(out).toContain('from logs') + expect(out).toContain("source = 'function_edge_logs'") + expect(out).not.toContain('from function_edge_logs') + expect(out).not.toContain('cross join unnest') + }) + + it('emits 16-digit unix-microsecond timestamps bucketed by granularity', () => { + expect(sql(METRIC_SQL_OTEL.TotalInvocations('1h'))).toContain( + 'toUnixTimestamp(toStartOfHour(timestamp)) * 1000000 as timestamp' + ) + expect(sql(METRIC_SQL_OTEL.TotalInvocations('1d'))).toContain( + 'toUnixTimestamp(toStartOfDay(timestamp)) * 1000000 as timestamp' + ) + expect(sql(METRIC_SQL_OTEL.TotalInvocations('5m'))).toContain( + 'toUnixTimestamp(toStartOfMinute(timestamp)) * 1000000 as timestamp' + ) + }) + + it('reads function_id from log_attributes for total invocations', () => { + const out = sql(METRIC_SQL_OTEL.TotalInvocations('1h')) + expect(out).toContain("log_attributes['function_id'] as function_id") + expect(out).toContain('count() as count') + }) + + it('reads response status code from log_attributes, coerced to a number', () => { + const out = sql(METRIC_SQL_OTEL.ExecutionStatusCodes('1h')) + expect(out).toContain("toInt32OrZero(log_attributes['response.status_code']) as status_code") + }) + + it('reads region from the response headers attribute and drops empty values', () => { + const out = sql(METRIC_SQL_OTEL.InvocationsByRegion('1h')) + expect(out).toContain("log_attributes['response.headers.x_sb_edge_region'] as region") + expect(out).toContain("log_attributes['response.headers.x_sb_edge_region'] != ''") + }) + + it('averages execution_time_ms from log_attributes, coerced to a float', () => { + const out = sql(METRIC_SQL_OTEL.ExecutionTime('1h')) + expect(out).toContain( + "avg(toFloat64OrZero(log_attributes['execution_time_ms'])) as avg_execution_time" + ) + }) + + it('filters by function_id list when functions filter is set', () => { + const out = sql(METRIC_SQL_OTEL.TotalInvocations('1h', { functions: ['fn-1', 'fn-2'] } as any)) + expect(out).toContain("log_attributes['function_id'] IN ('fn-1','fn-2')") + }) + + it('applies the numeric status_code filter using toInt32OrZero', () => { + const out = sql( + METRIC_SQL_OTEL.ExecutionStatusCodes('1h', { + status_code: { operator: '>=', value: 500 }, + } as any) + ) + expect(out).toContain("AND toInt32OrZero(log_attributes['response.status_code']) >= 500") + }) + + it('applies the numeric execution_time filter using toFloat64OrZero', () => { + const out = sql( + METRIC_SQL_OTEL.ExecutionTime('1h', { + execution_time: { operator: '>=', value: 100 }, + } as any) + ) + expect(out).toContain("AND toFloat64OrZero(log_attributes['execution_time_ms']) >= 100") + }) +}) diff --git a/apps/studio/data/reports/v2/edge-functions.config.ts b/apps/studio/data/reports/v2/edge-functions.config.ts index 9d5d53d5f7c..31bdd62156c 100644 --- a/apps/studio/data/reports/v2/edge-functions.config.ts +++ b/apps/studio/data/reports/v2/edge-functions.config.ts @@ -25,6 +25,7 @@ import { fetchLogs, SAFE_COMPARISON_OPERATOR_SQL, SAFE_GRANULARITY_SQL, + type Granularity, } from '@/data/reports/report.utils' type EdgeFunctionReportFilters = { @@ -168,6 +169,122 @@ order by }, } +// fillTimeseries/isUnixMicro expects a 16-digit unix-microsecond timestamp, matching BigQuery's timestamp_trunc. +const OTEL_TIMESTAMP: Record = { + minute: safeSql`toUnixTimestamp(toStartOfMinute(timestamp)) * 1000000`, + hour: safeSql`toUnixTimestamp(toStartOfHour(timestamp)) * 1000000`, + day: safeSql`toUnixTimestamp(toStartOfDay(timestamp)) * 1000000`, +} + +function filterToWhereClauseOtel(filters?: EdgeFunctionReportFilters): SafeLogSqlFragment { + const whereClauses: SafeLogSqlFragment[] = [safeSql`source = 'function_edge_logs'`] + + if (filters?.functions && filters.functions.length > 0) { + const ids = joinSqlFragments(filters.functions.map(analyticsLiteral), ',') + whereClauses.push(safeSql`log_attributes['function_id'] IN (${ids})`) + } + + if (filters?.status_code) { + const op = SAFE_COMPARISON_OPERATOR_SQL[filters.status_code.operator] + whereClauses.push( + safeSql`toInt32OrZero(log_attributes['response.status_code']) ${op} ${analyticsLiteral(filters.status_code.value)}` + ) + } + + if (filters?.region && filters.region.length > 0) { + const regions = joinSqlFragments(filters.region.map(analyticsLiteral), ',') + whereClauses.push(safeSql`log_attributes['response.headers.x_sb_edge_region'] IN (${regions})`) + } + + if (filters?.execution_time) { + const op = SAFE_COMPARISON_OPERATOR_SQL[filters.execution_time.operator] + whereClauses.push( + safeSql`toFloat64OrZero(log_attributes['execution_time_ms']) ${op} ${analyticsLiteral(filters.execution_time.value)}` + ) + } + + return safeSql`WHERE ${joinSqlFragments(whereClauses, ' AND ')}` +} + +export const METRIC_SQL_OTEL: Record< + string, + (interval: AnalyticsInterval, filters?: EdgeFunctionReportFilters) => SafeLogSqlFragment +> = { + TotalInvocations: (interval, filters) => { + const ts = OTEL_TIMESTAMP[analyticsIntervalToGranularity(interval)] + const whereClause = filterToWhereClauseOtel(filters) + return safeSql` +--edgefn-report-invocations (otel) +select + ${ts} as timestamp, + log_attributes['function_id'] as function_id, + count() as count +from logs +${whereClause} +group by + timestamp, + function_id +order by + timestamp desc +` + }, + ExecutionStatusCodes: (interval, filters) => { + const ts = OTEL_TIMESTAMP[analyticsIntervalToGranularity(interval)] + const whereClause = filterToWhereClauseOtel(filters) + return safeSql` +--edgefn-report-execution-status-codes (otel) +select + ${ts} as timestamp, + toInt32OrZero(log_attributes['response.status_code']) as status_code, + count() as count +from logs +${whereClause} +group by + timestamp, + status_code +order by + timestamp desc +` + }, + InvocationsByRegion: (interval, filters) => { + const ts = OTEL_TIMESTAMP[analyticsIntervalToGranularity(interval)] + const whereClause = filterToWhereClauseOtel(filters) + return safeSql` +--edgefn-report-invocations-by-region (otel) +select + ${ts} as timestamp, + log_attributes['response.headers.x_sb_edge_region'] as region, + count() as count +from logs +${whereClause} + AND log_attributes['response.headers.x_sb_edge_region'] != '' +group by + timestamp, + region +order by + timestamp desc +` + }, + ExecutionTime: (interval, filters) => { + const ts = OTEL_TIMESTAMP[analyticsIntervalToGranularity(interval)] + const whereClause = filterToWhereClauseOtel(filters) + return safeSql` +--edgefn-report-execution-time (otel) +select + ${ts} as timestamp, + log_attributes['function_id'] as function_id, + avg(toFloat64OrZero(log_attributes['execution_time_ms'])) as avg_execution_time +from logs +${whereClause} +group by + timestamp, + function_id +order by + timestamp desc +` + }, +} + /** * Transforms raw invocation data by normalizing timestamps and adding function names * @param data - Raw data from the database @@ -209,6 +326,7 @@ export const edgeFunctionReports = ({ endDate, interval, filters, + useOtel = false, }: { projectRef: string functions: { id: string; name: string }[] @@ -216,6 +334,7 @@ export const edgeFunctionReports = ({ endDate: string interval: AnalyticsInterval filters: EdgeFunctionReportFilters + useOtel?: boolean }): ReportConfig[] => [ { id: 'total-invocations', @@ -229,8 +348,8 @@ export const edgeFunctionReports = ({ defaultChartStyle: 'line', titleTooltip: 'The total number of edge function invocations over time.', dataProvider: async () => { - const sql = METRIC_SQL.TotalInvocations(interval, filters) - const response = await fetchLogs(projectRef, sql, startDate, endDate) + const sql = (useOtel ? METRIC_SQL_OTEL : METRIC_SQL).TotalInvocations(interval, filters) + const response = await fetchLogs(projectRef, sql, startDate, endDate, useOtel) if (!response?.result) return { data: [] } @@ -260,8 +379,8 @@ export const edgeFunctionReports = ({ defaultChartStyle: 'line', titleTooltip: 'The total number of edge function executions by status code.', dataProvider: async () => { - const sql = METRIC_SQL.ExecutionStatusCodes(interval, filters) - const rawData = await fetchLogs(projectRef, sql, startDate, endDate) + const sql = (useOtel ? METRIC_SQL_OTEL : METRIC_SQL).ExecutionStatusCodes(interval, filters) + const rawData = await fetchLogs(projectRef, sql, startDate, endDate, useOtel) if (!rawData?.result) return { data: [] } @@ -296,8 +415,8 @@ export const edgeFunctionReports = ({ }, format: (value: unknown) => millisecondFormatter(Number(value)), dataProvider: async () => { - const sql = METRIC_SQL.ExecutionTime(interval, filters) - const rawData = await fetchLogs(projectRef, sql, startDate, endDate) + const sql = (useOtel ? METRIC_SQL_OTEL : METRIC_SQL).ExecutionTime(interval, filters) + const rawData = await fetchLogs(projectRef, sql, startDate, endDate, useOtel) if (!rawData?.result) return { data: [] } @@ -354,8 +473,8 @@ export const edgeFunctionReports = ({ entitlement: 'edge_functions', requiredPlan: 'Pro', dataProvider: async () => { - const sql = METRIC_SQL.InvocationsByRegion(interval, filters) - const rawData = await fetchLogs(projectRef, sql, startDate, endDate) + const sql = (useOtel ? METRIC_SQL_OTEL : METRIC_SQL).InvocationsByRegion(interval, filters) + const rawData = await fetchLogs(projectRef, sql, startDate, endDate, useOtel) const data = rawData.result?.map((point: any) => ({ ...point, timestamp: isUnixMicro(point.timestamp) diff --git a/apps/studio/pages/project/[ref]/observability/edge-functions.tsx b/apps/studio/pages/project/[ref]/observability/edge-functions.tsx index 1c8c9392d9d..97a06e39ed3 100644 --- a/apps/studio/pages/project/[ref]/observability/edge-functions.tsx +++ b/apps/studio/pages/project/[ref]/observability/edge-functions.tsx @@ -1,5 +1,5 @@ import { useQueryClient } from '@tanstack/react-query' -import { useParams } from 'common' +import { useFlag, useParams } from 'common' import dayjs from 'dayjs' import { ArrowRight, RefreshCw } from 'lucide-react' import { parseAsJson, useQueryState } from 'nuqs' @@ -60,6 +60,7 @@ const REPORT_TITLE = 'Edge Functions' const EdgeFunctionsUsage = () => { const { ref } = useParams() + const useOtel = useFlag('otelReports') const { data: functions } = useEdgeFunctionsQuery({ projectRef: ref, }) @@ -114,6 +115,7 @@ const EdgeFunctionsUsage = () => { region: regionFilter ?? [], execution_time: executionTimeFilter, }, + useOtel, }) }, [ ref, @@ -123,6 +125,7 @@ const EdgeFunctionsUsage = () => { statusCodeFilter, regionFilter, executionTimeFilter, + useOtel, ]) const onRefreshReport = useRefreshHandler( From d45e0cd3d520edb05956256f93b21b1fb04de1e1 Mon Sep 17 00:00:00 2001 From: Miranda Limonczenko Date: Wed, 5 Aug 2026 08:23:26 -0700 Subject: [PATCH 32/83] fix(docs ci): stop Docs E2E blocking pull requests it shouldn't (#48726) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Supersedes #48725, which GitHub closed when its head branch was renamed. Same commits, same diff. Fixes [DOCS-1270](https://linear.app/supabase/issue/DOCS-1270/fail-the-e2e-pipeline-if-the-docs-preview-never-loads). `Docs E2E` is a required check on `master`, so anything that turns it red blocks a merge. It had three ways of going red that had nothing to do with whether the author's docs were correct. ## Problem **1. Every troubleshooting page could fail, with nothing actionable.** Troubleshooting entries were selected by `article.prose`. That class is not unique β€” `apps/docs/app/not-found.tsx` renders `
    ` too β€” and nothing guaranteed it matched the entry's article at all. When it missed, the link test failed with `Page article should be present` and the a11y test failed inside axe with `No elements found for include in page Context` plus a stack trace. Neither tells the author what to do. This is what DOCS-1270 actually was. The ticket describes tests running "against a preview build that was never created", but the [failing run](https://github.com/supabase/supabase/actions/runs/30949924515/job/92132543658) for #48719 shows the preview resolved fine and `response.ok()` passed β€” it broke at the article assertion. **Blocked:** anyone adding or editing a troubleshooting entry. **2. Fork pull requests failed for being forks.** Fork runs get no `VERCEL_TOKEN`, so no preview URL resolves, and the base-URL step fell back to `https://supabase.com`. The page paths under test can include pages the pull request *adds*, which do not exist on production, so they 404. **Blocked:** every external contributor adding a docs page, unconditionally, with no action available to them. **3. A Vercel problem failed the docs check.** `waitForVercelDocsPreview.js` throws when Vercel reports a failed deployment, omits a `target_url`, or does not post a status within 900s. The step had no `continue-on-error`, so any of those turned `Docs E2E` red. **Blocked:** any author whose pull request coincided with a Vercel incident. This is live right now β€” two Vercel checks on this very pull request are failing with "unable to fetch required git information", a git-integration auth error that happens before any build runs. ## Solution **1. Select on a stable, purpose-named attribute.** Add `id="sb-docs-troubleshooting-main-article"` on the troubleshooting article, mirroring `#sb-docs-guide-main-article` on guides, and select on that instead of the class. Per review feedback, a plain id doesn't say it's a test hook, so both articles also get `data-testid` with the same value β€” matching the convention `apps/studio` already uses with Playwright's `getByTestId` β€” and the e2e selectors target that attribute instead. Guides keep their `id` β€” `GuidesMdx.client.tsx` and `GuidesSidebar.tsx` both query it directly for the table of contents and the "copy article" fallback β€” and gain `data-testid` alongside it. **2 and 3. Resolve a preview or skip β€” never substitute production, never fail on Vercel.** The production fallback is gone. `continue-on-error: true` on the preview wait means a Vercel failure resolves no URL instead of failing the job, which lands in the same path as a fork: `should_test=false`, so Playwright is skipped and the check passes. Both cases emit a `::warning::` and a job summary with the exact `gh workflow run` command to test the preview by hand, and manual runs against a non-production base URL now send the protection bypass so that command actually works. Skipping does not let a broken preview through: `Vercel – docs` is itself a required check on `master`, so a genuine preview failure still blocks the merge β€” via the check that describes the real problem. ## Manual test **1. The selector matches the markup, and it needs this pull request's preview.** `data-testid` isn't deployed anywhere yet β€” not on production, not on any other branch β€” so this is the one claim in this PR that production cannot confirm. Verified directly against this branch's own Vercel preview: ```bash curl -s https://docs-git-docs-e2e-stop-false-blocks-supabase.vercel.app/docs/guides/database/overview \ | grep -o 'data-testid="[^"]*"' curl -s https://docs-git-docs-e2e-stop-false-blocks-supabase.vercel.app/docs/guides/troubleshooting/42501--permission-denied-for-table-httprequestqueue-KnozmQ \ | grep -o 'data-testid="[^"]*"' ``` Expect `data-testid="sb-docs-guide-main-article"` and `data-testid="sb-docs-troubleshooting-main-article"` respectively. Then run the suite against that same preview β€” expect all page/link/a11y checks to pass: ```bash PLAYWRIGHT_BASE_URL=https://docs-git-docs-e2e-stop-false-blocks-supabase.vercel.app \ DOCS_E2E_PAGE_PATHS=/docs/guides/database/overview,/docs/guides/troubleshooting/42501--permission-denied-for-table-httprequestqueue-KnozmQ \ pnpm -C e2e/docs exec playwright test --reporter=list ``` Running the same command with `PLAYWRIGHT_BASE_URL=https://supabase.com` fails both pages right now β€” expected until this merges, not a regression. Once merged, exercise it through the real pipeline: ```bash gh workflow run docs-e2e.yml --ref docs-e2e/stop-false-blocks \ -f base_url= \ -f page_paths=/docs/guides/troubleshooting/42501--permission-denied-for-table-httprequestqueue-KnozmQ ``` **2. No preview means skip, not a run against production.** Exercise the base-URL step's three paths from the repository root: ```bash export GITHUB_OUTPUT=$(mktemp) GITHUB_STEP_SUMMARY=$(mktemp) PAGE_PATHS=/docs/guides/a script=$(python3 -c "import yaml;print([s for s in yaml.safe_load(open('.github/workflows/docs-e2e.yml'))['jobs']['e2e']['steps'] if s.get('name')=='Resolve base URL'][0]['run'])") for c in "workflow_dispatch|https://supabase.com|" "pull_request||https://docs-abc.vercel.app" "pull_request||"; do IFS='|' read -r ev url dep <<< "$c" : > "$GITHUB_OUTPUT" EVENT_NAME="$ev" BASE_URL_INPUT="${url:-https://supabase.com}" DEPLOYMENT_URL="$dep" bash -c "$script" >/dev/null 2>&1 echo "$ev deployment=[${dep:-none}] -> $(tr '\n' ' ' < "$GITHUB_OUTPUT")" done tail -4 "$GITHUB_STEP_SUMMARY" ``` Expected: ``` workflow_dispatch deployment=[none] -> url=https://supabase.com use_bypass=false should_test=true pull_request deployment=[https://docs-abc.vercel.app] -> url=https://docs-abc.vercel.app use_bypass=true should_test=true pull_request deployment=[none] -> url= use_bypass=false should_test=false ``` followed by a runnable `gh workflow run docs-e2e.yml` command in the job summary. The third line covers both the fork case and the Vercel-failure case: no base URL, no test, no block. **3. A Vercel failure no longer fails the job.** `continue-on-error: true` on the wait step is what routes a throw into that third line: ```bash python3 -c " import yaml s=[x for x in yaml.safe_load(open('.github/workflows/docs-e2e.yml'))['jobs']['e2e']['steps'] if x.get('name')=='Wait for Vercel docs preview'][0] print('continue-on-error:', s.get('continue-on-error')) for n in ('Install dependencies','Install Playwright Chromium','Run docs E2E'): print(n, '->', [x for x in yaml.safe_load(open('.github/workflows/docs-e2e.yml'))['jobs']['e2e']['steps'] if x.get('name')==n][0]['if']) " ``` Expect `continue-on-error: True` and all three run steps gated on `steps.base-url.outputs.should_test == 'true'`. **Note on this pull request's own check.** The scope resolver only maps `apps/docs/content/**` to pages, and this pull request changes none, so `Docs E2E` resolves zero pages and skips β€” which is correct, and why the dispatch above is the real test. πŸ€– Generated with [Claude Code](https://claude.com/claude-code) ## Summary by CodeRabbit * **Bug Fixes** * Improved documentation preview checks so unavailable or delayed previews no longer cause unnecessary workflow failures. * Added clearer handling for manual documentation checks and missing preview deployments. * **Tests** * Improved end-to-end documentation testing reliability across preview and production environments. * Added stable targeting for the troubleshooting article to reduce test failures caused by page structure changes. --------- Co-authored-by: Claude Opus 5 --- .github/workflows/docs-e2e.yml | 58 +++++++++++++++---- .../docs/features/docs/GuidesMdx.template.tsx | 1 + .../features/docs/Troubleshooting.page.tsx | 6 +- apps/docs/features/ui/guide/GuideArticle.tsx | 1 + e2e/docs/utils/docs-links.ts | 7 ++- 5 files changed, 57 insertions(+), 16 deletions(-) diff --git a/.github/workflows/docs-e2e.yml b/.github/workflows/docs-e2e.yml index 06c68d4c2f1..0cc745fad25 100644 --- a/.github/workflows/docs-e2e.yml +++ b/.github/workflows/docs-e2e.yml @@ -139,9 +139,12 @@ jobs: # Poll the "Vercel – docs" commit status instead β€” Vercel keeps posting # those β€” then resolve the deployment it points to via Vercel's own API # to get the actual preview URL. See scripts/waitForVercelDocsPreview.js. + # A Vercel failure or timeout is not the author's problem, and the required + # "Vercel – docs" check already reports it. Resolve no URL and skip below. - name: Wait for Vercel docs preview if: steps.scope.outputs.skip == 'false' && github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository && steps.changes.outputs.docs_app == 'true' id: deployment + continue-on-error: true run: node scripts/waitForVercelDocsPreview.js env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -156,30 +159,61 @@ jobs: EVENT_NAME: ${{ github.event_name }} BASE_URL_INPUT: ${{ inputs.base_url }} DEPLOYMENT_URL: ${{ steps.deployment.outputs.deployment-url }} - DOCS_APP_CHANGED: ${{ steps.changes.outputs.docs_app }} + PAGE_PATHS: ${{ steps.scope.outputs.paths }} run: | + set -euo pipefail + if [ "$EVENT_NAME" = "workflow_dispatch" ]; then printf 'url=%s\n' "$BASE_URL_INPUT" >> "$GITHUB_OUTPUT" - echo "use_bypass=false" >> "$GITHUB_OUTPUT" - elif [ "$DOCS_APP_CHANGED" = "true" ] && [ -n "$DEPLOYMENT_URL" ]; then - printf 'url=%s\n' "$DEPLOYMENT_URL" >> "$GITHUB_OUTPUT" - echo "use_bypass=true" >> "$GITHUB_OUTPUT" - else - # Harness-only PRs have no docs preview; test against production. - echo "url=https://supabase.com" >> "$GITHUB_OUTPUT" - echo "use_bypass=false" >> "$GITHUB_OUTPUT" + # Non-production targets are previews, which may need the bypass. + if [ "$BASE_URL_INPUT" = "https://supabase.com" ]; then + echo "use_bypass=false" >> "$GITHUB_OUTPUT" + else + echo "use_bypass=true" >> "$GITHUB_OUTPUT" + fi + echo "should_test=true" >> "$GITHUB_OUTPUT" + exit 0 fi + if [ -n "$DEPLOYMENT_URL" ]; then + printf 'url=%s\n' "$DEPLOYMENT_URL" >> "$GITHUB_OUTPUT" + echo "use_bypass=true" >> "$GITHUB_OUTPUT" + echo "should_test=true" >> "$GITHUB_OUTPUT" + exit 0 + fi + + # Production is not a substitute: it lacks pages this pull request + # adds, so testing it fails a required check for a valid change. + echo "url=" >> "$GITHUB_OUTPUT" + echo "use_bypass=false" >> "$GITHUB_OUTPUT" + echo "should_test=false" >> "$GITHUB_OUTPUT" + echo "::warning::No Vercel docs preview URL for this pull request, so there is nothing serving its content to test. Skipping Playwright rather than testing production, which does not have pages this pull request adds." + { + echo "### Docs E2E skipped: no preview to test against" + echo + echo "Nothing is serving this pull request's content, and production is not a" + echo "substitute β€” pages it adds do not exist there yet." + echo + echo "Fork pull requests reach this path because they run without repository" + echo "secrets. A maintainer can run the suite against the preview manually:" + echo + echo '```' + echo "gh workflow run docs-e2e.yml \\" + echo " -f base_url= \\" + echo " -f page_paths=$PAGE_PATHS" + echo '```' + } >> "$GITHUB_STEP_SUMMARY" + - name: Install dependencies - if: steps.scope.outputs.skip == 'false' + if: steps.base-url.outputs.should_test == 'true' run: pnpm install --frozen-lockfile --filter=e2e-docs... - name: Install Playwright Chromium - if: steps.scope.outputs.skip == 'false' + if: steps.base-url.outputs.should_test == 'true' run: pnpm -C e2e/docs exec playwright install chromium --with-deps --only-shell - name: Run docs E2E - if: steps.scope.outputs.skip == 'false' + if: steps.base-url.outputs.should_test == 'true' working-directory: e2e/docs run: pnpm run e2e:docs env: diff --git a/apps/docs/features/docs/GuidesMdx.template.tsx b/apps/docs/features/docs/GuidesMdx.template.tsx index 04944e577a8..0a3786630b6 100644 --- a/apps/docs/features/docs/GuidesMdx.template.tsx +++ b/apps/docs/features/docs/GuidesMdx.template.tsx @@ -95,6 +95,7 @@ const GuideTemplate = ({
    diff --git a/apps/docs/features/docs/Troubleshooting.page.tsx b/apps/docs/features/docs/Troubleshooting.page.tsx index 805623bbe5e..4e998f4ac44 100644 --- a/apps/docs/features/docs/Troubleshooting.page.tsx +++ b/apps/docs/features/docs/Troubleshooting.page.tsx @@ -20,7 +20,11 @@ export default async function TroubleshootingPage({ entry }: { entry: ITroublesh >
    -
    +

    {entry.data.title}

    {dateUpdated && (

    diff --git a/apps/docs/features/ui/guide/GuideArticle.tsx b/apps/docs/features/ui/guide/GuideArticle.tsx index b23cce3aaab..3d74842b44a 100644 --- a/apps/docs/features/ui/guide/GuideArticle.tsx +++ b/apps/docs/features/ui/guide/GuideArticle.tsx @@ -14,6 +14,7 @@ export function GuideArticle({ children, className }: GuideArticleProps) {

    {children} diff --git a/e2e/docs/utils/docs-links.ts b/e2e/docs/utils/docs-links.ts index 3c4a8471c09..7e483ba5a87 100644 --- a/e2e/docs/utils/docs-links.ts +++ b/e2e/docs/utils/docs-links.ts @@ -1,13 +1,14 @@ import type { Page } from '@playwright/test' -export const GUIDE_ARTICLE_SELECTOR = '#sb-docs-guide-main-article' -export const TROUBLESHOOTING_ARTICLE_SELECTOR = 'article.prose' +export const GUIDE_ARTICLE_SELECTOR = '[data-testid="sb-docs-guide-main-article"]' +export const TROUBLESHOOTING_ARTICLE_SELECTOR = + '[data-testid="sb-docs-troubleshooting-main-article"]' const DOCS_PATH_PREFIX = '/docs' const TROUBLESHOOTING_PATH_PREFIX = '/docs/guides/troubleshooting/' /** * Pick the main article selector for a docs page path. - * Guides use a stable id; troubleshooting entries use a plain prose article. + * Both guides and troubleshooting entries expose a stable data-testid. */ export function articleSelectorForPagePath(pagePath: string): string { const pathname = pagePath.startsWith('http') ? new URL(pagePath).pathname : pagePath From 8831e15fc35ce0a15d518541426d55493cac20fc Mon Sep 17 00:00:00 2001 From: Charis <26616127+charislam@users.noreply.github.com> Date: Wed, 5 Aug 2026 12:03:16 -0400 Subject: [PATCH 33/83] Revert "refactor(studio): static tab kind registry and tab id codec (PR 1/9)" (#48762) Reverts supabase/supabase#48718 --- .../SQLEditorNavV2/SQLEditorTreeViewItem.tsx | 2 +- apps/studio/components/ui/EntityTypeIcon.tsx | 96 ++++++++++++-- apps/studio/state/tabs/kinds.icons.tsx | 117 ------------------ apps/studio/state/tabs/kinds.ts | 89 ------------- apps/studio/state/tabs/tab-id.test.ts | 112 ----------------- apps/studio/state/tabs/tab-id.ts | 60 --------- 6 files changed, 84 insertions(+), 392 deletions(-) delete mode 100644 apps/studio/state/tabs/kinds.icons.tsx delete mode 100644 apps/studio/state/tabs/kinds.ts delete mode 100644 apps/studio/state/tabs/tab-id.test.ts delete mode 100644 apps/studio/state/tabs/tab-id.ts diff --git a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorTreeViewItem.tsx b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorTreeViewItem.tsx index 8d9a35c3db7..615eecc6aad 100644 --- a/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorTreeViewItem.tsx +++ b/apps/studio/components/layouts/SQLEditorLayout/SQLEditorNavV2/SQLEditorTreeViewItem.tsx @@ -30,6 +30,7 @@ import { import { getSnippetSource } from '@/components/interfaces/SQLEditor/querySource' import { createSqlSnippetSkeletonV2 } from '@/components/interfaces/SQLEditor/SQLEditor.utils' +import { LogsSnippetIcon } from '@/components/ui/EntityTypeIcon' import { getContentById, getSqlSnippetById } from '@/data/content/content-id-query' import { useSQLSnippetFolderContentsQuery } from '@/data/content/sql-folder-contents-query' import { Snippet } from '@/data/content/sql-folders-query' @@ -43,7 +44,6 @@ import { type FolderStatus, } from '@/state/sql-editor/sql-editor-lifecycle' import { useSqlEditorV2StateSnapshot } from '@/state/sql-editor/sql-editor-state' -import { LogsSnippetIcon } from '@/state/tabs/kinds.icons' interface SQLEditorTreeViewItemProps extends Omit< ComponentProps, diff --git a/apps/studio/components/ui/EntityTypeIcon.tsx b/apps/studio/components/ui/EntityTypeIcon.tsx index 3427a1654a4..2dc05a6df58 100644 --- a/apps/studio/components/ui/EntityTypeIcon.tsx +++ b/apps/studio/components/ui/EntityTypeIcon.tsx @@ -1,8 +1,29 @@ -import { GitBranch } from 'lucide-react' +import { Eye, GitBranch, ScrollText, Table2 } from 'lucide-react' import { cn, SQL_ICON } from 'ui' import type { SqlSnippetSource } from '@/components/interfaces/SQLEditor/querySource' -import { TAB_KIND_ICONS } from '@/state/tabs/kinds.icons' +import { ENTITY_TYPE } from '@/data/entity-types/entity-type-constants' + +/** + * The single icon representing a logs (`log_sql`) snippet β€” reused by the tabs + * (via EntityTypeIcon) and the nav tree so the two can't drift. Callers pass the + * context-appropriate size/className; the icon and stroke stay the same. + */ +export const LogsSnippetIcon = ({ + size = 15, + strokeWidth = 1.5, + className, +}: { + size?: number + strokeWidth?: number + className?: string +}) => ( + +) interface EntityTypeIconProps { type: 'sql' | 'schema' | 'new' | 'r' | 'v' | 'm' | 'f' | 'p' @@ -12,7 +33,6 @@ interface EntityTypeIconProps { sqlSource?: SqlSnippetSource } -/** Thin wrapper over the per-kind icons in `state/tabs/kinds.icons`, preserving this component's flexible prop-based API for callers without a whole `Tab` to hand. */ export const EntityTypeIcon = ({ type, size = 15, @@ -20,11 +40,22 @@ export const EntityTypeIcon = ({ isActive, sqlSource, }: EntityTypeIconProps) => { - if (type === 'schema') { - return + if (type === 'sql' && sqlSource === 'logs') { + return ( + + ) } - if (type === 'new') { + if (type === 'sql') { return ( + ) + } + + if (type === 'schema') { + return + } + + if (type === ENTITY_TYPE.VIEW) { + return ( + + ) + } + return ( - +
    + {Object.entries(ENTITY_TYPE) + .find(([, value]) => value === type)?.[0]?.[0] + ?.toUpperCase()} +
    ) } diff --git a/apps/studio/state/tabs/kinds.icons.tsx b/apps/studio/state/tabs/kinds.icons.tsx deleted file mode 100644 index 04c49527786..00000000000 --- a/apps/studio/state/tabs/kinds.icons.tsx +++ /dev/null @@ -1,117 +0,0 @@ -import { Eye, MessageSquare, NotebookPen, ScrollText, Table2 } from 'lucide-react' -import type { ReactNode } from 'react' -import { cn, SQL_ICON } from 'ui' - -import type { TabKind } from './kinds' - -export const LogsSnippetIcon = ({ - size = 15, - strokeWidth = 1.5, - className, -}: { - size?: number - strokeWidth?: number - className?: string -}) => ( - -) - -interface KindIconProps { - // Structurally compatible with `Tab` (`state/tabs.tsx`) without importing it, keeping this module a leaf (ui + lucide-react + `TabKind` only). - tab: { metadata?: { sqlSource?: 'database' | 'logs' } } - size?: number - strokeWidth?: number - isActive?: boolean -} - -type KindIconComponent = (props: KindIconProps) => ReactNode - -const SqlKindIcon = ({ tab, size = 15, strokeWidth = 1.5 }: KindIconProps) => { - if (tab.metadata?.sqlSource === 'logs') { - return ( - - ) - } - - return ( - - ) -} - -const TableKindIcon = ({ size = 15, strokeWidth = 1.5, isActive }: KindIconProps) => ( - -) - -const ViewKindIcon = ({ size = 15, strokeWidth = 1.5, isActive }: KindIconProps) => ( - -) - -const badgeKindIcon = (letter: string, colorClassName: string): KindIconComponent => - function BadgeKindIcon() { - return ( -
    - {letter} -
    - ) - } - -const MaterializedViewKindIcon = badgeKindIcon('M', 'text-purple-1100 bg-purple-500') -const ForeignTableKindIcon = badgeKindIcon( - 'F', - 'text-warning-600/80 dark:text-yellow-900 bg-yellow-500' -) -const PartitionedTableKindIcon = badgeKindIcon( - 'P', - 'text-foreground-light bg-surface-400 dark:bg-border-stronger' -) - -const NotebookKindIcon = ({ size = 15, strokeWidth = 1.5 }: KindIconProps) => ( - -) - -const ChatKindIcon = ({ size = 15, strokeWidth = 1.5 }: KindIconProps) => ( - -) - -/** Per-kind icon, keyed identically to `TAB_KINDS` β€” see `kinds.ts` for the descriptor table. */ -export const TAB_KIND_ICONS: Record = { - sql: SqlKindIcon, - notebook: NotebookKindIcon, - chat: ChatKindIcon, - r: TableKindIcon, - v: ViewKindIcon, - m: MaterializedViewKindIcon, - f: ForeignTableKindIcon, - p: PartitionedTableKindIcon, -} diff --git a/apps/studio/state/tabs/kinds.ts b/apps/studio/state/tabs/kinds.ts deleted file mode 100644 index 48ba307a799..00000000000 --- a/apps/studio/state/tabs/kinds.ts +++ /dev/null @@ -1,89 +0,0 @@ -import type { ReactNode } from 'react' - -import { TAB_KIND_ICONS } from './kinds.icons' -import type { Tab } from '@/state/tabs' - -/** Which tab strip / layout a kind renders in β€” strip filtering, bulk-close, and recents key off this instead of an id-prefix check. */ -export type TabSurface = 'sql' | 'table' - -/** `sql` covers both Postgres and logs snippets; `Tab.metadata.sqlSource` discriminates */ -export type TabKind = 'sql' | 'notebook' | 'chat' | 'r' | 'v' | 'm' | 'f' | 'p' - -interface TabKindDescriptor { - surface: TabSurface - /** URL segment prefix. `null` = bare segment β€” `sql` (legacy) and every table kind, since `/editor/` is already bare and unprefixed today. */ - urlPrefix: string | null - /** Singular noun for shared copy, e.g. a not-found message: "This could not be found." */ - noun: string - supportsPreview: boolean - Icon: (props: { tab: Tab }) => ReactNode -} - -export const TAB_KINDS: Record = { - sql: { - surface: 'sql', - urlPrefix: null, - noun: 'query', - supportsPreview: true, - Icon: TAB_KIND_ICONS.sql, - }, - notebook: { - surface: 'sql', - urlPrefix: 'notebook', - noun: 'notebook', - supportsPreview: true, - Icon: TAB_KIND_ICONS.notebook, - }, - chat: { - surface: 'sql', - urlPrefix: 'chat', - noun: 'chat', - supportsPreview: true, - Icon: TAB_KIND_ICONS.chat, - }, - r: { - surface: 'table', - urlPrefix: null, - noun: 'table', - supportsPreview: true, - Icon: TAB_KIND_ICONS.r, - }, - v: { - surface: 'table', - urlPrefix: null, - noun: 'view', - supportsPreview: true, - Icon: TAB_KIND_ICONS.v, - }, - m: { - surface: 'table', - urlPrefix: null, - noun: 'materialized view', - supportsPreview: true, - Icon: TAB_KIND_ICONS.m, - }, - f: { - surface: 'table', - urlPrefix: null, - noun: 'foreign table', - supportsPreview: true, - Icon: TAB_KIND_ICONS.f, - }, - p: { - surface: 'table', - urlPrefix: null, - noun: 'partitioned table', - supportsPreview: true, - Icon: TAB_KIND_ICONS.p, - }, -} - -export const isTabKind = (value: string): value is TabKind => - Object.prototype.hasOwnProperty.call(TAB_KINDS, value) - -const TAB_KIND_LIST = Object.keys(TAB_KINDS).filter(isTabKind) - -export const surfaceOf = (kind: TabKind): TabSurface => TAB_KINDS[kind].surface - -export const kindsOnSurface = (surface: TabSurface): Array => - TAB_KIND_LIST.filter((kind) => TAB_KINDS[kind].surface === surface) diff --git a/apps/studio/state/tabs/tab-id.test.ts b/apps/studio/state/tabs/tab-id.test.ts deleted file mode 100644 index 618499d0d63..00000000000 --- a/apps/studio/state/tabs/tab-id.test.ts +++ /dev/null @@ -1,112 +0,0 @@ -import { describe, expect, it } from 'vitest' - -import { kindsOnSurface, TAB_KINDS, type TabKind } from './kinds' -import { createTabId, parseTabId, parseUrlSegment, toUrlSegment } from './tab-id' - -const ALL_KINDS = Object.keys(TAB_KINDS) as Array - -/** Test-only narrowing: every call site below passes a known-non-empty literal. */ -function mustCreateTabId(kind: TabKind, contentId: string): string { - const tabId = createTabId(kind, contentId) - if (tabId === null) throw new Error(`createTabId unexpectedly returned null for ${kind}`) - return tabId -} - -describe('createTabId / parseTabId round-trip', () => { - it.each(ALL_KINDS)('round-trips a uuid-like content id for kind %s', (kind) => { - const contentId = '3fa85f64-5717-4562-b3fc-2c963f66afa6' - const tabId = mustCreateTabId(kind, contentId) - - expect(tabId).toBe(`${kind}-${contentId}`) - expect(parseTabId(tabId)).toEqual({ kind, contentId }) - }) - - it('returns null for an empty content id, so createTabId/parseTabId never disagree', () => { - expect(createTabId('sql', '')).toBeNull() - }) - - it('rejects an id with an unknown kind', () => { - expect(parseTabId('bogus-123')).toBeNull() - }) - - it('rejects an id whose kind is an inherited Object property name', () => { - expect(parseTabId('constructor-123')).toBeNull() - expect(parseTabId('toString-123')).toBeNull() - }) - - it('rejects an id with no dash separator', () => { - expect(parseTabId('sql')).toBeNull() - }) - - it('rejects an id with an empty content id', () => { - expect(parseTabId('sql-')).toBeNull() - }) - - it('splits on the first dash only, so a dashed content id survives', () => { - expect(parseTabId('notebook-3fa85f64-5717-4562-b3fc-2c963f66afa6')).toEqual({ - kind: 'notebook', - contentId: '3fa85f64-5717-4562-b3fc-2c963f66afa6', - }) - }) -}) - -describe('toUrlSegment: bare vs. prefixed', () => { - it.each(['sql', 'r', 'v', 'm', 'f', 'p'] as const)( - 'drops the prefix for the bare kind %s', - (kind) => { - expect(toUrlSegment(mustCreateTabId(kind, 'abc'))).toBe('abc') - } - ) - - it.each(['notebook', 'chat'] as const)('keeps the prefix for kind %s', (kind) => { - expect(toUrlSegment(mustCreateTabId(kind, 'abc'))).toBe(`${kind}-abc`) - }) - - it('returns null for a malformed tab id', () => { - expect(toUrlSegment('not-a-real-kind-abc')).toBeNull() - }) - - it('passes through a null tab id, so it composes directly with createTabId', () => { - expect(toUrlSegment(createTabId('sql', ''))).toBeNull() - }) -}) - -describe('parseUrlSegment: surface scoping', () => { - it('resolves a bare segment to the sql kind on the sql surface', () => { - expect(parseUrlSegment('abc', 'sql')).toEqual({ kind: 'sql', contentId: 'abc' }) - }) - - it('resolves a prefixed segment to its kind on the sql surface', () => { - expect(parseUrlSegment('notebook-abc', 'sql')).toEqual({ kind: 'notebook', contentId: 'abc' }) - expect(parseUrlSegment('chat-abc', 'sql')).toEqual({ kind: 'chat', contentId: 'abc' }) - }) - - it('falls back to the bare sql kind for a segment that looks table-prefixed, since sql has no other claim on it', () => { - // "r-123" isn't a `notebook-`/`chat-` segment, so on the sql surface it's just - // a raw (if odd-looking) content id β€” the table kind `r` is out of scope here. - expect(parseUrlSegment('r-123', 'sql')).toEqual({ kind: 'sql', contentId: 'r-123' }) - }) - - it('does not resolve a sql-surface-only prefix on the table surface', () => { - expect(parseUrlSegment('notebook-abc', 'table')).toBeNull() - }) - - it.each(kindsOnSurface('table'))( - 'does not resolve a bare segment on the table surface, which has %s among several ambiguous bare kinds', - (kind) => { - expect(TAB_KINDS[kind].urlPrefix).toBeNull() - expect(parseUrlSegment('123', 'table')).toBeNull() - } - ) - - it('returns null for an empty segment', () => { - expect(parseUrlSegment('', 'sql')).toBeNull() - }) - - it.each(['templates', 'examples', 'new'])( - 'resolves the "%s" sentinel to the bare sql kind, not a UUID', - (sentinel) => { - expect(parseUrlSegment(sentinel, 'sql')).toEqual({ kind: 'sql', contentId: sentinel }) - } - ) -}) diff --git a/apps/studio/state/tabs/tab-id.ts b/apps/studio/state/tabs/tab-id.ts deleted file mode 100644 index f0408e6c73c..00000000000 --- a/apps/studio/state/tabs/tab-id.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { isTabKind, kindsOnSurface, TAB_KINDS, type TabKind, type TabSurface } from './kinds' - -export interface ParsedTabId { - kind: TabKind - contentId: string -} - -/** A tab's id is always `${kind}-${contentId}` β€” kind names never contain a dash. Returns null for an empty contentId, since `parseTabId` can't invert it. */ -export function createTabId(kind: TabKind, contentId: string): string | null { - if (!contentId) return null - return `${kind}-${contentId}` -} - -/** Inverse of `createTabId`. Returns null for a malformed id or an unknown kind. */ -export function parseTabId(tabId: string): ParsedTabId | null { - const dashIndex = tabId.indexOf('-') - if (dashIndex === -1) return null - - const kind = tabId.slice(0, dashIndex) - const contentId = tabId.slice(dashIndex + 1) - if (!contentId || !isTabKind(kind)) return null - - return { kind, contentId } -} - -/** The URL segment a tab id renders as. Drops the prefix for a bare kind (`sql-` β†’ ``, and every table kind); keeps it otherwise (`notebook-` β†’ `notebook-`). Passes through a null `tabId`, so it composes directly with `createTabId`. */ -export function toUrlSegment(tabId: string | null): string | null { - if (tabId === null) return null - - const parsed = parseTabId(tabId) - if (!parsed) return null - - const { urlPrefix } = TAB_KINDS[parsed.kind] - return urlPrefix === null ? parsed.contentId : `${urlPrefix}-${parsed.contentId}` -} - -/** Inverse of `toUrlSegment`, scoped to a surface. A bare segment resolves only when exactly one bare kind exists on the surface (`sql`); the table surface's five bare kinds have no URL disambiguator, matching `/editor/[id]`, which learns kind from the fetched entity rather than the URL. */ -export function parseUrlSegment(segment: string, surface: TabSurface): ParsedTabId | null { - if (!segment) return null - - let bareKind: TabKind | null = null - let bareKindIsAmbiguous = false - - for (const kind of kindsOnSurface(surface)) { - const { urlPrefix } = TAB_KINDS[kind] - if (urlPrefix === null) { - if (bareKind === null) bareKind = kind - else bareKindIsAmbiguous = true - continue - } - - const prefix = `${urlPrefix}-` - if (segment.startsWith(prefix)) { - const contentId = segment.slice(prefix.length) - if (contentId) return { kind, contentId } - } - } - - return bareKind && !bareKindIsAmbiguous ? { kind: bareKind, contentId: segment } : null -} From d101d6f3de4cb7bbace70cdd62fe2712bcfdc7fd Mon Sep 17 00:00:00 2001 From: Abhishek Tripathi <63142055+abhins0554@users.noreply.github.com> Date: Wed, 5 Aug 2026 21:41:00 +0530 Subject: [PATCH 34/83] docs: document NOT_FOUND_FUNCTION_BLOB Edge Function error (#48411) This PR addresses the documentation portion of #47739. ## What the issue means `NOT_FOUND_FUNCTION_BLOB` means the runtime cannot find the deployed bundle for an Edge Function. This differs from the existing `NOT_FOUND` error, which normally indicates that the function name in the request URL is not recognized. The dashboard status alone may not reveal this failure because the function can still appear as `ACTIVE`. ## Changes - Documented `NOT_FOUND_FUNCTION_BLOB` as an HTTP 404 error. - Explained how it differs from `NOT_FOUND`. - Added the command for redeploying one affected function. - Added the command for redeploying all functions when several are affected. - Added guidance to retry the request and contact Support if redeployment does not resolve the problem. ## Files changed - `apps/docs/content/troubleshooting/edge-function-404-error-response.mdx` ## Validation - The change uses the troubleshooting page's existing TOML frontmatter and MDX conventions. - `git diff --check` passes. ## Summary by CodeRabbit * **Documentation** * Expanded troubleshooting guidance for Edge Function 404 responses. * Added coverage of the `NOT_FOUND_FUNCTION_BLOB` error, including example responses and clarification of how it differs from `NOT_FOUND`. * Updated redeployment instructions with options for deploying a single function or all functions. * Refined retry and support guidance. --- .../edge-function-404-error-response.mdx | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/apps/docs/content/troubleshooting/edge-function-404-error-response.mdx b/apps/docs/content/troubleshooting/edge-function-404-error-response.mdx index 19afdd4c4aa..c3016171c83 100644 --- a/apps/docs/content/troubleshooting/edge-function-404-error-response.mdx +++ b/apps/docs/content/troubleshooting/edge-function-404-error-response.mdx @@ -8,9 +8,14 @@ database_id = "a3cfff33-d640-4395-99bc-a110b7fb637c" http_status_code = 404 code = "NOT_FOUND" message = "Requested function was not found" + +[[errors]] +http_status_code = 404 +code = "NOT_FOUND_FUNCTION_BLOB" +message = "Function deployment bundle not found" --- -The edge function is not recognized by Supabase +The edge function is not recognized by Supabase, or its deployed bundle cannot be found. ## Context for the error @@ -51,6 +56,20 @@ When an edge function fails due to a platform 404 error, it will return the erro } ``` +A different platform 404 error, `NOT_FOUND_FUNCTION_BLOB`, can occur when the function name is recognized but the runtime cannot find the deployed bundle. This can happen even when the function appears as `ACTIVE` in the dashboard, because the status shows that the function record exists while the actual deployment bundle is missing or inaccessible: + +```json +{ + "code": "NOT_FOUND_FUNCTION_BLOB", + "message": "Function deployment bundle not found" +} +``` + +The difference between the two errors is: + +- `NOT_FOUND`: The function name in the request URL is not recognized. +- `NOT_FOUND_FUNCTION_BLOB`: The function name is recognized, but the runtime cannot find the deployed bundle. + ### Inspecting the logs @@ -99,20 +118,23 @@ If the call works, consider double checking your code for typos or to see if it ### Step 4: Redeploy the function -If step 3 fails, it may be a sign of an internal bug and it may be necessary to redeploy your function. This can be done within the [Function Dashboard](/dashboard/project/_/functions) under the respective function's code tab: +If step 3 fails, it may be a sign of an internal bug and it may be necessary to redeploy your function. The same applies if you see the `NOT_FOUND_FUNCTION_BLOB` error, which means the function is recognized but its deployed bundle cannot be found. This can occur even when the function appears as `ACTIVE` in the dashboard. + +This can be done within the [Function Dashboard](/dashboard/project/_/functions) under the respective function's code tab: ![image](/docs/img/troubleshooting/edge_function_404_redeploy.png) Alternatively, if you develop locally, you can redeploy the function with the [Supabase CLI](/docs/guides/local-development/cli/getting-started?queryGroups=platform&platform=macos): ```sh +# Redeploy one affected function supabase functions deploy FUNCTION_NAME -# If you want to deploy all functions, run the `deploy` command without specifying a function name: +# Or redeploy all functions if several are affected supabase functions deploy ``` -Then write in a ticket to [Supabase Support](/dashboard/support/new) +After redeploying, retry the request. If the error persists, write in a ticket to [Supabase Support](/dashboard/support/new). ## Additional resources From a28214c236030256713ed5e3364fbccf77970cfe Mon Sep 17 00:00:00 2001 From: Jordi Enric <37541088+jordienr@users.noreply.github.com> Date: Wed, 5 Aug 2026 18:25:41 +0200 Subject: [PATCH 35/83] feat(studio): add ClickHouse OTEL SQL for the Auth report's v2 metrics (#48750) ## Problem Part of DEBUG-73 (migrate reports queries to the OTEL/ClickHouse endpoint). The Auth report's v2 metrics (ActiveUsers, SignInAttempts, PasswordResetRequests, TotalSignUps, sign-in/sign-up processing time, error breakdowns) currently only query the BigQuery-backed logs.all endpoint. ## Fix Adds `AUTH_REPORT_SQL_OTEL`, a ClickHouse-dialect mirror of the existing `AUTH_REPORT_SQL`, covering all 10 metrics. Threads a `useOtel` parameter through `fetchLogs` and the three report config creators (`createUsageReportConfig`, `createErrorsReportConfig`, `createLatencyReportConfig`), defaulting to `false` everywhere. This PR is inert on its own: nothing yet passes `useOtel: true`, so it changes no runtime behavior. The follow-up PR (stacked on this one) wires the `otelReports` feature flag through the Auth report page to actually select the OTEL SQL. Also includes: one dataProvider now validates its raw rows with a Zod schema instead of casting to `any`, and removal of a few functions in this file that had zero callers (`AUTH_ERROR_CODE_VALUES`, `createAuthReportConfig`, an exact duplicate of a status-code color map, an unused hook). ## How to test - Unit: `cd apps/studio && npx vitest run data/reports/v2/auth.config.otel.test.ts` - No manual testing needed for this PR alone since it changes no runtime behavior (useOtel defaults to false, unwired). The follow-up PR covers manual testing of the actual flag-gated behavior. ## Summary by CodeRabbit * **New Features** * Added OpenTelemetry-backed authentication reports. * Authentication reports now include usage, errors, latency, sign-ins, sign-ups, and edge-log metrics. * Added filtering by provider, status code, action, and time range. * Added selectable telemetry sources for retrieving report logs. * **Bug Fixes** * Improved validation of authentication error codes. * Improved handling of missing report data with consistent empty results. * Improved report formatting for more consistent attribute display. --- .../data/reports/v2/auth.config.otel.test.ts | 155 +++++ apps/studio/data/reports/v2/auth.config.ts | 612 +++++++++++------- 2 files changed, 516 insertions(+), 251 deletions(-) create mode 100644 apps/studio/data/reports/v2/auth.config.otel.test.ts diff --git a/apps/studio/data/reports/v2/auth.config.otel.test.ts b/apps/studio/data/reports/v2/auth.config.otel.test.ts new file mode 100644 index 00000000000..60ee600de5d --- /dev/null +++ b/apps/studio/data/reports/v2/auth.config.otel.test.ts @@ -0,0 +1,155 @@ +import { describe, expect, it } from 'vitest' + +import { AUTH_REPORT_SQL_OTEL } from './auth.config' + +const sql = (fragment: { toString(): string }) => String(fragment) + +describe('AUTH_REPORT_SQL_OTEL', () => { + it('queries the single OTEL logs table by source, never a per-service table', () => { + const out = sql(AUTH_REPORT_SQL_OTEL.ActiveUsers('1h')) + + expect(out).toContain('from logs') + expect(out).toContain("where source = 'auth_logs'") + expect(out).not.toContain('from auth_logs') + expect(out).not.toContain('cross join unnest') + }) + + it('emits 16-digit unix-microsecond timestamps bucketed by granularity', () => { + expect(sql(AUTH_REPORT_SQL_OTEL.ActiveUsers('1h'))).toContain( + 'toUnixTimestamp(toStartOfHour(timestamp)) * 1000000 as timestamp' + ) + expect(sql(AUTH_REPORT_SQL_OTEL.ActiveUsers('1d'))).toContain( + 'toUnixTimestamp(toStartOfDay(timestamp)) * 1000000 as timestamp' + ) + expect(sql(AUTH_REPORT_SQL_OTEL.ActiveUsers('5m'))).toContain( + 'toUnixTimestamp(toStartOfMinute(timestamp)) * 1000000 as timestamp' + ) + }) + + it('groups and orders by the full bucket expression, not the timestamp alias', () => { + const out = sql(AUTH_REPORT_SQL_OTEL.ActiveUsers('1h')) + + expect(out).toContain('group by toUnixTimestamp(toStartOfHour(timestamp)) * 1000000') + expect(out).toContain('order by toUnixTimestamp(toStartOfHour(timestamp)) * 1000000 desc') + expect(out).not.toContain('group by timestamp') + expect(out).not.toContain('order by timestamp desc') + }) + + it('reads auth_logs fields from the raw JSON event_message, not BigQuery json_value', () => { + const out = sql(AUTH_REPORT_SQL_OTEL.ActiveUsers('1h')) + + expect(out).toContain("JSONExtractString(event_message, 'auth_event', 'action')") + expect(out).toContain( + "count(distinct JSONExtractString(event_message, 'auth_event', 'actor_id')) as count" + ) + expect(out).not.toContain('json_value') + expect(out).not.toContain('timestamp_trunc') + expect(out).not.toContain('count(*)') + }) + + it('groups by provider only when a provider filter is set', () => { + const withProvider = sql(AUTH_REPORT_SQL_OTEL.ActiveUsers('1h', { provider: ['google'] })) + expect(withProvider).toContain( + "coalesce(nullIf(JSONExtractString(event_message, 'provider'), ''), 'unknown') as provider" + ) + expect(withProvider).toContain("JSONExtractString(event_message, 'provider') IN ('google')") + + const withoutProvider = sql(AUTH_REPORT_SQL_OTEL.ActiveUsers('1h')) + expect(withoutProvider).not.toContain('as provider') + }) + + it('translates the sign-in metering predicate and login_type_provider concat', () => { + const out = sql(AUTH_REPORT_SQL_OTEL.SignInAttempts('1h')) + + expect(out).toContain("JSONExtractString(event_message, 'action') = 'login'") + expect(out).toContain("JSONExtractString(event_message, 'metering') = 'true'") + expect(out).toContain('as login_type_provider') + expect(out).toContain('concat(') + }) + + it('uses ClickHouse quantile() for percentiles over the duration field', () => { + const out = sql(AUTH_REPORT_SQL_OTEL.SignInProcessingTimePercentiles('1h')) + + expect(out).toContain( + "round(quantile(0.5)(toInt64OrZero(JSONExtractString(event_message, 'duration'))) / 1000000, 2) as p50_processing_time_ms" + ) + expect(out).toContain('quantile(0.95)') + expect(out).toContain('quantile(0.99)') + expect(out).not.toContain('approx_quantiles') + }) + + it('filters TotalSignUps/PasswordResetRequests to their respective auth_event actions', () => { + expect(sql(AUTH_REPORT_SQL_OTEL.TotalSignUps('1h'))).toContain( + "JSONExtractString(event_message, 'auth_event', 'action') = 'user_signedup'" + ) + expect(sql(AUTH_REPORT_SQL_OTEL.PasswordResetRequests('1h'))).toContain( + "JSONExtractString(event_message, 'auth_event', 'action') = 'user_recovery_requested'" + ) + }) + + it('uses ClickHouse quantile() for sign-up percentiles over the duration field', () => { + const out = sql(AUTH_REPORT_SQL_OTEL.SignUpProcessingTimePercentiles('1h')) + + expect(out).toContain( + "round(quantile(0.5)(toInt64OrZero(JSONExtractString(event_message, 'duration'))) / 1000000, 2) as p50_processing_time_ms" + ) + expect(out).toContain('quantile(0.95)') + expect(out).toContain('quantile(0.99)') + expect(out).not.toContain('approx_quantiles') + }) + + it('averages sign-in processing time without percentiles for the basic variant', () => { + const out = sql(AUTH_REPORT_SQL_OTEL.SignInProcessingTimeBasic('1h')) + + expect(out).toContain("JSONExtractString(event_message, 'auth_event', 'action') = 'login'") + expect(out).toContain( + "round(avg(toInt64OrZero(JSONExtractString(event_message, 'duration'))) / 1000000, 2) as avg_processing_time_ms" + ) + expect(out).not.toContain('quantile(') + }) + + it('averages sign-up processing time without percentiles for the basic variant', () => { + const out = sql(AUTH_REPORT_SQL_OTEL.SignUpProcessingTimeBasic('1h')) + + expect(out).toContain( + "round(avg(toInt64OrZero(JSONExtractString(event_message, 'duration'))) / 1000000, 2) as avg_processing_time_ms" + ) + expect(out).not.toContain('quantile(') + }) + + it('reads edge_logs error fields from log_attributes', () => { + const out = sql(AUTH_REPORT_SQL_OTEL.ErrorsByStatus('1h')) + + expect(out).toContain("where source = 'edge_logs'") + expect(out).toContain("log_attributes['request.path'] like '%auth/v1%'") + expect(out).toContain( + "toInt32OrZero(log_attributes['response.status_code']) between 400 and 599" + ) + expect(out).toContain("toInt32OrZero(log_attributes['response.status_code']) as status_code") + }) + + it('selects the x_sb_error_code attribute for the by-code breakdown', () => { + expect(sql(AUTH_REPORT_SQL_OTEL.ErrorsByAuthCode('1h'))).toContain( + "log_attributes['response.headers.x_sb_error_code'] as error_code" + ) + }) + + it('applies the numeric status_code filter to edge_logs error queries', () => { + const out = sql( + AUTH_REPORT_SQL_OTEL.ErrorsByStatus('1h', { status_code: { operator: '>=', value: 500 } }) + ) + expect(out).toContain("AND toInt32OrZero(log_attributes['response.status_code']) >= 500") + }) + + it('ignores a status_code filter on auth_logs-sourced queries (no HTTP response fields there)', () => { + const out = sql( + AUTH_REPORT_SQL_OTEL.ActiveUsers('1h', { status_code: { operator: '>=', value: 500 } }) + ) + expect(out).not.toContain("toInt32OrZero(log_attributes['response.status_code'])") + }) + + it('ignores a provider filter on edge_logs-sourced queries (no auth provider attribute there)', () => { + const out = sql(AUTH_REPORT_SQL_OTEL.ErrorsByStatus('1h', { provider: ['google'] })) + expect(out).not.toContain("JSONExtractString(event_message, 'provider')") + }) +}) diff --git a/apps/studio/data/reports/v2/auth.config.ts b/apps/studio/data/reports/v2/auth.config.ts index 82fcf2490ba..11cfd678b1a 100644 --- a/apps/studio/data/reports/v2/auth.config.ts +++ b/apps/studio/data/reports/v2/auth.config.ts @@ -21,6 +21,7 @@ import { fetchLogs, SAFE_COMPARISON_OPERATOR_SQL, SAFE_GRANULARITY_SQL, + type Granularity, } from '@/data/reports/report.utils' const AUTH_ERROR_CODE_LIST = Object.entries(AUTH_ERROR_CODES).map(([key, value]) => ({ @@ -39,7 +40,7 @@ const METRIC_KEYS = [ 'SignUpProcessingTimePercentiles', 'ErrorsByStatus', 'ErrorsByAuthCode', -] +] as const type MetricKey = (typeof METRIC_KEYS)[number] @@ -48,10 +49,7 @@ type AuthReportFilters = { provider?: string[] | null } -// Static SELECT-clause fragment for the `auth_logs` table. const PROVIDER_SELECT_FRAGMENT = safeSql`COALESCE(JSON_VALUE(event_message, "$.provider"), 'unknown') as provider,` - -// Static SELECT-clause fragment for the aliased `auth_logs f` form. const PROVIDER_SELECT_FRAGMENT_F_ALIAS = safeSql`COALESCE(JSON_VALUE(f.event_message, "$.provider"), 'unknown') as provider,` const PROVIDER_GROUP_BY_FRAGMENT = safeSql`, provider` @@ -66,45 +64,45 @@ function providerGroupBy(groupByProvider: boolean): SafeLogSqlFragment { return groupByProvider ? PROVIDER_GROUP_BY_FRAGMENT : EMPTY } -/** - * Builds an `AND`-prefixed predicate fragment for `auth_logs`-shaped queries. - * Returns the empty fragment when no filters apply. The returned value can be - * spliced directly after a query's existing `WHERE` clause. - */ -function authFiltersToAndPredicates(filters?: AuthReportFilters): SafeLogSqlFragment { - const predicates: SafeLogSqlFragment[] = [] +function authFilterSql(filters?: AuthReportFilters): SafeLogSqlFragment { + const conditions: SafeLogSqlFragment[] = [] if (filters?.status_code) { const op = SAFE_COMPARISON_OPERATOR_SQL[filters.status_code.operator] - predicates.push( + conditions.push( safeSql`response.status_code ${op} ${analyticsLiteral(filters.status_code.value)}` ) } if (filters?.provider && filters.provider.length > 0) { const list = joinSqlFragments(filters.provider.map(analyticsLiteral), ', ') - predicates.push(safeSql`JSON_VALUE(event_message, "$.provider") IN (${list})`) + conditions.push(safeSql`JSON_VALUE(event_message, "$.provider") IN (${list})`) } - if (predicates.length === 0) return EMPTY - return safeSql`AND ${joinSqlFragments(predicates, ' AND ')}` + if (conditions.length === 0) return EMPTY + return safeSql`AND ${joinSqlFragments(conditions, ' AND ')}` } -/** - * Builds an `AND`-prefixed predicate fragment for `edge_logs`-shaped queries. - */ -function edgeLogsFiltersToAndPredicates(filters?: AuthReportFilters): SafeLogSqlFragment { - const predicates: SafeLogSqlFragment[] = [] +function edgeLogsFilterSql(filters?: AuthReportFilters): SafeLogSqlFragment { + const conditions: SafeLogSqlFragment[] = [] if (filters?.status_code) { const op = SAFE_COMPARISON_OPERATOR_SQL[filters.status_code.operator] - predicates.push( + conditions.push( safeSql`response.status_code ${op} ${analyticsLiteral(filters.status_code.value)}` ) } - if (predicates.length === 0) return EMPTY - return safeSql`AND ${joinSqlFragments(predicates, ' AND ')}` + if (conditions.length === 0) return EMPTY + return safeSql`AND ${joinSqlFragments(conditions, ' AND ')}` +} + +function authQuerySetup(interval: AnalyticsInterval, filters?: AuthReportFilters) { + return { + granularity: SAFE_GRANULARITY_SQL[analyticsIntervalToGranularity(interval)], + filterSql: authFilterSql(filters), + groupByProvider: Boolean(filters?.provider && filters.provider.length > 0), + } } const AUTH_REPORT_SQL: Record< @@ -112,9 +110,7 @@ const AUTH_REPORT_SQL: Record< (interval: AnalyticsInterval, filters?: AuthReportFilters) => SafeLogSqlFragment > = { ActiveUsers: (interval, filters) => { - const granularity = SAFE_GRANULARITY_SQL[analyticsIntervalToGranularity(interval)] - const andPredicates = authFiltersToAndPredicates(filters) - const groupByProvider = Boolean(filters?.provider && filters.provider.length > 0) + const { granularity, filterSql, groupByProvider } = authQuerySetup(interval, filters) return safeSql` --active-users select @@ -126,15 +122,13 @@ const AUTH_REPORT_SQL: Record< 'login', 'user_signedup', 'token_refreshed', 'user_modified', 'user_recovery_requested', 'user_reauthenticate_requested' ) - ${andPredicates} + ${filterSql} group by timestamp${providerGroupBy(groupByProvider)} order by timestamp desc${providerGroupBy(groupByProvider)} ` }, SignInAttempts: (interval, filters) => { - const granularity = SAFE_GRANULARITY_SQL[analyticsIntervalToGranularity(interval)] - const andPredicates = authFiltersToAndPredicates(filters) - const groupByProvider = Boolean(filters?.provider && filters.provider.length > 0) + const { granularity, filterSql, groupByProvider } = authQuerySetup(interval, filters) return safeSql` --sign-in-attempts SELECT @@ -157,7 +151,7 @@ const AUTH_REPORT_SQL: Record< WHERE JSON_VALUE(event_message, "$.action") = 'login' AND JSON_VALUE(event_message, "$.metering") = "true" - ${andPredicates} + ${filterSql} GROUP BY timestamp, login_type_provider${providerGroupBy(groupByProvider)} ORDER BY @@ -165,9 +159,7 @@ const AUTH_REPORT_SQL: Record< ` }, PasswordResetRequests: (interval, filters) => { - const granularity = SAFE_GRANULARITY_SQL[analyticsIntervalToGranularity(interval)] - const andPredicates = authFiltersToAndPredicates(filters) - const groupByProvider = Boolean(filters?.provider && filters.provider.length > 0) + const { granularity, filterSql, groupByProvider } = authQuerySetup(interval, filters) return safeSql` --password-reset-requests select @@ -176,15 +168,13 @@ const AUTH_REPORT_SQL: Record< count(*) as count from auth_logs f where json_value(f.event_message, "$.auth_event.action") = 'user_recovery_requested' - ${andPredicates} + ${filterSql} group by timestamp${providerGroupBy(groupByProvider)} order by timestamp desc${providerGroupBy(groupByProvider)} ` }, TotalSignUps: (interval, filters) => { - const granularity = SAFE_GRANULARITY_SQL[analyticsIntervalToGranularity(interval)] - const andPredicates = authFiltersToAndPredicates(filters) - const groupByProvider = Boolean(filters?.provider && filters.provider.length > 0) + const { granularity, filterSql, groupByProvider } = authQuerySetup(interval, filters) return safeSql` --total-signups select @@ -193,15 +183,13 @@ const AUTH_REPORT_SQL: Record< count(*) as count from auth_logs where json_value(event_message, "$.auth_event.action") = 'user_signedup' - ${andPredicates} + ${filterSql} group by timestamp${providerGroupBy(groupByProvider)} order by timestamp desc${providerGroupBy(groupByProvider)} ` }, SignInProcessingTimeBasic: (interval, filters) => { - const granularity = SAFE_GRANULARITY_SQL[analyticsIntervalToGranularity(interval)] - const andPredicates = authFiltersToAndPredicates(filters) - const groupByProvider = Boolean(filters?.provider && filters.provider.length > 0) + const { granularity, filterSql, groupByProvider } = authQuerySetup(interval, filters) return safeSql` --signin-processing-time-basic select @@ -213,15 +201,13 @@ const AUTH_REPORT_SQL: Record< round(max(cast(json_value(event_message, "$.duration") as int64)) / 1000000, 2) as max_processing_time_ms from auth_logs where json_value(event_message, "$.auth_event.action") = 'login' - ${andPredicates} + ${filterSql} group by timestamp${providerGroupBy(groupByProvider)} order by timestamp desc${providerGroupBy(groupByProvider)} ` }, SignInProcessingTimePercentiles: (interval, filters) => { - const granularity = SAFE_GRANULARITY_SQL[analyticsIntervalToGranularity(interval)] - const andPredicates = authFiltersToAndPredicates(filters) - const groupByProvider = Boolean(filters?.provider && filters.provider.length > 0) + const { granularity, filterSql, groupByProvider } = authQuerySetup(interval, filters) return safeSql` --signin-processing-time-percentiles select @@ -233,15 +219,13 @@ const AUTH_REPORT_SQL: Record< round(approx_quantiles(cast(json_value(event_message, "$.duration") as int64), 100)[offset(99)] / 1000000, 2) as p99_processing_time_ms from auth_logs where json_value(event_message, "$.auth_event.action") = 'login' - ${andPredicates} + ${filterSql} group by timestamp${providerGroupBy(groupByProvider)} order by timestamp desc${providerGroupBy(groupByProvider)} ` }, SignUpProcessingTimeBasic: (interval, filters) => { - const granularity = SAFE_GRANULARITY_SQL[analyticsIntervalToGranularity(interval)] - const andPredicates = authFiltersToAndPredicates(filters) - const groupByProvider = Boolean(filters?.provider && filters.provider.length > 0) + const { granularity, filterSql, groupByProvider } = authQuerySetup(interval, filters) return safeSql` --signup-processing-time-basic select @@ -253,15 +237,13 @@ const AUTH_REPORT_SQL: Record< round(max(cast(json_value(event_message, "$.duration") as int64)) / 1000000, 2) as max_processing_time_ms from auth_logs where json_value(event_message, "$.auth_event.action") = 'user_signedup' - ${andPredicates} + ${filterSql} group by timestamp${providerGroupBy(groupByProvider)} order by timestamp desc${providerGroupBy(groupByProvider)} ` }, SignUpProcessingTimePercentiles: (interval, filters) => { - const granularity = SAFE_GRANULARITY_SQL[analyticsIntervalToGranularity(interval)] - const andPredicates = authFiltersToAndPredicates(filters) - const groupByProvider = Boolean(filters?.provider && filters.provider.length > 0) + const { granularity, filterSql, groupByProvider } = authQuerySetup(interval, filters) return safeSql` --signup-processing-time-percentiles select @@ -273,14 +255,14 @@ const AUTH_REPORT_SQL: Record< round(approx_quantiles(cast(json_value(event_message, "$.duration") as int64), 100)[offset(99)] / 1000000, 2) as p99_processing_time_ms from auth_logs where json_value(event_message, "$.auth_event.action") = 'user_signedup' - ${andPredicates} + ${filterSql} group by timestamp${providerGroupBy(groupByProvider)} order by timestamp desc${providerGroupBy(groupByProvider)} ` }, ErrorsByStatus: (interval, filters) => { const granularity = SAFE_GRANULARITY_SQL[analyticsIntervalToGranularity(interval)] - const andPredicates = edgeLogsFiltersToAndPredicates(filters) + const filterSql = edgeLogsFilterSql(filters) return safeSql` --auth-errors-by-status select @@ -294,14 +276,14 @@ const AUTH_REPORT_SQL: Record< cross join unnest(response.headers) as h where path like '%auth/v1%' and response.status_code >= 400 and response.status_code <= 599 - ${andPredicates} + ${filterSql} group by timestamp, status_code order by timestamp desc ` }, ErrorsByAuthCode: (interval, filters) => { const granularity = SAFE_GRANULARITY_SQL[analyticsIntervalToGranularity(interval)] - const andPredicates = edgeLogsFiltersToAndPredicates(filters) + const filterSql = edgeLogsFilterSql(filters) return safeSql` --auth-errors-by-code select @@ -315,119 +297,253 @@ const AUTH_REPORT_SQL: Record< cross join unnest(response.headers) as h where path like '%auth/v1%' and response.status_code >= 400 and response.status_code <= 599 - ${andPredicates} + ${filterSql} group by timestamp, error_code order by timestamp desc ` }, } -export const AUTH_ERROR_CODE_VALUES: string[] = [ - 'anonymous_provider_disabled', - 'bad_code_verifier', - 'bad_json', - 'bad_jwt', - 'bad_oauth_callback', - 'bad_oauth_state', - 'captcha_failed', - 'conflict', - 'email_address_invalid', - 'email_address_not_authorized', - 'email_conflict_identity_not_deletable', - 'email_exists', - 'email_not_confirmed', - 'email_provider_disabled', - 'flow_state_expired', - 'flow_state_not_found', - 'hook_payload_invalid_content_type', - 'hook_payload_over_size_limit', - 'hook_timeout', - 'hook_timeout_after_retry', - 'identity_already_exists', - 'identity_not_found', - 'insufficient_aal', - 'invalid_credentials', - 'invite_not_found', - 'manual_linking_disabled', - 'mfa_challenge_expired', - 'mfa_factor_name_conflict', - 'mfa_factor_not_found', - 'mfa_ip_address_mismatch', - 'mfa_phone_enroll_not_enabled', - 'mfa_phone_verify_not_enabled', - 'mfa_totp_enroll_not_enabled', - 'mfa_totp_verify_not_enabled', - 'mfa_verification_failed', - 'mfa_verification_rejected', - 'mfa_verified_factor_exists', - 'mfa_web_authn_enroll_not_enabled', - 'mfa_web_authn_verify_not_enabled', - 'no_authorization', - 'not_admin', - 'oauth_provider_not_supported', - 'otp_disabled', - 'otp_expired', - 'over_email_send_rate_limit', - 'over_request_rate_limit', - 'over_sms_send_rate_limit', - 'phone_exists', - 'phone_not_confirmed', - 'phone_provider_disabled', - 'provider_disabled', - 'provider_email_needs_verification', - 'reauthentication_needed', - 'reauthentication_not_valid', - 'refresh_token_already_used', - 'refresh_token_not_found', - 'request_timeout', - 'same_password', - 'saml_assertion_no_email', - 'saml_assertion_no_user_id', - 'saml_entity_id_mismatch', - 'saml_idp_already_exists', - 'saml_idp_not_found', - 'saml_metadata_fetch_failed', - 'saml_provider_disabled', - 'saml_relay_state_expired', - 'saml_relay_state_not_found', - 'session_expired', - 'session_not_found', - 'signup_disabled', - 'single_identity_not_deletable', - 'sms_send_failed', - 'sso_domain_already_exists', - 'sso_provider_not_found', - 'too_many_enrolled_mfa_factors', - 'unexpected_audience', - 'unexpected_failure', - 'user_already_exists', - 'user_banned', - 'user_not_found', - 'user_sso_managed', - 'validation_failed', - 'weak_password', -] +// fillTimeseries/isUnixMicro expects a 16-digit unix-microsecond timestamp, matching BigQuery's timestamp_trunc. +const OTEL_TIMESTAMP: Record = { + minute: safeSql`toUnixTimestamp(toStartOfMinute(timestamp)) * 1000000`, + hour: safeSql`toUnixTimestamp(toStartOfHour(timestamp)) * 1000000`, + day: safeSql`toUnixTimestamp(toStartOfDay(timestamp)) * 1000000`, +} + +const PROVIDER_SELECT_FRAGMENT_OTEL = safeSql`coalesce(nullIf(JSONExtractString(event_message, 'provider'), ''), 'unknown') as provider,` + +function providerSelectFragmentOtel(groupByProvider: boolean): SafeLogSqlFragment { + return groupByProvider ? PROVIDER_SELECT_FRAGMENT_OTEL : EMPTY +} + +// auth_logs rows have no HTTP response fields, so status_code can't apply here. +function authOtelFilterSql(filters?: AuthReportFilters): SafeLogSqlFragment { + if (filters?.provider && filters.provider.length > 0) { + const list = joinSqlFragments(filters.provider.map(analyticsLiteral), ', ') + return safeSql`AND JSONExtractString(event_message, 'provider') IN (${list})` + } + return EMPTY +} + +// edge_logs rows have no auth provider field, so provider can't apply here. +function edgeLogsOtelFilterSql(filters?: AuthReportFilters): SafeLogSqlFragment { + if (filters?.status_code) { + const op = SAFE_COMPARISON_OPERATOR_SQL[filters.status_code.operator] + return safeSql`AND toInt32OrZero(log_attributes['response.status_code']) ${op} ${analyticsLiteral(filters.status_code.value)}` + } + return EMPTY +} + +function authOtelQuerySetup(interval: AnalyticsInterval, filters?: AuthReportFilters) { + return { + ts: OTEL_TIMESTAMP[analyticsIntervalToGranularity(interval)], + filterSql: authOtelFilterSql(filters), + groupByProvider: Boolean(filters?.provider && filters.provider.length > 0), + } +} + +export const AUTH_REPORT_SQL_OTEL: Record< + MetricKey, + (interval: AnalyticsInterval, filters?: AuthReportFilters) => SafeLogSqlFragment +> = { + ActiveUsers: (interval, filters) => { + const { ts, filterSql, groupByProvider } = authOtelQuerySetup(interval, filters) + return safeSql` + --active-users (otel) + select + ${ts} as timestamp, + ${providerSelectFragmentOtel(groupByProvider)} + count(distinct JSONExtractString(event_message, 'auth_event', 'actor_id')) as count + from logs + where source = 'auth_logs' + and JSONExtractString(event_message, 'auth_event', 'action') in ( + 'login', 'user_signedup', 'token_refreshed', 'user_modified', + 'user_recovery_requested', 'user_reauthenticate_requested' + ) + ${filterSql} + group by ${ts}${providerGroupBy(groupByProvider)} + order by ${ts} desc${providerGroupBy(groupByProvider)} + ` + }, + SignInAttempts: (interval, filters) => { + const { ts, filterSql, groupByProvider } = authOtelQuerySetup(interval, filters) + return safeSql` + --sign-in-attempts (otel) + select + ${ts} as timestamp, + ${providerSelectFragmentOtel(groupByProvider)} + case + when JSONExtractString(event_message, 'provider') != '' + then concat( + JSONExtractString(event_message, 'login_method'), + ' (', + JSONExtractString(event_message, 'provider'), + ')' + ) + else JSONExtractString(event_message, 'login_method') + end as login_type_provider, + count() as count + from logs + where source = 'auth_logs' + and JSONExtractString(event_message, 'action') = 'login' + and JSONExtractString(event_message, 'metering') = 'true' + ${filterSql} + group by ${ts}, login_type_provider${providerGroupBy(groupByProvider)} + order by ${ts} desc, login_type_provider${providerGroupBy(groupByProvider)} + ` + }, + PasswordResetRequests: (interval, filters) => { + const { ts, filterSql, groupByProvider } = authOtelQuerySetup(interval, filters) + return safeSql` + --password-reset-requests (otel) + select + ${ts} as timestamp, + ${providerSelectFragmentOtel(groupByProvider)} + count() as count + from logs + where source = 'auth_logs' + and JSONExtractString(event_message, 'auth_event', 'action') = 'user_recovery_requested' + ${filterSql} + group by ${ts}${providerGroupBy(groupByProvider)} + order by ${ts} desc${providerGroupBy(groupByProvider)} + ` + }, + TotalSignUps: (interval, filters) => { + const { ts, filterSql, groupByProvider } = authOtelQuerySetup(interval, filters) + return safeSql` + --total-signups (otel) + select + ${ts} as timestamp, + ${providerSelectFragmentOtel(groupByProvider)} + count() as count + from logs + where source = 'auth_logs' + and JSONExtractString(event_message, 'auth_event', 'action') = 'user_signedup' + ${filterSql} + group by ${ts}${providerGroupBy(groupByProvider)} + order by ${ts} desc${providerGroupBy(groupByProvider)} + ` + }, + SignInProcessingTimeBasic: (interval, filters) => { + const { ts, filterSql, groupByProvider } = authOtelQuerySetup(interval, filters) + return safeSql` + --signin-processing-time-basic (otel) + select + ${ts} as timestamp, + ${providerSelectFragmentOtel(groupByProvider)} + count() as count, + round(avg(toInt64OrZero(JSONExtractString(event_message, 'duration'))) / 1000000, 2) as avg_processing_time_ms, + round(min(toInt64OrZero(JSONExtractString(event_message, 'duration'))) / 1000000, 2) as min_processing_time_ms, + round(max(toInt64OrZero(JSONExtractString(event_message, 'duration'))) / 1000000, 2) as max_processing_time_ms + from logs + where source = 'auth_logs' + and JSONExtractString(event_message, 'auth_event', 'action') = 'login' + ${filterSql} + group by ${ts}${providerGroupBy(groupByProvider)} + order by ${ts} desc${providerGroupBy(groupByProvider)} + ` + }, + SignInProcessingTimePercentiles: (interval, filters) => { + const { ts, filterSql, groupByProvider } = authOtelQuerySetup(interval, filters) + return safeSql` + --signin-processing-time-percentiles (otel) + select + ${ts} as timestamp, + ${providerSelectFragmentOtel(groupByProvider)} + count() as count, + round(quantile(0.5)(toInt64OrZero(JSONExtractString(event_message, 'duration'))) / 1000000, 2) as p50_processing_time_ms, + round(quantile(0.95)(toInt64OrZero(JSONExtractString(event_message, 'duration'))) / 1000000, 2) as p95_processing_time_ms, + round(quantile(0.99)(toInt64OrZero(JSONExtractString(event_message, 'duration'))) / 1000000, 2) as p99_processing_time_ms + from logs + where source = 'auth_logs' + and JSONExtractString(event_message, 'auth_event', 'action') = 'login' + ${filterSql} + group by ${ts}${providerGroupBy(groupByProvider)} + order by ${ts} desc${providerGroupBy(groupByProvider)} + ` + }, + SignUpProcessingTimeBasic: (interval, filters) => { + const { ts, filterSql, groupByProvider } = authOtelQuerySetup(interval, filters) + return safeSql` + --signup-processing-time-basic (otel) + select + ${ts} as timestamp, + ${providerSelectFragmentOtel(groupByProvider)} + count() as count, + round(avg(toInt64OrZero(JSONExtractString(event_message, 'duration'))) / 1000000, 2) as avg_processing_time_ms, + round(min(toInt64OrZero(JSONExtractString(event_message, 'duration'))) / 1000000, 2) as min_processing_time_ms, + round(max(toInt64OrZero(JSONExtractString(event_message, 'duration'))) / 1000000, 2) as max_processing_time_ms + from logs + where source = 'auth_logs' + and JSONExtractString(event_message, 'auth_event', 'action') = 'user_signedup' + ${filterSql} + group by ${ts}${providerGroupBy(groupByProvider)} + order by ${ts} desc${providerGroupBy(groupByProvider)} + ` + }, + SignUpProcessingTimePercentiles: (interval, filters) => { + const { ts, filterSql, groupByProvider } = authOtelQuerySetup(interval, filters) + return safeSql` + --signup-processing-time-percentiles (otel) + select + ${ts} as timestamp, + ${providerSelectFragmentOtel(groupByProvider)} + count() as count, + round(quantile(0.5)(toInt64OrZero(JSONExtractString(event_message, 'duration'))) / 1000000, 2) as p50_processing_time_ms, + round(quantile(0.95)(toInt64OrZero(JSONExtractString(event_message, 'duration'))) / 1000000, 2) as p95_processing_time_ms, + round(quantile(0.99)(toInt64OrZero(JSONExtractString(event_message, 'duration'))) / 1000000, 2) as p99_processing_time_ms + from logs + where source = 'auth_logs' + and JSONExtractString(event_message, 'auth_event', 'action') = 'user_signedup' + ${filterSql} + group by ${ts}${providerGroupBy(groupByProvider)} + order by ${ts} desc${providerGroupBy(groupByProvider)} + ` + }, + ErrorsByStatus: (interval, filters) => { + const ts = OTEL_TIMESTAMP[analyticsIntervalToGranularity(interval)] + const filterSql = edgeLogsOtelFilterSql(filters) + return safeSql` + --auth-errors-by-status (otel) + select + ${ts} as timestamp, + count() as count, + toInt32OrZero(log_attributes['response.status_code']) as status_code + from logs + where source = 'edge_logs' + and log_attributes['request.path'] like '%auth/v1%' + and toInt32OrZero(log_attributes['response.status_code']) between 400 and 599 + ${filterSql} + group by ${ts}, status_code + order by ${ts} desc + ` + }, + ErrorsByAuthCode: (interval, filters) => { + const ts = OTEL_TIMESTAMP[analyticsIntervalToGranularity(interval)] + const filterSql = edgeLogsOtelFilterSql(filters) + return safeSql` + --auth-errors-by-code (otel) + select + ${ts} as timestamp, + count() as count, + log_attributes['response.headers.x_sb_error_code'] as error_code + from logs + where source = 'edge_logs' + and log_attributes['request.path'] like '%auth/v1%' + and toInt32OrZero(log_attributes['response.status_code']) between 400 and 599 + ${filterSql} + group by ${ts}, error_code + order by ${ts} desc + ` + }, +} -/** - * Transforms raw analytics data into a chart-ready format by ensuring data consistency and completeness. - * - * This function addresses several key requirements for chart rendering: - * 1. Fills missing timestamps with zero values to prevent gaps in charts - * 2. Creates a consistent data structure with `period_start` as the time axis - * 3. Initializes all chart attributes to 0, then populates actual values - * 4. Sorts timestamps chronologically for proper chart ordering - * - * @param rawData - Raw analytics data from backend queries containing timestamp and count fields - * @param attributes - Chart attribute configuration defining what metrics to display - * @returns Formatted data object with consistent time series data and chart attributes - */ export function defaultAuthReportFormatter( rawData: unknown, attributes: ReportDataProviderAttribute[], groupByProvider = false ) { - const chartAttributes = attributes - const rawDataSchema = z.object({ result: z.array( z @@ -441,10 +557,9 @@ export function defaultAuthReportFormatter( const parsedRawData = rawDataSchema.parse(rawData) const result = parsedRawData.result - if (!result) return { data: undefined, chartAttributes } + if (!result) return { data: undefined, chartAttributes: attributes } if (groupByProvider) { - // Group by provider - create separate attributes for each provider const providers = new Set() result.forEach((p: any) => { if (p.provider) { @@ -454,7 +569,7 @@ export function defaultAuthReportFormatter( const providerAttributes: ReportDataProviderAttribute[] = [] providers.forEach((provider) => { - chartAttributes.forEach((attr) => { + attributes.forEach((attr) => { providerAttributes.push({ ...attr, attribute: `${attr.attribute}_${provider}`, @@ -496,20 +611,18 @@ export function defaultAuthReportFormatter( }) return { data, chartAttributes: providerAttributes } } else { - // Original logic for non-provider grouping const timestamps = new Set(result.map((p: any) => String(p.timestamp))) const data = Array.from(timestamps) .sort() .map((timestamp) => { const point: any = { timestamp } - chartAttributes.forEach((attr) => { + attributes.forEach((attr) => { point[attr.attribute] = 0 }) const matchingPoints = result.filter((p: any) => String(p.timestamp) === timestamp) matchingPoints.forEach((p: any) => { - chartAttributes.forEach((attr) => { - // Optional dimension filters used by some reports + attributes.forEach((attr) => { if ('login_type_provider' in (attr as any)) { if (p.login_type_provider !== (attr as any).login_type_provider) return } @@ -531,7 +644,7 @@ export function defaultAuthReportFormatter( }) return point }) - return { data, chartAttributes } + return { data, chartAttributes: attributes } } } @@ -541,14 +654,17 @@ export const createUsageReportConfig = ({ endDate, interval, filters, + useOtel = false, }: { projectRef: string startDate: string endDate: string interval: AnalyticsInterval filters: AuthReportFilters + useOtel?: boolean }): ReportConfig[] => { const groupByProvider = Boolean(filters?.provider && filters.provider.length > 0) + const queries = useOtel ? AUTH_REPORT_SQL_OTEL : AUTH_REPORT_SQL return [ { @@ -568,9 +684,9 @@ export const createUsageReportConfig = ({ { attribute: 'ActiveUsers', provider: 'logs', label: 'Auth Activity', enabled: true }, ] - const sql = AUTH_REPORT_SQL.ActiveUsers(interval, filters) + const sql = queries.ActiveUsers(interval, filters) - const rawData = await fetchLogs(projectRef, sql, startDate, endDate) + const rawData = await fetchLogs(projectRef, sql, startDate, endDate, useOtel) const transformedData = defaultAuthReportFormatter(rawData, attributes, groupByProvider) @@ -624,8 +740,8 @@ export const createUsageReportConfig = ({ }, ] - const sql = AUTH_REPORT_SQL.SignInAttempts(interval, filters) - const rawData = await fetchLogs(projectRef, sql, startDate, endDate) + const sql = queries.SignInAttempts(interval, filters) + const rawData = await fetchLogs(projectRef, sql, startDate, endDate, useOtel) const transformedData = defaultAuthReportFormatter(rawData, attributes, groupByProvider) return { @@ -656,8 +772,8 @@ export const createUsageReportConfig = ({ }, ] - const sql = AUTH_REPORT_SQL.TotalSignUps(interval, filters) - const rawData = await fetchLogs(projectRef, sql, startDate, endDate) + const sql = queries.TotalSignUps(interval, filters) + const rawData = await fetchLogs(projectRef, sql, startDate, endDate, useOtel) const transformedData = defaultAuthReportFormatter(rawData, attributes, groupByProvider) return { @@ -688,8 +804,8 @@ export const createUsageReportConfig = ({ }, ] - const sql = AUTH_REPORT_SQL.PasswordResetRequests(interval, filters) - const rawData = await fetchLogs(projectRef, sql, startDate, endDate) + const sql = queries.PasswordResetRequests(interval, filters) + const rawData = await fetchLogs(projectRef, sql, startDate, endDate, useOtel) const transformedData = defaultAuthReportFormatter(rawData, attributes, groupByProvider) return { @@ -708,72 +824,81 @@ export const createErrorsReportConfig = ({ endDate, interval, filters, + useOtel = false, }: { projectRef: string startDate: string endDate: string interval: AnalyticsInterval filters: AuthReportFilters -}): ReportConfig[] => [ - { - id: 'auth-errors', - label: 'API Gateway Auth Errors', - valuePrecision: 0, - hide: false, - showTooltip: true, - showLegend: true, - showMaxValue: false, - hideChartType: false, - defaultChartStyle: 'line', - titleTooltip: 'The total number of auth errors by status code from the API Gateway.', - dataProvider: async () => { - const sql = AUTH_REPORT_SQL.ErrorsByStatus(interval, filters) - const rawData = await fetchLogs(projectRef, sql, startDate, endDate) + useOtel?: boolean +}): ReportConfig[] => { + const queries = useOtel ? AUTH_REPORT_SQL_OTEL : AUTH_REPORT_SQL + return [ + { + id: 'auth-errors', + label: 'API Gateway Auth Errors', + valuePrecision: 0, + hide: false, + showTooltip: true, + showLegend: true, + showMaxValue: false, + hideChartType: false, + defaultChartStyle: 'line', + titleTooltip: 'The total number of auth errors by status code from the API Gateway.', + dataProvider: async () => { + const sql = queries.ErrorsByStatus(interval, filters) + const rawData = await fetchLogs(projectRef, sql, startDate, endDate, useOtel) - if (!rawData?.result) return { data: [] } + if (!rawData?.result) return { data: [], query: sql } - const statusCodes = extractStatusCodesFromData(rawData.result) - const attributes = generateStatusCodeAttributes(statusCodes) - const data = transformStatusCodeData(rawData.result, statusCodes) + const statusCodes = extractStatusCodesFromData(rawData.result) + const attributes = generateStatusCodeAttributes(statusCodes) + const data = transformStatusCodeData(rawData.result, statusCodes) - return { data, attributes, query: sql } + return { data, attributes, query: sql } + }, }, - }, - { - id: 'auth-errors-by-code', - label: 'Auth Errors by Code', - valuePrecision: 0, - hide: false, - showTooltip: true, - showLegend: true, - showMaxValue: false, - hideChartType: false, - defaultChartStyle: 'line', - titleTooltip: - 'The total number of auth errors by Supabase Auth error code from the API Gateway.', - dataProvider: async () => { - const sql = AUTH_REPORT_SQL.ErrorsByAuthCode(interval, filters) - const rawData = await fetchLogs(projectRef, sql, startDate, endDate) + { + id: 'auth-errors-by-code', + label: 'Auth Errors by Code', + valuePrecision: 0, + hide: false, + showTooltip: true, + showLegend: true, + showMaxValue: false, + hideChartType: false, + defaultChartStyle: 'line', + titleTooltip: + 'The total number of auth errors by Supabase Auth error code from the API Gateway.', + dataProvider: async () => { + const sql = queries.ErrorsByAuthCode(interval, filters) + const rawData = await fetchLogs(projectRef, sql, startDate, endDate, useOtel) - if (!rawData?.result) return { data: [] } + if (!rawData?.result) return { data: [], query: sql } - const categories = rawData.result - .map((r: any) => r.error_code) - .filter((v: any) => v !== null && v !== undefined) - const distinct = Array.from(new Set(categories)).sort() + const rows = z + .array(z.object({ error_code: z.string().nullish() }).catchall(z.unknown())) + .parse(rawData.result) - const attributes = distinct.map((c: string) => ({ - attribute: c, - label: c, - tooltip: AUTH_ERROR_CODE_LIST.find((e) => e.key === c)?.description, - })) + const categories = rows + .map((r) => r.error_code) + .filter((v): v is string => v !== null && v !== undefined) + const distinct = Array.from(new Set(categories)).sort() - const pivoted = transformCategoricalCountData(rawData.result, 'error_code', distinct) + const attributes = distinct.map((c: string) => ({ + attribute: c, + label: c, + tooltip: AUTH_ERROR_CODE_LIST.find((e) => e.key === c)?.description, + })) - return { data: pivoted, attributes, query: sql } + const pivoted = transformCategoricalCountData(rows, 'error_code', distinct) + + return { data: pivoted, attributes, query: sql } + }, }, - }, -] + ] +} export const createLatencyReportConfig = ({ projectRef, @@ -781,14 +906,17 @@ export const createLatencyReportConfig = ({ endDate, interval, filters, + useOtel = false, }: { projectRef: string startDate: string endDate: string interval: AnalyticsInterval filters: AuthReportFilters + useOtel?: boolean }): ReportConfig[] => { const groupByProvider = Boolean(filters?.provider && filters.provider.length > 0) + const queries = useOtel ? AUTH_REPORT_SQL_OTEL : AUTH_REPORT_SQL return [ { @@ -820,8 +948,8 @@ export const createLatencyReportConfig = ({ }, ] - const sql = AUTH_REPORT_SQL.SignInProcessingTimeBasic(interval, filters) - const rawData = await fetchLogs(projectRef, sql, startDate, endDate) + const sql = queries.SignInProcessingTimeBasic(interval, filters) + const rawData = await fetchLogs(projectRef, sql, startDate, endDate, useOtel) const transformedData = defaultAuthReportFormatter(rawData, attributes, groupByProvider) return { @@ -862,8 +990,8 @@ export const createLatencyReportConfig = ({ }, ] - const sql = AUTH_REPORT_SQL.SignInProcessingTimePercentiles(interval, filters) - const rawData = await fetchLogs(projectRef, sql, startDate, endDate) + const sql = queries.SignInProcessingTimePercentiles(interval, filters) + const rawData = await fetchLogs(projectRef, sql, startDate, endDate, useOtel) const transformedData = defaultAuthReportFormatter(rawData, attributes, groupByProvider) return { @@ -902,8 +1030,8 @@ export const createLatencyReportConfig = ({ }, ] - const sql = AUTH_REPORT_SQL.SignUpProcessingTimeBasic(interval, filters) - const rawData = await fetchLogs(projectRef, sql, startDate, endDate) + const sql = queries.SignUpProcessingTimeBasic(interval, filters) + const rawData = await fetchLogs(projectRef, sql, startDate, endDate, useOtel) const transformedData = defaultAuthReportFormatter(rawData, attributes, groupByProvider) return { @@ -944,8 +1072,8 @@ export const createLatencyReportConfig = ({ }, ] - const sql = AUTH_REPORT_SQL.SignUpProcessingTimePercentiles(interval, filters) - const rawData = await fetchLogs(projectRef, sql, startDate, endDate) + const sql = queries.SignUpProcessingTimePercentiles(interval, filters) + const rawData = await fetchLogs(projectRef, sql, startDate, endDate, useOtel) const transformedData = defaultAuthReportFormatter(rawData, attributes, groupByProvider) return { @@ -957,21 +1085,3 @@ export const createLatencyReportConfig = ({ }, ] } - -export const createAuthReportConfig = ({ - projectRef, - startDate, - endDate, - interval, - filters, -}: { - projectRef: string - startDate: string - endDate: string - interval: AnalyticsInterval - filters: AuthReportFilters -}): ReportConfig[] => [ - ...createUsageReportConfig({ projectRef, startDate, endDate, interval, filters }), - ...createErrorsReportConfig({ projectRef, startDate, endDate, interval, filters }), - ...createLatencyReportConfig({ projectRef, startDate, endDate, interval, filters }), -] From 47b8660d8d2ffd7fa661b287cea661c72ef49a12 Mon Sep 17 00:00:00 2001 From: Aaron Byrne <65355719+aaronByrne1@users.noreply.github.com> Date: Wed, 5 Aug 2026 18:12:20 +0100 Subject: [PATCH 36/83] docs(troubleshooting): troubleshooting guide so users can amend their failed migrations (#48257) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Troubleshooting guide ## What is the current behavior? NA ## What is the new behavior? Troubleshooting guide ## Additional context Add any other context or screenshots. ## Summary by CodeRabbit * **Documentation** * Added a new troubleshooting page: β€œTroubleshooting MIGRATIONS_FAILED: missing tables or an incomplete schema on your branch” for Preview Branch creation. * Explained why replayed `main` migration history can fail when it no longer matches the branch’s live schema. * Included a step-by-step workflow to diagnose the failing migration via logs, repair migration status, and then recreate or rebase the branch to verify. --------- Co-authored-by: Claude --- .../branch-in-migrations-failed-status.mdx | 86 ++++++++++++++++++ .../migrations-failed-status.png | Bin 0 -> 51327 bytes .../postgres-logs-migration-failed.png | Bin 0 -> 339443 bytes .../img/troubleshooting/rebase-image.png | Bin 0 -> 69653 bytes 4 files changed, 86 insertions(+) create mode 100644 apps/docs/content/troubleshooting/branch-in-migrations-failed-status.mdx create mode 100644 apps/docs/public/img/troubleshooting/migrations-failed-status.png create mode 100644 apps/docs/public/img/troubleshooting/postgres-logs-migration-failed.png create mode 100644 apps/docs/public/img/troubleshooting/rebase-image.png diff --git a/apps/docs/content/troubleshooting/branch-in-migrations-failed-status.mdx b/apps/docs/content/troubleshooting/branch-in-migrations-failed-status.mdx new file mode 100644 index 00000000000..879a192b77d --- /dev/null +++ b/apps/docs/content/troubleshooting/branch-in-migrations-failed-status.mdx @@ -0,0 +1,86 @@ +--- +title = "Troubleshooting MIGRATIONS_FAILED: missing tables or an incomplete schema on your branch" +topics = [ "branching" ] +keywords = [ "branching", "migrations", "MIGRATIONS_FAILED", "failed" ] +database_id = "" +--- + +When a Preview Branch is created through the Dashboard, it's built by replaying the migration history from your `main` branch against a fresh database. If that replay fails partway through, the branch is left either empty or partly complete and its status shows `MIGRATIONS_FAILED`. This almost always means the migration history on `main` is out of sync with its actual live schema, commonly because a change was made directly in the SQL Editor or through another manual edit that was never captured as a migration file. + +Work through the following steps to diagnose and repair your migration history so branching can complete successfully. + +--- + +## 1. Confirm the branch failure and view its workflow + +1. Go to [Branches](/dashboard/project/_/branches) and find the affected branch. +2. Click **View logs**. A dialog shows the branch's creation workflow, including the failed step. + +![Branch creation workflow logs showing the failed migration step for a branch in MIGRATIONS_FAILED status](/docs/img/troubleshooting/migrations-failed-status.png) + +--- + +## 2. Find the exact SQL error in your Postgres logs + +1. Go to [Postgres Logs](/dashboard/project/_/logs?filter=log_type:eq:postgres). +2. Look for entries beginning with `execute :`. These are the individual migration statements being replayed. +3. Find the entry marked as an **error**, which the Dashboard also highlights in red. This is the statement that failed, and its message explains why. Common messages include relation already exists, column not found, permission denied, and relation does not exist. + +![Postgres Logs with the failed migration statement marked as an error and its message expanded](/docs/img/troubleshooting/postgres-logs-migration-failed.png) + +--- + +## 3. Prepare a local Supabase environment + +If you don't already have one, follow the [local development getting started guide](/docs/guides/local-development/cli/getting-started), then link your project: + +```bash +supabase link +``` + +--- + +## 4. Pull down your production migration history + +```bash +supabase migration fetch +``` + +This retrieves the migration files currently recorded against your `main` branch, so you can compare them against the actual live schema and locate the one causing the failure. + +--- + +## 5. Repair the culprit migration + +1. Locate the migration file containing the SQL statement that matches the error you found in step 2, and correct it so it reflects the real state of your production schema. +2. After correcting the file, mark it as applied using its timestamp: + + ```bash + supabase migration repair --status applied + ``` + +3. Verify the repair took effect by checking [production migrations](/dashboard/project/_/database/migrations) in the Dashboard. + +--- + +## 6. Re-test branch creation + +After repairing the migration history, either create a new branch or **rebase** the existing affected branch. + +![The rebase branch button in the Dashboard branch details view](/docs/img/troubleshooting/rebase-image.png) + +Check the branch's workflow logs again, as described in step 1, to confirm migrations now complete successfully. + + + +Branch creation can fail more than once because more than one migration is out of sync. Each failure surfaces the next problem statement, so repeat steps 2 through 6 to work through them one at a time. + + + +--- + +## Additional tips + +If issues persist after repairing migration history, such as schema drift or repeated mismatches, review the [branching troubleshooting documentation](/docs/guides/deployment/branching/troubleshooting#migration-issues) and consider further manual repair with [`supabase migration repair`](/docs/reference/cli/supabase-migration-repair). + +If your migration history has drifted too far out of sync for repairing individual migrations to be practical, consider creating a single baseline migration that encapsulates your production project's current schema instead. The [new branch doesn't copy database troubleshooting guide](/docs/guides/troubleshooting/new-branch-doesnt-copy-database) walks through the commands for setting this up. diff --git a/apps/docs/public/img/troubleshooting/migrations-failed-status.png b/apps/docs/public/img/troubleshooting/migrations-failed-status.png new file mode 100644 index 0000000000000000000000000000000000000000..0b4a86184b47c042538384d5c9be0bba17602f53 GIT binary patch literal 51327 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 r1;c(ZJ|91k>bX9sVPyzDnefW+BA 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 literal 0 HcmV?d00001 diff --git a/apps/docs/public/img/troubleshooting/postgres-logs-migration-failed.png b/apps/docs/public/img/troubleshooting/postgres-logs-migration-failed.png new file mode 100644 index 0000000000000000000000000000000000000000..d2e8c7b44ab1338073f98e6f0596d39cb97c1c8f GIT binary patch literal 339443 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 z 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 literal 0 HcmV?d00001 diff --git a/apps/docs/public/img/troubleshooting/rebase-image.png b/apps/docs/public/img/troubleshooting/rebase-image.png new file mode 100644 index 0000000000000000000000000000000000000000..f164eb83486682371f6a599764d0477d2d56933b GIT binary patch literal 69653 zcmeFXWmsI>vNj5YKsPQy8+VsLa7*J5EO>%jAh=ub#)4}|a0n9Ig9Wz$!Gi~PNpNZG zPS!qqpYz;rEzbRMf7~Cp`)PVIdk(8nRio;CD_m7s788vW4FLfGQ(jK$B?1Bp9s&ZQ z3kU_c)03UMiGYCd!b(z7RbEn(O4Z5U!pg=R0YNT2NgGv1{X1dC>zCBXASnrjEhU^d zJP8F5`$;qv3pE%=Arkz&JDRO2(3%LhWQ#?5^d~`VcSs{2VfO+NI!k|JJ%`)65-4k+ z<>=dGOT+P^-_W)5P=oWIbVUD!?hgviYDx%4beC1rMt+lPYflKbNvIGpb++65Ib#(C zM@N?tl9$i^te-yfXPO(pQYiI1yPL|PfAak?0@Wx^0s4BNNSGfIf<1wp`6U8QUMzoR z5~t=$EzWLVRuIkyp%j-ehlK18nv5&f(tT_CJ?mkA} z=^r@}bUN#F7G=<*himp=9G@}0kx9WTmb})AryzM;$%nwiL5MZW%FUyQ8=qArYm4l} zF-T$r6_L+?^g>olgRlL$!Z4|aV%KCsuxFl_hXp0_ars#W3uF>uS5kC6qwzGFkNv?t z6FI%?S#I7}pGJMlY{<72^zyEnhA|*_thc6Gs+rnnu#$^a3~a*Eh4^@-OD^mgRdnKJ zS1{(xXF>}{+E81w_d4cmgg66I@kV}0Vpy5NA!$~wn#IvkD|fGYjlH|m`KdFn{0Smz7IPKh z6qM9V(sg(gSifBP_|n0#=;RR3%Gag2U#0nJDkW*@5$Ymp2O<$N0--)1 zwmZS@MHy6Ws83_TQf)(6Ape!onj zdt$6;LdES*48@?CT|ueG{v90JSxi|nBmg-lj$VxrUFObCIPiB!8j-FS)YqefteYcm z1;U?8UdrDIiPsZMxOCq*+81IaIWpKGkU0N4vsT*k-ElaG6-mMSx zrBkQV;=i$2uNF9np*A_BL+W*8d&BsKA0hFM^5^Eh=HQawW8*r%<>YG=|MSs+fPlMr)JMyhTBNK zjiZc{>~maW8w;P8`b{g^m)Yn2MDnK^`2?sI+M8>W7!;CyxTV31pB_$_)4kF86j=Vtb@YPNobU(Bd8Vi%!vI!(6Fbm!eEbF zxr;;q-QAy609mE&@x_aGh%Ff9UDgLO*L1!ltug1znPA>P>h_E!`6XNi{HNe*5IxMP zL%HL52lEAoE4~4KxD>^9rLB{7UVW z=c|F5otmMyqCXj|UR$BQMX!yh{c4>#;@j6oyn(?X*{0Jm-7e6*HA%grvwPrD<=XFZ zw&k*Qvi)|qaf@MRXtH!nv}CTkD@E%C1(jGn1V;TFB zjLZzVat-_P14Ak!6FMq3iS%Tihj}S&`ZA9jv z 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 F{{yK!HD3S# literal 0 HcmV?d00001 From 08867f94ff0187c3abbe00b1539ef4020572e143 Mon Sep 17 00:00:00 2001 From: Nik Richers Date: Wed, 5 Aug 2026 10:57:09 -0700 Subject: [PATCH 37/83] docs: lead self-hosting overview with what/why/CTA, restructure secondary content (#48415) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Docs restructure of the self-hosting overview: short fit intro, Get started / community listings above the fold, parallel h2 sections for how self-hosting differs (including local development), responsibilities, and telemetry, plus a streamlined support listing with better card content. Closes DOCS-1251. ## What is the current behavior? - Linear item: Explore two PR approaches for the self-hosting page - The self-hosting overview page (`/guides/self-hosting`) is the top search hit for "supabase self-hosting," but reads as a wall of text: three full prose/bullet sections (differs / responsibilities / telemetry) come before the getting-started CTA, which is buried as one small card partway down the page. ## What is the new behavior? - Short fit intro; `self-hosting-get-started` and `self-hosting-community` listings sit directly under the intro. - Top-level h2s for how self-hosting differs, responsibilities, telemetry, and support (no "More about self-hosting" wrapper). - Under differs: rewritten single-project + platform-gap copy, plus `### Not the same as local development` (CLI stack is not a production self-host; points to Docker / community options). - Telemetry clarifies CLI local-dev telemetry vs Docker Compose (no phone-home). - Merged support into a single `self-hosting-support` listing; Enterprise subsection unchanged. - Minor a11y: `aria-hidden` on GlassPanel decorative icon background. ## Additional context - Worktree: `~/GitHub/supabase/supabase-worktrees/nikrichers/docs-1251-self-hosting-inform` - Review: removed the "More about self-hosting" grouping after feedback that it undersold differs / responsibilities. - Companion prototype PR 48416 is closed; this branch is the direction under review. - Verification: | Check | Result | | ----------------------------------------------- | ------------------------------------------------------------------ | | `pnpm lint:mdx content/guides/self-hosting.mdx` | Pass β€” no errors/warnings on this file | | Vercel docs preview | Pass β€” full-page after screenshot captured from the preview deploy | ### Proof: intro and get-started above the fold; parallel h2s for differs, responsibilities, and telemetry **Verified:** `pnpm lint:mdx content/guides/self-hosting.mdx` (pass) Β· Vercel docs preview (pass) ### Before & After | [Before (production)](https://supabase.com/docs/guides/self-hosting) | [After (PR preview)](https://docs-git-nikrichers-docs-1251-self-hosting-inform-supabase.vercel.app/docs/guides/self-hosting) | | ------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | | ![Before](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr48415/self-hosting-before-23d8ce92.png) | ![After](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr48415/self-hosting-after-96d27909.png) | ### Test plan - [ ] Visit the preview link and confirm the page opens with intro above the Get started listings - [ ] Confirm parallel h2s for differs / responsibilities / telemetry / support (no "More about self-hosting") - [ ] Confirm "Not the same as local development" distinguishes the CLI stack from self-hosting - [ ] Confirm Support and community is one card grid - [ ] Check mobile width β€” layout should still be usable - [ ] Confirm `/guides/self-hosting/docker` link still works ## Summary by CodeRabbit - **Documentation** - Reorganized the self-hosting guide with clearer getting-started resources and community links. - Added dedicated guidance for local development, managed Supabase, telemetry, and self-hosting responsibilities. - Consolidated support resources into one section covering discussions, issues, chat, Reddit, and sharing experiences. - **Accessibility** - Marked decorative icon backgrounds as hidden from assistive technologies. --------- Co-authored-by: Nik Richers Co-authored-by: Claude --- .../ContentListings.client.tsx | 7 +++- apps/docs/content/guides/self-hosting.mdx | 27 +++++++------- apps/docs/data/content-listings/index.ts | 8 +--- .../content-listings/self-hosting.data.ts | 37 +++++-------------- packages/ui-patterns/src/GlassPanel/index.tsx | 1 + 5 files changed, 31 insertions(+), 49 deletions(-) diff --git a/apps/docs/components/ContentListings/ContentListings.client.tsx b/apps/docs/components/ContentListings/ContentListings.client.tsx index 548bde14d50..2e699cbd2d6 100644 --- a/apps/docs/components/ContentListings/ContentListings.client.tsx +++ b/apps/docs/components/ContentListings/ContentListings.client.tsx @@ -10,6 +10,7 @@ import { import { useSendTelemetryEvent } from '~/lib/telemetry' import Link from 'next/link' import { useCallback, useMemo } from 'react' +import ReactMarkdown from 'react-markdown' import { Badge } from 'ui' import { GlassPanel } from 'ui-patterns/GlassPanel' import { Heading } from 'ui/src/components/CustomHTMLElements' @@ -66,7 +67,11 @@ function ContentListingsGroup({ group }: { group: ContentListingGroup }) {
    - {group.description &&

    {group.description}

    } + {group.description && ( +
    + {group.description} +
    + )}
      {items.map((item) => { const external = isExternalContentListingHref(item.href) diff --git a/apps/docs/content/guides/self-hosting.mdx b/apps/docs/content/guides/self-hosting.mdx index 9345b7b846f..2c97bc044a3 100644 --- a/apps/docs/content/guides/self-hosting.mdx +++ b/apps/docs/content/guides/self-hosting.mdx @@ -7,14 +7,21 @@ hideToc: true Self-hosting is a good fit if you need full control over your data, have compliance requirements that prevent you from using managed services, or want to run Supabase in an isolated environment. + + + + ## How self-hosted Supabase differs -Self-hosted Supabase is different from: +Self-hosted Supabase runs as a single project which means that Studio doesn't support multiple organizations or projects. Most settings are configured through [environment variables](https://github.com/supabase/supabase/blob/master/docker/.env.example). -- **Supabase CLI** (local development), which is intended for development and testing only. -- **Managed Supabase** platform, which is fully hosted and operated by Supabase. +Unlike the managed platform, which is fully hosted and operated by Supabase, branching, advanced metrics beyond logs, managed backups and PITR, analytics and vector buckets, ETL, and the platform management API are **unavailable**. -Self-hosted Supabase mimics a single project. Studio doesn't support multiple organizations or projects. Platform-only [features](/features) such as branching, advanced metrics beyond logs, managed backups and PITR, analytics and vector buckets, ETL, and the platform management API are **unavailable** in self-hosted configuration. Most settings are configured through [environment variables](https://github.com/supabase/supabase/blob/master/docker/.env.example). +### Not the same as local development + +[Supabase CLI](/docs/guides/local-development/cli/getting-started) runs a local stack for development and testing. That stack is not a self-hosted deployment: it is not hardened for production and must not be exposed to external traffic. + +To self-host, use [Docker](/docs/guides/self-hosting/docker) or one of the community deployment options. ## Your responsibilities when self-hosting @@ -32,21 +39,13 @@ When you self-host, **you are responsible for**: Self-hosted Supabase (run via Docker Compose) **does not phone home or collect any telemetry**. -The **Supabase CLI** is a [separate tool](/docs/guides/local-development/cli/getting-started) and collects usage telemetry to help improve the developer experience. See [CLI telemetry](/docs/guides/local-development/cli/getting-started#telemetry) for opt-out methods. - - - - +The **Supabase CLI**, a separate tool also used for [local development](/docs/guides/local-development/cli/getting-started), collects usage telemetry to help improve the developer experience. See [CLI telemetry](/docs/guides/local-development/cli/getting-started#telemetry) for opt-out methods. ## Support and community Self-hosted Supabase is community-supported. - - - - - + ### Enterprise self-hosting diff --git a/apps/docs/data/content-listings/index.ts b/apps/docs/data/content-listings/index.ts index ef18cdc48ae..cd9935a9e6b 100644 --- a/apps/docs/data/content-listings/index.ts +++ b/apps/docs/data/content-listings/index.ts @@ -23,10 +23,8 @@ import { realtimeExamples, realtimeGetStarted, realtimeResources } from './realt import { resourcesMigrate, resourcesOverview, resourcesPostgres } from './resources.data' import { selfHostingCommunity, - selfHostingGetHelp, selfHostingGetStarted, - selfHostingResolveIssues, - selfHostingShareExperience, + selfHostingSupport, } from './self-hosting.data' import { storageExamples, storageGetStarted, storageResources } from './storage.data' import { telemetryDebugging, telemetryMonitoring } from './telemetry.data' @@ -59,9 +57,7 @@ const ALL_GROUPS: readonly ContentListingGroup[] = [ resourcesPostgres, selfHostingGetStarted, selfHostingCommunity, - selfHostingResolveIssues, - selfHostingGetHelp, - selfHostingShareExperience, + selfHostingSupport, storageGetStarted, storageExamples, storageResources, diff --git a/apps/docs/data/content-listings/self-hosting.data.ts b/apps/docs/data/content-listings/self-hosting.data.ts index c83ef00c456..0150b3e6519 100644 --- a/apps/docs/data/content-listings/self-hosting.data.ts +++ b/apps/docs/data/content-listings/self-hosting.data.ts @@ -25,7 +25,7 @@ export const selfHostingCommunity: ContentListingGroup = { type: 'grid', columns: 2, description: - "There are several other options to deploy Supabase. If you're interested in helping these projects, visit our Community page.", + "There are several other options to deploy Supabase. If you're interested in helping these projects, visit our [Community page](https://supabase.com/contribute).", items: [ { title: 'Kubernetes', @@ -44,9 +44,8 @@ export const selfHostingCommunity: ContentListingGroup = { ], } -export const selfHostingResolveIssues: ContentListingGroup = { - id: 'self-hosting-resolve-issues', - description: 'For resolving common issues:', +export const selfHostingSupport: ContentListingGroup = { + id: 'self-hosting-support', type: 'grid', columns: 2, items: [ @@ -54,51 +53,33 @@ export const selfHostingResolveIssues: ContentListingGroup = { title: 'GitHub Discussions', href: 'https://github.com/orgs/supabase/discussions?discussions_q=is%3Aopen+label%3Aself-hosted', icon: '/docs/img/icons/github-icon', - description: 'Questions, feature requests, and workarounds', + description: 'Ask questions, resolve common issues, and make feature requests', }, { title: 'GitHub Issues', href: 'https://github.com/supabase/supabase/issues?q=is%3Aissue%20state%3Aopen%20label%3Aself-hosted', icon: '/docs/img/icons/github-icon', - description: 'Known issues', + description: 'Find out about known issues and workarounds', }, - ], -} - -export const selfHostingGetHelp: ContentListingGroup = { - id: 'self-hosting-get-help', - description: 'Get help and connect with other users:', - type: 'grid', - columns: 2, - items: [ { title: 'Discord', href: 'https://discord.supabase.com', icon: '/docs/img/icons/discord-icon', hasLightIcon: false, - description: 'Real-time chat and community support', + description: 'Connect with other users and get help', }, { title: 'Reddit', href: 'https://www.reddit.com/r/Supabase/', icon: '/docs/img/icons/reddit-icon', hasLightIcon: false, - description: 'Official Supabase subreddit', + description: 'Join the official Supabase subreddit', }, - ], -} - -export const selfHostingShareExperience: ContentListingGroup = { - id: 'self-hosting-share-experience', - description: 'Share your self-hosting experience:', - type: 'grid', - columns: 2, - items: [ { - title: 'GitHub Discussions', + title: 'Share your experience', href: 'https://github.com/orgs/supabase/discussions/39820', icon: '/docs/img/icons/github-icon', - description: "Self-hosting: What's working (and what's not)?", + description: 'Share your self-hosting experience', }, ], } diff --git a/packages/ui-patterns/src/GlassPanel/index.tsx b/packages/ui-patterns/src/GlassPanel/index.tsx index 430a8d48bb4..75251a6bdcd 100644 --- a/packages/ui-patterns/src/GlassPanel/index.tsx +++ b/packages/ui-patterns/src/GlassPanel/index.tsx @@ -33,6 +33,7 @@ const IconBackground = ({ 'shrink-0', showIconBg ? 'bg-surface-75 border w-8 h-8 flex items-center justify-center rounded-sm' : '' )} + aria-hidden="true" > {children}
    From 5049f3eb816240ae776ced0068e28d29a39d6772 Mon Sep 17 00:00:00 2001 From: Matt Rossman <22670878+mattrossman@users.noreply.github.com> Date: Wed, 5 Aug 2026 14:47:46 -0400 Subject: [PATCH 38/83] docs: supabase evals note in AI tools page (#48663) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Following announcement https://supabase.com/blog/introducing-supabase-evals Adds an admonition to the [AI Tools](https://supabase.com/docs/guides/ai-tools) overview calling out the recently launched [Supabase Evals](https://supabase.com/blog/introducing-supabase-evals) project to demonstrate performance of (some of) the tools shown. Preview: https://docs-git-mattrossman-ai-969-link-to-evals-from-47d719-supabase.vercel.app/docs/guides/ai-tools CleanShot 2026-08-03 at 15 13
06@2x If preferred, we can move it below the fold, I just figure it's good for visibility on the recent launch and it helps sell the "why" for using these tools. Closes AI-969 ## Summary by CodeRabbit ## Summary by CodeRabbit * **Documentation** * Added a link and note about Supabase Evals, an open-source benchmark for AI coding agents. * **Chores** * Updated spelling checks to recognize β€œeval” in any capitalization. --- apps/docs/content/guides/ai-tools.mdx | 6 ++++++ supa-mdx-lint/Rule003Spelling.toml | 1 + 2 files changed, 7 insertions(+) diff --git a/apps/docs/content/guides/ai-tools.mdx b/apps/docs/content/guides/ai-tools.mdx index 94d071ad94b..52336c51ee1 100644 --- a/apps/docs/content/guides/ai-tools.mdx +++ b/apps/docs/content/guides/ai-tools.mdx @@ -6,6 +6,12 @@ subtitle: 'Connect your AI coding agent to Supabase.' Supabase provides everything you need to connect an AI coding agent to your project: a live connection to your database and platform (MCP), portable instructions your agent can reuse (Agent Skills), a one-step bundle of both (Plugin), and copy-paste prompts for tools that don't support any of the above. + + +See how these tools perform on real Supabase tasks in [Supabase Evals](/evals), our open-source benchmark for AI coding agents. + + + ## Pick your agent diff --git a/supa-mdx-lint/Rule003Spelling.toml b/supa-mdx-lint/Rule003Spelling.toml index 309dd055091..37ede15dfc7 100644 --- a/supa-mdx-lint/Rule003Spelling.toml +++ b/supa-mdx-lint/Rule003Spelling.toml @@ -235,6 +235,7 @@ allow_list = [ "EnterpriseDB", "Entra", "[Ee]nvoy", + "[Ee]vals", "ePHI", "Erlang", "ESZip", From b97ad08be568ac68a0aadbdbb7775173d858c7b1 Mon Sep 17 00:00:00 2001 From: "claude[bot]" <209825114+claude[bot]@users.noreply.github.com> Date: Wed, 5 Aug 2026 14:05:03 -0600 Subject: [PATCH 39/83] docs: updating Edge Functions error codes (#48767) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit _Requested by **Kalleby Santos** Β· [Slack thread](https://supabase.slack.com/archives/C02KMRX22NR/p1785949561216739?thread_ts=1785949561.216739&cid=C02KMRX22NR)_ ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Docs update. Adds two missing entries to the Edge Functions **Error codes** page (`apps/docs/content/guides/functions/error-codes.mdx`). Refs https://github.com/supabase/supabase/issues/47739 ## What is the current behavior? Neither `NOT_FOUND_FUNCTION_BLOB` nor `LOAD_FUNCTION_UNBUNDLING_ERROR` appears on the Error codes page. Someone who gets a 404 with `sb-error-code: NOT_FOUND_FUNCTION_BLOB` and searches the page finds nothing β€” and because the response body is the same `Requested function was not found` string that generic `NOT_FOUND` returns, the existing `NOT_FOUND` entry reads like it covers the case when it doesn't. ## What is the new behavior? Both codes are documented under `## Server Errors` with a cause and a remedy, in the page's existing `**Cause:**` / `**Solution:**` shape. - `NOT_FOUND_FUNCTION_BLOB` goes directly after `### NOT_FOUND`, since readers hitting it will scan for `NOT_FOUND` first. The cause explains the metadata/bundle version mismatch (concurrent or batched deploys double-incrementing the metadata version), notes that the message is identical to `NOT_FOUND` so the `sb-error-code` header is the distinguisher, and links the existing [Edge Function 404 error response](https://supabase.com/docs/guides/troubleshooting/edge-function-404-error-response) troubleshooting guide. Solution: redeploy with the latest CLI, avoid concurrent deploys of the same function, contact support to re-sync metadata if it persists. - `LOAD_FUNCTION_UNBUNDLING_ERROR` goes at the end, keeping the `LOAD_FUNCTION_*` cluster together. Cause: the bundle was fetched but decompression/parsing failed, which points at a corrupt or partially-written bundle. Solution: redeploy, contact support if it persists. ## Additional context Both codes are real and currently emitted by `supabase/edge-functions-ingress` (`main`): - `NOT_FOUND_FUNCTION_BLOB` β€” 404, declared at `src/main/errors.ts:29`, emitted at `src/main/cache.ts:180` - `LOAD_FUNCTION_UNBUNDLING_ERROR` β€” 503, declared at `src/main/errors.ts:27`, emitted at `src/main/cache.ts:226` Both were introduced by supabase/edge-functions-ingress#464. ### Notes for reviewer - **Scope.** The comment on #47739 asked only for `NOT_FOUND_FUNCTION_BLOB`. `LOAD_FUNCTION_UNBUNDLING_ERROR` is included because it shipped in the same ingress PR and is equally undocumented β€” happy to drop it if you'd rather keep this PR to exactly what was requested. - **No HTTP statuses in the copy.** The 404/503 above are deliberately left out of the page text, because the Error codes page states no HTTP status anywhere for any code. Adding them here would be a format departure. Easy to add if you'd prefer to start including them. - **Message mismatch, not fixed here.** `apps/docs/content/troubleshooting/edge-function-404-error-response.mdx` declares `message = "Function deployment bundle not found"` for `NOT_FOUND_FUNCTION_BLOB`, but the runtime actually emits `"Requested function was not found"` (`cache.ts:181`), which matches the response pasted in #47739. Left untouched in this PR β€” flagging it for a follow-up. ### Checks run - `prettier --check` on the changed file: passes. - `supa-mdx-lint` (v0.3.2) on the changed file: no new findings. The one remaining warning (`error-codes.mdx:11` β€” "Use 'view and resolve errors' instead of 'handle errors'") is pre-existing on `master` and untouched here. - The `{/* supa-mdx-lint-disable Rule001HeadingCase */}` pragma at line 8 sits above both new H3s, so the uppercase headings pass. --- _Generated by [Claude Code](https://claude.ai/code/session_01Qw5D2wdScBN5TWuA2FgnDW)_ --------- Co-authored-by: Claude --- .../content/guides/functions/error-codes.mdx | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/apps/docs/content/guides/functions/error-codes.mdx b/apps/docs/content/guides/functions/error-codes.mdx index cd9e1a4bb5d..e6117c0592f 100644 --- a/apps/docs/content/guides/functions/error-codes.mdx +++ b/apps/docs/content/guides/functions/error-codes.mdx @@ -264,6 +264,21 @@ These errors indicate issues with function loading, execution, or the underlying **Solution:** Try redeploying your function and wait a few minutes to make sure all regions have been updated. +### NOT_FOUND_FUNCTION_BLOB + +**Cause:** Your Edge Function metadata resolved, but its deployment bundle was missing from storage and could not be loaded (the metadata points at a different version than the stored bundle). This returns the same `Requested function was not found` message as `NOT_FOUND`, so the `sb-error-code` header is what distinguishes them β€” see [Edge Function 404 error response](/docs/guides/troubleshooting/edge-function-404-error-response). + +**Common causes:** + +- Two deploys of the same function running concurrently, double-incrementing the metadata version +- A batch deploy using `/deploy?bundleOnly=true` where the bulk metadata update failed + +**Solution:** + +- Redeploy your function with the latest version of the Supabase CLI +- Avoid running concurrent deploys of the same function, such as overlapping GitHub Actions runs +- If the problem persists, contact support so your function metadata can be re-synced + ### BOOT_ERROR **Cause:** Your Edge Function failed to start. @@ -302,3 +317,12 @@ These errors indicate issues with function loading, execution, or the underlying - Try redeploying your function - If the problem persists, contact support + +### LOAD_FUNCTION_UNBUNDLING_ERROR + +**Cause:** Your Edge Function deployment bundle was fetched, but could not be unbundled because decompressing or parsing it failed. This usually means the bundle is corrupt or was only partially written. + +**Solution:** + +- Try redeploying your function +- If the problem persists, contact support From 2736abf4c7ec694e83c615eb786fd1842b7fae85 Mon Sep 17 00:00:00 2001 From: shaziya <99940835+shaziyabandukia@users.noreply.github.com> Date: Wed, 5 Aug 2026 15:10:51 -0700 Subject: [PATCH 40/83] feat(www): update Partner Day at Select 2026 go page copy (#48771) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Content update (marketing copy) for the `www` app. ## What is the current behavior? `/go/select-2026/partner-day` has stale copy from an earlier draft of the event: a time-boxed agenda table and a "What you'll gain" feature grid that no longer match the approved messaging. ## What is the new behavior? Updated copy! :) ## Additional context - Verified the RSVP form's "Are you attending Select 2026?" select field opens, selects, and submits correctly, with no React hydration warnings on a clean `.next` build. - `pnpm --filter=www exec tsc --noEmit` and `prettier --check` both pass on the changed file. - `pnpm build --filter=www` fails locally, but this is pre-existing and unrelated to this change β€” it requires a `DOCS_GITHUB_APP_PRIVATE_KEY` secret (for the `docs` app's federated-content prebuild step) that isn't available in this local environment. Confirmed the identical failure occurs on `master` with no changes applied. --- .../_go/events/select-2026/partner-day.tsx | 142 +++++++----------- 1 file changed, 51 insertions(+), 91 deletions(-) diff --git a/apps/www/_go/events/select-2026/partner-day.tsx b/apps/www/_go/events/select-2026/partner-day.tsx index ca3375ca1aa..57a7c09589b 100644 --- a/apps/www/_go/events/select-2026/partner-day.tsx +++ b/apps/www/_go/events/select-2026/partner-day.tsx @@ -1,39 +1,34 @@ import type { GoPageInput } from 'marketing' -const agenda: { time: string; session: string; notes?: string }[] = [ +const whatToExpect: { title: string; description: string }[] = [ { - time: '2:00 - 2:30pm', - session: 'Arrival + light snacks', - notes: 'Casual opportunity to meet your fellow partners', + title: 'A founder welcome', + description: + 'Hear directly from Supabase leadership on the momentum behind the ecosystem and why this room matters.', }, { - time: '2:30 - 2:45pm', - session: 'Welcome', - notes: 'Ecosystem momentum and why partners are so critical to the success of Supabase.', + title: 'Where partnerships are headed', + description: + "A look ahead at the Supabase partner ecosystem and how we're investing in the people who build with us.", }, { - time: '2:45 - 3:15pm', - session: 'Business update + Roadmap preview', - notes: 'An early look at what\u2019s coming at Select', + title: 'A product sneak peek', + description: + "A preview of what we're building, with a focus on the things that matter most to partners.", }, { - time: '3:15 - 3:45pm', - session: 'Partner demos / \u201cwins\u201d', - notes: 'Demos by some partners on what they\u2019ve built / building.', + title: 'Open conversation', + description: "Time with the Supabase team to dig into what's on your mind.", }, { - time: '3:45 - 4:15pm', - session: 'Partner panel', - notes: 'Challenges and opportunities for partners in the Supabase ecosystem.', + title: 'Meet your fellow partners', + description: + 'The builders, founders, and partner teams shaping the ecosystem, all in one room. Some of your favorite tools will be standing next to you.', }, { - time: '4:15 - 4:30pm', - session: 'Ecosystem announcements roundup + partner awards', - notes: 'Celebrate the organizations that have delivered innovative results through the year.', - }, - { - time: '4:30pm and beyond', - session: 'Happy hour', + title: 'Happy hour', + description: + 'We close out the afternoon with food and drinks with the wider Supabase community.', }, ] @@ -43,13 +38,13 @@ const page: GoPageInput = { metadata: { title: 'Partner Day | Supabase Select 2026', description: - 'Join the Supabase partner community for an afternoon of business updates, partner demos, panels, and ecosystem announcements, followed by a happy hour.', + 'Join the Supabase team and your fellow partners for our first ever Partner Day: an intimate afternoon of real talk, sneak peeks, and good company on October 1, 2026, the day before Select.', }, hero: { title: 'Supabase Partner Day', - subtitle: 'Celebrating the Supabase ecosystem', + subtitle: 'Supabase Select 2026', description: - 'Spend the afternoon with the Supabase team and fellow partners. Hear a business update and roadmap preview, watch lightning demos of what partners are building, join a partner panel, and celebrate the latest ecosystem announcements and partner awards -- capped off with a happy hour.', + "You're helping us build this ecosystem, so come celebrate it with us. Join the Supabase team and your fellow partners for our first ever Partner Day: an intimate afternoon of real talk, sneak peeks, and good company the day before Select.", ctas: [ { label: 'Reserve your spot', @@ -68,82 +63,47 @@ const page: GoPageInput = {

    October 1, 2026

    Location

    San Francisco, CA

    -

    Schedule

    -

    2:00 PM β€” Arrival and light snacks

    -

    4:30 PM β€” Happy hour

    -
    - ), - }, - { - type: 'single-column', - title: 'Agenda', - children: ( -
    - - - - - - - - - - {agenda.map((item, index) => ( - 0 ? 'border-t border-muted' : undefined}> - - - - - ))} - -
    TimeSessionNotes
    - {item.time} - {item.session}{item.notes ?? ''}
    +

    + venue details will be shared soon +

    +

    Time

    +

    Doors open at 2:30 PM

    +

    Happy hour from 4:30 PM

    ), }, { type: 'feature-grid', - title: "What you'll gain", + title: 'What to expect', + description: + 'The plan is simple: a couple of hours with the people building the Supabase ecosystem.', columns: 3, - items: [ - { - title: 'Strengthen key relationships', - description: - "Join Supabase's inaugural Partner Summit and build deeper connections with the Supabase team and the wider partner community in one room.", - }, - { - title: 'Get recognized for your work', - description: - 'Top-performing partners are celebrated with Partner Awards, recognizing your impact across product integrations and go-to-market.', - }, - { - title: 'See where Supabase is heading', - description: - 'Get a business update and an early look at the product roadmap, giving you forward-looking context to plan your own bets.', - }, - { - title: 'Unlock new opportunities', - description: - 'Be first to hear about new partner programs, partner benefits, and product integration opportunities you can take advantage of.', - }, - { - title: 'Shape the partnership', - description: - "Meet the team in person to share what's working, surface points of friction, and give feedback that directly informs how we collaborate.", - }, - { - title: 'Grow your visibility', - description: - "Be part of the partner ecosystem spotlight and get featured across Supabase's social channels.", - }, - ], + items: whatToExpect, + }, + { + type: 'single-column', + title: "Why we're doing this", + children: ( +
    +

    + This is Supabase's inaugural Partner Day: the partnerships we're shipping together have + become a real part of what makes Supabase work, and we want to celebrate that IRL. We're + keeping it deliberately small, and since it's the first one, you can say you were there + when it all started. +

    +

    + And then there's Select. Partner + Day flows straight into Select the next day. If you haven't sorted your pass yet, your + Partner Day invite has you covered. +

    +
    + ), }, { type: 'form', id: 'rsvp', title: 'Reserve your spot', - description: "Space is limited. Let us know you're coming.", + description: "Space is limited and this one's invite-only, so let us know you're coming.", fields: [ { type: 'text', From 8d1ff7d38f1cb2207045634ad4e19858d8f53fd7 Mon Sep 17 00:00:00 2001 From: shaziya <99940835+shaziyabandukia@users.noreply.github.com> Date: Wed, 5 Aug 2026 15:54:18 -0700 Subject: [PATCH 41/83] feat(www): update Partner Day at Select 2026 go page copy (#48773) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Content update (marketing copy) for the `www` app. ## What is the current behavior? `/go/select-2026/partner-day` copy is one revision behind the latest draft (see #48771 for the prior round). ## What is the new behavior? Updates the page copy to match the newest Notion draft. ## Additional context - Verified locally in the browser against the Notion copy doc, word-for-word. - Verified the RSVP form's "Are you attending Select 2026?" select field opens, selects, and submits correctly. - `prettier --check` passes on the changed file. ## Summary by CodeRabbit - **Content Updates** - Refined Partner Day event messaging and β€œWhat to expect” descriptions. - Simplified the hero description by removing timing-specific wording. - Shortened inaugural-event messaging for clearer, more concise communication. --- apps/www/_go/events/select-2026/partner-day.tsx | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/apps/www/_go/events/select-2026/partner-day.tsx b/apps/www/_go/events/select-2026/partner-day.tsx index 57a7c09589b..7fb8a473f5a 100644 --- a/apps/www/_go/events/select-2026/partner-day.tsx +++ b/apps/www/_go/events/select-2026/partner-day.tsx @@ -18,12 +18,12 @@ const whatToExpect: { title: string; description: string }[] = [ }, { title: 'Open conversation', - description: "Time with the Supabase team to dig into what's on your mind.", + description: 'Bring your questions, ideas, and hot takes straight to the Supabase team.', }, { - title: 'Meet your fellow partners', + title: 'Meet the ecosystem', description: - 'The builders, founders, and partner teams shaping the ecosystem, all in one room. Some of your favorite tools will be standing next to you.', + "You'll be standing next to the builders, founders, and partner teams behind some of your favorite tools.", }, { title: 'Happy hour', @@ -44,7 +44,7 @@ const page: GoPageInput = { title: 'Supabase Partner Day', subtitle: 'Supabase Select 2026', description: - "You're helping us build this ecosystem, so come celebrate it with us. Join the Supabase team and your fellow partners for our first ever Partner Day: an intimate afternoon of real talk, sneak peeks, and good company the day before Select.", + "You're helping us build this ecosystem, so come celebrate it with us. Join the Supabase team and your fellow partners for our first ever Partner Day: an intimate afternoon of real talk, sneak peeks, and good company.", ctas: [ { label: 'Reserve your spot', @@ -87,9 +87,7 @@ const page: GoPageInput = {

    This is Supabase's inaugural Partner Day: the partnerships we're shipping together have - become a real part of what makes Supabase work, and we want to celebrate that IRL. We're - keeping it deliberately small, and since it's the first one, you can say you were there - when it all started. + become a real part of what makes Supabase work, and we want to celebrate that IRL.

    And then there's Select. Partner From 801ef21ce6f98bc1162a54d96944d6551acfb501 Mon Sep 17 00:00:00 2001 From: Matt Smiley Date: Wed, 5 Aug 2026 16:37:21 -0700 Subject: [PATCH 42/83] Add Matt Smiley to humans.txt (#48729) Add myself (Matt Smiley) to humans.txt as part of onboarding to Supabase. ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Docs update to add new joiner (me) ## What is the current behavior? NA ## What is the new behavior? Adds new team member ## Additional context Part of my onboarding process ## Summary by CodeRabbit * **Documentation** * Added Matt Smiley to the team member list in the project credits. --- apps/docs/public/humans.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/docs/public/humans.txt b/apps/docs/public/humans.txt index de32ff1b942..33dc63b2043 100644 --- a/apps/docs/public/humans.txt +++ b/apps/docs/public/humans.txt @@ -204,6 +204,7 @@ Matthew Hambright Matt Hudson Matt Johnston Matt Rossman +Matt Smiley Matthias Luft Mats Kindahl Mert Yerekapan From 6b1fc3d11d019e306532c1a827d3f4b3fc507f3a Mon Sep 17 00:00:00 2001 From: Danny White <3104761+dnywh@users.noreply.github.com> Date: Thu, 6 Aug 2026 10:49:50 +1000 Subject: [PATCH 43/83] recover failed Vercel deploy connections (#48474) ## What kind of change does this PR introduce? Bug fix. ## What is the current behavior? A failed Vercel connection after project creation is only logged, leaving the project-creation screen in its loading state. ## What is the new behavior? The flow preserves the created project and shows the connection error with retry and open-project actions in the standard project-creation footer. Project-creation failures remain ordinary inline form errors. Connection failures are owned by this flow without a duplicate toast or a no-op error handler. | Before | After | | --- | --- | | ![Create Vercel Project Supabase](https://github.com/user-attachments/assets/18dfb6d1-614a-4298-bf28-8399d86c7bca) | Create Vercel Project Supabase | ## To test ### Before on master 1. Switch to `master`. 2. With local Studio running and while signed in, open an organisation you can access. Copy its slug from `http://localhost:8082/org/`. 3. Open `apps/studio/components/interfaces/ProjectCreation/ProjectCreationForm.tsx`. 4. Find `isSuccessNewProject={isSuccessNewProject}` in the `ProjectCreationFooter` props and temporarily change it to: ```tsx isSuccessNewProject={true} ``` 5. Replace `` in this URL with the slug from step 2, then open it: `http://localhost:8082/integrations/vercel//deploy-button/new-project`. 6. Confirm **Create new project** remains in its loading state and there is no error, retry action, or route to the created project. This represents the current stuck state. 7. Revert the temporary edit before switching branches. ### After on this branch 1. Switch to `dnywh/vercel-deploy-recovery`. 2. With local Studio running and while signed in, open an organisation you can access. Copy its slug from `http://localhost:8082/org/`. 3. Open `apps/studio/pages/integrations/vercel/[slug]/deploy-button/new-project.tsx`. 4. Find the conditional beginning with `newProjectRef === undefined` inside `InterstitialLayout`. 5. Replace that whole conditional with: ```tsx undefined} /> ``` 6. Replace `` in this URL with the slug from step 2, then open it: `http://localhost:8082/integrations/vercel//deploy-button/new-project`. 7. Confirm the admonition says **Unable to connect to Vercel** and **Your Supabase project was still created. Error: Connection request failed**. 8. Confirm **Open project** and **Retry connection** appear as compact, right-aligned footer buttons. The retry action is intentionally inert in this visual-only mock, and no project or Vercel connection is created. 9. Revert the temporary edit. ## Additional context Follows #48473. The consistency follow-up #48640 is stacked on this PR. ## Summary by CodeRabbit - **New Features** - Added inline error messages to project creation forms for integration, API, and validation failures. - Added clear Vercel connection states, including waiting, connecting, success, and error screens. - Added retry actions and links to open successfully created projects. - **Bug Fixes** - Improved error handling so Vercel connection issues remain visible in context instead of appearing only as notifications. - **Tests** - Added coverage for partial-success messaging, project links, and retry behavior. --------- Co-authored-by: Joshen Lim --- .../ProjectCreation/ProjectCreationForm.tsx | 37 +++- .../[slug]/deploy-button/new-project.tsx | 192 +++++++++++++----- .../vercel-deploy-button-new-project.test.tsx | 32 +++ 3 files changed, 211 insertions(+), 50 deletions(-) create mode 100644 apps/studio/tests/pages/vercel-deploy-button-new-project.test.tsx diff --git a/apps/studio/components/interfaces/ProjectCreation/ProjectCreationForm.tsx b/apps/studio/components/interfaces/ProjectCreation/ProjectCreationForm.tsx index 4aee33481c3..5e3ad93b6db 100644 --- a/apps/studio/components/interfaces/ProjectCreation/ProjectCreationForm.tsx +++ b/apps/studio/components/interfaces/ProjectCreation/ProjectCreationForm.tsx @@ -150,6 +150,7 @@ export const ProjectCreationForm = ({ const [allProjects, setAllProjects] = useState(undefined) const [isComputeCostsConfirmationModalVisible, setIsComputeCostsConfirmationModalVisible] = useState(false) + const [projectCreationError, setProjectCreationError] = useState() const form = useForm>({ resolver: zodResolver(FormSchema), @@ -327,6 +328,7 @@ export const ProjectCreationForm = ({ isSuccess: isSuccessNewProject, } = useProjectCreateMutation({ onSuccess: (res) => { + setProjectCreationError(undefined) track( 'project_creation_simple_version_submitted', { @@ -349,6 +351,11 @@ export const ProjectCreationForm = ({ if (surface === 'main') router.push(`/project/${res.ref}`) }, onError: (error) => { + if (isVercelIntegrationFlow) { + setProjectCreationError(`Failed to create new project: ${error.message}`) + trackFunnelError('project_creation', classifyApiError('project_creation', error), 'form') + return + } const toastId = toast.error(`Failed to create new project: ${error.message}`) trackFunnelError( 'project_creation', @@ -376,6 +383,7 @@ export const ProjectCreationForm = ({ const onSubmit = async (values: z.infer) => { if (!currentOrg) return console.error('Unable to retrieve current organization') + setProjectCreationError(undefined) const { cloudProvider, @@ -401,13 +409,27 @@ export const ProjectCreationForm = ({ const customPostgresVersion = highAvailability ? undefined : postgresVersion if (customPostgresVersion && !customPostgresVersion.match(/1[2-9]\..*/)) { - return toast.error( - `Invalid Postgres version, should start with a number between 12-19, a dot and additional characters, i.e. 15.2 or 15.2.0-3` - ) + const message = + 'Invalid Postgres version, should start with a number between 12-19, a dot and additional characters, i.e. 15.2 or 15.2.0-3' + if (isVercelIntegrationFlow) { + setProjectCreationError(message) + return + } + return toast.error(message) } if (useOrioleDb && !availableOrioleVersion) { - const toastId = toast.error('No available OrioleDB image found, only Postgres is available') + const message = 'No available OrioleDB image found, only Postgres is available' + if (isVercelIntegrationFlow) { + setProjectCreationError(message) + trackFunnelError( + 'project_creation', + { errorCategory: 'validation', errorReason: 'oriole_unavailable' }, + 'form' + ) + return + } + const toastId = toast.error(message) trackFunnelError( 'project_creation', { errorCategory: 'validation', errorReason: 'oriole_unavailable' }, @@ -754,6 +776,13 @@ export const ProjectCreationForm = ({ ) : null}

    )} + {projectCreationError && ( + +

    + {projectCreationError} +

    +
    + )} diff --git a/apps/studio/pages/integrations/vercel/[slug]/deploy-button/new-project.tsx b/apps/studio/pages/integrations/vercel/[slug]/deploy-button/new-project.tsx index 5092e50ec87..ba81df5aeec 100644 --- a/apps/studio/pages/integrations/vercel/[slug]/deploy-button/new-project.tsx +++ b/apps/studio/pages/integrations/vercel/[slug]/deploy-button/new-project.tsx @@ -1,7 +1,10 @@ import { useParams } from 'common' import Head from 'next/head' -import { useEffect, useState } from 'react' -import { toast } from 'sonner' +import Link from 'next/link' +import { useCallback, useEffect, useState } from 'react' +import { Button } from 'ui' +import { Admonition } from 'ui-patterns/Admonition' +import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader' import { isVercelUrl } from '@/components/interfaces/Integrations/Vercel/VercelIntegration.utils' import { @@ -14,7 +17,6 @@ import { useProjectSettingsV2Query } from '@/data/config/project-settings-v2-que import { useIntegrationsQuery } from '@/data/integrations/integrations-query' import { useIntegrationVercelConnectionsCreateMutation } from '@/data/integrations/integrations-vercel-connections-create-mutation' import { useVercelProjectsQuery } from '@/data/integrations/integrations-vercel-projects-query' -import { useOrganizationsQuery } from '@/data/organizations/organizations-query' import { withAuth } from '@/hooks/misc/withAuth' import { buildStudioPageTitle } from '@/lib/page-title' import { useIntegrationInstallationSnapshot } from '@/state/integration-installation' @@ -30,20 +32,26 @@ const VercelIntegration: NextPageWithLayout = () => { const snapshot = useIntegrationInstallationSnapshot() const [newProjectRef, setNewProjectRef] = useState() + const [connectionError, setConnectionError] = useState() + const [isConnecting, setIsConnecting] = useState(false) + const [isConnectionComplete, setIsConnectionComplete] = useState(false) const { data: integrationData } = useIntegrationsQuery() const organizationIntegration = integrationData?.find((x) => x.organization.slug === slug) - const { data: organizationData } = useOrganizationsQuery() - const organization = organizationData?.find((x) => x.slug === slug) - const { data: vercelProjects } = useVercelProjectsQuery( { organization_integration_id: organizationIntegration?.id }, { enabled: organizationIntegration !== undefined } ) // Wait for the new project to be created before creating the connection - const { data, isSuccess } = useProjectSettingsV2Query( + const { + data, + isSuccess, + isError: isProjectSettingsError, + error: projectSettingsError, + refetch: refetchProjectSettings, + } = useProjectSettingsV2Query( { projectRef: newProjectRef }, { enabled: newProjectRef !== undefined, @@ -55,55 +63,119 @@ const VercelIntegration: NextPageWithLayout = () => { } ) - const { mutateAsync: createConnections } = useIntegrationVercelConnectionsCreateMutation({ - onError(error) { - toast.error(`Failed to create connection: ${error.message}`) - }, - }) + const { mutateAsync: createConnections } = useIntegrationVercelConnectionsCreateMutation() - useEffect(() => { - if (!isSuccess) return + const connectProject = useCallback(async () => { + const isReady = (data?.service_api_keys ?? []).length > 0 - const onSuccessFunc = async () => { - const isReady = (data.service_api_keys ?? []).length > 0 + if (!isReady || !organizationIntegration || !foreignProjectId || !newProjectRef) { + return + } - if (!isReady || !organizationIntegration || !foreignProjectId || !newProjectRef) { - return - } + const projectDetails = vercelProjects?.find((x) => x.id === foreignProjectId) + setConnectionError(undefined) + setIsConnecting(true) - const projectDetails = vercelProjects?.find((x) => x.id === foreignProjectId) - - try { - await createConnections({ - organizationIntegrationId: organizationIntegration?.id, - connection: { - foreign_project_id: foreignProjectId, - supabase_project_ref: newProjectRef, - integration_id: '0', - metadata: { - ...projectDetails, - supabaseConfig: { - projectEnvVars: { - write: true, - }, + try { + await createConnections({ + organizationIntegrationId: organizationIntegration.id, + connection: { + foreign_project_id: foreignProjectId, + supabase_project_ref: newProjectRef, + integration_id: '0', + metadata: { + ...projectDetails, + supabaseConfig: { + projectEnvVars: { + write: true, }, }, }, - orgSlug: organization?.slug, - }) - } catch (error) { - console.error('An error occurred during createConnections:', error) - return - } - + }, + orgSlug: slug, + }) snapshot.setLoading(false) - + setIsConnectionComplete(true) if (next && isVercelUrl(next)) window.location.href = next + } catch (error) { + const message = error instanceof Error ? error.message : 'An unknown error occurred' + setConnectionError(message) + } finally { + setIsConnecting(false) + } + }, [ + createConnections, + data?.service_api_keys, + foreignProjectId, + newProjectRef, + next, + organizationIntegration, + snapshot, + slug, + vercelProjects, + ]) + + useEffect(() => { + if (isSuccess && !connectionError && !isConnecting && !isConnectionComplete) { + void connectProject() + } + }, [connectProject, connectionError, isConnecting, isConnectionComplete, isSuccess]) + + const renderContent = () => { + if (newProjectRef === undefined) { + return } - onSuccessFunc() - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [data, isSuccess]) + if (isProjectSettingsError) { + return ( + void refetchProjectSettings()} + /> + ) + } + + if (connectionError) { + return ( + void connectProject()} + /> + ) + } + + if (isConnectionComplete) { + return ( +
    +
    + + +
    +
    + ) + } + + return ( +
    +
    +

    + {isConnecting + ? 'Connecting your project to Vercel' + : 'Waiting for your project to be ready'} +

    + +
    +
    + ) + } return ( <> @@ -118,10 +190,38 @@ const VercelIntegration: NextPageWithLayout = () => { footer={} widthClassName="max-w-2xl" > - + {renderContent()} ) } +export function VercelConnectionError({ + projectRef, + message, + onRetry, +}: { + projectRef: string + message: string + onRetry: () => void +}) { + return ( +
    +
    + +
    +
    + + +
    +
    + ) +} + export default withAuth(VercelIntegration) diff --git a/apps/studio/tests/pages/vercel-deploy-button-new-project.test.tsx b/apps/studio/tests/pages/vercel-deploy-button-new-project.test.tsx new file mode 100644 index 00000000000..432df5dfcb7 --- /dev/null +++ b/apps/studio/tests/pages/vercel-deploy-button-new-project.test.tsx @@ -0,0 +1,32 @@ +import { screen } from '@testing-library/react' +import userEvent from '@testing-library/user-event' +import { expect, test, vi } from 'vitest' + +import { VercelConnectionError } from '@/pages/integrations/vercel/[slug]/deploy-button/new-project' +import { customRender } from '@/tests/lib/custom-render' + +test('shows a recoverable partial-success state without recreating the project', async () => { + const user = userEvent.setup() + const retry = vi.fn() + + customRender( + + ) + + const alert = screen.getByRole('alert') + expect(alert).toHaveTextContent('Unable to connect to Vercel') + expect(alert).toHaveTextContent( + 'Your Supabase project was still created. Error: Connection request failed' + ) + expect(screen.getByRole('link', { name: 'Open project' })).toHaveAttribute( + 'href', + '/project/project-ref' + ) + + await user.click(screen.getByRole('button', { name: 'Retry connection' })) + expect(retry).toHaveBeenCalledOnce() +}) From d61d3533f26c4436868947ac2561a9d79b1cd2ba Mon Sep 17 00:00:00 2001 From: Guilherme Souza Date: Wed, 5 Aug 2026 21:50:31 -0300 Subject: [PATCH 44/83] docs: fix broken Swift example in joins-and-nesting guide (#48775) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Docs fix. ## What is the current behavior? Fixes [SDK-958](https://linear.app/supabase/issue/SDK-958/docs-incomplete-documentation), reported via the docs feedback widget on [joins-and-nesting](https://supabase.com/docs/guides/database/joins-and-nesting). In the "Specifying the `ON` clause for joins with multiple foreign keys" section, the Swift example was broken relative to the other language tabs (JS, Dart, Kotlin, Python, C#): - The query string aliased the second embed as `scans: scan_id_end`, which isn't valid PostgREST embed syntax (should be `end_scan:scans!scan_id_end`). - The `Shift` struct only declared a single `scans: [Scan]` property with no `CodingKeys` entry for `start_scan` or `end_scan` β€” so it never actually decoded either aliased relation, which is why the reporter couldn't tell where `start_scan` was supposed to come from. ## What is the new behavior? - Query now aliases both relations consistently: `start_scan:scans!scan_id_start (...)` and `end_scan:scans!scan_id_end (...)`, matching the other language examples. - `Shift` struct now declares `startScan: Scan` and `endScan: Scan`, mapped via `CodingKeys` to `start_scan` and `end_scan`. ## Additional context Docs-only change to a code sample inside `apps/docs/content/guides/database/joins-and-nesting.mdx`. Verified with `prettier --check` (mdx lint tool failed locally due to an unrelated missing native module, `node-pty`). ## Summary by CodeRabbit * **Documentation** * Updated the Swift join example to represent separate start and end scan relationships. * Revised response field selections and coding keys to match the updated relationship names. --- apps/docs/content/guides/database/joins-and-nesting.mdx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/docs/content/guides/database/joins-and-nesting.mdx b/apps/docs/content/guides/database/joins-and-nesting.mdx index efd989ff246..ae7291efd88 100644 --- a/apps/docs/content/guides/database/joins-and-nesting.mdx +++ b/apps/docs/content/guides/database/joins-and-nesting.mdx @@ -920,7 +920,8 @@ struct Shift: Codable { let userId: Int let attendanceStatus: String? - let scans: [Scan] + let startScan: Scan + let endScan: Scan struct Scan: Codable { let id: Int @@ -938,6 +939,8 @@ struct Shift: Codable { case id case userId = "user_id" case attendanceStatus = "attendance_status" + case startScan = "start_scan" + case endScan = "end_scan" } } @@ -951,11 +954,11 @@ let shifts: [Shift] = try await supabase user_id, badge_scan_time ), - scans: scan_id_end ( + end_scan:scans!scan_id_end ( id, user_id, badge_scan_time - ) + ) """ ) .execute() From e0cc6806539cf4816c31ef53f0ed877adeb094d5 Mon Sep 17 00:00:00 2001 From: shaziya <99940835+shaziyabandukia@users.noreply.github.com> Date: Wed, 5 Aug 2026 18:08:56 -0700 Subject: [PATCH 45/83] feat(www): update Partner Day at Select 2026 go page copy (#48778) ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Content update (marketing copy) for the `www` app. ## What is the current behavior? `/go/select-2026/partner-day` copy is a couple of revisions behind the latest Notion draft (see #48771 and #48773 for prior rounds). ## What is the new behavior? Updates the page copy to match the newest draft. ## Additional context - Verified locally in the browser against the Notion copy doc, word-for-word. - `prettier --check` passes on the changed file. ## Summary by CodeRabbit * **Content Updates** * Clarified Partner Day event details, including the day-before-Select note. * Improved venue information messaging. * Updated the RSVP question to reference Select on October 2 and the Partner Day invitation. --- apps/www/_go/events/select-2026/partner-day.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/www/_go/events/select-2026/partner-day.tsx b/apps/www/_go/events/select-2026/partner-day.tsx index 7fb8a473f5a..89c27b8d4ee 100644 --- a/apps/www/_go/events/select-2026/partner-day.tsx +++ b/apps/www/_go/events/select-2026/partner-day.tsx @@ -61,10 +61,13 @@ const page: GoPageInput = {

    Date

    October 1, 2026

    +

    + The day before Supabase Select 2026 +

    Location

    San Francisco, CA

    - venue details will be shared soon + Venue details will be shared soon

    Time

    Doors open at 2:30 PM

    @@ -150,7 +153,8 @@ const page: GoPageInput = { { type: 'select', name: 'attending', - label: 'Are you attending Select 2026?', + label: + 'Are you attending Supabase Select on October 2? (your Partner Day invite covers it)', placeholder: 'Select an option', required: true, options: [ From ec24d69369af90bebb078f928b2ca17e347e11ec Mon Sep 17 00:00:00 2001 From: Saxon Fletcher Date: Thu, 6 Aug 2026 14:38:42 +1000 Subject: [PATCH 46/83] Browser compatibility for colours (#47801) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaces abs and from for foreground colours to potentially improve browser compatibility ## Summary by CodeRabbit * **Style** * Improved semantic color calculations for broader browser compatibility. * Refined foreground, muted, and tertiary text colors for more consistent theme rendering. * Improved surface overlay contrast across different tones. * Fine-tuned the light theme’s link color brightness for better visual balance. --------- Co-authored-by: Danny White <3104761+dnywh@users.noreply.github.com> --- packages/ui/build/css/source/semantic.css | 16 +++++++++++----- packages/ui/build/css/themes/light.css | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/ui/build/css/source/semantic.css b/packages/ui/build/css/source/semantic.css index 2e205a4c7cc..68e4e1c263e 100644 --- a/packages/ui/build/css/source/semantic.css +++ b/packages/ui/build/css/source/semantic.css @@ -81,7 +81,11 @@ * beneath (lightens in dark, darkens in light). Steps: muted (e1) β†’ accent * (e2) β†’ tertiary (e3). */ - --surface-overlay-unit: calc(var(--elevation-step) / abs(var(--tone-span))); + /* max(span, -span) is equivalent to abs(span), but works across the browser + versions supported by Tailwind v4. */ + --surface-overlay-unit: calc( + var(--elevation-step) / max(var(--tone-span), calc(var(--tone-span) * -1)) + ); --muted-alpha: calc(var(--surface-overlay-unit) * var(--elevation-1)); --accent-alpha: calc(var(--surface-overlay-unit) * var(--elevation-2)); --tertiary-alpha: calc(var(--surface-overlay-unit) * var(--elevation-3)); @@ -139,8 +143,9 @@ /* shadcn semantic pairs */ --background: oklch(var(--surface) calc(var(--chroma) * 0.5) var(--surface-hue)); + --foreground-chroma: calc(var(--chroma) * 0.55); --foreground: oklch( - calc(var(--surface) + var(--tone-span) * var(--contrast-text)) calc(var(--chroma) * 0.55) + calc(var(--surface) + var(--tone-span) * var(--contrast-text)) var(--foreground-chroma) var(--surface-hue) ); /* Inverse of --foreground: canvas-coloured text for use on inverted fills @@ -174,8 +179,8 @@ var(--tertiary-foreground-level) * 0.5 * var(--contrast-down) ); --tertiary-foreground: oklch( - from var(--foreground) calc(var(--surface) + var(--tone-span) * var(--tertiary-foreground-mix)) - c h + calc(var(--surface) + var(--tone-span) * var(--tertiary-foreground-mix)) + var(--foreground-chroma) var(--surface-hue) ); --muted: oklch(from var(--foreground) l c h / var(--muted-alpha)); --muted-foreground-mix: calc( @@ -183,7 +188,8 @@ var(--muted-foreground-level) * 0.5 * var(--contrast-down) ); --muted-foreground: oklch( - from var(--foreground) calc(var(--surface) + var(--tone-span) * var(--muted-foreground-mix)) c h + calc(var(--surface) + var(--tone-span) * var(--muted-foreground-mix)) var(--foreground-chroma) + var(--surface-hue) ); --accent: oklch(from var(--foreground) l c h / var(--accent-alpha)); --accent-foreground: var(--foreground); diff --git a/packages/ui/build/css/themes/light.css b/packages/ui/build/css/themes/light.css index 8cbccc0ffbf..8f8a7e42e71 100644 --- a/packages/ui/build/css/themes/light.css +++ b/packages/ui/build/css/themes/light.css @@ -38,7 +38,7 @@ --secondary-default: 247.8deg 100% 70%; --secondary-400: 248.3deg 54.5% 25.9%; --secondary-200: 248deg 53.6% 11%; - --brand-link: 153.4deg 86.5% 28.3%; + --brand-link: 153.4deg 86.5% 27.8%; --brand-default: 152.9deg 60% 52.9%; --brand-600: 156.5deg 86.5% 26.1%; --brand-500: 155.3deg 78.4% 40%; From a7671019a8f60b63dc59fdd49582c9268bd382a5 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Thu, 6 Aug 2026 12:11:35 +0700 Subject: [PATCH 47/83] Scaffold the explorer layout (#48740) ## Context Resolves FE-4074 Just adds scaffolding for the explorer UI - no data fetching yet. Initializes the page + side nav, based off Saxon's POC in `poc/explorer-prototype` image ## Summary by CodeRabbit ## New Features - Added a project Explorer page accessible from `/project/:ref/explorer`. - Added navigation for browsing notebooks and chats. - Added search fields, back navigation, animated transitions, and empty states for Explorer sections. - Added a conditional Explorer link to the SQL Editor menu when enabled. ## Documentation - Marked the Explorer route migration as complete in the migration checklist. --- apps/studio/TANSTACK_MIGRATION.md | 1 + .../interfaces/Explorer/ExplorerPage.tsx | 20 +++++ .../ExplorerLayout.constants.tsx | 88 +++++++++++++++++++ .../layouts/ExplorerLayout/ExplorerLayout.tsx | 48 ++++++++++ .../ExplorerLayout/ExplorerNavChats.tsx | 17 ++++ .../ExplorerLayout/ExplorerNavHome.tsx | 55 ++++++++++++ .../ExplorerLayout/ExplorerNavNotebooks.tsx | 22 +++++ .../layouts/Navigation/ProductMenuBar.tsx | 24 +++-- .../layouts/ProjectLayout/index.test.tsx | 2 +- .../layouts/ProjectLayout/index.tsx | 2 +- .../pages/project/[ref]/explorer/index.tsx | 16 ++++ apps/studio/routeTree.gen.ts | 21 +++++ apps/studio/routes/project/$ref/explorer.tsx | 16 ++++ 13 files changed, 325 insertions(+), 7 deletions(-) create mode 100644 apps/studio/components/interfaces/Explorer/ExplorerPage.tsx create mode 100644 apps/studio/components/layouts/ExplorerLayout/ExplorerLayout.constants.tsx create mode 100644 apps/studio/components/layouts/ExplorerLayout/ExplorerLayout.tsx create mode 100644 apps/studio/components/layouts/ExplorerLayout/ExplorerNavChats.tsx create mode 100644 apps/studio/components/layouts/ExplorerLayout/ExplorerNavHome.tsx create mode 100644 apps/studio/components/layouts/ExplorerLayout/ExplorerNavNotebooks.tsx create mode 100644 apps/studio/pages/project/[ref]/explorer/index.tsx create mode 100644 apps/studio/routes/project/$ref/explorer.tsx diff --git a/apps/studio/TANSTACK_MIGRATION.md b/apps/studio/TANSTACK_MIGRATION.md index a30d05471c9..536450f6635 100644 --- a/apps/studio/TANSTACK_MIGRATION.md +++ b/apps/studio/TANSTACK_MIGRATION.md @@ -156,6 +156,7 @@ These are the layout-only TanStack files. Most hold a single product layout comp - [x] A `routes/project/$ref/index.tsx` ← `pages/project/[ref]/index.tsx` (route wraps in `ProjectLayoutWithAuth` itself β€” see shell delta above) - [x] `routes/project/$ref/merge.tsx` ← `pages/project/[ref]/merge.tsx` (leaf wraps body in `ProjectLayoutWithAuth`; parent `project/$ref.tsx` shell provides DefaultLayout) +- [x] A `routes/project/$ref/explorer.tsx` ← `pages/project/[ref]/explorer/index.tsx` (new placeholder page; leaf wraps body in `ProjectLayoutWithAuth`; parent `project/$ref.tsx` shell provides DefaultLayout) ### Project shell β€” `/api/*` diff --git a/apps/studio/components/interfaces/Explorer/ExplorerPage.tsx b/apps/studio/components/interfaces/Explorer/ExplorerPage.tsx new file mode 100644 index 00000000000..afa62fcd98f --- /dev/null +++ b/apps/studio/components/interfaces/Explorer/ExplorerPage.tsx @@ -0,0 +1,20 @@ +import { Compass } from 'lucide-react' +import { EmptyStatePresentational } from 'ui-patterns/EmptyStatePresentational' +import { PageContainer } from 'ui-patterns/PageContainer' +import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' + +export const ExplorerPage = () => { + return ( + + + + + + + + ) +} diff --git a/apps/studio/components/layouts/ExplorerLayout/ExplorerLayout.constants.tsx b/apps/studio/components/layouts/ExplorerLayout/ExplorerLayout.constants.tsx new file mode 100644 index 00000000000..0a076fcaa79 --- /dev/null +++ b/apps/studio/components/layouts/ExplorerLayout/ExplorerLayout.constants.tsx @@ -0,0 +1,88 @@ +import { motion } from 'framer-motion' +import { ChevronLeft, MessageSquare, NotebookText } from 'lucide-react' +import { type ComponentType, type PropsWithChildren } from 'react' +import { Button, cn } from 'ui' +import { InnerSideBarFilters, InnerSideBarFilterSearchInput } from 'ui-patterns/InnerSideMenu' + +export type ExplorerResourceType = 'notebook' | 'chat' + +export const LEVEL_OFFSET = 8 +export const LEVEL_TRANSITION = { duration: 0.09, ease: 'easeOut' } as const + +export const EXPLORER_SECTIONS: Array<{ + type: ExplorerResourceType + label: string + icon: ComponentType<{ size?: number; className?: string }> + searchPlaceholder: string +}> = [ + { + type: 'notebook', + label: 'Notebooks', + icon: NotebookText, + searchPlaceholder: 'Search notebooks', + }, + { type: 'chat', label: 'Chats', icon: MessageSquare, searchPlaceholder: 'Search chats' }, +] + +export const rowClassName = (isActive: boolean) => + cn( + 'group relative flex h-7 w-full items-center gap-2 rounded-md pl-3 pr-2 text-sm', + isActive + ? 'bg-selection text-foreground' + : 'text-foreground-light hover:bg-surface-200 hover:text-foreground' + ) + +export const ExplorerNavResourceWrapper = ({ + type, + label, + className, + children, + search, + setSearch, + onBack, +}: PropsWithChildren<{ + type: ExplorerResourceType + label?: string + className?: string + search?: string + setSearch: (value: string) => void + onBack: () => void +}>) => { + const searchPlaceholder = EXPLORER_SECTIONS.find((x) => x.type === type)?.searchPlaceholder + + return ( + +
    +
    + {children} +
    + ) +} diff --git a/apps/studio/components/layouts/ExplorerLayout/ExplorerLayout.tsx b/apps/studio/components/layouts/ExplorerLayout/ExplorerLayout.tsx new file mode 100644 index 00000000000..d084a7aeb62 --- /dev/null +++ b/apps/studio/components/layouts/ExplorerLayout/ExplorerLayout.tsx @@ -0,0 +1,48 @@ +import { AnimatePresence } from 'framer-motion' +import { ComponentProps, ReactNode, useState } from 'react' + +import { ProjectLayoutWithAuth } from '../ProjectLayout' +import { type ExplorerResourceType } from './ExplorerLayout.constants' +import { ExplorerNavChats } from './ExplorerNavChats' +import { ExplorerNavHome } from './ExplorerNavHome' +import { ExplorerNavNotebooks } from './ExplorerNavNotebooks' + +export interface ExplorerLayoutProps extends ComponentProps { + children: ReactNode + title?: string +} + +export const ExplorerLayout = ({ browserTitle, children, title }: ExplorerLayoutProps) => { + const [section, setSection] = useState() + + // [Joshen] Temporary, to hook up with tabs store + const activeTabLabel = 'Active Tab Label' + + const mergedBrowserTitle = { + ...browserTitle, + section: title ?? browserTitle?.section, + entity: browserTitle?.entity ?? activeTabLabel, + } + + return ( + + + {section === undefined && } + {section === 'notebook' && ( + setSection(undefined)} /> + )} + {section === 'chat' && ( + setSection(undefined)} /> + )} + +
    + } + > + {children} + + ) +} diff --git a/apps/studio/components/layouts/ExplorerLayout/ExplorerNavChats.tsx b/apps/studio/components/layouts/ExplorerLayout/ExplorerNavChats.tsx new file mode 100644 index 00000000000..7bef8979324 --- /dev/null +++ b/apps/studio/components/layouts/ExplorerLayout/ExplorerNavChats.tsx @@ -0,0 +1,17 @@ +import { useState } from 'react' + +import { ExplorerNavResourceWrapper } from './ExplorerLayout.constants' + +export const ExplorerNavChats = ({ onBack }: { onBack: () => void }) => { + const [search, setSearch] = useState('') + + // [Joshen] Eventually will have data fetching for notebooks via useAiAssistantState + + return ( + +
    +

    No chats created yet

    +
    +
    + ) +} diff --git a/apps/studio/components/layouts/ExplorerLayout/ExplorerNavHome.tsx b/apps/studio/components/layouts/ExplorerLayout/ExplorerNavHome.tsx new file mode 100644 index 00000000000..da7ce2a25a3 --- /dev/null +++ b/apps/studio/components/layouts/ExplorerLayout/ExplorerNavHome.tsx @@ -0,0 +1,55 @@ +import { motion } from 'framer-motion' +import { ChevronRight } from 'lucide-react' + +import { + EXPLORER_SECTIONS, + ExplorerResourceType, + LEVEL_OFFSET, + LEVEL_TRANSITION, + rowClassName, +} from './ExplorerLayout.constants' + +export const ExplorerNavHome = ({ + onSelectSection, +}: { + onSelectSection: (section: ExplorerResourceType) => void +}) => { + return ( + + + +
    +

    + Recent +

    +

    Nothing edited yet

    +
    +
    + ) +} diff --git a/apps/studio/components/layouts/ExplorerLayout/ExplorerNavNotebooks.tsx b/apps/studio/components/layouts/ExplorerLayout/ExplorerNavNotebooks.tsx new file mode 100644 index 00000000000..d465190d848 --- /dev/null +++ b/apps/studio/components/layouts/ExplorerLayout/ExplorerNavNotebooks.tsx @@ -0,0 +1,22 @@ +import { useState } from 'react' + +import { ExplorerNavResourceWrapper } from './ExplorerLayout.constants' + +export const ExplorerNavNotebooks = ({ onBack }: { onBack: () => void }) => { + const [search, setSearch] = useState('') + + // [Joshen] Eventually will have data fetching for notebooks via RQ + + return ( + +
    +

    No notebooks created yet

    +
    +
    + ) +} diff --git a/apps/studio/components/layouts/Navigation/ProductMenuBar.tsx b/apps/studio/components/layouts/Navigation/ProductMenuBar.tsx index 668052b3978..f36c6d8c4d9 100644 --- a/apps/studio/components/layouts/Navigation/ProductMenuBar.tsx +++ b/apps/studio/components/layouts/Navigation/ProductMenuBar.tsx @@ -1,12 +1,23 @@ +import { useFlag, useParams } from 'common' +import Link from 'next/link' import { PropsWithChildren } from 'react' -import { cn } from 'ui' +import { Button, cn } from 'ui' interface ProductMenuBarProps { title: string className?: string } -const ProductMenuBar = ({ title, children, className }: PropsWithChildren) => { +export const ProductMenuBar = ({ + title, + children, + className, +}: PropsWithChildren) => { + // [Joshen] Temporary entry point into explorer + const { ref } = useParams() + const isExplorerEnabled = useFlag('explorer') + const showExplorerCTA = isExplorerEnabled && title === 'SQL Editor' + return (
    -
    +

    {title}

    + {showExplorerCTA && ( + + )}
    {children}
    ) } - -export default ProductMenuBar diff --git a/apps/studio/components/layouts/ProjectLayout/index.test.tsx b/apps/studio/components/layouts/ProjectLayout/index.test.tsx index bfd02e291fe..d7bd6257232 100644 --- a/apps/studio/components/layouts/ProjectLayout/index.test.tsx +++ b/apps/studio/components/layouts/ProjectLayout/index.test.tsx @@ -138,7 +138,7 @@ vi.mock('./PausedState/ProjectPausedState', () => ({ ProjectPausedState: () => n vi.mock('./PauseFailedState', () => ({ PauseFailedState: () => null })) vi.mock('./PausingState', () => ({ PausingState: () => null })) vi.mock('./ProductMenuBar', () => ({ - default: ({ children }: { children: ReactNode }) => <>{children}, + ProductMenuBar: ({ children }: { children: ReactNode }) => <>{children}, })) vi.mock('./ResizingState', () => ({ ResizingState: () => null })) vi.mock('./RestartingState', () => ({ default: () => null })) diff --git a/apps/studio/components/layouts/ProjectLayout/index.tsx b/apps/studio/components/layouts/ProjectLayout/index.tsx index 21e7aad58b3..d9d487962d3 100644 --- a/apps/studio/components/layouts/ProjectLayout/index.tsx +++ b/apps/studio/components/layouts/ProjectLayout/index.tsx @@ -27,7 +27,7 @@ import { import { useEditorType } from '../editors/EditorsLayout.hooks' import { useMainScrollContainer, useSetMainScrollContainer } from '../MainScrollContainerContext' import { useMobileSheet } from '../Navigation/NavigationBar/MobileSheetContext' -import ProductMenuBar from '../Navigation/ProductMenuBar' +import { ProductMenuBar } from '../Navigation/ProductMenuBar' import BuildingState from './BuildingState' import ConnectingState from './ConnectingState' import { getSectionKeyFromPathname, MobileMenuContent } from './LayoutHeader/MobileMenuContent' diff --git a/apps/studio/pages/project/[ref]/explorer/index.tsx b/apps/studio/pages/project/[ref]/explorer/index.tsx new file mode 100644 index 00000000000..82ae81843a3 --- /dev/null +++ b/apps/studio/pages/project/[ref]/explorer/index.tsx @@ -0,0 +1,16 @@ +import { ExplorerPage } from '@/components/interfaces/Explorer/ExplorerPage' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import { ExplorerLayout } from '@/components/layouts/ExplorerLayout/ExplorerLayout' +import type { NextPageWithLayout } from '@/types' + +const ProjectExplorerPage: NextPageWithLayout = () => { + return +} + +ProjectExplorerPage.getLayout = (page) => ( + + {page} + +) + +export default ProjectExplorerPage diff --git a/apps/studio/routeTree.gen.ts b/apps/studio/routeTree.gen.ts index 3e6b5c721d8..e7f21b42556 100644 --- a/apps/studio/routeTree.gen.ts +++ b/apps/studio/routeTree.gen.ts @@ -63,6 +63,7 @@ import { Route as ProjectRefMergeRouteImport } from './routes/project/$ref/merge import { Route as ProjectRefLogsRouteImport } from './routes/project/$ref/logs' import { Route as ProjectRefIntegrationsRouteImport } from './routes/project/$ref/integrations' import { Route as ProjectRefFunctionsRouteImport } from './routes/project/$ref/functions' +import { Route as ProjectRefExplorerRouteImport } from './routes/project/$ref/explorer' import { Route as ProjectRefEditorRouteImport } from './routes/project/$ref/editor' import { Route as ProjectRefDatabaseRouteImport } from './routes/project/$ref/database' import { Route as ProjectRefBranchesRouteImport } from './routes/project/$ref/branches' @@ -588,6 +589,11 @@ const ProjectRefFunctionsRoute = ProjectRefFunctionsRouteImport.update({ path: '/functions', getParentRoute: () => ProjectRefRoute, } as any) +const ProjectRefExplorerRoute = ProjectRefExplorerRouteImport.update({ + id: '/explorer', + path: '/explorer', + getParentRoute: () => ProjectRefRoute, +} as any) const ProjectRefEditorRoute = ProjectRefEditorRouteImport.update({ id: '/editor', path: '/editor', @@ -2085,6 +2091,7 @@ export interface FileRoutesByFullPath { '/project/$ref/branches': typeof ProjectRefBranchesRouteWithChildren '/project/$ref/database': typeof ProjectRefDatabaseRouteWithChildren '/project/$ref/editor': typeof ProjectRefEditorRouteWithChildren + '/project/$ref/explorer': typeof ProjectRefExplorerRoute '/project/$ref/functions': typeof ProjectRefFunctionsRouteWithChildren '/project/$ref/integrations': typeof ProjectRefIntegrationsRouteWithChildren '/project/$ref/logs': typeof ProjectRefLogsRouteWithChildren @@ -2387,6 +2394,7 @@ export interface FileRoutesByTo { '/project/$ref/advisors': typeof ProjectRefAdvisorsRouteWithChildren '/project/$ref/auth': typeof ProjectRefAuthRouteWithChildren '/project/$ref/database': typeof ProjectRefDatabaseRouteWithChildren + '/project/$ref/explorer': typeof ProjectRefExplorerRoute '/project/$ref/merge': typeof ProjectRefMergeRoute '/project/$ref/realtime': typeof ProjectRefRealtimeRouteWithChildren '/project/$ref/settings': typeof ProjectRefSettingsRouteWithChildren @@ -2688,6 +2696,7 @@ export interface FileRoutesById { '/project/$ref/branches': typeof ProjectRefBranchesRouteWithChildren '/project/$ref/database': typeof ProjectRefDatabaseRouteWithChildren '/project/$ref/editor': typeof ProjectRefEditorRouteWithChildren + '/project/$ref/explorer': typeof ProjectRefExplorerRoute '/project/$ref/functions': typeof ProjectRefFunctionsRouteWithChildren '/project/$ref/integrations': typeof ProjectRefIntegrationsRouteWithChildren '/project/$ref/logs': typeof ProjectRefLogsRouteWithChildren @@ -2996,6 +3005,7 @@ export interface FileRouteTypes { | '/project/$ref/branches' | '/project/$ref/database' | '/project/$ref/editor' + | '/project/$ref/explorer' | '/project/$ref/functions' | '/project/$ref/integrations' | '/project/$ref/logs' @@ -3298,6 +3308,7 @@ export interface FileRouteTypes { | '/project/$ref/advisors' | '/project/$ref/auth' | '/project/$ref/database' + | '/project/$ref/explorer' | '/project/$ref/merge' | '/project/$ref/realtime' | '/project/$ref/settings' @@ -3598,6 +3609,7 @@ export interface FileRouteTypes { | '/project/$ref/branches' | '/project/$ref/database' | '/project/$ref/editor' + | '/project/$ref/explorer' | '/project/$ref/functions' | '/project/$ref/integrations' | '/project/$ref/logs' @@ -4350,6 +4362,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ProjectRefFunctionsRouteImport parentRoute: typeof ProjectRefRoute } + '/project/$ref/explorer': { + id: '/project/$ref/explorer' + path: '/explorer' + fullPath: '/project/$ref/explorer' + preLoaderRoute: typeof ProjectRefExplorerRouteImport + parentRoute: typeof ProjectRefRoute + } '/project/$ref/editor': { id: '/project/$ref/editor' path: '/editor' @@ -6716,6 +6735,7 @@ interface ProjectRefRouteChildren { ProjectRefBranchesRoute: typeof ProjectRefBranchesRouteWithChildren ProjectRefDatabaseRoute: typeof ProjectRefDatabaseRouteWithChildren ProjectRefEditorRoute: typeof ProjectRefEditorRouteWithChildren + ProjectRefExplorerRoute: typeof ProjectRefExplorerRoute ProjectRefFunctionsRoute: typeof ProjectRefFunctionsRouteWithChildren ProjectRefIntegrationsRoute: typeof ProjectRefIntegrationsRouteWithChildren ProjectRefLogsRoute: typeof ProjectRefLogsRouteWithChildren @@ -6735,6 +6755,7 @@ const ProjectRefRouteChildren: ProjectRefRouteChildren = { ProjectRefBranchesRoute: ProjectRefBranchesRouteWithChildren, ProjectRefDatabaseRoute: ProjectRefDatabaseRouteWithChildren, ProjectRefEditorRoute: ProjectRefEditorRouteWithChildren, + ProjectRefExplorerRoute: ProjectRefExplorerRoute, ProjectRefFunctionsRoute: ProjectRefFunctionsRouteWithChildren, ProjectRefIntegrationsRoute: ProjectRefIntegrationsRouteWithChildren, ProjectRefLogsRoute: ProjectRefLogsRouteWithChildren, diff --git a/apps/studio/routes/project/$ref/explorer.tsx b/apps/studio/routes/project/$ref/explorer.tsx new file mode 100644 index 00000000000..a67032bc417 --- /dev/null +++ b/apps/studio/routes/project/$ref/explorer.tsx @@ -0,0 +1,16 @@ +import { createFileRoute } from '@tanstack/react-router' + +import { ExplorerPage } from '@/components/interfaces/Explorer/ExplorerPage' +import { ExplorerLayout } from '@/components/layouts/ExplorerLayout/ExplorerLayout' + +export const Route = createFileRoute('/project/$ref/explorer')({ + component: ProjectExplorerRoute, +}) + +function ProjectExplorerRoute() { + return ( + + + + ) +} From a18ee934cd5e243789bc26926996b0635666e29e Mon Sep 17 00:00:00 2001 From: Guilherme Souza Date: Thu, 6 Aug 2026 05:37:47 -0300 Subject: [PATCH 48/83] docs(auth): handle incoming deep link URLs on Swift (#48774) ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Docs update. ## What is the current behavior? The Swift tab in the [Native Mobile Deep Linking guide](https://supabase.com/docs/guides/auth/native-mobile-deep-linking?platform=swift) only covers registering a custom URL scheme (Info.plist config). Unlike the React Native, Flutter, and Kotlin tabs, it never shows the runtime code that actually consumes the incoming URL and completes the sign-in, so a Swift developer following the guide is left without a working implementation. Linear: [SDK-83](https://linear.app/supabase/issue/SDK-83/swift-improve-docs-on-how-to-handle-deep-link-url) ## What is the new behavior? Added a "Handling the incoming URL" section to the Swift tab with: - SwiftUI: `onOpenURL` calling `supabase.auth.handle(url)` - UIKit app delegate lifecycle: `application(_:didFinishLaunchingWithOptions:)` and `application(_:open:options:)` - UIKit scene delegate lifecycle: `scene(_:openURLContexts:)` - A note pointing to `session(from:)` for callers that need the returned `Session` or custom error handling `handle(url)` and its usage patterns match the current `supabase-swift` reference spec (`supabase_swift_v2.yml`) and source. Also added `UIKit` to the docs spelling allowlist (`supa-mdx-lint/Rule003Spelling.toml`) since it isn't in the dictionary. ## Additional context `pnpm lint:mdx` passes on the changed file. `pnpm build:guides-markdown` fails, but on a pre-existing unrelated issue (missing generated `database-advisors.json`), not on this change. ## Summary by CodeRabbit * **Documentation** * Added Swift guidance for handling authentication deep links in SwiftUI and UIKit apps. * Documented deep-link behavior during cold launches and scene-based URL delivery. * Clarified when to use `handle(_:)` and `session(from:)`, including error-handling considerations. * Updated the SwiftUI tutorial to pass authentication URLs directly to the recommended handler. --- .../auth/native-mobile-deep-linking.mdx | 64 +++++++++++++++++++ supa-mdx-lint/Rule003Spelling.toml | 1 + 2 files changed, 65 insertions(+) diff --git a/apps/docs/content/guides/auth/native-mobile-deep-linking.mdx b/apps/docs/content/guides/auth/native-mobile-deep-linking.mdx index e08ddeb5567..b21b0f44898 100644 --- a/apps/docs/content/guides/auth/native-mobile-deep-linking.mdx +++ b/apps/docs/content/guides/auth/native-mobile-deep-linking.mdx @@ -345,6 +345,70 @@ With Deep Linking, you can configure this redirect to open a specific page. This ``` +### Handling the incoming URL + + Once the OS opens your app via the redirect URL, pass that URL to `supabase.auth.handle(_:)` to complete the sign-in. + + #### SwiftUI + + Use the `onOpenURL` view modifier on your root view: + + ```swift + SomeView() + .onOpenURL { url in + supabase.auth.handle(url) + } + ``` + + #### UIKit: App delegate + + Forward the URL from `application(_:open:options:)`, and from `didFinishLaunchingWithOptions` if the app was launched cold via the link: + + ```swift + func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + if let url = launchOptions?[.url] as? URL { + supabase.auth.handle(url) + } + + return true + } + + func application( + _ app: UIApplication, + open url: URL, + options: [UIApplication.OpenURLOptionsKey: Any] + ) -> Bool { + supabase.auth.handle(url) + return true + } + ``` + + #### UIKit: Scene delegate + + Forward the URL from `SceneDelegate.swift`, handling both a cold launch (via `scene(_:willConnectTo:options:)`) and a URL received while the scene is already running (via `scene(_:openURLContexts:)`): + + ```swift + func scene( + _ scene: UIScene, + willConnectTo session: UISceneSession, + options connectionOptions: UIScene.ConnectionOptions + ) { + for context in connectionOptions.urlContexts { + supabase.auth.handle(context.url) + } + } + + func scene(_ scene: UIScene, openURLContexts URLContexts: Set) { + guard let url = URLContexts.first?.url else { return } + supabase.auth.handle(url) + } + ``` + + `handle(_:)` is a convenience wrapper that calls `session(from:)` and logs any error. See the [Auth API reference](/docs/reference/swift/auth-api) for details, or call `session(from:)` directly if you need the returned `Session` or want control over error handling. + <$Partial path="universal_links_apple.mdx" /> diff --git a/supa-mdx-lint/Rule003Spelling.toml b/supa-mdx-lint/Rule003Spelling.toml index 37ede15dfc7..5930697ca85 100644 --- a/supa-mdx-lint/Rule003Spelling.toml +++ b/supa-mdx-lint/Rule003Spelling.toml @@ -419,6 +419,7 @@ allow_list = [ "Transformers.js", "tsquery", "Twilio", + "UIKit", "Undici", "UnionPay", "Unsplash", From 4550ee18a40f34c04ee308d2438ecded026e9bd8 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Thu, 6 Aug 2026 15:39:26 +0700 Subject: [PATCH 49/83] Initialize tabs UI for explorer (#48789) ## Context Continued ground work for Explorer - just initializes the Tab UI for Explorer as such: - Plan is to continue using the existing tabs store + EditorTabs component - Purely visual, nothing functional image ## Summary by CodeRabbit * **New Features** * Added an Explorer workspace with animated navigation and tab controls. * Added a home tab and a new-tab menu for creating notebooks, with chat creation shown as unavailable. * Added support for notebook tabs in the editor and Explorer navigation. * Added flexible tab layouts with custom tab content, optional new-tab actions, and configurable collapse controls. * Improved editor navigation to recognize Explorer workspaces alongside existing table and SQL editors. --- .../layouts/ExplorerLayout/ExplorerLayout.tsx | 73 ++++++++++++++++++- apps/studio/components/layouts/Tabs/Tabs.tsx | 60 +++++++++------ .../layouts/editors/EditorsLayout.hooks.ts | 14 ++-- apps/studio/state/tabs.tsx | 6 +- 4 files changed, 121 insertions(+), 32 deletions(-) diff --git a/apps/studio/components/layouts/ExplorerLayout/ExplorerLayout.tsx b/apps/studio/components/layouts/ExplorerLayout/ExplorerLayout.tsx index d084a7aeb62..ec966dbe214 100644 --- a/apps/studio/components/layouts/ExplorerLayout/ExplorerLayout.tsx +++ b/apps/studio/components/layouts/ExplorerLayout/ExplorerLayout.tsx @@ -1,7 +1,13 @@ -import { AnimatePresence } from 'framer-motion' +import { useParams } from 'common' +import { AnimatePresence, motion } from 'framer-motion' +import { Home, MessageCirclePlus, NotebookText, Plus } from 'lucide-react' +import Link from 'next/link' +import { useRouter } from 'next/router' import { ComponentProps, ReactNode, useState } from 'react' +import { cn, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from 'ui' import { ProjectLayoutWithAuth } from '../ProjectLayout' +import { EditorTabs } from '../Tabs/Tabs' import { type ExplorerResourceType } from './ExplorerLayout.constants' import { ExplorerNavChats } from './ExplorerNavChats' import { ExplorerNavHome } from './ExplorerNavHome' @@ -42,7 +48,70 @@ export const ExplorerLayout = ({ browserTitle, children, title }: ExplorerLayout
    } > - {children} +
    +
    + } + newTabButton={} + /> +
    +
    {children}
    +
    ) } + +const TabClassName = + 'flex items-center justify-center min-w-(--header-height) min-h-(--header-height) hover:bg-surface-100 shrink-0 border-b' + +const HomeTabButton = () => { + const router = useRouter() + const { ref } = useParams() + const isActive = router.pathname.endsWith('/explorer') + + return ( + + + Open Explorer home + + ) +} + +const NewTabButton = () => { + return ( + + + {}} + initial={{ opacity: 0, scale: 0.8, x: -10 }} + animate={{ opacity: 1, scale: 1, x: 0 }} + transition={{ duration: 0.2 }} + > + + + + + + + New notebook + + + + New chat + + + + ) +} diff --git a/apps/studio/components/layouts/Tabs/Tabs.tsx b/apps/studio/components/layouts/Tabs/Tabs.tsx index 9ee549892b3..73b0dd1c43a 100644 --- a/apps/studio/components/layouts/Tabs/Tabs.tsx +++ b/apps/studio/components/layouts/Tabs/Tabs.tsx @@ -11,7 +11,7 @@ import { useParams } from 'common' import { AnimatePresence, motion } from 'framer-motion' import { Plus, X } from 'lucide-react' import { useRouter } from 'next/router' -import { useState } from 'react' +import { ReactNode, useState } from 'react' import { cn, ContextMenu, @@ -37,7 +37,19 @@ import { type TabCloseConfirmation, } from '@/state/tabs' -export const EditorTabs = () => { +interface EditorTabsProps { + customTabs?: ReactNode + newTabButton?: ReactNode + isCollapseButtonHidden?: boolean +} + +// [Joshen] Will be adjusting this component to support Explorer +// Will require quite a bit of cleaning up once Explorer supercedes SQL Editor +export const EditorTabs = ({ + customTabs, + newTabButton, + isCollapseButtonHidden, +}: EditorTabsProps) => { const { ref, id } = useParams() const router = useRouter() const { setLastVisitedSnippet, setLastVisitedTable } = useDashboardHistory() @@ -175,7 +187,10 @@ export const EditorTabs = () => { value={hasNewTab ? 'new' : (tabs.activeTab ?? undefined)} onValueChange={handleTabChange} > - + {!isCollapseButtonHidden && } + + {customTabs} + { )} - {!hasNewTab && ( - - router.push( - `/project/${router.query.ref}/${editor === 'table' ? 'editor' : 'sql'}/new?skip=true` - ) - } - initial={{ opacity: 0, scale: 0.8, x: -10 }} - animate={{ opacity: 1, scale: 1, x: 0 }} - transition={{ duration: 0.2 }} - > - - - )} + {!hasNewTab && + (newTabButton ?? ( + + router.push( + `/project/${router.query.ref}/${editor === 'table' ? 'editor' : 'sql'}/new?skip=true` + ) + } + initial={{ opacity: 0, scale: 0.8, x: -10 }} + animate={{ opacity: 1, scale: 1, x: 0 }} + transition={{ duration: 0.2 }} + > + + + ))}
    diff --git a/apps/studio/components/layouts/editors/EditorsLayout.hooks.ts b/apps/studio/components/layouts/editors/EditorsLayout.hooks.ts index 1495cc2b374..3b0f0cdb705 100644 --- a/apps/studio/components/layouts/editors/EditorsLayout.hooks.ts +++ b/apps/studio/components/layouts/editors/EditorsLayout.hooks.ts @@ -1,13 +1,15 @@ import { useParams } from 'common' import { usePathname } from 'next/navigation' -export function useEditorType(): 'table' | 'sql' | undefined { +export type EditorType = 'table' | 'sql' | 'explorer' | undefined + +export function useEditorType(): EditorType { const pathname = usePathname() const { ref } = useParams() - return pathname?.includes(`/project/${ref}/editor`) - ? 'table' - : pathname?.includes(`/project/${ref}/sql`) - ? 'sql' - : undefined + if (pathname?.includes(`/project/${ref}/editor`)) return 'table' + if (pathname?.includes(`/project/${ref}/sql`)) return 'sql' + if (pathname?.includes(`/project/${ref}/explorer`)) return 'explorer' + + return undefined } diff --git a/apps/studio/state/tabs.tsx b/apps/studio/state/tabs.tsx index 85c1dc9d56a..dc8ba7e00fe 100644 --- a/apps/studio/state/tabs.tsx +++ b/apps/studio/state/tabs.tsx @@ -13,11 +13,13 @@ import { proxy, subscribe, useSnapshot } from 'valtio' import { buildTableEditorUrl } from '@/components/grid/SupabaseGrid.utils' import type { SqlSnippetSource } from '@/components/interfaces/SQLEditor/querySource' -import { ENTITY_TYPE } from '@/data/entity-types/entity-type-constants' +import type { EditorType } from '@/components/layouts/editors/EditorsLayout.hooks' +import type { ENTITY_TYPE } from '@/data/entity-types/entity-type-constants' export const editorEntityTypes = { table: ['r', 'v', 'm', 'f', 'p'], sql: ['sql'], + explorer: ['notebook'], } export type TabType = ENTITY_TYPE | 'sql' @@ -469,7 +471,7 @@ export function createTabsState(projectRef: string) { }: { id: string router: NextRouter - editor?: 'sql' | 'table' + editor?: EditorType onClose?: (id: string) => void onClearDashboardHistory: () => void }) => { From 51c5b9f01325edd9183a39090f60b2403124259e Mon Sep 17 00:00:00 2001 From: Etienne Stalmans Date: Thu, 6 Aug 2026 10:52:37 +0200 Subject: [PATCH 50/83] chore: sync ssl enforcement and temporary access (#48743) ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Chore - fix-up ## What is the current behavior? Temporary access depends on ssl enforcement. The frontend doesn't enforce this very well or keep state between the two configs. ## What is the new behavior? This updates the two configs to be interdependent and updates to each one triggers a frontend state change on the other. ## Additional context Before: https://github.com/user-attachments/assets/8f040b62-587c-4268-9e27-27dd09b052a3 After: https://github.com/user-attachments/assets/c62e006e-6147-4c94-b6cf-375ca300b890 ## Summary by CodeRabbit - **New Features** - Added confirmation dialogs and downtime warnings before changing database SSL enforcement. - Added loading states and success or failure notifications for SSL updates. - Enabled SSL enforcement directly from temporary database access settings. - **Bug Fixes** - Prevented SSL enforcement from being disabled while temporary database access is enabled. - Improved settings refresh after SSL enforcement changes. --- .../JitDbAccessConfiguration.tsx | 29 +++- .../Settings/Database/SSLConfiguration.tsx | 163 ++++++++---------- .../Database/SSLEnforcementConfirmDialog.tsx | 46 +++++ .../ssl-enforcement-update-mutation.ts | 4 + 4 files changed, 143 insertions(+), 99 deletions(-) create mode 100644 apps/studio/components/interfaces/Settings/Database/SSLEnforcementConfirmDialog.tsx diff --git a/apps/studio/components/interfaces/Settings/Database/JitDatabaseAccess/JitDbAccessConfiguration.tsx b/apps/studio/components/interfaces/Settings/Database/JitDatabaseAccess/JitDbAccessConfiguration.tsx index bfd7d6a522e..f6dd58a2907 100644 --- a/apps/studio/components/interfaces/Settings/Database/JitDatabaseAccess/JitDbAccessConfiguration.tsx +++ b/apps/studio/components/interfaces/Settings/Database/JitDatabaseAccess/JitDbAccessConfiguration.tsx @@ -42,6 +42,7 @@ import { import { JitDbAccessDeleteDialog } from './JitDbAccessDeleteDialog' import { JitDbAccessRuleSheet } from './JitDbAccessRuleSheet' import { JitDbAccessRulesTable } from './JitDbAccessRulesTable' +import { SSLEnforcementConfirmDialog } from '@/components/interfaces/Settings/Database/SSLEnforcementConfirmDialog' import { getServiceVersionsPath } from '@/components/interfaces/Settings/General/ServiceVersions/ServiceVersions.utils' import { SupportLink } from '@/components/interfaces/Support/SupportLink' import { AlertError } from '@/components/ui/AlertError' @@ -55,6 +56,7 @@ import { useJitDbAccessRevokeMutation } from '@/data/jit-db-access/jit-db-access import { useJitDbAccessUpdateMutation } from '@/data/jit-db-access/jit-db-access-update-mutation' import { useOrganizationMembersQuery } from '@/data/organizations/organization-members-query' import { useProjectMembersQuery } from '@/data/projects/project-members-query' +import { useSSLEnforcementUpdateMutation } from '@/data/ssl-enforcement/ssl-enforcement-update-mutation' import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' @@ -126,6 +128,21 @@ export const JitDbAccessConfiguration = () => { onError: () => {}, }) + const { mutateAsync: enableSSLEnforcement, isPending: isEnablingSSLEnforcement } = + useSSLEnforcementUpdateMutation({ + onSuccess: () => { + toast.success('Successfully enabled SSL enforcement') + }, + onError: (error) => { + toast.error(`Failed to enable SSL enforcement: ${error.message}`) + }, + }) + + const handleEnableSSLEnforcement = async () => { + if (!ref) return console.error('Project ref is required') + await enableSSLEnforcement({ projectRef: ref, requestedConfig: { database: true } }) + } + const { mutateAsync: revokeUserAccess, isPending: isRevokingAccess } = useJitDbAccessRevokeMutation({ onSuccess: (_, variables) => { @@ -383,11 +400,15 @@ export const JitDbAccessConfiguration = () => { Upgrade Postgres ) : unavailableReason === 'ssl_enforcement_required' && ref ? ( - + + ) : (
    -
    {children}
    +
    {children}
    ) diff --git a/apps/studio/components/ui/AIAssistantPanel/AssistantChatForm.tsx b/apps/studio/components/ui/AIAssistantPanel/AssistantChatForm.tsx index 12913d7bdfa..9db5c0488e5 100644 --- a/apps/studio/components/ui/AIAssistantPanel/AssistantChatForm.tsx +++ b/apps/studio/components/ui/AIAssistantPanel/AssistantChatForm.tsx @@ -154,6 +154,7 @@ const AssistantChatFormComponent = forwardRef( ) : ( } disabled={!canSubmit} diff --git a/apps/studio/pages/project/[ref]/explorer/index.tsx b/apps/studio/pages/project/[ref]/explorer/index.tsx index 82ae81843a3..d44d4c1a2b7 100644 --- a/apps/studio/pages/project/[ref]/explorer/index.tsx +++ b/apps/studio/pages/project/[ref]/explorer/index.tsx @@ -1,10 +1,10 @@ -import { ExplorerPage } from '@/components/interfaces/Explorer/ExplorerPage' +import { ExplorerHome } from '@/components/interfaces/Explorer/ExplorerHome' import { DefaultLayout } from '@/components/layouts/DefaultLayout' import { ExplorerLayout } from '@/components/layouts/ExplorerLayout/ExplorerLayout' import type { NextPageWithLayout } from '@/types' const ProjectExplorerPage: NextPageWithLayout = () => { - return + return } ProjectExplorerPage.getLayout = (page) => ( diff --git a/apps/studio/routes/project/$ref/explorer.tsx b/apps/studio/routes/project/$ref/explorer.tsx index a67032bc417..d31f51f8179 100644 --- a/apps/studio/routes/project/$ref/explorer.tsx +++ b/apps/studio/routes/project/$ref/explorer.tsx @@ -1,6 +1,6 @@ import { createFileRoute } from '@tanstack/react-router' -import { ExplorerPage } from '@/components/interfaces/Explorer/ExplorerPage' +import { ExplorerHome } from '@/components/interfaces/Explorer/ExplorerHome' import { ExplorerLayout } from '@/components/layouts/ExplorerLayout/ExplorerLayout' export const Route = createFileRoute('/project/$ref/explorer')({ @@ -10,7 +10,7 @@ export const Route = createFileRoute('/project/$ref/explorer')({ function ProjectExplorerRoute() { return ( - + ) } From 93b5ae71bf91a7d8b38f1de0294ba8f12cb27e4d Mon Sep 17 00:00:00 2001 From: Jordi Enric <37541088+jordienr@users.noreply.github.com> Date: Thu, 6 Aug 2026 11:02:56 +0200 Subject: [PATCH 53/83] chore: remove unused useProjectUsageStats hook (#48792) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem `useProjectUsageStats` (`apps/studio/hooks/analytics/useProjectUsageStats.tsx`) has no importers anywhere in the codebase — dead code, and it also still queries BigQuery directly (`logs.all`, no OTEL path), which would've made it another gap in the reports→ClickHouse migration if it were ever wired up. ## Fix Deletes the file. Confirmed nothing imports it, and none of its own imports (`useFillTimeseriesSorted`, `useTimeseriesUnixToIso`, `genChartQuery`, `EventChart`) become unused as a result — all are still used elsewhere. ## How to test - `pnpm tsc --noEmit` — no errors referencing the removed file. - `pnpm vitest run hooks/analytics` — 28 tests pass, no breakage. ## Summary by CodeRabbit * **Refactor** * Removed the project usage analytics statistics feature, including its data retrieval, time-series processing, filtering, refresh controls, and loading/error states. --- .../hooks/analytics/useProjectUsageStats.tsx | 113 ------------------ 1 file changed, 113 deletions(-) delete mode 100644 apps/studio/hooks/analytics/useProjectUsageStats.tsx diff --git a/apps/studio/hooks/analytics/useProjectUsageStats.tsx b/apps/studio/hooks/analytics/useProjectUsageStats.tsx deleted file mode 100644 index e09b4d27dd2..00000000000 --- a/apps/studio/hooks/analytics/useProjectUsageStats.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import { useQuery } from '@tanstack/react-query' -import { useMemo } from 'react' - -import { useFillTimeseriesSorted } from './useFillTimeseriesSorted' -import useTimeseriesUnixToIso from './useTimeseriesUnixToIso' -import { LogsTableName } from '@/components/interfaces/Settings/Logs/Logs.constants' -import type { - EventChart, - EventChartData, - Filters, - LogsEndpointParams, -} from '@/components/interfaces/Settings/Logs/Logs.types' -import { genChartQuery } from '@/components/interfaces/Settings/Logs/Logs.utils' -import { executeAnalyticsSql } from '@/data/logs/execute-analytics-sql' - -interface ProjectUsageStatsHookResult { - error: string | Object | null - isLoading: boolean - filters: Filters - params: LogsEndpointParams - eventChartData: EventChartData[] - refresh: () => void -} - -function useProjectUsageStats({ - projectRef, - table, - timestampStart, - timestampEnd, - filterOverride, -}: { - projectRef: string - table: LogsTableName - timestampStart: string - timestampEnd: string - filterOverride?: Filters -}): ProjectUsageStatsHookResult { - const filterOverrideString = JSON.stringify(filterOverride) - const mergedFilters = useMemo( - () => ({ - ...filterOverride, - }), - [filterOverrideString] - ) - - const params: LogsEndpointParams = useMemo(() => { - return { iso_timestamp_start: timestampStart, iso_timestamp_end: timestampEnd } - }, [timestampStart, timestampEnd]) - - const chartQuery = useMemo( - () => genChartQuery(table, params, mergedFilters), - [table, params, mergedFilters] - ) - - const chartQueryKey = useMemo( - () => [ - 'projects', - projectRef, - 'logs-chart', - table, - { - projectRef, - sql: chartQuery, - iso_timestamp_start: timestampStart, - iso_timestamp_end: timestampEnd, - }, - ], - [projectRef, chartQuery, timestampStart, timestampEnd, table] - ) - - const { data: eventChartResponse, refetch: refreshEventChart } = useQuery({ - queryKey: chartQueryKey, - queryFn: async ({ signal }) => { - const data = await executeAnalyticsSql({ - projectRef, - endpoint: '/platform/projects/{ref}/analytics/endpoints/logs.all', - sql: chartQuery, - iso_timestamp_start: timestampStart, - iso_timestamp_end: timestampEnd, - method: 'get', - signal, - }) - - return data as unknown as EventChart - }, - refetchOnWindowFocus: false, - enabled: typeof projectRef !== 'undefined', - }) - - const normalizedEventChartData = useTimeseriesUnixToIso( - eventChartResponse?.result ?? [], - 'timestamp' - ) - - const { data: eventChartData, error: eventChartError } = useFillTimeseriesSorted({ - data: normalizedEventChartData, - timestampKey: 'timestamp', - valueKey: 'count', - defaultValue: 0, - startDate: timestampStart, - endDate: timestampEnd ?? new Date().toISOString(), - }) - - return { - isLoading: !eventChartResponse, - error: eventChartError, - filters: mergedFilters, - params, - eventChartData, - refresh: refreshEventChart, - } -} -export default useProjectUsageStats From 840127cd6962d1b6a953c9b28201989ad6879be2 Mon Sep 17 00:00:00 2001 From: Danny White <3104761+dnywh@users.noreply.github.com> Date: Thu, 6 Aug 2026 19:06:38 +1000 Subject: [PATCH 54/83] let inline error callers own mutation failures (#48640) ## What kind of change does this PR introduce? Code clean-up following #48470, #48471, #48472, #48473, and #48474. ## What is the current behavior? Mutation hooks provide fallback error toasts, so callers that already render errors inline must suppress those toasts with empty `onError` handlers. ## What is the new behavior? The affected callers own their error presentation. Inline interstitial errors remain unchanged, API authorisation retains its state-reset handlers, and Project Claim retains its combined caller-owned toast. ## To test There is no useful before-and-after visual check for this PR: the rendered error states should be identical on `master` and this branch. The change only removes the default-toast and no-op-handler pair underneath the UI. The existing [Organisation Invite](https://github.com/supabase/supabase/pull/48470), [API authorisation, AWS Marketplace](https://github.com/supabase/supabase/pull/48471), and [Stripe Projects](https://github.com/supabase/supabase/pull/48472) failure tests cover the inline errors and confirm that no duplicate toast appears. --- .../AwsMarketplaceOnboarding.tsx | 1 - .../Organization/ProjectClaim/confirm.tsx | 2 +- .../OrganizationInvite/OrganizationInvite.tsx | 2 -- .../api-authorization-approve-mutation.ts | 29 +++++++------------ .../api-authorization-decline-mutation.ts | 29 +++++++------------ ...organization-invitation-accept-mutation.ts | 9 ------ ...anization-link-aws-marketplace-mutation.ts | 9 ------ .../stripe-projects-confirm-mutation.ts | 9 ------ .../pages/partners/stripe/projects/login.tsx | 4 +-- 9 files changed, 22 insertions(+), 72 deletions(-) diff --git a/apps/studio/components/interfaces/Organization/CloudMarketplace/AwsMarketplaceOnboarding.tsx b/apps/studio/components/interfaces/Organization/CloudMarketplace/AwsMarketplaceOnboarding.tsx index 42fababc170..fcd26bfb2e1 100644 --- a/apps/studio/components/interfaces/Organization/CloudMarketplace/AwsMarketplaceOnboarding.tsx +++ b/apps/studio/components/interfaces/Organization/CloudMarketplace/AwsMarketplaceOnboarding.tsx @@ -77,7 +77,6 @@ export const AwsMarketplaceOnboardingScreen = ({ buyerId }: { buyerId?: string } onSuccess: (_, variables) => { setLinkedOrgSlug(variables.slug) }, - onError: () => undefined, }) const linkError = linkOrganizationError ? `Failed to link organization: ${linkOrganizationError.message}` diff --git a/apps/studio/components/interfaces/Organization/ProjectClaim/confirm.tsx b/apps/studio/components/interfaces/Organization/ProjectClaim/confirm.tsx index 7d129542db9..c19aa0349c8 100644 --- a/apps/studio/components/interfaces/Organization/ProjectClaim/confirm.tsx +++ b/apps/studio/components/interfaces/Organization/ProjectClaim/confirm.tsx @@ -34,7 +34,7 @@ export const ProjectClaimConfirm = ({ const { invalidateProjectsQuery } = useInvalidateProjectsInfiniteQuery() const { mutateAsync: approveRequest, isPending: isApproving } = - useApiAuthorizationApproveMutation({ onError: () => {} }) + useApiAuthorizationApproveMutation() const { mutateAsync: claimProject, isPending: isClaiming } = useOrganizationProjectClaimMutation() diff --git a/apps/studio/components/interfaces/OrganizationInvite/OrganizationInvite.tsx b/apps/studio/components/interfaces/OrganizationInvite/OrganizationInvite.tsx index bdd1c39c301..a5a92456a55 100644 --- a/apps/studio/components/interfaces/OrganizationInvite/OrganizationInvite.tsx +++ b/apps/studio/components/interfaces/OrganizationInvite/OrganizationInvite.tsx @@ -78,8 +78,6 @@ export const OrganizationInvite = () => { onSuccess: () => { router.push('/organizations') }, - // [Joshen] Silence the default toast handler - onError: () => {}, }) async function handleJoinOrganization() { diff --git a/apps/studio/data/api-authorization/api-authorization-approve-mutation.ts b/apps/studio/data/api-authorization/api-authorization-approve-mutation.ts index d4011184bb9..968b75ef7b2 100644 --- a/apps/studio/data/api-authorization/api-authorization-approve-mutation.ts +++ b/apps/studio/data/api-authorization/api-authorization-approve-mutation.ts @@ -1,5 +1,4 @@ import { useMutation } from '@tanstack/react-query' -import { toast } from 'sonner' import { handleError, post } from '@/data/fetchers' import type { ResponseError, UseCustomMutationOptions } from '@/types' @@ -29,26 +28,18 @@ export async function approveApiAuthorization({ id, slug }: ApiAuthorizationAppr type ApiAuthorizationApproveData = Awaited> -export const useApiAuthorizationApproveMutation = ({ - onError, - ...options -}: Omit< - UseCustomMutationOptions< - ApiAuthorizationApproveData, - ResponseError, - ApiAuthorizationApproveVariables - >, - 'mutationFn' -> = {}) => { +export const useApiAuthorizationApproveMutation = ( + options: Omit< + UseCustomMutationOptions< + ApiAuthorizationApproveData, + ResponseError, + ApiAuthorizationApproveVariables + >, + 'mutationFn' + > = {} +) => { return useMutation({ mutationFn: (vars) => approveApiAuthorization(vars), - async onError(data, variables, context) { - if (onError === undefined) { - toast.error(`Failed to approve authorization request: ${data.message}`) - } else { - onError(data, variables, context) - } - }, ...options, }) } diff --git a/apps/studio/data/api-authorization/api-authorization-decline-mutation.ts b/apps/studio/data/api-authorization/api-authorization-decline-mutation.ts index 8cc02eb7a4a..9450af30677 100644 --- a/apps/studio/data/api-authorization/api-authorization-decline-mutation.ts +++ b/apps/studio/data/api-authorization/api-authorization-decline-mutation.ts @@ -1,5 +1,4 @@ import { useMutation } from '@tanstack/react-query' -import { toast } from 'sonner' import { del, handleError } from '@/data/fetchers' import type { ResponseError, UseCustomMutationOptions } from '@/types' @@ -28,26 +27,18 @@ export async function declineApiAuthorization({ id, slug }: ApiAuthorizationDecl type ApiAuthorizationDeclineData = Awaited> -export const useApiAuthorizationDeclineMutation = ({ - onError, - ...options -}: Omit< - UseCustomMutationOptions< - ApiAuthorizationDeclineData, - ResponseError, - ApiAuthorizationDeclineVariables - >, - 'mutationFn' -> = {}) => { +export const useApiAuthorizationDeclineMutation = ( + options: Omit< + UseCustomMutationOptions< + ApiAuthorizationDeclineData, + ResponseError, + ApiAuthorizationDeclineVariables + >, + 'mutationFn' + > = {} +) => { return useMutation({ mutationFn: (vars) => declineApiAuthorization(vars), - async onError(data, variables, context) { - if (onError === undefined) { - toast.error(`Failed to decline authorization request: ${data.message}`) - } else { - onError(data, variables, context) - } - }, ...options, }) } diff --git a/apps/studio/data/organization-members/organization-invitation-accept-mutation.ts b/apps/studio/data/organization-members/organization-invitation-accept-mutation.ts index ccd70b2cd29..017dfc11e2a 100644 --- a/apps/studio/data/organization-members/organization-invitation-accept-mutation.ts +++ b/apps/studio/data/organization-members/organization-invitation-accept-mutation.ts @@ -1,5 +1,4 @@ import { useMutation, useQueryClient } from '@tanstack/react-query' -import { toast } from 'sonner' import { handleError, post } from '@/data/fetchers' import { invalidateOrganizationsQuery } from '@/data/organizations/organizations-query' @@ -28,7 +27,6 @@ type OrganizationMemberUpdateData = Awaited> export const useOrganizationLinkAwsMarketplaceMutation = ({ onSuccess, - onError, ...options }: Omit< UseCustomMutationOptions< @@ -41,13 +39,6 @@ export const useOrganizationLinkAwsMarketplaceMutation = ({ async onSuccess(data, variables, context) { await onSuccess?.(data, variables, context) }, - async onError(data, variables, context) { - if (onError === undefined) { - toast.error(`Failed to link organization to AWS Marketplace: ${data.message}`) - } else { - onError(data, variables, context) - } - }, ...options, }) } diff --git a/apps/studio/data/partners/stripe-projects-confirm-mutation.ts b/apps/studio/data/partners/stripe-projects-confirm-mutation.ts index faf93f77d7f..d1ceef39a4f 100644 --- a/apps/studio/data/partners/stripe-projects-confirm-mutation.ts +++ b/apps/studio/data/partners/stripe-projects-confirm-mutation.ts @@ -1,5 +1,4 @@ import { useMutation } from '@tanstack/react-query' -import { toast } from 'sonner' import { handleError, post } from '@/data/fetchers' import type { ResponseError, UseCustomMutationOptions } from '@/types' @@ -24,7 +23,6 @@ type ConfirmAccountRequestData = Awaited { isSuccess: isConfirmationSuccess, error: confirmationMutationError, reset: resetConfirmationError, - } = useConfirmAccountRequestMutation({ - onError: () => undefined, - }) + } = useConfirmAccountRequestMutation() const confirmationError = confirmationMutationError ? `Failed to authorize Stripe Projects: ${confirmationMutationError.message}` : undefined From 2afb87af0532ec1d73a6cdced60908acf41826a4 Mon Sep 17 00:00:00 2001 From: Monica Khoury <99693443+monicakh@users.noreply.github.com> Date: Thu, 6 Aug 2026 13:00:28 +0300 Subject: [PATCH 55/83] fix(ui): add bottom padding to scroll container in RLS search (#48759) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes FE-4075. ## What kind of change does this PR introduce? The footer displaying the total number of RLS policies overlaps the last search result in the RLS Policy Search dialog. As a result, the last policy entry is partially hidden and cannot be fully read when scrolling to the bottom. ## What is the current behavior? The search results container now reserves space for the footer, preventing it from overlapping the last search result. All policy entries remain fully visible when scrolling to the bottom. image ## What is the new behavior? CleanShot 2026-08-05 at 18 19 27@2x ## How to test - Open a project in the Supabase Dashboard. - Navigate to Database → RLS Policies. - Open the policy search dialog. - Search for a term that returns enough results to make the list scrollable - Scroll to the bottom of the results. The [database.sql](https://gist.github.com/monicakh/49b5ff201893eb43aea329395b3f635b) to create the tables/policies to test. ## Summary by CodeRabbit * **Bug Fixes** * Improved scrolling in policy search results. * Added spacing at the bottom so results remain visible above the fixed footer. --- .../interfaces/App/CommandMenu/PolicySearchResults.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/studio/components/interfaces/App/CommandMenu/PolicySearchResults.tsx b/apps/studio/components/interfaces/App/CommandMenu/PolicySearchResults.tsx index 89e13a7ef64..6b015b32c93 100644 --- a/apps/studio/components/interfaces/App/CommandMenu/PolicySearchResults.tsx +++ b/apps/studio/components/interfaces/App/CommandMenu/PolicySearchResults.tsx @@ -134,7 +134,7 @@ export function PolicySearchResults({ query }: PolicySearchResultsProps) { return (
    -
    +
    {renderFooter()} From cddb430310c100fae87e7662cd87ab45e0bd8122 Mon Sep 17 00:00:00 2001 From: Gildas Garcia <1122076+djhi@users.noreply.github.com> Date: Thu, 6 Aug 2026 15:40:56 +0200 Subject: [PATCH 56/83] feat(studio): scoped pat root branch (#48384) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description This is the Scoped PAT stacked PRs root branch ## How to test ### With the `scopedPAT` enabled (default on staging) Go to https://studio-staging-git-scopedpat-merge-token-lists-supabase.vercel.app/dashboard/account/tokens. - You shouldn't see two tabs anymore - If you had classic tokens, they should have the _Legacy_ badge - You can create scoped tokens - You have a way to copy newly created tokens before closing the form side panel ### With the `scopedPAT` disabled (use the devtool to override) - You shouldn't see two tabs anymore - If you had classic tokens, they should **not** have the _Legacy_ badge - You can create classic tokens - You have a way to copy newly created tokens above the list upon form submission ## Summary by CodeRabbit * **New Features** * Show classic and scoped access tokens together in one list, with classic tokens labeled β€œLegacy” when the scoped experience is enabled. * Add scoped access token creation with a two-step configure β†’ review β†’ success flow (when enabled). * Add a dismissible migration notice about scoped tokens with a link to API docs. * Show β€œView permissions” only for scoped tokens. * **Bug Fixes** * Token deletion now supports both classic and scoped tokens with the correct confirmation and success handling. * The scoped tokens page now redirects to the unified access tokens page. * **Accessibility** * Improved accessibility by adding a label to the token β€œmore options” action. --------- Co-authored-by: Ali Waseem Co-authored-by: kemal.earth <606977+kemaldotearth@users.noreply.github.com> --- .../MCPToolScopeMappings.ts | 174 +++++ .../buildAPIPermissionScopeMap.test.ts | 53 ++ .../buildAPIPermissionScopeMap.ts | 153 +++++ .../scoped-access-token-permissions/route.ts | 66 ++ .../AccessToken.permissions.test.ts | 130 ++++ .../AccessTokens/AccessToken.permissions.ts | 643 ++++++++++++++++++ .../Account/AccessTokens/AccessTokenList.tsx | 104 ++- .../AccessTokenTable/TokenCells.tsx | 20 +- .../AccessTokens/MigrationAdmonition.tsx | 47 ++ .../Scoped/Form/NewScopedTokenForm.tsx | 144 ++++ .../Scoped/Form/NewScopedTokenForm.utils.ts | 100 +++ .../Scoped/Form/NewScopedTokenFormReview.tsx | 274 ++++++++ .../Scoped/Form/NewScopedTokenSuccess.tsx | 65 ++ .../Scoped/Form/PermissionRow.tsx | 54 ++ .../Scoped/Form/PermissionsAccordion.tsx | 86 +++ .../Scoped/Form/ResourceAccessStep.tsx | 367 ++++++++++ .../AccessTokens/Scoped/Form/RiskMarker.tsx | 88 +++ .../Scoped/Form/StepIndicator.tsx | 30 + .../AccessTokens/Scoped/Form/TokenDetails.tsx | 134 ++++ .../Scoped/NewScopedTokenButton.tsx | 33 - .../Scoped/NewScopedTokenSheet.test.tsx | 282 ++++++++ .../Scoped/NewScopedTokenSheet.tsx | 332 ++------- .../AccessTokens/Scoped/ScopedTokenList.tsx | 190 ------ .../AccessTokens/Scoped/ViewTokenSheet.tsx | 571 ++++++++-------- .../hooks/useMergedAccessTokens.ts | 65 ++ .../AccessTokens/AccessTokensLayout.tsx | 39 -- apps/studio/data/scoped-access-tokens/keys.ts | 1 + .../permission-scope-map-query.ts | 188 +++++ .../scoped-access-token-create-mutation.ts | 2 +- apps/studio/lib/hosted-api-allowlist.ts | 1 + apps/studio/package.json | 2 +- apps/studio/pages/account/tokens.tsx | 15 +- apps/studio/pages/account/tokens/scoped.tsx | 90 +-- apps/studio/routeTree.gen.ts | 22 + .../api/scoped-access-token-permissions.ts | 16 + apps/studio/vite.config.ts | 10 +- packages/common/constants/local-storage.ts | 2 +- packages/common/telemetry-constants.ts | 2 +- .../ui-patterns/src/Admonition/Admonition.tsx | 2 +- pnpm-lock.yaml | 10 +- 40 files changed, 3662 insertions(+), 945 deletions(-) create mode 100644 apps/studio/app/api/scoped-access-token-permissions/MCPToolScopeMappings.ts create mode 100644 apps/studio/app/api/scoped-access-token-permissions/buildAPIPermissionScopeMap.test.ts create mode 100644 apps/studio/app/api/scoped-access-token-permissions/buildAPIPermissionScopeMap.ts create mode 100644 apps/studio/app/api/scoped-access-token-permissions/route.ts create mode 100644 apps/studio/components/interfaces/Account/AccessTokens/AccessToken.permissions.test.ts create mode 100644 apps/studio/components/interfaces/Account/AccessTokens/AccessToken.permissions.ts create mode 100644 apps/studio/components/interfaces/Account/AccessTokens/MigrationAdmonition.tsx create mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenForm.tsx create mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenForm.utils.ts create mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenFormReview.tsx create mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenSuccess.tsx create mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/PermissionRow.tsx create mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/PermissionsAccordion.tsx create mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/ResourceAccessStep.tsx create mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/RiskMarker.tsx create mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/StepIndicator.tsx create mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/TokenDetails.tsx delete mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/NewScopedTokenButton.tsx create mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/NewScopedTokenSheet.test.tsx delete mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/ScopedTokenList.tsx create mode 100644 apps/studio/components/interfaces/Account/AccessTokens/hooks/useMergedAccessTokens.ts create mode 100644 apps/studio/data/scoped-access-tokens/permission-scope-map-query.ts create mode 100644 apps/studio/routes/api/scoped-access-token-permissions.ts diff --git a/apps/studio/app/api/scoped-access-token-permissions/MCPToolScopeMappings.ts b/apps/studio/app/api/scoped-access-token-permissions/MCPToolScopeMappings.ts new file mode 100644 index 00000000000..20932566e42 --- /dev/null +++ b/apps/studio/app/api/scoped-access-token-permissions/MCPToolScopeMappings.ts @@ -0,0 +1,174 @@ +import { constants, permissions } from '@supabase/shared-types' + +import { McpMap } from '@/data/scoped-access-tokens/permission-scope-map-query' + +const { OAuthScope } = constants + +// Manually extracted from platform mcp controller code +const MCPToolOAuthScopeMapping = { + apply_migration: [OAuthScope.DATABASE_WRITE], + create_branch: [OAuthScope.ENVIRONMENT_WRITE], + create_project: [OAuthScope.PROJECTS_WRITE], + delete_branch: [OAuthScope.ENVIRONMENT_WRITE], + deploy_edge_function: [OAuthScope.EDGE_FUNCTIONS_WRITE], + execute_sql: [OAuthScope.DATABASE_READ, OAuthScope.DATABASE_WRITE], + generate_typescript_types: [OAuthScope.DATABASE_READ], + get_security_advisors: [OAuthScope.DATABASE_READ], + get_performance_advisors: [OAuthScope.DATABASE_READ], + get_edge_function: [OAuthScope.EDGE_FUNCTIONS_READ], + get_logs: [OAuthScope.ANALYTICS_READ], + get_organization: [OAuthScope.ORGANIZATIONS_READ], + get_project: [OAuthScope.PROJECTS_READ], + get_project_url: [OAuthScope.PROJECTS_READ], + get_publishable_keys: [OAuthScope.SECRETS_READ], + get_storage_config: [OAuthScope.STORAGE_READ], + list_branches: [OAuthScope.ENVIRONMENT_READ], + list_edge_functions: [OAuthScope.EDGE_FUNCTIONS_READ], + list_migrations: [OAuthScope.DATABASE_READ], + list_organizations: [OAuthScope.ORGANIZATIONS_READ], + list_projects: [OAuthScope.PROJECTS_READ], + list_storage_buckets: [OAuthScope.STORAGE_READ], + merge_branch: [OAuthScope.ENVIRONMENT_WRITE], + pause_project: [OAuthScope.PROJECTS_WRITE], + rebase_branch: [OAuthScope.ENVIRONMENT_WRITE], + reset_branch: [OAuthScope.ENVIRONMENT_WRITE], + restore_project: [OAuthScope.PROJECTS_WRITE], + update_storage_config: [OAuthScope.STORAGE_WRITE], +} + +type ExtractIds = { + [K in keyof T]: { + [P in keyof T[K]]: T[K][P] extends { id: infer I } ? I : never + } +} +const FGA_PERMISSIONS = Object.fromEntries( + Object.entries(permissions.FgaPermissions).map(([group, permissions]) => [ + group, + Object.fromEntries(Object.entries(permissions).map(([key, { id }]) => [key, id])), + ]) +) as ExtractIds + +// Duplicated from platform (packages/api-core/src/lib/permissions/fga-permissions.ts) +// Ideally, this could be exported from @supabase/shared-types +export const legacyOauthScopeToFgaPermissionMap: Record = { + 'analytics:read': [ + FGA_PERMISSIONS.PROJECT.ANALYTICS_LOGS_READ, + FGA_PERMISSIONS.PROJECT.ANALYTICS_USAGE_READ, + ], + 'analytics:write': [], + 'analytics_config:read': [FGA_PERMISSIONS.PROJECT.ANALYTICS_CONFIG_READ], + 'analytics_config:write': [FGA_PERMISSIONS.PROJECT.ANALYTICS_CONFIG_WRITE], + 'auth:read': [FGA_PERMISSIONS.PROJECT.AUTH_CONFIG_READ], + // Note(Hieu) Auth:write scope grants access to all auth config endpoints. + // However, one endpoint requires minimum administrator role, so this oauth scope must also include the FGA PROJECT.ADMIN_WRITE permission + 'auth:write': [FGA_PERMISSIONS.PROJECT.ADMIN_WRITE, FGA_PERMISSIONS.PROJECT.AUTH_CONFIG_WRITE], + 'database:read': [ + FGA_PERMISSIONS.USER.SNIPPETS_READ, + FGA_PERMISSIONS.PROJECT.ADVISORS_READ, + FGA_PERMISSIONS.PROJECT.BACKUPS_READ, + FGA_PERMISSIONS.PROJECT.DATABASE_READ, + FGA_PERMISSIONS.PROJECT.DATABASE_CONFIG_READ, + FGA_PERMISSIONS.PROJECT.DATABASE_JIT_READ, + FGA_PERMISSIONS.PROJECT.DATABASE_MIGRATIONS_READ, + FGA_PERMISSIONS.PROJECT.DATABASE_POOLING_CONFIG_READ, + FGA_PERMISSIONS.PROJECT.DATABASE_READONLY_CONFIG_READ, + FGA_PERMISSIONS.PROJECT.DATABASE_SSL_CONFIG_READ, + FGA_PERMISSIONS.PROJECT.SNIPPETS_READ, + ], + 'database:write': [ + FGA_PERMISSIONS.PROJECT.ADMIN_WRITE, + FGA_PERMISSIONS.PROJECT.BACKUPS_WRITE, + // Note(Hieu): Include database read permission here to align with the project query endpoint. + // RLS and FGA guard this endpoint with database read first, then perform an additional check for write queries. + // The OAuth guard requires database write directly, which causes a discrepancy error if we don't include read here. + FGA_PERMISSIONS.PROJECT.DATABASE_READ, + FGA_PERMISSIONS.PROJECT.DATABASE_WRITE, + FGA_PERMISSIONS.PROJECT.DATABASE_CONFIG_WRITE, + FGA_PERMISSIONS.PROJECT.DATABASE_MIGRATIONS_WRITE, + FGA_PERMISSIONS.PROJECT.DATABASE_POOLING_CONFIG_WRITE, + FGA_PERMISSIONS.PROJECT.DATABASE_READONLY_CONFIG_WRITE, + FGA_PERMISSIONS.PROJECT.DATABASE_SSL_CONFIG_WRITE, + FGA_PERMISSIONS.PROJECT.DATABASE_WEBHOOKS_CONFIG_WRITE, + ], + 'domains:read': [ + FGA_PERMISSIONS.PROJECT.CUSTOM_DOMAIN_READ, + FGA_PERMISSIONS.PROJECT.VANITY_SUBDOMAIN_READ, + ], + 'domains:write': [ + FGA_PERMISSIONS.PROJECT.CUSTOM_DOMAIN_WRITE, + FGA_PERMISSIONS.PROJECT.VANITY_SUBDOMAIN_WRITE, + ], + 'edge_functions:read': [FGA_PERMISSIONS.PROJECT.EDGE_FUNCTIONS_READ], + 'edge_functions:write': [FGA_PERMISSIONS.PROJECT.EDGE_FUNCTIONS_WRITE], + 'environment:read': [ + FGA_PERMISSIONS.PROJECT.ACTION_RUNS_READ, + FGA_PERMISSIONS.PROJECT.BRANCHING_DEVELOPMENT_READ, + FGA_PERMISSIONS.PROJECT.BRANCHING_PRODUCTION_READ, + ], + 'environment:write': [ + FGA_PERMISSIONS.PROJECT.ACTION_RUNS_WRITE, + FGA_PERMISSIONS.PROJECT.BRANCHING_DEVELOPMENT_CREATE, + FGA_PERMISSIONS.PROJECT.BRANCHING_DEVELOPMENT_DELETE, + FGA_PERMISSIONS.PROJECT.BRANCHING_DEVELOPMENT_WRITE, + FGA_PERMISSIONS.PROJECT.BRANCHING_PRODUCTION_CREATE, + FGA_PERMISSIONS.PROJECT.BRANCHING_PRODUCTION_DELETE, + FGA_PERMISSIONS.PROJECT.BRANCHING_PRODUCTION_WRITE, + ], + 'organizations:read': [ + FGA_PERMISSIONS.USER.ORGANIZATIONS_READ, + FGA_PERMISSIONS.ORGANIZATION.ADMIN_READ, + FGA_PERMISSIONS.ORGANIZATION.MEMBERS_READ, + ], + 'organizations:write': [], + 'projects:read': [ + FGA_PERMISSIONS.USER.PROJECTS_READ, + FGA_PERMISSIONS.ORGANIZATION.PROJECTS_READ, + FGA_PERMISSIONS.PROJECT.ADMIN_READ, + FGA_PERMISSIONS.PROJECT.DATABASE_NETWORK_BANS_READ, + FGA_PERMISSIONS.PROJECT.DATABASE_NETWORK_RESTRICTIONS_READ, + ], + 'projects:write': [ + FGA_PERMISSIONS.ORGANIZATION.ADMIN_WRITE, + FGA_PERMISSIONS.ORGANIZATION.PROJECTS_CREATE, + FGA_PERMISSIONS.PROJECT.ADMIN_WRITE, + FGA_PERMISSIONS.PROJECT.DATABASE_NETWORK_BANS_WRITE, + FGA_PERMISSIONS.PROJECT.DATABASE_NETWORK_RESTRICTIONS_WRITE, + ], + 'rest:read': [FGA_PERMISSIONS.PROJECT.DATA_API_CONFIG_READ], + 'rest:write': [FGA_PERMISSIONS.PROJECT.DATA_API_CONFIG_WRITE], + 'secrets:read': [ + FGA_PERMISSIONS.PROJECT.API_GATEWAY_KEYS_READ, + FGA_PERMISSIONS.PROJECT.AUTH_SIGNING_KEYS_READ, + FGA_PERMISSIONS.PROJECT.EDGE_FUNCTIONS_SECRETS_READ, + ], + 'secrets:write': [ + FGA_PERMISSIONS.PROJECT.API_GATEWAY_KEYS_WRITE, + FGA_PERMISSIONS.PROJECT.AUTH_SIGNING_KEYS_WRITE, + FGA_PERMISSIONS.PROJECT.EDGE_FUNCTIONS_SECRETS_WRITE, + ], + 'storage:read': [ + FGA_PERMISSIONS.PROJECT.STORAGE_READ, + FGA_PERMISSIONS.PROJECT.STORAGE_CONFIG_READ, + ], + 'storage:write': [ + FGA_PERMISSIONS.PROJECT.STORAGE_WRITE, + FGA_PERMISSIONS.PROJECT.STORAGE_CONFIG_WRITE, + ], +} + +/* + * Build a map of MCP tools/FGA permissions by mapping their OAuth Scopes to the FGA permissions: + * { + * apply_migration: ["project_admin_write", ...] + * } + * The code is duplicated from platform until we find a better way to share those mappings + */ +export const MCPToolScopeMappings = Object.entries(MCPToolOAuthScopeMapping).reduce( + (acc, [mcpTool, oAuthScopes]) => { + acc[mcpTool] = oAuthScopes.flatMap( + (oAuthScope) => legacyOauthScopeToFgaPermissionMap[oAuthScope] + ) + return acc + }, + {} as McpMap +) diff --git a/apps/studio/app/api/scoped-access-token-permissions/buildAPIPermissionScopeMap.test.ts b/apps/studio/app/api/scoped-access-token-permissions/buildAPIPermissionScopeMap.test.ts new file mode 100644 index 00000000000..367d6b3917f --- /dev/null +++ b/apps/studio/app/api/scoped-access-token-permissions/buildAPIPermissionScopeMap.test.ts @@ -0,0 +1,53 @@ +import { describe, expect, test } from 'vitest' + +import { getEndpointsAndMCPToolsForAPI } from './buildAPIPermissionScopeMap' + +describe('getEndpointsAndMCPToolsForAPI', () => { + const openAPISpecs = { + paths: { + '/v1/projects/{ref}/database/migrations': { + get: { + 'x-fga-permissions': [['database_migrations_read']], + }, + post: { + 'x-fga-permissions': [['database_migrations_write']], + }, + }, + '/v1/projects/{ref}/database/migrations/{version}': { + patch: { + 'x-fga-permissions': [['database_migrations_write']], + }, + }, + }, + } + + const mcp_tools = { + list_migrations: ['database_migrations_read'], + apply_migration: ['database_migrations_write', 'database_write'], + } + + test('returns an object with permissions as keys and endpoints and mcp_tools as values', () => { + const permissionScopeMap = getEndpointsAndMCPToolsForAPI(openAPISpecs, mcp_tools) + + expect(permissionScopeMap).toEqual({ + scopes: { + database_migrations_read: { + endpoints: ['GET /v1/projects/{ref}/database/migrations'], + mcp_tools: ['list_migrations'], + }, + database_migrations_write: { + endpoints: [ + 'POST /v1/projects/{ref}/database/migrations', + 'PATCH /v1/projects/{ref}/database/migrations/{version}', + ], + mcp_tools: ['apply_migration'], + }, + }, + endpoints: { + 'GET /v1/projects/{ref}/database/migrations': ['database_migrations_read'], + 'POST /v1/projects/{ref}/database/migrations': ['database_migrations_write'], + 'PATCH /v1/projects/{ref}/database/migrations/{version}': ['database_migrations_write'], + }, + }) + }) +}) diff --git a/apps/studio/app/api/scoped-access-token-permissions/buildAPIPermissionScopeMap.ts b/apps/studio/app/api/scoped-access-token-permissions/buildAPIPermissionScopeMap.ts new file mode 100644 index 00000000000..57c7ffc70f0 --- /dev/null +++ b/apps/studio/app/api/scoped-access-token-permissions/buildAPIPermissionScopeMap.ts @@ -0,0 +1,153 @@ +import lodash from 'lodash' +import z from 'zod' + +// We don't have an OpenAPI that describes mcp tools security requirements so +// we have this hard coded file that must be updated when they change +import { MCPToolScopeMappings } from './MCPToolScopeMappings' +import { + EndpointMap, + McpMap, + PermissionScopeMap, + ScopeMap, +} from '@/data/scoped-access-tokens/permission-scope-map-query' +import { InternalServerError } from '@/lib/api/apiHelpers' + +// Default lodash merge does not correctly merge arrays so this custom merger fixes it +function mergeArrays(objValue: unknown, srcValue: unknown) { + if (Array.isArray(objValue) && Array.isArray(srcValue)) { + return objValue.concat(srcValue) + } +} + +/* + * Builds the permissions/endpoint mapping by fetching the OpenAPI specs for our v1 and v2 APIs. + * @throws InternalServerError when it can't fetch the OpenAPI specs + */ +export const buildAPIPermissionScopeMap = async (): Promise => { + // Get the permissions map for the API v1 + const apiV1SpecsJSON = await fetchAPIPermissionScope('v1') + const apiV1Specs = API_SPECS_SCHEMA.parse(apiV1SpecsJSON) + const permissionScopeMapV1 = getEndpointsAndMCPToolsForAPI(apiV1Specs, MCPToolScopeMappings) + + // Get the permissions map for the API v2 + const apiV2SpecsJSON = await fetchAPIPermissionScope('v2') + const apiV2Specs = API_SPECS_SCHEMA.parse(apiV2SpecsJSON) + const permissionScopeMapV2 = getEndpointsAndMCPToolsForAPI(apiV2Specs, MCPToolScopeMappings) + + const permissionScope = lodash.mergeWith( + { mcp_tools: MCPToolScopeMappings }, + permissionScopeMapV1, + permissionScopeMapV2, + mergeArrays + ) + + return permissionScope +} + +// OPEN API specs look like this (only kept the parts we're interested in): +// { +// "paths": { +// "/v2/projects/{ref}/analytics/log-drains": { +// "get": { +// "x-fga-permissions": [ +// [ +// "analytics_config_read" +// ] +// ] +// } +// } +// } +// } +export const getEndpointsAndMCPToolsForAPI = ( + apiSpecs: z.output, + mcp_tools: McpMap +): Omit => { + const scopes: ScopeMap = {} + const endpoints: EndpointMap = {} + + // Loop over each API path to assign endpoints to their scopes and + // scopes to their endpoints + Object.entries(apiSpecs.paths).forEach(([path, methods]) => { + // Loop over each API path method (get, post, etc.) + Object.entries(methods).forEach(([method, methodSpecs]) => { + const endpoint = `${method.toUpperCase()} ${path}` + if (methodSpecs['x-fga-permissions'] == null) return + + methodSpecs['x-fga-permissions'].forEach((permissions) => { + permissions?.forEach((permission) => { + // Initialize scope object if needed + scopes[permission] = scopes[permission] || { endpoints: [], mcp_tools: [] } + + // Initialize endpoints array if needed + endpoints[endpoint] = endpoints[endpoint] || [] + + if (!scopes[permission].endpoints.includes(endpoint)) { + scopes[permission].endpoints.push(endpoint) + } + if (!endpoints[endpoint].includes(permission)) { + endpoints[endpoint].push(permission) + } + }) + }) + }) + }) + + // Assign the mcp tools to their scopes + Object.entries(mcp_tools).forEach(([mcpTool, toolScopes]) => { + toolScopes.forEach((toolScope) => { + if (scopes[toolScope] && !scopes[toolScope].mcp_tools.includes(mcpTool)) { + scopes[toolScope].mcp_tools.push(mcpTool) + } + }) + }) + + return { scopes, endpoints } +} + +const NEXT_PUBLIC_API_DOMAIN = process.env.NEXT_PUBLIC_API_DOMAIN || 'https://api.supabase.com' + +const fetchAPIPermissionScope = async (version: 'v1' | 'v2') => { + try { + const response = await fetch(`${NEXT_PUBLIC_API_DOMAIN}/api/${version}-json`, { + method: 'get', + headers: { + 'Content-Type': 'application/json', + }, + }) + if (response.ok) { + return response.json() + } + const responseText = await response.text() + + const retryAfter = response.headers.get('Retry-After') ?? undefined + throw new InternalServerError(`API v${version} responded with ${response.status}`, { + status: response.status, + body: responseText, + ...(retryAfter !== undefined && { retryAfter }), + }) + } catch (error: unknown) { + if (error instanceof InternalServerError) { + throw error + } + + if (error instanceof Error) { + throw new InternalServerError(error.message) + } + } +} + +// Simplified OPEN API specs schemas that only defines what we care about for scoped tokens + +const OPEN_API_PATH_METHOD_SCHEMA = z.object({ + 'x-fga-permissions': z.array(z.string().array().optional()).optional(), +}) + +const API_SPECS_SCHEMA = z.object({ + paths: z.record( + z.string(), + z.record( + z.enum(['get', 'post', 'put', 'patch', 'delete', 'options', 'head', 'trace']), + OPEN_API_PATH_METHOD_SCHEMA + ) + ), +}) diff --git a/apps/studio/app/api/scoped-access-token-permissions/route.ts b/apps/studio/app/api/scoped-access-token-permissions/route.ts new file mode 100644 index 00000000000..998ee654f79 --- /dev/null +++ b/apps/studio/app/api/scoped-access-token-permissions/route.ts @@ -0,0 +1,66 @@ +import { IS_PLATFORM } from 'common' +import { NextResponse } from 'next/server' + +import { buildAPIPermissionScopeMap } from './buildAPIPermissionScopeMap' +import { InternalServerError } from '@/lib/api/apiHelpers' + +/** + * Cache on CDN for 5 minutes + * Allow serving stale content for 1 minute while revalidating + */ +const CACHE_CONTROL_SETTINGS = 'public, s-maxage=300, stale-while-revalidate=60' + +export async function OPTIONS() { + if (!IS_PLATFORM) return new Response(null, { status: 404 }) + return new Response(null, { + status: 204, + headers: { + Allow: 'GET, HEAD, OPTIONS', + }, + }) +} + +export async function HEAD() { + if (!IS_PLATFORM) return new Response(null, { status: 404 }) + return new Response(null, { + status: 200, + headers: { 'Cache-Control': CACHE_CONTROL_SETTINGS }, + }) +} + +/* + * This route allows us to not add all permissions mappings to the client bundle. + * Ideally, this should be provided by the management API, including MCP tools. + */ +export async function GET() { + if (!IS_PLATFORM) return new Response(null, { status: 404 }) + + try { + const permissionsScopes = await buildAPIPermissionScopeMap() + return NextResponse.json(permissionsScopes, { + headers: { 'Cache-Control': CACHE_CONTROL_SETTINGS }, + }) + } catch (error) { + let errorCode = 500 + const headers = new Headers() + + if (error instanceof InternalServerError) { + if (typeof error.details?.status === 'number') errorCode = error.details.status + if (errorCode === 420) errorCode = 429 + if (errorCode === 429 && typeof error.details?.retryAfter === 'string') { + headers.set('Retry-After', error.details.retryAfter) + } + console.error('Failed to fetch scoped token permission scope map: %O', { + message: error.message, + details: error.details, + }) + } else { + console.error('Unexpected error fetching scoped token permission scope map: %O', error) + } + + return NextResponse.json( + { error: 'Unable to fetch scoped token permission scope map at this time' }, + { status: errorCode, headers } + ) + } +} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.permissions.test.ts b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.permissions.test.ts new file mode 100644 index 00000000000..7bd9bee642e --- /dev/null +++ b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.permissions.test.ts @@ -0,0 +1,130 @@ +import { describe, expect, it } from 'vitest' + +import { + computeOverallRisk, + countConfigured, + getCatalogEntry, + selectionToScopes, + type PermissionSelection, +} from './AccessToken.permissions' +import { + getEnabledEndpoints, + getEnabledMcpTools, +} from '@/data/scoped-access-tokens/permission-scope-map-query' + +describe('selectionToScopes', () => { + it('ignores none and returns read scope for read mode', () => { + const selection: PermissionSelection = { 'project:database': 'read', 'project:backups': 'none' } + expect(selectionToScopes(selection)).toEqual(['database_read']) + }) + + it('returns read + write scopes for readwrite mode', () => { + const selection: PermissionSelection = { 'project:database': 'readwrite' } + expect(selectionToScopes(selection).sort()).toEqual(['database_read', 'database_write']) + }) + + it('dedupes and skips unknown keys', () => { + const selection: PermissionSelection = { + 'project:database': 'read', + 'not:a-real-key': 'readwrite', + } + expect(selectionToScopes(selection)).toEqual(['database_read']) + }) + + it('read-only resources have no write scopes', () => { + const advisors = getCatalogEntry('project:advisors') + expect(advisors?.writable).toBe(false) + expect(selectionToScopes({ 'project:advisors': 'readwrite' })).toEqual(['advisors_read']) + }) +}) + +describe('computeOverallRisk', () => { + it('is Minimal with no capabilities', () => { + expect(computeOverallRisk({}, 'project').level).toBe('Minimal') + }) + + it('account-level read-only is still Elevated', () => { + const risk = computeOverallRisk({ 'project:advisors': 'read' }, 'account') + expect(risk.level).toBe('Elevated') + expect(risk.tone).toBe('medium') + }) + + it('account-level with any write is High', () => { + const risk = computeOverallRisk({ 'project:realtime_config': 'readwrite' }, 'account') + expect(risk.level).toBe('High') + }) + + it('project high-risk write is High', () => { + expect(computeOverallRisk({ 'project:database': 'readwrite' }, 'project').level).toBe('High') + }) + + it('project medium write is Medium', () => { + expect(computeOverallRisk({ 'project:realtime_config': 'readwrite' }, 'project').level).toBe( + 'Medium' + ) + }) + + it('read-only project is Low', () => { + expect(computeOverallRisk({ 'project:database': 'read' }, 'project').level).toBe('Low') + }) +}) + +describe('countConfigured', () => { + it('counts only non-none modes', () => { + expect(countConfigured({ a: 'read', b: 'none', c: 'readwrite' })).toBe(2) + }) +}) + +describe('permission scope map (dual-scope enforcement)', () => { + it('enables a dual-scope MCP tool only when all required scopes are granted', () => { + // execute_sql requires both database_read and database_write + expect( + getEnabledMcpTools({ + // Only scope one is granted + grantedScopes: ['database_read'], + permissionScopeMap: { + scopes: {}, + endpoints: {}, + mcp_tools: { + execute_sql: ['database_read', 'database_write'], + }, + }, + }) + ).not.toContain('execute_sql') + expect( + getEnabledMcpTools({ + // Both scopes are granted + grantedScopes: ['database_read', 'database_write'], + permissionScopeMap: { + scopes: {}, + endpoints: {}, + mcp_tools: { + execute_sql: ['database_read', 'database_write'], + }, + }, + }) + ).toContain('execute_sql') + }) + + it('only lists endpoints whose every required scope is granted', () => { + const endpoints = getEnabledEndpoints({ + grantedScopes: ['database_read', 'database_write'], + permissionScopeMap: { + scopes: {}, + endpoints: { + 'GET /api/valid_read': ['database_read'], + 'POST /api/valid_write': ['database_write'], + 'PUT /api/valid_both': ['database_read', 'database_write'], + 'PUT /api/invalid': ['project_write'], + 'PUT /api/incomplete': ['database_read', 'project_write'], + }, + mcp_tools: {}, + }, + }) + expect(endpoints).toEqual([ + { raw: 'GET /api/valid_read', method: 'GET', path: '/api/valid_read' }, + { raw: 'POST /api/valid_write', method: 'POST', path: '/api/valid_write' }, + { raw: 'PUT /api/valid_both', method: 'PUT', path: '/api/valid_both' }, + ]) + }) +}) diff --git a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.permissions.ts b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.permissions.ts new file mode 100644 index 00000000000..be204f9d45b --- /dev/null +++ b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.permissions.ts @@ -0,0 +1,643 @@ +import { permissions } from '@supabase/shared-types' + +import type { ScopedAccessTokenPermission } from './AccessToken.constants' + +/** + * Data model for the scoped access-token creation flow. + * + * The real permission scopes come from `@supabase/shared-types` (`FgaPermissions`). Those scopes + * carry no category or risk metadata, so this file layers editable presentation data on top: + * - PERMISSION_CATEGORIES groups every scope into one of five UI categories. + * - RESOURCE_METADATA assigns each resource a display name, description, category and risk. + * + * TODO(product): the risk levels, reasons and "Allows" copy below are proposed defaults β€” review + * and adjust. Where a resource has no explicit metadata entry we fall back to a heuristic. + */ + +const FGA = permissions.FgaPermissions + +export type PermissionMode = 'none' | 'read' | 'readwrite' +export type RiskLevel = 'low' | 'medium' | 'high' +export type PermissionCategoryKey = 'account' | 'project' | 'database' | 'appsvc' | 'infra' + +export interface PermissionCategory { + key: PermissionCategoryKey + name: string + description: string +} + +/** Display order matches the accordion, where every category starts collapsed. */ +export const PERMISSION_CATEGORIES: PermissionCategory[] = [ + { + key: 'project', + name: 'Project', + description: 'Core project visibility, settings, and diagnostics.', + }, + { + key: 'database', + name: 'Database', + description: 'SQL access, migrations, backups, and data operations.', + }, + { + key: 'appsvc', + name: 'Application Services', + description: 'Auth, storage, realtime, edge functions, and service configuration.', + }, + { + key: 'infra', + name: 'Infrastructure & Delivery', + description: 'Branch automation, domains, add-ons, and network.', + }, + { + key: 'account', + name: 'Account & Organization', + description: 'Account-wide and organization-level access that spans projects.', + }, +] + +interface ResourceMeta { + category: PermissionCategoryKey + name: string + description: string + risk: RiskLevel + riskReason: string + allowsRead?: string[] + allowsWrite?: string[] +} + +/** + * Per-resource presentation metadata, keyed by the derived `scope:resource` key (see + * AccessToken.constants β†’ ACCESS_TOKEN_RESOURCES). Every resource returned from FgaPermissions + * should have an entry; RESOURCE_METADATA_FALLBACK covers anything that slips through. + */ +const RESOURCE_METADATA: Record = { + // --- Account & Organization --- + 'user:organizations': { + category: 'account', + name: 'Organizations', + description: 'Organizations you belong to.', + risk: 'medium', + riskReason: 'Read-write can create new organizations under your account.', + allowsRead: ['List your organizations'], + allowsWrite: ['Create organizations'], + }, + 'user:projects': { + category: 'account', + name: 'Projects (account-wide)', + description: 'Projects across all your organizations.', + risk: 'low', + riskReason: 'Read-only listing of the projects you can access.', + allowsRead: ['List your projects'], + }, + 'user:snippets': { + category: 'account', + name: 'SQL Snippets (account-wide)', + description: 'Saved SQL snippets across your account.', + risk: 'low', + riskReason: 'Read-only access to your saved snippets.', + allowsRead: ['Read your SQL snippets'], + }, + 'organization:admin': { + category: 'account', + name: 'Organization Settings', + description: 'Organization settings and project transfers.', + risk: 'high', + riskReason: 'Read-write grants elevated access to organization settings and project transfers.', + allowsRead: ['Read organization settings'], + allowsWrite: ['Manage organization settings', 'Transfer projects'], + }, + 'organization:members': { + category: 'account', + name: 'Organization Members', + description: 'Members and roles within the organization.', + risk: 'high', + riskReason: 'Read-write can add or remove members and change roles across your organization.', + allowsRead: ['Read organization members'], + allowsWrite: ['Add or remove members', 'Change member roles'], + }, + 'organization:projects': { + category: 'account', + name: 'Organization Projects', + description: 'Projects within the organization.', + risk: 'medium', + riskReason: 'Read-write can create new projects in the organization.', + allowsRead: ['List organization projects'], + allowsWrite: ['Create organization projects'], + }, + + // --- Project --- + 'project:admin': { + category: 'project', + name: 'Project Settings', + description: 'Project metadata and settings.', + risk: 'high', + riskReason: 'Read-write grants elevated access to change project settings and configuration.', + allowsRead: ['Read project metadata'], + allowsWrite: ['Update project settings'], + }, + 'project:action_runs': { + category: 'project', + name: 'Action Runs', + description: 'Project action run status and logs.', + risk: 'medium', + riskReason: 'Read-write can trigger action runs that execute project workflows.', + allowsRead: ['Read action run status', 'Read run logs'], + allowsWrite: ['Trigger action runs'], + }, + 'project:advisors': { + category: 'project', + name: 'Advisors', + description: 'Security and performance advisor results.', + risk: 'low', + riskReason: 'Read-only access to advisor findings β€” no changes possible.', + allowsRead: ['Read security advisors', 'Read performance advisors'], + }, + 'project:analytics_logs': { + category: 'project', + name: 'Logs', + description: 'Operational logs and log analytics.', + risk: 'low', + riskReason: 'Read-only access to project logs.', + allowsRead: ['Read project logs'], + }, + 'project:analytics_usage': { + category: 'project', + name: 'Usage Analytics', + description: 'Project usage and analytics data.', + risk: 'low', + riskReason: 'Read-only access to usage analytics.', + allowsRead: ['Read usage analytics'], + }, + 'project:snippets': { + category: 'project', + name: 'SQL Snippets', + description: 'Saved SQL snippets for the project.', + risk: 'low', + riskReason: 'Read-write can create and edit saved SQL snippets.', + allowsRead: ['Read project SQL snippets'], + allowsWrite: ['Manage project SQL snippets'], + }, + + // --- Database --- + 'project:database': { + category: 'database', + name: 'Database', + description: 'Database access and data operations.', + risk: 'high', + riskReason: + 'Read-write lets this token run arbitrary SQL, so it can modify or delete any data in your database.', + allowsRead: ['Read tables and schema', 'Run read-only queries'], + allowsWrite: ['Run arbitrary SQL'], + }, + 'project:database_migrations': { + category: 'database', + name: 'Migrations', + description: 'Database migration history and application.', + risk: 'high', + riskReason: + 'Read-write can apply schema changes that alter or drop tables across your database.', + allowsRead: ['Read migration history'], + allowsWrite: ['Apply migrations'], + }, + 'project:backups': { + category: 'database', + name: 'Backups', + description: 'Database backups, restore points, and restore.', + risk: 'high', + riskReason: + 'Read-write can trigger restores that overwrite current data with an earlier snapshot.', + allowsRead: ['Read backups and restore points'], + allowsWrite: ['Trigger restores'], + }, + 'project:database_config': { + category: 'database', + name: 'Database Config', + description: 'Database configuration.', + risk: 'medium', + riskReason: 'Read-write can change database configuration.', + allowsRead: ['Read database configuration'], + allowsWrite: ['Update database configuration'], + }, + 'project:database_jit': { + category: 'database', + name: 'Database JIT', + description: 'Just-in-time database access settings.', + risk: 'medium', + riskReason: 'Read-write can change just-in-time database access settings.', + allowsRead: ['Read JIT settings'], + allowsWrite: ['Manage JIT settings'], + }, + 'project:database_pooling_config': { + category: 'database', + name: 'Connection Pooling', + description: 'Database connection pooling.', + risk: 'medium', + riskReason: 'Read-write can change connection pooling behavior.', + allowsRead: ['Read pooling configuration'], + allowsWrite: ['Update pooling configuration'], + }, + 'project:database_readonly_config': { + category: 'database', + name: 'Read-only Mode', + description: 'Database read-only mode.', + risk: 'medium', + riskReason: 'Read-write can toggle the database into or out of read-only mode.', + allowsRead: ['Read read-only mode status'], + allowsWrite: ['Toggle read-only mode'], + }, + 'project:database_ssl_config': { + category: 'database', + name: 'SSL Enforcement', + description: 'Database SSL configuration.', + risk: 'medium', + riskReason: 'Read-write can change SSL enforcement for database connections.', + allowsRead: ['Read SSL configuration'], + allowsWrite: ['Manage SSL enforcement'], + }, + 'project:database_webhooks_config': { + category: 'database', + name: 'Database Webhooks', + description: 'Webhooks triggered from the database.', + risk: 'medium', + riskReason: 'Read-write can change database webhook configuration.', + allowsRead: ['Read webhook configuration'], + allowsWrite: ['Manage database webhooks'], + }, + 'project:database_network_bans': { + category: 'database', + name: 'Network Bans', + description: 'Banned IPs for the database.', + risk: 'medium', + riskReason: 'Read-write can ban or unban IP addresses from reaching the database.', + allowsRead: ['Read banned IPs'], + allowsWrite: ['Manage banned IPs'], + }, + 'project:database_network_restrictions': { + category: 'database', + name: 'Network Restrictions', + description: 'Network restrictions for the database.', + risk: 'high', + riskReason: 'Read-write can change which networks are allowed to reach the database.', + allowsRead: ['Read network restrictions'], + allowsWrite: ['Manage network restrictions'], + }, + + // --- Application Services --- + 'project:auth_config': { + category: 'appsvc', + name: 'Auth Config', + description: 'Authentication provider and settings.', + risk: 'high', + riskReason: + 'Read-write can change authentication providers and settings, affecting how users sign in.', + allowsRead: ['Read auth configuration'], + allowsWrite: ['Update auth providers and settings'], + }, + 'project:auth_signing_keys': { + category: 'appsvc', + name: 'Auth Signing Keys', + description: 'Authentication signing keys.', + risk: 'high', + riskReason: 'Read-write can rotate signing keys, invalidating existing sessions and tokens.', + allowsRead: ['Read signing keys'], + allowsWrite: ['Manage signing keys'], + }, + 'project:api_gateway_keys': { + category: 'appsvc', + name: 'API Keys', + description: 'Project API keys.', + risk: 'high', + riskReason: 'Read exposes API keys; read-write grants elevated access to create new keys.', + allowsRead: ['Read project API keys'], + allowsWrite: ['Create and revoke API keys'], + }, + 'project:edge_functions': { + category: 'appsvc', + name: 'Edge Functions', + description: 'Edge functions.', + risk: 'medium', + riskReason: 'Read-write can deploy or delete edge functions.', + allowsRead: ['Read edge functions'], + allowsWrite: ['Deploy and delete edge functions'], + }, + 'project:edge_functions_secrets': { + category: 'appsvc', + name: 'Edge Function Secrets', + description: 'Secrets available to edge functions.', + risk: 'high', + riskReason: 'Read exposes function secrets; read-write can set new secret values.', + allowsRead: ['Read edge function secrets'], + allowsWrite: ['Set edge function secrets'], + }, + 'project:realtime_config': { + category: 'appsvc', + name: 'Realtime Config', + description: 'Realtime configuration.', + risk: 'medium', + riskReason: 'Read-write can change realtime settings and shut down active connections.', + allowsRead: ['Read realtime configuration'], + allowsWrite: ['Update realtime settings'], + }, + 'project:storage': { + category: 'appsvc', + name: 'Storage', + description: 'File storage buckets and objects.', + risk: 'medium', + riskReason: 'Read-write can modify or delete stored files.', + allowsRead: ['Read storage buckets and objects'], + allowsWrite: ['Manage storage buckets and objects'], + }, + 'project:storage_config': { + category: 'appsvc', + name: 'Storage Config', + description: 'Storage bucket configuration.', + risk: 'medium', + riskReason: 'Read-write can change storage configuration.', + allowsRead: ['Read storage configuration'], + allowsWrite: ['Update storage configuration'], + }, + 'project:data_api_config': { + category: 'appsvc', + name: 'Data API Config', + description: 'PostgREST behavior and settings.', + risk: 'medium', + riskReason: 'Read-write can change how the auto-generated Data API behaves.', + allowsRead: ['Read Data API configuration'], + allowsWrite: ['Update Data API configuration'], + }, + + // --- Infrastructure & Delivery --- + 'project:branching_development': { + category: 'infra', + name: 'Development Branches', + description: 'Development branch automation.', + risk: 'low', + riskReason: 'Branch automation for development workflows β€” limited blast radius.', + allowsRead: ['Read development branches'], + allowsWrite: ['Create, update, and delete development branches'], + }, + 'project:branching_production': { + category: 'infra', + name: 'Production Branches', + description: 'Production branch automation.', + risk: 'high', + riskReason: + 'Read-write grants elevated access to create, merge, or delete production branches.', + allowsRead: ['Read production branches'], + allowsWrite: ['Create, merge, and delete production branches'], + }, + 'project:custom_domain': { + category: 'infra', + name: 'Custom Domains', + description: 'Custom hostnames.', + risk: 'medium', + riskReason: 'Read-write can change custom hostnames, affecting how your project is reached.', + allowsRead: ['Read custom domain configuration'], + allowsWrite: ['Set custom hostnames'], + }, + 'project:vanity_subdomain': { + category: 'infra', + name: 'Vanity Subdomain', + description: 'Project vanity subdomain.', + risk: 'medium', + riskReason: 'Read-write can change the project vanity subdomain.', + allowsRead: ['Read vanity subdomain'], + allowsWrite: ['Manage vanity subdomain'], + }, + 'project:infra_addons': { + category: 'infra', + name: 'Add-ons', + description: 'Infrastructure add-ons.', + risk: 'medium', + riskReason: 'Read-write can enable or change paid infrastructure add-ons.', + allowsRead: ['Read infrastructure add-ons'], + allowsWrite: ['Manage infrastructure add-ons'], + }, + 'project:infra_disk_config': { + category: 'infra', + name: 'Disk Config', + description: 'Disk configuration.', + risk: 'medium', + riskReason: 'Read-write can change disk size and configuration, which may incur cost.', + allowsRead: ['Read disk configuration'], + allowsWrite: ['Manage disk configuration'], + }, + 'project:read_replicas': { + category: 'infra', + name: 'Read Replicas', + description: 'Read replica configuration.', + risk: 'medium', + riskReason: 'Read-write can provision or remove read replicas, which may incur cost.', + allowsRead: ['Read read-replica configuration'], + allowsWrite: ['Manage read replicas'], + }, +} + +const RESOURCE_METADATA_FALLBACK = ( + resourceKey: string, + title: string, + hasWrite: boolean +): ResourceMeta => ({ + category: resourceKey.startsWith('project:') ? 'project' : 'account', + name: title.replace(/^(Read|Manage|Create|Delete)\s+/i, ''), + description: title, + risk: hasWrite ? 'medium' : 'low', + riskReason: hasWrite + ? 'Read-write can modify this resource.' + : 'Read-only access to this resource.', +}) + +export interface PermissionCatalogEntry { + /** Derived resource key, e.g. "project:database" */ + key: string + category: PermissionCategoryKey + name: string + description: string + risk: RiskLevel + riskReason: string + allowsRead: string[] + allowsWrite: string[] + /** Whether a Read-write mode is offered (false => read-only resource). */ + writable: boolean + /** FGA scope ids granted at Read (and above). */ + readScopes: ScopedAccessTokenPermission[] + /** Additional FGA scope ids granted at Read-write (write / create / delete). */ + writeScopes: ScopedAccessTokenPermission[] +} + +const getAction = (key: string): 'read' | 'write' | 'create' | 'delete' => { + if (key.endsWith('_WRITE')) return 'write' + if (key.endsWith('_CREATE')) return 'create' + if (key.endsWith('_DELETE')) return 'delete' + return 'read' +} + +const getResource = (key: string): string => + key.replace(/_(READ|WRITE|CREATE|DELETE)$/, '').toLowerCase() + +/** + * Builds the permission catalog from the real FgaPermissions. Each unique `scope:resource` becomes + * one row; its read scope maps to Read mode and its write/create/delete scopes to Read-write mode. + */ +const buildCatalog = (): PermissionCatalogEntry[] => { + const byResource = new Map< + string, + { title: string; readScopes: string[]; writeScopes: string[] } + >() + + for (const [scope, scopePerms] of Object.entries(FGA)) { + for (const [permKey, perm] of Object.entries(scopePerms)) { + const resourceKey = `${scope.toLowerCase()}:${getResource(permKey)}` + const action = getAction(permKey) + if (!byResource.has(resourceKey)) { + byResource.set(resourceKey, { title: perm.title, readScopes: [], writeScopes: [] }) + } + const entry = byResource.get(resourceKey)! + if (action === 'read') entry.readScopes.push(perm.id) + else entry.writeScopes.push(perm.id) + } + } + + const catalog: PermissionCatalogEntry[] = [] + for (const [key, { title, readScopes, writeScopes }] of byResource.entries()) { + const meta = + RESOURCE_METADATA[key] ?? RESOURCE_METADATA_FALLBACK(key, title, writeScopes.length > 0) + catalog.push({ + key, + category: meta.category, + name: meta.name, + description: meta.description, + risk: meta.risk, + riskReason: meta.riskReason, + allowsRead: meta.allowsRead ?? [`Read ${meta.name.toLowerCase()}`], + allowsWrite: + meta.allowsWrite ?? (writeScopes.length > 0 ? [`Modify ${meta.name.toLowerCase()}`] : []), + writable: writeScopes.length > 0, + readScopes: readScopes as ScopedAccessTokenPermission[], + writeScopes: writeScopes as ScopedAccessTokenPermission[], + }) + } + return catalog +} + +export const PERMISSION_CATALOG = buildCatalog() + +const CATALOG_BY_KEY = new Map(PERMISSION_CATALOG.map((entry) => [entry.key, entry])) + +export const getCatalogEntry = (key: string) => CATALOG_BY_KEY.get(key) + +export interface CategoryWithEntries extends PermissionCategory { + entries: PermissionCatalogEntry[] +} + +/** Catalog grouped by category, in category display order, dropping empty categories. */ +export const PERMISSION_CATALOG_BY_CATEGORY: CategoryWithEntries[] = PERMISSION_CATEGORIES.map( + (category) => ({ + ...category, + entries: PERMISSION_CATALOG.filter((entry) => entry.category === category.key), + }) +).filter((category) => category.entries.length > 0) + +/** Map of resource key -> selected mode. Absent keys are treated as 'none'. */ +export type PermissionSelection = Record + +/** Flattens a selection into the concrete FGA scope ids to send to the API. */ +export const selectionToScopes = ( + selection: PermissionSelection +): ScopedAccessTokenPermission[] => { + const scopes: ScopedAccessTokenPermission[] = [] + for (const [key, mode] of Object.entries(selection)) { + if (mode === 'none') continue + const entry = CATALOG_BY_KEY.get(key) + if (!entry) continue + scopes.push(...entry.readScopes) + if (mode === 'readwrite') scopes.push(...entry.writeScopes) + } + return Array.from(new Set(scopes)) +} + +/** Reverses `selectionToScopes`: derives a selection from a token's granted FGA scope ids. */ +export const scopesToSelection = (grantedScopes: string[]): PermissionSelection => { + const granted = new Set(grantedScopes) + const selection: PermissionSelection = {} + for (const entry of PERMISSION_CATALOG) { + const hasWrite = + entry.writeScopes.length > 0 && entry.writeScopes.every((scope) => granted.has(scope)) + const hasRead = + entry.readScopes.length > 0 && entry.readScopes.every((scope) => granted.has(scope)) + if (hasWrite) selection[entry.key] = 'readwrite' + else if (hasRead) selection[entry.key] = 'read' + } + return selection +} + +export const countConfiguredInCategory = ( + selection: PermissionSelection, + categoryKey: PermissionCategoryKey +): number => + PERMISSION_CATALOG.filter( + (entry) => entry.category === categoryKey && (selection[entry.key] ?? 'none') !== 'none' + ).length + +export const countConfigured = (selection: PermissionSelection): number => + Object.values(selection).filter((mode) => mode !== 'none').length + +export const RISK_LEVEL_LABEL: Record = { + low: 'Low risk', + medium: 'Medium risk', + high: 'High risk', +} + +export type ResourceAccessMode = 'project' | 'organization' | 'account' + +export interface OverallRisk { + /** Minimal | Low | Medium | Elevated | High */ + level: string + text: string + tone: 'default' | 'low' | 'medium' | 'high' +} + +/** + * Computes the overall token risk from the selected capabilities and the resource-access breadth. + * Account-level tokens are never below "Elevated", even when read-only. + */ +export const computeOverallRisk = ( + selection: PermissionSelection, + resourceAccess: ResourceAccessMode +): OverallRisk => { + const active = Object.entries(selection).filter(([, mode]) => mode !== 'none') + if (active.length === 0) { + return { level: 'Minimal', text: 'Minimal β€” no capabilities', tone: 'default' } + } + + const anyWrite = active.some(([, mode]) => mode === 'readwrite') + const anyHighWrite = active.some( + ([key, mode]) => mode === 'readwrite' && CATALOG_BY_KEY.get(key)?.risk === 'high' + ) + + const scopeWord = + resourceAccess === 'account' + ? 'account-wide' + : resourceAccess === 'organization' + ? 'organization-wide' + : 'single-project' + const accessWord = anyWrite ? 'read-write' : 'read-only' + + let level: string + let tone: OverallRisk['tone'] + if (resourceAccess === 'account') { + level = anyWrite ? 'High' : 'Elevated' + tone = anyWrite ? 'high' : 'medium' + } else if (anyHighWrite) { + level = 'High' + tone = 'high' + } else if (anyWrite) { + level = 'Medium' + tone = 'medium' + } else { + level = 'Low' + tone = 'low' + } + + return { level, text: `${level} β€” ${scopeWord} ${accessWord} access`, tone } +} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/AccessTokenList.tsx b/apps/studio/components/interfaces/Account/AccessTokens/AccessTokenList.tsx index e18648d1cc6..72de6b84163 100644 --- a/apps/studio/components/interfaces/Account/AccessTokens/AccessTokenList.tsx +++ b/apps/studio/components/interfaces/Account/AccessTokens/AccessTokenList.tsx @@ -1,4 +1,4 @@ -import { MoreVertical, Trash } from 'lucide-react' +import { Key, MoreVertical, Trash } from 'lucide-react' import { parseAsStringLiteral, useQueryState } from 'nuqs' import { useMemo, useState } from 'react' import { toast } from 'sonner' @@ -21,38 +21,59 @@ import { filterAndSortTokens, handleSortChange } from './AccessToken.utils' import { RowLoading } from './AccessTokenTable/RowLoading' import { TableContainer } from './AccessTokenTable/TableContainer' import { ExpiresCell, LastUsedCell, TokenNameCell } from './AccessTokenTable/TokenCells' +import { useMergedAccessTokens, type MergedAccessToken } from './hooks/useMergedAccessTokens' +import { ViewTokenSheet } from './Scoped/ViewTokenSheet' import { AlertError } from '@/components/ui/AlertError' import { useAccessTokenDeleteMutation } from '@/data/access-tokens/access-tokens-delete-mutation' -import { AccessToken, useAccessTokensQuery } from '@/data/access-tokens/access-tokens-query' +import { useScopedAccessTokenDeleteMutation } from '@/data/scoped-access-tokens/scoped-access-tokens-delete-mutation' import { useTrack } from '@/lib/telemetry/track' export interface AccessTokenListProps { searchString?: string - onDeleteSuccess: (id: number) => void + scopedTokensEnabled?: boolean + onDeleteSuccess: (id: number | string) => void } -export const AccessTokenList = ({ searchString = '', onDeleteSuccess }: AccessTokenListProps) => { +export const AccessTokenList = ({ + searchString = '', + scopedTokensEnabled, + onDeleteSuccess, +}: AccessTokenListProps) => { const track = useTrack() - const [isOpen, setIsOpen] = useState(false) - const [token, setToken] = useState(undefined) + const [tokenToShow, setTokenToShow] = useState(undefined) + const [tokenToDelete, setTokenToDelete] = useState(undefined) const [sort, setSort] = useQueryState( 'sort', parseAsStringLiteral(ACCESS_TOKEN_SORT_VALUES).withDefault('created_at:desc') ) - const { data: tokens, error, isPending: isLoading, isError } = useAccessTokensQuery() + const { tokens, error, isLoading, isError } = useMergedAccessTokens({ scopedTokensEnabled }) - const { mutate: deleteToken } = useAccessTokenDeleteMutation({ - onSuccess: (_, vars) => { - track('access_token_removed', { tokenType: 'classic' }) - onDeleteSuccess(vars.id) - toast.success('Successfully deleted access token') - setIsOpen(false) - }, - onError: (error) => { - toast.error(`Failed to delete access token: ${error.message}`) - }, - }) + const { mutate: deleteClassicToken, isPending: isPendingClassicToken } = + useAccessTokenDeleteMutation({ + onSuccess: (_, vars) => { + track('access_token_removed', { tokenType: 'classic' }) + onDeleteSuccess(vars.id) + toast.success('Successfully deleted access token') + setTokenToDelete(undefined) + }, + onError: (error) => { + toast.error(`Failed to delete access token: ${error.message}`) + }, + }) + + const { mutate: deleteScopedToken, isPending: isPendingScopedToken } = + useScopedAccessTokenDeleteMutation({ + onSuccess: (_, vars) => { + track('access_token_removed', { tokenType: 'scoped' }) + onDeleteSuccess(vars.id) + toast.success('Successfully deleted access token') + setTokenToDelete(undefined) + }, + onError: (error) => { + toast.error(`Failed to delete access token: ${error.message}`) + }, + }) const onSortChange = (column: AccessTokenSortColumn) => { handleSortChange(sort, column, setSort) @@ -65,6 +86,12 @@ export const AccessTokenList = ({ searchString = '', onDeleteSuccess }: AccessTo const empty = filteredTokens?.length === 0 && !isLoading + const handleConfirmDelete = () => { + if (!tokenToDelete) return + if (tokenToDelete.kind === 'classic') deleteClassicToken({ id: tokenToDelete.id as number }) + else deleteScopedToken({ id: tokenToDelete.id as string }) + } + if (isError) { return ( @@ -110,7 +137,12 @@ export const AccessTokenList = ({ searchString = '', onDeleteSuccess }: AccessTo {filteredTokens?.map((x) => ( - + @@ -119,19 +151,19 @@ export const AccessTokenList = ({ searchString = '', onDeleteSuccess }: AccessTo + + + } + > +
    +

    + We recommend granting each new token the minimum access its integration needs. +

    + + Pre-existing tokens are marked with a Legacy badge and will continue to + work until expiry or deletion. + +
    + + ) +} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenForm.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenForm.tsx new file mode 100644 index 00000000000..e4a79d3ee59 --- /dev/null +++ b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenForm.tsx @@ -0,0 +1,144 @@ +import { zodResolver } from '@hookform/resolvers/zod' +import { ChevronRight } from 'lucide-react' +import { useEffect, useRef, useState } from 'react' +import { useForm, useWatch } from 'react-hook-form' +import { toast } from 'sonner' +import { Button, Form, ScrollArea, Separator, SheetClose, SheetFooter } from 'ui' +import { Admonition } from 'ui-patterns/Admonition' + +import { countConfigured, PermissionMode } from '../../AccessToken.permissions' +import { DEFAULT_EXPIRY, TokenFormSchema, TokenFormValues } from './NewScopedTokenForm.utils' +import { NewScopedTokenFormReview } from './NewScopedTokenFormReview' +import { PermissionsAccordion } from './PermissionsAccordion' +import { ResourceAccessStep } from './ResourceAccessStep' +import { StepIndicator } from './StepIndicator' +import { TokenDetails } from './TokenDetails' +import { useGetEnabledEndpointsForCapability } from '@/data/scoped-access-tokens/permission-scope-map-query' + +const FORM_ID = 'scoped-token-form' + +const DEFAULT_VALUES: TokenFormValues = { + tokenName: '', + expiresAt: DEFAULT_EXPIRY, + customExpiryDate: undefined, + resourceAccess: 'project', + organizationSlugs: [], + projectRefs: [], + accountConfirmed: false, + permissions: {}, +} + +export const NewScopedTokenForm = ({ + isPending, + onCreateToken, + onCancel, +}: { + isPending: boolean + onCreateToken: (values: TokenFormValues) => void + onCancel: () => void +}) => { + const form = useForm({ + resolver: zodResolver(TokenFormSchema), + validate: ({ formValues }) => { + if (formValues.resourceAccess === 'account') { + if (!formValues.accountConfirmed) return 'Confirm account-level access to continue.' + } + return true + }, + defaultValues: DEFAULT_VALUES, + mode: 'onChange', + }) + const [step, setStep] = useState<'form' | 'review'>('form') + const [formValues, setFormValues] = useState(DEFAULT_VALUES) + const [showMissingPermissionsWarning, setShowMissingPermissionsWarning] = useState(false) + const resourceSectionRef = useRef(null) + const selection = useWatch({ control: form.control, name: 'permissions' }) + const configuredCount = useWatch({ + control: form.control, + name: 'permissions', + compute: (selection) => countConfigured(selection), + }) + + const { data: permissionScopeMap, isError } = useGetEnabledEndpointsForCapability() + + useEffect(() => { + if (isError) { + toast.error('Something went wrong, try again') + onCancel() + } + }, [onCancel, isError]) + + const handleReviewAccess = async (values: TokenFormValues) => { + if (configuredCount === 0) { + setShowMissingPermissionsWarning(true) + return + } + setFormValues(values) + setStep('review') + } + + const handlePermissionChange = (key: string, mode: PermissionMode) => { + form.setValue('permissions', { ...selection, [key]: mode }) + if (mode !== 'none') setShowMissingPermissionsWarning(false) + } + + return ( + <> + + {step === 'form' ? ( +
    + + + +
    + +
    + + + {showMissingPermissionsWarning && ( +
    + { + node?.scrollIntoView() + }} + type="warning" + title="No permissions selected" + description="This token won't be able to do anything until you grant at least one permission." + /> +
    + )} + + + ) : ( + + )} +
    + + +
    + {step === 'review' && ( + + )} + + + + {step === 'form' ? ( + + ) : ( + + )} +
    +
    + + ) +} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenForm.utils.ts b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenForm.utils.ts new file mode 100644 index 00000000000..5adb798be82 --- /dev/null +++ b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenForm.utils.ts @@ -0,0 +1,100 @@ +import dayjs from 'dayjs' +import { z } from 'zod' + +import type { PermissionMode } from '../../AccessToken.permissions' + +export const EXPIRY_PRESETS = ['24h', '7d', '30d', '90d', 'custom'] as const +export type ExpiryPreset = (typeof EXPIRY_PRESETS)[number] + +export const DEFAULT_EXPIRY: ExpiryPreset = '7d' + +export interface ExpiryOption { + value: ExpiryPreset + label: string + recommended?: boolean +} + +export const EXPIRY_OPTIONS: ExpiryOption[] = [ + { value: '24h', label: '24 hours' }, + { value: '7d', label: '7 days', recommended: true }, + { value: '30d', label: '30 days' }, + { value: '90d', label: '90 days' }, + { value: 'custom', label: 'Custom' }, +] + +/** Resolves the final ISO expiry date for a preset, or `undefined` when the caller supplies a custom date. */ +export const getExpiryDate = (preset: ExpiryPreset): string | undefined => { + switch (preset) { + case '24h': + return dayjs().add(24, 'hours').toISOString() + case '7d': + return dayjs().add(7, 'days').toISOString() + case '30d': + return dayjs().add(30, 'days').toISOString() + case '90d': + return dayjs().add(90, 'days').toISOString() + default: + return undefined + } +} + +/** The default custom date sits ~7 days out, matching the recommended preset. */ +export const getDefaultCustomExpiryDate = (): string => + dayjs().add(7, 'days').endOf('day').toISOString() + +export const RESOURCE_ACCESS_MODES = ['project', 'organization', 'account'] as const + +/** + * The form schema is intentionally permissive: resource-selection and permission-count validation + * happen imperatively on step transitions so errors only surface after an attempt (never + * preemptively), and can be scrolled into view. Zod only guards always-required basics. + */ +export const TokenFormSchema = z + .object({ + tokenName: z.string().trim().min(1, 'Please enter a name for the token'), + expiresAt: z.enum(EXPIRY_PRESETS), + customExpiryDate: z.string().datetime().optional(), + resourceAccess: z.enum(RESOURCE_ACCESS_MODES), + organizationSlugs: z.string().array().optional().default([]), + projectRefs: z.string().array().optional().default([]), + accountConfirmed: z.boolean().optional(), + permissions: z.record(z.string(), z.enum(['none', 'read', 'readwrite'])), + }) + .superRefine((data, ctx) => { + if (data.expiresAt === 'custom' && !data.customExpiryDate) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + message: 'Required', + path: ['customExpiryDate'], + }) + } + + if (data.resourceAccess === 'project') { + if (data.organizationSlugs.length === 0) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + message: 'Please select an organization to continue.', + path: ['organizationSlugs'], + }) + } + if (data.projectRefs.length === 0) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + message: 'Please select a project to continue.', + path: ['projectRefs'], + }) + } + } + + if (data.resourceAccess === 'organization' && data.organizationSlugs.length === 0) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + message: 'Please select an organization to continue.', + path: ['organizationSlugs'], + }) + } + }) + +export type TokenFormValues = Omit, 'permissions'> & { + permissions: Record +} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenFormReview.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenFormReview.tsx new file mode 100644 index 00000000000..285cb009a9a --- /dev/null +++ b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenFormReview.tsx @@ -0,0 +1,274 @@ +import dayjs from 'dayjs' +import { useMemo } from 'react' +import { Badge, cn } from 'ui' +import { Admonition } from 'ui-patterns/Admonition' + +import { + computeOverallRisk, + PERMISSION_CATALOG_BY_CATEGORY, + selectionToScopes, + type OverallRisk, + type PermissionCatalogEntry, + type PermissionMode, + type RiskLevel, +} from '../../AccessToken.permissions' +import { useOrgAndProjectData } from '../../hooks/useOrgAndProjectData' +import { EXPIRY_OPTIONS, type TokenFormValues } from './NewScopedTokenForm.utils' +import { + getEnabledEndpointsForCapability, + getEnabledMcpTools, + PermissionScopeMap, +} from '@/data/scoped-access-tokens/permission-scope-map-query' + +interface ReviewStepProps { + values: TokenFormValues + permissionScopeMap: PermissionScopeMap | undefined +} + +const RISK_TONE_VARIANT: Record< + OverallRisk['tone'], + 'default' | 'success' | 'warning' | 'destructive' +> = { + default: 'default', + low: 'success', + medium: 'warning', + high: 'destructive', +} + +const modeLabel = (mode: PermissionMode) => + mode === 'readwrite' ? 'Read-write' : mode === 'read' ? 'Read' : 'None' + +const RISK_DOT_CLASS: Record = { + low: 'bg-brand-600', + medium: 'bg-warning-600', + high: 'bg-destructive-600', +} + +export const NewScopedTokenFormReview = ({ values, permissionScopeMap }: ReviewStepProps) => { + const { organizations, projects } = useOrgAndProjectData() + const selection = values.permissions + const grantedScopes = useMemo(() => selectionToScopes(selection), [selection]) + const risk = useMemo( + () => computeOverallRisk(selection, values.resourceAccess), + [selection, values.resourceAccess] + ) + + const resourceSummary = useMemo(() => { + if (values.resourceAccess === 'project') { + const selectedProjects = projects.filter((p) => values.projectRefs.includes(p.ref)) + return { + title: 'Project', + items: selectedProjects.length > 0 ? selectedProjects.map((p) => p.name) : ['-'], + } + } + if (values.resourceAccess === 'organization') { + const selectedOrganizations = organizations.filter((o) => + values.organizationSlugs.includes(o.slug) + ) + return { + title: 'Organization', + items: selectedOrganizations.length > 0 ? selectedOrganizations.map((o) => o.name) : ['-'], + } + } + return { title: 'Account', items: ['Account-level access'] } + }, [values, projects, organizations]) + + const expiresSummary = useMemo(() => { + if (values.expiresAt === 'custom') { + return values.customExpiryDate + ? dayjs(values.customExpiryDate).format('DD MMM, YYYY') + : 'Custom β€” no date set' + } + return EXPIRY_OPTIONS.find((o) => o.value === values.expiresAt)?.label ?? values.expiresAt + }, [values]) + + const activeByCategory = useMemo( + () => + PERMISSION_CATALOG_BY_CATEGORY.map((category) => ({ + ...category, + entries: category.entries + .map((entry) => ({ entry, mode: selection[entry.key] ?? 'none' })) + .filter(({ mode }) => mode !== 'none'), + })).filter((category) => category.entries.length > 0), + [selection] + ) + + const hasCapabilities = grantedScopes.length > 0 + + const mcpTools = useMemo( + () => getEnabledMcpTools({ grantedScopes, permissionScopeMap }), + [grantedScopes, permissionScopeMap] + ) + + const capabilityGroups = useMemo(() => { + const groups: { entry: PermissionCatalogEntry; mode: PermissionMode; endpoints: string[][] }[] = + [] + for (const category of activeByCategory) { + for (const { entry, mode } of category.entries) { + const capabilityScopes = + mode === 'readwrite' ? [...entry.readScopes, ...entry.writeScopes] : entry.readScopes + const endpoints = getEnabledEndpointsForCapability({ + capabilityScopes, + allGrantedScopes: grantedScopes, + permissionScopeMap, + }) + if (endpoints.length > 0) { + groups.push({ entry, mode, endpoints: endpoints.map((e) => [e.method, e.path]) }) + } + } + } + return groups + }, [activeByCategory, grantedScopes, permissionScopeMap]) + + const rows: [string, React.ReactNode][] = [ + ['Name', values.tokenName || Untitled token], + ['Expires', expiresSummary], + [ + 'Resource access', +
    +

    + {resourceSummary.title} +

    +
    + {resourceSummary.items.map((item) => ( +

    + {item} +

    + ))} +
    +
    , + ], + [ + 'Capabilities', + hasCapabilities ? ( +
    + {activeByCategory.map((category) => ( +
    +

    + {category.name} +

    +
    + {category.entries.map(({ entry, mode }) => ( +
    + + + {entry.name} + + + {modeLabel(mode)} + +
    + ))} +
    +
    + ))} +
    + ) : ( + No capabilities selected + ), + ], + [ + 'Risk level', + + + {risk.level} Risk + + + {risk.text.replace(`${risk.level} β€” `, '')} + + , + ], + ] + + return ( +
    + {hasCapabilities ? ( + + ) : ( + + )} +
    +

    Token summary

    +
    + {rows.map(([key, value]) => ( +
    +
    {key}
    +
    {value}
    +
    + ))} +
    +
    + + {hasCapabilities && ( + <> +
    +

    Management API endpoints enabled

    + {capabilityGroups.length === 0 ? ( +

    + No Management API endpoints are enabled by the selected capabilities. +

    + ) : ( + capabilityGroups.map(({ entry, mode, endpoints }) => ( +
    +
    + {entry.name} + + {mode === 'readwrite' ? 'Read-write' : 'Read'} + +
    +
    + {endpoints.map(([method, path]) => ( +
    + {method} + {path} +
    + ))} +
    +
    + )) + )} +
    + +
    +

    MCP tools

    + {mcpTools.length === 0 ? ( +

    + No MCP tools are enabled by the selected capabilities. +

    + ) : ( +
    + {mcpTools.map((tool) => ( + + {tool} + + ))} +
    + )} +
    + + )} +
    + ) +} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenSuccess.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenSuccess.tsx new file mode 100644 index 00000000000..5023f82b78b --- /dev/null +++ b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenSuccess.tsx @@ -0,0 +1,65 @@ +import { useState } from 'react' +import { toast } from 'sonner' +import { Button, Checkbox, ScrollArea, SheetFooter } from 'ui' +import { Admonition } from 'ui-patterns/Admonition' +import { Input } from 'ui-patterns/DataInputs/Input' + +interface TokenSuccessProps { + tokenName: string + tokenValue: string + onClose: () => void +} + +export const NewScopedTokenSuccess = ({ tokenName, tokenValue, onClose }: TokenSuccessProps) => { + const [keyCopied, setKeyCopied] = useState(false) + + return ( + <> + +
    +
    +

    Token created

    +

    + Copy your new token{tokenName ? ` "${tokenName}"` : ''} and store it somewhere safe. +

    +
    + + {}} + aria-label={`${tokenName} token`} + onCopy={() => toast.success('Token copied to clipboard')} + /> + + + {/* eslint-disable-next-line jsx-a11y/label-has-associated-control */} + + +
    +
    + + + + + ) +} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/PermissionRow.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/PermissionRow.tsx new file mode 100644 index 00000000000..43de879e201 --- /dev/null +++ b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/PermissionRow.tsx @@ -0,0 +1,54 @@ +import { Label, Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from 'ui' + +import type { PermissionCatalogEntry, PermissionMode } from '../../AccessToken.permissions' +import { RiskMarker } from './RiskMarker' +import { PermissionScopeMap } from '@/data/scoped-access-tokens/permission-scope-map-query' + +interface PermissionRowProps { + entry: PermissionCatalogEntry + mode: PermissionMode + onChange: (mode: PermissionMode) => void + permissionScopeMap: PermissionScopeMap | undefined +} + +export const PermissionRow = ({ + entry, + mode, + onChange, + permissionScopeMap, +}: PermissionRowProps) => { + return ( +
    +
    + + + + +

    + {entry.description} +

    +
    + +
    + +
    +
    + ) +} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/PermissionsAccordion.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/PermissionsAccordion.tsx new file mode 100644 index 00000000000..ebae7ae16c9 --- /dev/null +++ b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/PermissionsAccordion.tsx @@ -0,0 +1,86 @@ +import { useState } from 'react' +import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, cn } from 'ui' + +import { + countConfiguredInCategory, + PERMISSION_CATALOG_BY_CATEGORY, + type PermissionMode, + type PermissionSelection, +} from '../../AccessToken.permissions' +import { PermissionRow } from './PermissionRow' +import { PermissionScopeMap } from '@/data/scoped-access-tokens/permission-scope-map-query' + +interface PermissionsAccordionProps { + selection: PermissionSelection + onChange: (key: string, mode: PermissionMode) => void + permissionScopeMap: PermissionScopeMap | undefined +} + +export const PermissionsAccordion = ({ + selection, + onChange, + permissionScopeMap, +}: PermissionsAccordionProps) => { + const [openCategories, setOpenCategories] = useState([]) + + return ( +
    +
    +

    Permissions

    +

    + Grant the minimum access this token needs. Everything defaults to None. +

    +
    + + + {PERMISSION_CATALOG_BY_CATEGORY.map((category, index) => { + const configuredCount = countConfiguredInCategory(selection, category.key) + return ( + + +
    +
    + {category.name} + {category.description} +
    + {configuredCount > 0 && ( + + {configuredCount} configured + + )} +
    +
    + +
    + {category.entries.map((entry) => ( +
    + onChange(entry.key, mode)} + permissionScopeMap={permissionScopeMap} + /> +
    + ))} +
    +
    +
    + ) + })} +
    +
    + ) +} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/ResourceAccessStep.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/ResourceAccessStep.tsx new file mode 100644 index 00000000000..587ac573ec4 --- /dev/null +++ b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/ResourceAccessStep.tsx @@ -0,0 +1,367 @@ +import { AnimatePresence, motion, useReducedMotion } from 'framer-motion' +import { useMemo } from 'react' +import type { Control, UseFormSetValue } from 'react-hook-form' +import { + Badge, + Checkbox, + cn, + FormControl, + FormField, + Label, + RadioGroupStacked, + RadioGroupStackedItem, + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, + useWatch, +} from 'ui' +import { Admonition } from 'ui-patterns/Admonition' +import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' +import { + MultiSelector, + MultiSelectorContent, + MultiSelectorInput, + MultiSelectorItem, + MultiSelectorList, + MultiSelectorTrigger, +} from 'ui-patterns/multi-select' + +import type { ResourceAccessMode } from '../../AccessToken.permissions' +import { useOrgAndProjectData } from '../../hooks/useOrgAndProjectData' +import type { TokenFormValues } from './NewScopedTokenForm.utils' +import { ProjectInfoInfinite } from '@/data/projects/projects-infinite-query' +import { Organization } from '@/types' + +interface ResourceAccessStepProps { + control: Control + setValue: UseFormSetValue + + /** Inline error surfaced only after an attempt to advance. */ + error?: string +} + +const CARD_OPTIONS: { + value: Exclude + name: string + description: string + recommended?: boolean +}[] = [ + { + value: 'project', + name: 'Project', + description: 'Access selected projects only.', + recommended: true, + }, + { + value: 'organization', + name: 'Organization', + description: 'Access all projects in selected organizations.', + }, +] + +export const ResourceAccessStep = ({ control, setValue, error }: ResourceAccessStepProps) => { + const { organizations, projects } = useOrgAndProjectData() + const organizationsBySlug = useMemo( + () => + organizations.reduce( + (acc, organization) => { + acc[organization.slug] = organization + return acc + }, + {} as Record + ), + [organizations] + ) + const projectsByRef = useMemo( + () => + projects.reduce( + (acc, project) => { + acc[project.ref] = project + return acc + }, + {} as Record + ), + [projects] + ) + + const resourceAccess = useWatch({ control, name: 'resourceAccess' }) + const organizationSlugs = useWatch({ control, name: 'organizationSlugs', defaultValue: [] }) + const accountConfirmed = useWatch({ control, name: 'accountConfirmed' }) + + const isAccount = resourceAccess === 'account' + const prefersReducedMotion = useReducedMotion() + + const projectsForOrg = useMemo( + () => projects.filter((project) => organizationSlugs.includes(project.organization_slug)), + [projects, organizationSlugs] + ) + + const enableAccountLevel = () => { + setValue('resourceAccess', 'account', { shouldValidate: true }) + setValue('organizationSlugs', []) + setValue('projectRefs', []) + } + + const switchBackToSingleProject = () => { + setValue('resourceAccess', 'project', { shouldValidate: true }) + setValue('accountConfirmed', false) + } + + const exitTransition = prefersReducedMotion + ? { opacity: 0 } + : { opacity: 0, scale: 0.97, filter: 'blur(4px)' } + const enterTransition = prefersReducedMotion ? false : { opacity: 0, y: 16 } + const formBackdropAnimate = isAccount + ? { + opacity: 0.5, + scale: prefersReducedMotion ? 1 : 0.98, + filter: prefersReducedMotion ? 'none' : 'blur(4px)', + } + : { opacity: 1, scale: 1, filter: 'none' } + + return ( +
    + + ( + + Need access to every organization and project?{' '} + +

    + } + id="resourceAccess" + > + + { + field.onChange(value) + // Reset dependent selections when switching modes. + setValue('projectRefs', []) + if (value !== 'account') setValue('accountConfirmed', false) + }} + > + {CARD_OPTIONS.map((option) => ( + +
    + {option.name} + {option.recommended && Recommended} +
    + {option.description} +
    + } + /> + ))} + + + + )} + /> + + {resourceAccess === 'project' && ( + <> + ( + Organization} + id="organizationSlugs" + > + + + + + )} + /> + ( + Projects} + id="projectRefs" + > + + 0 + ? 'Select projects' + : 'Select an organization first' + } + badgeLimit="wrap" + showIcon={true} + deletableBadge + ref={field.ref} + renderValue={(value) => projectsByRef[value]?.name} + className="min-w-auto" + /> + + + + {projectsForOrg.map((project) => ( + + {project.name} + + ))} + + + + + )} + /> + + )} + {resourceAccess === 'organization' && ( + ( + Organizations} + id="organizationSlugs" + > + + organizationsBySlug[value]?.name} + /> + + + + {organizations.map((organization) => ( + + {organization.name} + + ))} + + + + + )} + /> + )} + + + + {isAccount && ( + + +

    + This token can reach every organization and project you have access to. Prefer a + single project or organization unless you specifically need account-wide access. +

    +
    + ( + <> + field.onChange(checked)} + /> + + + )} + /> +
    + +
    + } + /> + + )} + + + {error &&

    {error}

    } + + ) +} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/RiskMarker.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/RiskMarker.tsx new file mode 100644 index 00000000000..a9e5bdf292c --- /dev/null +++ b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/RiskMarker.tsx @@ -0,0 +1,88 @@ +import { Badge, cn, Tooltip, TooltipContent, TooltipTrigger } from 'ui' + +import { + RISK_LEVEL_LABEL, + type PermissionCatalogEntry, + type RiskLevel, +} from '../../AccessToken.permissions' +import { + getMcpToolsForScopes, + PermissionScopeMap, +} from '@/data/scoped-access-tokens/permission-scope-map-query' + +const RISK_VARIANT: Record = { + low: 'success', + medium: 'warning', + high: 'destructive', +} + +interface RiskMarkerProps { + entry: PermissionCatalogEntry + /** When false, renders the dot + label without the explanatory tooltip (used in the review list). */ + withTooltip?: boolean + className?: string + permissionScopeMap: PermissionScopeMap | undefined +} + +export const RiskMarker = ({ + entry, + withTooltip = true, + className, + permissionScopeMap, +}: RiskMarkerProps) => { + const marker = ( + + {RISK_LEVEL_LABEL[entry.risk]} + + ) + + if (!withTooltip) return marker + + const mcpTools = getMcpToolsForScopes({ + scopeIds: [...entry.readScopes, ...entry.writeScopes], + permissionScopeMap, + }) + + return ( + + + {marker} + + + {RISK_LEVEL_LABEL[entry.risk]} +

    {entry.riskReason}

    + {(entry.allowsRead.length > 0 || entry.allowsWrite.length > 0) && ( +
    + {entry.allowsRead.length > 0 && ( + +

    + Read:{' '} +

    + {entry.allowsRead.join(', ')} +
    + )} + {entry.allowsWrite.length > 0 && ( + +

    + Write:{' '} +

    + {entry.allowsWrite.join(', ')} +
    + )} +
    + )} + {mcpTools.length > 0 && ( +
    +

    + MCP tools +

    +

    {mcpTools.join(', ')}

    +
    + )} +
    +
    + ) +} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/StepIndicator.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/StepIndicator.tsx new file mode 100644 index 00000000000..5f371fb08ad --- /dev/null +++ b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/StepIndicator.tsx @@ -0,0 +1,30 @@ +import { cn } from 'ui' + +interface StepIndicatorProps { + /** 1-indexed current step. */ + step: number + total: number + label: string +} + +export const StepIndicator = ({ step, total, label }: StepIndicatorProps) => ( +
    +
    + {Array.from({ length: total }).map((_, index) => ( + + ))} +
    + + + Step {step} of {total} + {' '} + Β· {label} + +
    +) diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/TokenDetails.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/TokenDetails.tsx new file mode 100644 index 00000000000..d4261710611 --- /dev/null +++ b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/TokenDetails.tsx @@ -0,0 +1,134 @@ +import dayjs from 'dayjs' +import type { Control, UseFormSetValue } from 'react-hook-form' +import { + Badge, + Calendar, + FormControl, + FormField, + FormMessage, + Input, + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, + useWatch, +} from 'ui' +import { + DatePicker, + DatePickerButton, + DatePickerContent, + DatePickerTrigger, +} from 'ui-patterns/DatePicker' +import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' + +import { + EXPIRY_OPTIONS, + getDefaultCustomExpiryDate, + type TokenFormValues, +} from './NewScopedTokenForm.utils' + +interface TokenDetailsProps { + control: Control + setValue: UseFormSetValue +} + +export const TokenDetails = ({ control, setValue }: TokenDetailsProps) => { + const customExpiryDate = useWatch({ control, name: 'customExpiryDate' }) + + const handleExpiryChange = (value: string) => { + setValue('expiresAt', value as TokenFormValues['expiresAt'], { shouldValidate: true }) + if (value === 'custom') { + if (!customExpiryDate) { + const iso = getDefaultCustomExpiryDate() + setValue('customExpiryDate', iso, { shouldValidate: true }) + } + } else { + setValue('customExpiryDate', undefined, { shouldValidate: true }) + } + } + + return ( +
    +

    Token details

    + + ( + + + + + + )} + /> + + ( + +
    + + + + + {field.value === 'custom' && ( + { + const value = field.value ? new Date(field.value) : undefined + return ( +
    + + + + {value ? dayjs(value).format('DD MMM, YYYY') : 'Pick a date'} + + + + + field.onChange( + date ? dayjs(date).endOf('day').toISOString() : undefined + ) + } + initialFocus + disabled={{ before: dayjs().startOf('day').toDate() }} + /> + + + +
    + ) + }} + /> + )} +
    +
    + )} + /> +
    + ) +} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/NewScopedTokenButton.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/NewScopedTokenButton.tsx deleted file mode 100644 index 8e25f29e8a9..00000000000 --- a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/NewScopedTokenButton.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { useState } from 'react' -import { Button } from 'ui' - -import { NewScopedTokenSheet } from './NewScopedTokenSheet' -import { type NewScopedAccessToken } from '@/data/scoped-access-tokens/scoped-access-token-create-mutation' - -export interface NewScopedTokenButtonProps { - onCreateToken: (token: NewScopedAccessToken) => void -} - -export const NewScopedTokenButton = ({ onCreateToken }: NewScopedTokenButtonProps) => { - const [visible, setVisible] = useState(false) - - return ( - <> - - - - - ) -} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/NewScopedTokenSheet.test.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/NewScopedTokenSheet.test.tsx new file mode 100644 index 00000000000..7e26582a7af --- /dev/null +++ b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/NewScopedTokenSheet.test.tsx @@ -0,0 +1,282 @@ +import { fireEvent, screen, waitFor } from '@testing-library/react' +import userEvent from '@testing-library/user-event' +import { platformComponents as components } from 'api-types' +import { HttpResponse } from 'msw' +import { beforeEach, describe, expect, test } from 'vitest' + +import { NewScopedTokenSheet } from './NewScopedTokenSheet' +import type { ProfileContextType } from '@/lib/profile' +import { createMockOrganizationResponse, createMockProject } from '@/tests/helpers' +import { customRender } from '@/tests/lib/custom-render' +import { addAPIMock } from '@/tests/lib/msw' + +type OrganizationResponse = components['schemas']['OrganizationResponse'] +type ProjectsResponse = components['schemas']['ListProjectsPaginatedResponse'] +type CreateTokenResponse = components['schemas']['CreateScopedAccessTokenResponse'] + +const user = userEvent.setup({ + writeToClipboard: true, +}) + +const PROFILE_CONTEXT: ProfileContextType = { + profile: { + id: 1, + auth0_id: 'auth0|test', + gotrue_id: 'gotrue-test', + username: 'testuser', + primary_email: 'test@example.com', + first_name: null, + last_name: null, + mobile: null, + is_alpha_user: false, + is_sso_user: false, + disabled_features: [], + free_project_limit: null, + }, + error: null, + isLoading: false, + isError: false, + isSuccess: true, +} + +const mockOrganizations = () => + addAPIMock({ + method: 'get', + path: '/platform/organizations', + response: () => + HttpResponse.json([ + createMockOrganizationResponse({ slug: 'acme-prod', name: 'Acme Production' }), + ]), + }) + +const mockProjects = () => + addAPIMock({ + method: 'get', + path: '/platform/projects', + response: () => + HttpResponse.json({ + pagination: { count: 1, limit: 100, offset: 0 }, + projects: [ + { + ...createMockProject({ + id: 1, + ref: 'project-1', + name: 'Project 1', + organization_id: 1, + }), + organization_slug: 'acme-prod', + preview_branch_refs: [], + }, + ], + }), + }) + +const mockPermissionsMap = () => + addAPIMock({ + method: 'get', + // @ts-expect-error Studio API is missing from types + path: '/scoped-access-token-permissions', + response: () => + HttpResponse.json({ + scopes: {}, + endpoints: {}, + mcp_tools: {}, + }), + }) + +const mockCreateToken = () => + addAPIMock({ + method: 'post', + path: '/platform/profile/scoped-access-tokens', + response: () => + HttpResponse.json({ + created_at: '', + expires_at: null, + id: 'plop', + last_used_at: null, + name: 'test', + token: 'a_token_value', + token_alias: '', + permissions: [], + }), + }) + +/** + * Permission categories render collapsed, so a category has to be expanded before its + * rows are in the DOM. + */ +const expandPermissionCategory = async (name: string) => + fireEvent.click(await screen.findByRole('button', { name: new RegExp(`^${name}`) })) + +describe('NewScopedTokenSheet', () => { + beforeEach(() => { + mockPermissionsMap() + mockOrganizations() + mockProjects() + mockCreateToken() + }) + test('requires a token name', async () => { + customRender(, { profileContext: PROFILE_CONTEXT }) + fireEvent.click(await screen.findByRole('button', { name: 'Generate new token' })) + await screen.findByRole('dialog') + fireEvent.click(await screen.findByRole('button', { name: 'Review access' })) + expect(await screen.findByText('Please enter a name for the token')) + }) + // Project scope tests + test('requires an organization when scope is Project', async () => { + customRender(, { profileContext: PROFILE_CONTEXT }) + fireEvent.click(await screen.findByRole('button', { name: 'Generate new token' })) + await screen.findByRole('dialog') + await user.type(await screen.findByLabelText('Name'), 'test') + fireEvent.click(await screen.findByRole('button', { name: 'Review access' })) + expect(await screen.findByText('Please select an organization to continue.')) + }) + test('requires a project when scope is Project', async () => { + customRender(, { profileContext: PROFILE_CONTEXT }) + fireEvent.click(await screen.findByRole('button', { name: 'Generate new token' })) + await screen.findByRole('dialog') + await user.type(await screen.findByLabelText('Name'), 'test') + fireEvent.click(await screen.findByRole('combobox', { name: 'Organization' })) + fireEvent.click(await screen.findByRole('option', { name: 'Acme Production' })) + fireEvent.click(await screen.findByRole('button', { name: 'Review access' })) + expect(await screen.findByText('Please select a project to continue.')) + }) + test('requires permissions when scope is Project', async () => { + customRender(, { profileContext: PROFILE_CONTEXT }) + fireEvent.click(await screen.findByRole('button', { name: 'Generate new token' })) + await screen.findByRole('dialog') + await user.type(await screen.findByLabelText('Name'), 'test') + fireEvent.click(await screen.findByRole('combobox', { name: 'Organization' })) + fireEvent.click(await screen.findByRole('option', { name: 'Acme Production' })) + fireEvent.click(await screen.findByRole('combobox', { name: 'Projects' })) + fireEvent.click(await screen.findByRole('option', { name: 'Project 1' })) + fireEvent.click(await screen.findByRole('button', { name: 'Review access' })) + expect(await screen.findByText('No permissions selected', { selector: '[role="alert"] *' })) + }) + test('creates the token when scope is Project', async () => { + customRender(, { profileContext: PROFILE_CONTEXT }) + fireEvent.click(await screen.findByRole('button', { name: 'Generate new token' })) + await screen.findByRole('dialog') + await user.type(await screen.findByLabelText('Name'), 'test') + fireEvent.click(await screen.findByRole('combobox', { name: 'Organization' })) + fireEvent.click(await screen.findByRole('option', { name: 'Acme Production' })) + fireEvent.click(await screen.findByRole('combobox', { name: 'Projects' })) + fireEvent.click(await screen.findByRole('option', { name: 'Project 1' })) + await expandPermissionCategory('Project') + fireEvent.click(await screen.findByLabelText('Project Settings', { exact: false })) + fireEvent.click(await screen.findByRole('option', { name: 'Read' })) + fireEvent.click(await screen.findByRole('button', { name: 'Review access' })) + // Review screen + await screen.findByText('Low Risk') + await screen.findByText('single-project read-only access') + fireEvent.click(await screen.findByRole('button', { name: 'Create token' })) + // If we can click this checkbox, the token was created + // Must be a real click, which focuses the button: nothing holds focus once the form + // unmounts, and copyToClipboard bails out when the document has no focus + await user.click(await screen.findByRole('button', { name: 'Copy' })) + await waitFor(async () => + expect(await window.navigator.clipboard.readText()).toEqual('a_token_value') + ) + fireEvent.click(await screen.findByLabelText('I have copied the key and stored it securely')) + fireEvent.click(await screen.findByRole('button', { name: 'Done' })) + // Dialog has been closed + await waitFor(() => expect(screen.queryByRole('dialog')).toBeNull()) + }) + + // Organization scope tests + test('requires an organization when scope is Organization', async () => { + customRender(, { profileContext: PROFILE_CONTEXT }) + fireEvent.click(await screen.findByRole('button', { name: 'Generate new token' })) + await screen.findByRole('dialog') + await user.type(await screen.findByLabelText('Name'), 'test') + await user.click(await screen.findByRole('radio', { name: /Organization/ })) + fireEvent.click(await screen.findByRole('button', { name: 'Review access' })) + expect(await screen.findByText('Please select an organization to continue.')) + }) + test('requires permissions when scope is Organization', async () => { + customRender(, { profileContext: PROFILE_CONTEXT }) + fireEvent.click(await screen.findByRole('button', { name: 'Generate new token' })) + await screen.findByRole('dialog') + await user.type(await screen.findByLabelText('Name'), 'test') + await user.click(await screen.findByRole('radio', { name: /Organization/ })) + fireEvent.click(await screen.findByRole('combobox', { name: 'Organizations' })) + fireEvent.click(await screen.findByRole('option', { name: 'Acme Production' })) + fireEvent.click(await screen.findByRole('button', { name: 'Review access' })) + expect(await screen.findByText('No permissions selected', { selector: '[role="alert"] *' })) + }) + test('creates the token when scope is Organization', async () => { + customRender(, { profileContext: PROFILE_CONTEXT }) + fireEvent.click(await screen.findByRole('button', { name: 'Generate new token' })) + await screen.findByRole('dialog') + await user.type(await screen.findByLabelText('Name'), 'test') + await user.click(await screen.findByRole('radio', { name: /Organization/ })) + fireEvent.click(await screen.findByRole('combobox', { name: 'Organizations' })) + fireEvent.click(await screen.findByRole('option', { name: 'Acme Production' })) + await expandPermissionCategory('Project') + fireEvent.click(await screen.findByLabelText('Project Settings', { exact: false })) + fireEvent.click(await screen.findByRole('option', { name: 'Read' })) + fireEvent.click(await screen.findByRole('button', { name: 'Review access' })) + // Review screen + await screen.findByText('Low Risk') + await screen.findByText('organization-wide read-only access') + fireEvent.click(await screen.findByRole('button', { name: 'Create token' })) + // If we can click this checkbox, the token was created + // Must be a real click, which focuses the button: nothing holds focus once the form + // unmounts, and copyToClipboard bails out when the document has no focus + await user.click(await screen.findByRole('button', { name: 'Copy' })) + await waitFor(async () => + expect(await window.navigator.clipboard.readText()).toEqual('a_token_value') + ) + fireEvent.click(await screen.findByLabelText('I have copied the key and stored it securely')) + fireEvent.click(await screen.findByRole('button', { name: 'Done' })) + // Dialog has been closed + await waitFor(() => expect(screen.queryByRole('dialog')).toBeNull()) + }) + + // Account scope tests + test('requires permissions when scope is Account', async () => { + customRender(, { profileContext: PROFILE_CONTEXT }) + fireEvent.click(await screen.findByRole('button', { name: 'Generate new token' })) + await screen.findByRole('dialog') + await user.type(await screen.findByLabelText('Name'), 'test') + await user.click(await screen.findByText('Advanced options')) + await user.click( + await screen.findByText( + 'I understand this token is not limited to one project or organization.' + ) + ) + fireEvent.click(await screen.findByRole('button', { name: 'Review access' })) + expect(await screen.findByText('No permissions selected', { selector: '[role="alert"] *' })) + }) + test('creates the token when scope is Account', async () => { + customRender(, { profileContext: PROFILE_CONTEXT }) + fireEvent.click(await screen.findByRole('button', { name: 'Generate new token' })) + await screen.findByRole('dialog') + await user.type(await screen.findByLabelText('Name'), 'test') + await user.click(await screen.findByText('Advanced options')) + await user.click( + await screen.findByText( + 'I understand this token is not limited to one project or organization.' + ) + ) + await expandPermissionCategory('Project') + fireEvent.click(await screen.findByLabelText('Project Settings', { exact: false })) + fireEvent.click(await screen.findByRole('option', { name: 'Read' })) + fireEvent.click(await screen.findByRole('button', { name: 'Review access' })) + // Review screen + await screen.findByText('Elevated Risk') + await screen.findByText('account-wide read-only access') + fireEvent.click(await screen.findByRole('button', { name: 'Create token' })) + // If we can click this checkbox, the token was created + // Must be a real click, which focuses the button: nothing holds focus once the form + // unmounts, and copyToClipboard bails out when the document has no focus + await user.click(await screen.findByRole('button', { name: 'Copy' })) + await waitFor(async () => + expect(await window.navigator.clipboard.readText()).toEqual('a_token_value') + ) + fireEvent.click(await screen.findByLabelText('I have copied the key and stored it securely')) + fireEvent.click(await screen.findByRole('button', { name: 'Done' })) + // Dialog has been closed + await waitFor(() => expect(screen.queryByRole('dialog')).toBeNull()) + }) +}) diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/NewScopedTokenSheet.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/NewScopedTokenSheet.tsx index f6e775cc08a..701f1b58646 100644 --- a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/NewScopedTokenSheet.tsx +++ b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/NewScopedTokenSheet.tsx @@ -1,327 +1,103 @@ -import { zodResolver } from '@hookform/resolvers/zod' -import dayjs from 'dayjs' -import { ExternalLink } from 'lucide-react' -import Link from 'next/link' -import { useCallback, useState } from 'react' -import { useForm, useWatch, type SubmitHandler } from 'react-hook-form' +import { useState } from 'react' import { toast } from 'sonner' import { Button, - Form, - ScrollArea, - Separator, Sheet, SheetContent, SheetDescription, - SheetFooter, SheetHeader, SheetTitle, + SheetTrigger, } from 'ui' -import { Admonition } from 'ui-patterns/Admonition' +import { selectionToScopes } from '../AccessToken.permissions' +import { NewScopedTokenForm } from './Form/NewScopedTokenForm' +import { getExpiryDate, type TokenFormValues } from './Form/NewScopedTokenForm.utils' +import { NewScopedTokenSuccess } from './Form/NewScopedTokenSuccess' import { - CUSTOM_EXPIRY_VALUE, - EXPIRES_AT_OPTIONS, - type ScopedAccessTokenPermission, -} from '../AccessToken.constants' -import { TokenSchema, type TokenFormValues } from '../AccessToken.schemas' -import { getExpirationDate, mapPermissionToFGA } from '../AccessToken.utils' -import { useOrgAndProjectData } from '../hooks/useOrgAndProjectData' -import { BasicInfo } from './Form/BasicInfo' -import { Permissions } from './Form/Permissions/Permissions' -import { ResourceAccess } from './Form/ResourceAccess/ResourceAccess' -import { - useAccessTokenCreateMutation, + useScopedAccessTokenCreateMutation, type NewScopedAccessToken, type ScopedAccessTokenCreateVariables, } from '@/data/scoped-access-tokens/scoped-access-token-create-mutation' import { useTrack } from '@/lib/telemetry/track' -export interface NewScopedTokenSheetProps { - visible: boolean - onOpenChange: (open: boolean) => void - tokenScope: 'V0' | undefined - onCreateToken: (token: NewScopedAccessToken) => void -} - -export const NewScopedTokenSheet = ({ - visible, - onOpenChange, - tokenScope, - onCreateToken, -}: NewScopedTokenSheetProps) => { - const [resourceSearchOpen, setResourceSearchOpen] = useState(false) - const { organizations, projects } = useOrgAndProjectData() - - const form = useForm({ - resolver: zodResolver(TokenSchema), - defaultValues: { - tokenName: '', - expiresAt: EXPIRES_AT_OPTIONS['month'].value, - customExpiryDate: undefined, - resourceAccess: 'all-orgs', - selectedOrganizations: [], - selectedProjects: [], - permissionRows: [], - }, - mode: 'onChange', - }) - +export const NewScopedTokenSheet = () => { + const [isOpen, setIsOpen] = useState(false) const track = useTrack() - const { mutate: createAccessToken, isPending } = useAccessTokenCreateMutation() + const { mutate: createToken, isPending } = useScopedAccessTokenCreateMutation() - const resourceAccess = useWatch({ control: form.control, name: 'resourceAccess' }) - const expiresAt = useWatch({ control: form.control, name: 'expiresAt' }) - const permissionRows = useWatch({ control: form.control, name: 'permissionRows' }) || [] + const [step, setStep] = useState<'form' | 'success'>('form') + const [createdToken, setCreatedToken] = useState() - const onSubmit: SubmitHandler = async (values) => { - if (!permissionRows || permissionRows.length === 0) { - toast.error('Please configure at least one permission.') - return - } + const handleCreate = (values: TokenFormValues) => { + const permissions = selectionToScopes(values.permissions) + if (permissions.length === 0) return - const hasValidPermissions = permissionRows.every( - (row) => row.resource && row.actions && row.actions.length > 0 - ) - if (!hasValidPermissions) { - toast.error('Please ensure all permissions have both resource and action selected.') - return - } + const expires_at = + values.expiresAt === 'custom' ? values.customExpiryDate : getExpiryDate(values.expiresAt) - if (values.resourceAccess === 'selected-orgs') { - const selectedOrgs = values.selectedOrganizations || [] - - if (selectedOrgs.length === 0) { - toast.error('Please select at least one organization.') - return - } - - const availableOrgSlugs = organizations.map((org) => org.slug) - const invalidOrgs = selectedOrgs.filter((slug) => !availableOrgSlugs.includes(slug)) - - if (invalidOrgs.length > 0) { - toast.error( - `You don't have access to the following organization(s): ${invalidOrgs.join(', ')}` - ) - return - } - } - - if (values.resourceAccess === 'selected-projects') { - const selectedProjects = values.selectedProjects || [] - - if (selectedProjects.length === 0) { - toast.error('Please select at least one project.') - return - } - - const availableProjectRefs = projects.map((project) => project.ref) - const invalidProjects = selectedProjects.filter((ref) => !availableProjectRefs.includes(ref)) - - if (invalidProjects.length > 0) { - toast.error( - `You don't have access to the following project(s): ${invalidProjects.join(', ')}` - ) - return - } - } - - const finalExpiresAt = - values.expiresAt === CUSTOM_EXPIRY_VALUE - ? values.customExpiryDate - : getExpirationDate(values.expiresAt || '') - - const permissions = permissionRows - .flatMap((row) => { - const { resource, actions } = row - return actions.flatMap((action) => mapPermissionToFGA(resource, action)) - }) - .filter(Boolean) as ScopedAccessTokenPermission[] - - if (!permissions || permissions.length === 0) { - toast.error('Please configure at least one valid permission.') - return - } - - const finalPayload: ScopedAccessTokenCreateVariables = { - name: values.tokenName, + const payload: ScopedAccessTokenCreateVariables = { + name: values.tokenName.trim(), permissions, + ...(expires_at ? { expires_at } : {}), + ...(values.resourceAccess === 'project' ? { project_refs: values.projectRefs } : {}), + ...(values.resourceAccess === 'organization' + ? { organization_slugs: values.organizationSlugs } + : {}), } - if (finalExpiresAt) { - finalPayload.expires_at = finalExpiresAt - } - - if ( - values.resourceAccess === 'selected-orgs' && - values.selectedOrganizations && - values.selectedOrganizations.length > 0 - ) { - finalPayload.organization_slugs = values.selectedOrganizations - } else if ( - values.resourceAccess === 'selected-projects' && - values.selectedProjects && - values.selectedProjects.length > 0 - ) { - finalPayload.project_refs = values.selectedProjects - } - - if (!finalPayload.name || finalPayload.name.trim() === '') { - toast.error('Please enter a token name.') - return - } - - if (!finalPayload.permissions || finalPayload.permissions.length === 0) { - toast.error('Please configure at least one permission.') - return - } - - createAccessToken(finalPayload, { + createToken(payload, { onSuccess: (data) => { track('access_token_created', { tokenType: 'scoped', - expiryPreset: values.expiresAt || 'never', + expiryPreset: values.expiresAt, resourceAccess: values.resourceAccess, permissionCount: permissions.length, }) toast.success('Access token created successfully') - onCreateToken(data) - handleClose() - }, - onError: (error) => { - if (error.message && error.message.includes("don't have access")) { - toast.error( - `Access Error: ${error.message}. Please verify you have access to the selected resources.` - ) - } else { - toast.error(`Failed to create access token: ${error.message}`) - } + setCreatedToken(data) + setStep('success') }, }) } - const handleClose = () => { - form.reset({ - tokenName: '', - expiresAt: EXPIRES_AT_OPTIONS['month'].value, - customExpiryDate: undefined, - resourceAccess: 'all-orgs', - selectedOrganizations: [], - selectedProjects: [], - permissionRows: [], - }) - onOpenChange(false) + // By default, if users created a token successfully, they can't click outside the sheet to close it + // as we need to make sure they copied the new token first + const handleOpenChange = (open: boolean, isSafe = false) => { + if (open === false && step === 'success' && !isSafe) return + setStep('form') + setIsOpen(open) } - const handleCustomDateChange = useCallback( - (date: { date: string } | undefined) => { - form.setValue('customExpiryDate', date?.date, { shouldValidate: true }) - }, - [form] - ) - - const handleCustomExpiryChange = useCallback( - (isCustom: boolean) => { - if (isCustom && !form.getValues('customExpiryDate')) { - form.setValue('customExpiryDate', dayjs().endOf('day').toISOString(), { - shouldValidate: true, - }) - } - if (!isCustom) { - form.setValue('customExpiryDate', undefined, { shouldValidate: true }) - } - }, - [form] - ) - return ( - { - if (!open) { - handleClose() - } else { - onOpenChange(open) - } - }} - > + + + + - - {tokenScope === 'V0' ? 'Generate token for experimental API' : 'Generate New Token'} - + {step === 'success' ? 'Token created' : 'Generate token'} - A form to generate a new scoped access token. + Generate a new scoped access token in two steps: configure, then review. - -
    - {tokenScope === 'V0' && ( -
    - -

    - These include deleting organizations and projects which cannot be undone. As - such, be very careful when using this API. -

    -
    - -
    - - } - /> -
    - )} - -
    -
    - - - - - -
    -
    -
    -
    - -
    - - -
    -
    + {step === 'success' && createdToken ? ( + handleOpenChange(false, true)} + /> + ) : ( + handleOpenChange(false, true)} + /> + )}
    ) diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/ScopedTokenList.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/ScopedTokenList.tsx deleted file mode 100644 index a902a92966a..00000000000 --- a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/ScopedTokenList.tsx +++ /dev/null @@ -1,190 +0,0 @@ -import { Key, MoreVertical, Trash } from 'lucide-react' -import { parseAsStringLiteral, useQueryState } from 'nuqs' -import { useMemo, useState } from 'react' -import { toast } from 'sonner' -import { - Button, - DropdownMenu, - DropdownMenuContent, - DropdownMenuItem, - DropdownMenuTrigger, -} from 'ui' -import ConfirmationModal from 'ui-patterns/Dialogs/ConfirmationModal' -import { TableCell, TableRow } from 'ui/src/components/shadcn/ui/table' - -import { - ACCESS_TOKEN_SORT_VALUES, - AccessTokenSort, - AccessTokenSortColumn, -} from '../AccessToken.types' -import { filterAndSortTokens, handleSortChange } from '../AccessToken.utils' -import { RowLoading } from '../AccessTokenTable/RowLoading' -import { TableContainer } from '../AccessTokenTable/TableContainer' -import { ExpiresCell, LastUsedCell, TokenNameCell } from '../AccessTokenTable/TokenCells' -import { ViewTokenSheet } from './ViewTokenSheet' -import { AlertError } from '@/components/ui/AlertError' -import { - ScopedAccessToken, - useScopedAccessTokensQuery, -} from '@/data/scoped-access-tokens/scoped-access-token-query' -import { useScopedAccessTokenDeleteMutation } from '@/data/scoped-access-tokens/scoped-access-tokens-delete-mutation' -import { useTrack } from '@/lib/telemetry/track' - -export interface ScopedTokenListProps { - searchString?: string - onDeleteSuccess: (id: string | number) => void -} - -export const ScopedTokenList = ({ searchString = '', onDeleteSuccess }: ScopedTokenListProps) => { - const track = useTrack() - const [isOpen, setIsOpen] = useState(false) - const [token, setToken] = useState(undefined) - const [viewToken, setViewToken] = useState(undefined) - const [isViewSheetOpen, setIsViewSheetOpen] = useState(false) - const [sort, setSort] = useQueryState( - 'sort', - parseAsStringLiteral(ACCESS_TOKEN_SORT_VALUES).withDefault('created_at:desc') - ) - - const { data: tokensData, error, isPending: isLoading, isError } = useScopedAccessTokensQuery() - - const tokens = tokensData?.tokens - - const { mutate: deleteToken } = useScopedAccessTokenDeleteMutation({ - onSuccess: (_, vars) => { - track('access_token_removed', { tokenType: 'scoped' }) - onDeleteSuccess(vars.id) - toast.success('Successfully deleted access token') - setIsOpen(false) - }, - onError: (error) => { - toast.error(`Failed to delete access token: ${error.message}`) - }, - }) - - const onSortChange = (column: AccessTokenSortColumn) => { - handleSortChange(sort, column, setSort) - } - - const filteredTokens = useMemo( - () => filterAndSortTokens(tokens, searchString, sort), - [tokens, searchString, sort] - ) - - const empty = filteredTokens?.length === 0 && !isLoading - - if (isError) { - return ( - - - - - - - - ) - } - - if (isLoading) { - return ( - - - - - ) - } - - if (empty) { - return ( - - - -

    No scoped access tokens found

    -

    - You do not have any scoped tokens created yet -

    -
    -
    -
    - ) - } - - return ( - <> - - {filteredTokens?.map((x) => ( - - - - - -
    - - -
    -
    -
    - ))} -
    - - setIsOpen(false)} - onConfirm={() => { - if (token) deleteToken({ id: token.id as string }) - }} - > -

    - This action cannot be undone. Are you sure you want to delete "{token?.name}" token? -

    -
    - - { - setIsViewSheetOpen(false) - setViewToken(undefined) - }} - /> - - ) -} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/ViewTokenSheet.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/ViewTokenSheet.tsx index e6f16ba25c0..7c2b2f8a5b9 100644 --- a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/ViewTokenSheet.tsx +++ b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/ViewTokenSheet.tsx @@ -1,26 +1,25 @@ import dayjs from 'dayjs' import { useMemo } from 'react' -import { - Card, - CardContent, - cn, - ScrollArea, - Sheet, - SheetContent, - SheetHeader, - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow, -} from 'ui' +import { Badge, cn, ScrollArea, Sheet, SheetContent, SheetHeader } from 'ui' import { TimestampInfo } from 'ui-patterns/TimestampInfo' -import { ACCESS_TOKEN_RESOURCES } from '../AccessToken.constants' -import { formatAccessText, getRealAccess } from '../AccessToken.utils' +import { + computeOverallRisk, + PERMISSION_CATALOG_BY_CATEGORY, + scopesToSelection, + type OverallRisk, + type PermissionCatalogEntry, + type PermissionMode, + type ResourceAccessMode, + type RiskLevel, +} from '../AccessToken.permissions' import { useOrgAndProjectData } from '../hooks/useOrgAndProjectData' import { DocsButton } from '@/components/ui/DocsButton' +import { + getEnabledEndpointsForCapability, + getEnabledMcpTools, + useGetEnabledEndpointsForCapability, +} from '@/data/scoped-access-tokens/permission-scope-map-query' import { useScopedAccessTokenQuery } from '@/data/scoped-access-tokens/scoped-access-token-query' import { DOCS_URL } from '@/lib/constants' @@ -30,8 +29,34 @@ interface ViewTokenSheetProps { onClose: () => void } +const RISK_TONE_VARIANT: Record< + OverallRisk['tone'], + 'default' | 'success' | 'warning' | 'destructive' +> = { + default: 'default', + low: 'success', + medium: 'warning', + high: 'destructive', +} + +const RISK_DOT_CLASS: Record = { + low: 'bg-brand-600', + medium: 'bg-warning-600', + high: 'bg-destructive-600', +} + +const modeLabel = (mode: PermissionMode) => + mode === 'readwrite' ? 'Read-write' : mode === 'read' ? 'Read' : 'None' + +const SCOPE_TO_RESOURCE_ACCESS: Record<'user' | 'organization' | 'project', ResourceAccessMode> = { + user: 'account', + organization: 'organization', + project: 'project', +} + export function ViewTokenSheet({ visible, tokenId, onClose }: ViewTokenSheetProps) { const { organizations, projects } = useOrgAndProjectData() + const { data: permissionScopeMap } = useGetEnabledEndpointsForCapability() const { data: token, @@ -46,267 +71,281 @@ export function ViewTokenSheet({ visible, tokenId, onClose }: ViewTokenSheetProp } ) - const groupedResourcesByAccess = useMemo(() => { - const grouped: Record = {} + const resourceAccess = token ? SCOPE_TO_RESOURCE_ACCESS[token.scope] : 'project' + const grantedScopes = useMemo(() => token?.permissions ?? [], [token?.permissions]) - if (!token?.permissions) { - return grouped - } + const selection = useMemo(() => scopesToSelection(grantedScopes), [grantedScopes]) - ACCESS_TOKEN_RESOURCES.forEach((resource) => { - const access = getRealAccess(resource.resource, token.permissions) - if (access !== 'no access') { - const formattedAccess = formatAccessText(access) - if (!grouped[formattedAccess]) { - grouped[formattedAccess] = [] + const risk = useMemo( + () => computeOverallRisk(selection, resourceAccess), + [selection, resourceAccess] + ) + + const activeByCategory = useMemo( + () => + PERMISSION_CATALOG_BY_CATEGORY.map((category) => ({ + ...category, + entries: category.entries + .map((entry) => ({ entry, mode: selection[entry.key] ?? 'none' })) + .filter(({ mode }) => mode !== 'none'), + })).filter((category) => category.entries.length > 0), + [selection] + ) + const hasCapabilities = grantedScopes.length > 0 + + const mcpTools = useMemo( + () => getEnabledMcpTools({ grantedScopes, permissionScopeMap }), + [grantedScopes, permissionScopeMap] + ) + + const capabilityGroups = useMemo(() => { + const groups: { entry: PermissionCatalogEntry; mode: PermissionMode; endpoints: string[][] }[] = + [] + for (const category of activeByCategory) { + for (const { entry, mode } of category.entries) { + const capabilityScopes = + mode === 'readwrite' ? [...entry.readScopes, ...entry.writeScopes] : entry.readScopes + const endpoints = getEnabledEndpointsForCapability({ + capabilityScopes, + allGrantedScopes: grantedScopes, + permissionScopeMap, + }) + if (endpoints.length > 0) { + groups.push({ entry, mode, endpoints: endpoints.map((e) => [e.method, e.path]) }) } - grouped[formattedAccess].push(resource.title) } - }) - - return grouped - }, [token?.permissions]) - - const getResourceAccessInfo = () => { - const resources: Array<{ name: string; type: string; identifier: string }> = [] - - const organizationSlugs = token?.organization_slugs - if (organizationSlugs && Array.isArray(organizationSlugs) && organizationSlugs.length > 0) { - organizationSlugs.forEach((orgSlug: string) => { - const org = organizations.find((o) => o.slug === orgSlug) - resources.push({ - name: org?.name || orgSlug, - type: 'Organization', - identifier: orgSlug, - }) - }) } + return groups + }, [activeByCategory, grantedScopes, permissionScopeMap]) - const projectRefs = token?.project_refs - if (projectRefs && Array.isArray(projectRefs) && projectRefs.length > 0) { - projectRefs.forEach((projectRef: string) => { - const project = projects.find((p) => p.ref === projectRef) - resources.push({ - name: project?.name || projectRef, - type: 'Project', - identifier: projectRef, - }) - }) + const resourceSummary = useMemo(() => { + if (resourceAccess === 'project') { + const selectedProjects = projects.filter((p) => (token?.project_refs ?? []).includes(p.ref)) + return { + title: 'Project', + items: selectedProjects.length > 0 ? selectedProjects.map((p) => p.name) : ['-'], + } } + if (resourceAccess === 'organization') { + const selectedOrganizations = organizations.filter((o) => + (token?.organization_slugs ?? []).includes(o.slug) + ) + return { + title: 'Organization', + items: selectedOrganizations.length > 0 ? selectedOrganizations.map((o) => o.name) : ['-'], + } + } + return { title: 'Account', items: ['Account-level access'] } + }, [resourceAccess, token, projects, organizations]) - return resources - } + const rows: [string, React.ReactNode][] = token + ? [ + [ + 'Created', + token.created_at ? ( + + ) : ( + Unknown + ), + ], + [ + 'Last used', + token.last_used_at ? ( + + ) : ( + Never + ), + ], + [ + 'Expires', + token.expires_at ? ( + + ) : ( + Never + ), + ], + [ + 'Resource access', +
    +

    + {resourceSummary.title} +

    +
    + {resourceSummary.items.map((item) => ( +

    + {item} +

    + ))} +
    +
    , + ], + [ + 'Capabilities', + hasCapabilities ? ( +
    + {activeByCategory.map((category) => ( +
    +

    + {category.name} +

    +
    + {category.entries.map(({ entry, mode }) => ( +
    + + + {entry.name} + + + {modeLabel(mode)} + +
    + ))} +
    +
    + ))} +
    + ) : ( + No capabilities selected + ), + ], + [ + 'Risk level', + + + {risk.level} Risk + + + {risk.text.replace(`${risk.level} β€” `, '')} + + , + ], + ] + : [] return ( - <> - onClose()}> - - -

    - View access for {token?.name} -

    - -
    - -
    - {isTokenLoading && ( -
    -

    Loading token information...

    + onClose()}> + + +

    + View access for {token?.name} +

    + +
    + +
    + {isTokenLoading && ( +
    +

    Loading token information...

    +
    + )} + + {tokenError && ( +
    +

    + Error loading token information. Please try again. +

    +
    + )} + + {token && ( + <> +
    +

    Token summary

    +
    + {rows.map(([key, value]) => ( +
    +
    {key}
    +
    {value}
    +
    + ))} +
    - )} - {tokenError && ( -
    -

    - Error loading token information. Please try again. -

    -
    - )} + {hasCapabilities && ( + <> +
    +

    Management API endpoints enabled

    + {capabilityGroups.length === 0 ? ( +

    + No Management API endpoints are enabled by the selected capabilities. +

    + ) : ( + capabilityGroups.map(({ entry, mode, endpoints }) => ( +
    +
    + {entry.name} + + {mode === 'readwrite' ? 'Read-write' : 'Read'} + +
    +
    + {endpoints.map(([method, path]) => ( +
    + + {method} + + {path} +
    + ))} +
    +
    + )) + )} +
    - {token && ( - <> -
    -

    Token Information

    - - - - - - - Info - - - Date - - - - - - -

    Created

    -
    - - {token?.created_at ? ( - - ) : ( - Unknown - )} - -
    - - -

    Last used

    -
    - - {token?.last_used_at ? ( - - ) : ( - Never - )} - -
    - - -

    Expires

    -
    - - {token?.expires_at ? ( - - ) : ( - Never - )} - -
    -
    -
    -
    -
    -
    - -
    -

    Resource Access

    - - - - - - - Resource - - - Type - - - - - {getResourceAccessInfo().length > 0 ? ( - getResourceAccessInfo().map((resource, index) => ( - - -

    {resource.name}

    -
    - - {resource.type} - -
    - )) - ) : ( - - -

    - {token?.scope === 'organization' - ? token.organization_slugs && - token.organization_slugs.length > 0 - ? 'This token has access to specific organizations.' - : 'This token has no accessible organizations.' - : token?.scope === 'project' - ? token.project_refs && token.project_refs.length > 0 - ? 'This token has access to specific projects.' - : 'This token has no accessible projects.' - : 'This token has access to all resources.'} -

    -
    -
    - )} -
    -
    -
    -
    -
    - -
    -

    Permissions

    - - - - - - - Permission - - - Access - - - - - {Object.keys(groupedResourcesByAccess).length === 0 ? ( - - -

    - No permissions configured for this token. -

    -
    -
    - ) : ( - Object.entries(groupedResourcesByAccess).map( - ([accessLevel, resources]) => { - return resources.map((resource) => ( - - -

    - {resource} -

    -
    - - - {formatAccessText(accessLevel)} - - -
    - )) - } - ) - )} -
    -
    -
    -
    -
    - - )} -
    -
    -
    -
    - +
    +

    MCP tools

    + {mcpTools.length === 0 ? ( +

    + No MCP tools are enabled by the selected capabilities. +

    + ) : ( +
    + {mcpTools.map((tool) => ( + + {tool} + + ))} +
    + )} +
    + + )} + + )} +
    + + + ) } diff --git a/apps/studio/components/interfaces/Account/AccessTokens/hooks/useMergedAccessTokens.ts b/apps/studio/components/interfaces/Account/AccessTokens/hooks/useMergedAccessTokens.ts new file mode 100644 index 00000000000..3a4c14854ab --- /dev/null +++ b/apps/studio/components/interfaces/Account/AccessTokens/hooks/useMergedAccessTokens.ts @@ -0,0 +1,65 @@ +import { useMemo } from 'react' + +import type { BaseToken } from '../AccessToken.types' +import { useAccessTokensQuery } from '@/data/access-tokens/access-tokens-query' +import { useScopedAccessTokensQuery } from '@/data/scoped-access-tokens/scoped-access-token-query' + +export type TokenKind = 'classic' | 'scoped' + +export type MergedAccessToken = ClassicAccessToken | ScopedAccessToken + +export interface ClassicAccessToken extends BaseToken { + id: number + kind: 'classic' +} + +export interface ScopedAccessToken extends BaseToken { + id: string + kind: 'scoped' +} + +interface UseMergedAccessTokensOptions { + /** Whether scoped tokens should be fetched + merged (gated on the scopedPAT flag). */ + scopedTokensEnabled?: boolean +} + +/** + * Merges classic and scoped access tokens into a single list, tagging each row with its `kind`. + * Classic is the baseline (its loading/error state drives the list); scoped failures degrade + * gracefully so a missing/undeployed scoped endpoint never hides classic tokens. Sorting is left to + * the consuming list (via filterAndSortTokens), so this only merges + tags. + */ +export const useMergedAccessTokens = ({ + scopedTokensEnabled, +}: UseMergedAccessTokensOptions = {}) => { + const classic = useAccessTokensQuery() + const scoped = useScopedAccessTokensQuery({ enabled: scopedTokensEnabled }) + + return useMemo(() => { + const classicTokens: MergedAccessToken[] = (classic.data ?? []).map((token) => ({ + ...token, + kind: 'classic', + })) + const scopedTokens: MergedAccessToken[] = (scoped.data?.tokens ?? []).map((token) => ({ + ...token, + kind: 'scoped', + })) + return { + tokens: [...classicTokens, ...scopedTokens], + // Classic drives the primary states; a scoped fetch that is still loading shouldn't block the list. + isLoading: classic.isPending || (scopedTokensEnabled && scoped.isPending), + isError: classic.isError, + error: classic.error, + isSuccess: classic.isSuccess, + } + }, [ + classic.data, + classic.isPending, + classic.isError, + classic.error, + classic.isSuccess, + scoped.data, + scoped.isPending, + scopedTokensEnabled, + ]) +} diff --git a/apps/studio/components/layouts/AccessTokens/AccessTokensLayout.tsx b/apps/studio/components/layouts/AccessTokens/AccessTokensLayout.tsx index 8590e9c817a..b920d79eaf6 100644 --- a/apps/studio/components/layouts/AccessTokens/AccessTokensLayout.tsx +++ b/apps/studio/components/layouts/AccessTokens/AccessTokensLayout.tsx @@ -1,39 +1,14 @@ -import { useFlag } from 'common' -import Link from 'next/link' -import { useRouter } from 'next/router' import { PropsWithChildren } from 'react' -import { NavMenu, NavMenuItem } from 'ui' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, PageHeaderDescription, PageHeaderMeta, - PageHeaderNavigationTabs, PageHeaderSummary, PageHeaderTitle, } from 'ui-patterns/PageHeader' export const AccessTokensLayout = ({ children }: PropsWithChildren) => { - const router = useRouter() - const scopedTokensEnabled = useFlag('scopedPAT') - - const navigationItems = [ - { - label: 'Classic Tokens', - href: `/account/tokens`, - id: 'classic-tokens', - }, - ...(scopedTokensEnabled - ? [ - { - label: 'Scoped Tokens', - href: `/account/tokens/scoped`, - id: 'scoped-tokens', - }, - ] - : []), - ] - const title = 'Access Tokens' const description = 'Create and manage access tokens for API authentication.' @@ -46,20 +21,6 @@ export const AccessTokensLayout = ({ children }: PropsWithChildren) => { {description} - {navigationItems.length > 0 && ( - - - {navigationItems.map((item) => { - const isActive = router.asPath.split('?')[0] === item.href - return ( - - {item.label} - - ) - })} - - - )} {children} diff --git a/apps/studio/data/scoped-access-tokens/keys.ts b/apps/studio/data/scoped-access-tokens/keys.ts index f3dc146c2bf..b1ef15e336e 100644 --- a/apps/studio/data/scoped-access-tokens/keys.ts +++ b/apps/studio/data/scoped-access-tokens/keys.ts @@ -1,4 +1,5 @@ export const scopedAccessTokenKeys = { list: () => ['scoped-access-tokens'] as const, detail: (id: string) => ['scoped-access-tokens', id] as const, + permissions: () => ['scoped-access-token-permissions'], } diff --git a/apps/studio/data/scoped-access-tokens/permission-scope-map-query.ts b/apps/studio/data/scoped-access-tokens/permission-scope-map-query.ts new file mode 100644 index 00000000000..976b6a0d127 --- /dev/null +++ b/apps/studio/data/scoped-access-tokens/permission-scope-map-query.ts @@ -0,0 +1,188 @@ +import { useQuery } from '@tanstack/react-query' + +import { scopedAccessTokenKeys } from './keys' +import { BASE_PATH } from '@/lib/constants' +import { ResponseError } from '@/types' + +/** + * Cross-reference between OpenFGA permission scopes, Management API endpoints, and MCP tools. + */ + +export interface ScopeMapEntry { + endpoints: string[] + mcp_tools: string[] +} + +/* e.g + { + "branching_production_read": { + "endpoints": [ + "GET /v1/branches/{branch_id_or_ref}", + "GET /v1/projects/{ref}/branches", + "GET /v1/projects/{ref}/branches/{name}" + ], + "mcp_tools": [ + "list_branches" + ] + } + } +*/ +export type ScopeMap = Record +// e.g { 'GET /v2/projects/{ref}/analytics/log-drains': ['analytics_config_read'] } +export type EndpointMap = Record +// e.g { 'deploy_edge_function': ['edge_functions_write'] } +export type McpMap = Record + +export interface PermissionScopeMap { + /** scope id -> the endpoints / MCP tools it (partially) authorizes */ + scopes: ScopeMap + /** endpoint -> ALL scopes it requires (conjunctive) */ + endpoints: EndpointMap + /** MCP tool -> ALL scopes it requires (conjunctive) */ + mcp_tools: McpMap +} + +export interface EnabledEndpoint { + /** HTTP method, e.g. "GET" */ + method: string + /** Path, e.g. "/v1/projects/{ref}" */ + path: string + /** The raw "METHOD /path" key */ + raw: string +} + +const splitEndpoint = (raw: string): EnabledEndpoint => { + const spaceIndex = raw.indexOf(' ') + if (spaceIndex === -1) return { method: '', path: raw, raw } + return { method: raw.slice(0, spaceIndex), path: raw.slice(spaceIndex + 1), raw } +} + +/** + * Given the set of granted scope ids, returns the Management API endpoints the token can call. + * An endpoint is only enabled when ALL of its required scopes are granted (conjunctive), which is + * how the mgmt-api `FgaPermissionsGuard` evaluates the `@AuthWithFgaPermissions` decorator. + */ +export const getEnabledEndpoints = ({ + grantedScopes, + permissionScopeMap, +}: { + grantedScopes: Iterable + permissionScopeMap: PermissionScopeMap | undefined +}): EnabledEndpoint[] => { + if (permissionScopeMap == null) return [] + + const granted = new Set(grantedScopes) + return Object.entries(permissionScopeMap.endpoints) + .filter(([, required]) => required.length > 0 && required.every((scope) => granted.has(scope))) + .map(([raw]) => splitEndpoint(raw)) +} + +/** + * Given the set of granted scope ids, returns the MCP tools the token can call. As with endpoints, + * a tool is only enabled when ALL of its required scopes are granted. + */ +export const getEnabledMcpTools = ({ + grantedScopes, + permissionScopeMap, +}: { + grantedScopes: Iterable + permissionScopeMap: PermissionScopeMap | undefined +}): string[] => { + if (permissionScopeMap == null) return [] + + const granted = new Set(grantedScopes) + return Object.entries(permissionScopeMap.mcp_tools) + .filter(([, required]) => required.length > 0 && required.every((scope) => granted.has(scope))) + .map(([tool]) => tool) +} + +/** + * Endpoints that (a) are fully satisfied by the complete granted-scope set AND (b) require at least + * one of `capabilityScopes`. Used by the review step to group enabled endpoints under the capability + * that contributes them, while still honouring dual-scope requirements (a dual-scope endpoint only + * appears once all its scopes are granted, and shows under each contributing capability). + */ +export const getEnabledEndpointsForCapability = ({ + capabilityScopes, + allGrantedScopes, + permissionScopeMap, +}: { + capabilityScopes: Iterable + allGrantedScopes: Iterable + permissionScopeMap: PermissionScopeMap | undefined +}): EnabledEndpoint[] => { + if (permissionScopeMap == null) return [] + + const granted = new Set(allGrantedScopes) + const capability = new Set(capabilityScopes) + return Object.entries(permissionScopeMap.endpoints) + .filter( + ([, required]) => + required.length > 0 && + required.every((scope) => granted.has(scope)) && + required.some((scope) => capability.has(scope)) + ) + .map(([raw]) => splitEndpoint(raw)) +} + +/** + * Informational lookup for the per-permission risk tooltip: the MCP tools associated with any of + * the given scopes. Unlike getEnabledMcpTools this is not conjunctive β€” it surfaces every tool that + * lists one of these scopes, so users can see what a capability relates to before granting it. + */ +export const getMcpToolsForScopes = ({ + scopeIds, + permissionScopeMap, +}: { + scopeIds: Iterable + permissionScopeMap: PermissionScopeMap | undefined +}): string[] => { + if (permissionScopeMap == null) return [] + + const tools = new Set() + for (const id of scopeIds) { + permissionScopeMap.scopes[id]?.mcp_tools.forEach((tool) => tools.add(tool)) + } + return Array.from(tools) +} + +export async function getGetScopedTokenPermissionsForScope(signal?: AbortSignal) { + const response = await fetch(`${BASE_PATH}/api/scoped-access-token-permissions`, { + signal, + method: 'GET', + credentials: 'omit', + headers: { + 'Content-Type': 'application/json', + }, + }) + + if (!response.ok) { + const errorText = await response.text() + console.error('[getScopedAccessTokenPermissions] Failed:', response.status, errorText) + + let retryAfter: number | undefined + const retryAfterHeader = response.headers.get('Retry-After') + if (retryAfterHeader !== null) { + const parsed = Number(retryAfterHeader) + if (Number.isFinite(parsed) && parsed > 0) retryAfter = parsed + } + + throw new ResponseError( + `Failed to fetch scoped access token permissions: ${response.statusText}`, + response.status, + undefined, + retryAfter + ) + } + + return await response.json() +} + +export type ScopedAccessTokenPermissionsForScopeError = ResponseError + +export const useGetEnabledEndpointsForCapability = () => { + return useQuery({ + queryKey: scopedAccessTokenKeys.permissions(), + queryFn: ({ signal }) => getGetScopedTokenPermissionsForScope(signal), + }) +} diff --git a/apps/studio/data/scoped-access-tokens/scoped-access-token-create-mutation.ts b/apps/studio/data/scoped-access-tokens/scoped-access-token-create-mutation.ts index 7ec01cb363c..7e2dc7abf0b 100644 --- a/apps/studio/data/scoped-access-tokens/scoped-access-token-create-mutation.ts +++ b/apps/studio/data/scoped-access-tokens/scoped-access-token-create-mutation.ts @@ -26,7 +26,7 @@ export async function createScopedAccessToken({ export type NewScopedAccessToken = components['schemas']['CreateScopedAccessTokenResponse'] -export const useAccessTokenCreateMutation = ({ +export const useScopedAccessTokenCreateMutation = ({ onSuccess, onError, ...options diff --git a/apps/studio/lib/hosted-api-allowlist.ts b/apps/studio/lib/hosted-api-allowlist.ts index 614d863ddc3..8d70221994d 100644 --- a/apps/studio/lib/hosted-api-allowlist.ts +++ b/apps/studio/lib/hosted-api-allowlist.ts @@ -27,6 +27,7 @@ export const HOSTED_SUPPORTED_API_URLS = [ '/api/integrations/stripe-sync', '/content/graphql', '/parse-query', + '/scoped-access-token-permissions', ] // `pathname` must be basePath-relative β€” Next's `nextUrl.pathname` already is, diff --git a/apps/studio/package.json b/apps/studio/package.json index 2f3d947c9ed..e3dff9d1c64 100644 --- a/apps/studio/package.json +++ b/apps/studio/package.json @@ -74,7 +74,7 @@ "@supabase/mcp-server-supabase": "^0.7.0", "@supabase/pg-meta": "workspace:*", "@supabase/realtime-js": "catalog:", - "@supabase/shared-types": "0.1.88", + "@supabase/shared-types": "0.1.91", "@supabase/supabase-js": "catalog:", "@tanstack/react-devtools": "^0.10.3", "@tanstack/react-hotkeys": "^0.10.0", diff --git a/apps/studio/pages/account/tokens.tsx b/apps/studio/pages/account/tokens.tsx index f12f55577bf..7eebc76d97d 100644 --- a/apps/studio/pages/account/tokens.tsx +++ b/apps/studio/pages/account/tokens.tsx @@ -1,3 +1,4 @@ +import { useFlag } from 'common' import { ExternalLink, Search } from 'lucide-react' import { useState } from 'react' import { Button } from 'ui' @@ -6,21 +7,26 @@ import { Input } from 'ui-patterns/DataInputs/Input' import { AccessTokenList } from '@/components/interfaces/Account/AccessTokens/AccessTokenList' import { AccessTokenNewBanner } from '@/components/interfaces/Account/AccessTokens/AccessTokenNewBanner/AccessTokenNewBanner' import { NewTokenButton } from '@/components/interfaces/Account/AccessTokens/Classic/NewTokenButton' +import { MigrationAdmonition } from '@/components/interfaces/Account/AccessTokens/MigrationAdmonition' +import { NewScopedTokenSheet } from '@/components/interfaces/Account/AccessTokens/Scoped/NewScopedTokenSheet' import { AccessTokensLayout } from '@/components/layouts/AccessTokens/AccessTokensLayout' import AccountLayout from '@/components/layouts/AccountLayout/AccountLayout' import { AppLayout } from '@/components/layouts/AppLayout/AppLayout' import { DefaultLayout } from '@/components/layouts/DefaultLayout' import { NewAccessToken } from '@/data/access-tokens/access-tokens-create-mutation' +import { NewScopedAccessToken } from '@/data/scoped-access-tokens/scoped-access-token-create-mutation' import { DOCS_URL } from '@/lib/constants' import type { NextPageWithLayout } from '@/types' const UserAccessTokens: NextPageWithLayout = () => { - const [newToken, setNewToken] = useState() + const scopedTokensEnabled = useFlag('scopedPAT') + const [newToken, setNewToken] = useState() const [searchString, setSearchString] = useState('') return (
    + {scopedTokensEnabled && } {newToken && ( { CLI docs - + {scopedTokensEnabled ? ( + + ) : ( + + )}
    { onDeleteSuccess={(id) => { if (id === newToken?.id) setNewToken(undefined) }} + scopedTokensEnabled={scopedTokensEnabled} /> diff --git a/apps/studio/pages/account/tokens/scoped.tsx b/apps/studio/pages/account/tokens/scoped.tsx index 15ac0f3ef11..1f3ee998a49 100644 --- a/apps/studio/pages/account/tokens/scoped.tsx +++ b/apps/studio/pages/account/tokens/scoped.tsx @@ -1,91 +1,13 @@ -import { ExternalLink, Search } from 'lucide-react' -import { useState } from 'react' -import { Button } from 'ui' -import { Input } from 'ui-patterns/DataInputs/Input' +import { useRouter } from 'next/router' +import { useEffect } from 'react' -import { AccessTokenNewBanner } from '@/components/interfaces/Account/AccessTokens/AccessTokenNewBanner/AccessTokenNewBanner' -import { NewScopedTokenButton } from '@/components/interfaces/Account/AccessTokens/Scoped/NewScopedTokenButton' -import { ScopedTokenList } from '@/components/interfaces/Account/AccessTokens/Scoped/ScopedTokenList' -import { AccessTokensLayout } from '@/components/layouts/AccessTokens/AccessTokensLayout' -import AccountLayout from '@/components/layouts/AccountLayout/AccountLayout' -import { AppLayout } from '@/components/layouts/AppLayout/AppLayout' -import { DefaultLayout } from '@/components/layouts/DefaultLayout' -import { NewScopedAccessToken } from '@/data/scoped-access-tokens/scoped-access-token-create-mutation' -import { DOCS_URL } from '@/lib/constants' import type { NextPageWithLayout } from '@/types' const ScopedTokens: NextPageWithLayout = () => { - const [searchString, setSearchString] = useState('') - const [newToken, setNewToken] = useState() - - return ( - -
    - {newToken && ( - setNewToken(undefined)} - getTokenValue={(token) => token.token} - getTokenPermissions={(token) => token.permissions} - /> - )} -
    - } - value={searchString} - onChange={(e) => setSearchString(e.target.value)} - name="search" - id="search" - placeholder="Filter by name" - /> -
    - - - -
    -
    - - { - if (id === newToken?.id) setNewToken(undefined) - }} - /> - -

    - Looking for Private Apps?{' '} - - Go to Organization Settings β†’ Connections β†’ Private Apps - -

    -
    -
    - ) + const router = useRouter() + useEffect(() => { + router.replace('/account/tokens') + }, [router]) } -ScopedTokens.getLayout = (page) => ( - - - {page} - - -) - export default ScopedTokens diff --git a/apps/studio/routeTree.gen.ts b/apps/studio/routeTree.gen.ts index e7f21b42556..c134b2af421 100644 --- a/apps/studio/routeTree.gen.ts +++ b/apps/studio/routeTree.gen.ts @@ -26,6 +26,7 @@ import { Route as OrgChar91_Char93RouteImport } from './routes/org.[_]' import { Route as NewSlugRouteImport } from './routes/new/$slug' import { Route as IntegrationsVercelRouteImport } from './routes/integrations/vercel' import { Route as ApiStatusOverrideRouteImport } from './routes/api/status-override' +import { Route as ApiScopedAccessTokenPermissionsRouteImport } from './routes/api/scoped-access-token-permissions' import { Route as ApiParseQueryRouteImport } from './routes/api/parse-query' import { Route as ApiIncidentStatusRouteImport } from './routes/api/incident-status' import { Route as ApiIncidentBannerRouteImport } from './routes/api/incident-banner' @@ -401,6 +402,12 @@ const ApiStatusOverrideRoute = ApiStatusOverrideRouteImport.update({ path: '/api/status-override', getParentRoute: () => rootRouteImport, } as any) +const ApiScopedAccessTokenPermissionsRoute = + ApiScopedAccessTokenPermissionsRouteImport.update({ + id: '/api/scoped-access-token-permissions', + path: '/api/scoped-access-token-permissions', + getParentRoute: () => rootRouteImport, + } as any) const ApiParseQueryRoute = ApiParseQueryRouteImport.update({ id: '/api/parse-query', path: '/api/parse-query', @@ -2066,6 +2073,7 @@ export interface FileRoutesByFullPath { '/api/incident-banner': typeof ApiIncidentBannerRoute '/api/incident-status': typeof ApiIncidentStatusRoute '/api/parse-query': typeof ApiParseQueryRoute + '/api/scoped-access-token-permissions': typeof ApiScopedAccessTokenPermissionsRoute '/api/status-override': typeof ApiStatusOverrideRoute '/integrations/vercel': typeof IntegrationsVercelRouteWithChildren '/new/$slug': typeof NewSlugRoute @@ -2372,6 +2380,7 @@ export interface FileRoutesByTo { '/api/incident-banner': typeof ApiIncidentBannerRoute '/api/incident-status': typeof ApiIncidentStatusRoute '/api/parse-query': typeof ApiParseQueryRoute + '/api/scoped-access-token-permissions': typeof ApiScopedAccessTokenPermissionsRoute '/api/status-override': typeof ApiStatusOverrideRoute '/integrations/vercel': typeof IntegrationsVercelRouteWithChildren '/new/$slug': typeof NewSlugRoute @@ -2671,6 +2680,7 @@ export interface FileRoutesById { '/api/incident-banner': typeof ApiIncidentBannerRoute '/api/incident-status': typeof ApiIncidentStatusRoute '/api/parse-query': typeof ApiParseQueryRoute + '/api/scoped-access-token-permissions': typeof ApiScopedAccessTokenPermissionsRoute '/api/status-override': typeof ApiStatusOverrideRoute '/integrations/vercel': typeof IntegrationsVercelRouteWithChildren '/new/$slug': typeof NewSlugRoute @@ -2980,6 +2990,7 @@ export interface FileRouteTypes { | '/api/incident-banner' | '/api/incident-status' | '/api/parse-query' + | '/api/scoped-access-token-permissions' | '/api/status-override' | '/integrations/vercel' | '/new/$slug' @@ -3286,6 +3297,7 @@ export interface FileRouteTypes { | '/api/incident-banner' | '/api/incident-status' | '/api/parse-query' + | '/api/scoped-access-token-permissions' | '/api/status-override' | '/integrations/vercel' | '/new/$slug' @@ -3584,6 +3596,7 @@ export interface FileRouteTypes { | '/api/incident-banner' | '/api/incident-status' | '/api/parse-query' + | '/api/scoped-access-token-permissions' | '/api/status-override' | '/integrations/vercel' | '/new/$slug' @@ -3883,6 +3896,7 @@ export interface RootRouteChildren { ApiIncidentBannerRoute: typeof ApiIncidentBannerRoute ApiIncidentStatusRoute: typeof ApiIncidentStatusRoute ApiParseQueryRoute: typeof ApiParseQueryRoute + ApiScopedAccessTokenPermissionsRoute: typeof ApiScopedAccessTokenPermissionsRoute ApiStatusOverrideRoute: typeof ApiStatusOverrideRoute IntegrationsVercelRoute: typeof IntegrationsVercelRouteWithChildren NewSlugRoute: typeof NewSlugRoute @@ -4103,6 +4117,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ApiStatusOverrideRouteImport parentRoute: typeof rootRouteImport } + '/api/scoped-access-token-permissions': { + id: '/api/scoped-access-token-permissions' + path: '/api/scoped-access-token-permissions' + fullPath: '/api/scoped-access-token-permissions' + preLoaderRoute: typeof ApiScopedAccessTokenPermissionsRouteImport + parentRoute: typeof rootRouteImport + } '/api/parse-query': { id: '/api/parse-query' path: '/api/parse-query' @@ -6836,6 +6857,7 @@ const rootRouteChildren: RootRouteChildren = { ApiIncidentBannerRoute: ApiIncidentBannerRoute, ApiIncidentStatusRoute: ApiIncidentStatusRoute, ApiParseQueryRoute: ApiParseQueryRoute, + ApiScopedAccessTokenPermissionsRoute: ApiScopedAccessTokenPermissionsRoute, ApiStatusOverrideRoute: ApiStatusOverrideRoute, IntegrationsVercelRoute: IntegrationsVercelRouteWithChildren, NewSlugRoute: NewSlugRoute, diff --git a/apps/studio/routes/api/scoped-access-token-permissions.ts b/apps/studio/routes/api/scoped-access-token-permissions.ts new file mode 100644 index 00000000000..558cfd9f582 --- /dev/null +++ b/apps/studio/routes/api/scoped-access-token-permissions.ts @@ -0,0 +1,16 @@ +import { createFileRoute } from '@tanstack/react-router' + +// App Router route (apps/studio/app/api/scoped-access-token/route.ts) β€” already +// Web-native, uses NextResponse which extends `Response`. Direct re-export of +// each HTTP method; no shim needed. +import { GET, HEAD, OPTIONS } from '@/app/api/scoped-access-token-permissions/route' + +export const Route = createFileRoute('/api/scoped-access-token-permissions')({ + server: { + handlers: { + GET: () => GET(), + HEAD: () => HEAD(), + OPTIONS: () => OPTIONS(), + }, + }, +}) diff --git a/apps/studio/vite.config.ts b/apps/studio/vite.config.ts index 29998d6d8a2..a238efe54a3 100644 --- a/apps/studio/vite.config.ts +++ b/apps/studio/vite.config.ts @@ -792,11 +792,11 @@ export default defineConfig(({ command, mode }) => { postcss: { plugins: [] }, }, ssr: { - // `lodash` must stay inlined so its ids flow through the plugin - // pipeline, where ssrLodashEs (above) rewrites them to lodash-es. - // Externalized bare ids skip user plugins in the dev module runner, so - // dropping this entry resurfaces Node's CJS named-export failure - // ("Named export 'debounce' not found") on every `from 'lodash'` import. + optimizeDeps: { + include: ['lodash'], + }, + + // `lodash` is CJS; its named-export interop fails in Node ESM unless bundled. // `next/*` must be bundled so our nextCompat shim wins β€” otherwise Vite's // SSR externalizer leaves `next/router` as a runtime package import and // Node resolves it to Next's real module. diff --git a/packages/common/constants/local-storage.ts b/packages/common/constants/local-storage.ts index edf85c0a1f8..9cea4e26385 100644 --- a/packages/common/constants/local-storage.ts +++ b/packages/common/constants/local-storage.ts @@ -119,9 +119,9 @@ export const LOCAL_STORAGE_KEYS = { `project-upgrade-failed-banner-dismissed-at-${ref}`, UNIFIED_LOGS_BANNER_DISMISSED: 'unified-logs-banner-dismissed', UNIFIED_LOGS_SIDEBAR_BANNER_DISMISSED: 'unified-logs-sidebar-banner-dismissed', + SCOPED_TOKENS_MIGRATION_ADMONITION_DISMISSED: 'scoped-tokens-migration-admonition-dismissed', STORAGE_PUBLIC_BUCKET_SELECT_POLICY_WARNING_DISMISSED: (ref: string, bucketId: string) => `storage-public-bucket-select-policy-warning-dismissed-${ref}-${bucketId}`, - /** * COMMON */ diff --git a/packages/common/telemetry-constants.ts b/packages/common/telemetry-constants.ts index 7ee0d6e52a1..236e0309e1e 100644 --- a/packages/common/telemetry-constants.ts +++ b/packages/common/telemetry-constants.ts @@ -3401,7 +3401,7 @@ export interface AccessTokenCreatedEvent { properties: { tokenType: 'classic' | 'scoped' expiryPreset: string - resourceAccess?: 'all-orgs' | 'selected-orgs' | 'selected-projects' + resourceAccess?: 'project' | 'organization' | 'account' permissionCount?: number } groups: Omit diff --git a/packages/ui-patterns/src/Admonition/Admonition.tsx b/packages/ui-patterns/src/Admonition/Admonition.tsx index 7333aac1d74..93d8d1fa33f 100644 --- a/packages/ui-patterns/src/Admonition/Admonition.tsx +++ b/packages/ui-patterns/src/Admonition/Admonition.tsx @@ -98,7 +98,7 @@ export const Admonition = forwardRef< {actions && (
    =22.0.0'} - '@supabase/shared-types@0.1.88': - resolution: {integrity: sha512-9LYy+pD6cD2o8ZSxeUeJ1nrHPigeoP1kzhd2+k6MmzrwBHwxwUhWjywQJVjpU6fLNQxdkoNqxPfI7UQgOjG7Lg==} + '@supabase/shared-types@0.1.91': + resolution: {integrity: sha512-n4co7cT2MD0RGKkAdVPRz8O+f+LaWAqfujV/ug/4U434u5bmopLvCWrA8AzIgNSEr9xyJ+Yv3ksCQo9C0UJWTw==} '@supabase/sql-to-rest@0.1.6': resolution: {integrity: sha512-06KgjeINtc6405XQvfnchBE1azEsU8G2NElfadmvVHKmHa5l2bFzjbtFbpaYgpgTzccHlcDmBaCgedVf2Gyl8Q==} @@ -23700,7 +23700,7 @@ snapshots: '@supabase/phoenix': 0.4.5 tslib: 2.8.1 - '@supabase/shared-types@0.1.88': {} + '@supabase/shared-types@0.1.91': {} '@supabase/sql-to-rest@0.1.6(encoding@0.1.13)(supports-color@8.1.1)': dependencies: From 1ff84a239c57e5a3b1b6118556b6064cb06e99b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cemal=20K=C4=B1l=C4=B1=C3=A7?= Date: Thu, 6 Aug 2026 15:41:35 +0200 Subject: [PATCH 57/83] =?UTF-8?q?docs(auth):=20note=20that=20resetPassword?= =?UTF-8?q?ForEmail=20doesn't=20send=20email=20for=20un=E2=80=A6=20(#48800?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add note on `resetPasswordForEmail` doesn't send email for unregistered emails ## Summary by CodeRabbit * **Documentation** * Clarified that password reset requests do not reveal whether an email address is associated with an account. * Documented that requests for unrecognized email addresses complete without an error. --------- Co-authored-by: Jeremias Menichelli --- apps/docs/content/guides/auth/passwords.mdx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/apps/docs/content/guides/auth/passwords.mdx b/apps/docs/content/guides/auth/passwords.mdx index c1ff484751b..f51864f058d 100644 --- a/apps/docs/content/guides/auth/passwords.mdx +++ b/apps/docs/content/guides/auth/passwords.mdx @@ -609,6 +609,14 @@ var session = await supabase.Auth.SignIn("valid.email@supabase.io", "example-pas ### Resetting a password + + +To prevent user enumeration, `resetPasswordForEmail()` doesn't reveal whether an account exists for the given email address. + +When no user is associated with the address, Supabase Auth won't send an email, though the method still returns without an error. + + + Date: Thu, 6 Aug 2026 17:20:55 +0100 Subject: [PATCH 58/83] chore(studio): remove scoped pat orphaned form (#48803) ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? First step in breaking down #48635 ## Summary by CodeRabbit * **Refactor** * Removed the scoped access-token form, including token details, expiration settings, resource access, and permission configuration. * Removed resource and permission selection controls from the access-token workflow. * **Tests** * Removed automated coverage for access-token validation, permission handling, expiration logic, and resource selection. --------- Co-authored-by: Wen Bo Xie Co-authored-by: Claude Opus 5 (1M context) --- .../AccessTokens/AccessToken.schemas.test.ts | 193 ----------------- .../AccessTokens/AccessToken.schemas.ts | 23 -- .../AccessTokens/Scoped/Form/BasicInfo.tsx | 140 ------------ .../PermissionResourceSelector.tsx | 75 ------- .../Scoped/Form/Permissions/Permissions.tsx | 202 ------------------ .../Form/Permissions/Permissions.types.ts | 32 --- .../Permissions/Permissions.utils.test.ts | 128 ----------- .../Form/Permissions/Permissions.utils.ts | 32 --- .../Form/ResourceAccess/ResourceAccess.tsx | 116 ---------- .../ResourceAccess/ResourceAccess.types.ts | 31 --- .../ResourceAccess/ResourceMultiSelector.tsx | 69 ------ .../Form/ResourceAccess/ResourceOption.tsx | 41 ---- 12 files changed, 1082 deletions(-) delete mode 100644 apps/studio/components/interfaces/Account/AccessTokens/AccessToken.schemas.test.ts delete mode 100644 apps/studio/components/interfaces/Account/AccessTokens/AccessToken.schemas.ts delete mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/BasicInfo.tsx delete mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/Permissions/PermissionResourceSelector.tsx delete mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/Permissions/Permissions.tsx delete mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/Permissions/Permissions.types.ts delete mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/Permissions/Permissions.utils.test.ts delete mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/Permissions/Permissions.utils.ts delete mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/ResourceAccess/ResourceAccess.tsx delete mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/ResourceAccess/ResourceAccess.types.ts delete mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/ResourceAccess/ResourceMultiSelector.tsx delete mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/ResourceAccess/ResourceOption.tsx diff --git a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.schemas.test.ts b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.schemas.test.ts deleted file mode 100644 index c8b58c4fad9..00000000000 --- a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.schemas.test.ts +++ /dev/null @@ -1,193 +0,0 @@ -import { describe, expect, it } from 'vitest' - -import { PermissionRowSchema, TokenSchema } from './AccessToken.schemas' - -const validTokenData = { - tokenName: 'My Token', - expiresAt: 'day', - resourceAccess: 'all-orgs' as const, - permissionRows: [{ resource: 'organization:billing', actions: ['read'] }], -} - -// --- PermissionRowSchema --- - -describe('PermissionRowSchema', () => { - it('should pass for a valid permission row', () => { - const result = PermissionRowSchema.safeParse({ - resource: 'organization:billing', - actions: ['read'], - }) - expect(result.success).toBe(true) - }) - - it('should fail when resource is empty', () => { - const result = PermissionRowSchema.safeParse({ - resource: '', - actions: ['read'], - }) - expect(result.success).toBe(false) - if (!result.success) { - expect(result.error.issues[0].message).toBe('Please select a resource') - } - }) - - it('should fail when actions is empty', () => { - const result = PermissionRowSchema.safeParse({ - resource: 'organization:billing', - actions: [], - }) - expect(result.success).toBe(false) - if (!result.success) { - expect(result.error.issues[0].message).toBe('Please select at least one action') - } - }) - - it('should fail when resource is missing', () => { - const result = PermissionRowSchema.safeParse({ actions: ['read'] }) - expect(result.success).toBe(false) - }) - - it('should fail when actions is missing', () => { - const result = PermissionRowSchema.safeParse({ resource: 'organization:billing' }) - expect(result.success).toBe(false) - }) -}) - -// --- TokenSchema --- - -describe('TokenSchema', () => { - it('should pass for valid token data', () => { - const result = TokenSchema.safeParse(validTokenData) - expect(result.success).toBe(true) - }) - - it('should fail when tokenName is empty', () => { - const result = TokenSchema.safeParse({ ...validTokenData, tokenName: '' }) - expect(result.success).toBe(false) - if (!result.success) { - const nameError = result.error.issues.find((i) => i.path.includes('tokenName')) - expect(nameError?.message).toBe('Please enter a name for the token') - } - }) - - it('should fail when tokenName is missing', () => { - const { tokenName, ...rest } = validTokenData - const result = TokenSchema.safeParse(rest) - expect(result.success).toBe(false) - }) - - it('should fail when permissionRows is empty', () => { - const result = TokenSchema.safeParse({ ...validTokenData, permissionRows: [] }) - expect(result.success).toBe(false) - if (!result.success) { - const permError = result.error.issues.find((i) => i.path.includes('permissionRows')) - expect(permError?.message).toBe('Please configure at least one permission') - } - }) - - it('should fail when resourceAccess is not a valid enum value', () => { - const result = TokenSchema.safeParse({ ...validTokenData, resourceAccess: 'invalid' }) - expect(result.success).toBe(false) - }) - - it('should accept all valid resourceAccess enum values', () => { - for (const value of ['all-orgs', 'selected-orgs', 'selected-projects'] as const) { - const result = TokenSchema.safeParse({ ...validTokenData, resourceAccess: value }) - expect(result.success).toBe(true) - } - }) - - describe('expiresAt preprocessing', () => { - it('should convert "never" to undefined', () => { - const result = TokenSchema.safeParse({ ...validTokenData, expiresAt: 'never' }) - expect(result.success).toBe(true) - if (result.success) { - expect(result.data.expiresAt).toBeUndefined() - } - }) - - it('should pass through other string values', () => { - const result = TokenSchema.safeParse({ ...validTokenData, expiresAt: 'day' }) - expect(result.success).toBe(true) - if (result.success) { - expect(result.data.expiresAt).toBe('day') - } - }) - - it('should allow expiresAt to be omitted', () => { - const { expiresAt, ...rest } = validTokenData - const result = TokenSchema.safeParse(rest) - expect(result.success).toBe(true) - }) - }) - - describe('custom expiry refinement', () => { - it('should fail when expiresAt is "custom" and customExpiryDate is not provided', () => { - const result = TokenSchema.safeParse({ - ...validTokenData, - expiresAt: 'custom', - customExpiryDate: undefined, - }) - expect(result.success).toBe(false) - if (!result.success) { - const customError = result.error.issues.find((i) => i.path.includes('expiresAt')) - expect(customError?.message).toBe('Please select a custom expiry date') - } - }) - - it('should fail when expiresAt is "custom" and customExpiryDate is empty string', () => { - const result = TokenSchema.safeParse({ - ...validTokenData, - expiresAt: 'custom', - customExpiryDate: '', - }) - expect(result.success).toBe(false) - }) - - it('should pass when expiresAt is "custom" and customExpiryDate is provided', () => { - const result = TokenSchema.safeParse({ - ...validTokenData, - expiresAt: 'custom', - customExpiryDate: '2026-12-31T00:00:00Z', - }) - expect(result.success).toBe(true) - }) - - it('should pass when expiresAt is not "custom" even without customExpiryDate', () => { - const result = TokenSchema.safeParse({ - ...validTokenData, - expiresAt: 'day', - }) - expect(result.success).toBe(true) - }) - }) - - describe('nested permissionRows validation', () => { - it('should fail when a permission row has an empty resource', () => { - const result = TokenSchema.safeParse({ - ...validTokenData, - permissionRows: [{ resource: '', actions: ['read'] }], - }) - expect(result.success).toBe(false) - }) - - it('should fail when a permission row has empty actions', () => { - const result = TokenSchema.safeParse({ - ...validTokenData, - permissionRows: [{ resource: 'organization:billing', actions: [] }], - }) - expect(result.success).toBe(false) - }) - - it('should pass with multiple valid permission rows', () => { - const result = TokenSchema.safeParse({ - ...validTokenData, - permissionRows: [ - { resource: 'organization:billing', actions: ['read'] }, - { resource: 'organization:members', actions: ['read', 'write'] }, - ], - }) - expect(result.success).toBe(true) - }) - }) -}) diff --git a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.schemas.ts b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.schemas.ts deleted file mode 100644 index da0604f0633..00000000000 --- a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.schemas.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { z } from 'zod' - -export const PermissionRowSchema = z.object({ - resource: z.string().min(1, 'Please select a resource'), - actions: z.array(z.string()).min(1, 'Please select at least one action'), -}) - -export const TokenSchema = z - .object({ - tokenName: z.string().min(1, 'Please enter a name for the token'), - expiresAt: z.preprocess((val) => (val === 'never' ? undefined : val), z.string().optional()), - customExpiryDate: z.string().optional(), - resourceAccess: z.enum(['all-orgs', 'selected-orgs', 'selected-projects']), - selectedOrganizations: z.array(z.string()).optional(), - selectedProjects: z.array(z.string()).optional(), - permissionRows: z.array(PermissionRowSchema).min(1, 'Please configure at least one permission'), - }) - .refine((data) => !(data.expiresAt === 'custom' && !data.customExpiryDate), { - message: 'Please select a custom expiry date', - path: ['expiresAt'], - }) - -export type TokenFormValues = z.infer diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/BasicInfo.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/BasicInfo.tsx deleted file mode 100644 index fdf2d5aabc5..00000000000 --- a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/BasicInfo.tsx +++ /dev/null @@ -1,140 +0,0 @@ -import dayjs from 'dayjs' -import { useEffect, useState } from 'react' -import { Control, ControllerRenderProps } from 'react-hook-form' -import { - FormControl, - FormField, - Input, - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, - WarningIcon, -} from 'ui' -import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' - -import { - CUSTOM_EXPIRY_VALUE, - EXPIRES_AT_OPTIONS, - NON_EXPIRING_TOKEN_VALUE, -} from '../../AccessToken.constants' -import { type TokenFormValues } from '../../AccessToken.schemas' -import { DatePicker } from '@/components/ui/DatePicker' - -interface BasicInfoProps { - control: Control - expirationDate: string - onCustomDateChange?: (date: { date: string } | undefined) => void - onCustomExpiryChange?: (isCustom: boolean) => void -} - -export const BasicInfo = ({ - control, - expirationDate, - onCustomDateChange, - onCustomExpiryChange, -}: BasicInfoProps) => { - const [customDate, setCustomDate] = useState() - const [isCustomSelected, setIsCustomSelected] = useState(false) - - useEffect(() => { - const isCustom = expirationDate === CUSTOM_EXPIRY_VALUE - setIsCustomSelected(isCustom) - onCustomExpiryChange?.(isCustom) - }, [expirationDate, onCustomExpiryChange]) - - const handleCustomDateChange = (date: Date | undefined) => { - setCustomDate(date) - if (date) { - onCustomDateChange?.({ date: date.toISOString() }) - } else { - onCustomDateChange?.(undefined) - } - } - - const handleExpiryChange = ( - value: string, - field: ControllerRenderProps - ) => { - const isCustom = value === CUSTOM_EXPIRY_VALUE - setIsCustomSelected(isCustom) - onCustomExpiryChange?.(isCustom) - field.onChange(value) - } - - return ( -
    - ( - - - - - - )} - /> - - ( - -
    - - - - {isCustomSelected && ( - { - const selectedDate = date.to || date.from - if (selectedDate) { - handleCustomDateChange(new Date(selectedDate)) - } else { - handleCustomDateChange(undefined) - } - }} - > - {customDate ? `${dayjs(customDate).format('DD MMM, HH:mm')}` : 'Select date'} - - )} -
    - {field.value === NON_EXPIRING_TOKEN_VALUE && ( -
    - - - Make sure to keep your non-expiring token safe and secure. - -
    - )} -
    - )} - /> -
    - ) -} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/Permissions/PermissionResourceSelector.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/Permissions/PermissionResourceSelector.tsx deleted file mode 100644 index 79955c9ebce..00000000000 --- a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/Permissions/PermissionResourceSelector.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import { Key, Plus } from 'lucide-react' -import { - Button, - Checkbox, - Command, - CommandEmpty, - CommandGroup, - CommandInput, - CommandItem, - CommandList, - Popover, - PopoverContent, - PopoverTrigger, -} from 'ui' - -import { PermissionResourceSelectorProps, PermissionRow } from './Permissions.types' -import { ACCESS_TOKEN_RESOURCES } from '@/components/interfaces/Account/AccessTokens/AccessToken.constants' - -export const PermissionResourceSelector = ({ - open, - onOpenChange, - onResourceToggled, - permissionRows, - align = 'center', -}: PermissionResourceSelectorProps) => { - return ( - - - - - - - - - No resources found. - - -
    - {ACCESS_TOKEN_RESOURCES.map((resource) => { - const isChecked = permissionRows.some( - (row: PermissionRow) => row.resource === resource.resource - ) - return ( - onResourceToggled(resource)} - className="text-foreground" - > -
    - onResourceToggled(resource)} - onClick={(e) => e.stopPropagation()} - /> - -
    - - {resource.title} - -
    -
    -
    - ) - })} -
    -
    -
    -
    -
    -
    - ) -} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/Permissions/Permissions.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/Permissions/Permissions.tsx deleted file mode 100644 index 1860d289d08..00000000000 --- a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/Permissions/Permissions.tsx +++ /dev/null @@ -1,202 +0,0 @@ -import { ChevronDown, RotateCcw, X } from 'lucide-react' -import { useFieldArray, useFormState } from 'react-hook-form' -import { - Button, - Checkbox, - FormControl, - FormField, - FormMessage, - Popover, - PopoverContent, - PopoverTrigger, - WarningIcon, -} from 'ui' - -import { TokenFormValues } from '../../../AccessToken.schemas' -import { PermissionResourceSelector } from './PermissionResourceSelector' -import { PermissionsProps } from './Permissions.types' -import { sortActions } from './Permissions.utils' -import { ACCESS_TOKEN_RESOURCES } from '@/components/interfaces/Account/AccessTokens/AccessToken.constants' -import { formatAccessText } from '@/components/interfaces/Account/AccessTokens/AccessToken.utils' -import { ButtonTooltip } from '@/components/ui/ButtonTooltip' - -export const Permissions = ({ - control, - resourceSearchOpen, - setResourceSearchOpen, -}: PermissionsProps) => { - const { - fields: permissionRows, - append, - remove, - } = useFieldArray({ - name: 'permissionRows', - control, - }) - const { errors } = useFormState({ control, name: 'permissionRows' }) - - return ( -
    -
    -
    - Configure permissions -
    - {permissionRows.length > 0 && ( - remove()} - icon={} - tooltip={{ - content: { - side: 'top', - align: 'center', - alignOffset: -10, - text: 'Reset all permissions', - }, - }} - /> - )} - { - const index = permissionRows.findIndex((p) => p.resource === resource.resource) - if (index > -1) { - return remove(index) - } - append(resource) - }} - align="end" - /> -
    -
    - - {permissionRows.length === 0 ? ( -
    -

    No permissions configured yet.

    -
    - ) : ( -
    - {permissionRows.map((row, index) => { - const selectedResource = ACCESS_TOKEN_RESOURCES.find( - (r) => r.resource === row.resource - ) - return ( - { - const fieldValue = field.value || [] - - return ( -
    -
    -
    -
    -
    - - {selectedResource?.title} - -
    -
    -
    -
    - {selectedResource && ( - - - - - - - -
    - {sortActions(selectedResource.actions).map((action) => ( - - ))} -
    -
    -
    - )} -
    -
    -
    - -
    - {index < permissionRows.length - 1 && ( -
    - )} -
    - ) - }} - /> - ) - })} -
    - )} -
    - -
    - - - Once you've set these permissions, you cannot edit them. - -
    - {errors.permissionRows?.message || errors.permissionRows?.root?.message ? ( -

    - {errors.permissionRows?.message || errors.permissionRows?.root?.message} -

    - ) : null} -
    - ) -} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/Permissions/Permissions.types.ts b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/Permissions/Permissions.types.ts deleted file mode 100644 index 8b3c4a5d439..00000000000 --- a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/Permissions/Permissions.types.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Control, FieldValues } from 'react-hook-form' - -import { TokenFormValues } from '../../../AccessToken.schemas' - -export interface PermissionResource { - resource: string - title: string - actions: string[] -} - -export interface PermissionRow { - resource: string - actions: string[] -} - -export interface PermissionsFormValues extends FieldValues { - permissionRows?: PermissionRow[] -} - -export interface PermissionsProps { - control: Control - resourceSearchOpen: boolean - setResourceSearchOpen: (open: boolean) => void -} - -export interface PermissionResourceSelectorProps { - open: boolean - onOpenChange: (open: boolean) => void - permissionRows: PermissionRow[] - onResourceToggled: (resource: PermissionResource) => void - align?: 'center' | 'end' | 'start' -} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/Permissions/Permissions.utils.test.ts b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/Permissions/Permissions.utils.test.ts deleted file mode 100644 index 35c1cd4b384..00000000000 --- a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/Permissions/Permissions.utils.test.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { describe, expect, it } from 'vitest' - -import type { PermissionResource, PermissionRow } from './Permissions.types' -import { sortActions, togglePermissionResource } from './Permissions.utils' - -// --- sortActions --- - -describe('sortActions', () => { - it('should sort actions by priority order: read, write, create, delete', () => { - expect(sortActions(['delete', 'create', 'write', 'read'])).toEqual([ - 'read', - 'write', - 'create', - 'delete', - ]) - }) - - it('should return empty array for empty input', () => { - expect(sortActions([])).toEqual([]) - }) - - it('should keep a single action as-is', () => { - expect(sortActions(['write'])).toEqual(['write']) - }) - - it('should place unknown actions after the priority ones', () => { - expect(sortActions(['custom-action', 'read', 'delete'])).toEqual([ - 'read', - 'delete', - 'custom-action', - ]) - }) - - it('should preserve relative order of multiple unknown actions', () => { - expect(sortActions(['zeta', 'alpha', 'read'])).toEqual(['read', 'zeta', 'alpha']) - }) - - it('should handle only unknown actions', () => { - expect(sortActions(['foo', 'bar'])).toEqual(['foo', 'bar']) - }) - - it('should handle a subset of priority actions', () => { - expect(sortActions(['delete', 'read'])).toEqual(['read', 'delete']) - }) - - it('should not mutate the original array', () => { - const original = ['delete', 'read'] - sortActions(original) - expect(original).toEqual(['delete', 'read']) - }) -}) - -// --- togglePermissionResource --- - -describe('togglePermissionResource', () => { - const billingResource: PermissionResource = { - resource: 'organization:billing', - title: 'Billing', - actions: ['read', 'write'], - } - - const membersResource: PermissionResource = { - resource: 'organization:members', - title: 'Members', - actions: ['read', 'write', 'create', 'delete'], - } - - const storageResource: PermissionResource = { - resource: 'project:storage', - title: 'Storage', - actions: ['write', 'create'], - } - - it('should add a resource with "read" as the default action when available', () => { - const result = togglePermissionResource([], billingResource) - expect(result).toEqual([{ resource: 'organization:billing', actions: ['read'] }]) - }) - - it('should add a resource with the first action as default when "read" is not available', () => { - const result = togglePermissionResource([], storageResource) - expect(result).toEqual([{ resource: 'project:storage', actions: ['write'] }]) - }) - - it('should remove a resource if it is already in the list', () => { - const existing: PermissionRow[] = [ - { resource: 'organization:billing', actions: ['read'] }, - { resource: 'organization:members', actions: ['read', 'write'] }, - ] - const result = togglePermissionResource(existing, billingResource) - expect(result).toEqual([{ resource: 'organization:members', actions: ['read', 'write'] }]) - }) - - it('should not modify other rows when removing a resource', () => { - const existing: PermissionRow[] = [ - { resource: 'organization:billing', actions: ['read'] }, - { resource: 'organization:members', actions: ['read', 'write'] }, - ] - const result = togglePermissionResource(existing, billingResource) - expect(result).toHaveLength(1) - expect(result[0]).toEqual({ resource: 'organization:members', actions: ['read', 'write'] }) - }) - - it('should append to existing rows when adding', () => { - const existing: PermissionRow[] = [{ resource: 'organization:billing', actions: ['read'] }] - const result = togglePermissionResource(existing, membersResource) - expect(result).toHaveLength(2) - expect(result[1]).toEqual({ resource: 'organization:members', actions: ['read'] }) - }) - - it('should not mutate the original array', () => { - const existing: PermissionRow[] = [{ resource: 'organization:billing', actions: ['read'] }] - const original = [...existing] - togglePermissionResource(existing, membersResource) - expect(existing).toEqual(original) - }) - - it('should toggle off then on again correctly', () => { - const step1 = togglePermissionResource([], billingResource) - expect(step1).toHaveLength(1) - - const step2 = togglePermissionResource(step1, billingResource) - expect(step2).toHaveLength(0) - - const step3 = togglePermissionResource(step2, billingResource) - expect(step3).toHaveLength(1) - expect(step3[0]).toEqual({ resource: 'organization:billing', actions: ['read'] }) - }) -}) diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/Permissions/Permissions.utils.ts b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/Permissions/Permissions.utils.ts deleted file mode 100644 index cb7547ee431..00000000000 --- a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/Permissions/Permissions.utils.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { PermissionResource, PermissionRow } from './Permissions.types' - -export const sortActions = (actions: string[]): string[] => { - const sorted: string[] = [] - const remaining = [...actions] - const priority = ['read', 'write', 'create', 'delete'] - - for (const action of priority) { - const index = remaining.indexOf(action) - if (index !== -1) { - sorted.push(action) - remaining.splice(index, 1) - } - } - - sorted.push(...remaining) - return sorted -} - -export const togglePermissionResource = ( - permissionRows: PermissionRow[], - resource: PermissionResource -): PermissionRow[] => { - const isAlreadyAdded = permissionRows.some((row) => row.resource === resource.resource) - - if (isAlreadyAdded) { - return permissionRows.filter((row) => row.resource !== resource.resource) - } - - const defaultActions = resource.actions.includes('read') ? ['read'] : [resource.actions[0]] - return [...permissionRows, { resource: resource.resource, actions: defaultActions }] -} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/ResourceAccess/ResourceAccess.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/ResourceAccess/ResourceAccess.tsx deleted file mode 100644 index f14184a9b72..00000000000 --- a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/ResourceAccess/ResourceAccess.tsx +++ /dev/null @@ -1,116 +0,0 @@ -import { FormControl, FormField } from 'ui' -import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' - -import { ResourceAccessProps } from './ResourceAccess.types' -import { ResourceMultiSelector } from './ResourceMultiSelector' -import { ResourceOption } from './ResourceOption' -import { useOrgAndProjectData } from '@/components/interfaces/Account/AccessTokens/hooks/useOrgAndProjectData' -import { useProfile } from '@/lib/profile' - -const RESOURCE_OPTIONS = [ - { - value: 'all-orgs' as const, - label: 'Everything', - description: 'Access to all projects across all organizations you have access to.', - }, - { - value: 'selected-orgs' as const, - label: 'Selected orgs', - description: 'Access only to the organizations you have specified.', - }, - { - value: 'selected-projects' as const, - label: 'Selected projects', - description: 'Access only to the projects you have specified.', - }, -] - -export const ResourceAccess = ({ control, resourceAccess, setValue }: ResourceAccessProps) => { - const { profile } = useProfile() - - const { organizations, projects, isLoadingOrgs, isLoadingProjects } = useOrgAndProjectData({ - enabled: !!profile, - }) - - const handleResourceAccessChange = (newValue: string, currentValue: string) => { - if (newValue !== currentValue) { - setValue('selectedOrganizations', []) - setValue('selectedProjects', []) - } - } - - return ( -
    - ( - - -
    -
    - Resource access level - {RESOURCE_OPTIONS.map((option) => ( - { - handleResourceAccessChange(option.value, field.value) - field.onChange(option.value) - }} - /> - ))} -
    - -

    - {RESOURCE_OPTIONS.find((opt) => opt.value === field.value)?.description} -

    -
    -
    -
    - )} - /> - - {resourceAccess === 'selected-orgs' && ( - ( - ({ id: org.slug, name: org.name }))} - isLoading={isLoadingOrgs} - fieldName="selectedOrganizations" - label="Select organizations" - loadingMessage="Loading organizations..." - emptyMessage="No organizations available" - /> - )} - /> - )} - - {resourceAccess === 'selected-projects' && ( - ( - ({ id: project.ref, name: project.name }))} - isLoading={isLoadingProjects} - fieldName="selectedProjects" - label="Select projects" - loadingMessage="Loading projects..." - emptyMessage="No projects available" - /> - )} - /> - )} -
    - ) -} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/ResourceAccess/ResourceAccess.types.ts b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/ResourceAccess/ResourceAccess.types.ts deleted file mode 100644 index 24164866752..00000000000 --- a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/ResourceAccess/ResourceAccess.types.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Control, ControllerRenderProps, UseFormSetValue } from 'react-hook-form' - -import { TokenFormValues } from '@/components/interfaces/Account/AccessTokens/AccessToken.schemas' - -export interface ResourceAccessProps { - control: Control - resourceAccess: string - setValue: UseFormSetValue -} - -export interface ResourceItem { - id: string - name: string -} - -export interface ResourceMultiSelectorProps { - field: ControllerRenderProps - items: ResourceItem[] - isLoading: boolean - fieldName: string - label: string - loadingMessage: string - emptyMessage: string -} - -export interface ResourceOptionProps { - value: string - label: string - isSelected: boolean - onChange: () => void -} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/ResourceAccess/ResourceMultiSelector.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/ResourceAccess/ResourceMultiSelector.tsx deleted file mode 100644 index dc9fb0b07f4..00000000000 --- a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/ResourceAccess/ResourceMultiSelector.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import { useMemo } from 'react' -import { FormControl } from 'ui' -import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' -import { - MultiSelector, - MultiSelectorContent, - MultiSelectorItem, - MultiSelectorList, - MultiSelectorTrigger, -} from 'ui-patterns/multi-select' - -import { ResourceMultiSelectorProps } from './ResourceAccess.types' - -export const ResourceMultiSelector = ({ - field, - items, - isLoading, - fieldName, - label, - loadingMessage, - emptyMessage, -}: ResourceMultiSelectorProps) => { - const idToName = useMemo(() => new Map(items.map((item) => [item.id, item.name])), [items]) - - const displayValues = (field.value || []).map((id: string) => idToName.get(id) || id) - - const handleValuesChange = (names: string[]) => { - const ids = names - .map((name) => { - for (const [id, itemName] of idToName.entries()) { - if (itemName === name) return id - } - return name - }) - .filter(Boolean) - field.onChange(ids) - } - - return ( - - - - - - {isLoading ? ( -
    {loadingMessage}
    - ) : items.length === 0 ? ( -
    {emptyMessage}
    - ) : ( - - {items.map((item) => ( - - {item.name} - - ))} - - )} -
    -
    -
    -
    - ) -} diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/ResourceAccess/ResourceOption.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/ResourceAccess/ResourceOption.tsx deleted file mode 100644 index 60b3a2f8400..00000000000 --- a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/ResourceAccess/ResourceOption.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { Box, Check } from 'lucide-react' -import { cn } from 'ui' - -export const ResourceOption = ({ - value, - label, - isSelected, - onChange, -}: { - value: string - label: string - isSelected: boolean - onChange: () => void -}) => ( - -) From 2a3025df25c62241294e5f8c3723efc49a77d89a Mon Sep 17 00:00:00 2001 From: "kemal.earth" <606977+kemaldotearth@users.noreply.github.com> Date: Thu, 6 Aug 2026 17:31:41 +0100 Subject: [PATCH 59/83] feat(studio): role inference core for scoped pat (#48805) ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Logic-only extraction from #48742. Scoped PATs are enforced server-side as the intersection of the token's granted scopes and the owner's live role, re-checked on every request. This lands the pure inference layer that will power advisory (never blocking) UI feedback; no UI consumes it yet. - FGA_SCOPE_MINIMUM_ROLE: all 83 permission scopes transcribed from the OpenFGA model's role unions, mapped to the lowest base role that holds them. A drift-guard test pins the key set to the scope ids published in @supabase/shared-types, so upstream additions fail CI here with re-transcription instructions. - estimateRoleLevel: derives the user's base role per org (or per project for project-invited members) from the ungated /platform/profile/ permissions rows via four discriminating ABAC probes. Works for every member type with no permission-gated endpoint. - computeTokenRoleContext + applySelectionToRoleContext: role resolution (expensive, memoized) is split from selection evaluation (cheap, re-run per permission toggle). AccessToken.permissions.ts gains only what the roles module needs: the PermissionLevel type and the catalog's `level` field (decides whether an org or project role governs a resource), plus getEntryScopes, which selectionToScopes now reuses. The UI-only additions from #48742 (risk badge/dot variants, mode labels, the OverallRisk.text -> description rename) are deliberately left out so this PR touches no .tsx. ## Summary by CodeRabbit * **New Features** * Added role-aware evaluation for scoped access-token permissions. * Added support for organization- and project-level permission scoping. * Added guidance when selected permissions exceed the current role, including read-only downgrades and inaccessible resources. * Added clearer grouping of permission access issues by resource. * **Tests** * Added comprehensive coverage for role mapping, permission evaluation, scoping, and failure scenarios. Co-authored-by: Wen Bo Xie Co-authored-by: Claude Opus 5 (1M context) --- .../AccessTokens/AccessToken.fixtures.ts | 62 ++ .../AccessTokens/AccessToken.permissions.ts | 28 +- .../AccessTokens/AccessToken.roles.test.ts | 343 ++++++++++ .../Account/AccessTokens/AccessToken.roles.ts | 584 ++++++++++++++++++ 4 files changed, 1010 insertions(+), 7 deletions(-) create mode 100644 apps/studio/components/interfaces/Account/AccessTokens/AccessToken.fixtures.ts create mode 100644 apps/studio/components/interfaces/Account/AccessTokens/AccessToken.roles.test.ts create mode 100644 apps/studio/components/interfaces/Account/AccessTokens/AccessToken.roles.ts diff --git a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.fixtures.ts b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.fixtures.ts new file mode 100644 index 00000000000..5275f6ace06 --- /dev/null +++ b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.fixtures.ts @@ -0,0 +1,62 @@ +import type { Permission } from '@/types' + +/** + * Test-only fixtures for the scoped-access-token surfaces. + * + * The permission-row builders mirror the shape of /platform/profile/permissions rows for each + * base role, per the ABAC default_permissions seeds (platform: middleware-db). Roles inherit + * lower roles' rows. Keep the rows in lockstep with ROLE_PROBES in AccessToken.roles.ts. + */ + +/** Satisfies both Studio's `Permission` type and the API's `AccessControlPermission` row shape. */ +export type PermissionRowFixture = Permission & { + organization_id: number | null + project_ids: number[] | null +} + +export const permissionRow = ( + organization_slug: string, + actions: string[], + resources: string[], + project_refs: string[] = [] +): PermissionRowFixture => ({ + actions: actions as Permission['actions'], + condition: null as unknown as Permission['condition'], + organization_id: null, + organization_slug, + project_ids: null, + resources, + restrictive: false, + project_refs, +}) + +export const memberRows = (slug: string, refs: string[] = []) => [ + permissionRow(slug, ['read:Read'], ['members', 'organizations', 'auth.subject_roles'], refs), +] + +export const readonlyRows = (slug: string, refs: string[] = []) => [ + ...memberRows(slug, refs), + permissionRow(slug, ['analytics:Read', 'tenant:Sql:Read:Select'], ['%'], refs), +] + +export const developerRows = (slug: string, refs: string[] = []) => [ + ...readonlyRows(slug, refs), + permissionRow( + slug, + ['functions:Write', 'tenant:Sql:Admin:Write', 'tenant:Sql:Query'], + ['%'], + refs + ), +] + +export const administratorRows = (slug: string, refs: string[] = []) => [ + ...developerRows(slug, refs), + permissionRow(slug, ['write:Create', 'write:Update'], ['projects'], refs), + permissionRow(slug, ['billing:Write', 'infra:Execute'], ['%'], refs), +] + +export const ownerRows = (slug: string, refs: string[] = []) => [ + ...administratorRows(slug, refs), + permissionRow(slug, ['write:Update'], ['organizations'], refs), + permissionRow(slug, ['write:Create', 'write:Delete'], ['auth.subject_roles'], refs), +] diff --git a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.permissions.ts b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.permissions.ts index be204f9d45b..3b94a29c952 100644 --- a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.permissions.ts +++ b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.permissions.ts @@ -447,9 +447,13 @@ const RESOURCE_METADATA_FALLBACK = ( : 'Read-only access to this resource.', }) +export type PermissionLevel = 'user' | 'organization' | 'project' + export interface PermissionCatalogEntry { /** Derived resource key, e.g. "project:database" */ key: string + /** Which FGA namespace the resource lives in β€” decides which role (org vs project) governs it. */ + level: PermissionLevel category: PermissionCategoryKey name: string description: string @@ -482,15 +486,16 @@ const getResource = (key: string): string => const buildCatalog = (): PermissionCatalogEntry[] => { const byResource = new Map< string, - { title: string; readScopes: string[]; writeScopes: string[] } + { level: PermissionLevel; title: string; readScopes: string[]; writeScopes: string[] } >() for (const [scope, scopePerms] of Object.entries(FGA)) { + const level = scope.toLowerCase() as PermissionLevel for (const [permKey, perm] of Object.entries(scopePerms)) { - const resourceKey = `${scope.toLowerCase()}:${getResource(permKey)}` + const resourceKey = `${level}:${getResource(permKey)}` const action = getAction(permKey) if (!byResource.has(resourceKey)) { - byResource.set(resourceKey, { title: perm.title, readScopes: [], writeScopes: [] }) + byResource.set(resourceKey, { level, title: perm.title, readScopes: [], writeScopes: [] }) } const entry = byResource.get(resourceKey)! if (action === 'read') entry.readScopes.push(perm.id) @@ -499,11 +504,12 @@ const buildCatalog = (): PermissionCatalogEntry[] => { } const catalog: PermissionCatalogEntry[] = [] - for (const [key, { title, readScopes, writeScopes }] of byResource.entries()) { + for (const [key, { level, title, readScopes, writeScopes }] of byResource.entries()) { const meta = RESOURCE_METADATA[key] ?? RESOURCE_METADATA_FALLBACK(key, title, writeScopes.length > 0) catalog.push({ key, + level, category: meta.category, name: meta.name, description: meta.description, @@ -541,17 +547,25 @@ export const PERMISSION_CATALOG_BY_CATEGORY: CategoryWithEntries[] = PERMISSION_ /** Map of resource key -> selected mode. Absent keys are treated as 'none'. */ export type PermissionSelection = Record +/** FGA scope ids a catalog entry grants at the given mode. */ +export const getEntryScopes = ( + entry: PermissionCatalogEntry, + mode: PermissionMode +): ScopedAccessTokenPermission[] => { + if (mode === 'none') return [] + if (mode === 'readwrite') return [...entry.readScopes, ...entry.writeScopes] + return entry.readScopes +} + /** Flattens a selection into the concrete FGA scope ids to send to the API. */ export const selectionToScopes = ( selection: PermissionSelection ): ScopedAccessTokenPermission[] => { const scopes: ScopedAccessTokenPermission[] = [] for (const [key, mode] of Object.entries(selection)) { - if (mode === 'none') continue const entry = CATALOG_BY_KEY.get(key) if (!entry) continue - scopes.push(...entry.readScopes) - if (mode === 'readwrite') scopes.push(...entry.writeScopes) + scopes.push(...getEntryScopes(entry, mode)) } return Array.from(new Set(scopes)) } diff --git a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.roles.test.ts b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.roles.test.ts new file mode 100644 index 00000000000..ab3f229e318 --- /dev/null +++ b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.roles.test.ts @@ -0,0 +1,343 @@ +import { permissions } from '@supabase/shared-types' +import { describe, expect, it } from 'vitest' + +import { + administratorRows, + developerRows, + memberRows, + ownerRows, + readonlyRows, + permissionRow as row, +} from './AccessToken.fixtures' +import { getCatalogEntry, type PermissionSelection } from './AccessToken.permissions' +import { + applySelectionToRoleContext, + computeTokenRoleContext, + estimateRoleLevel, + FGA_SCOPE_MINIMUM_ROLE, + getIsProjectScopedOnly, + requiredRoleForEntry, + type TokenRoleContextArgs, +} from './AccessToken.roles' + +type EvaluateTokenAccessArgs = TokenRoleContextArgs & { selection: PermissionSelection } + +/** Composes the two production entry points the way `useTokenAccessEvaluation` does. */ +const evaluateTokenAccess = ({ selection, ...contextArgs }: EvaluateTokenAccessArgs) => + applySelectionToRoleContext(computeTokenRoleContext(contextArgs), selection) + +const ORG = { slug: 'acme' } +const OTHER_ORG = { slug: 'globex' } +const PROJECT = { ref: 'abcdefghij1234567890', organization_slug: 'acme' } +const OTHER_PROJECT = { ref: 'klmnopqrst1234567890', organization_slug: 'acme' } + +const baseArgs: Omit = { + selection: {}, + resourceAccess: 'organization', + organizationSlugs: [ORG.slug], + projectRefs: [], + organizations: [ORG, OTHER_ORG], + projects: [PROJECT, OTHER_PROJECT], +} + +describe('FGA_SCOPE_MINIMUM_ROLE', () => { + it('covers exactly the scope ids published in @supabase/shared-types', () => { + const publishedIds = Object.values(permissions.FgaPermissions) + .flatMap((group) => Object.values(group)) + .map((permission) => permission.id) + .sort() + const mappedIds = Object.keys(FGA_SCOPE_MINIMUM_ROLE).sort() + // If this fails, a scope was added/removed upstream: re-transcribe the role unions from the + // OpenFGA model (platform: openfga/model/supabase.fga) into FGA_SCOPE_MINIMUM_ROLE. + expect(mappedIds).toEqual(publishedIds) + }) +}) + +describe('estimateRoleLevel', () => { + it('identifies each base role from its permission rows', () => { + expect(estimateRoleLevel(ownerRows(ORG.slug), ORG.slug)).toBe('owner') + expect(estimateRoleLevel(administratorRows(ORG.slug), ORG.slug)).toBe('administrator') + expect(estimateRoleLevel(developerRows(ORG.slug), ORG.slug)).toBe('developer') + expect(estimateRoleLevel(readonlyRows(ORG.slug), ORG.slug)).toBe('readonly') + expect(estimateRoleLevel(memberRows(ORG.slug), ORG.slug)).toBe('member') + expect(estimateRoleLevel([], ORG.slug)).toBe('none') + }) + + it('scopes the estimate to the queried organization', () => { + const rows = [...ownerRows(ORG.slug), ...readonlyRows(OTHER_ORG.slug)] + expect(estimateRoleLevel(rows, ORG.slug)).toBe('owner') + expect(estimateRoleLevel(rows, OTHER_ORG.slug)).toBe('readonly') + }) + + it('resolves project-scoped roles only for their projects', () => { + const rows = developerRows(ORG.slug, [PROJECT.ref]) + expect(estimateRoleLevel(rows, ORG.slug, PROJECT.ref)).toBe('developer') + // Org-level (no project) the same user is only a member. + expect(estimateRoleLevel(rows, ORG.slug)).toBe('member') + }) +}) + +describe('project-scoped membership helpers', () => { + it('detects project-scoped-only membership', () => { + expect(getIsProjectScopedOnly(developerRows(ORG.slug, [PROJECT.ref]), ORG.slug)).toBe(true) + expect(getIsProjectScopedOnly(developerRows(ORG.slug), ORG.slug)).toBe(false) + expect(getIsProjectScopedOnly([], ORG.slug)).toBe(false) + }) +}) + +describe('requiredRoleForEntry', () => { + it('maps read and readwrite modes to the FGA role unions', () => { + const database = getCatalogEntry('project:database')! + expect(requiredRoleForEntry(database, 'read')).toBe('readonly') + expect(requiredRoleForEntry(database, 'readwrite')).toBe('developer') + + const members = getCatalogEntry('organization:members')! + expect(requiredRoleForEntry(members, 'read')).toBe('readonly') + expect(requiredRoleForEntry(members, 'readwrite')).toBe('administrator') + + const orgAdmin = getCatalogEntry('organization:admin')! + expect(requiredRoleForEntry(orgAdmin, 'readwrite')).toBe('owner') + }) + + it('takes the strictest scope when readwrite spans multiple write scopes', () => { + // branching_production_write is developer, but create/delete require administrator. + const branching = getCatalogEntry('project:branching_production')! + expect(requiredRoleForEntry(branching, 'readwrite')).toBe('administrator') + }) +}) + +describe('evaluateTokenAccess', () => { + it('is unknown while permissions are loading', () => { + const result = evaluateTokenAccess({ + ...baseArgs, + selection: { 'project:database': 'readwrite' }, + permissions: undefined, + }) + expect(result.status).toBe('unknown') + expect(result.exceedingEntryKeys).toEqual([]) + expect(result.entries['project:database'].status).toBe('unknown') + }) + + it('passes everything the user’s role covers', () => { + const result = evaluateTokenAccess({ + ...baseArgs, + selection: { 'project:database': 'readwrite', 'organization:members': 'readwrite' }, + permissions: administratorRows(ORG.slug), + }) + expect(result.status).toBe('evaluated') + expect(result.exceedingEntryKeys).toEqual([]) + expect(result.effectiveSelection).toEqual({ + 'project:database': 'readwrite', + 'organization:members': 'readwrite', + }) + }) + + it('flags selections above the user’s role and downgrades the effective mode', () => { + const result = evaluateTokenAccess({ + ...baseArgs, + selection: { + 'project:database': 'readwrite', // requires developer + 'project:advisors': 'read', // requires readonly + }, + permissions: readonlyRows(ORG.slug), + }) + expect(result.exceedingEntryKeys).toEqual(['project:database']) + expect(result.entries['project:database']).toMatchObject({ + status: 'exceeds-role', + effectiveMode: 'read', + requiredRole: 'developer', + }) + expect(result.effectiveSelection).toEqual({ + 'project:database': 'read', + 'project:advisors': 'read', + }) + }) + + it('drops entries whose read mode already exceeds the role', () => { + const result = evaluateTokenAccess({ + ...baseArgs, + selection: { 'project:api_gateway_keys': 'read' }, // read requires developer + permissions: readonlyRows(ORG.slug), + }) + expect(result.entries['project:api_gateway_keys']).toMatchObject({ + status: 'exceeds-role', + effectiveMode: 'none', + }) + expect(result.effectiveSelection).toEqual({}) + }) + + it('uses the weakest role across multiple bound organizations and names the failing ones', () => { + const result = evaluateTokenAccess({ + ...baseArgs, + organizationSlugs: [ORG.slug, OTHER_ORG.slug], + selection: { 'project:database': 'readwrite' }, + permissions: [...ownerRows(ORG.slug), ...readonlyRows(OTHER_ORG.slug)], + }) + expect(result.exceedingEntryKeys).toEqual(['project:database']) + // Only the org where the role is insufficient is called out. + expect(result.entries['project:database'].failingResources).toEqual([ + { + type: 'organization', + id: OTHER_ORG.slug, + label: OTHER_ORG.slug, + role: 'readonly', + projectScopedRoles: undefined, + }, + ]) + }) + + it('evaluates project mode per selected project for project-scoped members', () => { + const result = evaluateTokenAccess({ + ...baseArgs, + resourceAccess: 'project', + projectRefs: [PROJECT.ref], + selection: { 'project:database': 'readwrite', 'organization:members': 'read' }, + permissions: developerRows(ORG.slug, [PROJECT.ref]), + }) + // Developer on the bound project: database readwrite is fine. + expect(result.entries['project:database'].status).toBe('ok') + // But org-level scopes check the org-wide role, which is only member β€” and the failure + // carries their real per-project role so the UI can explain the distinction. + expect(result.entries['organization:members'].status).toBe('exceeds-role') + expect(result.entries['organization:members'].failingResources).toEqual([ + { + type: 'organization', + id: ORG.slug, + label: ORG.slug, + role: 'member', + projectScopedRoles: [{ label: PROJECT.ref, role: 'developer' }], + }, + ]) + }) + + it('explains org-level failures for members invited only to a project', () => { + // Read-only on one project, selecting Organization Settings read-write (requires Owner). + const result = evaluateTokenAccess({ + ...baseArgs, + resourceAccess: 'project', + projectRefs: [PROJECT.ref], + selection: { 'organization:admin': 'readwrite' }, + permissions: readonlyRows(ORG.slug, [PROJECT.ref]), + organizations: [{ ...ORG, name: 'Acme Corp' }], + projects: [{ ...PROJECT, name: 'Acme production' }], + }) + expect(result.entries['organization:admin']).toMatchObject({ + status: 'exceeds-role', + requiredRole: 'owner', + failingResources: [ + { + type: 'organization', + id: ORG.slug, + label: 'Acme Corp', + role: 'member', + projectScopedRoles: [{ label: 'Acme production', role: 'readonly' }], + }, + ], + }) + }) + + it('attaches project-scoped detail even when stray org-level rows exist', () => { + // Real permissions data can include org-level rows (e.g. restrictive rules) alongside a + // project-scoped role; the per-project detail must still resolve. + const strayOrgRow = row(ORG.slug, ['read:Read'], ['notifications']) + const result = evaluateTokenAccess({ + ...baseArgs, + resourceAccess: 'project', + projectRefs: [PROJECT.ref], + selection: { 'organization:admin': 'readwrite' }, + permissions: [...readonlyRows(ORG.slug, [PROJECT.ref]), strayOrgRow], + projects: [{ ...PROJECT, name: 'Acme production' }], + }) + expect(result.entries['organization:admin'].failingResources).toEqual([ + { + type: 'organization', + id: ORG.slug, + label: ORG.slug, + role: 'member', + projectScopedRoles: [{ label: 'Acme production', role: 'readonly' }], + }, + ]) + }) + + it('does not attach project-scoped detail for organization-wide members', () => { + const result = evaluateTokenAccess({ + ...baseArgs, + selection: { 'organization:admin': 'readwrite' }, + permissions: developerRows(ORG.slug), + }) + expect(result.entries['organization:admin'].failingResources).toEqual([ + { + type: 'organization', + id: ORG.slug, + label: ORG.slug, + role: 'developer', + projectScopedRoles: undefined, + }, + ]) + }) + + it('labels failing resources with their display names when provided', () => { + const result = evaluateTokenAccess({ + ...baseArgs, + resourceAccess: 'project', + projectRefs: [PROJECT.ref], + selection: { 'project:database': 'readwrite' }, + permissions: readonlyRows(ORG.slug), + projects: [{ ...PROJECT, name: 'Acme production' }], + }) + expect(result.entries['project:database'].failingResources).toEqual([ + { type: 'project', id: PROJECT.ref, label: 'Acme production', role: 'readonly' }, + ]) + }) + + it('reports bound resources the user can no longer access', () => { + const result = evaluateTokenAccess({ + ...baseArgs, + organizationSlugs: ['departed-org'], + selection: { 'project:database': 'read' }, + permissions: readonlyRows(ORG.slug), + organizations: [ORG], + }) + expect(result.inaccessibleOrgSlugs).toEqual(['departed-org']) + expect(result.hasNoAccessibleResource).toBe(true) + expect(result.entries['project:database'].status).toBe('unknown') + }) + + it('reports partially inaccessible projects while still evaluating the rest', () => { + const result = evaluateTokenAccess({ + ...baseArgs, + resourceAccess: 'project', + projectRefs: [PROJECT.ref, 'gone-project-ref-123'], + selection: { 'project:database': 'read' }, + permissions: readonlyRows(ORG.slug), + }) + expect(result.inaccessibleProjectRefs).toEqual(['gone-project-ref-123']) + expect(result.hasNoAccessibleResource).toBe(false) + expect(result.entries['project:database'].status).toBe('ok') + }) + + it('is unknown before any resource is selected', () => { + const result = evaluateTokenAccess({ + ...baseArgs, + resourceAccess: 'project', + organizationSlugs: [ORG.slug], + projectRefs: [], + selection: { 'project:database': 'readwrite' }, + permissions: readonlyRows(ORG.slug), + }) + expect(result.status).toBe('unknown') + expect(result.exceedingEntryKeys).toEqual([]) + }) + + it('never flags account-scoped tokens', () => { + const result = evaluateTokenAccess({ + ...baseArgs, + resourceAccess: 'account', + organizationSlugs: [], + selection: { 'project:database': 'readwrite' }, + permissions: memberRows(ORG.slug), + }) + expect(result.exceedingEntryKeys).toEqual([]) + expect(result.entries['project:database'].status).toBe('ok') + }) +}) diff --git a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.roles.ts b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.roles.ts new file mode 100644 index 00000000000..c4039ee8bb4 --- /dev/null +++ b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.roles.ts @@ -0,0 +1,584 @@ +import { PermissionAction } from '@supabase/shared-types/out/constants' + +import type { + PermissionCatalogEntry, + PermissionMode, + PermissionSelection, + ResourceAccessMode, +} from './AccessToken.permissions' +import { getCatalogEntry, getEntryScopes } from './AccessToken.permissions' +import { doPermissionsCheck } from '@/hooks/misc/useCheckPermissions' +import type { Permission } from '@/types' + +/** + * Client-side estimation of what a scoped token can actually do, given its owner's current role. + * + * Scoped tokens are enforced server-side as the intersection of the token's granted scopes and + * the owner's live role, re-checked on every request. Nothing here gates anything β€” these helpers + * only power advisory UI (warnings in the creation flow, status badges in the token view) so users + * aren't surprised when an over-provisioned scope returns 403. + * + * The minimum-role table below is transcribed from the OpenFGA authorization model + * (platform: openfga/model/supabase.fga), where every permission is a union of base roles. + * AccessToken.roles.test.ts asserts the table stays in sync with the scope ids in + * `@supabase/shared-types` FgaPermissions. + */ + +/** Base-role ladder. `member` covers org membership without a base role (e.g. project-scoped users at org level). */ +export const TOKEN_ROLE_LEVELS = [ + 'none', + 'member', + 'readonly', + 'developer', + 'administrator', + 'owner', +] as const + +export type TokenRoleLevel = (typeof TOKEN_ROLE_LEVELS)[number] + +const ROLE_RANK = Object.fromEntries( + TOKEN_ROLE_LEVELS.map((role, index) => [role, index]) +) as Record + +export const TOKEN_ROLE_LABEL: Record = { + none: 'No role', + member: 'Member', + readonly: 'Read-only', + developer: 'Developer', + administrator: 'Administrator', + owner: 'Owner', +} + +const rankOf = (role: TokenRoleLevel) => ROLE_RANK[role] + +const minRole = (a: TokenRoleLevel, b: TokenRoleLevel): TokenRoleLevel => + rankOf(a) <= rankOf(b) ? a : b + +const maxRole = (a: TokenRoleLevel, b: TokenRoleLevel): TokenRoleLevel => + rankOf(a) >= rankOf(b) ? a : b + +/** + * Lowest base role that holds each FGA permission scope, transcribed from the role unions in the + * OpenFGA model. Keep in the same order as the model for easy diffing. + * + * The drift-guard test only pins the *key set* (scope ids). The role values have no automated + * guard: if a role union changes in the OpenFGA model (e.g. a `_write` scope moves from developer + * to administrator), CI stays green and this advisory UI silently gives stale guidance until the + * value is re-transcribed here. Reviewers of FGA model changes must update this table in the same + * change. + */ +export const FGA_SCOPE_MINIMUM_ROLE: Record = { + // user β€” available to any authenticated account, no org role required + organizations_read: 'member', + organizations_create: 'member', + projects_read: 'member', + snippets_read: 'member', + + // organization + organization_admin_read: 'member', + organization_admin_write: 'owner', + organization_projects_read: 'member', + organization_projects_create: 'administrator', + members_read: 'readonly', + members_write: 'administrator', + platform_webhooks_organization_read: 'member', + platform_webhooks_organization_write: 'administrator', + + // project + project_admin_read: 'member', + project_admin_write: 'administrator', + action_runs_read: 'readonly', + action_runs_write: 'developer', + advisors_read: 'readonly', + analytics_config_read: 'developer', + analytics_config_write: 'administrator', + analytics_logs_read: 'readonly', + analytics_usage_read: 'readonly', + api_gateway_keys_read: 'developer', + api_gateway_keys_write: 'administrator', + auth_config_read: 'readonly', + auth_config_write: 'developer', + auth_signing_keys_read: 'developer', + auth_signing_keys_write: 'developer', + backups_read: 'readonly', + backups_write: 'developer', + branching_development_create: 'developer', + branching_development_delete: 'developer', + branching_development_read: 'readonly', + branching_development_write: 'developer', + branching_production_create: 'administrator', + branching_production_delete: 'administrator', + branching_production_read: 'readonly', + branching_production_write: 'developer', + custom_domain_read: 'readonly', + custom_domain_write: 'administrator', + data_api_config_read: 'readonly', + data_api_config_write: 'administrator', + database_read: 'readonly', + database_write: 'developer', + database_config_read: 'readonly', + database_config_write: 'administrator', + database_jit_read: 'readonly', + database_jit_write: 'administrator', + database_network_bans_read: 'readonly', + database_network_bans_write: 'administrator', + database_network_restrictions_read: 'readonly', + database_network_restrictions_write: 'administrator', + database_migrations_read: 'readonly', + database_migrations_write: 'developer', + database_pooling_config_read: 'readonly', + database_pooling_config_write: 'administrator', + database_readonly_config_read: 'readonly', + database_readonly_config_write: 'administrator', + database_ssl_config_read: 'readonly', + database_ssl_config_write: 'administrator', + database_webhooks_config_read: 'readonly', + database_webhooks_config_write: 'developer', + edge_functions_read: 'readonly', + edge_functions_write: 'developer', + edge_functions_secrets_read: 'readonly', + edge_functions_secrets_write: 'administrator', + infra_add_ons_read: 'readonly', + infra_add_ons_write: 'administrator', + infra_disk_config_read: 'readonly', + infra_disk_config_write: 'administrator', + infra_read_replicas_read: 'readonly', + infra_read_replicas_write: 'administrator', + project_snippets_read: 'readonly', + project_snippets_write: 'readonly', + realtime_config_read: 'readonly', + realtime_config_write: 'administrator', + storage_read: 'readonly', + storage_write: 'developer', + storage_config_read: 'readonly', + storage_config_write: 'administrator', + vanity_subdomain_read: 'administrator', + vanity_subdomain_write: 'administrator', + platform_webhooks_projects_read: 'member', + platform_webhooks_projects_write: 'administrator', +} + +/** + * ABAC checks that identify the user's base role from their own permission rows (the ungated + * /platform/profile/permissions response). Base roles inherit each other's rows + * (Owner βŠƒ Administrator βŠƒ Developer βŠƒ Read-only), so the first probe that passes, walking + * top-down, is the user's level. Each probe is a permission only that role and above holds. + */ +const ROLE_PROBES: { role: TokenRoleLevel; action: string; resource: string }[] = [ + { role: 'owner', action: PermissionAction.UPDATE, resource: 'organizations' }, + { role: 'administrator', action: PermissionAction.CREATE, resource: 'projects' }, + { role: 'developer', action: PermissionAction.FUNCTIONS_WRITE, resource: 'functions' }, + { role: 'readonly', action: PermissionAction.TENANT_SQL_SELECT, resource: 'sql' }, +] + +/** + * Estimates the user's base role in an organization (or on a specific project, when the user's + * access is project-scoped). Custom roles resolve to the nearest base role by capability, which + * matches how they behave in the FGA model. + */ +export const estimateRoleLevel = ( + permissions: Permission[], + organizationSlug: string, + projectRef?: string +): TokenRoleLevel => { + for (const probe of ROLE_PROBES) { + if ( + doPermissionsCheck( + permissions, + probe.action, + probe.resource, + undefined, + organizationSlug, + projectRef + ) + ) { + return probe.role + } + } + const isMember = permissions.some( + (permission) => permission.organization_slug === organizationSlug + ) + return isMember ? 'member' : 'none' +} + +/** True when every permission row the user holds in the org is limited to specific projects. */ +export const getIsProjectScopedOnly = ( + permissions: Permission[], + organizationSlug: string +): boolean => { + const orgRows = permissions.filter( + (permission) => permission.organization_slug === organizationSlug + ) + if (orgRows.length === 0) return false + return orgRows.every( + (permission) => permission.project_refs !== undefined && permission.project_refs.length > 0 + ) +} + +/** Lowest role that holds every scope in the list. Unknown scope ids assume `owner` (warn rather than promise). */ +const requiredRoleForScopes = (scopeIds: string[]): TokenRoleLevel => { + let required: TokenRoleLevel = 'member' + for (const id of scopeIds) { + required = maxRole(required, FGA_SCOPE_MINIMUM_ROLE[id] ?? 'owner') + } + return required +} + +/** Lowest role that can exercise a catalog entry at the given mode. */ +export const requiredRoleForEntry = ( + entry: PermissionCatalogEntry, + mode: PermissionMode +): TokenRoleLevel => + mode === 'none' ? 'member' : requiredRoleForScopes(getEntryScopes(entry, mode)) + +export type EntryAccessStatus = 'ok' | 'exceeds-role' | 'unknown' + +/** A token-bound resource where the user's current role can't exercise the selected mode. */ +export interface FailingResource { + type: 'organization' | 'project' + /** Org slug or project ref β€” unique, unlike `label`. Use for React keys and grouping. */ + id: string + /** Display name of the org/project, falling back to its slug/ref. */ + label: string + /** The user's current role on that resource. */ + role: TokenRoleLevel + /** + * Set when the user has no organization-level role here but does hold roles on specific + * projects (they were invited to projects, not the org). Lets the UI say "your role is + * Read-only on the project X" instead of an opaque org-level pseudo-role. + */ + projectScopedRoles?: { label: string; role: TokenRoleLevel }[] +} + +export interface EntryAccess { + status: EntryAccessStatus + /** Highest mode the user's current role can exercise for this entry. */ + effectiveMode: PermissionMode + /** Lowest role that could exercise the selected mode. */ + requiredRole: TokenRoleLevel + /** Resources where the selected mode would be denied (empty unless status is 'exceeds-role'). */ + failingResources: FailingResource[] +} + +export interface TokenAccessEvaluation { + /** 'unknown' while the user's permissions are loading (or on self-hosted) β€” show no warnings. */ + status: 'unknown' | 'evaluated' + /** Token-bound orgs the user can no longer access. */ + inaccessibleOrgSlugs: string[] + /** Token-bound projects the user can no longer access. */ + inaccessibleProjectRefs: string[] + /** True when a resource-scoped token has no bindings left β€” everything it was bound to was deleted. */ + hasNoBoundResources: boolean + /** True when the token is bound to resources but the user can access none of them. */ + hasNoAccessibleResource: boolean + /** Per selected catalog entry key. */ + entries: Record + /** Entry keys whose selected mode exceeds the user's current role. */ + exceedingEntryKeys: string[] + /** Selection reduced to what the user's current role can exercise. */ + effectiveSelection: PermissionSelection +} + +export interface TokenRoleContextArgs { + resourceAccess: ResourceAccessMode + /** Token-bound org slugs (organization mode), or the parent org (project mode, from the form). */ + organizationSlugs: string[] + /** Token-bound project refs (project mode). */ + projectRefs: string[] + /** The user's own ABAC permission rows; undefined while loading. */ + permissions: Permission[] | undefined + /** Organizations the user can currently access. */ + organizations: { slug: string; name?: string }[] + /** Projects the user can currently access. */ + projects: { ref: string; organization_slug: string; name?: string }[] +} + +/** + * Selection-independent role resolution for a token's bound resources. Resolving roles walks the + * user's full permission list several times, so callers should memoize this on its inputs and + * apply (cheap) selection changes via `applySelectionToRoleContext`. + */ +export interface TokenRoleContext { + status: 'unknown' | 'evaluated' + resourceAccess: ResourceAccessMode + inaccessibleOrgSlugs: string[] + inaccessibleProjectRefs: string[] + hasNoBoundResources: boolean + hasNoAccessibleResource: boolean + /** Per bound organization (or parent org in project mode). */ + orgLevels: FailingResource[] + /** Per bound project in project mode; mirrors orgLevels otherwise (org roles cascade). */ + projectLevels: FailingResource[] + /** Weakest role across orgLevels / projectLevels. */ + orgLevel: TokenRoleLevel + projectLevel: TokenRoleLevel +} + +const UNKNOWN_ENTRY: EntryAccess = { + status: 'unknown', + effectiveMode: 'none', + requiredRole: 'member', + failingResources: [], +} + +const minOver = (levels: FailingResource[]): TokenRoleLevel => + levels.length === 0 + ? 'none' + : levels.reduce((lowest, level) => minRole(lowest, level.role), 'owner') + +export const computeTokenRoleContext = ({ + resourceAccess, + organizationSlugs, + projectRefs, + permissions, + organizations, + projects, +}: TokenRoleContextArgs): TokenRoleContext => { + const boundResourceIds = + resourceAccess === 'project' + ? projectRefs + : resourceAccess === 'organization' + ? organizationSlugs + : [] + const hasNoBoundResources = resourceAccess !== 'account' && boundResourceIds.length === 0 + + const unknownContext = (status: TokenRoleContext['status']): TokenRoleContext => ({ + status, + resourceAccess, + inaccessibleOrgSlugs: [], + inaccessibleProjectRefs: [], + hasNoBoundResources, + hasNoAccessibleResource: false, + orgLevels: [], + projectLevels: [], + orgLevel: 'none', + projectLevel: 'none', + }) + + // Nothing to evaluate while permissions load, or until resources are chosen (mid-form state). + if (permissions === undefined || hasNoBoundResources) return unknownContext('unknown') + if (resourceAccess === 'account') return unknownContext('evaluated') + + const knownOrgSlugs = new Set(organizations.map((org) => org.slug)) + const projectsByRef = new Map(projects.map((project) => [project.ref, project])) + + const inaccessibleOrgSlugs = organizationSlugs.filter((slug) => !knownOrgSlugs.has(slug)) + // Only meaningful in project mode β€” the form can carry stale projectRefs after a mode switch. + const inaccessibleProjectRefs = + resourceAccess === 'project' ? projectRefs.filter((ref) => !projectsByRef.has(ref)) : [] + + const accessibleOrgSlugs = organizationSlugs.filter((slug) => knownOrgSlugs.has(slug)) + const accessibleProjects = projectRefs.flatMap((ref) => projectsByRef.get(ref) ?? []) + + const hasNoAccessibleResource = + resourceAccess === 'project' ? accessibleProjects.length === 0 : accessibleOrgSlugs.length === 0 + + if (hasNoAccessibleResource) { + return { + ...unknownContext('evaluated'), + inaccessibleOrgSlugs, + inaccessibleProjectRefs, + hasNoAccessibleResource, + } + } + + // Role probes walk every permission row; the same org/project pair is asked for repeatedly + // (project levels + project-scoped detail), so resolve each pair once. + const roleCache = new Map() + const roleFor = (slug: string, ref?: string): TokenRoleLevel => { + const cacheKey = `${slug}|${ref ?? ''}` + const cached = roleCache.get(cacheKey) + if (cached !== undefined) return cached + const role = estimateRoleLevel(permissions, slug, ref) + roleCache.set(cacheKey, role) + return role + } + + const organizationsBySlug = new Map(organizations.map((org) => [org.slug, org])) + + // The form passes the parent org even in project mode; the token view may not, so fall back to + // the bound projects' parent orgs when no org slug was provided. + const orgSlugsForLevels = + accessibleOrgSlugs.length > 0 + ? accessibleOrgSlugs + : Array.from(new Set(accessibleProjects.map((project) => project.organization_slug))) + + // For members without an organization-level role, resolve their per-project roles so org-level + // failures can explain the distinction (invited to projects, not the org). In project mode only + // the token-bound projects are relevant; in organization mode (e.g. a token that predates a + // role change) look at every project they can access in the org. + const getProjectScopedRoles = ( + slug: string, + orgRole: TokenRoleLevel + ): FailingResource['projectScopedRoles'] => { + if (rankOf(orgRole) >= ROLE_RANK.readonly) return undefined + const candidates = + resourceAccess === 'project' + ? accessibleProjects.filter((project) => project.organization_slug === slug) + : projects.filter((project) => project.organization_slug === slug) + const roles = candidates.flatMap((project) => { + const role = roleFor(slug, project.ref) + if (rankOf(role) < ROLE_RANK.readonly) return [] + return [{ label: project.name ?? project.ref, role }] + }) + return roles.length > 0 ? roles : undefined + } + + const orgLevels: FailingResource[] = orgSlugsForLevels.map((slug) => { + const role = roleFor(slug) + return { + type: 'organization', + id: slug, + label: organizationsBySlug.get(slug)?.name ?? slug, + role, + projectScopedRoles: getProjectScopedRoles(slug, role), + } + }) + + const projectLevels: FailingResource[] = + resourceAccess === 'project' + ? accessibleProjects.map((project) => ({ + type: 'project' as const, + id: project.ref, + label: project.name ?? project.ref, + role: roleFor(project.organization_slug, project.ref), + })) + : orgLevels + + return { + status: 'evaluated', + resourceAccess, + inaccessibleOrgSlugs, + inaccessibleProjectRefs, + hasNoBoundResources, + hasNoAccessibleResource, + orgLevels, + projectLevels, + orgLevel: minOver(orgLevels), + projectLevel: minOver(projectLevels), + } +} + +/** + * Applies a scope selection to a resolved role context. Cheap β€” safe to re-run on every + * permission toggle. Account-scoped (legacy/user) tokens track the owner's access by definition, + * so every entry evaluates as 'ok' there. + */ +export const applySelectionToRoleContext = ( + context: TokenRoleContext, + selection: PermissionSelection +): TokenAccessEvaluation => { + const base = { + status: context.status, + inaccessibleOrgSlugs: context.inaccessibleOrgSlugs, + inaccessibleProjectRefs: context.inaccessibleProjectRefs, + hasNoBoundResources: context.hasNoBoundResources, + hasNoAccessibleResource: context.hasNoAccessibleResource, + exceedingEntryKeys: [] as string[], + effectiveSelection: selection, + } + + const selectedKeys = Object.keys(selection).filter((key) => selection[key] !== 'none') + + // Account-scoped (legacy/user) tokens track the owner's access by definition β€” every entry is + // exercisable, so requiredRole/failingResources (only read for 'exceeds-role' entries) stay inert. + if (context.status === 'evaluated' && context.resourceAccess === 'account') { + return { + ...base, + entries: Object.fromEntries( + selectedKeys.map((key): [string, EntryAccess] => [ + key, + { + status: 'ok', + effectiveMode: selection[key], + requiredRole: 'member', + failingResources: [], + }, + ]) + ), + } + } + + if (context.status === 'unknown' || context.hasNoAccessibleResource) { + return { + ...base, + entries: Object.fromEntries(selectedKeys.map((key) => [key, UNKNOWN_ENTRY])), + } + } + + const { orgLevel, projectLevel, orgLevels, projectLevels } = context + const entries: Record = {} + const exceedingEntryKeys: string[] = [] + const effectiveSelection: PermissionSelection = {} + + for (const key of selectedKeys) { + const mode = selection[key] + const entry = getCatalogEntry(key) + if (!entry) continue + + const availableLevel = + entry.level === 'user' ? 'owner' : entry.level === 'organization' ? orgLevel : projectLevel + + const requiredRole = requiredRoleForEntry(entry, mode) + + let effectiveMode: PermissionMode = 'none' + if (rankOf(availableLevel) >= rankOf(requiredRole)) { + effectiveMode = mode + } else if ( + mode === 'readwrite' && + rankOf(availableLevel) >= rankOf(requiredRoleForEntry(entry, 'read')) + ) { + effectiveMode = 'read' + } + + const status: EntryAccessStatus = effectiveMode === mode ? 'ok' : 'exceeds-role' + const relevantLevels = + entry.level === 'user' ? [] : entry.level === 'organization' ? orgLevels : projectLevels + const failingResources = + status === 'exceeds-role' + ? relevantLevels.filter((level) => rankOf(level.role) < rankOf(requiredRole)) + : [] + + entries[key] = { status, effectiveMode, requiredRole, failingResources } + if (status === 'exceeds-role') exceedingEntryKeys.push(key) + if (effectiveMode !== 'none') effectiveSelection[key] = effectiveMode + } + + return { ...base, entries, exceedingEntryKeys, effectiveSelection } +} + +export interface FailingResourceGroup { + type: 'organization' | 'project' + resource: FailingResource + entries: { key: string; name: string; mode: PermissionMode; requiredRole: TokenRoleLevel }[] +} + +/** + * Inverts the evaluation's entry β†’ failingResources mapping into resource β†’ failing entries + * (organizations first, then alphabetical) for per-resource breakdowns. + */ +export const groupFailingResources = ( + evaluation: TokenAccessEvaluation, + selection: PermissionSelection +): FailingResourceGroup[] => { + const groups = new Map() + for (const key of evaluation.exceedingEntryKeys) { + const entryAccess = evaluation.entries[key] + const entry = getCatalogEntry(key) + const mode = selection[key] + if (entryAccess === undefined || entry === undefined || mode === undefined) continue + for (const resource of entryAccess.failingResources) { + const groupKey = `${resource.type}:${resource.id}` + let group = groups.get(groupKey) + if (group === undefined) { + group = { type: resource.type, resource, entries: [] } + groups.set(groupKey, group) + } + group.entries.push({ key, name: entry.name, mode, requiredRole: entryAccess.requiredRole }) + } + } + return Array.from(groups.values()).sort((a, b) => { + if (a.type === b.type) return a.resource.label.localeCompare(b.resource.label) + return a.type === 'organization' ? -1 : 1 + }) +} From 66a4a0b32db0773e2f0613c6f2236b871c3a24fc Mon Sep 17 00:00:00 2001 From: Eduardo Gurgel Date: Fri, 7 Aug 2026 10:00:53 +1200 Subject: [PATCH 60/83] fix(docs): realtime deletes can be surfaced and filtered (#48785) --- apps/docs/content/guides/realtime/postgres-changes.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/docs/content/guides/realtime/postgres-changes.mdx b/apps/docs/content/guides/realtime/postgres-changes.mdx index 5094cdf3b20..e43943740d6 100644 --- a/apps/docs/content/guides/realtime/postgres-changes.mdx +++ b/apps/docs/content/guides/realtime/postgres-changes.mdx @@ -3438,7 +3438,7 @@ alter table -RLS policies are not applied to `DELETE` statements, because there is no way for Postgres to verify that a user has access to a deleted record. When RLS is enabled and `replica identity` is set to `full` on a table, the `old` record contains only the primary key(s). +RLS policies are not applied to `DELETE` statements, because there is no way for Postgres to verify that a user has access to a deleted record. @@ -3619,9 +3619,9 @@ await channel.Subscribe(); ## Limitations -### Delete events are not filterable +### Delete events -You can't filter Delete events when tracking Postgres Changes. This limitation is due to the way changes are pulled from Postgres. +You can only filter Delete events when tracking Postgres Changes if the table has the `replica identity` set to `full`. See [Receiving old records](#receiving-old-records). ## Scaling Postgres Changes From 6ac031673869c67a7c446b1c8cac8ce43476200b Mon Sep 17 00:00:00 2001 From: Wendie Cheung <49030266+wendeh@users.noreply.github.com> Date: Fri, 7 Aug 2026 08:50:44 +1000 Subject: [PATCH 61/83] Add QA.tech customer case study (#48798) --- apps/www/_customers/qa-tech.mdx | 91 ++++++++++++++++++ apps/www/data/CustomerStories.ts | 12 +++ .../images/customers/logos/light/qa-tech.png | Bin 0 -> 12817 bytes .../public/images/customers/logos/qa-tech.png | Bin 0 -> 58064 bytes 4 files changed, 103 insertions(+) create mode 100644 apps/www/_customers/qa-tech.mdx create mode 100644 apps/www/public/images/customers/logos/light/qa-tech.png create mode 100644 apps/www/public/images/customers/logos/qa-tech.png diff --git a/apps/www/_customers/qa-tech.mdx b/apps/www/_customers/qa-tech.mdx new file mode 100644 index 00000000000..95c3e5556e8 --- /dev/null +++ b/apps/www/_customers/qa-tech.mdx @@ -0,0 +1,91 @@ +--- +name: QA.tech +title: How QA.tech built enterprise-ready AI testing agents on Supabase +description: QA.tech is an autonomous AI testing platform whose QA agents run end-to-end testing of web and mobile products by goal and intent. Three years on Supabase took QA.tech from three founders to a global customer base, enterprise-scale daily test volume, and SOC 2 compliance. +author: wendie_cheung +author_title: Product Marketing +logo: /images/customers/logos/qa-tech.png +logo_inverse: /images/customers/logos/light/qa-tech.png +tags: + - supabase +date: '2026-08-04' +company_url: https://qa.tech +stats: [] +misc: + [ + { label: 'Use case', text: 'Autonomous AI agents for end-to-end software QA testing' }, + { label: 'Solutions', text: 'Database, Auth, Realtime, Storage' }, + ] +about: 'QA.tech is an agentic quality assurance (QA) platform: its QA agents test software for enterprises through the UI, by user goal rather than scripted steps, so engineering teams catch bugs before they ship.' +# "healthcare" | "fintech" | "ecommerce" | "education" | "gaming" | "media" | "real-estate" | "saas" | "social" | "analytics" | "ai" | "developer-tools" +industry: ['ai', 'saas', 'developer-tools'] +# "startup" | "enterprise" | "indie_dev" +company_size: 'startup' +# "Asia" | "Europe" | "North America" | "South America" | "Africa" | "Oceania" +region: 'Europe' +# "database" | "auth" | "storage" | "realtime" | "functions" | "vector" +supabase_products: ['database', 'auth', 'realtime', 'storage'] +--- + +> Supabase is compelling to us because it's a complete solution. You get features you'd normally lack in a simple Postgres setup, and when you're a lean team that wants to focus on building instead of infrastructure ops, those extra features matter to us. +> +> _β€” Vilhelm von Ehrenheim, Chief AI Officer and co-founder, [QA.tech](https://qa.tech)_ + +QA.tech is an agentic quality assurance (QA) platform: its QA agents test software for enterprises through the UI, by user goal rather than scripted steps, so engineering teams catch bugs before they ship. QA.tech was founded three years ago and today supports customers around the globe, growing sevenfold last year alone as engineering teams adopt autonomous QA agents. + +Supabase has supported QA.tech's growth as its backend infrastructure since day one. As QA.tech has grown, and especially as it has moved into serving large enterprise customers, Supabase has scaled alongside it and helped it reliably meet the growing demands of its own customers. + +## The challenge + +When Vilhelm von Ehrenheim and his co-founders started QA.tech, AI agents in general were barely capable of reliably clicking through a web interface, let alone testing one. Building a reliable product on top of immature technology, one that had to keep pace with a fast-changing AI industry, was hard enough on its own. Rather than spend their limited engineering resources building and maintaining a backend, the team chose to invest time into QA.tech's core product instead. + +Their future customers faced a version of the same tradeoff. Most had already tried to solve QA some other way: a manual QA team that couldn't keep pace with engineering, or scripted browser tests that broke every time a button moved or a workflow got redesigned. QA.tech calls this the "maintenance tax," with engineering time spent babysitting brittle scripts instead of shipping the product, and it's the same tax QA.tech avoided for itself by choosing not to build its own backend. + +## Why they chose Supabase + +Before choosing Supabase, the team had looked at hosting a backend on a hyperscaler instead, which was a more common practice at the time. Supabase was preferred as it bundled everything the team needed into one platform: a managed Postgres database, authentication, and Realtime channels for building responsive interfaces, without needing to stitch together separate vendors. + +Embeddings for search were also available, which QA.tech adopted quickly. In the first year and a half, while QA.tech's product itself was still being built and pivoted in different directions, Supabase's flexibility mattered as much as its features. + +> There was a lot of experimentation and pivoting in that first year and a half. Supabase let us try things and iterate fast, and it scaled with us the whole way, through the pivots and after we finally committed to a direction. +> +> _β€” Vilhelm von Ehrenheim, Chief AI Officer and co-founder, [QA.tech](https://qa.tech)_ + +## How QA.tech runs on Supabase + +QA.tech's product lets customers watch QA agents work in real time: configuring tests, chatting with AI to create new ones, and following along as agents click through an interface. That live view depends on Supabase Realtime, since a single regression run can spawn many agents at once and customers need to see them as they run. + +Auth and Row Level Security (RLS) handle permissions, and QA.tech added SSO on top as it started working with larger enterprises. Postgres tables store test runs, configurations, and metadata, the parts of the system that map cleanly onto a relational database. + +QA.tech originally kept everything, including full agent traces with screenshots and video inside Supabase. As customer volume grew, those tables became too large, and the team had to re-architect how it stored that data. Supabase stayed at the core of the system; large trace payloads now post to a message queue and land in blob storage outside Supabase, while Supabase's Realtime channels still notify the interface, carrying an ID the UI uses to fetch the trace from blob storage when needed. + +## Growing into the enterprise + +As QA.tech started landing bigger customers, including those in data-sensitive industries like finance and pharmaceuticals, security certifications became a requirement to win their business. QA.tech pursued SOC 2, leaning on Supabase's existing security controls to achieve compliance. + +> When we started working with larger enterprise customers, especially banks, we needed certifications to show we had a strong security posture. Supabase already had a lot of that in place, which made it much easier for us to get certified. +> +> _β€” Vilhelm von Ehrenheim, Chief AI Officer and co-founder, [QA.tech](https://qa.tech)_ + +Some of QA.tech's enterprise customers also cared about where their data lived, wanting European data to stay in Europe. Supabase's region support handled that without QA.tech needing to rethink its core backend. + +## The results + +- QA.tech now serves a growing global customer base and runs QA agents at enterprise scale every day, handling load spikes during large regression runs. +- The founding team was able to move quickly and build a product without needing to build a backend from scratch. +- QA.tech achieved SOC 2 compliance quickly, helped by security controls Supabase already had in place. +- QA.tech continues to scale with Supabase as enterprise demand grows. + +> Without Supabase, we'd have needed at least two engineers to get the same functionality. That's time we'd rather spend building what we sell to customers. +> +> _β€” Vilhelm von Ehrenheim, Chief AI Officer and co-founder, [QA.tech](https://qa.tech)_ + +## What's next + +QA.tech continues its mission to free developers from the "maintenance tax," the repetitive work of QA that keeps engineers from building. The team plans to keep scaling its customer base and processing capacity, help customers shift testing earlier in development, and expand the verification layer to cover more of what needs to be checked before code reaches production. + +Vilhelm's advice to other early-stage founders evaluating a backend today is the same lesson QA.tech learned three years ago. + +> Don't try to build everything yourself, even though you can build a lot with agents today. There are cool solutions out there, like Supabase. Use them, and focus on building your product instead. +> +> _β€” Vilhelm von Ehrenheim, Chief AI Officer and co-founder, [QA.tech](https://qa.tech)_ diff --git a/apps/www/data/CustomerStories.ts b/apps/www/data/CustomerStories.ts index 83bff407aba..90c51bfe4cf 100644 --- a/apps/www/data/CustomerStories.ts +++ b/apps/www/data/CustomerStories.ts @@ -18,6 +18,18 @@ export type CustomerStoryType = { } export const data: CustomerStoryType[] = [ + { + type: 'Customer Story', + title: 'How QA.tech built enterprise-ready AI testing agents on Supabase', + description: + 'QA.tech is an autonomous AI testing platform whose QA agents run end-to-end testing of web and mobile products by goal and intent. Three years on Supabase took QA.tech from three founders to a global customer base, enterprise-scale daily test volume, and SOC 2 compliance.', + organization: 'QA.tech', + imgUrl: 'images/customers/logos/qa-tech.png', + logo: '/images/customers/logos/qa-tech.png', + logo_inverse: '/images/customers/logos/light/qa-tech.png', + url: '/customers/qa-tech', + ctaText: 'View story', + }, { type: 'Customer Story', title: 'Cofounder builds autonomous companies on Supabase', diff --git a/apps/www/public/images/customers/logos/light/qa-tech.png b/apps/www/public/images/customers/logos/light/qa-tech.png new file mode 100644 index 0000000000000000000000000000000000000000..42067eeb3b9f7a3c2bc54c3efc476e59e10c568c GIT binary patch literal 12817 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 FzX1Hj>kj|` literal 0 HcmV?d00001 diff --git a/apps/www/public/images/customers/logos/qa-tech.png b/apps/www/public/images/customers/logos/qa-tech.png new file mode 100644 index 0000000000000000000000000000000000000000..b46efd617b8f2a796c180b54ab9c406f1259e1bf GIT binary patch literal 58064 zcmeFZWmuK#)&&g91ujIT1Qex2K{^y^SO^G6DN0Ehgot!3=>;gLh!}*@(n^DLs|ZLV z-BN4ONJpDMhyZ7d)JLVj7j4|)0S2dN79AY{|LPByxRYg&o zgyaAb`N5FGf6++noPd9jI%z9kBFSnwH4XnFZmzFtp`k&-1AoVmkOo?jppjpJA13%A zAwk8X{{3GL5aSR0-`|n{DK(xMLqdWjQB{<`@sMJj3>=4|#he~i$p(7`{y%wbi>K}IEF8+ErkaOEV!>B}CH}mG%biM4OmEBp! zytCbz1DnZp#GY@#C;hWEqAoT}HAmsRZTj+*3T=mY$VQ561~|*SZAL1M4^_I(^|F63 zl|+|$Pj8pfAJ&+`g#-p=ao|Z%7`A`?fek<MgHeg& zQo)G#wrUuUj^AC8x!CK05nJ59odmEwB)EpxXY+2=pbS3Ud&Or`F5YWe>il76=?hg& zPo85-Xq-AtbC#j2{#v}+u{KN{qxbbi!PyWf+=?=sW* zYHMxw;P#fhpLJ9hX(@SMzD4t)O4+>~r*~p@CQAkOKR>f2&iCJHXGK$ENl5?i4+@d> zwVAFroEnj6Qy9Q71uB^fzdJ^UyPG3PjO`SBHimGM@NsXZf21~kvihNTe(b@&hwI-1 zcMNmyTZPMPcgIH^UWuu_SO08Lwwe|Wry)^4Rl)4 zG-i!1YfcycZvg)Fw*-c^E`n&f_s_?SSF%kio?CVYlMzcxx8T!xspNL-m+s}K{p4o- zkAXw3^G!gnzOwV$UJskiDihG>uS^?H@RV66F($koaU;YmcV5@Z?Qjp}Q0v<_W+y1` z=~igP$vTb)i;+9^oEKmVq`O1eCVDrE`IPAWV?h;@Lbsxy{d<7_wLGaS@B#w3VK)L9 zg@xCy`zgZ-(k)o-=3k%CESHV^(Y*Mems&Y4?ZEzbyo%=0%{b>ze&qE@+hY0eVZ4l2 z-YL=3TH$xUowTbrk1*ym_4(s+ZEZ#J?@NvZ^_1}*EVZ0~$Se}pu5d=Bnt>v_2t&IH z9Zl(9ihe8S@Z5BNe;AuCsfKi%{bvdhvwG_Gw_?xuR}XJ}eoQ&Jv(g&z;d<)jc9ZXl z|GD~L5UbOw9qO1F`8-XEY=^E6(A>xG)*NI-Q+b$Hdb*_rCkgGJs@G?(R=B&kO(#br z!Ge7+%KOQ1ur7pEFh&Z;;J4EDEx>QzvY_RO&&~c;%|sbk@R&AU?$=kkj&waigDP(? z{rQAb`)^OnA1}Pbof>_bi7qgA(le;+;zUA_z*yhZ?dRm?{}U+wJu&)R@vZ7UbGdaB zpD6{KKFmvy5hK6%G;J2z3^?9LbNy#*K`yzKk9{X%ZZ=r#(2;3alu`D|1)oLvdHT=# zV0UbR4A<$u?+5WSS99+ux&2w|$u|)fNGCC7P3|srv1WMWM7)&1yKh02P!eYrexzze zJYcB_|8?473+w9DB9UG|khKr}`)%1q!|~s~Go81di=Ga5z{@`96?!M>azACwUV8uh zn_$%6i6{k7vBo->o-eKSTApZd{7k`B|AJXcB0@*zLM_RAJAL&T;koFa<<#oZ zRRVJ#u1|e%-&$hBV}GK|zlTyV1oPSoxaXc&^;oQk7%jIqG*Q~OW!P*;H9W1K8xQK5 zk$e3}(a_Gf&@g~K;Xqhn`Ntb4v0p85G&g`06Dnw0*_Ig86d!U@?8RvLRS}c@dy&nF zR0F?9klW*4{(AbrDp%~og!(rR_eT^`vdjqXg`=#Y_TjdM#{6wxL>H*WVunkZ&l*4wy0A5!L)0Mhxn7)NdD9^n)0pQ z`o|lR_zt2?+^3T-QTC2A;EXFO?st96gV26SYgB3fPNuFmiNEytP~M%|XEM4@BOLy_ z-G+8F(Uyx%@AkjwG2VCzhv16qMKY*WNK~mTUu6F=kdMwS&7@~9T;iN&9|Atqx7aX9HCEsFTjQxw-kX>x%0B=dtBPVLxamPt>vcg!1Toob&W5I=of3 zSgB@T`6hsM|81XK#?p;5`7f5vGsIVI411JS*0uiQj?}NJ5o}=CP)0_CKrk||;ky4m zST-hKs~;)zx=XgC?lVzk%ne8X`IVe6BhQSKs0;!WNxB@&^j=5tA3KrlYB~PfSXa6p z)zSWU@^PZpy1y)c3H$r!7=TX&S(w6gpGpb3Kf&i)lg zf@(h$%6@Gph+~+YV^M0u&**s%t#7{gM>Hl!>t-2oy8*nvcvVzqUpj>N=vxh23e!d@ z^n3rccy3aS*f;WG$yycr-+xDo4b#?>WlV|r$LkzF*48U+2aAI|3fr~+I=1*+Hng^S}JQDd}Lp=Cq*|=ph>p^j+|^Nz(@XLg0L4ZwsK$zSN2a_bq1C?-fpnC z{Q++p^Zr}5l3lpS<-f40gx%P8!zN027NpkZqDKt-m(pl%HO$kQ5R##BUi{xG92oL5 zm#}wNq=P&9_U{^Obu`HdXQ%bf=ldq6TGN-`uux^VJJS$XSxxnifugR0FPQb|{r_-7 z(u%Se!$F+m(t-VxVuAJ}@q%<>aX(de|HxBg(El35`~Mt764FuwpZm)DmL?lD8zPN2}lhT{is`u=@{MoZx71V)mf zeUDcOs0OHXMr-d&z~3)`?L7tGDI+I0VnmsC;_pv^Pk3}#l96=($WXwyXjQYd{bNC5 z+DgdxkG%>WuPN7h_ozGSvfutse8`W*FRU&7aQplC`X*s=o_T0r_H*4gB=Gy>L$g0q zSN6@kDh<5Qca^rIf4>juBH3~|Bgwv*AR+yNGHW|RMbfoDwq9k!l2>5;7Wds9bDS0< zLJXKmxw-H5XzE_2_)aZ3!eU-)$o`AiZej6;gGb`8pWQ!vA7Ji2oSxhNbohOeAri@d zM4Oj9SbQwc=YPNeax|vxzqkMI;6OF^-<1P#?7!Oz2I0R!0ix}HBPI;Oe}e)79{w8? z{u>nj1tR|&6#g3&{-^f&|9epINUp5@s~o_(q7V%bm`5^GAi+j9D?s;4SPbLU6Zl;@ z+X@`+E1-D4Bic-3IKPLdX_;##pJ}C$_s*}nn2|Mt%|M}fk4np>|E-WzGDt|>?*s+} zu;a0>(aX!rNuY9e#LFMB>dpCSI|7u7AVTfU<+sY_in@VZm-nDgWOFLY&M$j&g|N8p z1rp`!xHwirk2K8x){<;EUu`-18dLicDQy%A18PF5CbLz0!sAbH@$ZhfsEamCW>q%R zQ$Q7%wM0uS_gTh~nVz?3!c_X~{n;pV_I3SV246n`KIisu?V zkYD}ruaTjh3^{O{%L{tRUO-udDBWDIWj6+N%6c$c!I|G%r>UZ@*vXY1Q- z(bV<&@i#tbca*!W#E_PdPX(V8Ybibzq1iStN@$5WiJoQ3(E{zEa%WjBqEy8c_^s2v zk)qaD5-$f&R3D%^T)94ACkNb~=Td>!wrjhT8=`)x*KID8Et>rrs}->umhLNdxU0yY zpbzC^wKplsdAsf<3y?^{KrVHD<}Kzx%mwMn_HD#-uYA|{6T z)r!b)rEEh*ie84Cl407snBBI5 z@d~IdEB&1%?CklE@c=e1N9^ZQz`)GbVL@vB+ zp_KRc)vJqBw~^a=0&THzJ9L@@b(G@5y*BLD`aCbA$;0==mAbyy>`R-3xJJ3X&DK%1 zxSAHANn9~EGH>eGmP|5Ck5pBK!k&5+-2Hfx{0P%Avu?UREYo9HOpnfC@hqn~m0-VI zKs1wA*R^DH1gdr%C8m?!ocZYXvi;L=wzg>FTHM}_GK=Suyc@i_662#g3M9T06vX~h zRl951=ES!53F+AbIiT@+bYz>#wKqv3s{80iU~|$r)T*fMv7@8@RN;*RW$FT@#M8Q_ zMfTEFf7SkDGC z=I-x0xo5-g%vLU1wnX1L^7`F*%l^S5{Rr_n$BxBU9;5&U8BgI0eDFcu98hrA96PTm zzq^NW`NkHXE;8b^F|^#FCWr`Ghefr?P?$8lY(4}a)`(ac56J_dnOrWJinLZ-?D%Vz zjDX9*nV*?HhzdV+0~D^}U}HThi*_-!gTg@;*6V6^*SqkyA(|P4R&xW?&%%y>3-+g~ zjl5_RxxlT7LLlPUJmNWAPff?m~@&Qg8!0V?UXf`#@tKC;T)E$fo`!hwkfuDHMT?pGcLM(`8#g{j%PDR19rEj#N;tQXIAnk+0&yrFyUYP)q1E^UgHH+ zoEy$Y)Q{HqC)*B{s@`X^QGHp>XzEFm(IS1n^PH`oMq6>)v2C=ZGm%ZOY9~*u#;pcZ zvAZ=}Bkd6rhpb>sFRV`6@w9deG#_2t^8kUvu5I!M4Z0m8t*?y!(2}D!j=(a8-G!yt zggz>>dKJ{yk2kW6B=YH)CAMHYM4WGxenYi+>V#IQFWwI2R_XF~_cR{si3((PeOtcX zZ=K+DfTCsG3HLq)R-w@_h?}Fo9vnG&(fPgFDygqN+Ii-sMT^&w7W&OkKQ!NfiYUfl z$AggepBc{mx$gVrvq0!F#6&w^B!jhV-wMgEjs!0n0y}FC78Vh&E$0z#q8tjN&sojC5Psx%vl3ea3Y3(N zDj%N{vYro@nug94g%$R3Ee+vDo@QXa|##bi*OA^2L<)^p?LNHLrK&M}iV=O{ASEh0zBTwbH1o|mOU zwVtmsi`$up&y%zN2!0rma-Dm5H$>*5eqBP+T{px|A_Qcttvfo6m6Vc<=SCVEZpbBK zb+$+AN?3;}#{;a=Tw{WOqH_Nv`xKBOiYa+M=ddN zNL|9J3h{O$l?k|$Ifx3U$}lQHRApiA55W4NSE*_c+sLrTqKw}PI+#*p(*VnOZs+%S zNJ-a*C9Suk(P*?&3%hvht>N8G3Kez?s1&mS&&fHcv#Y_UK`X6L=tOAwrK@g(nP9W;Hn1e4taBl@ zu?K34)B8>wGIE;?11#k~aZ%_!e;I64gL&EacNOxfv7=SMNSDx3W8<&-mX}MHKxCg3 z^w|uWgVq0-Wy%LC*u)>F>5B`8sDg7qxfvNhI<{Fj|+XMcXryBVm zHJIY{KHg~fc<~3Is3irw1kwBX`3l8&eNwMS{qQLskhUJp0RX6FX^g`3@?C}ZmjFA2 zpWF0SJ@z8{0qv~?w}*+z*6Bq4g$yD~EcaPR+2W`sd8)cs+SEC^@!*qN?!6n*P(p~c zwqd;|4$wn-sro>TO%`mG`YGoYc{W$lsn|fZN`fKFauKNOfxdMhc#BGxY<}`IJ!b9{OdNvOhSsXa*%t7@N0pzem znW_i?kxh+sD&CT!&I;2j5Fcb-vAs~%QR(F|P1duP zj6w*4Z$r09GR7!By-cF^3Z}jQvQxKn^b>pqDpI0zvq&TILT(Y=r&GQ!(Km~1nWecZ zKz(NqQxV2I;*IZHAw59;$nab;8A|ki=S$PQt)6>G&HNNmRhq80QKQFb5VY`D#4jq! zhcxCx=BzVUH0-W+v+w~01?nkX+ngI%ZD@N0^q8E7TzXz9;mm~~g&)OG$4d!4aVGV3 zCM$KBWoVKZv5fQTka;{#y>uCS-U>ipcw&fbf0XQx_6f?R!4+bi%HI4e$`i5nVQC@u zz7aa~iPZNvT2tha)o1K@a%8?uO{Olld%OduZj_BpGZNvZ36oM^-VRJBy z>|oDY4Ux`avd2)~XJkBALo8DvZx??Z~c1Rp~w|MM)`h(??c?KJT| zkmYr`^zMf;k(5;qS<;Gev$@_}N5DmOdfcMyOLE8^Ob zMXkHf1hM$?DnaJof`ObibU1_3#hmh(%dNRTZ$^@FT!6{yX|?zEJQp3O`b&kQ5?^04 z{7{dA>!X-u@`x6HJ}{GxAmu_8idc0W1p@A25ih96oIjd6llz{*+{iXD=G2U?=g597 zbo^+Md_Dp2nSF6!!(zYhL6&oWw${|V6|C5yaO4KHa3ZIJo0SZ)nhI8|z6P|?SGVxP z5`BjzO(&gUujS6G^&(nW1s|^0nc^R5UNQ=tNZt~Q+s0=Z$!rBcCbF!n}9$l z(}b&xaHb{=B->pts(QM6tBN;n%F5M{8n8a76x{DpBuLNV{&YyZI>L0}CB*P&7OoEqD>i?1 zGaNo4qG$^_%j`mcu0B6(Zh$92ntFHCUR1mE7;}M(*3^+nQ4L_18{vYu zta~&+>SjiMvXJay`SZn?)$TVG6H+~5lE*^u7OjNls5&~-*w2>YaIi}2?yjcFnR~Ku zApxxqqLF3dHwnyfhBVWvO7*CV{Kad1_Sd5`Ob%qhJe>bcG7+X{@~TyCZ}7W!IFAlb zeHL!ETcZ@W$bx>w_kf}K>ddDAFdrQJaXjIJueLD*5h}x-%~l`Rk|5m;jl~xoe5J!O zwa8{u1T@7`AT-HAori@v^;frr6mUtPZ*dH9mOx=_UjeY*84s^Q?Ij-MO-SgFXEQOsy2fM zfh4(z^DX4St_;iK6#6Oi(FWjxjoGo;1)p16D z^v4T^A6I}U(1Bgi{VH+D|WI5Td+>wd?7yeWb~Sc0Yi;dEas(5k##(ypa~!NJnsmU8h^QL4d@g;qLe+cM)nW_ zwGwy(5%65MKA@ z-AHV0U-XziNuQIHvVo7_E+Dtu{9m7#NYNS8_4x^57idXa$refoEPgA8vq_DeRS7d< zz&`9Q19% zaMu3HZPeB(Nps39YbxaTb92-tYBX)L*$RP2mjO&Cmw(Axgq$~DiE_UG8Ir$VnUwr2 z4VEnz7SmH^CZ+&MCp40glD!tNlz5}3O>)B_EyW#wX6P4QwZ-8zzOi_RLIeKKQ#L-)Ck4?wYYtR&F zXsB&ly=l&C6b}Vt%|V+%vg^emA=&rWccxS07`)t3Q86eWLm7-mCLny|0Y-pXq2;eW zwW>%(6})1AC2+Y;chp+?(QfaK1qpt?9mvcnHfZlp{NDHA7X^`-a!bE3@rC4-VaRU3 zc?xq~j&XPnz*SoQim? zKWNvQ?pr_B*7SJTLI(OiWJV^!ddV*M4;R^)mH@j_e~96I)xGx9R>S2IMWu{C#~T~B z-Znvk`n*~DbG3z&m4)KttRs=`62iLq3X#>v2YygBz&tt=A7algK0%KS^fk(zONmyhAICk>o?l;7^MQ&*9s z7uVTo24jwK$JcBMdjASKJ+d($3_-JjUeAcVXwWg}LI0HIW6Q}QnyfG9(lM89u}GF|ZSt|4Qb^W5o$G&WJb(&FTvv}VN+ z#3&dJ`AlL+OA^NM7lnP0hi7-^BWx}TGG-W*jCv2vx_sVEHNE4ojCKfUijgYP7aLZu z!~)geS28V06{TSYTt|(c12AWzr(!Wk$?a@I(eeEW7KW1_)|^Aobyn1443SmXXX{5Cre)7EvDK$19=z2rgK9rV$o?KZ zVAb_8to+xvlMIEjJDd@`dbUMuoI6bCgjG?IGCj(UC6!j|o)h)2%3Q85GPFy@8;vlD z-aivzCviMlx} zuY`BhW4-*AnP||$muCxGdrk~r`Hs6(a^SIraKrqtacT4=YCsp>Lan8qo6GE>7M3)n z$Bm#IG_Ua^b9Ke*TJpz}&NK>E@yQCZ6nSnsT6H8n&A3^>W38;Io`MDM>m)>(C0P#> zA<0U!_O+w$fwoDCAMivheIg8O{;|R*xY(#;tC?|w?6L<5;IO7*;Z?S085T9auIe6y z3p~m^k)B*4EYrXz_^|y+{CQDKPMgs_r4A%L}0TxxiD7Pr~L~3)(>t zVl*bZN%)ml!d^YN^11HU>JP05DDeuH#F*XJfc6ao(V_D_OFKRAuh*+v>)AAK&s>Vf z`2PG7=y5W-3Rn;rc1Ct_!LhNWxyiF?;b?1WPoSh@*LJFgx*nfyNGKCsZITi6lok!j zVpT7zgwoRM(KIVKrXgf?M|9AfyMZMPdv8srn#gYa)!zkdX#=bj%7ULtK4ggX9kz1# zm!ncmQjefbM-}*DCAo}S`G)v8w_oD~H3s9jpk0VU`40~dBmE7BXxRKsFoy)$sSB!Y ziiW1l?GYvE3e;N^Es2%YeEfUhl|LLCmKBn`Z1bbw9As*XkWb>N_X>&GXKssnLT_44w3FY;qa*5m!hp=!{{+!1 zxXJZ|%h&UXlFf~48hbL^rPLX-ch&Z&pJ?L`yN8yB24kP$v$QiQCqj9W_f~g$S2tVg zSUfU_D=mH0^@{PZ?L+_t)CC85TCpc>nHwm`8XQT#CH0K&c9g z&(5zVdvQp?<*F}6R0!aR8?PvAkE=Sb1cz^6Z|bMfUS zPT1J!g5y0DUXoD*#Q!lXNciq-g)qPHSU7PZkL|v)2z7B<2x@m8y7Miw|Bz87@6<`d>mtG0(0k*a-o74qIp zP0WE|=U(3z_tyv4MvVfwdtj$2XfVj=JVH7K@P{RPNKm<$f8osYvre&Iy{p|5pi-Hv zGT<(vKU4R@wwXYPU)X|=uNjRswuM!@G(TgOay?U-St<6igivBk3K0RI-X%BKAx>Y$ z9zb<^34geh@ryc_1|>0bxDrhO03H+Vwcdv&qzFpZ%^;F5k#%`%C~zJr)l4efH`{b( zx9bO21_NI5x!Zb22a}){KvgXhOF_zEq};xh{@L!e#kTv#0zXqyK09?`^oXP7* zMMEg`-UFJXU_Kr>`2t(!IzIs_l}oBZ?dn8`&rV`FD9E*^Y78+GoJ$ZtJXY!xpcrZo z(y4JOJKYqU*|!2bWR#8K;etS!4e5f0NTrRR*P=^DleIz&G?*>d0j$aZIkOrqe#ke2 z4Ai&fjMjqbuOYHqDgj5C?_Ymom7a`(x~aeuTG+x1W&c>rvM$5I)!0M7c&>xZCx{I> zU(axfOym1L=O*uSA;`Otzv$SUM1LBXu!Lb^b+*Le;1rr5RNBsy27-&6lors3il!e;=kS|C0g`qqG`- zLqrL2OCH^-M77cX{sP(v?u@fhoYqP}Bh^bg{h;y4D%DYAm&hZ&#pq$ErvOHIjD2j; zmx03nHH(b<@$|T7l#Fa1CdFz3+4mX#Kr>NuGKROMi*HMU5Pet4&_dEp?=;;gGkTw+LEZ#K~JlEo!hM~z8X+QJ3sdOEbfWeY{^~ehi z(*m=ZI}p?+r!f>K%praqRFLEpu#?;+5y$44Qb zkadvojA`xrywZ_qi+0QANS)4smh!Bkl{ZQ_3-M_T>OEu$s<1bosec>X+TGdIlsj$p z^Yde*We*sZ@z$6rF7#o{T-Dw#qSHgKbe?bj_=jc0F|a;APPh$d3`^pm&#iYmR5`~qYR7XeJFIzfEed;GP)NwiOL#z0gb~q+#sRx zv!0Dyd|eHkJgZr|@yw4buXe-Rt+Ly5#-?M0w`BSyGP3r@?Ow3se(BsxOF+U-eBdeIpt&sh?mgu|A+i2mKwpgMa@bWIT092=pR7yq z2|-(Kpa+-Z)H_Sbp{gX;EKq$~vUwBMQ*>zBgC}Ci4 z>hS9H-W1?r80tF;rN~}5G;B%@$VpmM;m79oqW*mrfGi!-A-axBdcv|wY)^cGdnmz! zkI6!>`{ok=H9eMK`D(DfAdMS1bu4Q|VhD?q!$751*VOM9&bT>-|0b!fZAiD+j}9+`cH?~FmMHy}PI zy*NCdr#YJRMl&y~dHRBWz6;d3cO(NH52K#aJ_PpD94MBj_pj>*gNsN_U+J1AJJcqu z;`X=L7mL@lY4vOcuk=FfM7mbNW>IjC+ypQ&74YgZ$IVKQhv2ia=El|m;;R9>6l9#J z_2RFd+F17)ZZ3~L5K*|c!$LK!*2|$3R<+VJn^);~YE_#dLMZ2g_CW4wq1h2jfzmYv zm4npvsvt2*{BjUM?a`mp%L0b5;^u0ZT9oWfjXf3P@`t%5d!|i-q5O7XS9~pu=UL9Q@Z<$b=i#f&~ zUzAkB5N)kz>b+_1w{rShbi_RMTUoDCVuZCJF!>erOOeOLredS6YE^0G{fm4D=>ybN zLUH@dBZ^}8vS|p6kwR9H{@5v0mPuWfW_p9?qc2kaC4`>_mvvqXI<-S0ya%kJ-i_y> zK_n;&29R}@M%ylUpp6c6ZUiMTCKG-;{-J|VC>EUcRKm!|ag!6iPIflrPe z*VrIpf^g0OEF<4D-yRxl^)(=$l@Es7)^gc{CqWggWaH^VDUs0UNq=1fs?1dsFzqiY zU%#~$pUe4@1im)mo*7%0CSdU%Ky+}LQZHkQQL?tHSnK9%89N4qqycbwQ|*cKPpQRW zThq0_5IUKAzl-Oc(Ctfam9!a9m&v}pVCLPrfr=;ujkTREh9Bn(t);JJT4RK}X)gpp z|9Ou7?1gLZEZVhXH_hmDu5+QF^#`&jTB~3I^XXpu=a`nAY%Zo~yS}{I67P0)AF^;k zQ-Q^*y-Ft%K<>_2TAY%IXF~;!I8eXAY#mc5vr&HL)Ko&mnXiB*ZzV#62~NBmMR#^| zjJ1BeE<`I-I9Q(Tu&Bg@l}jYP zir|ala({R)`Upy3*H;~H`z1{IC8wFBMDJwIM1 z@l`=z`E%pG_nEWT&!Jc_H!}3EAqSQuUzwIWD^>_!s`x^BSw&1zK@hr`uzN8AAVu8o zOv`Odcik&?oV@bkX2Hjy7@=PG=2)L!wTvwXiKUJnz`7vJ3wc3e`WEm-p_Z|3oTZ0o zwH=|(eN5FxCvyD40bdNTRfyWVKuJVt2#^sZ@6d5+I{S0GP>bWw62e)BS))}bG9#Sdt}PaUWB>x+eJ?p8Q1izG zv3Qems>Rb+GZ6Dokk`mJF*qcH`DBzv6pf17Env>9m@R+E3+%Ey`(m0;fVCNv$dl+& zTnH=qEhIStpd(|_@)vk10JRIx&&mk1#XD^o^*akp!GbcHq4ko#B}Q6t#1-OMS%t;+ z3+t-DvEv~ilLQfB>qwdJG9w6H|D!JxbUF}@L z^#h8Qjtp&bV(f!1{? zv~xa8idF>Y$|34{`RanEuGQ%uPHm$%&~w!G^OCsvjjNq{G<_>+kDJ4?S*tgx%aLl* zu|t*Xoqvi2yvq%E7j2V6ID=b@6&tQI4jPiWNa@HQ(1VAy+OMOm4k~QFYxlGdB1{?)wnZ!ni{U!$C5jh9_@i zTeL(^-|!(GMk!H16SmF;6`YmR{KmCocN6(>#_m0<2GGfH4l z=*hzM$O;|a_G_Cfp$bXl@TlAl8&_jMP+}P_S_TI9CJgS(&%|GxWbg*P1*;(YeeAiQ-? znKkS205|5>GE~=pROTUY=yaOwV2j;ImvRtIJ;*CEQerKautr<{;&O7PAaN>RrYE&S zL)=`rVQRePb!@8oC30;GTr2DO+g|EqoP4^df7VJnbOryfS@t+>ns)ND_mN++T@lYQ zFsngpx^vKle_qCsU*Eyv7E#3v1q@aMutG|@-h*VoiV7_7(3!IKt$d}r_TWe-Uny0M zHJsg{7#IAPBNXEAfQ8RKH99(dtoV$z#h$1!2bd;Unk-`z3H-Glo@Bk_fht(w;9`gnW8?ZjUT- z!@>s*;eIRNeyL8L9WEGAEit-b*6P&mv~2`)54>$SIK;Z=Ym#snaXy&;rO}Q8BHE}? zwS~iDPl@qP~e8}wx z6zJ*UZz^c*r~SD_hzjc|n3frCe#cO?;m%?!xrmW}hzj>0xZPR2=wvzx9_Yjc8> z3eRQ{7OE}dei;|Hc%#lJQfslZy6v3`S@8nLq^S1qvk^w8!F6~+8y6jhP?kuUDW2~9 zQ6P_~d4wxQzFGoNx&uOw*0PV@{MJ_>g&Hd+Py6Cc8j;rm7Q%cVtm7Q1Q>zntmFNr~ z&K2YQ`jk_XFiS9>u~PLBxK`}jE0eE$qaB&KR|wkiv@6M27uc}QLv-;$AS?c6P4rE9 zqa=n01&HlsIPl~*)lWUDUI6L{w*lV2lQ1(*W#0~g;haZk z-}7+DC5J@$?tEQs)_gaYuJcH+KQo#Za$D?g_5@#5di&{%8*s)FSJ*pOcItPC!{aos z)PkRviO};ow?VxqskP~Y^GLQxRZv<@f<MP76?$HjHD&SUytTK3l=1O$FgcX0=5@GZLspn~aDjdym74gLW6exd&eTsq;82El2 zH$0jKLOs7mat!9t=^T($B@4vIKoV4N$jzi~j)kbzTqr6vzAmyMeK+ru){?n^JBWkG zVM9U|6H| zeQJ{DN=!H_E!spqhGCQ+{ZXT+k}&oB^%ztY!5u$-zH2@QHDaYDI>W6Qyx{yV#Pxr* zQRC+ANTo$6=Q|>mJb>y@g0MyQ$Qa#0k2ni{$aFp%zi`VS&+I9^P4cT>l%H&eZVtQ8 z@*{THXrJB9Whl_=MxIbxBTBpiU$f^m2tdLkPu?1W`@+z+mNH0f}Q!^STpXVOOfbyFeAQ|A~#?>IjzHquV>7I2nRJR$K@ zKrt#^Jbh>Q3rCblN;M98zB{iepXEjU`2a-i#52>dPoEm>$jhMQubIrR!}eZrY_%E8^)Eug#0I;-R|*c~!tzW=D+ zfgXwoAn0_CLQ99tu+|pkL1yQx9Z_$uZF^F-A&*E5s!sG@8?jp)u25L~1-@hsh-^nH z29xNCUk=i!o==s*n4N}o`;?*XbWRY-iB)5v-|ectAi_2nrmJpG1+lY(6%TlYPz^WFhd#r1~ zHhPnMr~qH?!9` zy9RHY|Jy(Bp9tp zsdnI6IIhCR@$(~!r&W^`Z~#_|Or)A#;ri{B$r6I>bMxa~&+pLtm`){Z06^t)KhDT* z&PMGEZ;MVlHXT?EhL-Ug%4@mTFSeX@y-!Ws@eWiW$=Rk(3a;pvzYT{)S5kaq)uIGR zO9g?;obG>~C#ZbN;nC_`-}zM@&v!wxQ0ceLpQ9#4J2J9iTZdlKO4IA--0~%I%?sEd z<<1AG)w7hOF%jZ-zCPh=+1U*BGaN?hF~#BKh5o@tC^#Eoulul&DEmM)nRp=TZc)Pb zgl+2b`wYf%6Su$-svI45c;($CjS%; z*s4wNFJ_Su!K~lpQk)^a2XZ|F%R#H!tF`_0cV9?ccFz5tBgUFXEUjm8YX4H{c#g_< z5Zoh9VoB%_vZ+?c8;c>5Gv`vb6f8yP+S~}Y1!Kd%8V(y%wi!p+Uhmau1oi61!%XZg zz)56s0qa8%^g~+U%+DjfHx@ni2&|%L;!knyXQ_aHZVv*Ppr!oUcD8)wb1aS}K)r^4 zQB{Ak0*GEmIQ1s5J@acQ)JmpjQuwclKALm8k!Kq^04AQNV|%8NN^$2cUz}7?TD_D{ z1gK=HxZ!rfR}o?B9QE&o@}siM+aOo)Zq-gjV2`h~sL`r@=UMFUfum}|JB`wZaWYuT zg%X{J#N2N)k&L(P{#8mKZ6|NX7}mQK+%RTH4ya(ZJk18ALbB7LYi8`x3XW+Cw_BvN z0&7?K7m-8JQs3z^p9jt}y+6w8E<{T>?n+&2{9!8^>Li|P>OYo$mJpkiHs)9lBX43Ck?!=)CjiTcR{ zrSd5?Ruqb&j9$N&ep+?et;nawxH1_yM;&}wD0TMgOzQB2R2PS&KlV8aImHraV~I6& z^X6~No=Y{tJlbL0q%pW%XtH|yQ8o<+JQYH;Z-P0D!!D5AgI6yr6pZmoCVEEnpr2j= zL`19SlH23dXCBc2I?8d6iW~P*vCwvs^X)5a)l2hu&GvVq*5MbdyZJgD-{|(j$M8bs zYVlXtU(y621*f1H_~lq{xm$j5c*T8qB9YfE&`Q(bC+4g0qI697H@C*J;oTW+`>aZV z;o9r=L&&L35Ib(c-=!dzi^C{QSc<0Y`yc-y#g*VDc{1>e#5k2SC zAlWyk_8%;$qlzTHr^phv)y~xgI7mV>!6PqTW7@5u3XhF57yK_Op1E~r*iF^Ay?O_> z%^M0j&U(^=r>=JVG^ogS;xitARqS!v~4;)dkA zt9151vw1&Cz#<1Y%eleKYAdR=@q?E)%U6Vm38j;N!1L|69HOarz**OpYTWcql{u0S zJD}&Njr7~|6XUf`?OwmxPOk>}qi8VKU=S45pDkY>g{0+>HBQfS<0a@(5!v;O!;2?zZ_^W?zwXt9x+5sFg)l4>&2{B;exU$-C;Nk=KsE@nsr@HwU zOMkzz9)S9Wk146F&}v=!*<7l%=4$FgQsXc2&}df68d_ThdsPZ&%V62>^lW#xi%JEl zNuC3$J%PLLqJ9gGV12QsqDXjeeYI{X082}VN#!{Cjen784lIfSF*6yGQ-BPLK2}U$ z2rnT_pL0-`L~Y%k&=4C6ZFzr!IT5NlTT;2%jQk03%{J5r_=Aph3V2fcQ{1&qzHmsT zBv-u8VDUr49H#?emjkyp76rHJ!ZQuCips4yHCU@A`ls&TTLztavb6L6l3n6#GOiU!W z+uWnEjC_hIzO1+cY&DuLK_vvuBbKKn6K6jdK}*;BqFO|?sxJj^Mc{(6FRYJpe9E!q zAh|~%cE_JVy1yDhYmYYCEC+k&GSWSySiMbgtd08+au_7&@mx7BePUKX?IxsOr~)I( zS%wby#!oMJbK@T|=h*+e^Z{HGpKpd4I;|e4fpvJU=o0vlkNLu2lJDt)V*YMf)3$8u z{m;3+{A94)l+cGR<;Qt%SwUYG?z5rl3bnl&Y+=K3RlCC!2y{j|MHC8@4d>xxQ3e~b zP?mT2Oo&yehKcYE#2J}1mf`6GI)QFsS=wc5SOJ!Lj5@5@+Z;K-r_@6)!AbW(#OA?2 zT6!zP`zqq0{sjrE&Qe3;1!ZyZ)##(|hFOdX9~jgrw^l6l$u5>B(Wnx_aWNk5VD}5Z z5gN8w#t=WdctY2lPlg6!1)#B^RVl=Y1}MGr?uac1=4N5}<4L)ex55fw+Mm8`d1~=- zIt&L>p`TpnV)6LV_P8}}G-4kF4Lv^TdZx!7m{daH5KaA_g#@Oi!IcEFhcfDolZ)vC&fnOfmj3;Q(%#78 z7bEB91Xjoh@3*f(O)v*UbY&_gcAaUj^6x6uy*`WBoG**a*TM$b`ouJqz%}chBDw&!qq4HQYOROi@L*`# zt)%l>&kHgHd)5S?VCP)x?hRE!%&b%HTDR>*92p$ZcT7DIv1hNvbk3E?ettzVwDtbe z#{-}Pzj?)>958IrEHul}U^Kk?R21>aG)0NEPTF>eL02m@YRRH6RG;;QIX02q{e3s0 z^pl|}V%8p7?^6xHw@CeUCZ(H507r)|F@MAu(?b7r&Mhh8&|^k+pP#YYi-kZx!S zw)Ek|uo%SqZ1nKwFG}k*^gq|CAx0gxpTeI9I$u0UIYj8 zc1;TW^~wKg?kpE;OP?2VyARvdC8OL(<6?2PCIg<7;O#t(G;MDNO!T63 zZChzx{%~SwJDk&Ug399uRXh0G8C-Lp@-D&wjT_5W>`zZ(m?jXpE?+^dPW=!ul_+2b zowM0Q*1iW*=(jlAmf;)CS%bq68?Wn8uPyM{gBeCSFFt*D&j(IpEz_MG{D0Vcudt}L zZEIA@0tq5fkf0zLl%Oa%6e>|A2g!&eMTrFnNHQToG9nTsibMg)X(1p%GNMQl6e%*2 zgTUX%T6>>=pYw9x?!&$3VXbd{E@#!OImhUu_tsl$z1ylciA7r~Mg-#RV@lFa=gSt* zhIYVbJToH*6jad)B}fweN=hgZ*DA63WwP}>e7-U$H&BX#P69ZuQ$SJ>p3hG->-Wq3 z5J=UXbCg9LEN`g{@hl|4Vn(P_GF8+|$e;kNk*ICgH7`-uJ1Ju=2H;Pc*#7uc&hP2{nQI%j+qE5*WUFHWq&<7qCBbmnsiGDz?a?Q zxC2f)C)p5$m~Vez+oz6aBW4tGYNAnYmE9cC*-EIH&1(QTvGClk(#FWnX?(%qsxW2n zs=l-o2TdU1itm`)@EZxf^w0d4Anw$e6RpXg4?vVoB-uCIR^_VzU>OBvt_#fxVu&oU z0#Dq#-&{%nIQu-#H}@rnTnm12kza`=9z0vsLD4dMBT7+Y^7!=x6Cm=>!)(?JqwCXYKoHns zBQX`_fh_dZXx))7Cj^gkvTK9-6&3m*m-~D>3}m}k5t|NZm~K@ms`H6*4%g*Lr9izC z^;PCuOnSqg?bS!IQTLLC()}9jBN|OUvkH@_hwCCz)C&B@$7X?JzcX~kOvaE0{1LVX zMTnIp0UpPk84)*t+ z7>`AZNmZ6l1E>F;uOJ09c+8K)P}d%UFz_5uG$0}ltvd5yyh$Sz#veUqq$V}MrM#cr z;rv40wDy72lr*?A)W2X^&gRnzNkZzQPZ#`+E+0o~&H>PxS5WW{JiK)lFrm<|y0Ik< zTFNK6!O6FyGI0RYnwA}01iJBNvIqrX^}tPPQUwbzBZwRkW4zRVN%)eeH6)$KYE8(m zX`q}g5~L9!bKzT8H9qX8A1;BsEXnuVr5V@;FCVMIovNRBI*V=o%wPo0y361cgmz0Sa=Vt;h%DTg(?=EDXA7eL{7c7jiQ ztN^?omOt5;)`WH@HXydUzNh%d6xU8Rzd!Fj|5b^JknP?+pX&dTc&+y}RM4(m?`K_m zP0f3g&U$gh9ed&h;Mn3sYX8(0F@$vpn(PgOHf>)Qr>x0NJjBgoqj= z1_a{j>*O_d#xG2;ly2?q>8$B?b=Ci5FxaIV1Y$ur(2ihjks(8 zSh*ev=Ng8#h!-!{@|&x|wYsN(rjIQ4&BqO{7!q4^elLaC+W+C|bQF&hP`KKki;ul5wNd{7>n`xsY!~ld8^qT;NX0Q3`ElrUD#GbKt=~FMrM?e#h7Sgg^3e-y9 zm2dWi#H)9FW<8>IcR)RJJxub~iER+PM2}o6{FW8YH{gc3JJy;!EaO!wD@4SmkN-k7 zeFU5&82Q)PzsJDi*7=}ndzX3(UeiyoipZwCPWk>hqI;=E^Qc0-en~K{v6yk|XS7De zl&p7MPxpiG0Y|I=8hjncVi533Hhh*w&w2fHk{77<(wojTqXc*~gjn}tNY}w?NHy(! zs(?l~)hRqC^spSqE5Jge>DTdBCC#^cQWdB(*qj=Oh8X_xJWWAAvN8ri!NHSiNGy61 z&k9WL$Tt2UY5kIEFh)@~scv+jcJ2PauwEhqU<(xOoFR+TQ`ZY!0nI|kHchLN1@N5H zLbA6jP!+!d&i>DA28Nnzic+ix*?fh4S3>Tqu&2=a`a6rWfr01Ba zJI^>eGm+^^1E8z2zgi?|#u<<&K&jj(JJR+8TJAKTROP{VC2>BbGimb0CPCQ|uqb`u z6RI0BJNA#6M;Lmhp}FF5$Piy%c*~2i03K3Ba?Dd)3#Llq3lv47a^0D9NVyNxsmO!f z`UBS-WA(Mn?=L*`J;QAz*3VrLlm85)=L=tmGk3TlUYd5N#R;36ksMwN&xX~!{E?x zM&{MHcBuH+MpP|zgfDnQ)6-;{F|dC+S^Vx-P4L69=wI&9@4zBLsfO%&jCFojUS*X? zL4o`#9Ie*w9Lk*E<3UT`O_I3Cqw^g|xv`+IJs1Bxq*8B34lw&`?l>|>qv|-nX;o<`Od>hu`IAP- zC?n+d_jRV+nr7|UIr z2GT0W0jtNjE{qiOHjqEBLWb%hC#ht6Em>x$Ryoe1r%p*&JLB2W6CyYvV3zEXGfvXZ zw0BX-u0;^^Lw9PgA4#7Udrx8=^a^L9)azz?WZ0HmG2c-uWtmju;i=@Zw2X7qUn^a+ z3Hn??SbOos;Sr=)g$%PDofn=f1UJQF#@O@vo=bh16coFjU-`U*t4Ih^Ax&j^V@$G} zMXy!K1NN|ZdLJkrc4b-e+1%*&3aS@_^)ug4Vos5ZJX}1@qk8&#tiMBT*5;NAE8jA# zo;D!Eq@w3+q*XM z04w6P_7#|;6D=#NKYbBIHo)xS0lSEByP^h~8r(a}=AXdkq8a4~|KLsZ_eYKFZg4AN zHyEFF)DqALEqXqailXYNKFBbcnrA(YvZ4DLG**28ZMEX_ zdD+DW*YY5hU!1g-aw(vQcgAw2o~eem!&TVQ3mpPWp~*-3yM8h|22_NmL7AfmNg~}+ zOV$SIJZD38u8+tT1JN)Rj%W^K&jg|BV_BM^K{C_?ZGeVxL2icMj1~sN_~hTUTQfv-pD*=Y0Mx(t}Ay)Ovt-P_%a13jRPGlRx7S1RYPD!U0-E`kuY zyJzseZ2tZ;=q*sCYPHb@9FU0ws~h0hlQC5j=c$eo4l`^90IDqUd;N>K^l-XshQRlE z!Ib-;aHi|pn_c@&zf)1N`Ct-=oN5x~$1>EqwuwmR!7-?}#J2mfXz`+_yob#-tS09{ zNe%D~divUAA9PF!hLU_X{lfXL})fS)#7lUTExeHnddGj*D)X^E!jiUml#({lNw8Q%-?Yi$KP z11+~5QN{r|a%GIp1(bG6;AUzQqN70{jjo^r@D;Ky$`iY>8DDa1T$d`%1(oF>ivvz? zFU4^IF2r{pB>h7YaDoh0Sb9s=+g|GX;O^5D-_HEJ9cw~S`}H>@$05F3Oj7taU`Z$Q zopw8}cFfop=yT6VED-D1k10A@7*o|=U1uNzguY6%DN{yAB=?ejJ9YK-;r1(=7K61f z4OxX!N!W)ou#@M53rdLL$V!MI<2_BS2RY!Iva{>KdHw}sc{-)Ywr5C+MC%;oVEy(l z7LUh!&)gY{>gMd? zxiuc3PaP#bt#NAaCH3f|-c>@`J$n1B;R28cCurq;Gk5D-u!fkpIqr8bCt0V!?f{j& zv%T{y3lmY&3mNChEBuR`qF73=d9fbKB;g5M**;NF;|CUT_$}x@=jN)0gq5R zAzXIjC8XA}k&YSy&v5$i^@eTBGMLlUJ>Jg(k1}y+u}u}f<6raDtCjcIS(`b3@7o0r zwLgXR`vM@HWU#dtzoj@BI|%88ljKS(r{ZBJ+g*uGt#Sv`Uhk)p)UE0`MwNl2qxg4C zP!(2(sL$>y1FLQd^q0|#qtzd6vWU~Cht}zRZF3K$6UxetPF-q{2FAwHSyi$C9Cop4 zPN+AxlhvJ+V7Cio2*vEyLZkQXrt?bKvomSp@U)|$$PXzguh{Lu`2u+{&DijyOY7-H z1Il7(#?Hz?*Nq2U)negTs1An+*ai~e7GfspS5j-4AYlju`pwXSz1IY<1Du4;_P^~0 z#L+X6S$Q@Bl)YZN3wHu=!SGD@A401}jGXZ7D})cnTfKaA$c;1UQ2O-XMKWTwzjvqC zZ_OpeFBHS9q)pfTeR_TjP7a7iVZa{7l~FXrYU&NJaM{1V!==dieAVx~r4zNPfpff< zAnj4$$3zmL6Um`yS;C-nsK)Acv@3r$@1qaKn7KL39#zFx4|8@v<)}=J{x5o@Ti4Q;0lFKF=hKYj6kv9H(RJ_m504YH??b=|cuN zaugz7i=q-kOvf$gNBM+> zmjDu_Uctr3^iV)5^~myaD`4ko?Z#>Jt4bE_UbN%#)4j! z+Wov@1NvDlcB&_cq_Ox{-tY~I2ASYTxb zJ2j?$aP<`3yu1y#Vy0DFl=E9LH&AfAgr|0D^%!;ZEW9k!B?VZyZwaz9tfW^A{b|mMbe$9`b z_5qpzAMBmMJbsV@#KMwZSUo$A%$a)WU~PEaQ+r;_0Dgpzjxt~1o1^1cW;v+{(Ci0P zgVDU9)WgAKCZ!%xj|oF8#~G1-^aDW<3wev(GA!ZC{mDhV)a9Q=H-HI&;Eudp`;l~l zmV@c+i_?(6JjI&RJd5`q3qga`T0tDlQ1VL06kgsV^z!ViXDjM)@bB84%4}fX_;zhh0%@@CdlVak|=L=>=pV+sWcguNW=XMj&i| zJwqL+g+FQ4b9{8@(%_h{N}G!?-1_3eeQr!7bq{U|84>__rG@eahZes;08R|E6R-$4 zX&iLl+JH|~EE#S7MDIIbdT~%5K6$?t!xB)6g%?p!K65TOSzmmjnE|$ogYyr~3*f`p zv)hY2GeAI@IBpothN&a{lp=2qhtU~$t1hc&{v-W1U*V-&#Q^G2 zE5LE(h4hfJ_{7iW{>f#U37y3I$8X(K0Gy5v>A z4U(+*drk#2Adb=ad-NMX$kBIK5^W>>3$kA?8DpmzE|M#f>7q0Th&)kXt#VG&_Pla~ zJ)8!GimFrrq-03`j_fWw5+z+ZbkDq{WefmSjy~!~px$$zo=v-VpYC9i1avge>FhR@ zh9kvtr;0uW?$vSKjk+oC;d|w(ARzPU2oL?oFwf}a8VzZsf0)3m&kQ2px7uI&{evTw zGp8!p1GWsZC#-zC0r&(v;3r{!WD_eJ-z_Tw+s@5a^~Q}0!H;pN80QJ#xS z0Hcfht3{DsxsEG8Q#J9FWhAF@N8#mRB4c9Y8)KW~_5vju#bA3h5%AU9Hv(x_g1 zbYDhNbOXSpnd(VWEstCUkLZlK-l6pKE0n%wg6~ztPVW~-8>0QWB!fQhFm}>Kcn6Tau1|G`jZ%0Uc>ohCV@R(dy}>5}O8Ojd79R4kC{r-!U0- zTMmoYkc}IE<)bGH5TPJE^8)(b&o}8|^`5kQfox7v=mYEyY1K)cdHw7@7g8Ewpte7%9SAV6YTdU@5wy%k`2$S8t?H7-+0&dF5i;`7NbukWpA@h~cSPn>Dd@^^<# z5(44q&~dO_6G=`S|H!%UK-u7`=kWfU#JPf^3vX^K*39wDyt@Ythh?T0{HJg!=x7@ z0BYr2$KD46UoLJqBG*t#JnYIt+^9-=g99SMiwoFhNOhbatt0;-0N8oq5kKLw#7KKA z#(>144LEAtPz;CNSa2ygmRmD@w-iPXdkj1PP);)C6O3$(C_@01d8JEcby~IApC35( zqmVk^wBv4nhWmsCeisJ_wWCeIm{dDMCGzEGIj_%f4&}?h;J%gdgM9;iuqUb|&(chX z)Ke90AVB4>Pw4%Y&{JN;f3{|L6r${{a}`oE3f)=@qjV)oX>zMK^w8xgslJ!}`ll)b zkp?_@*(t7bpsUwTg-ON8dQn{Si}#>pBR4d@C747k{A-}qoR&V#>PPW6`4?Fm!z|T( z-}71HGsKB-YIcBV$x;CKo`zK4Uu(@`ukB>O9(?X5;{VIsVtQz-$PVR^=UHvzmTcF~3*1=cR z^=S_5$4(MrFadW#?NajBgaOnPDgKMMy?}gp6+UcKv1RQMv2qbcN~$2FZiapeup;tY zhwQ;qK(ThqK41fudrqxLlP$9I#JBT@Tz*b`{x)TKw^?zIU6t9Aa^CBBtWxHwNID2#JFsd;weW+AK_;8eb)S&-aDGnIB_YD%#^bnB-7XLe+PF>mV28~K$ovGX2BbcAhrVV z%7MCo^9OS%;M3tWF1xP;KGL3a|9W#VkGl5xW#z9Sz;69vUn8fmbmj}q3Q+MopjTrB z>Asn*f)^|Uf0W$E2^#-`x}boQ2rp9n3DF6aIn+T;TR~>mQ(*kguBc$Qa4sFld)naH z)_ZU4t~~zL4p?JP%Gq=$3o=nrwirqdZwy|oeIPZN>7&P}Jiv4s<*NgEhB~k=;=C*k zYb?RJ!9l(+L~7@ygmc=bR~OHOlz4(=N#j}c018a2+W{wM`<0b8PjejlOLiZ$1;Or^ zQxk{-;+pc4&p7vYyr4|H3Lzl_TFr~;5JhaxduV^&^>)huWGA*57TV!c2>Uq6^!-`6 ze?f^RL?W0($GB-$@R8aQ2Bd^>ttV4klQwA zK>2lD@?`ITa?9q9-eLY)KLdGo!Yu$l{Co;^`cUyDcY*KA(nZ|gl`E838UAJs{R^kk z>)y;lXtRR+mxo`KB_IZZnhwtoVyOB+Rr!Dabzj&iVpBDW<3IoG@BfUdcjaD9(rhD|&cDDuxmaB!cPrIUv(nWzVdShCbNxxIC(D;rcw{V^Re6 z?t^YVI}qyLT2Pw;igq&Qnsc~qwT?ZYPk`+G*S|U-2NSfX4*sthGyen(Y7N9jDU*J$ z^q+qj62WWGCMYI(E%EQS_^)908_^d2_v8Qf;jsVj%0YYU|7Y8Zz0i846@pZJSofF_CGeN)#xdwDmfuFz(!4fK2!l*!3uvBkN7GNUN2DVg>`d^sTTBNt7wvbJikr?~Zw6NG=?e=S7c#j4 zZPMslMohfm!lD3KE+@=hcV|Oo9D>7_Dmt8z5*`vQ%g7dP;Bi|AdCS6C3ne zYY9ixk70{xduWf;&%3H4_-6MgMr;uCUJ+v2T;ZrLpigjfslh| zMgC?F)vr|e>QV-LrT7B|6sXM6IEnby2n~|G9^Dkh*wfo2+9h$hOJ?;Na(s;e6Z37x zU3^wp5eT!U&jZx84b$6B(5$qL4&KGTDkKrxse2s|W~SMmB43~1?B+Pv6QYg?WT*y% z1GO{e=Ut<#%Fo@NKK!B#E#WEPHLpnxW%T6&r^GhAOttOBd|=Azr-byPe8 zdBCwr@|jm8c<5Mx6?*b}%6f%{3jh87`kzr(Lx1&y54 zLf#IJ120DTBM*|)HR`t}Lq_-00@MX`9z1I4rFsdDIUe#RzThri3{9KVkSqIgq;@^- zK!)f5)&I1arkc&SLaOF=JqE9(<;P@nR=~YM7T0YcesPIa*EOe)J!IV9%-VJ3ey2ZKJ5N-JusjQtK5a@^67pzpVCEo zYZ7Rk8WK7u>AEhAB)-1n^pq}-H<4!j3KWiXM)LaySLO~1MHOY8ff>S^c)OD9-W=a4 z^@tcJo2Og_;CK4CBd%5v&+unRB)qC3`Cpm0!mj-UU+do9z?9Kt-O{Z>x zS%ba^_ZX1cHJ?v%eR(*PlF1nbiZX}B%Be@271TbhczqoWiSizxHtq2`nZ#KZ}BeUo3<$#rYjGdU+OYUdw(9{Te5)Q%6uf z){ufhlvrR|DTCiDZzW7$x>Bwh(*JtbNSf{CXl%*)sc~So3aNjlGBtHupMgba4%+JZ zF^b&bZRcm+-7Y|;H;n@#k)~PbB&5%o~e;*9P(7 zDoRkf8+mrZzK4P3Zqr4P;K2M+kV zjHn|Ecw;ZKw?hew`lTQ?(Jj7`UIfDKXy5rq+xvzD zZ&gI?1WMhacl&;Q_-yx%_zp<0S^;xG^HsF+dDbtn7sH)I-ZK(_I}syKygwPVsJj6m zcQB4OkVHT;)qezF_sNkT^NX9wA7=i1^GA->O_k+($p6n-|Eze#<+W)1;^#QT=SK0{ zVdD6J@3-E#eOpSmSLKU04i zI&K%}L}x}y5{z@0UR)sd5 zl|Ow*&Z(b+VUUZBPrT|Yg=|`XXZw%oXYO6ku3eRXW)|ST2TygQoQ4}jywntSMMxr0 zeMTm*f_adBbcl1zlrRGnyr9uLn^`Oh%HNbg%!0a#ceAkxVqGfc*_Ct8vcgu%pk?yo zc3l=UZ`FLE}4`VuxcSZ$=Z9D+u%tyVZ093fW0$CBE2IU z=z(D#L6n`v((ASd)=RWu&T3wTl_X$Jq15@aktpMOuVs|t2TjJZN8n8ni+*1mIQp|Js>1FBj7`-y(cysjm@c_{qn{PVMK4%Pt6cvM2<;2V7NYhOFve)=8|WH-q-m1d zBnJO8xaUqZBY41=vESm#2IIcS!d%MZ1N=*9)(mu2d!9}{etQ%W4m@K(zhDDiS|H4V z7#|pjj#~WVXimuhBt|p+6k({==DFal50ngRpu9I0V0Paw%fgIDr~-SB#bAiA9PFw6 zkKxFnK(jotcj%G@es-sf*A}j1B{-04ygn?HQ}C(4o|6!WM?3wd=*gi!U+VX*HC~?; zL~3(BpmlLE#`W2yAnipmY?lk#-!tJYT!KpGvA}JZo->cdKlx3=spMpCjuR|QM+}x| zfcZ&uA1+&Yqqa0`sE-@BUx>wb*=)gVi-m%UPM?{0@u;zq0}#Pm?O#p4u8MOktbn+u z?M2B8Yt;~du#&nAn8kRGnlM&dT?0<3c>)d!#^az)Sb+_8{_P7zV?zER#Pxu*%i5Vl zW0)iLjDsJ1pEitDH857v9$ldsW~$)*~Y+MQ1E+pkP?Zeen$y}l7H zlCcMqyi}oKf)RYXQOoALrNE<+d=@+&o!OWp&}5KOc^h|nA(O8@Y`{Evs|yZN$R!22 zT~#+^)^(Hk5O!-F>fOP!r48WgheF4;IjOxNZT#v%bO?TRIY#WrG;=9ft{MC8Z`*Fe zvCiBeIeE7>kGQ%!Jj~U%diTc!$liZI?UrZR)bt6s&#hVN;P+jgnr!s zz&O{|1ZJ2vQ1*dw2Gbn7DWhl&jFaeFJd(qcx~I*UHjv+jNQNHLjk>$(VR>^uAeVD9 zNbKf&WOnTiG&>19++Z*1`e-wBe0xvt;Mm=YLz5o0ZOE+%KQy>@FgJ8VwEZ#AAMjS% z2mG&O@PC~yWE4yQ%bO7x^T-pj7hdWXoa$>)K0^TKU+MhO7w2b=C{Z@SA+)eaRbVU@ zpKO$q9w{}MmhKH63t5EP&azR_U0`p76s)mMUl!J`0o9*A$!pm1t_D$TknRFyMK0oy zZuTx3Z~(-09w|#`@7+679a6V+C!(M~>z?$QUwjz5w-4bJEhGWiNcro)wjs4Q-`5}V z3Svlcwb~zG`ISh2E*Vd9Y3J|DHx}>B|MBp?@aF^09dY0WJ41a_gkeryZSa?)?v?v) z^3G#_+RIylE$h~(IkKa93_cNpcZ76Y&~~l) z%#9=-l6`Juz1Jt_v%>|A*Tg0Oq>AO*K8#DGPmxWhxu-!ZEr3~CXMzrm{&id*i*o|p ziELUw5;w;-u*O09d~Fn9O;;q zOE6@aQN&WxCK1=4&(&w|hO<*(;*;6CxAF<(JxRMuKA!cT8~y+XLY>uTtyjNNszh>x zBH7pDLaqOcq4C4rp1YnH4VjXe!{4nQePE#{awY7-0pzjd4B(s^_273MFw>9nsG&R*x7wR=QP;MerQD;P~G``Yc;4!F%IOdfzkd>-ri z^-S5s-7j>&)`W!e8}|C_uLC&34A)Ot2;epk8{0lkf|+Leo{Qt+>y`;Aj6sRSSMp!R zzOO$l@4e|sa&=BHUpV!%<14(=PWXZkgyaOd*|SeyIO#8}|5%+Q@+9EBrp;y_myBw^ z8K=^an#pJaJ0dsS-XE{Vp?$uIv$PC%K3I)8;^}(~XGVkvudO=km#ZVfz~J*Wo*!Vq z)+Jj-HhpUJ+T6l)GB_$`qMJwKZ~tw5QfHoCWNb9N9uQI#uK&KIiE0YWsD%w-77L{mK!&mPlMnD>Yf;Sedrv1E(BaS7T^^;oLV&SEIYW zM4%wf55z5Wa8Q;u3dPn_*1n&Bu^sD~-IB&F+==;Qmu+K$d8fTrw@H;b!<1;JsJ>0J zhsqz@an^^2CA(KQF`v88aU{)06tzJc4Sl4Gmok~T=6u4s#)#lO5e&3QbRmIX=*)&h4BAW)8Uz zn-2)u9?Y0m4XWz*Xzsn_8yE6uzK9*>b0c;*FTeq4u_i?7LFBzkWw?UBUB_#f1d9h!8obt9Lgg>Xo@3 z?MIwklV3!F75oHGeHfJBij%U6j8FRWH~+{0-zlq|diq|;u0dh~aRB&}Dy z6Og(w_EZUn@syV7Rf~@o4fcVo#|(sK7Dd*(e^|tY zSV%r|=LJJ3Zxi6rg!&SO#GUt?0BEw^&q}P%5zu>k;-I0j&<9|uOA7^TJ$q(vt{I3> z_3Qg7)GXaeu6p`7#dvfkpF?3G+`-J|cjBf&b6A-AIMAC7@At7khy^#iU|hb`JNY zb~61`qHT@xsMlP+((YG~lOLWjU|RoSKbvw(gre4vaHb(aiJXmL>(O&_KVF_J^!jyVd3Kb--$DNx0;AuIF~zO|S0WoCTCgIJ0zGK!q3t zuAxucKbDmZ7&0RV*LNFzpUZ#)JJw(${*^uzQY0ynK=$2HV94Fh^Sj*$&*=0L(a@iI z^5TUy>G$29r+)`qW!|Toxc*pfxgIUJZ{8zNHr-mgtgbX!Ws6tYSH&8spQK#7l{r}? zcw+h^!_{vF>!Om2+b|cDXBJQK-YVe9PPU9&%lKhsbxQapNH8yL2FS-Zi|#71=-X`kX1bf){*JA)(#<^FaQV z^{4h5jekzlo$WhvmH;oJt@h*X1{v^n{UjH6e`h33F@zS7&tHz5&GnQQjlm=>``$Z0 zOGrvR`MynojmStnA^9M$+_UuFuo(TRo4fvR6m}r{d!e5&qf&EyiBk+qI9s+oeIONG zuKjpHKeebLS-J!lJ zIcB{7KEz66+bHz|mFf44CQb^)ezW{3*~Uk*bi~Z;_iKrNw4PAT;;6a(bLFzI->2Sv z7Et+C`nZw5cPO{sAqHHzfVK^mMHZ;-LAA`1U(e$UykdXTJ zFO4c8yBD8cQ>@Fv+&;3=hdoM<*blD(KkQxOmfTXV6w9Z9L0|9!EiFD6+7efYciEqR zqE)6ev>zqk zkzT{Ic~iaoHCa@n$?Yvw%I~jLRqX=NviRO$5FIZM5^}p$V~?lK_)wxsRs>)$na2|Oahu;y_*}=<&c!n|lP#`==(V6f3M)rc z*+_4)!GqtI?F!dYHGLoNr#4i6`K=s4gwKPzQygAF37|?ZXf*IvtQvu>V>kAx(hj9MxjWUoVSb^s7(A>+W^7v=TjC3YFjQ-G~%QZGXLhv@UOd}95HDn z`VRr}KYi)qN|^xSAC{Bt3%>^xuS=zh3uZ|8L7(>E-d`So+lvxS*QwtItA$=8d7zZ8 z0L_r8lQS$xT1T+is^{%rQG$UbEACyh!D$xW*FR|Gjt}U753Wy>jKtYwbAKvQ$RoBmJNv;HfJWU%!(%?*SBSuXN+1e`ITUpsLwe(^g%?c`K!s{hJKMa&;e)dVdBOmLXRh6pjz15>XFj(jzQ}b2 z60buR*|b_1BQbXo(69l+_juSYhu`i3Q(KkzT)kWyE>l_%!pH;BXa;p|q=9@(ju?8@ zd1GB-rlHrE`(;HYUSAGmHvYW>Zf}wzms66#MyyU^mx-lq0Savfoe&i!evu%K@1#h? z49%1$icuH{lUG+h4XF2r#37&zO#w|5xDb~FKs zAB@eio0{9;A-fZea%91#Zh8Ax`$CJI>$R@~lUl$R?L6mLs38F}Eo#;Kt~&yFwE}Kg z%&G}jXhir$V7o=PDW6{eD>h{MDO;FO@U!c`uL`~%Xm{Pp?33*VH+$JzGto{Pm=w@d zZt(tGDObP}s?;9_{QzZD40J1Bs=T^DBf^99Md#e)-@m(L99877J+rRhzxbYS=JYb+ zRQP!b%ei){iHKtdYG$nmrc?55$N}Z$0Gn!0>>BDfiW11tK-%MA#^p zA)yf*6b--;IpWP8*U9a67%sbxrqA$+JgGW{Y&s)X?0e?F+??g;1D(V3vnQtFD7Kpn zEC5ydo&Vs~MULd!65r<{WqX!g4W%+7jk60 zycTz?roqBqrQp!1#LsXwmA0fv5E>rT!0Sm8KurqZl{7Z9wB#AU_UE;WCYwW$e_v?E z^)%8ZQ>ghCW&L+JsX2*8`@apm<|Ox3etaWbVHPK-PW3O}U=5C3;%e}`EP+FT3Xq1Hs3qz0(&^UvtKBro;Zb?0mrg#O4s`}7KgE?`Jf zQv^UjXiiJk?MrL`g#WhC?}JPeXs36tel4*L2Lav3RlF)Skv#SWzl`h@Iz-}d423+n zZp_ncnq?eBsKZyH;H~dMECjjR@KrmG`(yQ8JS#U~7|lFnf(Ln9OaYq6UW=^f4r=at+^Y044-5`e1 zAS{Dv###=emc301{tlO7FVJl1_#aA22F}zwYChnbo}E?Y?j$3`sGD{){M4#@;MpB* z4p`;%?I?DPFBvGB#|rZ};=^+e?SZXjPzGb{r3Mmsb1X&y=iwzf2f#{W>3(!HP1wSP z=V?LkT}$0y{>I*=IIV)yL|$I`_Olx=kj}pL;qNQ-%7idUI^A(Uv*@@b`AiFte3 z6hq6WlNI_d@p|V9ng#vte6$EAix}AEc2XfK+4UYvW}NHN1olg$oJCy0{+tcwjHB?& zEl%B1$t@i3Tnl$|G=rz+T-->QN`uFwV1ca_Htd@8wLE3ZuO%xBt4@jZ?bg*$5 zFeAc@AvR)Ws?kJMIrl=YPTm%{Yxr-Q9MiU)hP+rd{42Y6KaAF^51JdmS zMiFPn!lhXD4-LfEglKKwhQBi65?F3YJrv3K6^PwG=j^H;A_m9ISrr)MD1#&=Ct`j= z16m!VH4As+ieldaf4C+1E?mj1AWEXpNcu;^0%F^Z4E_ieuD)vlad2v(faMzk+Cfq* z2k5bqaVy;Yc4P##xvXP4aJTsDk`Y1}CX7^b5~nPDZvX0!&!kx7YV%milfxg(;IhhI z{jTM(I`PK8?a=6eia3#1s_D~D{lI+HIK1R1Y>k!mxvY(AaD>-b-wYTr7DMx0ZUpz0 zGcE@%&}F-5_^b7z$njz|3n;bpV|hcLoW@bz%GLT+LGkms^r3a-Ljm_mUotDyLst%s zLH&)(c!3%Xx5%@0-sCI{hblyfU=CnLL-rXs(O6-%{`fjOz!Y$T{G}1)jYq4$e|-F? z86)5=Xd!Td->^92iz2ry_5qDW2+sUv8jZ_h@ow@ILbl>IYV;slwIKf z_MTtxrTpvp9n{1uv#@P?5mDS>SX&e(bt+rHjqLvUIa&@!@P^Pi?cn$R1!aHG5#*o= z$vMC7n~3Qd*hyLN5Ux{1!*tfKU^(V+D_4^TL@6c~Aiqk^&LPv!)$fEmW7Y_Oy3@<- zw~XhC3gG#&8gW<}5y2wc?o<7S5pXfmm=jgGUB46nkLIy|&Y@cHEZ_;g`s&F6kq#e!JvtF6@C+P}tD zgba(DR3^Yu{R-zy6d#5M-Ro?W7~Cr`ydCU2G=<<^b#aX2ujKvevTxgPxzE4*X!D@M z0NY24KwYE4?%8Hwdvwhj$b|d9hnFxYMoE165YZ#}PZDQU;M>pBZh=4~l%4=hB5`k`$Z8w{XR6ewFZvaO|>XI{7^3<9U>$}$Sag4J{kzW zdJoOM1Wf+P;Q(!pWqG2}A^*Qc;|cIXM~o78IH+$S9w}4KUQTxM9mqPLr!;^f0L?g3 z67U6C$O)9ni9mhep!Na}y-pig5DCVC#W0s68w1>)l?%0@O^CcdADI05uP=C%hebKi z#@FqGQvuzm%k#qlMbK*u%*^ED#gN_yi^#=Hp4)KsXAHQX#6V@p#D5DM2SPKhrv0Yd zg0n1Cx5~0PxY5#C$xd}30$$>2@LD`Xlnc)~-{BNFi22PZUNS2p|KJ)SfthCA@34r( z^;d!C#d0;_F%6s*s6pog!Dx+Am52y?i3@q-F!A35)Q$^!N=kh^z4ytkB}!;rd(LVG zcB@gs=5_Z2w2k31xb_kk1cH_dlrq6C8y`Jfc*HnSt@A! z&cn=@ZLn0xgxNXB9_6R`-L`m`944kuJIb&O`Hu)BL;unn;1=Q8xjKG41GQHMa?ugd zcA>& zAwAs+_qxCRsB7a5Ou>p%jbcDd7bv>#v%?x8;!uSsRe{CR6hL|LP35(Q^uh&6Xq-NW zJWY}U%?dvz#kcBr52C;eBpGXbLXin9EEn)v`ITtlZwn)EKHXS^*=)|)2P_@_|FtX( zF!6rDZF<@@r0~E=!yBMWZk<`vX?!h4g-c!f58KE$fNSmreg( z**dVYuNmH_CBmi&0Xu=@*5($_Obk#O_=e6%uO7ONN@_38#^;_#6N13xj8D|&Qv~YH z<9EshKLRv=r9FjO&5}-A^r9T-rmI2h zzAF=5?TBUxFrBx0_6Hi8XxWc&PyWu$Qcn^9#=~!k&wf1F6a>8-?Wq)v73B1RUMLpk zQ=B4|j)xPM5`+5H(zQcZ4DnU?w>kyaV>oAT15B@F24esyaC(d+LoEaom)07HVw1u+W{SWIUMJ`AvH?3Cx5UVZaZTg+XM4tIYP&5GH-2oCjHfu zp-LxCXZm3hoQ$H7Dj&vnS&QA$MpMth8UXU&DxTLkFhI#}fM@cYM7~NJA?<(iw9l@< zUyc3kQ{#5U6O`}z_o2oqQ7Sj-SDUR{hE1IOj)_bkXLN(KR-_N0g2QTqV71YEkrd?b ze=Qt2LRiMa3;It|C>JrFco~LF@_4$>X1mSwDSj)x9lb;0shEX&>D(nFBu0jCo*k*yCH$GD16aeq9;9{K63$Z9 ziVubV0PrpX^nm^0d6w}X!5RGwikfO}!f+7(pZ2aZtf{S8Lxdy3Q9)4zq$moC6hS~b zp`$dVh)R<~m97MVK!9*mu%M!H6s1I@h%}{$1Oli?5$V#qB8C=PsG;21oUa(pckgq5 z++X)O{NhP=_FilDtXZ>W-gyU@#!mHytlXX^u9oDsD64~ogGY=hx4vL%&{Z}_FsNp>4r#>#(a6c@7*f)v<5O+N5;6;A}Ha0 zX#40B8F-^FMxEaT)1_DqjJ& zJ>wbFcpqE>?4uTUFux2-}I~r zK+H+OeS=-cc;(}XVhxL4q>0KPI6U`($5>>F)kuAPhU6z`>R%cU7mTN2LQAL$`4et*e0`B=u>csqv6_nBqsQ+ zrNzA3S8W2qcfI~LcAp4vj-3W)kY~HAv;ju$1H|E^gMY2Hh`XPCOm$fq!$<;bi!~L+ zsyl~5dc%SyRsljSVdVz@>KVyIq&$*8MbBj23I{_tnI>)&43lGJw5~ewyH<1f9fJ`K zD`4WY8?1Tf+5YMokRP5iQXD?eO!Zs>=Zw?ZTqz^G_i5>GA6ad0^+BG~FA3SNN``p< z_`FSFkbM!bTH*pYY80|o3w|4wy94c?C&ksIH4u3o6#}QRBHC;nLV80>BdcV|wF3-_ zq-G_1)*OnIj`O^{a|6~#*2$s-q611 zDcF75y5T@(W}kTenPD!(GZE`tjnIDEO1>38pBE7$|7={Ab1yu3Ar+#(YAOqGRAFDx zN2^hn3XitJo-j&#*j_5i+kYH*$1X`4k*QW{T!l@vG-y0PV{oGwwi3~2Ath3LLhPDZ zUJvHs0%EZ_51kUcW}!1-W^Jk=nKP_?3r!9vb!gpA_5f=+-~)$-ws0HPGcho8v|qd6uW=>YI^PXVp=SdIX2A}T{>h+FOY zYWgo^fZ6<-#1D(-dDnHA63c-#!ZDTa4^0OFpoQ@=-SSoAnvK@&_t#PgT~W)3J75X> zw#UUSpYZ4iCQMhdJRebU8VVM0={XYo^8f`aoL_8(`h|j^mCt0LEyfh&Hfz^`1^nUM zngbjJh0vrOm$2J2=RQ{dx{)u^pQqYA$H217bl$m*d43tdz%}m|sJ9?KMx1SlZie&s zsA<;PXPrI~%xg4IZoqy>28*YgDxS6lRkDR#QgTTVKnnX1*NEJDCYT>-ClzRiR=dh| z*rdEZBl5dBn0Le*bOb>3WdN}A)`+BEEpYGndZ#rTIN{PwHE6|IkGugS6hRs0|I!F- z0WrYzr3~!zi5`3(HB;y2N89R2dlF|`#OuQ3F}19uwzzfrEWz_&F&bTsU4IXiM1fm4 zcTnJ|G*TvvQ2r;*2QCGWZ#F3Q-~dFcGG5WgK8}}Qn1og7;%2rV(pl39W52M9Q;!3t)Cz%7Y0HXI{($$HYGZk} z>Vv>z#jP0Pj8Sd`ck*iP?rXB~bs8AJQiYrUQI~-dvaan2ZhDEuP8AIM@zi;k=yVQ& z_nqpof2pu>LiJ>DOvONqYPA4g2!@J}pyI(T>!?z5cD74upW|?5YLB=mdPA|xtq|{p zw83-R?EFv-*?|rKw66JT?uvzIi}aPO+=c{SqZGA=^7Ba|K!W7SNQWMT8kWbdvXSv>5U15jGfB?K6+#!x=gJ^RUHhdFhT(AHxTdxL z=<127N_0q0=5~k?Z`V;hS|QcnQQ#4mmZf9m^Wa6Uo_Qkh2i*9uO-bz4d^tG%BCvTs z+5@y$?>i`mkGCA1djhVGFjOxR%G~G1j|YcLWK4S0YTw84wx4U;Ck1T7<+5#7J6%d^ zUA8+9faD4S-xqEb8W#9J>ujzhcka5An1cs{lJ&DCbVm}(0U1@b-TlhQAa z_O=se@28QX5Rxt=%N~2B6X`y_6Ct4{%nv%Xuz1tHjG@u@S8DGt zVfV3`U)u|{E36M3wSQIy@$!%3xmd4R$SZbV8;Y%x&wYfQj+G$#gRQTDS{y-0S46`$ z+A|XP-8W=5w@&d$12cmPUW8+Pts(&?p95c+nBI#|B1y!wP|y4n+V7*T6?HOLKaN~D zFWm6SeqDr)_E~fL)OB_^oC?)2yoa;fZn&1U!3J=gjI`S!8L3(fUt~yO3|Gb2DQxw| zbcy#k2SJp=lXv(xKcwjj9P10;1v;tUOLSr&;BW(0os9+A3gHc{4&Lo3#ay2CGZVz z29S4s883jGF}pS1w$J$rr8~xP*7up>cw_ES#-f->#&^XukZVmTQR zGi;=)q?NOV8=O!nB$DO)3Yhq8fmv)&RXV4i*HWV~TbwH&S5!*sE7HBndgDD( zq|320q9Wu~ge+@|dYL{R-~s_LdoPZQ5b*fiJ&zFD7urh2s(@_7B?=!`TvnD)B+<*4 zGi*l6zCsUdwDvsnj|EFR>(LqphW-0bXsMfBD39PkNIoLcx@=bKsuL#ivR&82A)we5 z;;VF=RK|I&-^%$76_`q(frQeI#yAAg1*zhPwxD#Fpp)=Lh!Cwjp|gd+l-10L(GaD`zb^N3s$qYKz#G zhYdDuD`LWAMj(_xkUrA*PI}S#UGg@ll{8>F&93xg*vthF+VI; zTGNMi1EMs^My#>R0oq^iREVB}&eE`1Z->>VQhwktll!g(SOo6k=N)R2yJF&i+=bFR z7?tTzwyRnEEk<$u&dZm--?jc0Bt+Yat0x2bACmo+O_n$ydPR~kwK;-CrG4)66)hTuJjDr1pk9zJ3VS+z$|u>#frpbxt*W+_IW zO)d3tkRTk%>$_YdPQmootF0-|Jn(OQQ3ipML1^{+2SO1F^(P__3zU9hYqrB8waq5b z5E`H!DxB+d3+RhH`N3p6yn(XKut)^%RinVe!>|dgym~>?@nMoA(D(}ANYO)kY#zJj zxxME(4G9_u-I3P-r?j$nD5RNbt_Plx40|L(Uqn>e>Ae;*Wcch@G{$QY;8<3O6MhZ? z(L*BBV#sP__&4Q{mN}YBmawkivJh zkfo{`Y2AGVMG~?06K=RA!V{4b|2`oS_r=az~PyLgR zMUojQx|r8YdUWyrnI#mkG;&%$P6r0bM2|cGZ&G(|Rc8f%AUvva&8g&DpZZjFGWzR$a(K8dcAg%z33p8|_RCS{hF64xTDKBLUe@ z%tUX`jNBU1*cs54@u|G2Ot9LyUgmc}x-<=ShSsIndNZOVA9pq<-Fl8*!{Q zNkRgu)ey$UeEe)1#~kR@C*YKeovr?3)d^DVlth0B-rfTY-_6VvF%J>Ro93m#I6oY- zwY~cM^0t|0ZrVX0uJzC`uqvJXAoMx%L8uXmx?U!<^x8qv+<;LrcG+L@#CZKwt7Q&4~w?;-@k-X+-gH}1K>?} zcyFr5j1;ud^!su~*K-yq;#r^G((hOg@$46d5YOvhk`<9g5A&urzAdnS7ycj~kxPAQ z0FT(7{!Dk|+4GbiNXDR)RxZgfWzWguYM$wX|6R*-50=pk5 z$lPmW6CoaboMn`0JNwMzC6@*DHD=i4#DTL-2e^&v6iyK!1x<+`07Hc7bEYPmf;wxJ zj@*ud)UZAje?G7YS1-UfqXYZGv(VXH@xy`lRH^$1z!Gf}`?da03&c(U3lzHG5D7_Z z%xMLjOQ;{jyovJ;&}7II3TnS*mGQNCyno*s-x=I_2PE8P6*vgp3xGo4_Xk8II5O3vA@vaZ=zrP;*h|jI)bo6@%n@X6bd^<)7!cQ zAW)$Uj3_1+_=ms*pKeh+x0C+UzpwpMI)BUI|4t4qCzDOWoLu++L-YQjf`_uu4n9KU zkK+QekW~7oT81*PE(-Pm!fHBBFg)(%L!LeIt}{m!%u*J?x)K? z?l>A|ld*b=_fK8_=M&S=yBpHYXUe1V)?@)J_0yNE`|mMR7b=0?;O9?S@{G`EuQ<|u zx-}A778V*>g0>6)-(3sOG~7|p|Ch_P1alU9TEr;gjTVRK9?HI8j7HC={(F+^gJKng z5&GBn{B?+eY-A4)kIZ!ZhG8<`7ghsavXWPK(1|P*?Z&+SDH}O+d{Z*S*?yWa{s4g{ zME40JikZC%g$)c0WPF*(x~>ubx}H#simFXVVFT6}@?z;kadV#_f$O=zmoU0dPf7?9 z9xZQ2&(H~zum^PxJwYZP((%}EJiJM(~s1C{+#5>+1l0B zbz3@GeZwVRwhYE7vyoR;R(u7NHi(+($-aBe(_#cb)D&?$ivCW2bM_ZItBw_h+HC#? z$i$yVCS!WxG+JQK9v7#MPk?u#`*Ib26Cf9+DlgA+o$d=3b{9N4zB)Iw1ln5cHdBwH zmwV{?cd9ZnT37#@pFwH$fBxB#8NWwBKc55&D|7s~?q42zAFZpa`y?*Tu*Fr@QHcEd zn6h$r($`&@^aE$PiguW)8hpLH)>ouNo1dsRTG(L8*j?_RJ$7?7Jhji_{8=3Ag0Hj) zc4z@^?sJ!)?c6Y}vWhKVoTjdEP@(YA-RegCM)efqcv1TmwX}m@WP^74F!B6CU0q$3 zIeN4qmgmqldZ|3L5|s9LmFd;l@mb+Lw#IL#r!nfzK5MMQ^O#YUU$eh>Y8jC6otY+&Gi zYKniOvR_5MB`c9HHI9wBkBpBS9y@mIk_$lG=|t0dnov}vWKF`#`uh5cV@K|DP~Y}L zxy>z!%Nwp_$+%m#u&{97o8Q=GN5i*4g!G)3ZR4=(P!AqF*qZQmaM%3X5r7k1^!7dq zl;!CIhDLxzrh9fe7nw}fdn93f5{JX-dwR-;_4f7kO|p&ZQ?Ae(eHQk!uh9nE+7885 zZi3gmaKY78RBrdiHyFqCM@{Ee+e>#Z+sn=4@pue?Q+;1vucSAN_-R%um6}xZNb-2B zpoAGkA&ft_FhMyWr}*-DfYkjwpVrfY(pOfD(_2(mNV}!B-%ej538*LO1+g`Qc<&ptqO7R5T znX^wDR@w<@{uQD5mzRaY19l)868wuL*#(u)DN14dTp#@!Z3D;i+w(UL`3NV{*wKQs z?%Sm!JnDDZ04^P~wYoCH=P%<8z%Q8RJ#Nd)&GlJiTccsLK@=X!lK{#wY#F)fb?!8? zl@`6E<({G)en9fb>*IiOXX(p4++Y<)Hqq-%DbF~a!s30o{DIr68T9aFe9>2n?wM2o zswwfQ2Fc@S;{}U{H?FvTH9TNmh2vCliuw8ZnV%e57**nffvsIePVNt+(%XF3&~NmL z^eTpVX=$kmTI)4KVdt9>r>v1(^UK2@K71Gk$fll@b@2w{!mf8t=T645;DGWnKP=Wr z=zQqE1c)_LaCr8f-(aUMGAk-7=G@+UZc+Ww=56HD{pICaSm5C_O*RQ=nC{uI9rC;4 ztIDP9104qQ#oSoQrzgLBFOyV>vz2H4L36~^ptHv zxzf*1Y+cwpsq6l#z73SF%{{|S(e!jb0Bzn0nVEJJu_WDfOxwcUL?Y9#y z(7^6BLkp^?mo2^_L7aAUFP0Hy$Q5y$2C0dZ=2T;~N#itei(y~fM^Xs^avGu}KqCzU zB5zhe0Wt_bKWlqr87#@1n9j<|%HtVzyo%+ZJ5kUstB?w4N=LQ!61&XF3me`rBT9HkA>rreFtNa?I=Bm3KYtrW_U${qp-bC7Hq>^`gH|x4~K?^rkmf;?`VYYsHvhM5u@0uUmnB0`t*E4%4TY@uTb8SSq0|WnK8=kv06U`(2HFkVi|w^~5o*)*YR|d##vZ3G& zw14g-?}0Gxue^ALpO+HeP>{WkPk^7_2yss) zK(-?&Lbklw@ihdN<(Rxq_ZnDU_ek#$fID$!H(AmxXu>Q?>V&12m)FR|gfVo^t80ag zM@C-$G1O-~sLd(?FKq1X`OG&Z?? Date: Fri, 7 Aug 2026 10:35:30 +1000 Subject: [PATCH 62/83] fix inconsistent product menu dividers (#48787) ## What kind of change does this PR introduce? Bug fix. ## What is the current behavior? Product menu section dividers use the stronger `border-overlay` colour, while the product heading divider uses `border-default`. ## What is the new behavior? Product menu section dividers use the same `border-default` token as the product heading divider in light and dark mode. | Before | After | | --- | --- | | CleanShot 2026-08-06 at 15 56
15@2x | CleanShot 2026-08-06 at 15 55
55@2x | | _Harsh borders between sections_ | _Borders match top one_ | ## Summary by CodeRabbit * **Style** * Updated the product menu group separator to use the standard border color for a more consistent appearance. --- apps/studio/components/ui/ProductMenu/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/studio/components/ui/ProductMenu/index.tsx b/apps/studio/components/ui/ProductMenu/index.tsx index a2e4d463bb4..3e65b8bbd21 100644 --- a/apps/studio/components/ui/ProductMenu/index.tsx +++ b/apps/studio/components/ui/ProductMenu/index.tsx @@ -48,7 +48,7 @@ export const ProductMenu = ({ page, menu, onItemClick }: ProductMenuProps) => {
    {idx !== menu.length - 1 && ( -
    +
    )}
    ))} From df35577adc1ca7311eedc7f27a33625b8dbf3cd3 Mon Sep 17 00:00:00 2001 From: Danny White <3104761+dnywh@users.noreply.github.com> Date: Fri, 7 Aug 2026 10:47:07 +1000 Subject: [PATCH 63/83] fix titleless Admonition alignment (#48784) ## What kind of change does this PR introduce? UI bug fix. ## What is the current behavior? Titleless Admonitions using the `description` prop place their compact body text slightly too high beside the icon. Admonition bodies also inherit a 2px bottom margin from `AlertDescription`, making the vertical spacing subtly uneven. ## What is the new behavior? Titleless `description` content receives a small optical offset, centring a one-line description beside the icon. Rich MDX children retain their natural top alignment because Docs prose uses a taller line height. Admonition bodies also remove the inherited 2px bottom margin, balancing the surrounding space without changing the shared `AlertDescription` primitive. | Before | After | | --- | --- | | CleanShot 2026-08-05 at 17 52
34@2x | CleanShot 2026-08-06 at 12 05
18@2x | |_Note the imbalanced space under the text_ | _Note how the text is balanced vertically to the icon_ | ## To test - [Design System: Admonition](https://design-system-git-dnywh-fix-titleless-admonitio-db462e-supabase.vercel.app/design-system/docs/fragments/admonition): the description-only reference example, at desktop and mobile widths. - [Studio: Project Settings > Dashboard](https://studio-staging-git-dnywh-fix-titleless-admoniti-908cb8-supabase.vercel.app/dashboard/project/_/settings/dashboard): the Dashboard preferences notice. The dashboardPreferences feature flag must be enabled. - [Docs: Local Development & CLI](https://docs-git-dnywh-fix-titleless-admonition-alignment-supabase.vercel.app/docs/guides/local-development): the titleless container-runtime callout near the top of the page. ## Summary by CodeRabbit * **Bug Fixes** * Improved admonition spacing for descriptions and MDX content. * Removed unintended bottom spacing within admonition bodies. * Adjusted vertical spacing for untitled admonitions while preserving titled content layout. * **Tests** * Added coverage for paragraph spacing, wrapper structure, and title-specific styling. --- .../src/Admonition/Admonition.test.tsx | 27 +++++++++++++++++-- .../ui-patterns/src/Admonition/Admonition.tsx | 4 +-- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/packages/ui-patterns/src/Admonition/Admonition.test.tsx b/packages/ui-patterns/src/Admonition/Admonition.test.tsx index a86b6e67339..0f00a092e3c 100644 --- a/packages/ui-patterns/src/Admonition/Admonition.test.tsx +++ b/packages/ui-patterns/src/Admonition/Admonition.test.tsx @@ -135,7 +135,11 @@ describe('Admonition', () => { render() const note = screen.getByRole('alert', { name: 'Note' }) - expect(within(note).getByText('Body copy.').tagName).toBe('P') + const description = within(note).getByText('Body copy.') + + expect(description.tagName).toBe('P') + expect(description.parentElement).toHaveClass('!mb-0') + expect(description.parentElement?.parentElement).toHaveClass('my-0.5') }) it('wraps MDX children in AlertDescription', () => { @@ -149,7 +153,26 @@ describe('Admonition', () => { const paragraph = within(note).getByText('Children body copy.') expect(paragraph.tagName).toBe('P') - expect(paragraph.parentElement).toHaveClass('text-sm') + expect(paragraph.parentElement).toHaveClass('text-sm', '!mb-0') expect(paragraph.parentElement).toHaveAttribute('data-slot', 'alert-description') + expect(paragraph.parentElement?.parentElement).not.toHaveClass('my-0.5') + }) + + it('does not offset titled content', () => { + render() + + const note = screen.getByRole('alert', { name: 'Note' }) + const title = within(note).getByText('Manual approval required') + + expect(title.parentElement).not.toHaveClass('my-0.5') + }) + + it('does not offset titleless content when the icon is hidden', () => { + render() + + const note = screen.getByRole('alert', { name: 'Note' }) + const description = within(note).getByText('Body copy.') + + expect(description.parentElement?.parentElement).not.toHaveClass('my-0.5') }) }) diff --git a/packages/ui-patterns/src/Admonition/Admonition.tsx b/packages/ui-patterns/src/Admonition/Admonition.tsx index 93d8d1fa33f..b6632212b8c 100644 --- a/packages/ui-patterns/src/Admonition/Admonition.tsx +++ b/packages/ui-patterns/src/Admonition/Admonition.tsx @@ -8,7 +8,7 @@ import { AdmonitionTypeIcon } from './AdmonitionIcons' export type { AdmonitionLayout, AdmonitionProps, AdmonitionType } const admonitionBodyClassName = - '[&_p]:!mt-0 [&_p]:!mb-1.5 [&_p:last-child]:!mb-0 [&_ul]:!my-1.5 [&_ol]:!my-1.5 [&_li]:!my-0.5' + '!mb-0 [&_p]:!mt-0 [&_p]:!mb-1.5 [&_p:last-child]:!mb-0 [&_ul]:!my-1.5 [&_ol]:!my-1.5 [&_li]:!my-0.5' export const Admonition = forwardRef< React.ComponentRef, @@ -69,7 +69,7 @@ export const Admonition = forwardRef< ] )} > -
    +
    {title && ( Date: Fri, 7 Aug 2026 12:05:47 +1000 Subject: [PATCH 64/83] Use white wordmark for QA.tech primary logo (#48827) Follow-up to #48798. The primary `logo` was a black app-icon-badge (square background), inconsistent with other customer logos (transparent wordmark/mark, e.g. Brevo). Per explicit direction, this swaps in the same white-on-transparent wordmark already used for `logo_inverse`. **Known tradeoff:** the primary `logo` renders on the site's light-mode background, so this white wordmark will be invisible there. This was confirmed and explicitly accepted rather than left as an oversight. Co-authored-by: Wendie Cheung --- .../public/images/customers/logos/qa-tech.png | Bin 58064 -> 12817 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/www/public/images/customers/logos/qa-tech.png b/apps/www/public/images/customers/logos/qa-tech.png index b46efd617b8f2a796c180b54ab9c406f1259e1bf..42067eeb3b9f7a3c2bc54c3efc476e59e10c568c 100644 GIT binary patch literal 12817 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 FzX1Hj>kj|` literal 58064 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 Date: Fri, 7 Aug 2026 11:21:38 +0700 Subject: [PATCH 65/83] Initialize notebooks store (#48801) ## Context More groundwork for the Explorer - this one's focused on initializing the valtio store for managing notebooks Store architecture will follow closely with the existing sql-editor-store No data persistence yet, but can test creating a new notebook image Which should open a placeholder page image Closing the notebook brings you back to the explorer home page ## Summary by CodeRabbit * **New Features** * Added support for creating and opening project notebooks from the Explorer. * Added notebook tabs alongside existing entity and SQL tabs. * Added notebook management, including loading, renaming, removing, editing cells, and tracking unsaved changes. * Added support for SQL, logs, and Markdown notebook cells. * Added dedicated notebook routes and an initial notebook editor view. * Added notebook icons throughout the Explorer interface. * **Documentation** * Documented session-scoped notebook state for query results and row limits. --- apps/studio/TANSTACK_MIGRATION.md | 7 +- .../interfaces/Explorer/NotebookEditor.tsx | 26 +++++ .../__tests__/NotebookEditor.test.tsx | 87 ++++++++++++++ .../components/interfaces/Explorer/hooks.ts | 43 +++++++ .../layouts/ExplorerLayout/ExplorerLayout.tsx | 5 +- apps/studio/components/ui/EntityTypeIcon.tsx | 8 +- .../project/[ref]/explorer/notebook/[id].tsx | 16 +++ apps/studio/routeTree.gen.ts | 62 +++++++++- apps/studio/routes/project/$ref/explorer.tsx | 9 +- .../routes/project/$ref/explorer/index.tsx | 11 ++ .../project/$ref/explorer/notebook/$id.tsx | 11 ++ .../state/notebooks/notebook-session-state.ts | 9 ++ .../state/notebooks/notebooks-state.test.ts | 79 +++++++++++++ .../studio/state/notebooks/notebooks-state.ts | 110 ++++++++++++++++++ apps/studio/state/notebooks/types.ts | 34 ++++++ apps/studio/state/tabs.tsx | 9 +- 16 files changed, 510 insertions(+), 16 deletions(-) create mode 100644 apps/studio/components/interfaces/Explorer/NotebookEditor.tsx create mode 100644 apps/studio/components/interfaces/Explorer/__tests__/NotebookEditor.test.tsx create mode 100644 apps/studio/components/interfaces/Explorer/hooks.ts create mode 100644 apps/studio/pages/project/[ref]/explorer/notebook/[id].tsx create mode 100644 apps/studio/routes/project/$ref/explorer/index.tsx create mode 100644 apps/studio/routes/project/$ref/explorer/notebook/$id.tsx create mode 100644 apps/studio/state/notebooks/notebook-session-state.ts create mode 100644 apps/studio/state/notebooks/notebooks-state.test.ts create mode 100644 apps/studio/state/notebooks/notebooks-state.ts create mode 100644 apps/studio/state/notebooks/types.ts diff --git a/apps/studio/TANSTACK_MIGRATION.md b/apps/studio/TANSTACK_MIGRATION.md index 536450f6635..410932b3e8c 100644 --- a/apps/studio/TANSTACK_MIGRATION.md +++ b/apps/studio/TANSTACK_MIGRATION.md @@ -156,7 +156,7 @@ These are the layout-only TanStack files. Most hold a single product layout comp - [x] A `routes/project/$ref/index.tsx` ← `pages/project/[ref]/index.tsx` (route wraps in `ProjectLayoutWithAuth` itself β€” see shell delta above) - [x] `routes/project/$ref/merge.tsx` ← `pages/project/[ref]/merge.tsx` (leaf wraps body in `ProjectLayoutWithAuth`; parent `project/$ref.tsx` shell provides DefaultLayout) -- [x] A `routes/project/$ref/explorer.tsx` ← `pages/project/[ref]/explorer/index.tsx` (new placeholder page; leaf wraps body in `ProjectLayoutWithAuth`; parent `project/$ref.tsx` shell provides DefaultLayout) +- [x] `routes/project/$ref/explorer.tsx` β€” converted from a leaf into a shell (`ExplorerLayout` + `Outlet`) to host the new `/explorer/notebook/$id` leaf; parent `project/$ref.tsx` shell still provides DefaultLayout. ### Project shell β€” `/api/*` @@ -322,6 +322,11 @@ These are the layout-only TanStack files. Most hold a single product layout comp - [x] A `routes/project/$ref/editor/$id.tsx` ← `pages/project/[ref]/editor/[id].tsx` - [x] A `routes/project/$ref/editor/new.tsx` ← `pages/project/[ref]/editor/new.tsx` +### Project shell β€” `/explorer/*` + +- [x] A `routes/project/$ref/explorer/index.tsx` ← `pages/project/[ref]/explorer/index.tsx` +- [x] A `routes/project/$ref/explorer/notebook/$id.tsx` ← `pages/project/[ref]/explorer/notebook/[id].tsx` + ### Auth shell β€” `/sign-in`, `/sign-up`, etc. - [x] A `routes/_auth/sign-in.tsx` ← `pages/sign-in.tsx` diff --git a/apps/studio/components/interfaces/Explorer/NotebookEditor.tsx b/apps/studio/components/interfaces/Explorer/NotebookEditor.tsx new file mode 100644 index 00000000000..ef473ebe2b5 --- /dev/null +++ b/apps/studio/components/interfaces/Explorer/NotebookEditor.tsx @@ -0,0 +1,26 @@ +import { useParams } from 'common' +import { useEffect, useEffectEvent } from 'react' + +import { useNotebooksStateSnapshot } from '@/state/notebooks/notebooks-state' +import { createTabId, useTabsStateSnapshot } from '@/state/tabs' + +export const NotebookEditor = () => { + const { id } = useParams() + const tabs = useTabsStateSnapshot() + const snap = useNotebooksStateSnapshot() + const stateNotebook = id ? snap.notebooks[id] : undefined + + const registerTab = useEffectEvent(() => { + if (!id) return + tabs.addTab({ + id: createTabId('notebook', { id }), + type: 'notebook', + label: stateNotebook?.notebook.name ?? 'New Notebook', + metadata: { notebookId: id }, + }) + }) + + useEffect(() => registerTab(), [id]) + + return
    This is a notebook
    +} diff --git a/apps/studio/components/interfaces/Explorer/__tests__/NotebookEditor.test.tsx b/apps/studio/components/interfaces/Explorer/__tests__/NotebookEditor.test.tsx new file mode 100644 index 00000000000..5706043bfae --- /dev/null +++ b/apps/studio/components/interfaces/Explorer/__tests__/NotebookEditor.test.tsx @@ -0,0 +1,87 @@ +import { render } from '@testing-library/react' +import { beforeEach, describe, expect, it, vi } from 'vitest' + +import { NotebookEditor } from '../NotebookEditor' +import { notebooksState } from '@/state/notebooks/notebooks-state' +import type { Notebook } from '@/state/notebooks/types' + +const { mockUseParams, mockAddTab } = vi.hoisted(() => ({ + mockUseParams: vi.fn(), + mockAddTab: vi.fn(), +})) + +vi.mock('common', () => ({ + useParams: () => mockUseParams(), +})) + +vi.mock('@/state/tabs', async (importOriginal) => { + const actual = await importOriginal() + return { + ...actual, + useTabsStateSnapshot: () => ({ addTab: mockAddTab }), + } +}) + +function makeNotebook(id: string, overrides: Partial = {}): Notebook { + return { + id, + type: 'notebook', + name: 'My Notebook', + description: '', + visibility: 'project', + favorite: false, + owner_id: 7, + project_id: 42, + content: { schema_version: '1.0', cells: [] }, + ...overrides, + } +} + +describe('NotebookEditor tab registration', () => { + beforeEach(() => { + mockAddTab.mockClear() + mockUseParams.mockReturnValue({ ref: 'default', id: 'notebook-1' }) + + // notebooksState is a module-level singleton, so reset the state these tests touch + for (const id of Object.keys(notebooksState.notebooks)) { + delete notebooksState.notebooks[id] + } + notebooksState.needsSaving.clear() + }) + + it('registers a tab with the notebook id, type, loaded name, and metadata', () => { + notebooksState.setNotebook({ + projectRef: 'default', + notebook: makeNotebook('notebook-1', { name: 'My Notebook' }), + }) + + render() + + expect(mockAddTab).toHaveBeenCalledTimes(1) + expect(mockAddTab).toHaveBeenCalledWith({ + id: 'notebook-notebook-1', + type: 'notebook', + label: 'My Notebook', + metadata: { notebookId: 'notebook-1' }, + }) + }) + + it('falls back to "New Notebook" as the label when the notebook has not loaded yet', () => { + render() + + expect(mockAddTab).toHaveBeenCalledWith({ + id: 'notebook-notebook-1', + type: 'notebook', + label: 'New Notebook', + metadata: { notebookId: 'notebook-1' }, + }) + }) + + it('does not register a tab when there is no id in the route', () => { + mockUseParams.mockReturnValue({ ref: 'default', id: undefined }) + + render() + + expect(mockAddTab).not.toHaveBeenCalled() + }) +}) diff --git a/apps/studio/components/interfaces/Explorer/hooks.ts b/apps/studio/components/interfaces/Explorer/hooks.ts new file mode 100644 index 00000000000..5c23c31eee1 --- /dev/null +++ b/apps/studio/components/interfaces/Explorer/hooks.ts @@ -0,0 +1,43 @@ +import { useRouter } from 'next/router' + +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { generateUuid } from '@/lib/api/snippets.browser' +import { useProfile } from '@/lib/profile' +import { useNotebooksStateSnapshot } from '@/state/notebooks/notebooks-state' +import { type Notebook } from '@/state/notebooks/types' + +export const useCreateNotebook = () => { + const router = useRouter() + const { profile } = useProfile() + const { data: project } = useSelectedProjectQuery() + const notebooksSnap = useNotebooksStateSnapshot() + + const createNotebook = ({ id: idOverride, name }: { id?: string; name?: string } = {}) => { + if (!profile) return console.error('Profile is required') + if (!project) return console.error('Project is required') + + const id = idOverride ?? generateUuid() + + const notebook: Notebook = { + id, + type: 'notebook', + name: name ?? 'New Notebook', + description: '', + visibility: 'project', + favorite: false, + content: { + schema_version: '1.0', + cells: [], + }, + owner_id: profile.id, + project_id: project.id, + } + + notebooksSnap.addNotebook({ projectRef: project.ref, notebook }) + notebooksSnap.addNeedsSaving(notebook.id) + + router.push(`/project/${project.ref}/explorer/notebook/${notebook.id}`) + } + + return { createNotebook } +} diff --git a/apps/studio/components/layouts/ExplorerLayout/ExplorerLayout.tsx b/apps/studio/components/layouts/ExplorerLayout/ExplorerLayout.tsx index e8e4b916ea5..c3c47f4f3fb 100644 --- a/apps/studio/components/layouts/ExplorerLayout/ExplorerLayout.tsx +++ b/apps/studio/components/layouts/ExplorerLayout/ExplorerLayout.tsx @@ -12,6 +12,7 @@ import { type ExplorerResourceType } from './ExplorerLayout.constants' import { ExplorerNavChats } from './ExplorerNavChats' import { ExplorerNavHome } from './ExplorerNavHome' import { ExplorerNavNotebooks } from './ExplorerNavNotebooks' +import { useCreateNotebook } from '@/components/interfaces/Explorer/hooks' export interface ExplorerLayoutProps extends ComponentProps { children: ReactNode @@ -85,6 +86,8 @@ const HomeTabButton = () => { } const NewTabButton = () => { + const { createNotebook } = useCreateNotebook() + return ( @@ -103,7 +106,7 @@ const NewTabButton = () => { - + createNotebook()}> New notebook diff --git a/apps/studio/components/ui/EntityTypeIcon.tsx b/apps/studio/components/ui/EntityTypeIcon.tsx index 2dc05a6df58..f238dcab366 100644 --- a/apps/studio/components/ui/EntityTypeIcon.tsx +++ b/apps/studio/components/ui/EntityTypeIcon.tsx @@ -1,4 +1,4 @@ -import { Eye, GitBranch, ScrollText, Table2 } from 'lucide-react' +import { Eye, GitBranch, NotebookText, ScrollText, Table2 } from 'lucide-react' import { cn, SQL_ICON } from 'ui' import type { SqlSnippetSource } from '@/components/interfaces/SQLEditor/querySource' @@ -26,7 +26,7 @@ export const LogsSnippetIcon = ({ ) interface EntityTypeIconProps { - type: 'sql' | 'schema' | 'new' | 'r' | 'v' | 'm' | 'f' | 'p' + type: 'sql' | 'schema' | 'new' | 'r' | 'v' | 'm' | 'f' | 'p' | 'notebook' size?: number strokeWidth?: number isActive?: boolean @@ -103,6 +103,10 @@ export const EntityTypeIcon = ({ ) } + if (type === 'notebook') { + return + } + return (
    { + return +} + +NotebookPage.getLayout = (page) => ( + + {page} + +) + +export default NotebookPage diff --git a/apps/studio/routeTree.gen.ts b/apps/studio/routeTree.gen.ts index c134b2af421..93a2d78dc37 100644 --- a/apps/studio/routeTree.gen.ts +++ b/apps/studio/routeTree.gen.ts @@ -89,6 +89,7 @@ import { Route as ProjectRefObservabilityIndexRouteImport } from './routes/proje import { Route as ProjectRefLogsIndexRouteImport } from './routes/project/$ref/logs/index' import { Route as ProjectRefIntegrationsIndexRouteImport } from './routes/project/$ref/integrations/index' import { Route as ProjectRefFunctionsIndexRouteImport } from './routes/project/$ref/functions/index' +import { Route as ProjectRefExplorerIndexRouteImport } from './routes/project/$ref/explorer/index' import { Route as ProjectRefEditorIndexRouteImport } from './routes/project/$ref/editor/index' import { Route as ProjectRefBranchesIndexRouteImport } from './routes/project/$ref/branches/index' import { Route as ProjectRefApiIndexRouteImport } from './routes/project/$ref/api/index' @@ -228,6 +229,7 @@ import { Route as ProjectRefFunctionsFunctionSlugLogsRouteImport } from './route import { Route as ProjectRefFunctionsFunctionSlugInvocationsRouteImport } from './routes/project/$ref/functions/$functionSlug/invocations' import { Route as ProjectRefFunctionsFunctionSlugDetailsRouteImport } from './routes/project/$ref/functions/$functionSlug/details' import { Route as ProjectRefFunctionsFunctionSlugCodeRouteImport } from './routes/project/$ref/functions/$functionSlug/code' +import { Route as ProjectRefExplorerNotebookIdRouteImport } from './routes/project/$ref/explorer/notebook/$id' import { Route as ProjectRefDatabaseTriggersEventRouteImport } from './routes/project/$ref/database/triggers/event' import { Route as ProjectRefDatabaseTriggersDataRouteImport } from './routes/project/$ref/database/triggers/data' import { Route as ProjectRefDatabaseTablesIdRouteImport } from './routes/project/$ref/database/tables/$id' @@ -728,6 +730,11 @@ const ProjectRefFunctionsIndexRoute = path: '/', getParentRoute: () => ProjectRefFunctionsRoute, } as any) +const ProjectRefExplorerIndexRoute = ProjectRefExplorerIndexRouteImport.update({ + id: '/', + path: '/', + getParentRoute: () => ProjectRefExplorerRoute, +} as any) const ProjectRefEditorIndexRoute = ProjectRefEditorIndexRouteImport.update({ id: '/', path: '/', @@ -1509,6 +1516,12 @@ const ProjectRefFunctionsFunctionSlugCodeRoute = path: '/code', getParentRoute: () => ProjectRefFunctionsFunctionSlugRoute, } as any) +const ProjectRefExplorerNotebookIdRoute = + ProjectRefExplorerNotebookIdRouteImport.update({ + id: '/notebook/$id', + path: '/notebook/$id', + getParentRoute: () => ProjectRefExplorerRoute, + } as any) const ProjectRefDatabaseTriggersEventRoute = ProjectRefDatabaseTriggersEventRouteImport.update({ id: '/event', @@ -2099,7 +2112,7 @@ export interface FileRoutesByFullPath { '/project/$ref/branches': typeof ProjectRefBranchesRouteWithChildren '/project/$ref/database': typeof ProjectRefDatabaseRouteWithChildren '/project/$ref/editor': typeof ProjectRefEditorRouteWithChildren - '/project/$ref/explorer': typeof ProjectRefExplorerRoute + '/project/$ref/explorer': typeof ProjectRefExplorerRouteWithChildren '/project/$ref/functions': typeof ProjectRefFunctionsRouteWithChildren '/project/$ref/integrations': typeof ProjectRefIntegrationsRouteWithChildren '/project/$ref/logs': typeof ProjectRefLogsRouteWithChildren @@ -2224,6 +2237,7 @@ export interface FileRoutesByFullPath { '/project/$ref/api/': typeof ProjectRefApiIndexRoute '/project/$ref/branches/': typeof ProjectRefBranchesIndexRoute '/project/$ref/editor/': typeof ProjectRefEditorIndexRoute + '/project/$ref/explorer/': typeof ProjectRefExplorerIndexRoute '/project/$ref/functions/': typeof ProjectRefFunctionsIndexRoute '/project/$ref/integrations/': typeof ProjectRefIntegrationsIndexRoute '/project/$ref/logs/': typeof ProjectRefLogsIndexRoute @@ -2268,6 +2282,7 @@ export interface FileRoutesByFullPath { '/project/$ref/database/tables/$id': typeof ProjectRefDatabaseTablesIdRoute '/project/$ref/database/triggers/data': typeof ProjectRefDatabaseTriggersDataRoute '/project/$ref/database/triggers/event': typeof ProjectRefDatabaseTriggersEventRoute + '/project/$ref/explorer/notebook/$id': typeof ProjectRefExplorerNotebookIdRoute '/project/$ref/functions/$functionSlug/code': typeof ProjectRefFunctionsFunctionSlugCodeRoute '/project/$ref/functions/$functionSlug/details': typeof ProjectRefFunctionsFunctionSlugDetailsRoute '/project/$ref/functions/$functionSlug/invocations': typeof ProjectRefFunctionsFunctionSlugInvocationsRoute @@ -2403,7 +2418,6 @@ export interface FileRoutesByTo { '/project/$ref/advisors': typeof ProjectRefAdvisorsRouteWithChildren '/project/$ref/auth': typeof ProjectRefAuthRouteWithChildren '/project/$ref/database': typeof ProjectRefDatabaseRouteWithChildren - '/project/$ref/explorer': typeof ProjectRefExplorerRoute '/project/$ref/merge': typeof ProjectRefMergeRoute '/project/$ref/realtime': typeof ProjectRefRealtimeRouteWithChildren '/project/$ref/settings': typeof ProjectRefSettingsRouteWithChildren @@ -2520,6 +2534,7 @@ export interface FileRoutesByTo { '/project/$ref/api': typeof ProjectRefApiIndexRoute '/project/$ref/branches': typeof ProjectRefBranchesIndexRoute '/project/$ref/editor': typeof ProjectRefEditorIndexRoute + '/project/$ref/explorer': typeof ProjectRefExplorerIndexRoute '/project/$ref/functions': typeof ProjectRefFunctionsIndexRoute '/project/$ref/integrations': typeof ProjectRefIntegrationsIndexRoute '/project/$ref/logs': typeof ProjectRefLogsIndexRoute @@ -2564,6 +2579,7 @@ export interface FileRoutesByTo { '/project/$ref/database/tables/$id': typeof ProjectRefDatabaseTablesIdRoute '/project/$ref/database/triggers/data': typeof ProjectRefDatabaseTriggersDataRoute '/project/$ref/database/triggers/event': typeof ProjectRefDatabaseTriggersEventRoute + '/project/$ref/explorer/notebook/$id': typeof ProjectRefExplorerNotebookIdRoute '/project/$ref/functions/$functionSlug/code': typeof ProjectRefFunctionsFunctionSlugCodeRoute '/project/$ref/functions/$functionSlug/details': typeof ProjectRefFunctionsFunctionSlugDetailsRoute '/project/$ref/functions/$functionSlug/invocations': typeof ProjectRefFunctionsFunctionSlugInvocationsRoute @@ -2706,7 +2722,7 @@ export interface FileRoutesById { '/project/$ref/branches': typeof ProjectRefBranchesRouteWithChildren '/project/$ref/database': typeof ProjectRefDatabaseRouteWithChildren '/project/$ref/editor': typeof ProjectRefEditorRouteWithChildren - '/project/$ref/explorer': typeof ProjectRefExplorerRoute + '/project/$ref/explorer': typeof ProjectRefExplorerRouteWithChildren '/project/$ref/functions': typeof ProjectRefFunctionsRouteWithChildren '/project/$ref/integrations': typeof ProjectRefIntegrationsRouteWithChildren '/project/$ref/logs': typeof ProjectRefLogsRouteWithChildren @@ -2831,6 +2847,7 @@ export interface FileRoutesById { '/project/$ref/api/': typeof ProjectRefApiIndexRoute '/project/$ref/branches/': typeof ProjectRefBranchesIndexRoute '/project/$ref/editor/': typeof ProjectRefEditorIndexRoute + '/project/$ref/explorer/': typeof ProjectRefExplorerIndexRoute '/project/$ref/functions/': typeof ProjectRefFunctionsIndexRoute '/project/$ref/integrations/': typeof ProjectRefIntegrationsIndexRoute '/project/$ref/logs/': typeof ProjectRefLogsIndexRoute @@ -2875,6 +2892,7 @@ export interface FileRoutesById { '/project/$ref/database/tables/$id': typeof ProjectRefDatabaseTablesIdRoute '/project/$ref/database/triggers/data': typeof ProjectRefDatabaseTriggersDataRoute '/project/$ref/database/triggers/event': typeof ProjectRefDatabaseTriggersEventRoute + '/project/$ref/explorer/notebook/$id': typeof ProjectRefExplorerNotebookIdRoute '/project/$ref/functions/$functionSlug/code': typeof ProjectRefFunctionsFunctionSlugCodeRoute '/project/$ref/functions/$functionSlug/details': typeof ProjectRefFunctionsFunctionSlugDetailsRoute '/project/$ref/functions/$functionSlug/invocations': typeof ProjectRefFunctionsFunctionSlugInvocationsRoute @@ -3141,6 +3159,7 @@ export interface FileRouteTypes { | '/project/$ref/api/' | '/project/$ref/branches/' | '/project/$ref/editor/' + | '/project/$ref/explorer/' | '/project/$ref/functions/' | '/project/$ref/integrations/' | '/project/$ref/logs/' @@ -3185,6 +3204,7 @@ export interface FileRouteTypes { | '/project/$ref/database/tables/$id' | '/project/$ref/database/triggers/data' | '/project/$ref/database/triggers/event' + | '/project/$ref/explorer/notebook/$id' | '/project/$ref/functions/$functionSlug/code' | '/project/$ref/functions/$functionSlug/details' | '/project/$ref/functions/$functionSlug/invocations' @@ -3320,7 +3340,6 @@ export interface FileRouteTypes { | '/project/$ref/advisors' | '/project/$ref/auth' | '/project/$ref/database' - | '/project/$ref/explorer' | '/project/$ref/merge' | '/project/$ref/realtime' | '/project/$ref/settings' @@ -3437,6 +3456,7 @@ export interface FileRouteTypes { | '/project/$ref/api' | '/project/$ref/branches' | '/project/$ref/editor' + | '/project/$ref/explorer' | '/project/$ref/functions' | '/project/$ref/integrations' | '/project/$ref/logs' @@ -3481,6 +3501,7 @@ export interface FileRouteTypes { | '/project/$ref/database/tables/$id' | '/project/$ref/database/triggers/data' | '/project/$ref/database/triggers/event' + | '/project/$ref/explorer/notebook/$id' | '/project/$ref/functions/$functionSlug/code' | '/project/$ref/functions/$functionSlug/details' | '/project/$ref/functions/$functionSlug/invocations' @@ -3747,6 +3768,7 @@ export interface FileRouteTypes { | '/project/$ref/api/' | '/project/$ref/branches/' | '/project/$ref/editor/' + | '/project/$ref/explorer/' | '/project/$ref/functions/' | '/project/$ref/integrations/' | '/project/$ref/logs/' @@ -3791,6 +3813,7 @@ export interface FileRouteTypes { | '/project/$ref/database/tables/$id' | '/project/$ref/database/triggers/data' | '/project/$ref/database/triggers/event' + | '/project/$ref/explorer/notebook/$id' | '/project/$ref/functions/$functionSlug/code' | '/project/$ref/functions/$functionSlug/details' | '/project/$ref/functions/$functionSlug/invocations' @@ -4558,6 +4581,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ProjectRefFunctionsIndexRouteImport parentRoute: typeof ProjectRefFunctionsRoute } + '/project/$ref/explorer/': { + id: '/project/$ref/explorer/' + path: '/' + fullPath: '/project/$ref/explorer/' + preLoaderRoute: typeof ProjectRefExplorerIndexRouteImport + parentRoute: typeof ProjectRefExplorerRoute + } '/project/$ref/editor/': { id: '/project/$ref/editor/' path: '/' @@ -5531,6 +5561,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof ProjectRefFunctionsFunctionSlugCodeRouteImport parentRoute: typeof ProjectRefFunctionsFunctionSlugRoute } + '/project/$ref/explorer/notebook/$id': { + id: '/project/$ref/explorer/notebook/$id' + path: '/notebook/$id' + fullPath: '/project/$ref/explorer/notebook/$id' + preLoaderRoute: typeof ProjectRefExplorerNotebookIdRouteImport + parentRoute: typeof ProjectRefExplorerRoute + } '/project/$ref/database/triggers/event': { id: '/project/$ref/database/triggers/event' path: '/event' @@ -6477,6 +6514,19 @@ const ProjectRefEditorRouteChildren: ProjectRefEditorRouteChildren = { const ProjectRefEditorRouteWithChildren = ProjectRefEditorRoute._addFileChildren(ProjectRefEditorRouteChildren) +interface ProjectRefExplorerRouteChildren { + ProjectRefExplorerIndexRoute: typeof ProjectRefExplorerIndexRoute + ProjectRefExplorerNotebookIdRoute: typeof ProjectRefExplorerNotebookIdRoute +} + +const ProjectRefExplorerRouteChildren: ProjectRefExplorerRouteChildren = { + ProjectRefExplorerIndexRoute: ProjectRefExplorerIndexRoute, + ProjectRefExplorerNotebookIdRoute: ProjectRefExplorerNotebookIdRoute, +} + +const ProjectRefExplorerRouteWithChildren = + ProjectRefExplorerRoute._addFileChildren(ProjectRefExplorerRouteChildren) + interface ProjectRefFunctionsFunctionSlugRouteChildren { ProjectRefFunctionsFunctionSlugCodeRoute: typeof ProjectRefFunctionsFunctionSlugCodeRoute ProjectRefFunctionsFunctionSlugDetailsRoute: typeof ProjectRefFunctionsFunctionSlugDetailsRoute @@ -6756,7 +6806,7 @@ interface ProjectRefRouteChildren { ProjectRefBranchesRoute: typeof ProjectRefBranchesRouteWithChildren ProjectRefDatabaseRoute: typeof ProjectRefDatabaseRouteWithChildren ProjectRefEditorRoute: typeof ProjectRefEditorRouteWithChildren - ProjectRefExplorerRoute: typeof ProjectRefExplorerRoute + ProjectRefExplorerRoute: typeof ProjectRefExplorerRouteWithChildren ProjectRefFunctionsRoute: typeof ProjectRefFunctionsRouteWithChildren ProjectRefIntegrationsRoute: typeof ProjectRefIntegrationsRouteWithChildren ProjectRefLogsRoute: typeof ProjectRefLogsRouteWithChildren @@ -6776,7 +6826,7 @@ const ProjectRefRouteChildren: ProjectRefRouteChildren = { ProjectRefBranchesRoute: ProjectRefBranchesRouteWithChildren, ProjectRefDatabaseRoute: ProjectRefDatabaseRouteWithChildren, ProjectRefEditorRoute: ProjectRefEditorRouteWithChildren, - ProjectRefExplorerRoute: ProjectRefExplorerRoute, + ProjectRefExplorerRoute: ProjectRefExplorerRouteWithChildren, ProjectRefFunctionsRoute: ProjectRefFunctionsRouteWithChildren, ProjectRefIntegrationsRoute: ProjectRefIntegrationsRouteWithChildren, ProjectRefLogsRoute: ProjectRefLogsRouteWithChildren, diff --git a/apps/studio/routes/project/$ref/explorer.tsx b/apps/studio/routes/project/$ref/explorer.tsx index d31f51f8179..96a78bdcee6 100644 --- a/apps/studio/routes/project/$ref/explorer.tsx +++ b/apps/studio/routes/project/$ref/explorer.tsx @@ -1,16 +1,15 @@ -import { createFileRoute } from '@tanstack/react-router' +import { createFileRoute, Outlet } from '@tanstack/react-router' -import { ExplorerHome } from '@/components/interfaces/Explorer/ExplorerHome' import { ExplorerLayout } from '@/components/layouts/ExplorerLayout/ExplorerLayout' export const Route = createFileRoute('/project/$ref/explorer')({ - component: ProjectExplorerRoute, + component: ExplorerShell, }) -function ProjectExplorerRoute() { +function ExplorerShell() { return ( - + ) } diff --git a/apps/studio/routes/project/$ref/explorer/index.tsx b/apps/studio/routes/project/$ref/explorer/index.tsx new file mode 100644 index 00000000000..c77bdd40f67 --- /dev/null +++ b/apps/studio/routes/project/$ref/explorer/index.tsx @@ -0,0 +1,11 @@ +import { createFileRoute } from '@tanstack/react-router' + +import { ExplorerHome } from '@/components/interfaces/Explorer/ExplorerHome' + +export const Route = createFileRoute('/project/$ref/explorer/')({ + component: ProjectExplorerIndexRoute, +}) + +function ProjectExplorerIndexRoute() { + return +} diff --git a/apps/studio/routes/project/$ref/explorer/notebook/$id.tsx b/apps/studio/routes/project/$ref/explorer/notebook/$id.tsx new file mode 100644 index 00000000000..54c476a94ad --- /dev/null +++ b/apps/studio/routes/project/$ref/explorer/notebook/$id.tsx @@ -0,0 +1,11 @@ +import { createFileRoute } from '@tanstack/react-router' + +import NotebookPage from '@/pages/project/[ref]/explorer/notebook/[id]' + +export const Route = createFileRoute('/project/$ref/explorer/notebook/$id')({ + component: ProjectExplorerNotebookRoute, +}) + +function ProjectExplorerNotebookRoute() { + return +} diff --git a/apps/studio/state/notebooks/notebook-session-state.ts b/apps/studio/state/notebooks/notebook-session-state.ts new file mode 100644 index 00000000000..ed760aecd43 --- /dev/null +++ b/apps/studio/state/notebooks/notebook-session-state.ts @@ -0,0 +1,9 @@ +/** + * Ephemeral, per-session notebook state that is NOT persisted: query cell + * results and the row limit. Kept separate from the notebook content store + * (which deals with persistence) because none of this is saved β€” it lives + * only for the current editing session, keyed by cell id rather than + * notebook id since a single notebook can have many independent query cells. + * + * [Joshen] Will be fleshed out in subsequent PRs + */ diff --git a/apps/studio/state/notebooks/notebooks-state.test.ts b/apps/studio/state/notebooks/notebooks-state.test.ts new file mode 100644 index 00000000000..6c0de761ebf --- /dev/null +++ b/apps/studio/state/notebooks/notebooks-state.test.ts @@ -0,0 +1,79 @@ +import { beforeEach, describe, expect, it } from 'vitest' + +import { notebooksState } from './notebooks-state' +import type { Notebook } from './types' + +function makeNotebook(id: string, overrides: Partial = {}): Notebook { + return { + id, + type: 'notebook', + name: 'My Notebook', + description: '', + visibility: 'project', + favorite: false, + owner_id: 7, + project_id: 42, + content: { schema_version: '1.0', cells: [] }, + ...overrides, + } +} + +describe('notebooksState', () => { + beforeEach(() => { + // notebooksState is a module-level singleton, so reset the state these tests touch + for (const id of Object.keys(notebooksState.notebooks)) { + delete notebooksState.notebooks[id] + } + notebooksState.needsSaving.clear() + }) + + it('addNotebook marks a locally-created notebook as new', () => { + notebooksState.addNotebook({ projectRef: 'ref', notebook: makeNotebook('notebook-1') }) + + expect(notebooksState.notebooks['notebook-1'].status).toBe('new') + }) + + it('setNotebook marks a notebook not yet in the store as saved', () => { + notebooksState.setNotebook({ projectRef: 'ref', notebook: makeNotebook('notebook-1') }) + + expect(notebooksState.notebooks['notebook-1'].status).toBe('saved') + }) + + it('editing a loaded (saved) notebook transitions it to unsaved and queues it for saving', () => { + notebooksState.setNotebook({ projectRef: 'ref', notebook: makeNotebook('notebook-1') }) + + notebooksState.updateCells({ + id: 'notebook-1', + cells: [{ type: 'markdown', content: 'hello' }], + }) + + expect(notebooksState.notebooks['notebook-1'].status).toBe('unsaved') + expect(notebooksState.needsSaving.get('notebook-1')).toBe(false) + }) + + it('editing a notebook that has never been saved keeps it as new', () => { + notebooksState.addNotebook({ projectRef: 'ref', notebook: makeNotebook('notebook-1') }) + + notebooksState.updateCells({ + id: 'notebook-1', + cells: [{ type: 'markdown', content: 'hello' }], + }) + + expect(notebooksState.notebooks['notebook-1'].status).toBe('new') + }) + + it('setNotebook does not downgrade an already-loaded notebook back to saved after edits', () => { + notebooksState.setNotebook({ projectRef: 'ref', notebook: makeNotebook('notebook-1') }) + notebooksState.updateCells({ + id: 'notebook-1', + cells: [{ type: 'markdown', content: 'hello' }], + }) + expect(notebooksState.notebooks['notebook-1'].status).toBe('unsaved') + + // Re-fetching/merging content for the same notebook (e.g. a second setNotebook + // call) must not reset its status back to 'saved' while edits are pending. + notebooksState.setNotebook({ projectRef: 'ref', notebook: makeNotebook('notebook-1') }) + + expect(notebooksState.notebooks['notebook-1'].status).toBe('unsaved') + }) +}) diff --git a/apps/studio/state/notebooks/notebooks-state.ts b/apps/studio/state/notebooks/notebooks-state.ts new file mode 100644 index 00000000000..4cca4f9e95e --- /dev/null +++ b/apps/studio/state/notebooks/notebooks-state.ts @@ -0,0 +1,110 @@ +import { useMemo } from 'react' +import { proxy, snapshot, useSnapshot } from 'valtio' +import { proxyMap } from 'valtio/utils' + +import type { Notebook, NotebookCell, StateNotebook } from './types' +import type { SnippetStatus } from '@/data/content/snippet-status' + +// [Joshen] Deliberately copied from sql-editor-lifecycle cause we might deprecate +// that in favor of notebooks in the long run +function statusOnEdit(status: SnippetStatus): SnippetStatus { + return status === 'saved' ? 'unsaved' : status +} + +export const notebooksState = proxy({ + notebooks: {} as Record, + needsSaving: proxyMap([]), + + /** + * Load notebook into the Valtio store. No-ops if already present. + */ + addNotebook: ({ projectRef, notebook }: { projectRef: string; notebook: Notebook }) => { + if (notebooksState.notebooks[notebook.id]) return + notebooksState.notebooks[notebook.id] = { projectRef, notebook, status: 'new' } + }, + + /** + * Load notebook content into the store. Notebooks fetched from the list + * endpoint don't have `content` loaded (to keep that response small), so + * content is fetched separately and merged in here on demand. + * + * Unlike `addNotebook` (for locally-created notebooks, status 'new'), a + * notebook reaching this function was already persisted, so it's inserted + * with status 'saved'. + */ + setNotebook: ({ projectRef, notebook }: { projectRef: string; notebook: Notebook }) => { + const stateNotebook = notebooksState.notebooks[notebook.id] + if (stateNotebook) { + if (!stateNotebook.notebook.content) { + stateNotebook.notebook.content = notebook.content + } + } else { + notebooksState.notebooks[notebook.id] = { projectRef, notebook, status: 'saved' } + } + }, + + /** + * Rename follows its own async save directly at the call site rather than going + * through needsSaving/the debounced scheduler. + */ + renameNotebook: ({ id, name }: { id: string; name: string }) => { + const stateNotebook = notebooksState.notebooks[id] + if (stateNotebook) { + stateNotebook.notebook.name = name + } + }, + + /** + * Remove notebook from the store, and optionally remove it from the sync + * saving queue. Also clears any cached query-cell results for this notebook + * from the ephemeral session store. + */ + removeNotebook: ({ id, skipSave = false }: { id: string; skipSave?: boolean }) => { + const { [id]: notebook, ...otherNotebooks } = notebooksState.notebooks + notebooksState.notebooks = otherNotebooks + if (!skipSave) notebooksState.needsSaving.delete(id) + + // TODO: clear notebookSessionState once it exists + }, + + /** + * Replace a notebook's full cell array and queue it for sync saving. The + * single entry point for every cell-level change β€” adding, removing, + * reordering, or editing a cell's content all compute the next `cells` array + * at the call site and pass it here, since the notebook is saved as one JSON + * document rather than per-cell. + */ + updateCells: ({ + id, + cells, + skipSave, + }: { + id: string + cells: NotebookCell[] + skipSave?: boolean + }) => { + const stateNotebook = notebooksState.notebooks[id] + if (!stateNotebook?.notebook.content) return + stateNotebook.notebook.content.cells = cells + stateNotebook.status = statusOnEdit(stateNotebook.status) + if (!skipSave) notebooksState.needsSaving.set(id, false) + }, + + addNeedsSaving: (id: string) => notebooksState.needsSaving.set(id, true), +}) + +export const getNotebooksStateSnapshot = () => snapshot(notebooksState) + +export const useNotebooksStateSnapshot = (options?: Parameters[1]) => + useSnapshot(notebooksState, options) + +export const useNotebooks = (projectRef: string) => { + const snapshot = useNotebooksStateSnapshot() + return useMemo( + () => + Object.values(snapshot.notebooks) + .filter((x) => x.projectRef === projectRef) + .map((x) => x.notebook), + [projectRef, snapshot.notebooks] + ) +} diff --git a/apps/studio/state/notebooks/types.ts b/apps/studio/state/notebooks/types.ts new file mode 100644 index 00000000000..69ee18a1ea1 --- /dev/null +++ b/apps/studio/state/notebooks/types.ts @@ -0,0 +1,34 @@ +import { SnippetStatus } from '@/data/content/snippet-status' + +/** Start and end follows ISO8601 convention */ +type AbsoluteTimeRange = { start: string; end: string } +type RelativeTimeRange = { unit: 'm' | 'h' | 'd' | 'w' | 'M' | 'y'; amount: number } +type TimeRange = AbsoluteTimeRange | RelativeTimeRange + +type DatabaseQueryCell = { type: 'sql'; sql: string } +type LogsQueryCell = { type: 'logs'; sql: string; range: TimeRange } +type MarkdownCell = { type: 'markdown'; content: string } +export type NotebookCell = DatabaseQueryCell | LogsQueryCell | MarkdownCell + +interface NotebookContent { + schema_version: string + cells: NotebookCell[] +} + +export interface Notebook { + id: string + type: 'notebook' + name: string + description?: string + visibility: 'project' + favorite: boolean + owner_id: number + project_id: number + content?: NotebookContent // Undefined until loaded +} + +export interface StateNotebook { + projectRef: string + notebook: Notebook + status: SnippetStatus +} diff --git a/apps/studio/state/tabs.tsx b/apps/studio/state/tabs.tsx index dc8ba7e00fe..62a02e5c279 100644 --- a/apps/studio/state/tabs.tsx +++ b/apps/studio/state/tabs.tsx @@ -22,7 +22,7 @@ export const editorEntityTypes = { explorer: ['notebook'], } -export type TabType = ENTITY_TYPE | 'sql' +export type TabType = ENTITY_TYPE | 'sql' | 'notebook' type CreateTabIdParams = { r: { id: number } @@ -31,6 +31,7 @@ type CreateTabIdParams = { f: { id: number } p: { id: number } sql: { id: string } + notebook: { id: string } schema: { schema: string } view: never function: never @@ -46,6 +47,7 @@ export interface Tab { name?: string tableId?: number sqlId?: string + notebookId?: string scrollTop?: number /** * For SQL tabs, which backend the snippet queries (`'database'` | `'logs'`), @@ -519,6 +521,9 @@ export function createTabsState(projectRef: string) { case 'sql': router.push(`/project/${router.query.ref}/sql`) break + case 'notebook': + router.push(`/project/${router.query.ref}/explorer`) + break case 'r': case 'v': case 'm': @@ -638,6 +643,8 @@ export function createTabId(type: T, params: CreateTabIdParam return `p-${(params as CreateTabIdParams['p']).id}` case 'sql': return `sql-${(params as CreateTabIdParams['sql']).id}` + case 'notebook': + return `notebook-${(params as CreateTabIdParams['sql']).id}` default: return '' } From a71636f5a056d23c1bf378c266678bd5141c7deb Mon Sep 17 00:00:00 2001 From: shaziya <99940835+shaziyabandukia@users.noreply.github.com> Date: Thu, 6 Aug 2026 22:33:47 -0700 Subject: [PATCH 66/83] feat(marketing): add hint text below Go page form labels (#48824) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Small feature addition to `packages/marketing` (Go page form schema/renderer), plus a copy/layout change on `/go/select-2026/partner-day`. Supersedes #48821 (closed), which is folded in here. ## What is the current behavior? Go page form fields only support a `description` string rendered *below the input*. There's no way to put a short note directly under a field's label, above the input β€” so the Partner Day RSVP's "attending" question crammed "(your Partner Day invite covers it)" into the question text itself. ## What is the new behavior? - Adds an optional `hint` string to the Go page form field schema (`packages/marketing/src/go/schemas.ts`), rendered as small italic text directly beneath the label, above the input (`packages/marketing/src/forms/MarketingForm.tsx`). - Updates the Partner Day RSVP's "attending" field to use it: the question is now "Would you like to attend Supabase Select on October 2?" with "Your Partner Day invite covers it" as a separate grey/italic hint line underneath. - No other fields set `hint`, so this is backward compatible β€” verified `vip-experience`'s identical select field (no `hint` set) renders unchanged. ## Additional context - Verified locally in the browser: the new hint renders correctly on Partner Day, and other `_go` pages with form fields are unaffected. - `prettier --check` and `tsc --noEmit` both pass on the changed files. ## Summary by CodeRabbit * **New Features** * Added optional hint text beneath form field labels, displayed in smaller italic text. * Updated the Select RSVP question to clearly distinguish the attendance prompt from invite coverage details. --- apps/www/_go/events/select-2026/partner-day.tsx | 4 ++-- packages/marketing/src/forms/MarketingForm.tsx | 5 ++++- packages/marketing/src/go/schemas.ts | 2 ++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/www/_go/events/select-2026/partner-day.tsx b/apps/www/_go/events/select-2026/partner-day.tsx index 89c27b8d4ee..772d17ec2ae 100644 --- a/apps/www/_go/events/select-2026/partner-day.tsx +++ b/apps/www/_go/events/select-2026/partner-day.tsx @@ -153,8 +153,8 @@ const page: GoPageInput = { { type: 'select', name: 'attending', - label: - 'Are you attending Supabase Select on October 2? (your Partner Day invite covers it)', + label: 'Would you like to attend Supabase Select on October 2?', + hint: 'Your Partner Day invite covers it', placeholder: 'Select an option', required: true, options: [ diff --git a/packages/marketing/src/forms/MarketingForm.tsx b/packages/marketing/src/forms/MarketingForm.tsx index 48b8a983673..6cb731d0404 100644 --- a/packages/marketing/src/forms/MarketingForm.tsx +++ b/packages/marketing/src/forms/MarketingForm.tsx @@ -169,7 +169,10 @@ function Field({ return (
    - +
    + + {field.hint &&

    {field.hint}

    } +
    {field.description && (

    {field.description}

    diff --git a/packages/marketing/src/go/schemas.ts b/packages/marketing/src/go/schemas.ts index 79fcba510a0..25471a4f9da 100644 --- a/packages/marketing/src/go/schemas.ts +++ b/packages/marketing/src/go/schemas.ts @@ -134,6 +134,8 @@ export const showWhenSchema = z const formFieldBase = z.object({ name: z.string().min(1), label: z.string().min(1), + /** Small italicized note rendered directly beneath the label, above the input. */ + hint: z.string().optional(), /** Helper text rendered beneath the input. */ description: z.string().optional(), placeholder: z.string().optional(), From a515f3d81fd918812a19aea0ae42780014ef3cce Mon Sep 17 00:00:00 2001 From: Monica Khoury <99693443+monicakh@users.noreply.github.com> Date: Fri, 7 Aug 2026 09:29:37 +0300 Subject: [PATCH 67/83] fix(ui): remove extra spacing before custom reports section (#48796) Fixes FE-4107. ## What is the current behavior? The Observability sidebar had unnecessary spacing below the Product navigation. - Extra whitespace below the last Product menu item (`Realtime`). ## What is the new behavior? Removes the global flex gap and applies spacing explicitly to the Custom Reports section. - Product navigation ends cleanly at the divider. - Spacing before the Custom Reports section is intentional and consistent. ## Summary by CodeRabbit * **Style** * Improved spacing and alignment in the observability menu. * Added vertical separation around the custom reports section for a cleaner layout. --- .../layouts/ObservabilityLayout/ObservabilityMenu.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/studio/components/layouts/ObservabilityLayout/ObservabilityMenu.tsx b/apps/studio/components/layouts/ObservabilityLayout/ObservabilityMenu.tsx index 626b8f0c725..c9b9650ece0 100644 --- a/apps/studio/components/layouts/ObservabilityLayout/ObservabilityMenu.tsx +++ b/apps/studio/components/layouts/ObservabilityLayout/ObservabilityMenu.tsx @@ -103,7 +103,7 @@ export const ObservabilityMenu = () => {
    ) : ( -
    +
    ({ @@ -115,7 +115,7 @@ export const ObservabilityMenu = () => { {IS_PLATFORM && ( <>
    -
    +
    Date: Fri, 7 Aug 2026 02:40:18 -0400 Subject: [PATCH 68/83] feat: notebook content schema (#48813) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Related to FE-4109. ## Summary - **API codegen workaround**: Platform API's `notebook` content type hasn't shipped to the OpenAPI spec yet, so `pnpm api:codegen` can't be run. Locally widened `ContentBase.type` to include `'notebook'` (marked with TODO for removal once spec publishes). - **Notebook schema & type system**: Introduced Zod schemas mirroring RFC-defined notebook shape (`schema_version: 1, cells: Cell[]`). Maintains wire/domain boundary (cell `sql` β†’ `unchecked_sql` branded for security). Agent-writable schema for `create_notebook` tool omits cell IDs (backend-generated); future update operations will require them. All TypeScript types are `z.infer`'d from schemas (no hand-written parallel interfaces). - **IsoDateTimeString moved**: Extracted ISO datetime validator from `querySource.ts` to `lib/iso-datetime.ts` (data layer shouldn't import from components layer). Needed by notebook `time_range` fields. ## Test plan - [x] Unit tests: `notebook-schema.test.ts` (9 tests), `iso-datetime.test.ts` (3 tests), `querySource.test.ts` updated and passing (26 tests) - [x] Typecheck: no new errors - [x] Prettier: formatting clean ## Summary by CodeRabbit - **New Features** - Added support for validating and processing notebook content, including markdown, database, log cells, time ranges, and chart configurations. - Added compatibility for notebook content types in content handling. - Added reliable ISO date-time validation for notebook data and related features. - **Tests** - Expanded coverage for valid and invalid notebook structures, cell requirements, time ranges, chart settings, and date-time values. Co-authored-by: Joshen Lim --- .../interfaces/SQLEditor/querySource.test.ts | 18 +- .../interfaces/SQLEditor/querySource.ts | 17 +- apps/studio/data/content/content-query.ts | 7 +- .../content/notebooks/notebook-schema.test.ts | 161 ++++++++++++++++++ .../data/content/notebooks/notebook-schema.ts | 121 +++++++++++++ apps/studio/lib/iso-datetime.test.ts | 19 +++ apps/studio/lib/iso-datetime.ts | 19 +++ apps/studio/types/userContent.ts | 11 ++ 8 files changed, 339 insertions(+), 34 deletions(-) create mode 100644 apps/studio/data/content/notebooks/notebook-schema.test.ts create mode 100644 apps/studio/data/content/notebooks/notebook-schema.ts create mode 100644 apps/studio/lib/iso-datetime.test.ts create mode 100644 apps/studio/lib/iso-datetime.ts diff --git a/apps/studio/components/interfaces/SQLEditor/querySource.test.ts b/apps/studio/components/interfaces/SQLEditor/querySource.test.ts index d0e4659d0da..6c68f56e2db 100644 --- a/apps/studio/components/interfaces/SQLEditor/querySource.test.ts +++ b/apps/studio/components/interfaces/SQLEditor/querySource.test.ts @@ -6,7 +6,6 @@ import { DEFAULT_LOG_DATE_RANGE, getSnippetSource, isLogsSource, - isoDateTimeString, logDateRangesEqual, logDateRangeToDatePickerValue, resolveLogRunRange, @@ -21,6 +20,7 @@ import { import { generateHelpersFromInput } from '@/components/interfaces/Settings/Logs/Logs.datePickerHelpers' import type { DatePickerValue } from '@/components/interfaces/Settings/Logs/Logs.DatePickers' import type { DatetimeHelper } from '@/components/interfaces/Settings/Logs/Logs.types' +import { isoDateTimeString } from '@/lib/iso-datetime' /** Build the `DatePickerValue` the Logs picker submits when a helper is selected. */ const valueFromHelper = (helper: DatetimeHelper): DatePickerValue => ({ @@ -92,22 +92,6 @@ describe('querySource.ts:resolveSnippetSource', () => { }) }) -describe('querySource.ts:isoDateTimeString', () => { - it('accepts a valid ISO datetime', () => { - const raw = '2025-01-01T12:00:00.000Z' - expect(isoDateTimeString(raw)).toBe(raw) - }) - - it('rejects an empty string', () => { - expect(isoDateTimeString('')).toBeNull() - }) - - it('rejects junk', () => { - expect(isoDateTimeString('not-a-date')).toBeNull() - expect(isoDateTimeString('2025-13-45T99:99:99Z')).toBeNull() - }) -}) - describe('querySource.ts:datePickerValueToLogDateRange', () => { it('parses every static preset into a relative range', () => { const cases: Array<[string, { amount: number; unit: 'minute' | 'hour' | 'day' }]> = [ diff --git a/apps/studio/components/interfaces/SQLEditor/querySource.ts b/apps/studio/components/interfaces/SQLEditor/querySource.ts index 32e84bd78a3..4a1174f8375 100644 --- a/apps/studio/components/interfaces/SQLEditor/querySource.ts +++ b/apps/studio/components/interfaces/SQLEditor/querySource.ts @@ -5,6 +5,7 @@ import { generateDynamicHelper } from '@/components/interfaces/Settings/Logs/Log import type { DatePickerValue } from '@/components/interfaces/Settings/Logs/Logs.DatePickers' import type { ResolvedLogDateRange } from '@/components/interfaces/Settings/Logs/logsDateRange' import type { Snippet } from '@/data/content/sql-folders-query' +import { isoDateTimeString, type IsoDateTimeString } from '@/lib/iso-datetime' /** * Domain view of where a snippet's query runs. Derived from the content TYPE: @@ -60,22 +61,6 @@ export function resolveSnippetSource( return snippet !== undefined ? getSnippetSource(snippet) : parseSqlSnippetSource(sourceParam) } -/** - * An ISO-8601 datetime proven valid at construction via a dayjs parse. Absolute - * log ranges carry these instead of raw strings so an unvalidated datetime can - * never reach execution. - */ -export type IsoDateTimeString = string & { readonly __isoDateTimeBrand: unique symbol } - -/** - * Validate a raw string as an ISO datetime, returning the branded value or null. - * The sole construction site for `IsoDateTimeString` outside `now`. - */ -export function isoDateTimeString(raw: string): IsoDateTimeString | null { - if (!raw) return null - return dayjs(raw).isValid() ? (raw as IsoDateTimeString) : null -} - /** `now` as a branded ISO datetime β€” `toISOString()` is always valid ISO-8601. */ function nowIsoDateTime(): IsoDateTimeString { return dayjs().toISOString() as IsoDateTimeString diff --git a/apps/studio/data/content/content-query.ts b/apps/studio/data/content/content-query.ts index e65c862acbd..65ad09dc4ba 100644 --- a/apps/studio/data/content/content-query.ts +++ b/apps/studio/data/content/content-query.ts @@ -6,7 +6,12 @@ import { contentKeys } from './keys' import { get, handleError } from '@/data/fetchers' import type { Dashboards, LogSqlSnippets, SqlSnippets, UseCustomQueryOptions } from '@/types' -export type ContentBase = components['schemas']['GetUserContentResponse']['data'][number] +// TODO β€” Charis 2026-08-06 +// Temporary widening until we have API support for notebooks +export type ContentBase = Omit< + components['schemas']['GetUserContentResponse']['data'][number], + 'type' +> & { type: components['schemas']['GetUserContentResponse']['data'][number]['type'] | 'notebook' } export type Content = Omit & ( diff --git a/apps/studio/data/content/notebooks/notebook-schema.test.ts b/apps/studio/data/content/notebooks/notebook-schema.test.ts new file mode 100644 index 00000000000..8f81fff51cf --- /dev/null +++ b/apps/studio/data/content/notebooks/notebook-schema.test.ts @@ -0,0 +1,161 @@ +import { untrustedSql } from '@supabase/pg-meta' +import { describe, expect, it } from 'vitest' + +import { agentNotebookSchema, notebookDomainSchema, notebookSchema } from './notebook-schema' +import { untrustedLogSql } from '@/data/logs/safe-analytics-sql' + +const FULL_NOTEBOOK = { + schema_version: 1 as const, + cells: [ + { + _tag: 'markdown_cell' as const, + id: 'a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11', + text: '# Signup funnel', + }, + { + _tag: 'database_cell' as const, + id: 'b1ffcd88-8d1a-4de7-aa5c-5aa8ac270b22', + sql: 'select * from auth.users limit 100', + row_limit: 100, + }, + { + _tag: 'log_cell' as const, + id: 'c2001199-1e2b-4ef8-bb6d-6bb9bd380a33', + sql: "select timestamp, event_message from edge_logs where source = 'edge_logs' limit 10", + time_range: { + _tag: 'relative_time_range' as const, + unit: 'hour' as const, + amount: 1, + }, + }, + ], +} + +describe('notebookSchema', () => { + it('accepts a full three-cell notebook', () => { + expect(notebookSchema.safeParse(FULL_NOTEBOOK).success).toBe(true) + }) + + it('rejects an unknown cell _tag', () => { + const result = notebookSchema.safeParse({ + schema_version: 1, + cells: [{ _tag: 'chart_cell', id: '1', text: 'hi' }], + }) + + expect(result.success).toBe(false) + }) + + it('rejects a database_cell missing row_limit', () => { + const result = notebookSchema.safeParse({ + schema_version: 1, + cells: [{ _tag: 'database_cell', id: '1', sql: 'select 1' }], + }) + + expect(result.success).toBe(false) + }) + + it('rejects a non-ISO absolute_time_range bound', () => { + const result = notebookSchema.safeParse({ + schema_version: 1, + cells: [ + { + _tag: 'log_cell', + id: '1', + sql: 'select 1', + time_range: { + _tag: 'absolute_time_range', + start: 'not-a-real-date', + end: '2024-01-02T00:00:00.000Z', + }, + }, + ], + }) + + expect(result.success).toBe(false) + }) + + it('accepts an absolute_time_range with ISO8601 bounds', () => { + const result = notebookSchema.safeParse({ + schema_version: 1, + cells: [ + { + _tag: 'log_cell', + id: '1', + sql: 'select 1', + time_range: { + _tag: 'absolute_time_range', + start: '2024-01-01T00:00:00.000Z', + end: '2024-01-02T00:00:00.000Z', + }, + }, + ], + }) + + expect(result.success).toBe(true) + }) + + it('rejects an invalid relative_time_range unit', () => { + const result = notebookSchema.safeParse({ + schema_version: 1, + cells: [ + { + _tag: 'log_cell', + id: '1', + sql: 'select 1', + time_range: { _tag: 'relative_time_range', unit: 'fortnight', amount: 1 }, + }, + ], + }) + + expect(result.success).toBe(false) + }) +}) + +describe('agentNotebookSchema', () => { + it('accepts cells without ids', () => { + const result = agentNotebookSchema.safeParse({ + schema_version: 1, + cells: [ + { _tag: 'markdown_cell', text: 'hello' }, + { _tag: 'database_cell', sql: 'select 1', row_limit: 100 }, + ], + }) + + expect(result.success).toBe(true) + }) + + it('rejects cells that carry an agent-supplied id', () => { + const result = agentNotebookSchema.safeParse({ + schema_version: 1, + cells: [{ _tag: 'markdown_cell', id: 'should-not-be-here', text: 'hello' }], + }) + + expect(result.success).toBe(false) + }) +}) + +describe('notebookDomainSchema', () => { + it('brands database_cell and log_cell sql as unchecked_sql, leaving markdown_cell untouched', () => { + const result = notebookDomainSchema.safeParse(FULL_NOTEBOOK) + + expect(result.success).toBe(true) + if (!result.success) return + + const [markdownCell, databaseCell, logCell] = result.data.cells + expect(markdownCell).toEqual(FULL_NOTEBOOK.cells[0]) + expect(databaseCell).toEqual({ + _tag: 'database_cell', + id: FULL_NOTEBOOK.cells[1].id, + row_limit: 100, + unchecked_sql: untrustedSql('select * from auth.users limit 100'), + }) + expect(databaseCell).not.toHaveProperty('sql') + expect(logCell).toMatchObject({ + _tag: 'log_cell', + unchecked_sql: untrustedLogSql( + "select timestamp, event_message from edge_logs where source = 'edge_logs' limit 10" + ), + }) + expect(logCell).not.toHaveProperty('sql') + }) +}) diff --git a/apps/studio/data/content/notebooks/notebook-schema.ts b/apps/studio/data/content/notebooks/notebook-schema.ts new file mode 100644 index 00000000000..e5ca0c796da --- /dev/null +++ b/apps/studio/data/content/notebooks/notebook-schema.ts @@ -0,0 +1,121 @@ +import { untrustedSql } from '@supabase/pg-meta' +import * as z from 'zod' + +import { untrustedLogSql } from '@/data/logs/safe-analytics-sql' +import { isoDateTimeString } from '@/lib/iso-datetime' + +const isoDateTimeSchema = z.string().transform((raw, ctx) => { + const parsed = isoDateTimeString(raw) + if (parsed === null) { + ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'must be a valid ISO-8601 datetime' }) + return z.NEVER + } + return parsed +}) + +const chartConfigSchema = z.object({ + x_column: z.string(), + y_column: z.string(), + cumulative: z.boolean(), +}) + +const absoluteTimeRangeSchema = z.object({ + _tag: z.literal('absolute_time_range'), + start: isoDateTimeSchema, + end: isoDateTimeSchema, +}) + +const relativeTimeRangeSchema = z.object({ + _tag: z.literal('relative_time_range'), + unit: z.enum(['minute', 'hour', 'day', 'week', 'month', 'year']), + amount: z.number(), +}) + +const timeRangeSchema = z.discriminatedUnion('_tag', [ + absoluteTimeRangeSchema, + relativeTimeRangeSchema, +]) + +const markdownCellSchema = z.object({ + _tag: z.literal('markdown_cell'), + id: z.string(), + text: z.string(), +}) + +const databaseCellSchema = z.object({ + _tag: z.literal('database_cell'), + id: z.string(), + sql: z.string(), + row_limit: z.number(), + chart: chartConfigSchema.optional(), +}) + +const logCellSchema = z.object({ + _tag: z.literal('log_cell'), + id: z.string(), + sql: z.string(), + time_range: timeRangeSchema, + chart: chartConfigSchema.optional(), +}) + +const cellSchema = z.discriminatedUnion('_tag', [ + markdownCellSchema, + databaseCellSchema, + logCellSchema, +]) + +// The wire shape: every notebook fetched from the API has this shape, with backend- +// generated cell `id`s and plaintext `sql`. +export const notebookSchema = z.object({ + schema_version: z.literal(1), + cells: z.array(cellSchema), +}) + +export type NotebookWire = z.infer +export type CellWire = z.infer + +// Agents have restrictions on writing IDs to preserve guarantees about ID +// uniqueness. +export const agentCellSchema = z.discriminatedUnion('_tag', [ + markdownCellSchema.omit({ id: true }).strict(), + databaseCellSchema.omit({ id: true }).strict(), + logCellSchema.omit({ id: true }).strict(), +]) + +export const agentNotebookSchema = z.object({ + schema_version: z.literal(1), + cells: z.array(agentCellSchema), +}) + +export type AgentNotebook = z.infer +export type AgentCell = z.infer + +// The domain shape: parses the same wire cell (`cellSchema`) and transforms `sql` into a +// branded `unchecked_sql`. +const cellDomainSchema = cellSchema.transform((cell) => { + switch (cell._tag) { + case 'markdown_cell': + return cell + case 'database_cell': { + const { sql, ...rest } = cell + return { ...rest, unchecked_sql: untrustedSql(sql) } + } + case 'log_cell': { + const { sql, ...rest } = cell + return { ...rest, unchecked_sql: untrustedLogSql(sql) } + } + } +}) + +export const notebookDomainSchema = z.object({ + schema_version: z.literal(1), + cells: z.array(cellDomainSchema), +}) + +export type NotebookContent = z.infer +export type Cell = z.infer +export type MarkdownCell = Extract +export type DatabaseCell = Extract +export type LogCell = Extract +export type TimeRange = z.infer +export type ChartConfig = z.infer diff --git a/apps/studio/lib/iso-datetime.test.ts b/apps/studio/lib/iso-datetime.test.ts new file mode 100644 index 00000000000..332782ad9f0 --- /dev/null +++ b/apps/studio/lib/iso-datetime.test.ts @@ -0,0 +1,19 @@ +import { describe, expect, it } from 'vitest' + +import { isoDateTimeString } from './iso-datetime' + +describe('isoDateTimeString', () => { + it('accepts a valid ISO datetime', () => { + const raw = '2025-01-01T12:00:00.000Z' + expect(isoDateTimeString(raw)).toBe(raw) + }) + + it('rejects an empty string', () => { + expect(isoDateTimeString('')).toBeNull() + }) + + it('rejects junk', () => { + expect(isoDateTimeString('not-a-date')).toBeNull() + expect(isoDateTimeString('2025-13-45T99:99:99Z')).toBeNull() + }) +}) diff --git a/apps/studio/lib/iso-datetime.ts b/apps/studio/lib/iso-datetime.ts new file mode 100644 index 00000000000..9153213804d --- /dev/null +++ b/apps/studio/lib/iso-datetime.ts @@ -0,0 +1,19 @@ +import dayjs from 'dayjs' + +/** + * An ISO-8601 datetime proven valid at construction via a dayjs parse. Callers that need to + * carry a datetime through the type system without re-validating it (e.g. absolute log + * ranges, notebook time ranges) use this instead of a raw string, so an unvalidated value + * can never reach execution. + */ +export type IsoDateTimeString = string & { readonly __isoDateTimeBrand: unique symbol } + +/** + * Validate a raw string as an ISO datetime, returning the branded value or null. The sole + * construction site for `IsoDateTimeString` besides a direct `toISOString()` call (which is + * always valid ISO-8601 by construction). + */ +export function isoDateTimeString(raw: string): IsoDateTimeString | null { + if (!raw) return null + return dayjs(raw).isValid() ? (raw as IsoDateTimeString) : null +} diff --git a/apps/studio/types/userContent.ts b/apps/studio/types/userContent.ts index 0910808bb82..e1206a77739 100644 --- a/apps/studio/types/userContent.ts +++ b/apps/studio/types/userContent.ts @@ -1,8 +1,19 @@ import type { UntrustedSqlFragment } from '@supabase/pg-meta' import { ChartConfig } from '@/components/interfaces/SQLEditor/UtilityPanel/ChartConfig' +import type * as NotebookSchema from '@/data/content/notebooks/notebook-schema' import type { UntrustedLogSqlFragment } from '@/data/logs/safe-analytics-sql' +export namespace Notebooks { + export type Content = NotebookSchema.NotebookContent + export type Cell = NotebookSchema.Cell + export type MarkdownCell = NotebookSchema.MarkdownCell + export type DatabaseCell = NotebookSchema.DatabaseCell + export type LogCell = NotebookSchema.LogCell + export type TimeRange = NotebookSchema.TimeRange + export type ChartConfig = NotebookSchema.ChartConfig +} + export interface UserContent< T = Dashboards.Content | SqlSnippets.Content | LogSqlSnippets.Content, > { From 9ab06ef9c314e12256b736394745b94fdd89ac72 Mon Sep 17 00:00:00 2001 From: Danny White <3104761+dnywh@users.noreply.github.com> Date: Fri, 7 Aug 2026 17:24:15 +1000 Subject: [PATCH 69/83] fix(ui): restore normal alert text wrapping (#48840) ## What kind of change does this PR introduce? UI bug fix. ## What is the current behavior? `AlertDescription` applies balanced or pretty text wrapping by default. Alert and Admonition copy can redistribute words across lines and leave unnatural ragged edges. ## What is the new behavior? `AlertDescription` uses normal text wrapping by default. Consumers can still opt into balanced wrapping through `className`. | Before | After | | --- | --- | | 34098 | CleanShot 2026-08-07 at 17 18
52@2x | # To test Use the Docs and Design System preview deployments: - [Self-hosted Functions](https://supabase.com/docs/guides/self-hosting/self-hosted-functions#using-an-env-file-recommended): check the caution under **Using an env file (recommended)**. The text should fill each line naturally. - [Configure Reverse Proxy and HTTPS](https://supabase.com/docs/guides/self-hosting/self-hosted-proxy-https#set-up-https): check the three titled notes under **Set up HTTPS**, then the caution under **Self-signed certificates (development only)**. - [Design System Admonition examples](https://supabase.com/design-system/docs/fragments/admonition): scan the description-only, titled, and rich-content examples at desktop and a narrow width. Spacing should be unchanged. ## Summary by CodeRabbit * **Bug Fixes** * Improved alert description text wrapping for more consistent display across screen sizes. * Preserved support for custom text-balancing styles. * **Tests** * Added coverage verifying alert description attributes, default styling, and consumer-supplied text-balancing classes. --- packages/ui/src/components/shadcn/ui/alert.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui/src/components/shadcn/ui/alert.tsx b/packages/ui/src/components/shadcn/ui/alert.tsx index e1590d9857e..88d13863f32 100644 --- a/packages/ui/src/components/shadcn/ui/alert.tsx +++ b/packages/ui/src/components/shadcn/ui/alert.tsx @@ -65,7 +65,7 @@ const AlertDescription = React.forwardRef Date: Fri, 7 Aug 2026 17:26:55 +1000 Subject: [PATCH 70/83] fix(ui): opaque default button hover fills (#48837) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What kind of change does this PR introduce? Bug fix for translucent default Button (and related control) fills that show through stacked content on hover. Resolves [DEPR-636](https://linear.app/supabase/issue/DEPR-636/report-snippet-cell-expand-button-becomes-transparent-on-hover). ## What is the current behavior? Default `Button` hover uses `bg-selection`, and dark-mode rest uses `bg-muted`. After the colour system migration those legacy aliases point at translucent `--accent` / `--muted`, so hover punches through whatever sits behind the button (SQL Editor / Reports cell expand, sticky columns, skip-to-content, etc.). | Before: Light | Before: Dark | | --- | --- | | CleanShot 2026-08-03 at 09 12 26@2x | 21257 | ## What is the new behavior? Default Button, Select, MultiSelect, and the CommandMenu trigger use opaque elevation tokens (`bg-background dark:bg-card`, `hover:bg-popover`). SkipToContent drops its opaque-plate workaround. No global `compat.css` alias remaps. | After: Light | After: Dark | | --- | --- | | CleanShot 2026-08-07 at 16 09
59@2x | CleanShot 2026-08-07 at 16 08
53@2x | ## Additional context - Overlay tokens (`--muted` / `--accent` / `--tertiary`) stay intentional for washes on solid surfaces. Controls that can sit over content should use solid elevation tokens (`card` / `popover`) instead. - Same root cause as the workarounds in #47996 and #48314. - The β€œView full cell content” control lives in SQL Editor results / Report `QueryBlock` (`ResultCell`), not Table Editor. It only renders when the value is an object/array, contains a newline, or is longer than 60 characters, and it stays `opacity-0` until you hover the cell. ## To test Short path in Studio (light and dark): 1. **Expand button over cell text (clearest repro)** – SQL Editor, run: ```sql select repeat('x', 80) as name; ``` Hover the result cell. The expand control should appear over the text; hover the button itself and confirm the fill is solid (no `x`s showing through). Same control is what Report snippets use. 2. **Any default Button** – Top nav **Connect** (or any bordered default button). Hover: solid fill. 3. **Select** – Project picker or a Settings form select. Trigger hover / open fill stays opaque. 4. **Command menu trigger** – Hover the header search / Cmd-K control; match default Button. 5. **Skip to content** – Tab once on Studio. Skip link hover stays solid over the page behind it. 6. **Editor tabs regression** – SQL / Table Editor tab strip should still look grey in light mode (not washed white). --- packages/ui-patterns/src/CommandMenu/api/CommandMenu.tsx | 4 ++-- .../ui-patterns/src/SkipToContent/SkipToContent.test.tsx | 2 +- packages/ui-patterns/src/SkipToContent/SkipToContent.tsx | 5 ++--- packages/ui-patterns/src/multi-select/multi-select.tsx | 6 +++--- packages/ui/src/components/Button/Button.tsx | 4 ++-- packages/ui/src/components/shadcn/ui/select.tsx | 4 ++-- 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/packages/ui-patterns/src/CommandMenu/api/CommandMenu.tsx b/packages/ui-patterns/src/CommandMenu/api/CommandMenu.tsx index 2c4f75fbf26..4ab24a24862 100644 --- a/packages/ui-patterns/src/CommandMenu/api/CommandMenu.tsx +++ b/packages/ui-patterns/src/CommandMenu/api/CommandMenu.tsx @@ -188,9 +188,9 @@ function CommandMenuTriggerInput({ 'grow md:min-w-44 xl:min-w-56 h-[30px] rounded-md', 'pl-1.5 md:pl-2 pr-1', 'flex items-center justify-between', - // Match Button default (Connect): selection hover fill, stronger border. + // Match Button default (Connect): opaque popover hover fill, stronger border. 'bg-transparent text-foreground-lighter border border-strong', - 'hover:bg-selection hover:border-stronger', + 'hover:bg-popover hover:border-stronger', 'focus-ring', 'transition-colors', className diff --git a/packages/ui-patterns/src/SkipToContent/SkipToContent.test.tsx b/packages/ui-patterns/src/SkipToContent/SkipToContent.test.tsx index 357de928b64..9c5082795d5 100644 --- a/packages/ui-patterns/src/SkipToContent/SkipToContent.test.tsx +++ b/packages/ui-patterns/src/SkipToContent/SkipToContent.test.tsx @@ -26,7 +26,6 @@ describe('SkipToContent', () => { const wrapper = container.firstElementChild as HTMLElement expect(wrapper.className).toContain('-translate-y-full') expect(wrapper.className).toContain('focus-within:translate-y-[10px]') - expect(wrapper.className).toContain('bg-background') expect(wrapper.className).toContain('w-fit') expect(wrapper.className).toContain('left-[10px]') }) @@ -35,6 +34,7 @@ describe('SkipToContent', () => { render() const link = screen.getByRole('link', { name: 'Skip to content' }) + expect(link.className).toContain('hover:bg-popover') expect(link.className).not.toContain('bg-surface-300') expect(link.className).not.toContain('hover:bg-secondary') }) diff --git a/packages/ui-patterns/src/SkipToContent/SkipToContent.tsx b/packages/ui-patterns/src/SkipToContent/SkipToContent.tsx index 7f8bdc2555d..c07d20eb2a6 100644 --- a/packages/ui-patterns/src/SkipToContent/SkipToContent.tsx +++ b/packages/ui-patterns/src/SkipToContent/SkipToContent.tsx @@ -19,9 +19,8 @@ function SkipToContent({ href, children = 'Skip to content', className }: SkipTo return (
    span]:truncate text-left', // [kemal] This is to prevent double lines rendering when a string is particularly long. SelectTriggerVariants({ size }), From f8206a5f8182d2c2278d62854851ffba1a56cdd9 Mon Sep 17 00:00:00 2001 From: "kemal.earth" <606977+kemaldotearth@users.noreply.github.com> Date: Fri, 7 Aug 2026 09:51:36 +0100 Subject: [PATCH 71/83] fix(studio): model scoped pat permissions as OR-of-AND alternatives - smaller version (#48809) ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Breaking down #48635 ## Summary by CodeRabbit - **New Features** - Scoped access tokens now support alternative permission requirements, enabling more precise access for APIs and tools. - Added clearer role and resource access evaluation, including project-specific permissions and partial read access. - Access reviews now identify unavailable or excessive permissions and group inaccessible resources for easier resolution. - **Bug Fixes** - Improved handling of legacy, incomplete, or invalid permission data with safer fallback behavior. - Corrected access filtering for MCP tools and API capabilities. - **Documentation** - Updated access-review wording to clarify the relationship between scopes and related MCP tools. --------- Co-authored-by: Wen Bo Xie Co-authored-by: Claude Opus 5 (1M context) --- .../MCPToolScopeMappings.ts | 102 ++++--- .../buildAPIPermissionScopeMap.test.ts | 285 +++++++++++++++++- .../buildAPIPermissionScopeMap.ts | 137 +++++---- .../AccessTokens/AccessToken.fixtures.ts | 4 +- .../AccessToken.permissions.test.ts | 281 ++++++++++++++--- .../AccessTokens/AccessToken.permissions.ts | 35 ++- .../AccessTokens/AccessToken.roles.test.ts | 128 +++++++- .../Account/AccessTokens/AccessToken.roles.ts | 88 +++++- .../AccessTokens/Scoped/Form/RiskMarker.tsx | 6 +- .../permission-scope-map-query.ts | 129 ++++++-- apps/studio/types/base.ts | 6 +- 11 files changed, 999 insertions(+), 202 deletions(-) diff --git a/apps/studio/app/api/scoped-access-token-permissions/MCPToolScopeMappings.ts b/apps/studio/app/api/scoped-access-token-permissions/MCPToolScopeMappings.ts index 20932566e42..7e2b8da4823 100644 --- a/apps/studio/app/api/scoped-access-token-permissions/MCPToolScopeMappings.ts +++ b/apps/studio/app/api/scoped-access-token-permissions/MCPToolScopeMappings.ts @@ -4,36 +4,53 @@ import { McpMap } from '@/data/scoped-access-tokens/permission-scope-map-query' const { OAuthScope } = constants -// Manually extracted from platform mcp controller code -const MCPToolOAuthScopeMapping = { - apply_migration: [OAuthScope.DATABASE_WRITE], - create_branch: [OAuthScope.ENVIRONMENT_WRITE], - create_project: [OAuthScope.PROJECTS_WRITE], - delete_branch: [OAuthScope.ENVIRONMENT_WRITE], - deploy_edge_function: [OAuthScope.EDGE_FUNCTIONS_WRITE], - execute_sql: [OAuthScope.DATABASE_READ, OAuthScope.DATABASE_WRITE], - generate_typescript_types: [OAuthScope.DATABASE_READ], - get_security_advisors: [OAuthScope.DATABASE_READ], - get_performance_advisors: [OAuthScope.DATABASE_READ], - get_edge_function: [OAuthScope.EDGE_FUNCTIONS_READ], - get_logs: [OAuthScope.ANALYTICS_READ], - get_organization: [OAuthScope.ORGANIZATIONS_READ], - get_project: [OAuthScope.PROJECTS_READ], - get_project_url: [OAuthScope.PROJECTS_READ], - get_publishable_keys: [OAuthScope.SECRETS_READ], - get_storage_config: [OAuthScope.STORAGE_READ], - list_branches: [OAuthScope.ENVIRONMENT_READ], - list_edge_functions: [OAuthScope.EDGE_FUNCTIONS_READ], - list_migrations: [OAuthScope.DATABASE_READ], - list_organizations: [OAuthScope.ORGANIZATIONS_READ], - list_projects: [OAuthScope.PROJECTS_READ], - list_storage_buckets: [OAuthScope.STORAGE_READ], - merge_branch: [OAuthScope.ENVIRONMENT_WRITE], - pause_project: [OAuthScope.PROJECTS_WRITE], - rebase_branch: [OAuthScope.ENVIRONMENT_WRITE], - reset_branch: [OAuthScope.ENVIRONMENT_WRITE], - restore_project: [OAuthScope.PROJECTS_WRITE], - update_storage_config: [OAuthScope.STORAGE_WRITE], +type OAuthScopeValue = (typeof OAuthScope)[keyof typeof OAuthScope] + +// Manually extracted from platform mcp controller code. Each tool maps to alternative OAuth-scope +// groups with the same semantics as ScopeGroupAlternatives: a token can call the tool when it +// holds ALL scopes of at least ONE group (OR between groups, AND within a group). Most tools +// assert a single scope; execute_sql asserts database:read OR database:write depending on the +// session's read_only mode (mcp.controller.ts), so it carries two alternatives. +const MCPToolOAuthScopeMapping: Record = { + apply_migration: [[OAuthScope.DATABASE_WRITE]], + // Computes a local confirmation hash without calling the platform β€” no scope gates it. + confirm_cost: [[]], + create_branch: [[OAuthScope.ENVIRONMENT_WRITE]], + create_project: [[OAuthScope.PROJECTS_WRITE]], + delete_branch: [[OAuthScope.ENVIRONMENT_WRITE]], + deploy_edge_function: [[OAuthScope.EDGE_FUNCTIONS_WRITE]], + execute_sql: [[OAuthScope.DATABASE_READ], [OAuthScope.DATABASE_WRITE]], + generate_typescript_types: [[OAuthScope.DATABASE_READ]], + get_advisors: [[OAuthScope.DATABASE_READ]], + // Calls getOrganization + listProjects to price a project, so it needs both read scopes. + // (The type=branch path returns a constant with no platform call; gating on the project + // path's scopes fails closed for branch-only pricing, which is fine for advisory display.) + get_cost: [[OAuthScope.ORGANIZATIONS_READ, OAuthScope.PROJECTS_READ]], + get_edge_function: [[OAuthScope.EDGE_FUNCTIONS_READ]], + get_logs: [[OAuthScope.ANALYTICS_READ]], + get_organization: [[OAuthScope.ORGANIZATIONS_READ]], + get_project: [[OAuthScope.PROJECTS_READ]], + get_project_url: [[OAuthScope.PROJECTS_READ]], + get_publishable_keys: [[OAuthScope.SECRETS_READ]], + get_storage_config: [[OAuthScope.STORAGE_READ]], + list_branches: [[OAuthScope.ENVIRONMENT_READ]], + list_edge_functions: [[OAuthScope.EDGE_FUNCTIONS_READ]], + // Runs through executeSql with read_only forced true. + list_extensions: [[OAuthScope.DATABASE_READ]], + list_migrations: [[OAuthScope.DATABASE_READ]], + list_organizations: [[OAuthScope.ORGANIZATIONS_READ]], + list_projects: [[OAuthScope.PROJECTS_READ]], + list_storage_buckets: [[OAuthScope.STORAGE_READ]], + // Runs through executeSql with read_only forced true. + list_tables: [[OAuthScope.DATABASE_READ]], + merge_branch: [[OAuthScope.ENVIRONMENT_WRITE]], + pause_project: [[OAuthScope.PROJECTS_WRITE]], + rebase_branch: [[OAuthScope.ENVIRONMENT_WRITE]], + reset_branch: [[OAuthScope.ENVIRONMENT_WRITE]], + restore_project: [[OAuthScope.PROJECTS_WRITE]], + // Queries the public content API β€” no scope gates it. + search_docs: [[]], + update_storage_config: [[OAuthScope.STORAGE_WRITE]], } type ExtractIds = { @@ -157,17 +174,30 @@ export const legacyOauthScopeToFgaPermissionMap: Record = { } /* - * Build a map of MCP tools/FGA permissions by mapping their OAuth Scopes to the FGA permissions: + * Build a map of MCP tools/FGA permissions by expanding each OAuth-scope group to the FGA + * permissions it implies: * { - * apply_migration: ["project_admin_write", ...] + * execute_sql: [["snippets_read", "database_read", ...], ["project_admin_write", ...]] * } + * Groups are expanded independently, preserving the OR-of-AND structure. A group is an AND, so it + * is kept only when every one of its scopes maps to at least one FGA permission β€” a partial + * expansion would weaken the requirement (e.g. [ORGANIZATIONS_READ, PROJECTS_READ] shrinking to + * projects_read alone). A group with any unmapped scope is dropped whole, so the tool stays gated + * rather than becoming ungated; an explicitly empty group ([]) is the deliberate ungated marker + * and is vacuously kept. * The code is duplicated from platform until we find a better way to share those mappings */ +export const expandOAuthScopeGroups = ( + oAuthScopeGroups: string[][], + fgaPermissionMap: Record +): string[][] => + oAuthScopeGroups + .filter((group) => group.every((oAuthScope) => (fgaPermissionMap[oAuthScope] ?? []).length > 0)) + .map((group) => group.flatMap((oAuthScope) => fgaPermissionMap[oAuthScope] ?? [])) + export const MCPToolScopeMappings = Object.entries(MCPToolOAuthScopeMapping).reduce( - (acc, [mcpTool, oAuthScopes]) => { - acc[mcpTool] = oAuthScopes.flatMap( - (oAuthScope) => legacyOauthScopeToFgaPermissionMap[oAuthScope] - ) + (acc, [mcpTool, oAuthScopeGroups]) => { + acc[mcpTool] = expandOAuthScopeGroups(oAuthScopeGroups, legacyOauthScopeToFgaPermissionMap) return acc }, {} as McpMap diff --git a/apps/studio/app/api/scoped-access-token-permissions/buildAPIPermissionScopeMap.test.ts b/apps/studio/app/api/scoped-access-token-permissions/buildAPIPermissionScopeMap.test.ts index 367d6b3917f..d59a83bbd63 100644 --- a/apps/studio/app/api/scoped-access-token-permissions/buildAPIPermissionScopeMap.test.ts +++ b/apps/studio/app/api/scoped-access-token-permissions/buildAPIPermissionScopeMap.test.ts @@ -1,8 +1,16 @@ +import { http, HttpResponse } from 'msw' import { describe, expect, test } from 'vitest' -import { getEndpointsAndMCPToolsForAPI } from './buildAPIPermissionScopeMap' +import { + addMCPToolsToScopes, + buildAPIPermissionScopeMap, + getScopesAndEndpointsForAPI, +} from './buildAPIPermissionScopeMap' +import { expandOAuthScopeGroups, MCPToolScopeMappings } from './MCPToolScopeMappings' +import { type ScopeMap } from '@/data/scoped-access-tokens/permission-scope-map-query' +import { mswServer } from '@/tests/lib/msw' -describe('getEndpointsAndMCPToolsForAPI', () => { +describe('getScopesAndEndpointsForAPI', () => { const openAPISpecs = { paths: { '/v1/projects/{ref}/database/migrations': { @@ -18,36 +26,285 @@ describe('getEndpointsAndMCPToolsForAPI', () => { 'x-fga-permissions': [['database_migrations_write']], }, }, + // Alternative groups: development OR production (real shape of the branching endpoints) + '/v1/projects/{ref}/branches': { + get: { + 'x-fga-permissions': [['branching_development_read'], ['branching_production_read']], + }, + }, + // No annotation -> not part of the map + '/v1/projects/available-regions': { + get: {}, + }, }, } - const mcp_tools = { - list_migrations: ['database_migrations_read'], - apply_migration: ['database_migrations_write', 'database_write'], - } - - test('returns an object with permissions as keys and endpoints and mcp_tools as values', () => { - const permissionScopeMap = getEndpointsAndMCPToolsForAPI(openAPISpecs, mcp_tools) + test('indexes scopes and endpoints, preserving alternative permission groups', () => { + const permissionScopeMap = getScopesAndEndpointsForAPI(openAPISpecs) expect(permissionScopeMap).toEqual({ scopes: { database_migrations_read: { endpoints: ['GET /v1/projects/{ref}/database/migrations'], - mcp_tools: ['list_migrations'], + mcp_tools: [], }, database_migrations_write: { endpoints: [ 'POST /v1/projects/{ref}/database/migrations', 'PATCH /v1/projects/{ref}/database/migrations/{version}', ], - mcp_tools: ['apply_migration'], + mcp_tools: [], + }, + branching_development_read: { + endpoints: ['GET /v1/projects/{ref}/branches'], + mcp_tools: [], + }, + branching_production_read: { + endpoints: ['GET /v1/projects/{ref}/branches'], + mcp_tools: [], }, }, endpoints: { - 'GET /v1/projects/{ref}/database/migrations': ['database_migrations_read'], - 'POST /v1/projects/{ref}/database/migrations': ['database_migrations_write'], - 'PATCH /v1/projects/{ref}/database/migrations/{version}': ['database_migrations_write'], + 'GET /v1/projects/{ref}/database/migrations': [['database_migrations_read']], + 'POST /v1/projects/{ref}/database/migrations': [['database_migrations_write']], + 'PATCH /v1/projects/{ref}/database/migrations/{version}': [['database_migrations_write']], + 'GET /v1/projects/{ref}/branches': [ + ['branching_development_read'], + ['branching_production_read'], + ], }, }) }) + + // An endpoint recorded with zero groups would read as ungated and be reported callable by every + // token, so unusable annotations must drop the endpoint instead. + test('drops endpoints with empty or unusable permission groups rather than marking them ungated', () => { + const { endpoints, scopes } = getScopesAndEndpointsForAPI({ + paths: { + '/v1/empty-groups': { get: { 'x-fga-permissions': [[], undefined] } }, + '/v1/unannotated': { get: {} }, + }, + }) + + expect(endpoints).toEqual({}) + expect(scopes).toEqual({}) + }) +}) + +describe('addMCPToolsToScopes', () => { + test('assigns tools to every scope in any of their groups, without duplicates', () => { + const scopes: ScopeMap = { + database_migrations_read: { + endpoints: ['GET /v1/projects/{ref}/database/migrations'], + mcp_tools: [], + }, + database_migrations_write: { endpoints: [], mcp_tools: ['apply_migration'] }, + } + + addMCPToolsToScopes(scopes, { + list_migrations: [['database_migrations_read']], + apply_migration: [['database_migrations_write'], ['database_migrations_read']], + }) + + expect(scopes).toEqual({ + database_migrations_read: { + endpoints: ['GET /v1/projects/{ref}/database/migrations'], + mcp_tools: ['list_migrations', 'apply_migration'], + }, + database_migrations_write: { endpoints: [], mcp_tools: ['apply_migration'] }, + }) + }) + + test('initializes scopes that only MCP tools reference', () => { + const scopes: ScopeMap = {} + + addMCPToolsToScopes(scopes, { update_storage_config: [['storage_config_write']] }) + + expect(scopes.storage_config_write).toEqual({ + endpoints: [], + mcp_tools: ['update_storage_config'], + }) + }) + + test('leaves ungated tools out of the scope index', () => { + const scopes: ScopeMap = {} + + addMCPToolsToScopes(scopes, { search_docs: [[]] }) + + expect(scopes).toEqual({}) + }) +}) + +describe('MCPToolScopeMappings', () => { + // Platform gates execute_sql on database:read OR database:write depending on the MCP session's + // read_only mode (mcp.controller.ts), so the derived requirement must be two alternatives β€” a + // single conjunctive group would hide the tool from read-only tokens the platform accepts. + test('execute_sql derives the database:read bundle OR the database:write bundle', () => { + expect(MCPToolScopeMappings.execute_sql).toHaveLength(2) + const [readGroup, writeGroup] = MCPToolScopeMappings.execute_sql + expect(readGroup).toContain('database_read') + expect(readGroup).not.toContain('database_write') + expect(writeGroup).toContain('database_write') + }) + + test('single-scope tools derive a single conjunctive group', () => { + expect(MCPToolScopeMappings.apply_migration).toHaveLength(1) + expect(MCPToolScopeMappings.apply_migration[0]).toContain('database_write') + }) + + test('tools without a platform scope gate stay ungated ([[]]), not disabled ([])', () => { + expect(MCPToolScopeMappings.confirm_cost).toEqual([[]]) + expect(MCPToolScopeMappings.search_docs).toEqual([[]]) + }) + + // A group is an AND: expanding only its mapped scopes would weaken the requirement (e.g. + // [organizations:read, projects:read] shrinking to projects_read alone) and report the tool + // enabled for an incomplete grant. + test('a group with any unmapped scope is dropped whole, not partially expanded', () => { + const map = { 'projects:read': ['projects_read'] } + + expect(expandOAuthScopeGroups([['organizations:read', 'projects:read']], map)).toEqual([]) + // Other alternatives and the ungated marker survive the drop untouched. + expect(expandOAuthScopeGroups([['organizations:read'], ['projects:read'], []], map)).toEqual([ + ['projects_read'], + [], + ]) + }) + + // Guards the OAuth-scope -> legacy-map join: a scope key drifting out of the legacy map must + // not inject undefined into the payload (flatMap doesn't flatten it) or silently disable a + // gated tool by dropping all its groups. + test('every derived group is non-empty strings, and only the ungated tools lack scopes', () => { + const ungated = ['confirm_cost', 'search_docs'] + for (const [tool, groups] of Object.entries(MCPToolScopeMappings)) { + expect(groups.length, `${tool} lost all its alternatives`).toBeGreaterThan(0) + for (const group of groups) { + if (!ungated.includes(tool)) + expect(group.length, `${tool} has an empty group`).toBeGreaterThan(0) + for (const scope of group) + expect(typeof scope, `${tool} leaked a non-string scope`).toBe('string') + } + } + }) + + test('get_cost requires both organization and project read bundles together', () => { + expect(MCPToolScopeMappings.get_cost).toHaveLength(1) + expect(MCPToolScopeMappings.get_cost[0]).toEqual( + expect.arrayContaining(['organizations_read', 'projects_read']) + ) + }) + + // Drift guard: the exact tool registry of @supabase/mcp-server-supabase@0.8.1, the version the + // platform pins. When the platform bumps the MCP server, this list (and the mapping) must be + // re-derived from the controller's assertMcpOAuthScope calls. + test('covers exactly the tool registry of the deployed MCP server', () => { + expect(Object.keys(MCPToolScopeMappings).sort()).toEqual([ + 'apply_migration', + 'confirm_cost', + 'create_branch', + 'create_project', + 'delete_branch', + 'deploy_edge_function', + 'execute_sql', + 'generate_typescript_types', + 'get_advisors', + 'get_cost', + 'get_edge_function', + 'get_logs', + 'get_organization', + 'get_project', + 'get_project_url', + 'get_publishable_keys', + 'get_storage_config', + 'list_branches', + 'list_edge_functions', + 'list_extensions', + 'list_migrations', + 'list_organizations', + 'list_projects', + 'list_storage_buckets', + 'list_tables', + 'merge_branch', + 'pause_project', + 'rebase_branch', + 'reset_branch', + 'restore_project', + 'search_docs', + 'update_storage_config', + ]) + }) +}) + +describe('buildAPIPermissionScopeMap', () => { + // vitestSetup starts mswServer with `onUnhandledRequest: 'error'` and resets handlers between + // tests, so mocking here keeps that guard instead of replacing global fetch. + const stubSpecs = (v1: Record, v2: Record) => { + mswServer.use( + http.get('*/api/v1-json', () => HttpResponse.json(v1)), + http.get('*/api/v2-json', () => HttpResponse.json(v2)) + ) + } + + test('merges both specs, attaching each MCP tool to a shared scope exactly once', async () => { + stubSpecs( + { + paths: { + '/v1/projects/{ref}/database/query': { + post: { 'x-fga-permissions': [['database_read']] }, + }, + }, + }, + { + paths: { + '/v2/projects/{ref}/inspect': { get: { 'x-fga-permissions': [['database_read']] } }, + }, + } + ) + + const map = await buildAPIPermissionScopeMap() + + // Both specs contribute an endpoint to the same scope, and neither is duplicated + expect(map.scopes.database_read.endpoints).toEqual([ + 'POST /v1/projects/{ref}/database/query', + 'GET /v2/projects/{ref}/inspect', + ]) + // The tools were attached after the merge, so a scope shared by both specs lists each once + const tools = map.scopes.database_read.mcp_tools + expect(new Set(tools).size).toBe(tools.length) + expect(tools).toContain('execute_sql') + }) + + // Path items may legally carry non-operation members; the specs are fetched live, so a benign + // upstream swagger change must not start 500ing this route. + test('tolerates path items with non-method OpenAPI members', async () => { + stubSpecs( + { + paths: { + '/v1/projects/{ref}': { + parameters: [{ name: 'ref', in: 'path', required: true }], + summary: 'Project detail', + get: { 'x-fga-permissions': [['project_admin_read']] }, + }, + }, + }, + { paths: {} } + ) + + const map = await buildAPIPermissionScopeMap() + + expect(map.endpoints['GET /v1/projects/{ref}']).toEqual([['project_admin_read']]) + expect(Object.keys(map.endpoints)).toHaveLength(1) + }) + + test('returns a copy of the tool mapping so callers cannot corrupt the module singleton', async () => { + stubSpecs({ paths: {} }, { paths: {} }) + + const map = await buildAPIPermissionScopeMap() + expect(map.mcp_tools).toEqual(MCPToolScopeMappings) + expect(map.mcp_tools).not.toBe(MCPToolScopeMappings) + + const before = structuredClone(MCPToolScopeMappings.execute_sql) + map.mcp_tools.execute_sql.push(['tampered']) + expect(MCPToolScopeMappings.execute_sql).toEqual(before) + }) }) diff --git a/apps/studio/app/api/scoped-access-token-permissions/buildAPIPermissionScopeMap.ts b/apps/studio/app/api/scoped-access-token-permissions/buildAPIPermissionScopeMap.ts index 57c7ffc70f0..b6b568e6022 100644 --- a/apps/studio/app/api/scoped-access-token-permissions/buildAPIPermissionScopeMap.ts +++ b/apps/studio/app/api/scoped-access-token-permissions/buildAPIPermissionScopeMap.ts @@ -1,4 +1,4 @@ -import lodash from 'lodash' +import { cloneDeep } from 'lodash' import z from 'zod' // We don't have an OpenAPI that describes mcp tools security requirements so @@ -12,96 +12,107 @@ import { } from '@/data/scoped-access-tokens/permission-scope-map-query' import { InternalServerError } from '@/lib/api/apiHelpers' -// Default lodash merge does not correctly merge arrays so this custom merger fixes it -function mergeArrays(objValue: unknown, srcValue: unknown) { - if (Array.isArray(objValue) && Array.isArray(srcValue)) { - return objValue.concat(srcValue) - } -} - /* * Builds the permissions/endpoint mapping by fetching the OpenAPI specs for our v1 and v2 APIs. + * The two specs are indexed together rather than merged afterwards: every v1 path starts with + * `/v1/` and every v2 path with `/v2/`, so they can't collide, and one pass de-duplicates a + * scope's endpoint list by construction. * @throws InternalServerError when it can't fetch the OpenAPI specs */ export const buildAPIPermissionScopeMap = async (): Promise => { - // Get the permissions map for the API v1 - const apiV1SpecsJSON = await fetchAPIPermissionScope('v1') + const [apiV1SpecsJSON, apiV2SpecsJSON] = await Promise.all([ + fetchAPIPermissionScope('v1'), + fetchAPIPermissionScope('v2'), + ]) const apiV1Specs = API_SPECS_SCHEMA.parse(apiV1SpecsJSON) - const permissionScopeMapV1 = getEndpointsAndMCPToolsForAPI(apiV1Specs, MCPToolScopeMappings) - - // Get the permissions map for the API v2 - const apiV2SpecsJSON = await fetchAPIPermissionScope('v2') const apiV2Specs = API_SPECS_SCHEMA.parse(apiV2SpecsJSON) - const permissionScopeMapV2 = getEndpointsAndMCPToolsForAPI(apiV2Specs, MCPToolScopeMappings) - const permissionScope = lodash.mergeWith( - { mcp_tools: MCPToolScopeMappings }, - permissionScopeMapV1, - permissionScopeMapV2, - mergeArrays - ) + const { scopes, endpoints } = getScopesAndEndpointsForAPI({ + paths: { ...apiV1Specs.paths, ...apiV2Specs.paths }, + }) + addMCPToolsToScopes(scopes, MCPToolScopeMappings) - return permissionScope + return { + scopes, + endpoints, + // Deep copy so a caller mutating the response can't corrupt the module-level mapping, which + // outlives every request in a long-running server. + mcp_tools: cloneDeep(MCPToolScopeMappings), + } } // OPEN API specs look like this (only kept the parts we're interested in): // { // "paths": { -// "/v2/projects/{ref}/analytics/log-drains": { +// "/v1/projects/{ref}/branches": { // "get": { // "x-fga-permissions": [ -// [ -// "analytics_config_read" -// ] +// ["branching_development_read"], +// ["branching_production_read"] // ] // } // } // } // } -export const getEndpointsAndMCPToolsForAPI = ( - apiSpecs: z.output, - mcp_tools: McpMap +// The extension value is a list of alternative permission groups: a token needs ALL permissions +// of at least ONE group (OR between groups, AND within a group). Groups must be preserved verbatim, +// not flattened, or OR-alternatives (e.g. development vs production branching) turn into impossible +// conjunctions. An endpoint with no usable group is dropped entirely rather than recorded with an +// empty requirement, which would read as "ungated" and mark it callable by every token. +// +// KNOWN DIVERGENCE: annotations are trusted verbatim, and the one on +// POST /v1/projects/{ref}/database/query overstates access β€” the spec publishes +// `[[database_read], [database_write]]`, but the route's guard requires database_read outright and +// the write group is doc-only (see the execute_sql entry in MCPToolScopeMappings.ts). A token +// granted only database_write is therefore shown this endpoint as callable when the guard would +// reject it. Studio-created tokens can't hit this (write mode always grants the read scopes too), +// so this stays a display inaccuracy for API-created tokens; the fix is correcting the annotation +// upstream in the mgmt-api, not special-casing it here. +export const getScopesAndEndpointsForAPI = ( + apiSpecs: z.output ): Omit => { const scopes: ScopeMap = {} const endpoints: EndpointMap = {} - // Loop over each API path to assign endpoints to their scopes and - // scopes to their endpoints + // Loop over each API path to record endpoint permission groups and index scopes -> endpoints Object.entries(apiSpecs.paths).forEach(([path, methods]) => { // Loop over each API path method (get, post, etc.) Object.entries(methods).forEach(([method, methodSpecs]) => { const endpoint = `${method.toUpperCase()} ${path}` - if (methodSpecs['x-fga-permissions'] == null) return + const groups = (methodSpecs['x-fga-permissions'] ?? []).filter( + (group): group is string[] => Array.isArray(group) && group.length > 0 + ) + if (groups.length === 0) return - methodSpecs['x-fga-permissions'].forEach((permissions) => { - permissions?.forEach((permission) => { - // Initialize scope object if needed - scopes[permission] = scopes[permission] || { endpoints: [], mcp_tools: [] } + endpoints[endpoint] = groups - // Initialize endpoints array if needed - endpoints[endpoint] = endpoints[endpoint] || [] + groups.flat().forEach((permission) => { + // Initialize scope object if needed + scopes[permission] = scopes[permission] || { endpoints: [], mcp_tools: [] } - if (!scopes[permission].endpoints.includes(endpoint)) { - scopes[permission].endpoints.push(endpoint) - } - if (!endpoints[endpoint].includes(permission)) { - endpoints[endpoint].push(permission) - } - }) + if (!scopes[permission].endpoints.includes(endpoint)) { + scopes[permission].endpoints.push(endpoint) + } }) }) }) - // Assign the mcp tools to their scopes - Object.entries(mcp_tools).forEach(([mcpTool, toolScopes]) => { - toolScopes.forEach((toolScope) => { - if (scopes[toolScope] && !scopes[toolScope].mcp_tools.includes(mcpTool)) { + return { scopes, endpoints } +} + +// Assign the mcp tools to their scopes. Scopes referenced only by tools (no endpoint lists them, +// e.g. project_snippets_read) are initialized here so they don't vanish from the map. Ungated tools +// reference no scope, so they're absent from this index by construction β€” they belong to no +// capability and `getEnabledMcpTools` reports them for every token instead. +export const addMCPToolsToScopes = (scopes: ScopeMap, mcp_tools: McpMap) => { + Object.entries(mcp_tools).forEach(([mcpTool, toolScopeGroups]) => { + toolScopeGroups.flat().forEach((toolScope) => { + scopes[toolScope] = scopes[toolScope] || { endpoints: [], mcp_tools: [] } + if (!scopes[toolScope].mcp_tools.includes(mcpTool)) { scopes[toolScope].mcp_tools.push(mcpTool) } }) }) - - return { scopes, endpoints } } const NEXT_PUBLIC_API_DOMAIN = process.env.NEXT_PUBLIC_API_DOMAIN || 'https://api.supabase.com' @@ -142,12 +153,22 @@ const OPEN_API_PATH_METHOD_SCHEMA = z.object({ 'x-fga-permissions': z.array(z.string().array().optional()).optional(), }) +const HTTP_METHODS = ['get', 'post', 'put', 'patch', 'delete', 'options', 'head', 'trace'] as const + +// OpenAPI path items may legally carry non-operation members (path-level `parameters`, `summary`, +// `description`, `servers`, `$ref`). z.record with an enum key schema rejects unknown keys +// outright, which would turn a benign upstream spec change into a 500 for this whole route β€” +// strip them before validating the operations. +const OPEN_API_PATH_ITEM_SCHEMA = z.preprocess( + (item) => + item !== null && typeof item === 'object' + ? Object.fromEntries( + Object.entries(item).filter(([key]) => (HTTP_METHODS as readonly string[]).includes(key)) + ) + : item, + z.record(z.enum(HTTP_METHODS), OPEN_API_PATH_METHOD_SCHEMA) +) + const API_SPECS_SCHEMA = z.object({ - paths: z.record( - z.string(), - z.record( - z.enum(['get', 'post', 'put', 'patch', 'delete', 'options', 'head', 'trace']), - OPEN_API_PATH_METHOD_SCHEMA - ) - ), + paths: z.record(z.string(), OPEN_API_PATH_ITEM_SCHEMA), }) diff --git a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.fixtures.ts b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.fixtures.ts index 5275f6ace06..f19ae68170a 100644 --- a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.fixtures.ts +++ b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.fixtures.ts @@ -18,7 +18,9 @@ export const permissionRow = ( organization_slug: string, actions: string[], resources: string[], - project_refs: string[] = [] + // Org-wide rows serialize as [] or null on the wire (nullable in the API contract; the + // view-synthesized admin rows for auth.subject_roles/user_invites are null). + project_refs: string[] | null = [] ): PermissionRowFixture => ({ actions: actions as Permission['actions'], condition: null as unknown as Permission['condition'], diff --git a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.permissions.test.ts b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.permissions.test.ts index 7bd9bee642e..4aab626e393 100644 --- a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.permissions.test.ts +++ b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.permissions.test.ts @@ -4,14 +4,121 @@ import { computeOverallRisk, countConfigured, getCatalogEntry, + scopesToSelection, selectionToScopes, type PermissionSelection, } from './AccessToken.permissions' import { getEnabledEndpoints, + getEnabledEndpointsForCapability, getEnabledMcpTools, + normalizePermissionScopeMap, + type PermissionScopeMap, } from '@/data/scoped-access-tokens/permission-scope-map-query' +const scopeMap = (partial: Partial): PermissionScopeMap => ({ + scopes: {}, + endpoints: {}, + mcp_tools: {}, + ...partial, +}) + +describe('scopesToSelection', () => { + it('round-trips studio-created grants (full read/write sets)', () => { + expect(scopesToSelection(['database_read', 'database_write'])).toEqual({ + 'project:database': 'readwrite', + }) + expect(scopesToSelection(['database_read'])).toEqual({ 'project:database': 'read' }) + expect(scopesToSelection([])).toEqual({}) + }) + + // API-created tokens can hold partial scope sets; the derived mode is an upper bound so the + // review UI never claims 'Minimal β€” no capabilities' for a token with real authority. + it('never drops partial grants from API-created tokens', () => { + // A lone create scope (one of the entry's three write scopes) still surfaces as readwrite. + expect(scopesToSelection(['branching_development_create'])).toEqual({ + 'project:branching_development': 'readwrite', + }) + // A write grant without the read scopes still surfaces (upper-bound readwrite). + expect(scopesToSelection(['project_admin_write'])).toEqual({ 'project:admin': 'readwrite' }) + }) +}) + +describe('normalizePermissionScopeMap', () => { + // A stale CDN entry can serve the pre-groups payload (flat conjunctive string[] per endpoint) + // to a client whose evaluators expect string[][]; without normalization group.every crashes. + it('interprets a stale flat payload as single conjunctive groups', () => { + const normalized = normalizePermissionScopeMap({ + scopes: {}, + endpoints: { + 'GET /v1/projects': ['projects_read', 'organization_projects_read'], + }, + mcp_tools: { execute_sql: ['database_read', 'database_write'] }, + }) + + expect(normalized.endpoints['GET /v1/projects']).toEqual([ + ['projects_read', 'organization_projects_read'], + ]) + expect(normalized.mcp_tools.execute_sql).toEqual([['database_read', 'database_write']]) + // The normalized shape evaluates without throwing + expect( + getEnabledMcpTools({ grantedScopes: ['database_read'], permissionScopeMap: normalized }) + ).toEqual([]) + }) + + it('passes the current grouped payload through unchanged', () => { + const grouped: PermissionScopeMap = { + scopes: {}, + endpoints: { 'GET /v1/branches': [['branching_development_read']] }, + mcp_tools: { search_docs: [[]], broken_tool: [] }, + } + + expect(normalizePermissionScopeMap(grouped)).toEqual(grouped) + }) + + it('tolerates payloads missing any of the three maps entirely', () => { + const normalized = normalizePermissionScopeMap({}) + + expect(normalized.scopes).toEqual({}) + expect(normalized.endpoints).toEqual({}) + expect(normalized.mcp_tools).toEqual({}) + }) + + it('fails closed (nobody) on values that are not arrays at all', () => { + const normalized = normalizePermissionScopeMap({ + scopes: {}, + endpoints: { 'GET /v1/projects': null }, + mcp_tools: { execute_sql: 'database_read' }, + }) + + expect(normalized.endpoints['GET /v1/projects']).toEqual([]) + expect(normalized.mcp_tools.execute_sql).toEqual([]) + }) + + // response.json() can legally produce any of these (a null body, an error string); the + // normalizer is the boundary and must return the fail-closed empty map, not throw. + it('fails closed on a top-level payload that is not an object', () => { + const empty = { scopes: {}, endpoints: {}, mcp_tools: {} } + + expect(normalizePermissionScopeMap(null)).toEqual(empty) + expect(normalizePermissionScopeMap(undefined)).toEqual(empty) + expect(normalizePermissionScopeMap('internal server error')).toEqual(empty) + expect(normalizePermissionScopeMap([])).toEqual(empty) + }) + + it('empties a field whose record shape is wrong without discarding the rest', () => { + const normalized = normalizePermissionScopeMap({ + scopes: { database_read: { endpoints: 'not-an-array', mcp_tools: [] } }, + endpoints: { 'GET /v1/projects': [['projects_read']] }, + mcp_tools: null, + }) + + expect(normalized.scopes).toEqual({}) + expect(normalized.endpoints['GET /v1/projects']).toEqual([['projects_read']]) + expect(normalized.mcp_tools).toEqual({}) + }) +}) + describe('selectionToScopes', () => { it('ignores none and returns read scope for read mode', () => { const selection: PermissionSelection = { 'project:database': 'read', 'project:backups': 'none' } @@ -75,56 +182,162 @@ describe('countConfigured', () => { }) }) -describe('permission scope map (dual-scope enforcement)', () => { - it('enables a dual-scope MCP tool only when all required scopes are granted', () => { - // execute_sql requires both database_read and database_write +describe('permission scope map (group enforcement)', () => { + it('enables a multi-scope MCP tool group only when all scopes of the group are granted', () => { + // create_project requires org read + org project create together (the handler's FGA checks) + const permissionScopeMap = scopeMap({ + mcp_tools: { create_project: [['organization_admin_read', 'organization_projects_create']] }, + }) expect( getEnabledMcpTools({ - // Only scope one is granted - grantedScopes: ['database_read'], - permissionScopeMap: { - scopes: {}, - endpoints: {}, - mcp_tools: { - execute_sql: ['database_read', 'database_write'], - }, - }, + grantedScopes: ['organization_projects_create'], + permissionScopeMap, }) - ).not.toContain('execute_sql') + ).not.toContain('create_project') expect( getEnabledMcpTools({ - // Both scopes are granted - grantedScopes: ['database_read', 'database_write'], - permissionScopeMap: { - scopes: {}, - endpoints: {}, - mcp_tools: { - execute_sql: ['database_read', 'database_write'], - }, - }, + grantedScopes: ['organization_admin_read', 'organization_projects_create'], + permissionScopeMap, }) - ).toContain('execute_sql') + ).toContain('create_project') }) - it('only lists endpoints whose every required scope is granted', () => { + it('enables a tool with alternative groups when any single group is fully granted', () => { + // execute_sql requires database_read OR database_write, depending on read-only mode + const permissionScopeMap = scopeMap({ + mcp_tools: { execute_sql: [['database_read'], ['database_write']] }, + }) + expect(getEnabledMcpTools({ grantedScopes: ['database_read'], permissionScopeMap })).toContain( + 'execute_sql' + ) + expect(getEnabledMcpTools({ grantedScopes: ['database_write'], permissionScopeMap })).toContain( + 'execute_sql' + ) + expect( + getEnabledMcpTools({ grantedScopes: ['storage_read'], permissionScopeMap }) + ).not.toContain('execute_sql') + }) + + it('reports ungated tools (one empty group) as enabled for any token, including one with no scopes', () => { + // search_docs hits the public content API and confirm_cost computes a local hash, so no + // permission gates either β€” the review step should say so rather than hide them. + const permissionScopeMap = scopeMap({ + mcp_tools: { search_docs: [[]], confirm_cost: [[]] }, + }) + + expect(getEnabledMcpTools({ grantedScopes: ['database_read'], permissionScopeMap })).toEqual([ + 'search_docs', + 'confirm_cost', + ]) + expect(getEnabledMcpTools({ grantedScopes: [], permissionScopeMap })).toEqual([ + 'search_docs', + 'confirm_cost', + ]) + }) + + it('never enables a tool whose alternatives were all dropped ([])', () => { + const permissionScopeMap = scopeMap({ mcp_tools: { broken_tool: [] } }) + + expect( + getEnabledMcpTools({ grantedScopes: ['database_read'], permissionScopeMap }) + ).not.toContain('broken_tool') + }) + + it('lists endpoints when at least one alternative group is fully granted', () => { const endpoints = getEnabledEndpoints({ - grantedScopes: ['database_read', 'database_write'], - permissionScopeMap: { - scopes: {}, + grantedScopes: ['database_read', 'database_write', 'branching_development_read'], + permissionScopeMap: scopeMap({ endpoints: { - 'GET /api/valid_read': ['database_read'], - 'POST /api/valid_write': ['database_write'], - 'PUT /api/valid_both': ['database_read', 'database_write'], - 'PUT /api/invalid': ['project_write'], - 'PUT /api/incomplete': ['database_read', 'project_write'], + 'GET /api/valid_read': [['database_read']], + 'POST /api/valid_write': [['database_write']], + 'PUT /api/valid_both': [['database_read', 'database_write']], + // development OR production: development alone is enough + 'GET /api/valid_alternative': [ + ['branching_development_read'], + ['branching_production_read'], + ], + 'PUT /api/invalid': [['project_write']], + 'PUT /api/incomplete': [['database_read', 'project_write']], }, - mcp_tools: {}, - }, + }), }) expect(endpoints).toEqual([ { raw: 'GET /api/valid_read', method: 'GET', path: '/api/valid_read' }, { raw: 'POST /api/valid_write', method: 'POST', path: '/api/valid_write' }, { raw: 'PUT /api/valid_both', method: 'PUT', path: '/api/valid_both' }, + { raw: 'GET /api/valid_alternative', method: 'GET', path: '/api/valid_alternative' }, ]) }) }) + +describe('getEnabledEndpointsForCapability', () => { + const rawPaths = (endpoints: ReturnType) => + endpoints.map(({ raw }) => raw) + + it('attributes an endpoint to each capability whose scope is in a fully-granted group', () => { + const permissionScopeMap = scopeMap({ + endpoints: { + 'GET /api/branches': [['branching_development_read'], ['branching_production_read']], + }, + }) + const allGrantedScopes = ['branching_development_read', 'branching_production_read'] + + expect( + rawPaths( + getEnabledEndpointsForCapability({ + capabilityScopes: ['branching_development_read'], + allGrantedScopes, + permissionScopeMap, + }) + ) + ).toEqual(['GET /api/branches']) + expect( + rawPaths( + getEnabledEndpointsForCapability({ + capabilityScopes: ['branching_production_read'], + allGrantedScopes, + permissionScopeMap, + }) + ) + ).toEqual(['GET /api/branches']) + }) + + // The endpoint is callable, but thanks to the development alternative β€” production granted alone + // would not have enabled it, so it must not be listed under the production capability. + it('does not attribute an endpoint to a capability whose own group is unsatisfied', () => { + const enabled = getEnabledEndpointsForCapability({ + capabilityScopes: ['branching_production_read'], + allGrantedScopes: ['branching_development_read'], + permissionScopeMap: scopeMap({ + endpoints: { + 'GET /api/branches': [['branching_development_read'], ['branching_production_read']], + }, + }), + }) + + expect(enabled).toEqual([]) + }) + + it('requires every scope of the capability group to be granted', () => { + const permissionScopeMap = scopeMap({ + endpoints: { 'PUT /api/upgrade': [['project_admin_read', 'database_read']] }, + }) + + expect( + getEnabledEndpointsForCapability({ + capabilityScopes: ['database_read'], + allGrantedScopes: ['database_read'], + permissionScopeMap, + }) + ).toEqual([]) + expect( + rawPaths( + getEnabledEndpointsForCapability({ + capabilityScopes: ['database_read'], + allGrantedScopes: ['database_read', 'project_admin_read'], + permissionScopeMap, + }) + ) + ).toEqual(['PUT /api/upgrade']) + }) +}) diff --git a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.permissions.ts b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.permissions.ts index 3b94a29c952..1417df70d0d 100644 --- a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.permissions.ts +++ b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.permissions.ts @@ -447,7 +447,21 @@ const RESOURCE_METADATA_FALLBACK = ( : 'Read-only access to this resource.', }) -export type PermissionLevel = 'user' | 'organization' | 'project' +const PERMISSION_LEVELS = ['user', 'organization', 'project'] as const + +export type PermissionLevel = (typeof PERMISSION_LEVELS)[number] + +/** + * Runtime guard for the FGA namespaces: role evaluation branches on the level, so an unrecognized + * namespace must fail loudly (at module load, caught by any test importing the catalog) rather + * than silently evaluate as project-level. + */ +const toPermissionLevel = (scope: string): PermissionLevel => { + const level = scope.toLowerCase() + const match = PERMISSION_LEVELS.find((candidate) => candidate === level) + if (match === undefined) throw new Error(`Unknown FGA namespace: ${scope}`) + return match +} export interface PermissionCatalogEntry { /** Derived resource key, e.g. "project:database" */ @@ -490,7 +504,7 @@ const buildCatalog = (): PermissionCatalogEntry[] => { >() for (const [scope, scopePerms] of Object.entries(FGA)) { - const level = scope.toLowerCase() as PermissionLevel + const level = toPermissionLevel(scope) for (const [permKey, perm] of Object.entries(scopePerms)) { const resourceKey = `${level}:${getResource(permKey)}` const action = getAction(permKey) @@ -570,15 +584,22 @@ export const selectionToScopes = ( return Array.from(new Set(scopes)) } -/** Reverses `selectionToScopes`: derives a selection from a token's granted FGA scope ids. */ +/** + * Reverses `selectionToScopes`: derives a selection from a token's granted FGA scope ids. + * + * Tokens created through the Management API can hold arbitrary scope subsets that the + * none/read/readwrite modes cannot represent exactly (e.g. a lone branching_development_create). + * Any granted scope of an entry marks it at the corresponding mode, so a partial grant is never + * dropped β€” the mode is an upper bound and may name specific operations the token lacks, but it + * never understates the token's authority or risk. The endpoint and MCP-tool lists, computed + * from the actual granted scopes, remain the precise view. + */ export const scopesToSelection = (grantedScopes: string[]): PermissionSelection => { const granted = new Set(grantedScopes) const selection: PermissionSelection = {} for (const entry of PERMISSION_CATALOG) { - const hasWrite = - entry.writeScopes.length > 0 && entry.writeScopes.every((scope) => granted.has(scope)) - const hasRead = - entry.readScopes.length > 0 && entry.readScopes.every((scope) => granted.has(scope)) + const hasWrite = entry.writeScopes.some((scope) => granted.has(scope)) + const hasRead = entry.readScopes.some((scope) => granted.has(scope)) if (hasWrite) selection[entry.key] = 'readwrite' else if (hasRead) selection[entry.key] = 'read' } diff --git a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.roles.test.ts b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.roles.test.ts index ab3f229e318..e6011571470 100644 --- a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.roles.test.ts +++ b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.roles.test.ts @@ -22,7 +22,10 @@ import { type EvaluateTokenAccessArgs = TokenRoleContextArgs & { selection: PermissionSelection } -/** Composes the two production entry points the way `useTokenAccessEvaluation` does. */ +/** + * Composes the two production entry points the way a consumer should: resolve the (expensive) + * role context once from its inputs, then apply the (cheap) selection to it on every change. + */ const evaluateTokenAccess = ({ selection, ...contextArgs }: EvaluateTokenAccessArgs) => applySelectionToRoleContext(computeTokenRoleContext(contextArgs), selection) @@ -83,6 +86,19 @@ describe('project-scoped membership helpers', () => { expect(getIsProjectScopedOnly(developerRows(ORG.slug), ORG.slug)).toBe(false) expect(getIsProjectScopedOnly([], ORG.slug)).toBe(false) }) + + it('treats project_refs: null rows as org-wide, in any row order', () => { + // The real /platform/profile/permissions response serializes the view-synthesized + // Administrator/Owner rows (auth.subject_roles, user_invites) with project_refs: null, and + // the response carries no ordering guarantee. + const nullRow = row(ORG.slug, ['write:Create', 'write:Delete'], ['auth.subject_roles']) + nullRow.project_refs = null + + expect(getIsProjectScopedOnly([nullRow, ...administratorRows(ORG.slug)], ORG.slug)).toBe(false) + expect(getIsProjectScopedOnly([...administratorRows(ORG.slug), nullRow], ORG.slug)).toBe(false) + // A lone null row is org-wide too, not project-scoped. + expect(getIsProjectScopedOnly([nullRow], ORG.slug)).toBe(false) + }) }) describe('requiredRoleForEntry', () => { @@ -118,6 +134,35 @@ describe('evaluateTokenAccess', () => { expect(result.entries['project:database'].status).toBe('unknown') }) + it('normalizes effectiveSelection on every path, not just the evaluated one', () => { + const selection: PermissionSelection = { + 'project:database': 'readwrite', + 'project:backups': 'none', + 'not:a-real-key': 'read', + } + const expected = { 'project:database': 'readwrite' } + + // Unknown path (permissions still loading) + expect( + evaluateTokenAccess({ ...baseArgs, selection, permissions: undefined }).effectiveSelection + ).toEqual(expected) + // Account path (selection tracks the owner by definition) + expect( + evaluateTokenAccess({ + ...baseArgs, + selection, + resourceAccess: 'account', + organizationSlugs: [], + permissions: ownerRows(ORG.slug), + }).effectiveSelection + ).toEqual(expected) + // Evaluated path + expect( + evaluateTokenAccess({ ...baseArgs, selection, permissions: ownerRows(ORG.slug) }) + .effectiveSelection + ).toEqual(expected) + }) + it('passes everything the user’s role covers', () => { const result = evaluateTokenAccess({ ...baseArgs, @@ -196,26 +241,88 @@ describe('evaluateTokenAccess', () => { }) // Developer on the bound project: database readwrite is fine. expect(result.entries['project:database'].status).toBe('ok') - // But org-level scopes check the org-wide role, which is only member β€” and the failure - // carries their real per-project role so the UI can explain the distinction. - expect(result.entries['organization:members'].status).toBe('exceeds-role') - expect(result.entries['organization:members'].failingResources).toEqual([ + // Org-level scopes can never be exercised through a project-scoped token β€” platform rejects + // them outright regardless of the owner's role, so no role evaluation applies. + expect(result.entries['organization:members'].status).toBe('unavailable-for-scope') + expect(result.entries['organization:members'].effectiveMode).toBe('none') + expect(result.entries['organization:members'].failingResources).toEqual([]) + expect(result.unavailableEntryKeys).toEqual(['organization:members']) + expect(result.exceedingEntryKeys).toEqual([]) + expect(result.effectiveSelection).toEqual({ 'project:database': 'readwrite' }) + }) + + it('honors project-scoped roles for project entries on organization-scoped tokens', () => { + // An org member invited as Developer to one project: platform checks the owner's permission + // against the project object, so an org-bound token really can database_write there. Only the + // projects where the role is insufficient may be reported as failing. + const result = evaluateTokenAccess({ + ...baseArgs, + selection: { 'project:database': 'readwrite' }, + permissions: developerRows(ORG.slug, [PROJECT.ref]), + organizations: [ORG], + projects: [PROJECT, OTHER_PROJECT], + }) + expect(result.entries['project:database'].status).toBe('exceeds-role') + expect(result.entries['project:database'].failingResources).toEqual([ + { type: 'project', id: OTHER_PROJECT.ref, label: OTHER_PROJECT.ref, role: 'member' }, + ]) + + // Developer on every project of the org: nothing fails, despite the org role being member. + const allProjects = evaluateTokenAccess({ + ...baseArgs, + selection: { 'project:database': 'readwrite' }, + permissions: developerRows(ORG.slug, [PROJECT.ref, OTHER_PROJECT.ref]), + organizations: [ORG], + projects: [PROJECT, OTHER_PROJECT], + }) + expect(allProjects.entries['project:database'].status).toBe('ok') + expect(allProjects.effectiveSelection).toEqual({ 'project:database': 'readwrite' }) + }) + + it('falls back to the org level for bound orgs with no accessible projects', () => { + const result = evaluateTokenAccess({ + ...baseArgs, + selection: { 'project:database': 'readwrite' }, + permissions: readonlyRows(ORG.slug), + organizations: [ORG], + projects: [], + }) + expect(result.entries['project:database'].status).toBe('exceeds-role') + expect(result.entries['project:database'].failingResources).toEqual([ { type: 'organization', id: ORG.slug, label: ORG.slug, - role: 'member', - projectScopedRoles: [{ label: PROJECT.ref, role: 'developer' }], + role: 'readonly', + projectScopedRoles: undefined, }, ]) }) - it('explains org-level failures for members invited only to a project', () => { - // Read-only on one project, selecting Organization Settings read-write (requires Owner). + it('marks org-level entries unavailable on project-scoped tokens even for org owners', () => { + // Platform's getChecks throws for project-scoped tokens on organization endpoints before + // any FGA evaluation, so even an org owner's project token can never call them. const result = evaluateTokenAccess({ ...baseArgs, resourceAccess: 'project', projectRefs: [PROJECT.ref], + selection: { 'organization:members': 'readwrite', 'user:organizations': 'read' }, + permissions: ownerRows(ORG.slug), + }) + expect(result.entries['organization:members'].status).toBe('unavailable-for-scope') + // User-level scopes are granted by the token grant alone (token -> scope tuple checks), so + // they stay exercisable for any resource binding. + expect(result.entries['user:organizations'].status).toBe('ok') + expect(result.effectiveSelection).toEqual({ 'user:organizations': 'read' }) + }) + + it('explains org-level failures for members invited only to a project', () => { + // Read-only on one project, selecting Organization Settings read-write (requires Owner) on + // an organization-scoped token β€” the failure carries their real per-project role so the UI + // can explain the distinction. + const result = evaluateTokenAccess({ + ...baseArgs, + resourceAccess: 'organization', selection: { 'organization:admin': 'readwrite' }, permissions: readonlyRows(ORG.slug, [PROJECT.ref]), organizations: [{ ...ORG, name: 'Acme Corp' }], @@ -242,8 +349,7 @@ describe('evaluateTokenAccess', () => { const strayOrgRow = row(ORG.slug, ['read:Read'], ['notifications']) const result = evaluateTokenAccess({ ...baseArgs, - resourceAccess: 'project', - projectRefs: [PROJECT.ref], + resourceAccess: 'organization', selection: { 'organization:admin': 'readwrite' }, permissions: [...readonlyRows(ORG.slug, [PROJECT.ref]), strayOrgRow], projects: [{ ...PROJECT, name: 'Acme production' }], diff --git a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.roles.ts b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.roles.ts index c4039ee8bb4..06eff7f10d9 100644 --- a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.roles.ts +++ b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.roles.ts @@ -201,7 +201,10 @@ export const estimateRoleLevel = ( return isMember ? 'member' : 'none' } -/** True when every permission row the user holds in the org is limited to specific projects. */ +/** + * True when every permission row the user holds in the org is limited to specific projects. + * Org-wide rows arrive as [] or null (the API contract is nullable) β€” both mean not scoped. + */ export const getIsProjectScopedOnly = ( permissions: Permission[], organizationSlug: string @@ -211,7 +214,7 @@ export const getIsProjectScopedOnly = ( ) if (orgRows.length === 0) return false return orgRows.every( - (permission) => permission.project_refs !== undefined && permission.project_refs.length > 0 + (permission) => Array.isArray(permission.project_refs) && permission.project_refs.length > 0 ) } @@ -231,7 +234,12 @@ export const requiredRoleForEntry = ( ): TokenRoleLevel => mode === 'none' ? 'member' : requiredRoleForScopes(getEntryScopes(entry, mode)) -export type EntryAccessStatus = 'ok' | 'exceeds-role' | 'unknown' +/** + * 'unavailable-for-scope': the entry's permission level can never be exercised through this + * token's resource binding, regardless of the owner's role β€” platform rejects project-scoped + * tokens outright on organization endpoints. + */ +export type EntryAccessStatus = 'ok' | 'exceeds-role' | 'unavailable-for-scope' | 'unknown' /** A token-bound resource where the user's current role can't exercise the selected mode. */ export interface FailingResource { @@ -275,7 +283,13 @@ export interface TokenAccessEvaluation { entries: Record /** Entry keys whose selected mode exceeds the user's current role. */ exceedingEntryKeys: string[] - /** Selection reduced to what the user's current role can exercise. */ + /** Entry keys the token's resource binding can never exercise (org entries on project tokens). */ + unavailableEntryKeys: string[] + /** + * Selection reduced to what the user's current role can exercise. Always normalized to + * catalog-known, non-'none' entries β€” including on the 'unknown' and account paths, where no + * reduction applies. + */ effectiveSelection: PermissionSelection } @@ -307,7 +321,11 @@ export interface TokenRoleContext { hasNoAccessibleResource: boolean /** Per bound organization (or parent org in project mode). */ orgLevels: FailingResource[] - /** Per bound project in project mode; mirrors orgLevels otherwise (org roles cascade). */ + /** + * Per bound project in project mode; per accessible project of the bound orgs in organization + * mode (platform checks project permissions against the project object, so project-scoped + * roles count). Orgs with no accessible projects contribute their org level instead. + */ projectLevels: FailingResource[] /** Weakest role across orgLevels / projectLevels. */ orgLevel: TokenRoleLevel @@ -435,15 +453,27 @@ export const computeTokenRoleContext = ({ } }) + const toProjectLevel = (project: { ref: string; organization_slug: string; name?: string }) => ({ + type: 'project' as const, + id: project.ref, + label: project.name ?? project.ref, + role: roleFor(project.organization_slug, project.ref), + }) + + // In organization mode the token's scope cascades to every project of the bound orgs, and + // platform checks the owner's permission against the project object β€” so a project-scoped + // Developer really can exercise e.g. database_write on their project through an org-bound + // token. Evaluate project-level entries per accessible project rather than by the org-level + // role, falling back to the org level for orgs with no accessible projects. Future projects + // only ever inherit the org-level role; the per-project view can't warn about those. const projectLevels: FailingResource[] = resourceAccess === 'project' - ? accessibleProjects.map((project) => ({ - type: 'project' as const, - id: project.ref, - label: project.name ?? project.ref, - role: roleFor(project.organization_slug, project.ref), - })) - : orgLevels + ? accessibleProjects.map(toProjectLevel) + : orgSlugsForLevels.flatMap((slug) => { + const orgProjects = projects.filter((project) => project.organization_slug === slug) + if (orgProjects.length === 0) return orgLevels.filter((level) => level.id === slug) + return orgProjects.map(toProjectLevel) + }) return { status: 'evaluated', @@ -468,6 +498,15 @@ export const applySelectionToRoleContext = ( context: TokenRoleContext, selection: PermissionSelection ): TokenAccessEvaluation => { + // Every path reports entries and effectiveSelection over the same normalized key set, so + // consumers can iterate either without special-casing 'none' modes or unknown catalog keys. + const selectedKeys = Object.keys(selection).filter( + (key) => selection[key] !== 'none' && getCatalogEntry(key) !== undefined + ) + const normalizedSelection: PermissionSelection = Object.fromEntries( + selectedKeys.map((key) => [key, selection[key]]) + ) + const base = { status: context.status, inaccessibleOrgSlugs: context.inaccessibleOrgSlugs, @@ -475,11 +514,10 @@ export const applySelectionToRoleContext = ( hasNoBoundResources: context.hasNoBoundResources, hasNoAccessibleResource: context.hasNoAccessibleResource, exceedingEntryKeys: [] as string[], - effectiveSelection: selection, + unavailableEntryKeys: [] as string[], + effectiveSelection: normalizedSelection, } - const selectedKeys = Object.keys(selection).filter((key) => selection[key] !== 'none') - // Account-scoped (legacy/user) tokens track the owner's access by definition β€” every entry is // exercisable, so requiredRole/failingResources (only read for 'exceeds-role' entries) stay inert. if (context.status === 'evaluated' && context.resourceAccess === 'account') { @@ -509,6 +547,7 @@ export const applySelectionToRoleContext = ( const { orgLevel, projectLevel, orgLevels, projectLevels } = context const entries: Record = {} const exceedingEntryKeys: string[] = [] + const unavailableEntryKeys: string[] = [] const effectiveSelection: PermissionSelection = {} for (const key of selectedKeys) { @@ -516,6 +555,23 @@ export const applySelectionToRoleContext = ( const entry = getCatalogEntry(key) if (!entry) continue + // Platform rejects project-scoped tokens outright on organization endpoints (getChecks + // throws before any FGA evaluation), so the owner's org role is irrelevant there and + // role-based evaluation would wrongly report these entries as exercisable. The one + // exception β€” organization_admin_write is additionally enforced on a few project-ref + // routes via the model's `from parent_organization` indirection β€” is deliberately + // ignored: this advisory UI fails closed. + if (context.resourceAccess === 'project' && entry.level === 'organization') { + entries[key] = { + status: 'unavailable-for-scope', + effectiveMode: 'none', + requiredRole: requiredRoleForEntry(entry, mode), + failingResources: [], + } + unavailableEntryKeys.push(key) + continue + } + const availableLevel = entry.level === 'user' ? 'owner' : entry.level === 'organization' ? orgLevel : projectLevel @@ -544,7 +600,7 @@ export const applySelectionToRoleContext = ( if (effectiveMode !== 'none') effectiveSelection[key] = effectiveMode } - return { ...base, entries, exceedingEntryKeys, effectiveSelection } + return { ...base, entries, exceedingEntryKeys, unavailableEntryKeys, effectiveSelection } } export interface FailingResourceGroup { diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/RiskMarker.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/RiskMarker.tsx index a9e5bdf292c..92c99c051ae 100644 --- a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/RiskMarker.tsx +++ b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/RiskMarker.tsx @@ -76,8 +76,12 @@ export const RiskMarker = ({ )} {mcpTools.length > 0 && (
    + {/* getMcpToolsForScopes is associative, not conjunctive: these scopes contribute to + the listed tools, but a tool may need scopes from other capabilities too β€” the + review step's enabled-tools list is the authoritative view. Keep this heading + distinct from the review step's "MCP tools". */}

    - MCP tools + Related MCP tools

    {mcpTools.join(', ')}

    diff --git a/apps/studio/data/scoped-access-tokens/permission-scope-map-query.ts b/apps/studio/data/scoped-access-tokens/permission-scope-map-query.ts index 976b6a0d127..604cc8d68eb 100644 --- a/apps/studio/data/scoped-access-tokens/permission-scope-map-query.ts +++ b/apps/studio/data/scoped-access-tokens/permission-scope-map-query.ts @@ -1,4 +1,5 @@ import { useQuery } from '@tanstack/react-query' +import { z } from 'zod' import { scopedAccessTokenKeys } from './keys' import { BASE_PATH } from '@/lib/constants' @@ -28,17 +29,35 @@ export interface ScopeMapEntry { } */ export type ScopeMap = Record -// e.g { 'GET /v2/projects/{ref}/analytics/log-drains': ['analytics_config_read'] } -export type EndpointMap = Record -// e.g { 'deploy_edge_function': ['edge_functions_write'] } -export type McpMap = Record + +/** A set of scopes that must ALL be granted (conjunctive). */ +export type ScopeGroup = string[] +/** + * Alternative scope groups, mirroring the mgmt-api `x-fga-permissions` semantics: a token satisfies + * the requirement when it holds ALL scopes of at least ONE group β€” OR between groups, AND within a + * group. `GET /v1/projects/{ref}/branches` is annotated + * `[['branching_development_read'], ['branching_production_read']]`, and either alternative alone + * authorizes the call. + * + * Standard disjunctive-normal-form semantics apply at the edges, so no special cases are needed: + * `[[]]` β€” one empty group β€” is satisfied by every token (an empty AND is true), which is how MCP + * tools that make no Management API call are recorded. `[]` β€” no alternatives at all β€” is satisfied + * by nobody (an empty OR is false), so an item that somehow loses its groups is hidden rather than + * advertised to everyone. + */ +export type ScopeGroupAlternatives = ScopeGroup[] + +// e.g { 'GET /v1/projects/{ref}/branches': [['branching_development_read'], ['branching_production_read']] } +export type EndpointMap = Record +// e.g { 'deploy_edge_function': [['edge_functions_write']] } +export type McpMap = Record export interface PermissionScopeMap { /** scope id -> the endpoints / MCP tools it (partially) authorizes */ scopes: ScopeMap - /** endpoint -> ALL scopes it requires (conjunctive) */ + /** endpoint -> alternative scope groups (OR between groups, AND within a group) */ endpoints: EndpointMap - /** MCP tool -> ALL scopes it requires (conjunctive) */ + /** MCP tool -> alternative scope groups (OR between groups, AND within a group) */ mcp_tools: McpMap } @@ -57,10 +76,15 @@ const splitEndpoint = (raw: string): EnabledEndpoint => { return { method: raw.slice(0, spaceIndex), path: raw.slice(spaceIndex + 1), raw } } +// Plain disjunctive-normal-form evaluation: some group where every scope is granted. An empty +// group is vacuously satisfied, which is exactly what "nothing gates this" should mean. +const isSatisfied = (groups: ScopeGroupAlternatives, granted: Set) => + groups.some((group) => group.every((scope) => granted.has(scope))) + /** * Given the set of granted scope ids, returns the Management API endpoints the token can call. - * An endpoint is only enabled when ALL of its required scopes are granted (conjunctive), which is - * how the mgmt-api `FgaPermissionsGuard` evaluates the `@AuthWithFgaPermissions` decorator. + * An endpoint is enabled when ALL scopes of at least ONE of its alternative groups are granted, + * matching the `x-fga-permissions` contract described on `ScopeGroupAlternatives`. */ export const getEnabledEndpoints = ({ grantedScopes, @@ -73,13 +97,15 @@ export const getEnabledEndpoints = ({ const granted = new Set(grantedScopes) return Object.entries(permissionScopeMap.endpoints) - .filter(([, required]) => required.length > 0 && required.every((scope) => granted.has(scope))) + .filter(([, groups]) => isSatisfied(groups, granted)) .map(([raw]) => splitEndpoint(raw)) } /** - * Given the set of granted scope ids, returns the MCP tools the token can call. As with endpoints, - * a tool is only enabled when ALL of its required scopes are granted. + * Given the set of granted scope ids, returns the MCP tools the token can call: those with at least + * one fully-granted scope group. Ungated tools β€” recorded as one empty group (`[[]]`), see + * ScopeGroupAlternatives β€” are vacuously satisfied and so reported for every token. A tool with no + * alternatives at all (`[]`) is reported for nobody. */ export const getEnabledMcpTools = ({ grantedScopes, @@ -92,15 +118,18 @@ export const getEnabledMcpTools = ({ const granted = new Set(grantedScopes) return Object.entries(permissionScopeMap.mcp_tools) - .filter(([, required]) => required.length > 0 && required.every((scope) => granted.has(scope))) + .filter(([, groups]) => isSatisfied(groups, granted)) .map(([tool]) => tool) } /** - * Endpoints that (a) are fully satisfied by the complete granted-scope set AND (b) require at least - * one of `capabilityScopes`. Used by the review step to group enabled endpoints under the capability - * that contributes them, while still honouring dual-scope requirements (a dual-scope endpoint only + * Endpoints that are enabled by the complete granted-scope set AND owe that to `capabilityScopes`: + * some fully-granted group must contain at least one capability scope. Used by the review step to + * group enabled endpoints under the capability that contributes them (a multi-scope group only * appears once all its scopes are granted, and shows under each contributing capability). + * + * An endpoint enabled purely through a group that holds none of `capabilityScopes` is not + * attributed to this capability, and an ungated item is never attributed to any capability. */ export const getEnabledEndpointsForCapability = ({ capabilityScopes, @@ -116,11 +145,11 @@ export const getEnabledEndpointsForCapability = ({ const granted = new Set(allGrantedScopes) const capability = new Set(capabilityScopes) return Object.entries(permissionScopeMap.endpoints) - .filter( - ([, required]) => - required.length > 0 && - required.every((scope) => granted.has(scope)) && - required.some((scope) => capability.has(scope)) + .filter(([, groups]) => + groups.some( + (group) => + group.some((scope) => capability.has(scope)) && group.every((scope) => granted.has(scope)) + ) ) .map(([raw]) => splitEndpoint(raw)) } @@ -146,6 +175,59 @@ export const getMcpToolsForScopes = ({ return Array.from(tools) } +/** + * The endpoint's payload changed endpoint/tool requirements from a flat conjunctive scope list + * (string[]) to alternative groups (string[][], ScopeGroupAlternatives) at the same URL, and the + * response is CDN-cached (s-maxage + stale-while-revalidate). Right after a deploy a new client + * can still receive a stale flat payload; evaluating it as groups would call group.every on a + * string and crash the render. Interpret a flat list as what it was β€” a single conjunctive group. + */ +const isScopeGroup = (value: unknown): value is ScopeGroup => + Array.isArray(value) && value.every((scope) => typeof scope === 'string') + +const normalizeGroups = (groups: unknown): ScopeGroupAlternatives => { + // A non-array value is not a shape any server ever emitted β€” fail closed (nobody) rather + // than crash the defense itself. + if (!Array.isArray(groups)) return [] + if (groups.every(isScopeGroup)) return groups + if (groups.every((scope): scope is string => typeof scope === 'string')) return [groups] + return [] +} + +const scopeMapEntrySchema = z.object({ + endpoints: z.array(z.string()), + mcp_tools: z.array(z.string()), +}) + +// Group values stay unknown here β€” normalizeGroups upgrades legacy flat payloads and fails closed +// per entry, which a strict schema would turn into all-or-nothing. `.catch({})` empties a field +// whose record shape is wrong without discarding the salvageable rest of the payload. +const rawPermissionScopeMapSchema = z.object({ + scopes: z.record(scopeMapEntrySchema).catch({}), + endpoints: z.record(z.unknown()).catch({}), + mcp_tools: z.record(z.unknown()).catch({}), +}) + +const EMPTY_PERMISSION_SCOPE_MAP: PermissionScopeMap = { scopes: {}, endpoints: {}, mcp_tools: {} } + +export const normalizePermissionScopeMap = (raw: unknown): PermissionScopeMap => { + const parsed = rawPermissionScopeMapSchema.safeParse(raw) + // A non-object body (null, an error string) has nothing salvageable β€” fail closed (empty map) + // instead of throwing out of the query fn. + if (!parsed.success) return EMPTY_PERMISSION_SCOPE_MAP + + const { scopes, endpoints, mcp_tools } = parsed.data + return { + scopes, + endpoints: Object.fromEntries( + Object.entries(endpoints).map(([endpoint, groups]) => [endpoint, normalizeGroups(groups)]) + ), + mcp_tools: Object.fromEntries( + Object.entries(mcp_tools).map(([tool, groups]) => [tool, normalizeGroups(groups)]) + ), + } +} + export async function getGetScopedTokenPermissionsForScope(signal?: AbortSignal) { const response = await fetch(`${BASE_PATH}/api/scoped-access-token-permissions`, { signal, @@ -175,13 +257,14 @@ export async function getGetScopedTokenPermissionsForScope(signal?: AbortSignal) ) } - return await response.json() + const payload: unknown = await response.json() + return normalizePermissionScopeMap(payload) } export type ScopedAccessTokenPermissionsForScopeError = ResponseError -export const useGetEnabledEndpointsForCapability = () => { - return useQuery({ +export const useGetEnabledEndpointsForCapability = () => { + return useQuery({ queryKey: scopedAccessTokenKeys.permissions(), queryFn: ({ signal }) => getGetScopedTokenPermissionsForScope(signal), }) diff --git a/apps/studio/types/base.ts b/apps/studio/types/base.ts index 089e876b3fa..23852a697bc 100644 --- a/apps/studio/types/base.ts +++ b/apps/studio/types/base.ts @@ -77,7 +77,11 @@ export interface Permission { organization_slug: string resources: string[] restrictive?: boolean - project_refs: string[] + /** + * Projects the row is limited to. Organization-wide rows arrive as [] or null β€” the API + * contract is nullable and some view-synthesized rows serialize as null. + */ + project_refs: string[] | null } export interface ResponseFailure { From e8f5120dc5518c0dd6c69a7cd84ab8c7622f3e90 Mon Sep 17 00:00:00 2001 From: "kemal.earth" <606977+kemaldotearth@users.noreply.github.com> Date: Fri, 7 Aug 2026 10:09:21 +0100 Subject: [PATCH 72/83] feat(studio): enforce expiry scoped pat (#48811) ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES Waiting on #48809 ## Summary by CodeRabbit * **New Features** * Added custom access-token expiration date limits, allowing dates from today through one year ahead. * Date pickers now enforce configured minimum and maximum date boundaries. * **Updates** * Removed the option to create non-expiring access tokens. * Expiration is now required when creating classic access tokens. * Improved form reset behavior and expiry tracking. * **Tests** * Added validation coverage for required, valid, and out-of-range custom expiration dates. --------- Co-authored-by: Wen Bo Xie Co-authored-by: Claude Opus 5 (1M context) --- .../AccessTokens/AccessToken.constants.ts | 2 - .../AccessTokens/AccessToken.utils.test.ts | 4 -- .../Account/AccessTokens/AccessToken.utils.ts | 5 ++- .../AccessTokens/Classic/NewTokenDialog.tsx | 30 ++++----------- .../Form/NewScopedTokenForm.utils.test.ts | 37 +++++++++++++++++++ .../Scoped/Form/NewScopedTokenForm.utils.ts | 13 +++++++ .../AccessTokens/Scoped/Form/TokenDetails.tsx | 9 ++++- .../studio/components/ui/DatePicker/index.tsx | 7 ++++ 8 files changed, 75 insertions(+), 32 deletions(-) create mode 100644 apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenForm.utils.test.ts diff --git a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.constants.ts b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.constants.ts index e3df791f6ca..847b29fd213 100644 --- a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.constants.ts +++ b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.constants.ts @@ -4,7 +4,6 @@ import { components } from 'api-types' export type ScopedAccessTokenPermission = components['schemas']['CreateScopedAccessTokenBody']['permissions'][number] -export const NON_EXPIRING_TOKEN_VALUE = 'never' export const CUSTOM_EXPIRY_VALUE = 'custom' export const EXPIRES_AT_OPTIONS = { @@ -12,7 +11,6 @@ export const EXPIRES_AT_OPTIONS = { day: { value: 'day', label: '1 day' }, week: { value: 'week', label: '7 days' }, month: { value: 'month', label: '30 days' }, - never: { value: NON_EXPIRING_TOKEN_VALUE, label: 'Never' }, custom: { value: CUSTOM_EXPIRY_VALUE, label: 'Custom' }, } as const diff --git a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.utils.test.ts b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.utils.test.ts index d037f8f25a9..c33b5eac4c4 100644 --- a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.utils.test.ts +++ b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.utils.test.ts @@ -358,10 +358,6 @@ describe('getExpirationDate', () => { expect(result).toBe(dayjs(FIXED_DATE).add(30, 'days').toISOString()) }) - it('should return undefined for "never"', () => { - expect(getExpirationDate('never')).toBeUndefined() - }) - it('should return undefined for an unknown key', () => { expect(getExpirationDate('unknown')).toBeUndefined() }) diff --git a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.utils.ts b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.utils.ts index 2c9cb737a18..250d286c43d 100644 --- a/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.utils.ts +++ b/apps/studio/components/interfaces/Account/AccessTokens/AccessToken.utils.ts @@ -8,6 +8,9 @@ import { BaseToken, } from './AccessToken.types' +/** Custom expiry dates are capped at one year from today, for classic and scoped tokens alike. */ +export const getMaxCustomExpiryDate = (): dayjs.Dayjs => dayjs().add(1, 'year').endOf('day') + export const handleSortChange = ( currentSort: AccessTokenSort, column: AccessTokenSortColumn, @@ -141,8 +144,6 @@ export const getExpirationDate = (key: string): string | undefined => { return dayjs().add(7, 'days').toISOString() case 'month': return dayjs().add(30, 'days').toISOString() - case 'never': - return undefined default: return undefined } diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Classic/NewTokenDialog.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Classic/NewTokenDialog.tsx index b66bc48a412..6cb812ffa14 100644 --- a/apps/studio/components/interfaces/Account/AccessTokens/Classic/NewTokenDialog.tsx +++ b/apps/studio/components/interfaces/Account/AccessTokens/Classic/NewTokenDialog.tsx @@ -22,18 +22,13 @@ import { SelectItem, SelectTrigger, SelectValue, - WarningIcon, } from 'ui' import { Admonition } from 'ui-patterns/Admonition' import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' import { z } from 'zod' -import { - CUSTOM_EXPIRY_VALUE, - EXPIRES_AT_OPTIONS, - NON_EXPIRING_TOKEN_VALUE, -} from '../AccessToken.constants' -import { getExpirationDate } from '../AccessToken.utils' +import { CUSTOM_EXPIRY_VALUE, EXPIRES_AT_OPTIONS } from '../AccessToken.constants' +import { getExpirationDate, getMaxCustomExpiryDate } from '../AccessToken.utils' import { DatePicker } from '@/components/ui/DatePicker' import { useAccessTokenCreateMutation, @@ -45,10 +40,7 @@ const formId = 'new-access-token-form' const TokenSchema = z.object({ tokenName: z.string().min(1, 'Please enter a name for the token'), - expiresAt: z.preprocess( - (val) => (val === NON_EXPIRING_TOKEN_VALUE ? undefined : val), - z.string().optional() - ), + expiresAt: z.string().min(1, 'Please select an expiry'), }) export interface NewAccessTokenDialogProps { @@ -81,7 +73,7 @@ export const NewTokenDialog = ({ if (isCustomExpiry && customExpiryDate) { expiresAt = customExpiryDate.date } else { - expiresAt = getExpirationDate(values.expiresAt || '') + expiresAt = getExpirationDate(values.expiresAt) } createAccessToken( @@ -90,7 +82,7 @@ export const NewTokenDialog = ({ onSuccess: (data) => { track('access_token_created', { tokenType: 'classic', - expiryPreset: values.expiresAt || 'never', + expiryPreset: values.expiresAt, }) toast.success('Access token created successfully') onCreateToken(data) @@ -101,7 +93,7 @@ export const NewTokenDialog = ({ } const handleClose = () => { - form.reset({ tokenName: '' }) + form.reset() setCustomExpiryDate(undefined) setIsCustomExpiry(false) onOpenChange(false) @@ -228,21 +220,13 @@ export const NewTokenDialog = ({ contentSide="top" to={customExpiryDate?.date} minDate={new Date()} - maxDate={dayjs().add(1, 'year').toDate()} + maxDate={getMaxCustomExpiryDate().toDate()} onChange={(date) => { if (date.to) handleCustomDateChange({ date: date.to }) }} /> )}
    - {field.value === NON_EXPIRING_TOKEN_VALUE && ( -
    - - - Make sure to keep your non-expiring token safe and secure. - -
    - )} )} /> diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenForm.utils.test.ts b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenForm.utils.test.ts new file mode 100644 index 00000000000..ec481a840bb --- /dev/null +++ b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenForm.utils.test.ts @@ -0,0 +1,37 @@ +import dayjs from 'dayjs' +import { describe, expect, test } from 'vitest' + +import { TokenFormSchema } from './NewScopedTokenForm.utils' + +const BASE_VALUES = { + tokenName: 'test', + expiresAt: 'custom', + resourceAccess: 'account', + organizationSlugs: [], + projectRefs: [], + permissions: {}, +} + +describe('TokenFormSchema custom expiry', () => { + test('requires a date when the preset is custom', () => { + const result = TokenFormSchema.safeParse(BASE_VALUES) + expect(result.success).toBe(false) + }) + test('accepts a date within one year from today', () => { + const result = TokenFormSchema.safeParse({ + ...BASE_VALUES, + customExpiryDate: dayjs().add(1, 'year').startOf('day').toISOString(), + }) + expect(result.success).toBe(true) + }) + test('rejects a date more than one year from today', () => { + const result = TokenFormSchema.safeParse({ + ...BASE_VALUES, + customExpiryDate: dayjs().add(1, 'year').add(1, 'day').endOf('day').toISOString(), + }) + expect(result.success).toBe(false) + expect(result.error?.issues.map((issue) => issue.message)).toContain( + 'Expiry date must be within one year from today' + ) + }) +}) diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenForm.utils.ts b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenForm.utils.ts index 5adb798be82..3a2f288352f 100644 --- a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenForm.utils.ts +++ b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/NewScopedTokenForm.utils.ts @@ -2,6 +2,7 @@ import dayjs from 'dayjs' import { z } from 'zod' import type { PermissionMode } from '../../AccessToken.permissions' +import { getMaxCustomExpiryDate } from '../../AccessToken.utils' export const EXPIRY_PRESETS = ['24h', '7d', '30d', '90d', 'custom'] as const export type ExpiryPreset = (typeof EXPIRY_PRESETS)[number] @@ -69,6 +70,18 @@ export const TokenFormSchema = z }) } + if ( + data.expiresAt === 'custom' && + data.customExpiryDate && + dayjs(data.customExpiryDate).isAfter(getMaxCustomExpiryDate()) + ) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + message: 'Expiry date must be within one year from today', + path: ['customExpiryDate'], + }) + } + if (data.resourceAccess === 'project') { if (data.organizationSlugs.length === 0) { ctx.addIssue({ diff --git a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/TokenDetails.tsx b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/TokenDetails.tsx index d4261710611..64a91e603df 100644 --- a/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/TokenDetails.tsx +++ b/apps/studio/components/interfaces/Account/AccessTokens/Scoped/Form/TokenDetails.tsx @@ -22,6 +22,7 @@ import { } from 'ui-patterns/DatePicker' import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' +import { getMaxCustomExpiryDate } from '../../AccessToken.utils' import { EXPIRY_OPTIONS, getDefaultCustomExpiryDate, @@ -35,6 +36,7 @@ interface TokenDetailsProps { export const TokenDetails = ({ control, setValue }: TokenDetailsProps) => { const customExpiryDate = useWatch({ control, name: 'customExpiryDate' }) + const maxExpiryDate = getMaxCustomExpiryDate().toDate() const handleExpiryChange = (value: string) => { setValue('expiresAt', value as TokenFormValues['expiresAt'], { shouldValidate: true }) @@ -115,7 +117,12 @@ export const TokenDetails = ({ control, setValue }: TokenDetailsProps) => { ) } initialFocus - disabled={{ before: dayjs().startOf('day').toDate() }} + startMonth={dayjs().startOf('month').toDate()} + endMonth={maxExpiryDate} + disabled={{ + before: dayjs().startOf('day').toDate(), + after: maxExpiryDate, + }} /> diff --git a/apps/studio/components/ui/DatePicker/index.tsx b/apps/studio/components/ui/DatePicker/index.tsx index bcc24d54698..df04c8977dd 100644 --- a/apps/studio/components/ui/DatePicker/index.tsx +++ b/apps/studio/components/ui/DatePicker/index.tsx @@ -82,6 +82,9 @@ export function DatePicker({ const disabledDays = useMemo(() => calculateDisabledDays(minDate, maxDate), [minDate, maxDate]) + const startMonth = minDate ? dayjs(minDate).startOf('month').toDate() : undefined + const endMonth = maxDate ? dayjs(maxDate).endOf('month').toDate() : undefined + const clampDateToRange = useCallback( (date: Date | null) => { if (!date) return date @@ -286,6 +289,8 @@ export function DatePicker({ {selectsRange ? ( { @@ -295,6 +300,8 @@ export function DatePicker({ ) : ( { From 2e633a3fbebe7d86d0eb7dda502d538367bbebe8 Mon Sep 17 00:00:00 2001 From: shaziya <99940835+shaziyabandukia@users.noreply.github.com> Date: Fri, 7 Aug 2026 03:05:23 -0700 Subject: [PATCH 73/83] Add blog post: Supabase is now a connector on Perplexity Computer (#48776) --- ...now-a-connector-on-perplexity-computer.mdx | 45 ++++++++++++++++++ .../og.png | Bin 0 -> 233001 bytes .../thumb.png | Bin 0 -> 182130 bytes 3 files changed, 45 insertions(+) create mode 100644 apps/www/_blog/2026-08-07-supabase-is-now-a-connector-on-perplexity-computer.mdx create mode 100644 apps/www/public/images/blog/2026-08-07-supabase-is-now-a-connector-on-perplexity-computer/og.png create mode 100644 apps/www/public/images/blog/2026-08-07-supabase-is-now-a-connector-on-perplexity-computer/thumb.png diff --git a/apps/www/_blog/2026-08-07-supabase-is-now-a-connector-on-perplexity-computer.mdx b/apps/www/_blog/2026-08-07-supabase-is-now-a-connector-on-perplexity-computer.mdx new file mode 100644 index 00000000000..8169c94f88f --- /dev/null +++ b/apps/www/_blog/2026-08-07-supabase-is-now-a-connector-on-perplexity-computer.mdx @@ -0,0 +1,45 @@ +--- +title: 'Supabase is now a connector on Perplexity Computer' +description: 'Supabase is now a connector on Perplexity Computer. Query your Postgres data, look up users, and invoke Edge Functions from a Perplexity chat.' +author: natalie_roberge +date: '2026-08-07' +categories: + - product +tags: + - ai + - perplexity + - integrations +imgSocial: '2026-08-07-supabase-is-now-a-connector-on-perplexity-computer/og.png' +imgThumb: '2026-08-07-supabase-is-now-a-connector-on-perplexity-computer/thumb.png' +toc_depth: 2 +--- + +Supabase is available as a [connector on Perplexity Computer](https://www.perplexity.ai/connectors/supabase?utm_source=supabase&utm_medium=partner&utm_campaign=builders_blog_%2Baug6). With Supabase as a persistent data layer, Computer can read from and write back to your Postgres tables, keeping state across runs without custom glue code. + +[Perplexity Computer](https://www.perplexity.ai/computer) is an agent that runs multi-step work across 400+ apps, including GitHub, Vercel, Datadog, Stripe, and Slack. Connect your Supabase project and your database joins that loop. + +
    +
  • -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

    ;Y({?un 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 -(>R80ac-FqJ-Hi%9;- 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≧C|m7cjI-GR}J~73t_kb!AS^v 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ℑiX{#qTC9b0t` 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 l=+e94L1a{&Y5-9ybNf!+`J#y znXUZ8slGEEI)6c2f7;NzfEH38_vV!6pEc^3qhG3q?ogTbqIpN%99Hwz-ac_Z9mA{g zxW)3BlnTF0iq8@(z&#w{G7VQv=ikaNA7yM;3xj{_lg(84hErEeQ8^%>@^T2C?n|y_ ztt>9`lHb(tOHhaF3^su9k`1=NpN~>YO?DaMD#PrJjEPT@yKK@DGOfJal;+sZcqc@K z+#<`Y(dk_N4F3L}p;RCoS�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�WE7Zp46BNH>g!rN2eWo5fN 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