Merge branch 'master' into dnywh/experiment/recents-menu
No files matched your search
@@ -1849,6 +1849,10 @@ export const realtime: NavMenuConstant = {
|
||||
name: 'Guides',
|
||||
url: undefined,
|
||||
items: [
|
||||
{
|
||||
name: 'Realtime Reports',
|
||||
url: '/guides/realtime/reports' as `/${string}`,
|
||||
},
|
||||
{
|
||||
name: 'Subscribing to Database Changes',
|
||||
url: '/guides/realtime/subscribing-to-database-changes' as `/${string}`,
|
||||
|
||||
@@ -23,9 +23,9 @@ className="rounded-lg border border-foreground/10 bg-surface-100 text-foreground
|
||||
3. Authenticate with HTTP Basic Auth:
|
||||
|
||||
- **Username**: `service_role`
|
||||
- **Password**: a service role secret (JWT) from [**Project Settings > JWT**](/dashboard/project/_/settings/jwt) or any other Secret API key from [**Project Settings > API keys** (opens in a new tab)](/dashboard/project/_/settings/api-keys)
|
||||
- **Password**: a **Secret API key** (`sb_secret_...`). You can create/copy it in [**Project Settings → API Keys**](/dashboard/project/_/settings/api-keys). For more context, see [Understanding API keys](/docs/guides/api/api-keys).
|
||||
|
||||
Testing locally is as simple as running `curl` with your service role secret:
|
||||
Testing locally is as simple as running `curl` with your Secret API key:
|
||||
|
||||
```bash
|
||||
curl <project-url>/customer/v1/privileged/metrics \
|
||||
@@ -35,7 +35,7 @@ className="rounded-lg border border-foreground/10 bg-surface-100 text-foreground
|
||||
You can provision long-lived automation tokens in two ways:
|
||||
|
||||
- Create an account access token once at [**Account Settings > Access Tokens**](/dashboard/account/tokens) and reuse it wherever you configure observability tooling.
|
||||
- **Optional**: programmatically exchange an access token for project API keys via the [Management API ](/docs/reference/api/management-projects-api-keys-retrieve').
|
||||
- **Optional**: programmatically exchange an access token for project API keys via the [Management API](/docs/reference/api/management-projects-api-keys-retrieve).
|
||||
|
||||
```bash
|
||||
# (Optional) Exchange an account access token for project API keys
|
||||
|
||||
@@ -7,6 +7,17 @@ The next step requires a callback URL, which looks like this: `https://<project-
|
||||
|
||||
<Admonition type="note">
|
||||
|
||||
#### Local development
|
||||
|
||||
When testing OAuth locally with the Supabase CLI, ensure your OAuth provider
|
||||
is configured with the local Supabase Auth callback URL:
|
||||
|
||||
http://localhost:54321/auth/v1/callback
|
||||
|
||||
If this callback URL is missing or misconfigured, OAuth sign-in may fail or not redirect correctly during local development.
|
||||
|
||||
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).
|
||||
|
||||
</Admonition>
|
||||
@@ -20,7 +20,7 @@ This section covers the [general configuration options](/dashboard/project/_/aut
|
||||
- [Audit Logs (BETA)](/dashboard/project/_/auth/audit-logs) to track and monitor auth events in your project.
|
||||
- [Performance](/dashboard/project/_/auth/performance) to configure and optimize authentication server settings.
|
||||
|
||||
Supabase Auth provides these [general configuration options](/dashboard/project/_/settings/auth) to control user access to your application:
|
||||
Supabase Auth provides these [general configuration options](/dashboard/project/_/auth/providers) to control user access to your application:
|
||||
|
||||
- **Allow new users to sign up**: Users will be able to sign up. If this config is disabled, only existing users can sign in.
|
||||
|
||||
|
||||
@@ -31,6 +31,19 @@ Setting up OAuth with Azure consists of four broad steps:
|
||||
|
||||
## Obtain a client ID and secret
|
||||
|
||||
### Local development with Azure OAuth
|
||||
|
||||
Azure does not allow `127.0.0.1` as a redirect URI hostname and requires
|
||||
the use of `localhost`.
|
||||
|
||||
To enable Azure OAuth during local Supabase development, configure the
|
||||
Supabase API external URL in your `config.toml`:
|
||||
|
||||
```toml
|
||||
[api]
|
||||
external_url = "http://localhost:54321"
|
||||
```
|
||||
|
||||
- Once your app has been registered, the client ID can be found under the [list of app registrations](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps) under the column titled _Application (client) ID_.
|
||||
- You can also find it in the app overview screen.
|
||||
- Place the Client ID in the Azure configuration screen in the Supabase Auth dashboard.
|
||||
|
||||
@@ -67,7 +67,7 @@ Regardless of whether you use application code or Google's pre-built solutions t
|
||||
- Add `http://localhost:<port>` while developing locally. Remember to remove this when your application [goes into production](/docs/guides/deployment/going-into-prod).
|
||||
1. Under **Authorized redirect URIs** add your Supabase project's callback URL.
|
||||
- Access it from the [Google provider page on the Dashboard](/dashboard/project/_/auth/providers?provider=Google).
|
||||
- For local development, use `http://localhost:3000/auth/v1/callback`.
|
||||
- For local development, use `http://127.0.0.1:54321/auth/v1/callback`.
|
||||
1. Click `Create` and make sure you save the Client ID and Client Secret.
|
||||
- Add these values to the [Google provider page on the Dashboard](/dashboard/project/_/auth/providers?provider=Google).
|
||||
|
||||
|
||||
@@ -120,6 +120,19 @@ Future<void> signInWithX() async {
|
||||
```
|
||||
|
||||
</TabPanel>
|
||||
<$Show if="sdk:swift">
|
||||
<TabPanel id="swift" label="Swift">
|
||||
|
||||
When your user signs in, call [`signInWithOAuth(provider:)`](/docs/reference/swift/auth-signinwithoauth) with `.x` as the `provider`:
|
||||
|
||||
```swift
|
||||
func signInWithX() async throws {
|
||||
try await supabase.auth.signInWithOAuth(provider: .x)
|
||||
}
|
||||
```
|
||||
|
||||
</TabPanel>
|
||||
</$Show>
|
||||
<$Show if="sdk:kotlin">
|
||||
<TabPanel id="kotlin" label="Kotlin">
|
||||
|
||||
@@ -173,6 +186,19 @@ Future<void> signOut() async {
|
||||
```
|
||||
|
||||
</TabPanel>
|
||||
<$Show if="sdk:swift">
|
||||
<TabPanel id="swift" label="Swift">
|
||||
|
||||
When your user signs out, call [signOut()](/docs/reference/swift/auth-signout) to remove them from the browser session:
|
||||
|
||||
```swift
|
||||
func signOut() async throws {
|
||||
try await supabase.auth.signOut()
|
||||
}
|
||||
```
|
||||
|
||||
</TabPanel>
|
||||
</$Show>
|
||||
<$Show if="sdk:kotlin">
|
||||
<TabPanel id="kotlin" label="Kotlin">
|
||||
|
||||
|
||||
@@ -109,31 +109,41 @@ If a setting you need is not yet configurable, [share your use case with us](/da
|
||||
|
||||
The following parameters are available for overrides:
|
||||
|
||||
1. [checkpoint_timeout](https://www.postgresql.org/docs/current/runtime-config-wal.html#GUC-CHECKPOINT-TIMEOUT)
|
||||
2. [effective_cache_size](https://www.postgresql.org/docs/current/runtime-config-query.html#GUC-EFFECTIVE-CACHE-SIZE)
|
||||
3. [hot_standby_feedback](https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-HOT-STANDBY-FEEDBACK)
|
||||
4. [logical_decoding_work_mem](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-LOGICAL-DECODING-WORK-MEM) (CLI only)
|
||||
5. [maintenance_work_mem](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-MAINTENANCE-WORK-MEM)
|
||||
6. [max_connections](https://www.postgresql.org/docs/current/runtime-config-connection.html#GUC-MAX-CONNECTIONS) (CLI only. Be aware of [these considerations](/docs/guides/troubleshooting/how-to-change-max-database-connections-_BQ8P5) before modifying)
|
||||
7. [max_locks_per_transaction](https://www.postgresql.org/docs/current/runtime-config-locks.html#GUC-MAX-LOCKS-PER-TRANSACTION) (CLI only)
|
||||
8. [max_parallel_maintenance_workers](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-MAX-PARALLEL-MAINTENANCE-WORKERS)
|
||||
9. [max_parallel_workers_per_gather](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-MAX-PARALLEL-WORKERS-PER-GATHER)
|
||||
10. [max_parallel_workers](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-MAX-PARALLEL-WORKERS)
|
||||
11. [max_replication_slots](https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-MAX-REPLICATION-SLOTS) (CLI only)
|
||||
12. [max_slot_wal_keep_size](https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-MAX-SLOT-WAL-KEEP-SIZE) (CLI only)
|
||||
13. [max_standby_archive_delay](https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-MAX-STANDBY-ARCHIVE-DELAY) (CLI only)
|
||||
14. [max_standby_streaming_delay](https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-MAX-STANDBY-STREAMING-DELAY) (CLI only)
|
||||
15. [max_wal_size](https://www.postgresql.org/docs/current/runtime-config-wal.html#GUC-MAX-WAL-SIZE) (CLI only)
|
||||
16. [max_wal_senders](https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-MAX-WAL-SENDERS) (CLI only)
|
||||
17. [max_worker_processes](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-MAX-WORKER-PROCESSES) (CLI only)
|
||||
18. [session_replication_role](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-SESSION-REPLICATION-ROLE)
|
||||
19. [shared_buffers](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-SHARED-BUFFERS) (CLI only)
|
||||
20. [statement_timeout](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-STATEMENT-TIMEOUT)
|
||||
21. [track_activity_query_size](https://www.postgresql.org/docs/current/runtime-config-statistics.html#GUC-TRACK-ACTIVITY-QUERY-SIZE)
|
||||
22. [track_commit_timestamp](https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-TRACK-COMMIT-TIMESTAMP)
|
||||
23. [wal_keep_size](https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-WAL-KEEP-SIZE) (CLI only)
|
||||
24. [wal_sender_timeout](https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-WAL-SENDER-TIMEOUT) (CLI only)
|
||||
25. [work_mem](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-WORK-MEM)
|
||||
<Admonition type="note">
|
||||
|
||||
Parameters marked with **Restart: Yes** cause the CLI to automatically restart your database (and any read replicas) to apply the change. This may cause a brief interruption to active connections. You can use the [`--no-restart`](#managing-postgres-configuration-with-the-cli) flag to defer the restart.
|
||||
|
||||
</Admonition>
|
||||
|
||||
Use the examples below with `supabase --experimental --project-ref <project-ref> postgres-config update`:
|
||||
|
||||
| Parameter | Type | Restart | Example |
|
||||
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------- | ------- | --------------------------------------------- |
|
||||
| [checkpoint_timeout](https://www.postgresql.org/docs/current/runtime-config-wal.html#GUC-CHECKPOINT-TIMEOUT) | CLI only | No | `--config checkpoint_timeout=15min` |
|
||||
| [effective_cache_size](https://www.postgresql.org/docs/current/runtime-config-query.html#GUC-EFFECTIVE-CACHE-SIZE) | CLI + SQL | No | `--config effective_cache_size=8GB` |
|
||||
| [hot_standby_feedback](https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-HOT-STANDBY-FEEDBACK) | CLI only | No | `--config hot_standby_feedback=true` |
|
||||
| [logical_decoding_work_mem](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-LOGICAL-DECODING-WORK-MEM) | CLI + SQL | No | `--config logical_decoding_work_mem=128MB` |
|
||||
| [maintenance_work_mem](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-MAINTENANCE-WORK-MEM) | CLI + SQL | No | `--config maintenance_work_mem=512MB` |
|
||||
| [max_connections](https://www.postgresql.org/docs/current/runtime-config-connection.html#GUC-MAX-CONNECTIONS) (Be aware of [these considerations](/docs/guides/troubleshooting/how-to-change-max-database-connections-_BQ8P5)) | CLI only | Yes | `--config max_connections=200` |
|
||||
| [max_locks_per_transaction](https://www.postgresql.org/docs/current/runtime-config-locks.html#GUC-MAX-LOCKS-PER-TRANSACTION) | CLI only | Yes | `--config max_locks_per_transaction=128` |
|
||||
| [max_parallel_maintenance_workers](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-MAX-PARALLEL-MAINTENANCE-WORKERS) | CLI + SQL | No | `--config max_parallel_maintenance_workers=2` |
|
||||
| [max_parallel_workers_per_gather](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-MAX-PARALLEL-WORKERS-PER-GATHER) | CLI + SQL | No | `--config max_parallel_workers_per_gather=2` |
|
||||
| [max_parallel_workers](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-MAX-PARALLEL-WORKERS) | CLI + SQL | No | `--config max_parallel_workers=4` |
|
||||
| [max_replication_slots](https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-MAX-REPLICATION-SLOTS) | CLI only | Yes | `--config max_replication_slots=10` |
|
||||
| [max_slot_wal_keep_size](https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-MAX-SLOT-WAL-KEEP-SIZE) | CLI only | No | `--config max_slot_wal_keep_size=4GB` |
|
||||
| [max_standby_archive_delay](https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-MAX-STANDBY-ARCHIVE-DELAY) | CLI only | No | `--config max_standby_archive_delay=30s` |
|
||||
| [max_standby_streaming_delay](https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-MAX-STANDBY-STREAMING-DELAY) | CLI only | No | `--config max_standby_streaming_delay=30s` |
|
||||
| [max_wal_size](https://www.postgresql.org/docs/current/runtime-config-wal.html#GUC-MAX-WAL-SIZE) | CLI only | No | `--config max_wal_size=2GB` |
|
||||
| [max_wal_senders](https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-MAX-WAL-SENDERS) | CLI only | Yes | `--config max_wal_senders=10` |
|
||||
| [max_worker_processes](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-MAX-WORKER-PROCESSES) | CLI only | Yes | `--config max_worker_processes=8` |
|
||||
| [session_replication_role](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-SESSION-REPLICATION-ROLE) | CLI only | No | `--config session_replication_role=replica` |
|
||||
| [shared_buffers](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-SHARED-BUFFERS) | CLI only | Yes | `--config shared_buffers=256MB` |
|
||||
| [statement_timeout](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-STATEMENT-TIMEOUT) | CLI + SQL | No | `--config statement_timeout=60s` |
|
||||
| [track_activity_query_size](https://www.postgresql.org/docs/current/runtime-config-statistics.html#GUC-TRACK-ACTIVITY-QUERY-SIZE) | CLI only | Yes | `--config track_activity_query_size=2048B` |
|
||||
| [track_commit_timestamp](https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-TRACK-COMMIT-TIMESTAMP) | CLI only | Yes | `--config track_commit_timestamp=true` |
|
||||
| [wal_keep_size](https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-WAL-KEEP-SIZE) | CLI only | No | `--config wal_keep_size=1GB` |
|
||||
| [wal_sender_timeout](https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-WAL-SENDER-TIMEOUT) | CLI only | No | `--config wal_sender_timeout=60s` |
|
||||
| [work_mem](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-WORK-MEM) | CLI + SQL | No | `--config work_mem=64MB` |
|
||||
|
||||
#### Managing Postgres configuration with the CLI
|
||||
|
||||
|
||||
@@ -18,7 +18,13 @@ You might use database replication for:
|
||||
|
||||
## Replication methods
|
||||
|
||||
Supabase supports two methods for replicating your database to external destinations:
|
||||
Supabase supports three methods for replicating your database to external destinations:
|
||||
|
||||
### Read Replicas
|
||||
|
||||
Additional databases that are kept in sync with your Primary database. These read-only databases can be deployed across multiple regions, for lower latency and better resource management.
|
||||
|
||||
- [Set up Read Replicas](/docs/guides/platform/read-replicas)
|
||||
|
||||
### Replication
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ supabase functions deploy resend --no-verify-jwt
|
||||
|
||||
<Admonition type="caution">
|
||||
|
||||
When you deploy to Supabase, make sure that your `RESEND_API_KEY` is set in [Edge Function Secrets Management](/dashboard/project/_/settings/functions)
|
||||
When you deploy to Supabase, make sure that your `RESEND_API_KEY` is set in [Edge Function Secrets Management](/dashboard/project/_/functions/secrets)
|
||||
|
||||
</Admonition>
|
||||
|
||||
|
||||
@@ -95,7 +95,7 @@ You will also need to set secrets for your production Edge Functions. You can do
|
||||
|
||||
**Using the Dashboard**:
|
||||
|
||||
1. Visit [Edge Function Secrets Management](/dashboard/project/_/settings/functions) page in your Dashboard.
|
||||
1. Visit [Edge Function Secrets Management](/dashboard/project/_/functions/secrets) page in your Dashboard.
|
||||
2. Add the Key and Value for your secret and press Save
|
||||
|
||||
<Image
|
||||
|
||||
@@ -27,9 +27,11 @@ hideToc: true
|
||||
|
||||
<StepHikeCompact.Details title="Install the Supabase client library">
|
||||
|
||||
Install Supabase package dependency using Xcode by following Apple's [tutorial](https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).
|
||||
Add the [supabase-swift](https://github.com/supabase/supabase-swift) package to your app using the Swift Package Manager.
|
||||
|
||||
Make sure to add `Supabase` product package as dependency to the application.
|
||||
In Xcode, navigate to **File > Add Package Dependencies...** and enter the repository URL `https://github.com/supabase/supabase-swift` in the search bar. For detailed instructions, see Apple's [tutorial on adding package dependencies](https://developer.apple.com/documentation/xcode/adding-package-dependencies-to-your-app).
|
||||
|
||||
Make sure to add `Supabase` product package as a dependency to your application target.
|
||||
|
||||
</StepHikeCompact.Details>
|
||||
|
||||
@@ -76,7 +78,7 @@ hideToc: true
|
||||
|
||||
<StepHikeCompact.Code>
|
||||
|
||||
```swift name=Supabase.swift
|
||||
```swift name=Instrument.swift
|
||||
struct Instrument: Decodable, Identifiable {
|
||||
let id: Int
|
||||
let name: String
|
||||
@@ -100,6 +102,8 @@ hideToc: true
|
||||
<StepHikeCompact.Code>
|
||||
|
||||
```swift name=ContentView.swift
|
||||
import SwiftUI
|
||||
|
||||
struct ContentView: View {
|
||||
|
||||
@State var instruments: [Instrument] = []
|
||||
@@ -138,3 +142,12 @@ hideToc: true
|
||||
</StepHikeCompact.Step>
|
||||
|
||||
</StepHikeCompact>
|
||||
|
||||
## Setting up deep links
|
||||
|
||||
If you want to implement authentication features like magic links or OAuth, you need to set up deep links to redirect users back to your app. For instructions on configuring custom URL schemes for your iOS app, see the [deep linking guide](/docs/guides/auth/native-mobile-deep-linking?platform=swift).
|
||||
|
||||
## Next steps
|
||||
|
||||
- Learn how to build a complete user management app with authentication in the [Swift tutorial](/docs/guides/getting-started/tutorials/with-swift)
|
||||
- Explore the [supabase-swift](https://github.com/supabase/supabase-swift) library on GitHub
|
||||
@@ -0,0 +1,369 @@
|
||||
---
|
||||
title: 'Realtime Reports'
|
||||
description: 'Reports to help debug Realtime issues'
|
||||
---
|
||||
|
||||
{/* supa-mdx-lint-disable Rule001HeadingCase */}
|
||||
|
||||
Realtime reports give insights into how your application uses Supabase Realtime, including connections, broadcast and change events, execution times, and lag.
|
||||
|
||||
These reports help you:
|
||||
|
||||
- Monitor connection counts and message volumes against your plan's quotas
|
||||
- Identify performance bottlenecks in RLS policies or database replication
|
||||
- Troubleshoot errors and connection issues
|
||||
- Plan capacity upgrades based on usage trends
|
||||
|
||||
<Admonition type="tip">
|
||||
|
||||
Access Realtime reports from **[Project Settings > Product Reports > Realtime](/dashboard/project/_/observability/realtime)** in your project dashboard.
|
||||
|
||||
</Admonition>
|
||||
|
||||
## Realtime reports overview
|
||||
|
||||
| Report | Available Plans | Description | Key Insights |
|
||||
| ----------------------------------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------- |
|
||||
| [Connected Clients](#connected-clients) | All | Number of connected clients | Total number of connected clients |
|
||||
| [Broadcast Events](#broadcast-events) | All | Number of broadcast events | Broadcast events sent by clients |
|
||||
| [Presence Events](#presence-events) | All | Number of presence events | Presence events sent by clients |
|
||||
| [Postgres Changes Events](#postgres-changes-events) | All | Number of Postgres changes events | Postgres changes events received by clients |
|
||||
| [Rate of Channel Joins](#rate-of-channel-joins) | All | Rate of channel joins | Rate of change of users joining channels |
|
||||
| [Message Payload Size](#message-payload-size) | All | Median size of message payloads sent | Understand the payload sizes sent and received by clients |
|
||||
| [Broadcast from Database Replication Lag](#broadcast-from-database-replication-lag) | Pro, Team, Enterprise | Median time between database commit and broadcast when using broadcast from database | Time taken from database change received and when it was broadcast to clients |
|
||||
| [(Read) Private Channel Subscription RLS Execution Time](#read-private-channel-subscription-rls-execution-time) | Pro, Team, Enterprise | Execution median time of RLS (Row Level Security) to subscribe to a private channel | RLS policy impact on time to validate if user can join private channel |
|
||||
| [(Write) Private Channel Subscription RLS Execution Time](#write-private-channel-subscription-rls-execution-time) | Pro, Team, Enterprise | Execution median time of RLS (Row Level Security) to publish to a private channel | RLS policy impact on time to validate if user can write to private channel |
|
||||
| [Total Requests](#total-requests) | All | Total requests | Total requests made to the Realtime API |
|
||||
| [Response Errors](#response-errors) | All | Response errors | Response errors from the Realtime API |
|
||||
| [Response Speed](#response-speed) | All | Response speed | Average response time from the Realtime API |
|
||||
|
||||
## Connected Clients
|
||||
|
||||
The Connected Clients report helps you monitor the total number of concurrent Realtime client connections to your project over time. This metric is essential for understanding your application's connection usage patterns and identifying when you're approaching your plan's connection limits.
|
||||
|
||||
The report displays the total number of connected Realtime clients, showing how connection counts fluctuate throughout the selected time period. Each client connection represents an active WebSocket connection to your Realtime service, which can subscribe to multiple channels for receiving real-time updates.
|
||||
|
||||
<Image
|
||||
alt="Connected Clients chart"
|
||||
zoomable
|
||||
src={{
|
||||
dark: '/docs/img/guides/platform/realtime/reports/connected-clients-chart-dark.png',
|
||||
light: '/docs/img/guides/platform/realtime/reports/connected-clients-chart-light.png',
|
||||
}}
|
||||
/>
|
||||
|
||||
### Actions you can take
|
||||
|
||||
| Action | Description | More information |
|
||||
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| Configure connection limit | Adjust the "Max concurrent connections" setting to increase or decrease the connection limit for your project | [Realtime Settings Guide](/docs/guides/realtime/settings) |
|
||||
| Upgrade plan | Increase available client connections. Connection limits vary by plan: Free (200), Pro (500), Pro no spend cap (10,000), Team (10,000), Enterprise (10,000+) | [Pricing and Plans](/docs/guides/platform/pricing) |
|
||||
| Review quotas | Understand connection limits and other Realtime quotas for your plan | [Realtime Quotas Reference](/docs/guides/realtime/quotas) |
|
||||
| Understand connection quota | Learn how the concurrent connections quota works and how to configure it for your plan | [Concurrent Peak Connections Quota Troubleshooting](/docs/troubleshooting/realtime-concurrent-peak-connections-quota-jdDqcp) |
|
||||
| Fix silent disconnections | Fix connection issues in background applications using heartbeat callbacks and Web Workers | [Handling Silent Disconnections in Background Apps](/docs/troubleshooting/realtime-handling-silent-disconnections-in-backgrounded-applications-592794) |
|
||||
| Check logs | Investigate connection errors and quota errors in your project dashboard | [Realtime Logs Dashboard](/dashboard/project/_/database/realtime-logs) |
|
||||
| Contact support | Request custom quota increases for Enterprise plans or discuss connection requirements | [Support Portal](/dashboard/support/new) |
|
||||
|
||||
## Broadcast Events
|
||||
|
||||
The Broadcast Events report helps you monitor the volume of broadcast messages sent through your Realtime channels over time. This metric is essential for understanding your application's real-time messaging patterns and identifying when you're approaching your plan's message throughput limits.
|
||||
|
||||
The report displays the total number of broadcast events sent by clients, showing message volume throughout the selected time period. Broadcast events are low-latency messages sent between users using Realtime's pub/sub pattern, which can be sent from client libraries, REST APIs, or directly from your database. Each event represents a message broadcast to subscribers of a specific channel topic.
|
||||
|
||||
<Image
|
||||
alt="Broadcast Events chart"
|
||||
zoomable
|
||||
src={{
|
||||
dark: '/docs/img/guides/platform/realtime/reports/broadcast-events-chart-dark.png',
|
||||
light: '/docs/img/guides/platform/realtime/reports/broadcast-events-chart-light.png',
|
||||
}}
|
||||
/>
|
||||
|
||||
### Actions you can take
|
||||
|
||||
| Action | Description | More information |
|
||||
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
|
||||
| Configure event limits | Adjust "Max events per second" and "Max payload size in KB" settings to optimize broadcast throughput and message size limits | [Realtime Settings Guide](/docs/guides/realtime/settings) |
|
||||
| Review quotas | Understand message per second limits (Free: 100, Pro: 500, Pro no spend cap/Team/Enterprise: 2,500) and broadcast payload size limits (Free: 256 KB, Pro+: 3,000 KB) | [Realtime Quotas Reference](/docs/guides/realtime/quotas) |
|
||||
| Check logs | Investigate broadcast errors or quota limit issues in your project dashboard | [Realtime Logs Dashboard](/dashboard/project/_/database/realtime-logs) |
|
||||
| Debug with logger | Enable logging to track messages sent and received, and diagnose broadcast delivery issues | [Debugging Realtime with Logger](/docs/troubleshooting/realtime-debugging-with-logger) |
|
||||
| Learn broadcast basics | Understand how to implement and optimize broadcast messaging in your application | [Broadcast Guide](/docs/guides/realtime/broadcast) |
|
||||
| Contact support | Request custom quota increases for Enterprise plans or discuss messaging requirements | [Support Portal](/dashboard/support/new) |
|
||||
|
||||
## Presence Events
|
||||
|
||||
The Presence Events report helps you monitor the volume of presence state updates sent through your Realtime channels over time. This metric is essential for understanding how your application tracks and synchronizes shared state between users, such as online status, user activity, or custom state information.
|
||||
|
||||
The report displays the total number of presence events sent by clients, showing state synchronization activity throughout the selected time period. Presence events occur when clients `track`, `update`, or `untrack` their presence state in a channel, triggering `sync`, `join`, or `leave` events. Unlike broadcast messages, presence state is persisted in the channel so new joiners immediately receive the current state without waiting for other users to send updates.
|
||||
|
||||
<Image
|
||||
alt="Presence Events chart"
|
||||
zoomable
|
||||
src={{
|
||||
dark: '/docs/img/guides/platform/realtime/reports/presence-events-chart-dark.png',
|
||||
light: '/docs/img/guides/platform/realtime/reports/presence-events-chart-light.png',
|
||||
}}
|
||||
/>
|
||||
|
||||
### Actions you can take
|
||||
|
||||
| Action | Description | More information |
|
||||
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
|
||||
| Configure presence limits | Adjust the "Max presence events per second" setting to optimize presence state update throughput | [Realtime Settings Guide](/docs/guides/realtime/settings) |
|
||||
| Review quotas | Understand presence messages per second limits (Free: 20, Pro: 50, Pro no spend cap/Team/Enterprise: 1,000) and presence keys per object limits (10 for most plans) | [Realtime Quotas Reference](/docs/guides/realtime/quotas) |
|
||||
| Check logs | Investigate presence errors or quota limit issues in your project dashboard | [Realtime Logs Dashboard](/dashboard/project/_/database/realtime-logs) |
|
||||
| Debug with logger | Enable logging to track presence events and diagnose state synchronization issues | [Debugging Realtime with Logger](/docs/troubleshooting/realtime-debugging-with-logger) |
|
||||
| Learn presence basics | Understand how to implement and optimize presence state tracking in your application | [Presence Guide](/docs/guides/realtime/presence) |
|
||||
| Contact support | Request custom quota increases for Enterprise plans or discuss presence requirements | [Support Portal](/dashboard/support/new) |
|
||||
|
||||
## Postgres Changes Events
|
||||
|
||||
The Postgres Changes Events report helps you monitor the volume of database change events (INSERT, UPDATE, DELETE) sent to your Realtime clients over time. This metric is essential for understanding how your application processes database changes and identifying potential performance bottlenecks or scaling issues.
|
||||
|
||||
The report displays the total number of Postgres change events received by clients, showing database change activity throughout the selected time period. Postgres Changes use logical replication to stream database changes from the Write-Ahead Log (WAL) to subscribed clients. Each event represents a database change that has been broadcast to clients subscribed to the relevant schema and table. Note that Postgres Changes process changes on a single thread to maintain order, which can create bottlenecks at scale compared to Broadcast.
|
||||
|
||||
<Image
|
||||
alt="Postgres Changes Events chart"
|
||||
zoomable
|
||||
src={{
|
||||
dark: '/docs/img/guides/platform/realtime/reports/postgres-changes-events-chart-dark.png',
|
||||
light: '/docs/img/guides/platform/realtime/reports/postgres-changes-events-chart-light.png',
|
||||
}}
|
||||
/>
|
||||
|
||||
### Actions you can take
|
||||
|
||||
| Action | Description | More information |
|
||||
| ------------------------ | ----------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
|
||||
| Review quotas | Understand Postgres change payload size limits (1,024 KB for all plans) and message throughput limits | [Realtime Quotas Reference](/docs/guides/realtime/quotas) |
|
||||
| Check logs | Investigate Postgres Changes errors or performance issues in your project dashboard | [Realtime Logs Dashboard](/dashboard/project/_/database/realtime-logs) |
|
||||
| Learn Postgres Changes | Understand limitations and best practices for using Postgres Changes | [Postgres Changes Guide](/docs/guides/realtime/postgres-changes) |
|
||||
| Migrate to Broadcast | For better scalability, consider using Broadcast with database triggers instead of Postgres Changes | [Broadcast Guide](/docs/guides/realtime/broadcast) |
|
||||
| Create database triggers | Understand how to create triggers that can send Broadcast messages on database events | [Database Triggers Guide](/docs/guides/database/postgres/triggers) |
|
||||
| Monitor replication | Monitor logical replication health and lag since Postgres Changes reads from the WAL | [Replication Monitoring Guide](/docs/guides/database/replication/replication-monitoring) |
|
||||
| Contact support | Discuss scaling strategies or custom solutions for high-volume database change subscriptions | [Support Portal](/dashboard/support/new) |
|
||||
|
||||
## Rate of Channel Joins
|
||||
|
||||
The Rate of Channel Joins report helps you monitor how quickly clients are joining Realtime channels over time. This metric is essential for understanding your application's channel subscription patterns and identifying when you're approaching your plan's channel join rate limits.
|
||||
|
||||
The report displays the rate of channel joins per second, showing how frequently clients subscribe to channels throughout the selected time period. A channel join occurs whenever a client subscribes to a channel topic to receive real-time updates. Each client connection can join multiple channels (up to 100 per connection for most plans), and the join rate measures how many of these subscriptions happen per second across your entire project.
|
||||
|
||||
<Image
|
||||
alt="Rate of Channel Joins chart"
|
||||
zoomable
|
||||
src={{
|
||||
dark: '/docs/img/guides/platform/realtime/reports/rate-of-channel-joins-chart-dark.png',
|
||||
light: '/docs/img/guides/platform/realtime/reports/rate-of-channel-joins-chart-light.png',
|
||||
}}
|
||||
/>
|
||||
|
||||
### Actions you can take
|
||||
|
||||
| Action | Description | More information |
|
||||
| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
|
||||
| Review quotas | Understand channel joins per second limits (Free: 100, Pro: 500, Pro no spend cap/Team/Enterprise: 2,500) and channels per connection limits (100 for most plans) | [Realtime Quotas Reference](/docs/guides/realtime/quotas) |
|
||||
| Check logs | Investigate `too_many_joins` errors or channel join failures in your project dashboard | [Realtime Logs Dashboard](/dashboard/project/_/database/realtime-logs) |
|
||||
| Fix channel errors | Learn how to properly manage channel lifecycle and prevent channel leaks in your application | [TooManyChannels Error Troubleshooting](/docs/troubleshooting/realtime-too-many-channels-error) |
|
||||
| Learn channel basics | Understand how Realtime channels work and best practices for channel management | [Realtime Channels Concepts](/docs/guides/realtime/concepts#channels) |
|
||||
| Contact support | Request custom quota increases for Enterprise plans or discuss high-volume channel join requirements | [Support Portal](/dashboard/support/new) |
|
||||
|
||||
## Message Payload Size
|
||||
|
||||
The Message Payload Size report helps you monitor the median size of message payloads sent through your Realtime channels over time. This metric is essential for understanding how message size impacts performance, latency, and bandwidth usage in your real-time application.
|
||||
|
||||
The report displays the median payload size in bytes, showing how message sizes fluctuate throughout the selected time period. Payload size directly affects message throughput and latency—larger payloads require more bandwidth and processing time, which can increase latency and reduce the number of messages your system can handle per second. Monitoring this metric helps you optimize your message structure and identify opportunities to reduce payload sizes for better performance.
|
||||
|
||||
<Image
|
||||
alt="Message Payload Size chart"
|
||||
zoomable
|
||||
src={{
|
||||
dark: '/docs/img/guides/platform/realtime/reports/message-payload-size-chart-dark.png',
|
||||
light: '/docs/img/guides/platform/realtime/reports/message-payload-size-chart-light.png',
|
||||
}}
|
||||
/>
|
||||
|
||||
### Actions you can take
|
||||
|
||||
| Action | Description | More information |
|
||||
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
|
||||
| Configure payload limits | Adjust the "Max payload size in KB" setting to increase or decrease the maximum message size allowed | [Realtime Settings Guide](/docs/guides/realtime/settings) |
|
||||
| Review quotas | Understand payload size limits: Broadcast (Free: 256 KB, Pro+: 3,000 KB) and Postgres Changes (1,024 KB for all plans) | [Realtime Quotas Reference](/docs/guides/realtime/quotas) |
|
||||
| Check logs | Investigate payload-related errors or performance issues in your project dashboard | [Realtime Logs Dashboard](/dashboard/project/_/database/realtime-logs) |
|
||||
| Review benchmarks | Understand how payload size affects latency and throughput (larger payloads increase latency) | [Payload Size Performance Benchmarks](/docs/guides/realtime/benchmarks#broadcast-impact-of-payload-size) |
|
||||
| Debug query performance | Use `explain()` to analyze queries and identify performance bottlenecks that may be causing large payloads | [Query Performance Debugging Guide](/docs/guides/database/debugging-performance) |
|
||||
| Learn broadcast basics | Understand best practices for structuring broadcast messages and optimizing payload sizes | [Broadcast Guide](/docs/guides/realtime/broadcast) |
|
||||
| Contact support | Discuss payload optimization strategies or custom solutions for high-volume messaging | [Support Portal](/dashboard/support/new) |
|
||||
|
||||
## Broadcast From Database Replication Lag
|
||||
|
||||
The Broadcast from Database Replication Lag report helps you monitor the median time between when a message is committed to your database and when it's broadcast to Realtime clients. This metric is essential for understanding the latency introduced by the database replication process when using broadcast from database.
|
||||
|
||||
The report displays the median replication lag in milliseconds, showing the delay between database commit and broadcast throughout the selected time period. When you use broadcast from database (by inserting messages into `realtime.messages`), Realtime reads changes from the Write-Ahead Log (WAL) using logical replication. The lag represents the time it takes for these changes to be processed and broadcast to subscribed clients. Higher lag values indicate delays in the replication pipeline, which can impact the real-time responsiveness of your application.
|
||||
|
||||
<Image
|
||||
alt="Broadcast from Database Replication Lag chart"
|
||||
zoomable
|
||||
src={{
|
||||
dark: '/docs/img/guides/platform/realtime/reports/broadcast-from-database-replication-lag-chart-dark.png',
|
||||
light:
|
||||
'/docs/img/guides/platform/realtime/reports/broadcast-from-database-replication-lag-chart-light.png',
|
||||
}}
|
||||
/>
|
||||
|
||||
### Actions you can take
|
||||
|
||||
| Action | Description | More information |
|
||||
| -------------------------- | ----------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
|
||||
| Check logs | Investigate replication errors or performance issues in your project dashboard | [Realtime Logs Dashboard](/dashboard/project/_/database/realtime-logs) |
|
||||
| Monitor database | Review database resource utilization, connection counts, and query performance that may affect replication | [Database Observability Dashboard](/dashboard/project/_/observability/database) |
|
||||
| Review replication metrics | Use `pg_stat_subscription`, `pg_replication_slots`, and other Postgres views to diagnose replication issues | [Manual Replication Monitoring Guide](/docs/guides/database/replication/manual-replication-monitoring) |
|
||||
| Debug database issues | Use CLI inspection tools to identify bloat, lock contention, and long-running queries affecting replication | [Database Inspection Tools Guide](/docs/guides/database/inspect) |
|
||||
| Optimize performance | Optimize query performance and connection management to reduce database load | [Performance Tuning Guide](/docs/guides/platform/performance) |
|
||||
| Configure timeouts | Configure statement timeouts to prevent long-running transactions from blocking replication | [Database Timeouts Guide](/docs/guides/database/postgres/timeouts) |
|
||||
| Learn broadcast from DB | Understand how broadcast from database works and best practices for implementation | [Broadcast from Database Guide](/docs/guides/realtime/broadcast#trigger-broadcast-messages-from-your-database) |
|
||||
| Contact support | Discuss replication lag issues or request assistance with database performance optimization | [Support Portal](/dashboard/support/new) |
|
||||
|
||||
## (Read) Private Channel Subscription RLS Execution Time
|
||||
|
||||
The (Read) Private Channel Subscription RLS Execution Time report helps you monitor the median time it takes to execute Row Level Security (RLS) policies when users subscribe to private channels. This metric is essential for understanding how RLS policy complexity impacts channel join latency and overall connection performance.
|
||||
|
||||
The report displays the median RLS execution time in milliseconds, showing how long it takes to validate user permissions when subscribing to private channels throughout the selected time period. When a user joins a private channel, Realtime checks RLS policies on the `realtime.messages` table to determine if the user has read access. This authorization check happens once per channel subscription and the result is cached for the duration of the connection. However, complex RLS policies with joins, function calls, or missing indexes can significantly increase this initial connection time.
|
||||
|
||||
<Image
|
||||
alt="(Read) Private Channel Subscription RLS Execution Time chart"
|
||||
zoomable
|
||||
src={{
|
||||
dark: '/docs/img/guides/platform/realtime/reports/read-private-channel-subscription-rls-execution-time-chart-dark.png',
|
||||
light:
|
||||
'/docs/img/guides/platform/realtime/reports/read-private-channel-subscription-rls-execution-time-chart-light.png',
|
||||
}}
|
||||
/>
|
||||
|
||||
### Actions you can take
|
||||
|
||||
| Action | Description | More information |
|
||||
| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
||||
| Configure connection pool | Adjust the "Database connection pool size" setting to increase the number of connections available for RLS authorization checks, which can improve performance for high-volume channel subscriptions | [Realtime Settings Guide](/docs/guides/realtime/settings) |
|
||||
| Optimize RLS policies | Learn how to optimize RLS policies with indexes, function wrapping, and query optimization techniques | [RLS Performance Best Practices](/docs/troubleshooting/rls-performance-and-best-practices-Z5Jjwv) |
|
||||
| Check logs | Investigate RLS authorization errors or timeout issues in your project dashboard | [Realtime Logs Dashboard](/dashboard/project/_/database/realtime-logs) |
|
||||
| Learn authorization basics | Understand how RLS policies work with private channels and best practices for implementation | [Realtime Authorization Guide](/docs/guides/realtime/authorization) |
|
||||
| Create indexes | Add indexes on columns frequently used in RLS policy conditions to speed up authorization checks | [Database Indexes Guide](/docs/guides/database/postgres/indexes) |
|
||||
| Use index advisor | Automatically detect missing indexes that could improve RLS policy performance | [Index Advisor Extension Guide](/docs/guides/database/extensions/index_advisor) |
|
||||
| Optimize queries | Learn techniques for optimizing queries including partial indexes and composite indexes for RLS conditions | [Query Optimization Guide](/docs/guides/database/query-optimization) |
|
||||
| Monitor database | Review database query performance and identify slow queries that may be affecting RLS execution | [Database Observability Dashboard](/dashboard/project/_/observability/database) |
|
||||
| Contact support | Discuss RLS optimization strategies or get assistance with complex authorization requirements | [Support Portal](/dashboard/support/new) |
|
||||
|
||||
## (Write) Private Channel Subscription RLS Execution Time
|
||||
|
||||
The (Write)Private Channel Subscription RLS Execution Time report helps you monitor the median time it takes to execute Row Level Security (RLS) policies when users publish messages to private channels. This metric is essential for understanding how RLS policy complexity impacts message publishing latency and overall broadcast performance.
|
||||
|
||||
The report displays the median RLS execution time in milliseconds, showing how long it takes to validate user permissions when publishing to private channels throughout the selected time period. When a user sends a broadcast message to a private channel, Realtime checks RLS policies on the `realtime.messages` table to determine if the user has write (INSERT) access. This authorization check happens for the first message sent and then it's cached. Complex RLS policies with joins, function calls, or missing indexes can significantly increase first message publishing latency.
|
||||
|
||||
<Image
|
||||
alt="(Write) Private Channel Subscription RLS Execution Time chart"
|
||||
zoomable
|
||||
src={{
|
||||
dark: '/docs/img/guides/platform/realtime/reports/write-private-channel-subscription-rls-execution-time-chart-dark.png',
|
||||
light:
|
||||
'/docs/img/guides/platform/realtime/reports/write-private-channel-subscription-rls-execution-time-chart-light.png',
|
||||
}}
|
||||
/>
|
||||
|
||||
### Actions you can take
|
||||
|
||||
| Action | Description | More information |
|
||||
| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
||||
| Configure connection pool | Adjust the "Database connection pool size" setting to increase the number of connections available for RLS authorization checks, which can improve performance for high-frequency message publishing | [Realtime Settings Guide](/docs/guides/realtime/settings) |
|
||||
| Optimize RLS policies | Learn how to optimize RLS policies with indexes, function wrapping, and query optimization techniques | [RLS Performance Best Practices](/docs/troubleshooting/rls-performance-and-best-practices-Z5Jjwv) |
|
||||
| Check logs | Investigate RLS authorization errors or timeout issues when publishing messages in your project dashboard | [Realtime Logs Dashboard](/dashboard/project/_/database/realtime-logs) |
|
||||
| Learn authorization basics | Understand how RLS policies work with private channels for write operations and best practices for implementation | [Realtime Authorization Guide](/docs/guides/realtime/authorization) |
|
||||
| Create indexes | Add indexes on columns used in INSERT policies to speed up write authorization checks | [Database Indexes Guide](/docs/guides/database/postgres/indexes) |
|
||||
| Use index advisor | Automatically detect missing indexes that could improve write RLS policy performance | [Index Advisor Extension Guide](/docs/guides/database/extensions/index_advisor) |
|
||||
| Optimize queries | Learn techniques for optimizing INSERT policy queries including partial indexes for specific conditions | [Query Optimization Guide](/docs/guides/database/query-optimization) |
|
||||
| Monitor database | Review database query performance and identify slow queries that may be affecting write RLS execution | [Database Observability Dashboard](/dashboard/project/_/observability/database) |
|
||||
| Contact support | Discuss RLS optimization strategies or get assistance with complex authorization requirements for high-frequency messaging | [Support Portal](/dashboard/support/new) |
|
||||
|
||||
## Total Requests
|
||||
|
||||
The Total Requests report helps you monitor the overall volume of HTTP requests for Realtime over time. This metric is essential for understanding your application's usage patterns and identifying traffic trends or potential issues with API request handling.
|
||||
|
||||
The report displays the total number of HTTP requests made to the Realtime service which include the WebSocket upgrade requests and the REST API requests.
|
||||
|
||||
<Image
|
||||
alt="Total Requests chart"
|
||||
zoomable
|
||||
src={{
|
||||
dark: '/docs/img/guides/platform/realtime/reports/total-requests-chart-dark.png',
|
||||
light: '/docs/img/guides/platform/realtime/reports/total-requests-chart-light.png',
|
||||
}}
|
||||
/>
|
||||
|
||||
### Actions you can take
|
||||
|
||||
| Action | Description | More information |
|
||||
| ------------------------ | ---------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
|
||||
| Check logs | Investigate request errors or issues in your project dashboard | [Realtime Logs Dashboard](/dashboard/project/_/database/realtime-logs) |
|
||||
| Review error rates | Compare total requests with error rates to identify failure patterns | [Response Errors Report](#response-errors) |
|
||||
| Review response times | Monitor API response times to identify performance bottlenecks | [Response Speed Report](#response-speed) |
|
||||
| Learn REST API broadcast | Understand how to send broadcast messages using HTTP requests | [Broadcast via REST API Guide](/docs/guides/realtime/broadcast#broadcast-via-rest-api) |
|
||||
| Monitor database | Review database resource utilization that may affect API request processing | [Database Observability Dashboard](/dashboard/project/_/observability/database) |
|
||||
| Contact support | Discuss high-volume request patterns or get assistance with API optimization | [Support Portal](/dashboard/support/new) |
|
||||
|
||||
## Response Errors
|
||||
|
||||
The Response Errors report helps you monitor the number of failed HTTP requests to the Realtime service over time. This metric is essential for identifying issues with API requests, WebSocket upgrade failures, authentication problems, and other error conditions that may impact your application's real-time functionality.
|
||||
|
||||
The report displays the total number of response errors from the Realtime API, showing error frequency throughout the selected time period. These errors include HTTP error status codes (4xx client errors and 5xx server errors) from REST API requests, failed WebSocket upgrade requests, authorization failures, and other error responses. Monitoring error rates alongside total requests helps you identify patterns, correlate errors with specific events, and troubleshoot issues affecting your Realtime service availability.
|
||||
|
||||
<Image
|
||||
alt="Response Errors chart"
|
||||
zoomable
|
||||
src={{
|
||||
dark: '/docs/img/guides/platform/realtime/reports/response-errors-chart-dark.png',
|
||||
light: '/docs/img/guides/platform/realtime/reports/response-errors-chart-light.png',
|
||||
}}
|
||||
/>
|
||||
|
||||
### Actions you can take
|
||||
|
||||
| Action | Description | More information |
|
||||
| ----------------------- | --------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
|
||||
| Configure limits | Adjust "Max concurrent connections" or "Max events per second" settings if errors are related to quota limits being reached | [Realtime Settings Guide](/docs/guides/realtime/settings) |
|
||||
| Check logs | Investigate specific error messages, error codes, and request details in your project dashboard | [Realtime Logs Dashboard](/dashboard/project/_/database/realtime-logs) |
|
||||
| Review request volume | Compare error rates with total request volume to calculate error percentages and identify trends | [Total Requests Report](#total-requests) |
|
||||
| Understand error codes | Understand specific error codes and their resolutions | [Realtime Error Codes Reference](/docs/reference/realtime/error-codes) |
|
||||
| Learn HTTP status codes | Learn about HTTP status codes including 4XX client errors and 5XX server errors | [HTTP Status Codes Troubleshooting](/docs/troubleshooting/http-status-codes) |
|
||||
| Fix timeout errors | Resolve WebSocket timeout errors caused by Node.js version incompatibility | [TIMED_OUT Connection Errors Troubleshooting](/docs/troubleshooting/realtime-connections-timed_out-status) |
|
||||
| Understand heartbeats | Monitor heartbeat status to detect connection issues and handle timeouts | [Realtime Heartbeats Guide](/docs/troubleshooting/realtime-heartbeat-messages) |
|
||||
| Review quotas | Check if errors are related to quota limits (e.g., `too_many_connections`, `too_many_joins`) | [Realtime Quotas Reference](/docs/guides/realtime/quotas) |
|
||||
| Learn authorization | Troubleshoot authorization-related errors for private channels | [Realtime Authorization Guide](/docs/guides/realtime/authorization) |
|
||||
| Contact support | Get assistance with persistent errors or investigate service-level issues | [Support Portal](/dashboard/support/new) |
|
||||
|
||||
## Response Speed
|
||||
|
||||
The Response Speed report helps you monitor the average response time for HTTP requests to the Realtime service over time. This metric is essential for understanding API performance, identifying latency issues, and ensuring your real-time features meet performance expectations.
|
||||
|
||||
The report displays the average response time in milliseconds, showing how quickly the Realtime service responds to HTTP requests throughout the selected time period. This includes response times for REST API requests such as broadcast messages, WebSocket upgrade requests, and other HTTP-based interactions. Higher response times can indicate performance bottlenecks, database load issues, or network problems that may impact the real-time responsiveness of your application.
|
||||
|
||||
<Image
|
||||
alt="Response Speed chart"
|
||||
zoomable
|
||||
src={{
|
||||
dark: '/docs/img/guides/platform/realtime/reports/response-speed-chart-dark.png',
|
||||
light: '/docs/img/guides/platform/realtime/reports/response-speed-chart-light.png',
|
||||
}}
|
||||
/>
|
||||
|
||||
### Actions you can take
|
||||
|
||||
| Action | Description | More information |
|
||||
| ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
||||
| Configure connection pool | Adjust the "Database connection pool size" setting to optimize database connection usage, which can improve response times for authorization checks | [Realtime Settings Guide](/docs/guides/realtime/settings) |
|
||||
| Check logs | Investigate slow requests and identify specific endpoints or operations causing delays | [Realtime Logs Dashboard](/dashboard/project/_/database/realtime-logs) |
|
||||
| Review request volume | Correlate response times with request volume to identify performance degradation under load | [Total Requests Report](#total-requests) |
|
||||
| Monitor database | Review database resource utilization, connection counts, and query performance that may affect response times | [Database Observability Dashboard](/dashboard/project/_/observability/database) |
|
||||
| Review benchmarks | Understand expected latency and throughput for different Realtime operations | [Realtime Performance Benchmarks](/docs/guides/realtime/benchmarks) |
|
||||
| Understand heartbeats | Monitor heartbeat status and customize intervals to balance detection speed with network overhead | [Realtime Heartbeats Guide](/docs/troubleshooting/realtime-heartbeat-messages) |
|
||||
| Optimize RLS policies | If using private channels, optimize RLS policies that may be slowing down authorization checks | [RLS Performance Best Practices](/docs/troubleshooting/rls-performance-and-best-practices-Z5Jjwv) |
|
||||
| Contact support | Discuss performance optimization strategies or investigate persistent latency issues | [Support Portal](/dashboard/support/new) |
|
||||
@@ -205,12 +205,12 @@ Access to Studio dashboard and internal API is protected with **HTTP basic authe
|
||||
|
||||
</Admonition>
|
||||
|
||||
The password must include at least one letter: do not use numbers only and do not use any special characters.
|
||||
|
||||
Change the password in the `.env` file:
|
||||
|
||||
- `DASHBOARD_PASSWORD`: password for Studio / dashboard
|
||||
|
||||
The password must include at least one letter (do not use numbers only).
|
||||
|
||||
Optionally change the user:
|
||||
|
||||
- `DASHBOARD_USERNAME`: username for Studio / dashboard
|
||||
|
||||
@@ -6,6 +6,52 @@ subtitle: 'Learn about the Storage error codes and how to resolve them'
|
||||
sidebar_label: 'Debugging'
|
||||
---
|
||||
|
||||
## Handling Storage errors in SDKs
|
||||
|
||||
When using the Supabase SDKs, storage errors provide detailed information to help you debug issues:
|
||||
|
||||
<Tabs
|
||||
scrollable
|
||||
size="small"
|
||||
type="underlined"
|
||||
defaultActiveId="js"
|
||||
queryGroup="language"
|
||||
>
|
||||
<TabPanel id="js" label="JavaScript">
|
||||
|
||||
```js
|
||||
try {
|
||||
const { data, error } = await supabase.storage.from('avatars').download('avatar.png')
|
||||
|
||||
if (error) {
|
||||
// Access error details
|
||||
console.log('Error code:', error.error)
|
||||
console.log('Error message:', error.message)
|
||||
console.log('HTTP status:', error.status)
|
||||
console.log('Status code:', error.statusCode)
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('Unexpected error:', err)
|
||||
}
|
||||
```
|
||||
|
||||
</TabPanel>
|
||||
<$Show if="sdk:python">
|
||||
<TabPanel id="python" label="Python">
|
||||
|
||||
```python
|
||||
try:
|
||||
response = supabase.storage.from_('avatars').download('avatar.png')
|
||||
except Exception as error:
|
||||
# Access error details
|
||||
print(f'Error: {error}')
|
||||
# The SDK now handles bad responses from the server gracefully
|
||||
```
|
||||
|
||||
</TabPanel>
|
||||
</$Show>
|
||||
</Tabs>
|
||||
|
||||
## Storage error codes
|
||||
|
||||
<Admonition type="note">
|
||||
|
||||
@@ -5,9 +5,17 @@ description: 'Learn how to check Storage Logs'
|
||||
sidebar_label: 'Debugging'
|
||||
---
|
||||
|
||||
Accessing the [Storage Logs](/dashboard/project/__/logs/explorer?q=select+id%2C+storage_logs.timestamp%2C+event_message+from+storage_logs%0A++%0A++order+by+timestamp+desc%0A++limit+100%0A++) allows you to examine all incoming request logs to your Storage service. You can also filter logs and delve into specific aspects of your requests.
|
||||
The [Storage Logs](/dashboard/project/_/logs/storage-logs) provide a convenient way to examine all incoming request logs to your Storage service. You can filter by time and keyword searches.
|
||||
|
||||
### Common log queries
|
||||
For more advanced filtering needs, use the [Logs Explorer](/dashboard/project/_/logs/explorer) to query the Storage logs dataset directly. The Logs Explorer is separate from the SQL Editor and uses a subset of the BigQuery SQL syntax rather than traditional SQL.
|
||||
|
||||
<Admonition type="tip">
|
||||
|
||||
For more details on filtering the log tables, see [Advanced Log Filtering](/docs/guides/telemetry/advanced-log-filtering)
|
||||
|
||||
</Admonition>
|
||||
|
||||
### Example Storage queries for the Logs Explorer
|
||||
|
||||
#### Filter by status 5XX error
|
||||
|
||||
|
||||
@@ -35,6 +35,71 @@ If you want the browser to start an automatic download of the asset instead of t
|
||||
|
||||
By default it will use the asset name to save the file on disk. You can optionally pass a custom name to the `download` parameter as following: `?download=customname.jpg`
|
||||
|
||||
#### Programmatic downloads with query parameters
|
||||
|
||||
When using the SDK's `download()` method, you can pass additional query parameters to customize the download behavior:
|
||||
|
||||
<Tabs
|
||||
scrollable
|
||||
size="small"
|
||||
type="underlined"
|
||||
defaultActiveId="js"
|
||||
queryGroup="language"
|
||||
>
|
||||
<TabPanel id="js" label="JavaScript">
|
||||
|
||||
```js
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
const supabase = createClient('your_project_url', 'your_supabase_api_key')
|
||||
|
||||
// ---cut---
|
||||
// Download with custom filename
|
||||
const { data, error } = await supabase.storage.from('avatars').download('avatar1.png', {
|
||||
download: 'my-custom-name.png',
|
||||
})
|
||||
```
|
||||
|
||||
</TabPanel>
|
||||
<$Show if="sdk:dart">
|
||||
<TabPanel id="dart" label="Dart">
|
||||
|
||||
```dart
|
||||
// Download with additional query parameters
|
||||
final response = await supabase.storage
|
||||
.from('avatars')
|
||||
.download(
|
||||
'avatar1.png',
|
||||
queryParams: {
|
||||
'download': 'my-custom-name.png',
|
||||
},
|
||||
);
|
||||
```
|
||||
|
||||
[Reference.](/docs/reference/dart/storage-from-download)
|
||||
|
||||
</TabPanel>
|
||||
</$Show>
|
||||
<$Show if="sdk:swift">
|
||||
<TabPanel id="swift" label="Swift">
|
||||
|
||||
```swift
|
||||
// Download with additional query parameters
|
||||
let response = try await supabase.storage
|
||||
.from("avatars")
|
||||
.download(
|
||||
path: "avatar1.png",
|
||||
queryItems: [
|
||||
URLQueryItem(name: "download", value: "my-custom-name.png")
|
||||
]
|
||||
)
|
||||
```
|
||||
|
||||
[Reference.](/docs/reference/swift/storage-from-download)
|
||||
|
||||
</TabPanel>
|
||||
</$Show>
|
||||
</Tabs>
|
||||
|
||||
## Private buckets
|
||||
|
||||
Assets stored in a non-public bucket are considered private and are not accessible via a public URL like the public buckets.
|
||||
|
||||
@@ -14,7 +14,7 @@ Grafana maintains a [Supabase integration guide](https://grafana.com/docs/grafan
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- A Supabase project with access to the Metrics API (service role key or another secret key).
|
||||
- A Supabase project with access to the Metrics API (Secret API key `sb_secret_...`).
|
||||
- A Grafana Cloud account with Prometheus metrics enabled (Free or Pro tier).
|
||||
- A Grafana API token with the `metrics:write` and `metrics:read` scopes if you plan to push data manually.
|
||||
|
||||
@@ -31,7 +31,7 @@ Grafana maintains a [Supabase integration guide](https://grafana.com/docs/grafan
|
||||
2. Provide:
|
||||
- Your Supabase project ref (e.g. `abcd1234`).
|
||||
- The Metrics API endpoint: `https://<project-ref>.supabase.co/customer/v1/privileged/metrics`.
|
||||
- HTTP Basic Auth credentials (`service_role` / `service_role key`).
|
||||
- HTTP Basic Auth credentials (`service_role` / `sb_secret_...`).
|
||||
3. Choose the scrape interval (1 minute recommended) and test the connection. Grafana Cloud will deploy an agent in the background that scrapes the Metrics API and forwards the data to Prometheus.
|
||||
|
||||
If you prefer to reuse an existing Grafana Agent deployment, configure an [integration pipeline](https://grafana.com/docs/grafana-cloud/send-data/agent/integrations/integration-reference/integration-supabase/) with the same URL and credentials.
|
||||
@@ -56,6 +56,6 @@ The [`docs/example-alerts.md`](https://github.com/supabase/supabase-grafana/blob
|
||||
|
||||
## 5. Troubleshooting
|
||||
|
||||
- Metrics missing? Ensure the Grafana Cloud agent can reach `https://<project-ref>.supabase.co` and that the selected service role key is still valid.
|
||||
- 401 errors? Rotate the service role key from the [API settings page](/dashboard/project/_/settings/api-keys) and update the Grafana Cloud credentials.
|
||||
- Metrics missing? Ensure the Grafana Cloud agent can reach `https://<project-ref>.supabase.co` and that the selected Secret API key is still valid.
|
||||
- 401 errors? Create/rotate a Secret API key in [Project Settings → API Keys](/dashboard/project/_/settings/api-keys) and update the Grafana Cloud credentials.
|
||||
- Long scrape durations? Reduce label cardinality in your Grafana queries or lower the time range to focus on recent data.
|
||||
@@ -32,7 +32,7 @@ scrape_configs:
|
||||
scheme: https
|
||||
basic_auth:
|
||||
username: service_role
|
||||
password: '<service-role key or JWT>'
|
||||
password: '<secret API key (sb_secret_...)>'
|
||||
static_configs:
|
||||
- targets:
|
||||
- '<project-ref>.supabase.co:443'
|
||||
@@ -44,7 +44,7 @@ scrape_configs:
|
||||
|
||||
- Keep the scrape interval at 60 seconds to match Supabase’s refresh cadence.
|
||||
- If you run Prometheus behind a proxy, make sure it can establish outbound HTTPS connections to `*.supabase.co`.
|
||||
- Store secrets (service role key) with your secret manager or inject them via environment variables.
|
||||
- Store secrets (Secret API key) with your secret manager or inject them via environment variables.
|
||||
|
||||
</Admonition>
|
||||
|
||||
@@ -79,4 +79,4 @@ You now have over 200 production-ready panels covering CPU, IO, WAL, replication
|
||||
|
||||
- **Multiple projects:** add one scrape job per project ref so you can separate metrics and labels cleanly.
|
||||
- **Right-sizing guidance:** pair the dashboards with Supabase’s [Query Performance report](/dashboard/project/_/observability/query-performance) and [Advisors](/dashboard/project/_/observability/database) to decide when to optimize vs upgrade.
|
||||
- **Security:** rotate the service role key on a regular cadence and update the Prometheus config accordingly.
|
||||
- **Security:** rotate Secret API keys on a regular cadence and update the Prometheus config accordingly.
|
||||
@@ -25,7 +25,7 @@ No matter which collector you use, you need to hit the Metrics API once per minu
|
||||
scheme: https
|
||||
basic_auth:
|
||||
username: service_role
|
||||
password: '<service-role key or JWT>'
|
||||
password: '<secret API key (sb_secret_...)>'
|
||||
static_configs:
|
||||
- targets:
|
||||
- '<project-ref>.supabase.co:443'
|
||||
@@ -41,9 +41,9 @@ No matter which collector you use, you need to hit the Metrics API once per minu
|
||||
|
||||
## 2. Secure the credentials
|
||||
|
||||
- Store the service role key in your secret manager (AWS Secrets Manager, GCP Secret Manager, Vault, etc.).
|
||||
- Rotate the key periodically via [Project Settings → API keys](/dashboard/project/_/settings/api-keys) and update your collector.
|
||||
- If you need to give observability vendors access without exposing the service role key broadly, create a dedicated service key for metrics-only automation.
|
||||
- Store the Secret API key in your secret manager (AWS Secrets Manager, GCP Secret Manager, Vault, etc.).
|
||||
- Rotate the key periodically via [Project Settings → API Keys](/dashboard/project/_/settings/api-keys) and update your collector.
|
||||
- If you need to give observability vendors access without exposing a broadly-scoped key, create a dedicated Secret API key for metrics-only automation.
|
||||
|
||||
## 3. Downstream dashboards
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ This guide is for identifying configuration mistakes in [self-hosted Supabase Gr
|
||||
Use the below cURL command to make sure your metrics endpoint returns data:
|
||||
|
||||
```sh
|
||||
curl https://<YOUR_PROJECT_REF>.supabase.co/customer/v1/privileged/metrics --user 'service_role:<SERVICE_ROLE_KEY>'
|
||||
curl https://<YOUR_PROJECT_REF>.supabase.co/customer/v1/privileged/metrics --user 'service_role:<SECRET_API_KEY>'
|
||||
```
|
||||
|
||||
## Step 2: Set your Grafana Dashboard to auto-refresh in the top right corner
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
---
|
||||
title = "Keeping your 2 Free projects after upgrading to Pro"
|
||||
date_created = "2026-01-23T00:00:00+00:00"
|
||||
topics = [ "platform" ]
|
||||
keywords = [ "free tier", "pro plan", "billing", "organizations", "project transfer" ]
|
||||
---
|
||||
|
||||
## Can you keep your 2 free projects after upgrading to pro?
|
||||
|
||||
Yes! You still get 2 free projects after you upgrade to Pro. They just need to be in a **separate** Free Plan organization.
|
||||
|
||||
## Why do free projects need to be in a separate organization?
|
||||
|
||||
Because billing is managed at the organization level, not the project level. We need to keep Free tier usage separate from Pro tier usage for accurate billing and cost transparency.
|
||||
|
||||
To keep both free projects and Pro organization:
|
||||
Create a new Free Plan organization (or use an existing free organization if you have one)
|
||||
|
||||
- Go to the [Dashboard](/dashboard)
|
||||
- Click on the organization dropdown
|
||||
- Select "New organization" (or visit [https://supabase.com/dashboard/new](/dashboard/new))
|
||||
- Create a new organization on the default Free Plan
|
||||
|
||||
## Additional resources
|
||||
|
||||
- [Organization-based billing](/docs/guides/platform/billing-on-supabase#organization-based-billing)
|
||||
- [Project transfer guide](/docs/guides/platform/project-transfer)
|
||||
- [Billing FAQ](/docs/guides/platform/billing-faq)
|
||||
@@ -14,7 +14,7 @@ This typically indicates an authentication failure where the database connection
|
||||
|
||||
1. **Check Network Bans:**
|
||||
|
||||
- Navigate to your project's [Database Settings](/dashboard/project/_/settings/database) page.
|
||||
- Navigate to your project's [Database Settings](/dashboard/project/_/database/settings) page.
|
||||
- Review any listed IP addresses that are blocked. Remove any entries that correspond to your current connection and then try the CLI action again.
|
||||
|
||||
2. **Use the old Password-Based authentication flow instead:**
|
||||
|
||||
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 152 KiB |
|
After Width: | Height: | Size: 154 KiB |
|
After Width: | Height: | Size: 140 KiB |
|
After Width: | Height: | Size: 143 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 49 KiB |
@@ -718,6 +718,12 @@
|
||||
"slug": "v1-get-available-regions",
|
||||
"type": "operation"
|
||||
},
|
||||
{
|
||||
"id": "v1-get-disk-utilization",
|
||||
"title": "Get disk utilization",
|
||||
"slug": "v1-get-disk-utilization",
|
||||
"type": "operation"
|
||||
},
|
||||
{
|
||||
"id": "v1-get-network-restrictions",
|
||||
"title": "Get network restrictions",
|
||||
@@ -742,6 +748,12 @@
|
||||
"slug": "v1-get-project",
|
||||
"type": "operation"
|
||||
},
|
||||
{
|
||||
"id": "v1-get-project-disk-autoscale-config",
|
||||
"title": "Get project disk autoscale config",
|
||||
"slug": "v1-get-project-disk-autoscale-config",
|
||||
"type": "operation"
|
||||
},
|
||||
{
|
||||
"id": "v1-get-services-health",
|
||||
"title": "Get services health",
|
||||
@@ -772,6 +784,12 @@
|
||||
"slug": "v1-list-available-restore-versions",
|
||||
"type": "operation"
|
||||
},
|
||||
{
|
||||
"id": "v1-modify-database-disk",
|
||||
"title": "Modify database disk",
|
||||
"slug": "v1-modify-database-disk",
|
||||
"type": "operation"
|
||||
},
|
||||
{
|
||||
"id": "v1-patch-network-restrictions",
|
||||
"title": "Patch network restrictions",
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 88,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L88"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L88"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -42,7 +42,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 89,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L89"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L89"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -61,7 +61,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 90,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L90"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L90"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -80,7 +80,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 91,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L91"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L91"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -99,7 +99,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 92,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L92"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L92"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -118,7 +118,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 93,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L93"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L93"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -137,7 +137,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 94,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L94"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L94"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -156,7 +156,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 95,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L95"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L95"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -175,7 +175,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 96,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L96"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L96"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -194,7 +194,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 97,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L97"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L97"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -213,7 +213,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 98,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L98"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L98"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -232,7 +232,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 99,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L99"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L99"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -251,7 +251,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 100,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L100"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L100"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -270,7 +270,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 101,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L101"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L101"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -289,7 +289,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 102,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L102"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L102"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -309,7 +309,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 87,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L87"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L87"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -339,7 +339,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 34,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L34"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L34"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -373,7 +373,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 34,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L34"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L34"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -416,7 +416,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 42,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L42"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L42"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -645,7 +645,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 41,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L41"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L41"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -682,7 +682,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 43,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L43"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L43"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -705,7 +705,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 40,
|
||||
"character": 7,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L40"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L40"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -735,7 +735,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 19,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L19"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L19"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -964,7 +964,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 17,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L17"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L17"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1000,7 +1000,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 18,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L18"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L18"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1023,7 +1023,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 16,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L16"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L16"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1042,7 +1042,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 75,
|
||||
"character": 8,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L75"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L75"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -1076,7 +1076,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 75,
|
||||
"character": 8,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L75"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L75"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -1175,7 +1175,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 60,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L60"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L60"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -1209,7 +1209,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 60,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L60"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L60"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -1260,7 +1260,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 15,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L15"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L15"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -1301,7 +1301,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 32,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L32"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L32"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -1316,7 +1316,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 32,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L32"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L32"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -1387,7 +1387,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 31,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L31"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L31"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1411,7 +1411,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 30,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L30"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L30"
|
||||
}
|
||||
],
|
||||
"extendedTypes": [
|
||||
@@ -1480,7 +1480,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 50,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L50"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L50"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -1495,7 +1495,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 50,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L50"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L50"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -1543,7 +1543,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 31,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L31"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L31"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1572,7 +1572,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 49,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L49"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L49"
|
||||
}
|
||||
],
|
||||
"extendedTypes": [
|
||||
@@ -1621,7 +1621,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 82,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L82"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L82"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -1636,7 +1636,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 82,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L82"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L82"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -1684,7 +1684,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 31,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L31"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L31"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1713,7 +1713,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 81,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L81"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L81"
|
||||
}
|
||||
],
|
||||
"extendedTypes": [
|
||||
@@ -1762,7 +1762,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 66,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L66"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L66"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -1777,7 +1777,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 66,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L66"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L66"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -1825,7 +1825,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 31,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L31"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L31"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1854,7 +1854,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 65,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L65"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L65"
|
||||
}
|
||||
],
|
||||
"extendedTypes": [
|
||||
@@ -1877,7 +1877,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 105,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L105"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L105"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1910,7 +1910,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 121,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L121"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L121"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2019,7 +2019,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 109,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L109"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L109"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2035,7 +2035,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 109,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L109"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L109"
|
||||
}
|
||||
],
|
||||
"indexSignatures": [
|
||||
@@ -2050,7 +2050,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 109,
|
||||
"character": 14,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L109"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L109"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -2096,7 +2096,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 113,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L113"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L113"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2146,7 +2146,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 117,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L117"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L117"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2177,7 +2177,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 132,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L132"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L132"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2211,7 +2211,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 137,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L137"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L137"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2231,7 +2231,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 105,
|
||||
"character": 36,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L105"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L105"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2248,7 +2248,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 16,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L16"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L16"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 88,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L88"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L88"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -42,7 +42,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 89,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L89"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L89"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -61,7 +61,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 90,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L90"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L90"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -80,7 +80,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 91,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L91"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L91"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -99,7 +99,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 92,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L92"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L92"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -118,7 +118,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 93,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L93"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L93"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -137,7 +137,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 94,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L94"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L94"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -156,7 +156,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 95,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L95"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L95"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -175,7 +175,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 96,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L96"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L96"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -194,7 +194,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 97,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L97"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L97"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -213,7 +213,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 98,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L98"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L98"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -232,7 +232,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 99,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L99"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L99"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -251,7 +251,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 100,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L100"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L100"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -270,7 +270,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 101,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L101"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L101"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -289,7 +289,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 102,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L102"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L102"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -309,7 +309,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 87,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L87"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L87"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -339,7 +339,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 34,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L34"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L34"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -373,7 +373,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 34,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L34"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L34"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -416,7 +416,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 42,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L42"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L42"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -645,7 +645,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 41,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L41"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L41"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -682,7 +682,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 43,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L43"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L43"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -705,7 +705,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 40,
|
||||
"character": 7,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L40"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L40"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -735,7 +735,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 19,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L19"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L19"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -964,7 +964,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 17,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L17"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L17"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1000,7 +1000,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 18,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L18"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L18"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1023,7 +1023,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 16,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L16"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L16"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1042,7 +1042,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 75,
|
||||
"character": 8,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L75"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L75"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -1076,7 +1076,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 75,
|
||||
"character": 8,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L75"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L75"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -1175,7 +1175,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 60,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L60"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L60"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -1209,7 +1209,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 60,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L60"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L60"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -1260,7 +1260,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 15,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/FunctionsClient.ts#L15"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/FunctionsClient.ts#L15"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -1301,7 +1301,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 32,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L32"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L32"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -1316,7 +1316,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 32,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L32"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L32"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -1387,7 +1387,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 31,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L31"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L31"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1411,7 +1411,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 30,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L30"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L30"
|
||||
}
|
||||
],
|
||||
"extendedTypes": [
|
||||
@@ -1480,7 +1480,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 50,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L50"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L50"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -1495,7 +1495,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 50,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L50"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L50"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -1543,7 +1543,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 31,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L31"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L31"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1572,7 +1572,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 49,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L49"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L49"
|
||||
}
|
||||
],
|
||||
"extendedTypes": [
|
||||
@@ -1621,7 +1621,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 82,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L82"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L82"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -1636,7 +1636,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 82,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L82"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L82"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -1684,7 +1684,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 31,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L31"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L31"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1713,7 +1713,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 81,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L81"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L81"
|
||||
}
|
||||
],
|
||||
"extendedTypes": [
|
||||
@@ -1762,7 +1762,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 66,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L66"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L66"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -1777,7 +1777,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 66,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L66"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L66"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -1825,7 +1825,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 31,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L31"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L31"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1854,7 +1854,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 65,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L65"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L65"
|
||||
}
|
||||
],
|
||||
"extendedTypes": [
|
||||
@@ -1877,7 +1877,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 105,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L105"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L105"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1910,7 +1910,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 121,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L121"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L121"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2019,7 +2019,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 109,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L109"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L109"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2035,7 +2035,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 109,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L109"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L109"
|
||||
}
|
||||
],
|
||||
"indexSignatures": [
|
||||
@@ -2050,7 +2050,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 109,
|
||||
"character": 14,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L109"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L109"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -2096,7 +2096,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 113,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L113"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L113"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2146,7 +2146,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 117,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L117"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L117"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2177,7 +2177,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 132,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L132"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L132"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2211,7 +2211,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 137,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L137"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L137"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2231,7 +2231,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 105,
|
||||
"character": 36,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L105"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L105"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2248,7 +2248,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 16,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/746c76a943875068f1fa766c2dc696bef33f117c/packages/core/functions-js/src/types.ts#L16"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/942e643d9799a90042b375b16f8438a4980f21ea/packages/core/functions-js/src/types.ts#L16"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
|
||||
@@ -1289,7 +1289,7 @@ functions:
|
||||
description: |
|
||||
Links an oauth identity to an existing user. This method supports the PKCE flow.
|
||||
notes: |
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/settings/auth).
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers).
|
||||
- The user needs to be signed in to call `linkIdentity()`.
|
||||
- If the candidate identity is already linked to the existing user or another user, `linkIdentity()` will fail.
|
||||
params:
|
||||
@@ -1331,7 +1331,7 @@ functions:
|
||||
type: UserIdentity
|
||||
description: The user identity to unlink.
|
||||
notes: |
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/settings/auth).
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers).
|
||||
- The user needs to be signed in to call `unlinkIdentity()`.
|
||||
- The user must have at least 2 identities in order to unlink an identity.
|
||||
- The identity to be unlinked must belong to the user.
|
||||
@@ -1357,7 +1357,7 @@ functions:
|
||||
description: |
|
||||
Links an identity to an existing user using an ID token obtained from a third-party OAuth provider. This allows linking identities using native OAuth flows (Google, Apple, Facebook, etc.) similar to `signInWithIdToken()` but for linking rather than signing in.
|
||||
notes: |
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/settings/auth).
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers).
|
||||
- The user needs to be signed in to call `linkIdentityWithIdToken()`.
|
||||
- Supports the same OAuth providers as `signInWithIdToken()`: Google, Apple, Facebook, Kakao, and Keycloak.
|
||||
- If the candidate identity is already linked to another user, the operation will fail.
|
||||
|
||||
@@ -206,7 +206,7 @@ functions:
|
||||
|
||||
This warning message can be safely ignored if you're not using auth on the server-side. If you are using auth and you want to set `persistSession` to true, you will need to provide a custom storage implementation that follows [this interface](https://github.com/supabase/supabase-js/blob/master/packages/core/auth-js/src/lib/types.ts#L1053).
|
||||
- Any email links and one-time passwords (OTPs) sent have a default expiry of 24 hours. We have the following [rate limits](/docs/guides/platform/going-into-prod#auth-rate-limits) in place to guard against brute force attacks.
|
||||
- The expiry of an access token can be set in the "JWT expiry limit" field in [your project's auth settings](/dashboard/project/_/settings/auth). A refresh token never expires and can only be used once.
|
||||
- The expiry of an access token can be set in the "JWT expiry limit" field in [your project's auth settings](/dashboard/project/_/auth/providers). A refresh token never expires and can only be used once.
|
||||
|
||||
examples:
|
||||
- id: create-auth-client
|
||||
@@ -1720,7 +1720,7 @@ functions:
|
||||
title: 'linkIdentity()'
|
||||
$ref: '@supabase/auth-js.GoTrueClient.linkIdentity'
|
||||
notes: |
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/settings/auth).
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers).
|
||||
- The user needs to be signed in to call `linkIdentity()`.
|
||||
- If the candidate identity is already linked to the existing user or another user, `linkIdentity()` will fail.
|
||||
- If `linkIdentity` is run in the browser, the user is automatically redirected to the returned URL. On the server, you should handle the redirect.
|
||||
@@ -1748,7 +1748,7 @@ functions:
|
||||
title: 'unlinkIdentity()'
|
||||
$ref: '@supabase/auth-js.GoTrueClient.unlinkIdentity'
|
||||
notes: |
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/settings/auth).
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers).
|
||||
- The user needs to be signed in to call `unlinkIdentity()`.
|
||||
- The user must have at least 2 identities in order to unlink an identity.
|
||||
- The identity to be unlinked must belong to the user.
|
||||
@@ -7449,7 +7449,7 @@ functions:
|
||||
This section contains methods for working with File Buckets.
|
||||
- id: list-buckets
|
||||
title: listBuckets()
|
||||
$ref: '@supabase/storage-js.packages/StorageBucketApi.default.listBuckets'
|
||||
$ref: '@supabase/storage-js.StorageClient.listBuckets'
|
||||
notes: |
|
||||
- RLS policy permissions required:
|
||||
- `buckets` table permissions: `select`
|
||||
@@ -7458,7 +7458,7 @@ functions:
|
||||
|
||||
- id: get-bucket
|
||||
title: getBucket()
|
||||
$ref: '@supabase/storage-js.packages/StorageBucketApi.default.getBucket'
|
||||
$ref: '@supabase/storage-js.StorageClient.getBucket'
|
||||
notes: |
|
||||
- RLS policy permissions required:
|
||||
- `buckets` table permissions: `select`
|
||||
@@ -7467,7 +7467,7 @@ functions:
|
||||
|
||||
- id: create-bucket
|
||||
title: createBucket()
|
||||
$ref: '@supabase/storage-js.packages/StorageBucketApi.default.createBucket'
|
||||
$ref: '@supabase/storage-js.StorageClient.createBucket'
|
||||
notes: |
|
||||
- RLS policy permissions required:
|
||||
- `buckets` table permissions: `insert`
|
||||
@@ -7476,7 +7476,7 @@ functions:
|
||||
|
||||
- id: empty-bucket
|
||||
title: emptyBucket()
|
||||
$ref: '@supabase/storage-js.packages/StorageBucketApi.default.emptyBucket'
|
||||
$ref: '@supabase/storage-js.StorageClient.emptyBucket'
|
||||
notes: |
|
||||
- RLS policy permissions required:
|
||||
- `buckets` table permissions: `select`
|
||||
@@ -7485,7 +7485,7 @@ functions:
|
||||
|
||||
- id: update-bucket
|
||||
title: updateBucket()
|
||||
$ref: '@supabase/storage-js.packages/StorageBucketApi.default.updateBucket'
|
||||
$ref: '@supabase/storage-js.StorageClient.updateBucket'
|
||||
notes: |
|
||||
- RLS policy permissions required:
|
||||
- `buckets` table permissions: `select` and `update`
|
||||
@@ -7494,7 +7494,7 @@ functions:
|
||||
|
||||
- id: delete-bucket
|
||||
title: deleteBucket()
|
||||
$ref: '@supabase/storage-js.packages/StorageBucketApi.default.deleteBucket'
|
||||
$ref: '@supabase/storage-js.StorageClient.deleteBucket'
|
||||
notes: |
|
||||
- RLS policy permissions required:
|
||||
- `buckets` table permissions: `select` and `delete`
|
||||
@@ -7506,7 +7506,7 @@ functions:
|
||||
notes: |
|
||||
This section contains methods for working with Analytics Buckets.
|
||||
- id: storageanalytics-from
|
||||
$ref: '@supabase/storage-js.packages/StorageAnalyticsClient.default.from'
|
||||
$ref: '@supabase/storage-js.packages/StorageAnalyticsClient.default.constructor'
|
||||
|
||||
- id: storageanalytics-createbucket
|
||||
$ref: '@supabase/storage-js.packages/StorageAnalyticsClient.default.createBucket'
|
||||
@@ -7953,22 +7953,22 @@ functions:
|
||||
$ref: '@supabase/storage-js.index.StorageClient.updateBucket'
|
||||
|
||||
- id: storagevectors-create-bucket
|
||||
$ref: '@supabase/storage-js.index.StorageVectorsClient.createBucket'
|
||||
$ref: '@supabase/storage-js.packages/StorageVectorsClient.StorageVectorsClient.createBucket'
|
||||
|
||||
- id: storagevectors-delete-bucket
|
||||
$ref: '@supabase/storage-js.index.StorageVectorsClient.deleteBucket'
|
||||
$ref: '@supabase/storage-js.packages/StorageVectorsClient.StorageVectorsClient.deleteBucket'
|
||||
|
||||
- id: storagevectors-get-bucket
|
||||
$ref: '@supabase/storage-js.index.StorageVectorsClient.getBucket'
|
||||
$ref: '@supabase/storage-js.packages/StorageVectorsClient.StorageVectorsClient.getBucket'
|
||||
|
||||
- id: storagevectors-list-buckets
|
||||
$ref: '@supabase/storage-js.index.StorageVectorsClient.listBuckets'
|
||||
$ref: '@supabase/storage-js.packages/StorageVectorsClient.StorageVectorsClient.listBuckets'
|
||||
|
||||
- id: storagevectors-from
|
||||
$ref: '@supabase/storage-js.StorageVectorsClient.from'
|
||||
$ref: '@supabase/storage-js.packages/StorageVectorsClient.StorageVectorsClient.from'
|
||||
|
||||
- id: vectorbucket-index
|
||||
$ref: '@supabase/storage-js.index.VectorBucketScope.index'
|
||||
$ref: '@supabase/storage-js.packages/StorageVectorsClient.VectorBucketScope.index'
|
||||
|
||||
- id: storagefile-exists
|
||||
$ref: '@supabase/storage-js.packages/StorageFileApi.default.exists'
|
||||
@@ -7989,34 +7989,34 @@ functions:
|
||||
|
||||
- id: vectorbucket-createindex
|
||||
title: VectorBucketScope.createIndex()
|
||||
$ref: '@supabase/storage-js.VectorBucketScope.createIndex'
|
||||
$ref: '@supabase/storage-js.packages/StorageVectorsClient.VectorBucketScope.createIndex'
|
||||
|
||||
- id: vectorbucket-deleteindex
|
||||
title: VectorBucketScope.deleteIndex()
|
||||
$ref: '@supabase/storage-js.VectorBucketScope.deleteIndex'
|
||||
$ref: '@supabase/storage-js.packages/StorageVectorsClient.VectorBucketScope.deleteIndex'
|
||||
|
||||
- id: vectorbucket-getindex
|
||||
title: VectorBucketScope.getIndex()
|
||||
$ref: '@supabase/storage-js.VectorBucketScope.getIndex'
|
||||
$ref: '@supabase/storage-js.packages/StorageVectorsClient.VectorBucketScope.getIndex'
|
||||
|
||||
- id: vectorbucket-listindexes
|
||||
title: VectorBucketScope.listIndexes()
|
||||
$ref: '@supabase/storage-js.VectorBucketScope.listIndexes'
|
||||
$ref: '@supabase/storage-js.packages/StorageVectorsClient.VectorBucketScope.listIndexes'
|
||||
|
||||
- id: vectorindex-deletevectors
|
||||
$ref: '@supabase/storage-js.VectorIndexScope.deleteVectors'
|
||||
$ref: '@supabase/storage-js.packages/StorageVectorsClient.VectorIndexScope.deleteVectors'
|
||||
|
||||
- id: vectorindex-getvectors
|
||||
$ref: '@supabase/storage-js.VectorIndexScope.getVectors'
|
||||
$ref: '@supabase/storage-js.packages/StorageVectorsClient.VectorIndexScope.getVectors'
|
||||
|
||||
- id: vectorindex-listvectors
|
||||
$ref: '@supabase/storage-js.VectorIndexScope.listVectors'
|
||||
$ref: '@supabase/storage-js.packages/StorageVectorsClient.VectorIndexScope.listVectors'
|
||||
|
||||
- id: vectorindex-putvectors
|
||||
$ref: '@supabase/storage-js.VectorIndexScope.putVectors'
|
||||
$ref: '@supabase/storage-js.packages/StorageVectorsClient.VectorIndexScope.putVectors'
|
||||
|
||||
- id: vectorindex-queryvectors
|
||||
$ref: '@supabase/storage-js.VectorIndexScope.queryVectors'
|
||||
$ref: '@supabase/storage-js.packages/StorageVectorsClient.VectorIndexScope.queryVectors'
|
||||
|
||||
- id: realtime-js-realtimechannel-constructor
|
||||
title: new RealtimeChannel()
|
||||
|
||||
@@ -3530,7 +3530,7 @@ functions:
|
||||
title: 'linkIdentity()'
|
||||
$ref: '@supabase/gotrue-js.GoTrueClient.linkIdentity'
|
||||
notes: |
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/settings/auth).
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers).
|
||||
- The user needs to be signed in to call `linkIdentity()`.
|
||||
- If the candidate identity is already linked to the existing user or another user, `linkIdentity()` will fail.
|
||||
- This method works similarly to `signInWith()` using an OAuthProvider. To learn how to handle OTP links & OAuth refer to [initializing](/docs/reference/kotlin/initializing)
|
||||
@@ -3571,7 +3571,7 @@ functions:
|
||||
title: 'unlinkIdentity()'
|
||||
$ref: '@supabase/gotrue-js.GoTrueClient.unlinkIdentity'
|
||||
notes: |
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/settings/auth).
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers).
|
||||
- The user needs to be signed in to call `unlinkIdentity()`.
|
||||
- The user must have at least 2 identities in order to unlink an identity.
|
||||
- The identity to be unlinked must belong to the user.
|
||||
|
||||
@@ -3597,7 +3597,7 @@ functions:
|
||||
title: 'linkIdentity()'
|
||||
$ref: '@supabase/gotrue-js.GoTrueClient.linkIdentity'
|
||||
notes: |
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/settings/auth).
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers).
|
||||
- The user needs to be signed in to call `linkIdentity()`.
|
||||
- If the candidate identity is already linked to the existing user or another user, `linkIdentity()` will fail.
|
||||
- This method works similarly to `signInWith()` using an OAuthProvider. To learn how to handle OTP links & OAuth refer to [initializing](/docs/reference/kotlin/initializing)
|
||||
@@ -3638,7 +3638,7 @@ functions:
|
||||
title: 'unlinkIdentity()'
|
||||
$ref: '@supabase/gotrue-js.GoTrueClient.unlinkIdentity'
|
||||
notes: |
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/settings/auth).
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers).
|
||||
- The user needs to be signed in to call `unlinkIdentity()`.
|
||||
- The user must have at least 2 identities in order to unlink an identity.
|
||||
- The identity to be unlinked must belong to the user.
|
||||
|
||||
@@ -113,7 +113,7 @@ functions:
|
||||
- The auth methods can be accessed via the `supabase.auth` namespace.
|
||||
- By default, the supabase client sets `persist_session` to true and attempts to store the session in memory.
|
||||
- Any email links and one-time passwords (OTPs) sent have a default expiry of 24 hours. We have the following [rate limits](/docs/guides/platform/going-into-prod#auth-rate-limits) in place to guard against brute force attacks.
|
||||
- The expiry of an access token can be set in the "JWT expiry limit" field in [your project's auth settings](/dashboard/project/_/settings/auth). A refresh token never expires and can only be used once.
|
||||
- The expiry of an access token can be set in the "JWT expiry limit" field in [your project's auth settings](/dashboard/project/_/settings/jwt/legacy). A refresh token never expires and can only be used once.
|
||||
- id: sign-up
|
||||
title: 'sign_up()'
|
||||
params:
|
||||
@@ -1487,7 +1487,7 @@ functions:
|
||||
type: string
|
||||
description: An object of query params
|
||||
notes: |
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/settings/auth).
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers).
|
||||
- The user needs to be signed in to call `link_identity()`.
|
||||
- If the candidate identity is already linked to the existing user or another user, `link_identity()` will fail.
|
||||
- If `link_identity` is run on the server, you should handle the redirect.
|
||||
@@ -1540,7 +1540,7 @@ functions:
|
||||
isOptional: true
|
||||
type: string
|
||||
notes: |
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/settings/auth).
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers).
|
||||
- The user needs to be signed in to call `unlink_identity()`.
|
||||
- The user must have at least 2 identities in order to unlink an identity.
|
||||
- The identity to be unlinked must belong to the user.
|
||||
|
||||
@@ -906,7 +906,7 @@ functions:
|
||||
- id: link-identity
|
||||
title: 'linkIdentity()'
|
||||
notes: |
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/settings/auth).
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers).
|
||||
- The user needs to be signed in to call `linkIdentity()`.
|
||||
- If the candidate identity is already linked to the existing user or another user, `linkIdentity()` will fail.
|
||||
examples:
|
||||
@@ -934,7 +934,7 @@ functions:
|
||||
- id: link-identity-with-id-token
|
||||
title: 'linkIdentityWithIdToken()'
|
||||
notes: |
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/settings/auth).
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers).
|
||||
- The user needs to be signed in to call `linkIdentityWithIdToken()`.
|
||||
- If the candidate identity is already linked to the existing user or another user, `linkIdentityWithIdToken()` will fail.
|
||||
- This method allows you to link an OIDC identity using an ID token obtained from a provider like Apple, Google, etc.
|
||||
@@ -970,7 +970,7 @@ functions:
|
||||
- id: unlink-identity
|
||||
title: 'unlinkIdentity()'
|
||||
notes: |
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/settings/auth).
|
||||
- The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers).
|
||||
- The user needs to be signed in to call `unlinkIdentity()`.
|
||||
- The user must have at least 2 identities in order to unlink an identity.
|
||||
- The identity to be unlinked must belong to the user.
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"react-hooks/exhaustive-deps": 216,
|
||||
"import/no-anonymous-default-export": 57,
|
||||
"@tanstack/query/exhaustive-deps": 14,
|
||||
"@typescript-eslint/no-explicit-any": 1294
|
||||
"@typescript-eslint/no-explicit-any": 1291
|
||||
},
|
||||
"ruleFiles": {
|
||||
"react-hooks/exhaustive-deps": {
|
||||
@@ -350,8 +350,6 @@
|
||||
"components/interfaces/HomeNew/ProjectUsageSection.tsx": 1,
|
||||
"components/interfaces/Integrations/CronJobs/CreateCronJobSheet/CreateCronJobSheet.tsx": 1,
|
||||
"components/interfaces/Integrations/CronJobs/CronJobTableCell.tsx": 2,
|
||||
"components/interfaces/Integrations/CronJobs/CronJobs.utils.tsx": 1,
|
||||
"components/interfaces/Integrations/CronJobs/CronJobsTab.tsx": 1,
|
||||
"components/interfaces/Integrations/CronJobs/PreviousRunsTab.tsx": 2,
|
||||
"components/interfaces/Integrations/GraphQL/GraphiQLTab.tsx": 1,
|
||||
"components/interfaces/Integrations/Landing/Integrations.constants.tsx": 1,
|
||||
@@ -744,7 +742,6 @@
|
||||
"pages/project/[ref]/api/index.tsx": 3,
|
||||
"pages/project/[ref]/auth/templates/[templateId].tsx": 1,
|
||||
"pages/project/[ref]/functions/[functionSlug]/index.tsx": 3,
|
||||
"pages/project/[ref]/merge.tsx": 1,
|
||||
"pages/project/[ref]/settings/log-drains.tsx": 1,
|
||||
"pages/project/[ref]/storage/files/buckets/[bucketId].tsx": 1,
|
||||
"state/ai-assistant-state.tsx": 4,
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
import { partition } from 'lodash'
|
||||
import { PropsWithChildren } from 'react'
|
||||
|
||||
import { MaintenanceBanner } from '@/components/layouts/AppLayout/MaintenanceBanner'
|
||||
import { useIncidentStatusQuery } from '@/data/platform/incident-status-query'
|
||||
import { useFlag } from 'common'
|
||||
import { ClockSkewBanner } from 'components/layouts/AppLayout/ClockSkewBanner'
|
||||
@@ -8,19 +10,25 @@ import { NoticeBanner } from 'components/layouts/AppLayout/NoticeBanner'
|
||||
import { OrganizationResourceBanner } from '../Organization/HeaderBanner'
|
||||
|
||||
export const AppBannerWrapper = ({ children }: PropsWithChildren<{}>) => {
|
||||
const { data: incidents } = useIncidentStatusQuery()
|
||||
const { data: allStatusPageEvents } = useIncidentStatusQuery()
|
||||
const [maintenanceEvents, incidents] = partition(
|
||||
allStatusPageEvents ?? [],
|
||||
(event) => event.impact === 'maintenance'
|
||||
)
|
||||
|
||||
const ongoingIncident =
|
||||
useFlag('ongoingIncident') ||
|
||||
process.env.NEXT_PUBLIC_ONGOING_INCIDENT === 'true' ||
|
||||
(incidents?.length ?? 0) > 0
|
||||
incidents.length > 0
|
||||
const ongoingMaintenance = maintenanceEvents.length > 0
|
||||
|
||||
const showNoticeBanner = useFlag('showNoticeBanner')
|
||||
const clockSkewBanner = useFlag('clockSkewBanner')
|
||||
|
||||
return (
|
||||
<div className="flex flex-col">
|
||||
<div className="flex-shrink-0">
|
||||
{ongoingIncident && <IncidentBanner />}
|
||||
{ongoingIncident ? <IncidentBanner /> : ongoingMaintenance ? <MaintenanceBanner /> : null}
|
||||
{showNoticeBanner && <NoticeBanner />}
|
||||
<OrganizationResourceBanner />
|
||||
{clockSkewBanner && <ClockSkewBanner />}
|
||||
|
||||
@@ -114,9 +114,11 @@ export const BackupItem = ({ index, isHealthy, backup, onSelectBackup }: BackupI
|
||||
<Badge variant="default">{backup.isPhysicalBackup ? 'Physical' : 'Logical'}</Badge>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent side="bottom">
|
||||
Learn more about backup types{' '}
|
||||
{backup.isPhysicalBackup
|
||||
? 'File-level backups of your entire database.'
|
||||
: 'SQL-based backups of your entire database.'}{' '}
|
||||
<InlineLink href="https://supabase.com/blog/postgresql-physical-logical-backups">
|
||||
here
|
||||
Learn more
|
||||
</InlineLink>
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
|
||||
@@ -13,6 +13,7 @@ import { useSetProjectStatus } from 'data/projects/project-detail-query'
|
||||
import { useCheckEntitlements } from 'hooks/misc/useCheckEntitlements'
|
||||
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import { PROJECT_STATUS } from 'lib/constants'
|
||||
import { Admonition } from 'ui-patterns/admonition'
|
||||
import ConfirmationModal from 'ui-patterns/Dialogs/ConfirmationModal'
|
||||
import { BackupItem } from './BackupItem'
|
||||
import { BackupsEmpty } from './BackupsEmpty'
|
||||
@@ -95,17 +96,12 @@ export const BackupsList = () => {
|
||||
)}
|
||||
</div>
|
||||
<ConfirmationModal
|
||||
size="medium"
|
||||
confirmLabel="Confirm restore"
|
||||
confirmLabelLoading="Restoring"
|
||||
size="small"
|
||||
confirmLabel="Restore"
|
||||
confirmLabelLoading="Restoring..."
|
||||
variant="warning"
|
||||
visible={selectedBackup !== undefined}
|
||||
title="Confirm to restore from backup"
|
||||
alert={{
|
||||
base: { variant: 'warning' },
|
||||
title: 'Your project will be offline while the restore is in progress',
|
||||
description:
|
||||
'It is advised to upgrade at a time when there will be minimal impact for your application.',
|
||||
}}
|
||||
title="Restore from backup"
|
||||
loading={isRestoring || isSuccessBackup}
|
||||
onCancel={() => setSelectedBackup(undefined)}
|
||||
onConfirm={() => {
|
||||
@@ -114,11 +110,25 @@ export const BackupsList = () => {
|
||||
restoreFromBackup({ ref: projectRef, backup: selectedBackup })
|
||||
}}
|
||||
>
|
||||
<p className="text-sm">
|
||||
Are you sure you want to restore from{' '}
|
||||
{dayjs(selectedBackup?.inserted_at).format('DD MMM YYYY')}? This will destroy any new data
|
||||
written since this backup was made.
|
||||
</p>
|
||||
<div className="space-y-3">
|
||||
<p className="text-sm">
|
||||
This will restore your database to the backup made on{' '}
|
||||
{dayjs(selectedBackup?.inserted_at).format('DD MMM YYYY')} at{' '}
|
||||
{dayjs(selectedBackup?.inserted_at).format('HH:mm:ss')} UTC.
|
||||
</p>
|
||||
|
||||
<Admonition
|
||||
showIcon={false}
|
||||
type="warning"
|
||||
title="This action cannot be undone"
|
||||
description={
|
||||
<ul className="list-disc list-inside">
|
||||
<li>Your project will be offline during restoration</li>
|
||||
<li>Any new data since this backup will be lost</li>
|
||||
</ul>
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
</ConfirmationModal>
|
||||
</>
|
||||
)
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
import { AlertDescription_Shadcn_, Alert_Shadcn_, WarningIcon } from 'ui'
|
||||
import { Admonition } from 'ui-patterns/admonition'
|
||||
|
||||
export const BackupsStorageAlert = () => {
|
||||
return (
|
||||
<Alert_Shadcn_ variant="default">
|
||||
<WarningIcon />
|
||||
<AlertDescription_Shadcn_>
|
||||
Database backups do not include objects stored via the Storage API, as the database only
|
||||
<Admonition
|
||||
type="default"
|
||||
layout="horizontal"
|
||||
title="Storage objects are not included"
|
||||
description="Database backups do not include objects stored via the Storage API, as the database only
|
||||
includes metadata about these objects. Restoring an old backup does not restore objects that
|
||||
have been deleted since then.
|
||||
</AlertDescription_Shadcn_>
|
||||
</Alert_Shadcn_>
|
||||
have been deleted since then."
|
||||
/>
|
||||
)
|
||||
}
|
||||
@@ -4,6 +4,11 @@ import { cn } from 'ui'
|
||||
|
||||
import { Admonition } from 'ui-patterns'
|
||||
|
||||
/**
|
||||
* @deprecated Use Admonition from ui-patterns instead
|
||||
* Pass actions as a prop to the Admonition component
|
||||
*/
|
||||
|
||||
interface NoticeBarProps extends Omit<ComponentProps<typeof Admonition>, 'description'> {
|
||||
title?: string
|
||||
description?: string
|
||||
|
||||
@@ -3,7 +3,8 @@ import { arrayMove, SortableContext, verticalListSortingStrategy } from '@dnd-ki
|
||||
import dayjs from 'dayjs'
|
||||
import { useEffect, useRef } from 'react'
|
||||
|
||||
import { IS_PLATFORM, useParams } from 'common'
|
||||
import { IS_PLATFORM, useFlag, useParams } from 'common'
|
||||
import { ProjectUsageSection as ProjectUsageSectionV1 } from 'components/interfaces/Home/ProjectUsageSection'
|
||||
import { SortableSection } from 'components/interfaces/HomeNew/SortableSection'
|
||||
import { TopSection } from 'components/interfaces/HomeNew/TopSection'
|
||||
import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold'
|
||||
@@ -18,7 +19,7 @@ import { AdvisorSection } from './AdvisorSection'
|
||||
import { CustomReportSection } from './CustomReportSection'
|
||||
import { type GettingStartedState } from './GettingStarted/GettingStarted.types'
|
||||
import { GettingStartedSection } from './GettingStarted/GettingStartedSection'
|
||||
import { ProjectUsageSection } from './ProjectUsageSection'
|
||||
import { ProjectUsageSection as ProjectUsageSectionV2 } from './ProjectUsageSection'
|
||||
|
||||
export const HomeV2 = () => {
|
||||
const { enableBranching } = useParams()
|
||||
@@ -27,6 +28,8 @@ export const HomeV2 = () => {
|
||||
const { data: organization } = useSelectedOrganizationQuery()
|
||||
const { mutate: sendEvent } = useSendEventMutation()
|
||||
|
||||
const showHomepageUsageV2 = useFlag('newHomepageUsageV2')
|
||||
|
||||
const isMatureProject = dayjs(project?.inserted_at).isBefore(dayjs().subtract(10, 'day'))
|
||||
|
||||
const hasShownEnableBranchingModalRef = useRef(false)
|
||||
@@ -43,6 +46,8 @@ export const HomeV2 = () => {
|
||||
'empty'
|
||||
)
|
||||
|
||||
const UsageSection = showHomepageUsageV2 ? ProjectUsageSectionV2 : ProjectUsageSectionV1
|
||||
|
||||
const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 8 } }))
|
||||
|
||||
const handleDragEnd = (event: DragEndEvent) => {
|
||||
@@ -104,7 +109,7 @@ export const HomeV2 = () => {
|
||||
return (
|
||||
<div key={id} className={cn(isComingUp && 'opacity-60 pointer-events-none')}>
|
||||
<SortableSection id={id}>
|
||||
<ProjectUsageSection />
|
||||
<UsageSection />
|
||||
</SortableSection>
|
||||
</div>
|
||||
)
|
||||
|
||||
@@ -15,17 +15,21 @@ interface CustomDocumentProps {
|
||||
export const CustomDocument = ({ doc }: CustomDocumentProps) => {
|
||||
return (
|
||||
<ScaffoldContainer id={doc.id}>
|
||||
<ScaffoldSection>
|
||||
<ScaffoldSectionDetail className="sticky top-12 flex flex-col gap-y-8">
|
||||
<ScaffoldSection className="py-12">
|
||||
<ScaffoldSectionDetail>
|
||||
<p className="text-base m-0">{doc.name}</p>
|
||||
<p className="text-sm text-foreground-light m-0">{doc.description}</p>
|
||||
<div className="space-y-2 text-sm text-foreground-light [&_p]:m-0">
|
||||
<p>{doc.description}</p>
|
||||
</div>
|
||||
</ScaffoldSectionDetail>
|
||||
<ScaffoldSectionContent className="flex items-center justify-center h-full">
|
||||
<Button asChild type="default" iconRight={<ExternalLink />}>
|
||||
<a download href={doc.action.url} target="_blank" rel="noreferrer noopener">
|
||||
{doc.action.text}
|
||||
</a>
|
||||
</Button>
|
||||
<ScaffoldSectionContent>
|
||||
<div className="@lg:flex items-center justify-center h-full">
|
||||
<Button asChild type="default" iconRight={<ExternalLink />}>
|
||||
<a download href={doc.action.url} target="_blank" rel="noreferrer noopener">
|
||||
{doc.action.text}
|
||||
</a>
|
||||
</Button>
|
||||
</div>
|
||||
</ScaffoldSectionContent>
|
||||
</ScaffoldSection>
|
||||
</ScaffoldContainer>
|
||||
|
||||
@@ -37,10 +37,10 @@ export const DPA = () => {
|
||||
|
||||
return (
|
||||
<>
|
||||
<ScaffoldSection>
|
||||
<ScaffoldSectionDetail className="sticky space-y-6 top-12">
|
||||
<p className="text-base m-0">Data Processing Addendum (DPA)</p>
|
||||
<div className="space-y-2 text-sm text-foreground-light m-0">
|
||||
<ScaffoldSection className="py-12">
|
||||
<ScaffoldSectionDetail>
|
||||
<h4 className="mb-5">Data Processing Addendum (DPA)</h4>
|
||||
<div className="space-y-2 text-sm text-foreground-light [&_p]:m-0">
|
||||
<p>
|
||||
All organizations can sign our Data Processing Addendum ("DPA") as part of their GDPR
|
||||
compliance.
|
||||
@@ -62,18 +62,20 @@ export const DPA = () => {
|
||||
</p>
|
||||
</div>
|
||||
</ScaffoldSectionDetail>
|
||||
<ScaffoldSectionContent className="flex items-center justify-center h-full">
|
||||
<Button
|
||||
onClick={() => {
|
||||
setIsOpen(true)
|
||||
sendEvent({
|
||||
action: 'dpa_request_button_clicked',
|
||||
})
|
||||
}}
|
||||
type="default"
|
||||
>
|
||||
Request DPA
|
||||
</Button>
|
||||
<ScaffoldSectionContent>
|
||||
<div className="@lg:flex items-center justify-center h-full">
|
||||
<Button
|
||||
onClick={() => {
|
||||
setIsOpen(true)
|
||||
sendEvent({
|
||||
action: 'dpa_request_button_clicked',
|
||||
})
|
||||
}}
|
||||
type="default"
|
||||
>
|
||||
Request DPA
|
||||
</Button>
|
||||
</div>
|
||||
</ScaffoldSectionContent>
|
||||
</ScaffoldSection>
|
||||
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
import { SupportLink } from 'components/interfaces/Support/SupportLink'
|
||||
import { ScaffoldContainer, ScaffoldDivider, ScaffoldSection } from 'components/layouts/Scaffold'
|
||||
import {
|
||||
ScaffoldContainer,
|
||||
ScaffoldDivider,
|
||||
ScaffoldSection,
|
||||
ScaffoldSectionDetail,
|
||||
} from 'components/layouts/Scaffold'
|
||||
import { InlineLinkClassName } from 'components/ui/InlineLink'
|
||||
import { useCustomContent } from 'hooks/custom-content/useCustomContent'
|
||||
import { Fragment } from 'react'
|
||||
@@ -57,11 +62,13 @@ export const Documents = () => {
|
||||
<ScaffoldDivider />
|
||||
|
||||
<ScaffoldContainer>
|
||||
<ScaffoldSection>
|
||||
<p className="sticky space-y-6 top-12 text-sm text-foreground-light m-0 whitespace-nowrap">
|
||||
<SupportLink className={InlineLinkClassName}>Submit a support request</SupportLink> if
|
||||
you require additional documents for financial or tax reasons, such as a W-9 form.
|
||||
</p>
|
||||
<ScaffoldSection className="py-12">
|
||||
<ScaffoldSectionDetail className="col-span-full">
|
||||
<p className="text-sm text-foreground-light m-0">
|
||||
<SupportLink className={InlineLinkClassName}>Submit a support request</SupportLink> if
|
||||
you require additional documents for financial or tax reasons, such as a W-9 form.
|
||||
</p>
|
||||
</ScaffoldSectionDetail>
|
||||
</ScaffoldSection>
|
||||
</ScaffoldContainer>
|
||||
</>
|
||||
|
||||
@@ -14,45 +14,43 @@ export const HIPAA = () => {
|
||||
const { mutate: sendEvent } = useSendEventMutation()
|
||||
|
||||
return (
|
||||
<>
|
||||
<ScaffoldSection>
|
||||
<ScaffoldSectionDetail className="sticky space-y-6 top-12">
|
||||
<p className="text-base m-0">HIPAA</p>
|
||||
<div className="space-y-2 text-sm text-foreground-light m-0">
|
||||
<p>
|
||||
This is only for HIPAA requests. Please ignore this if you already have HIPAA enabled.
|
||||
</p>
|
||||
<p>
|
||||
Organizations on the Team Plan or above are eligible for a paid HIPAA compliance
|
||||
add-on. You can submit a request here and we will get back to you on the pricing and
|
||||
process for your use case.
|
||||
</p>
|
||||
<p>
|
||||
Organizations on the Free or Pro Plan can also submit a request for HIPAA. Note that
|
||||
you are still required to upgrade to the Team Plan after your request is approved.
|
||||
</p>
|
||||
</div>
|
||||
</ScaffoldSectionDetail>
|
||||
<ScaffoldSectionContent>
|
||||
<div className="flex items-center justify-center h-full">
|
||||
<Button asChild type="default" iconRight={<ExternalLink />}>
|
||||
<a
|
||||
href="https://forms.supabase.com/hipaa2"
|
||||
target="_blank"
|
||||
rel="noreferrer noopener"
|
||||
onClick={() =>
|
||||
sendEvent({
|
||||
action: 'hipaa_request_button_clicked',
|
||||
groups: { organization: organization?.slug ?? 'Unknown' },
|
||||
})
|
||||
}
|
||||
>
|
||||
Request HIPAA
|
||||
</a>
|
||||
</Button>
|
||||
</div>
|
||||
</ScaffoldSectionContent>
|
||||
</ScaffoldSection>
|
||||
</>
|
||||
<ScaffoldSection className="py-12">
|
||||
<ScaffoldSectionDetail>
|
||||
<h4 className="mb-5">HIPAA</h4>
|
||||
<div className="space-y-2 text-sm text-foreground-light [&_p]:m-0">
|
||||
<p>
|
||||
This is only for HIPAA requests. Please ignore this if you already have HIPAA enabled.
|
||||
</p>
|
||||
<p>
|
||||
Organizations on the Team Plan or above are eligible for a paid HIPAA compliance add-on.
|
||||
You can submit a request here and we will get back to you on the pricing and process for
|
||||
your use case.
|
||||
</p>
|
||||
<p>
|
||||
Organizations on the Free or Pro Plan can also submit a request for HIPAA. Note that you
|
||||
are still required to upgrade to the Team Plan after your request is approved.
|
||||
</p>
|
||||
</div>
|
||||
</ScaffoldSectionDetail>
|
||||
<ScaffoldSectionContent>
|
||||
<div className="@lg:flex items-center justify-center h-full">
|
||||
<Button asChild type="default" iconRight={<ExternalLink />}>
|
||||
<a
|
||||
href="https://forms.supabase.com/hipaa2"
|
||||
target="_blank"
|
||||
rel="noreferrer noopener"
|
||||
onClick={() =>
|
||||
sendEvent({
|
||||
action: 'hipaa_request_button_clicked',
|
||||
groups: { organization: organization?.slug ?? 'Unknown' },
|
||||
})
|
||||
}
|
||||
>
|
||||
Request HIPAA
|
||||
</a>
|
||||
</Button>
|
||||
</div>
|
||||
</ScaffoldSectionContent>
|
||||
</ScaffoldSection>
|
||||
)
|
||||
}
|
||||
@@ -56,10 +56,10 @@ export const SOC2 = () => {
|
||||
}
|
||||
|
||||
return (
|
||||
<ScaffoldSection>
|
||||
<ScaffoldSectionDetail className="sticky space-y-6 top-12">
|
||||
<p className="text-base m-0">SOC2 Type 2</p>
|
||||
<div className="space-y-2 text-sm text-foreground-light m-0">
|
||||
<ScaffoldSection className="py-12">
|
||||
<ScaffoldSectionDetail>
|
||||
<h4 className="mb-5">SOC2 Type 2</h4>
|
||||
<div className="space-y-2 text-sm text-foreground-light [&_p]:m-0">
|
||||
<p>
|
||||
Organizations on Team Plan or above have access to our most recent SOC2 Type 2 report.
|
||||
</p>
|
||||
@@ -67,19 +67,21 @@ export const SOC2 = () => {
|
||||
</ScaffoldSectionDetail>
|
||||
<ScaffoldSectionContent>
|
||||
{isLoadingPermissions || isLoadingEntitlement ? (
|
||||
<div className="flex items-center justify-center h-full">
|
||||
<div className="@lg:flex items-center justify-center h-full">
|
||||
<ShimmeringLoader className="w-24" />
|
||||
</div>
|
||||
) : !canReadSubscriptions ? (
|
||||
<NoPermission resourceText="access our SOC2 Type 2 report" />
|
||||
) : !hasAccessToSoc2Report ? (
|
||||
<div className="flex items-center justify-center h-full">
|
||||
<Link href={`/org/${slug}/billing?panel=subscriptionPlan&source=soc2`}>
|
||||
<Button type="default">Upgrade to Team</Button>
|
||||
</Link>
|
||||
<div className="@lg:flex items-center justify-center h-full">
|
||||
<Button asChild type="default">
|
||||
<Link href={`/org/${slug}/billing?panel=subscriptionPlan&source=soc2`}>
|
||||
Upgrade to Team
|
||||
</Link>
|
||||
</Button>
|
||||
</div>
|
||||
) : (
|
||||
<div className="flex items-center justify-center h-full">
|
||||
<div className="@lg:flex items-center justify-center h-full">
|
||||
<Button
|
||||
type="default"
|
||||
icon={<Download />}
|
||||
|
||||
@@ -54,46 +54,45 @@ export const SecurityQuestionnaire = () => {
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<ScaffoldSection>
|
||||
<ScaffoldSectionDetail className="sticky space-y-6 top-12">
|
||||
<p className="text-base m-0">Standard Security Questionnaire</p>
|
||||
<div className="space-y-2 text-sm text-foreground-light m-0">
|
||||
<p>
|
||||
Organizations on Team Plan or above have access to our standard security
|
||||
questionnaire.
|
||||
</p>
|
||||
<ScaffoldSection className="py-12">
|
||||
<ScaffoldSectionDetail>
|
||||
<h4 className="mb-5">Standard Security Questionnaire</h4>
|
||||
<div className="space-y-2 text-sm text-foreground-light [&_p]:m-0">
|
||||
<p>
|
||||
Organizations on Team Plan or above have access to our standard security questionnaire.
|
||||
</p>
|
||||
</div>
|
||||
</ScaffoldSectionDetail>
|
||||
<ScaffoldSectionContent>
|
||||
{isLoadingPermissions || isLoadingEntitlement ? (
|
||||
<div className="@lg:flex items-center justify-center h-full">
|
||||
<ShimmeringLoader className="w-24" />
|
||||
</div>
|
||||
</ScaffoldSectionDetail>
|
||||
<ScaffoldSectionContent>
|
||||
{isLoadingPermissions || isLoadingEntitlement ? (
|
||||
<div className="flex items-center justify-center h-full">
|
||||
<ShimmeringLoader className="w-24" />
|
||||
</div>
|
||||
) : !canReadSubscriptions ? (
|
||||
<NoPermission resourceText="access our security questionnaire" />
|
||||
) : !hasAccessToQuestionnaire ? (
|
||||
<div className="flex items-center justify-center h-full">
|
||||
) : !canReadSubscriptions ? (
|
||||
<NoPermission resourceText="access our security questionnaire" />
|
||||
) : !hasAccessToQuestionnaire ? (
|
||||
<div className="@lg:flex items-center justify-center h-full">
|
||||
<Button asChild type="default">
|
||||
<Link
|
||||
href={`/org/${slug}/billing?panel=subscriptionPlan&source=securityQuestionnaire`}
|
||||
>
|
||||
<Button type="default">Upgrade to Team</Button>
|
||||
Upgrade to Team
|
||||
</Link>
|
||||
</div>
|
||||
) : (
|
||||
<div className="flex items-center justify-center h-full">
|
||||
<Button
|
||||
type="default"
|
||||
icon={<Download />}
|
||||
onClick={handleDownloadClick}
|
||||
disabled={!slug}
|
||||
>
|
||||
Download Questionnaire
|
||||
</Button>
|
||||
</div>
|
||||
)}
|
||||
</ScaffoldSectionContent>
|
||||
</ScaffoldSection>
|
||||
</>
|
||||
</Button>
|
||||
</div>
|
||||
) : (
|
||||
<div className="@lg:flex items-center justify-center h-full">
|
||||
<Button
|
||||
type="default"
|
||||
icon={<Download />}
|
||||
onClick={handleDownloadClick}
|
||||
disabled={!slug}
|
||||
>
|
||||
Download Questionnaire
|
||||
</Button>
|
||||
</div>
|
||||
)}
|
||||
</ScaffoldSectionContent>
|
||||
</ScaffoldSection>
|
||||
)
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
import { ExternalLink } from 'lucide-react'
|
||||
import { Download } from 'lucide-react'
|
||||
|
||||
import {
|
||||
ScaffoldSection,
|
||||
@@ -14,34 +14,36 @@ export const TIA = () => {
|
||||
const { mutate: sendEvent } = useSendEventMutation()
|
||||
|
||||
return (
|
||||
<ScaffoldSection>
|
||||
<ScaffoldSectionDetail className="sticky space-y-6 top-12">
|
||||
<p className="text-base m-0">Transfer Impact Assessment (TIA)</p>
|
||||
<div className="space-y-2 text-sm text-foreground-light m-0">
|
||||
<ScaffoldSection className="py-12">
|
||||
<ScaffoldSectionDetail>
|
||||
<h4 className="mb-5">Transfer Impact Assessment (TIA)</h4>
|
||||
<div className="space-y-2 text-sm text-foreground-light [&_p]:m-0">
|
||||
<p>
|
||||
All organizations can access and use our TIA as part of their GDPR-compliant data
|
||||
transfer process.
|
||||
</p>
|
||||
</div>
|
||||
</ScaffoldSectionDetail>
|
||||
<ScaffoldSectionContent className="flex items-center justify-center h-full">
|
||||
<Button asChild type="default" iconRight={<ExternalLink />}>
|
||||
<a
|
||||
href="https://supabase.com/downloads/docs/Supabase+TIA+250314.pdf"
|
||||
target="_blank"
|
||||
rel="noreferrer noopener"
|
||||
download={true}
|
||||
onClick={() =>
|
||||
sendEvent({
|
||||
action: 'document_view_button_clicked',
|
||||
properties: { documentName: 'TIA' },
|
||||
groups: { organization: organization?.slug ?? 'Unknown' },
|
||||
})
|
||||
}
|
||||
>
|
||||
View TIA
|
||||
</a>
|
||||
</Button>
|
||||
<ScaffoldSectionContent>
|
||||
<div className="@lg:flex items-center justify-center h-full">
|
||||
<Button asChild type="default" iconRight={<Download />}>
|
||||
<a
|
||||
href="https://supabase.com/downloads/docs/Supabase+TIA+250314.pdf"
|
||||
target="_blank"
|
||||
rel="noreferrer noopener"
|
||||
download={true}
|
||||
onClick={() =>
|
||||
sendEvent({
|
||||
action: 'document_view_button_clicked',
|
||||
properties: { documentName: 'TIA' },
|
||||
groups: { organization: organization?.slug ?? 'Unknown' },
|
||||
})
|
||||
}
|
||||
>
|
||||
Download TIA
|
||||
</a>
|
||||
</Button>
|
||||
</div>
|
||||
</ScaffoldSectionContent>
|
||||
</ScaffoldSection>
|
||||
)
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import Link from 'next/link'
|
||||
|
||||
import { useFlag, useParams } from 'common'
|
||||
import { NoticeBar } from 'components/interfaces/DiskManagement/ui/NoticeBar'
|
||||
import {
|
||||
@@ -13,29 +15,14 @@ import { useProjectServiceVersionsQuery } from 'data/projects/project-service-ve
|
||||
import { useReadReplicasQuery } from 'data/read-replicas/replicas-query'
|
||||
import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled'
|
||||
import { useIsOrioleDb, useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
||||
import Link from 'next/link'
|
||||
import {
|
||||
AlertDescription_Shadcn_,
|
||||
AlertTitle_Shadcn_,
|
||||
Alert_Shadcn_,
|
||||
Badge,
|
||||
Button,
|
||||
Input,
|
||||
Tooltip,
|
||||
TooltipContent,
|
||||
TooltipTrigger,
|
||||
} from 'ui'
|
||||
import { Badge, Button, Input, Tooltip, TooltipContent, TooltipTrigger } from 'ui'
|
||||
import { Admonition } from 'ui-patterns/admonition'
|
||||
import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader'
|
||||
import { ProjectUpgradeAlert } from '../General/Infrastructure/ProjectUpgradeAlert'
|
||||
import { InstanceConfiguration } from './InfrastructureConfiguration/InstanceConfiguration'
|
||||
import {
|
||||
ObjectsToBeDroppedWarning,
|
||||
ReadReplicasWarning,
|
||||
UnsupportedExtensionsWarning,
|
||||
UserDefinedObjectsInInternalSchemasWarning,
|
||||
} from './UpgradeWarnings'
|
||||
import { ReadReplicasWarning, ValidationErrorsWarning } from './UpgradeWarnings'
|
||||
|
||||
const InfrastructureInfo = () => {
|
||||
export const InfrastructureInfo = () => {
|
||||
const { ref } = useParams()
|
||||
const { data: project } = useSelectedProjectQuery()
|
||||
|
||||
@@ -81,9 +68,7 @@ const InfrastructureInfo = () => {
|
||||
const isInactive = project?.status === 'INACTIVE'
|
||||
const hasReadReplicas = (databases ?? []).length > 1
|
||||
|
||||
const hasObjectsToBeDropped = (data?.objects_to_be_dropped ?? []).length > 0
|
||||
const hasUnsupportedExtensions = (data?.unsupported_extensions || []).length > 0
|
||||
const hasObjectsInternalSchema = (data?.user_defined_objects_in_internal_schemas || []).length > 0
|
||||
const hasValidationErrors = (data?.validation_errors ?? []).length > 0
|
||||
|
||||
return (
|
||||
<>
|
||||
@@ -117,21 +102,19 @@ const InfrastructureInfo = () => {
|
||||
<ScaffoldContainer>
|
||||
<ScaffoldSection>
|
||||
<ScaffoldSectionDetail>
|
||||
<h4 className="text-base capitalize m-0">Service Versions</h4>
|
||||
<h4 className="text-base capitalize m-0">Service versions</h4>
|
||||
<p className="text-foreground-light text-sm pr-8 mt-1">
|
||||
Service versions and upgrade eligibility for your provisioned instance.
|
||||
</p>
|
||||
</ScaffoldSectionDetail>
|
||||
<ScaffoldSectionContent>
|
||||
{isInactive ? (
|
||||
<Alert_Shadcn_>
|
||||
<AlertTitle_Shadcn_>
|
||||
Service versions cannot be retrieved while project is paused
|
||||
</AlertTitle_Shadcn_>
|
||||
<AlertDescription_Shadcn_>
|
||||
Restoring the project will update Postgres to the newest version
|
||||
</AlertDescription_Shadcn_>
|
||||
</Alert_Shadcn_>
|
||||
<Admonition
|
||||
type="note"
|
||||
showIcon={false}
|
||||
title="Service versions cannot be retrieved while project is paused"
|
||||
description="Restoring the project will update Postgres to the newest version"
|
||||
/>
|
||||
) : (
|
||||
<>
|
||||
{/* [Joshen] Double check why we need this waterfall loading behaviour here */}
|
||||
@@ -213,7 +196,7 @@ const InfrastructureInfo = () => {
|
||||
</>
|
||||
)}
|
||||
|
||||
{showDatabaseUpgrades && data.eligible ? (
|
||||
{showDatabaseUpgrades && data && data.eligible ? (
|
||||
hasReadReplicas ? (
|
||||
<ReadReplicasWarning latestPgVersion={latestPgVersion} />
|
||||
) : (
|
||||
@@ -221,20 +204,8 @@ const InfrastructureInfo = () => {
|
||||
)
|
||||
) : null}
|
||||
|
||||
{showDatabaseUpgrades && !data.eligible ? (
|
||||
hasObjectsToBeDropped ? (
|
||||
<ObjectsToBeDroppedWarning
|
||||
objectsToBeDropped={data.objects_to_be_dropped}
|
||||
/>
|
||||
) : hasUnsupportedExtensions ? (
|
||||
<UnsupportedExtensionsWarning
|
||||
unsupportedExtensions={data.unsupported_extensions}
|
||||
/>
|
||||
) : hasObjectsInternalSchema ? (
|
||||
<UserDefinedObjectsInInternalSchemasWarning
|
||||
objects={data.user_defined_objects_in_internal_schemas}
|
||||
/>
|
||||
) : null
|
||||
{showDatabaseUpgrades && data && !data.eligible && hasValidationErrors ? (
|
||||
<ValidationErrorsWarning validationErrors={data.validation_errors ?? []} />
|
||||
) : null}
|
||||
</>
|
||||
)}
|
||||
@@ -246,5 +217,3 @@ const InfrastructureInfo = () => {
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default InfrastructureInfo
|
||||
@@ -1,146 +1,147 @@
|
||||
import Link from 'next/link'
|
||||
|
||||
import { useParams } from 'common'
|
||||
import { ProjectUpgradeEligibilityValidationError } from '@/data/config/project-upgrade-eligibility-query'
|
||||
import { useFlag, useParams } from 'common'
|
||||
import { InlineLink } from 'components/ui/InlineLink'
|
||||
import { DOCS_URL } from 'lib/constants'
|
||||
import { Alert_Shadcn_, AlertDescription_Shadcn_, AlertTitle_Shadcn_, Badge, Button } from 'ui'
|
||||
import { Button } from 'ui'
|
||||
import { Admonition } from 'ui-patterns/admonition'
|
||||
|
||||
export const ReadReplicasWarning = ({ latestPgVersion }: { latestPgVersion: string }) => {
|
||||
return (
|
||||
<Alert_Shadcn_>
|
||||
<AlertTitle_Shadcn_>
|
||||
A new version of Postgres is available for your project
|
||||
</AlertTitle_Shadcn_>
|
||||
<AlertDescription_Shadcn_>
|
||||
You will need to remove all read replicas prior to upgrading your Postgres version to the
|
||||
latest available ({latestPgVersion}).
|
||||
</AlertDescription_Shadcn_>
|
||||
</Alert_Shadcn_>
|
||||
)
|
||||
}
|
||||
|
||||
export const ObjectsToBeDroppedWarning = ({
|
||||
objectsToBeDropped,
|
||||
}: {
|
||||
objectsToBeDropped: string[]
|
||||
}) => {
|
||||
const { ref } = useParams()
|
||||
const unifiedReplication = useFlag('unifiedReplication')
|
||||
|
||||
return (
|
||||
<Alert_Shadcn_ title="A newer version of Postgres is available for your project">
|
||||
<AlertTitle_Shadcn_>A newer version of Postgres is available</AlertTitle_Shadcn_>
|
||||
<AlertDescription_Shadcn_ className="flex flex-col gap-3">
|
||||
<>
|
||||
<p className="mb-1">
|
||||
The following objects are not supported and must be removed before upgrading.{' '}
|
||||
<InlineLink
|
||||
className="text-foreground-lighter hover:text-foreground transition-colors"
|
||||
href={`${DOCS_URL}/guides/platform/upgrading#extensions`}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Learn more
|
||||
</InlineLink>
|
||||
</p>
|
||||
|
||||
{/* Old */}
|
||||
<ul className="pl-4 pb-3">
|
||||
{objectsToBeDropped.map((obj) => (
|
||||
<li className="list-disc" key={obj}>
|
||||
{obj}
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
|
||||
<Button className="w-fit" size="tiny" type="default" asChild>
|
||||
<Link href={`/project/${ref}/database/functions`}>Manage functions</Link>
|
||||
<Admonition
|
||||
type="note"
|
||||
showIcon={false}
|
||||
title="A newer version of Postgres is available"
|
||||
description={`You will need to remove all read replicas prior to upgrading your Postgres version to the latest available (${latestPgVersion}).`}
|
||||
actions={
|
||||
unifiedReplication ? (
|
||||
<Button asChild type="default">
|
||||
<Link href={`/project/${ref}/database/replication`}>Manage read replicas</Link>
|
||||
</Button>
|
||||
</>
|
||||
</AlertDescription_Shadcn_>
|
||||
</Alert_Shadcn_>
|
||||
) : undefined
|
||||
}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
export const UnsupportedExtensionsWarning = ({
|
||||
unsupportedExtensions,
|
||||
const getValidationErrorTitle = (error: ProjectUpgradeEligibilityValidationError): string => {
|
||||
switch (error.type) {
|
||||
case 'objects_depending_on_pg_cron':
|
||||
return error.dependents.join(', ')
|
||||
case 'indexes_referencing_ll_to_earth':
|
||||
return `${error.schema_name}.${error.index_name}`
|
||||
case 'function_using_obsolete_lang':
|
||||
return `${error.schema_name}.${error.function_name}`
|
||||
case 'unsupported_extension':
|
||||
return error.extension_name
|
||||
case 'unsupported_fdw_handler':
|
||||
return error.fdw_name
|
||||
case 'unlogged_table_with_persistent_sequence':
|
||||
return `${error.schema_name}.${error.table_name}`
|
||||
case 'user_defined_objects_in_internal_schemas':
|
||||
return `${error.schema_name}.${error.obj_name}`
|
||||
case 'active_replication_slot':
|
||||
return error.slot_name
|
||||
}
|
||||
}
|
||||
|
||||
const getValidationErrorDescription = (error: ProjectUpgradeEligibilityValidationError): string => {
|
||||
switch (error.type) {
|
||||
case 'objects_depending_on_pg_cron':
|
||||
return 'Remove objects that depend on pg_cron'
|
||||
case 'indexes_referencing_ll_to_earth':
|
||||
return `Drop or recreate the index on table ${error.schema_name}.${error.table_name} that references ll_to_earth()`
|
||||
case 'function_using_obsolete_lang':
|
||||
return `Update the function to use a supported language instead of ${error.lang_name}`
|
||||
case 'unsupported_extension':
|
||||
return 'Remove the unsupported extension'
|
||||
case 'unsupported_fdw_handler':
|
||||
return `Update or remove the FDW using the obsolete handler ${error.fdw_handler_name}`
|
||||
case 'unlogged_table_with_persistent_sequence':
|
||||
return `Convert the sequence ${error.sequence_name} to unlogged or convert the table to logged`
|
||||
case 'user_defined_objects_in_internal_schemas':
|
||||
return `Move the ${error.obj_type} to your own schema`
|
||||
case 'active_replication_slot':
|
||||
return 'Drop the active replication slot'
|
||||
}
|
||||
}
|
||||
|
||||
const ValidationErrorItem = ({ error }: { error: ProjectUpgradeEligibilityValidationError }) => {
|
||||
const { ref: projectRef } = useParams()
|
||||
const title = getValidationErrorTitle(error)
|
||||
const description = getValidationErrorDescription(error)
|
||||
|
||||
const getManageLink = (): string | null => {
|
||||
const encode = encodeURIComponent
|
||||
switch (error.type) {
|
||||
case 'function_using_obsolete_lang':
|
||||
return `/project/${projectRef}/database/functions?schema=${encode(error.schema_name)}&search=${encode(error.function_name)}`
|
||||
case 'unsupported_extension':
|
||||
return `/project/${projectRef}/database/extensions?filter=${encode(error.extension_name)}`
|
||||
case 'indexes_referencing_ll_to_earth':
|
||||
return `/project/${projectRef}/database/indexes?schema=${encode(error.schema_name)}&search=${encode(error.index_name)}`
|
||||
case 'unlogged_table_with_persistent_sequence':
|
||||
return `/project/${projectRef}/database/tables?schema=${encode(error.schema_name)}&search=${encode(error.table_name)}`
|
||||
case 'user_defined_objects_in_internal_schemas':
|
||||
if (error.obj_type === 'function') {
|
||||
return `/project/${projectRef}/database/functions?schema=${encode(error.schema_name)}&search=${encode(error.obj_name)}`
|
||||
}
|
||||
if (error.obj_type === 'table') {
|
||||
return `/project/${projectRef}/database/tables?schema=${encode(error.schema_name)}&search=${encode(error.obj_name)}`
|
||||
}
|
||||
return null
|
||||
case 'active_replication_slot':
|
||||
return null
|
||||
case 'unsupported_fdw_handler':
|
||||
return `/project/${projectRef}/integrations`
|
||||
case 'objects_depending_on_pg_cron':
|
||||
return null
|
||||
default:
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
const manageLink = getManageLink()
|
||||
|
||||
return (
|
||||
<li className="py-3 last:pb-0 flex flex-row gap-x-3 justify-between items-center">
|
||||
<div className="flex flex-col gap-y-0.5 flex-1 min-w-0">
|
||||
<h6 className="overflow-hidden text-ellipsis whitespace-nowrap min-w-0 text-sm font-normal text-foreground">
|
||||
{title}
|
||||
</h6>
|
||||
<p className="text-foreground-lighter text-xs">{description}</p>
|
||||
</div>
|
||||
{manageLink && (
|
||||
<Button size="tiny" type="default" asChild>
|
||||
<Link href={manageLink}>Manage</Link>
|
||||
</Button>
|
||||
)}
|
||||
</li>
|
||||
)
|
||||
}
|
||||
|
||||
export const ValidationErrorsWarning = ({
|
||||
validationErrors,
|
||||
}: {
|
||||
unsupportedExtensions: string[]
|
||||
validationErrors: ProjectUpgradeEligibilityValidationError[]
|
||||
}) => {
|
||||
const { ref } = useParams()
|
||||
|
||||
return (
|
||||
<Alert_Shadcn_ title="A newer version of Postgres is available">
|
||||
<AlertTitle_Shadcn_>A newer version of Postgres is available</AlertTitle_Shadcn_>
|
||||
<AlertDescription_Shadcn_ className="flex flex-col gap-3">
|
||||
<>
|
||||
<p className="mb-1">
|
||||
The following extensions are not supported in newer versions of Postgres and must be
|
||||
removed before upgrading.{' '}
|
||||
<InlineLink
|
||||
className="text-foreground-lighter hover:text-foreground transition-colors"
|
||||
href={`${DOCS_URL}/guides/platform/upgrading#upgrading-to-postgres-17`}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Learn more
|
||||
</InlineLink>
|
||||
</p>
|
||||
|
||||
<ul className="border-t border-border-muted flex flex-col divide-y divide-border-muted">
|
||||
{unsupportedExtensions.map((obj: string) => (
|
||||
<li className="py-3 last:pb-0 flex flex-row justify-between gap-2" key={obj}>
|
||||
<div className="flex flex-row gap-2 items-center flex-1 min-w-0">
|
||||
<p className="overflow-hidden text-ellipsis whitespace-nowrap min-w-0">{obj}</p>
|
||||
<Badge variant="warning" className="flex-shrink-0">
|
||||
Deprecated
|
||||
</Badge>
|
||||
</div>
|
||||
<Button size="tiny" type="default" asChild>
|
||||
<Link href={`/project/${ref}/database/extensions?filter=${obj}`}>Manage</Link>
|
||||
</Button>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</>
|
||||
</AlertDescription_Shadcn_>
|
||||
</Alert_Shadcn_>
|
||||
)
|
||||
}
|
||||
|
||||
export const UserDefinedObjectsInInternalSchemasWarning = ({ objects }: { objects: string[] }) => {
|
||||
return (
|
||||
<Alert_Shadcn_ title="A newer version of Postgres is available for your project">
|
||||
<AlertTitle_Shadcn_>A newer version of Postgres is available</AlertTitle_Shadcn_>
|
||||
<AlertDescription_Shadcn_ className="flex flex-col gap-3">
|
||||
<div>
|
||||
<p className="mb-1">
|
||||
The following objects must be removed from the auth/realtime/storage schemas before
|
||||
upgrading:
|
||||
</p>
|
||||
|
||||
<ul className="pl-4">
|
||||
{objects.map((obj: string) => (
|
||||
<li className="list-disc" key={obj}>
|
||||
{obj}
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
<Admonition type="note" showIcon={false} title="A newer version of Postgres is available">
|
||||
<div className="flex flex-col gap-3">
|
||||
<p>
|
||||
These schemas are Supabase-managed and creating custom objects in them is no longer
|
||||
supported. Check the changelog to see how to move them to your own schemas.
|
||||
The following issues must be resolved before upgrading.{' '}
|
||||
<InlineLink href={`${DOCS_URL}/guides/platform/upgrading`}>Learn more</InlineLink>
|
||||
</p>
|
||||
<div>
|
||||
<Button size="tiny" type="default" asChild>
|
||||
<a
|
||||
href="https://github.com/orgs/supabase/discussions/34270"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
View changelog
|
||||
</a>
|
||||
</Button>
|
||||
</div>
|
||||
</AlertDescription_Shadcn_>
|
||||
</Alert_Shadcn_>
|
||||
<ul className="border-t border-border-muted flex flex-col divide-y divide-border-muted">
|
||||
{validationErrors.map((error, idx) => (
|
||||
<ValidationErrorItem key={`${error.type}-${idx}`} error={error} />
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
</Admonition>
|
||||
)
|
||||
}
|
||||
@@ -17,7 +17,6 @@ import {
|
||||
import { useContextMenu } from 'react-contexify'
|
||||
import SVG from 'react-inlinesvg'
|
||||
|
||||
import { useParams } from 'common'
|
||||
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
|
||||
import { BASE_PATH } from 'lib/constants'
|
||||
import { formatBytes } from 'lib/helpers'
|
||||
@@ -115,8 +114,6 @@ export const FileExplorerRow = ({
|
||||
selectedItems = [],
|
||||
style,
|
||||
}: FileExplorerRowProps) => {
|
||||
const { bucketId } = useParams()
|
||||
|
||||
const {
|
||||
selectedBucket,
|
||||
selectedFilePreview,
|
||||
|
||||
@@ -101,7 +101,10 @@ export const FileExplorerRowEditing = ({
|
||||
mimeType={item.metadata?.mimetype}
|
||||
/>
|
||||
</div>
|
||||
<form className="h-9" onSubmit={(event) => onSaveItemName(itemName, event)}>
|
||||
<form
|
||||
className="h-9"
|
||||
onSubmit={(event) => onSaveItemName(itemName.trim() || item.name, event)}
|
||||
>
|
||||
<input
|
||||
autoFocus
|
||||
ref={inputRef}
|
||||
@@ -109,12 +112,12 @@ export const FileExplorerRowEditing = ({
|
||||
type="text"
|
||||
value={itemName}
|
||||
onChange={(event) => setItemName(event.target.value)}
|
||||
onBlur={(event) => onSaveItemName(itemName, event)}
|
||||
onBlur={(event) => onSaveItemName(itemName.trim() || item.name, event)}
|
||||
/>
|
||||
<button
|
||||
className="hidden"
|
||||
type="submit"
|
||||
onClick={(event) => onSaveItemName(itemName, event)}
|
||||
onClick={(event) => onSaveItemName(itemName.trim() || item.name, event)}
|
||||
/>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
import { HeaderBanner } from 'components/interfaces/Organization/HeaderBanner'
|
||||
import { InlineLink } from 'components/ui/InlineLink'
|
||||
|
||||
/**
|
||||
* Used to display ongoing maintenance
|
||||
*/
|
||||
export function MaintenanceBanner() {
|
||||
return (
|
||||
<HeaderBanner
|
||||
variant="note"
|
||||
title="Scheduled maintenance is in progress"
|
||||
description={
|
||||
<>
|
||||
Follow the <InlineLink href="https://status.supabase.com">status page</InlineLink> for
|
||||
updates
|
||||
</>
|
||||
}
|
||||
/>
|
||||
)
|
||||
}
|
||||
@@ -111,11 +111,14 @@ export const ProjectLayout = forwardRef<HTMLDivElement, PropsWithChildren<Projec
|
||||
? selectedProject.status === PROJECT_STATUS.ACTIVE_HEALTHY ||
|
||||
(selectedProject.status === PROJECT_STATUS.COMING_UP &&
|
||||
router.pathname.includes('/project/[ref]/settings')) ||
|
||||
router.pathname.includes('/project/[ref]/branches')
|
||||
router.pathname.includes('/project/[ref]/branches') ||
|
||||
router.pathname.includes('/project/[ref]/functions')
|
||||
: true
|
||||
|
||||
const ignorePausedState =
|
||||
router.pathname === '/project/[ref]' || router.pathname.includes('/project/[ref]/settings')
|
||||
router.pathname === '/project/[ref]' ||
|
||||
router.pathname.includes('/project/[ref]/settings') ||
|
||||
router.pathname.includes('/project/[ref]/functions')
|
||||
const showPausedState = isPaused && !ignorePausedState
|
||||
|
||||
const sidebarMinSizePercentage = 1
|
||||
@@ -284,12 +287,16 @@ const ContentWrapper = ({ isLoading, isBlocking = true, children }: ContentWrapp
|
||||
|
||||
const isBranchesPage = router.pathname.includes('/project/[ref]/branches')
|
||||
const isSettingsPages = router.pathname.includes('/project/[ref]/settings')
|
||||
const isEdgeFunctionPages = router.pathname.includes('/project/[ref]/functions')
|
||||
const isVaultPage = router.pathname === '/project/[ref]/settings/vault'
|
||||
const isBackupsPage = router.pathname.includes('/project/[ref]/database/backups')
|
||||
const isHomePage = router.pathname === '/project/[ref]'
|
||||
|
||||
const requiresDbConnection: boolean =
|
||||
(!isSettingsPages && !routesToIgnoreDBConnection.includes(router.pathname)) || isVaultPage
|
||||
(!isEdgeFunctionPages &&
|
||||
!isSettingsPages &&
|
||||
!routesToIgnoreDBConnection.includes(router.pathname)) ||
|
||||
isVaultPage
|
||||
const requiresPostgrestConnection = !routesToIgnorePostgrestConnection.includes(router.pathname)
|
||||
const requiresProjectDetails = !routesToIgnoreProjectDetailsRequest.includes(router.pathname)
|
||||
|
||||
@@ -355,7 +362,7 @@ const ContentWrapper = ({ isLoading, isBlocking = true, children }: ContentWrapp
|
||||
return <RestoringState />
|
||||
}
|
||||
|
||||
if (isProjectRestoreFailed && !isBackupsPage) {
|
||||
if (isProjectRestoreFailed && !isBackupsPage && !isEdgeFunctionPages) {
|
||||
return <RestoreFailedState />
|
||||
}
|
||||
|
||||
|
||||
@@ -118,54 +118,6 @@ export const generateSettingsMenu = (
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Configuration',
|
||||
items: [
|
||||
{
|
||||
name: 'Database',
|
||||
key: 'database',
|
||||
url: isProjectBuilding ? buildingUrl : `/project/${ref}/database/settings`,
|
||||
items: [],
|
||||
rightIcon: <ArrowUpRight strokeWidth={1} className="h-4 w-4" />,
|
||||
},
|
||||
...(authEnabled
|
||||
? [
|
||||
{
|
||||
name: 'Authentication',
|
||||
key: 'auth',
|
||||
url: authProvidersEnabled
|
||||
? `/project/${ref}/auth/providers`
|
||||
: `/project/${ref}/auth/policies`,
|
||||
items: [],
|
||||
rightIcon: <ArrowUpRight strokeWidth={1} className="h-4 w-4" />,
|
||||
},
|
||||
]
|
||||
: []),
|
||||
...(storageEnabled
|
||||
? [
|
||||
{
|
||||
name: 'Storage',
|
||||
key: 'storage',
|
||||
url: `/project/${ref}/storage/settings`,
|
||||
items: [],
|
||||
rightIcon: <ArrowUpRight strokeWidth={1} className="h-4 w-4" />,
|
||||
},
|
||||
]
|
||||
: []),
|
||||
...(edgeFunctionsEnabled
|
||||
? [
|
||||
{
|
||||
name: 'Edge Functions',
|
||||
key: 'functions',
|
||||
url: `/project/${ref}/functions/secrets`,
|
||||
items: [],
|
||||
rightIcon: <ArrowUpRight strokeWidth={1} className="h-4 w-4" />,
|
||||
},
|
||||
]
|
||||
: []),
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
title: 'Billing',
|
||||
items: [
|
||||
|
||||
@@ -12,11 +12,20 @@ export type ProjectUpgradeTargetVersion = { postgres_version: string; release_ch
|
||||
export type ProjectUpgradeEligibilityVariables = { projectRef?: string }
|
||||
export type ProjectUpgradeEligibilityResponse =
|
||||
components['schemas']['ProjectUpgradeEligibilityResponse']
|
||||
export type ProjectUpgradeEligibilityValidationError =
|
||||
ProjectUpgradeEligibilityResponse['validation_errors'][number]
|
||||
|
||||
/**
|
||||
* Fetches upgrade eligibility information for a project.
|
||||
*
|
||||
* @param projectRef - The project's reference identifier
|
||||
* @returns The project upgrade eligibility response, or `undefined` if no data was returned
|
||||
* @throws Error if `projectRef` is not provided
|
||||
*/
|
||||
export async function getProjectUpgradeEligibility(
|
||||
{ projectRef }: ProjectUpgradeEligibilityVariables,
|
||||
signal?: AbortSignal
|
||||
) {
|
||||
): Promise<ProjectUpgradeEligibilityResponse | undefined> {
|
||||
if (!projectRef) throw new Error('projectRef is required')
|
||||
|
||||
const { data, error } = await get('/v1/projects/{ref}/upgrade/eligibility', {
|
||||
@@ -25,7 +34,7 @@ export async function getProjectUpgradeEligibility(
|
||||
})
|
||||
|
||||
if (error) handleError(error)
|
||||
return data
|
||||
return data as ProjectUpgradeEligibilityResponse | undefined
|
||||
}
|
||||
|
||||
export type ProjectUpgradeEligibilityData = Awaited<ReturnType<typeof getProjectUpgradeEligibility>>
|
||||
|
||||
@@ -436,8 +436,8 @@ const nextConfig = {
|
||||
},
|
||||
{
|
||||
source: '/project/:ref/settings/auth',
|
||||
destination: '/project/:ref/auth',
|
||||
permanent: false,
|
||||
destination: '/project/:ref/auth/providers',
|
||||
permanent: true,
|
||||
},
|
||||
|
||||
...(process.env.NEXT_PUBLIC_BASE_PATH?.length
|
||||
|
||||
@@ -29,5 +29,5 @@ const handleGetAll = async (req: NextApiRequest, res: NextApiResponse) => {
|
||||
return res.status(response.code ?? 500).json({ message: response.message })
|
||||
}
|
||||
|
||||
return res.status(200).json(response)
|
||||
return res.status(200).json({ types: response })
|
||||
}
|
||||
@@ -236,6 +236,9 @@ const Wizard: NextPageWithLayout = () => {
|
||||
'project_creation_simple_version_submitted',
|
||||
{
|
||||
instanceSize: form.getValues('instanceSize'),
|
||||
dataApiEnabled: form.getValues('dataApi'),
|
||||
useApiSchema: form.getValues('useApiSchema'),
|
||||
useOrioleDb: form.getValues('useOrioleDb'),
|
||||
},
|
||||
{
|
||||
project: res.ref,
|
||||
|
||||
@@ -81,7 +81,7 @@ const DatabaseScheduledBackups: NextPageWithLayout = () => {
|
||||
<>
|
||||
{!isPitrEnabled && (
|
||||
<p className="text-sm text-foreground-light">
|
||||
Projects are backed up daily around midnight of your project's region and
|
||||
Projects are backed up daily around midnight of your project’s region and
|
||||
can be restored at any time.
|
||||
</p>
|
||||
)}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { InfrastructureActivity } from 'components/interfaces/Settings/Infrastructure/InfrastructureActivity'
|
||||
import InfrastructureInfo from 'components/interfaces/Settings/Infrastructure/InfrastructureInfo'
|
||||
import DefaultLayout from 'components/layouts/DefaultLayout'
|
||||
import { InfrastructureInfo } from 'components/interfaces/Settings/Infrastructure/InfrastructureInfo'
|
||||
import { DefaultLayout } from 'components/layouts/DefaultLayout'
|
||||
import SettingsLayout from 'components/layouts/ProjectSettingsLayout/SettingsLayout'
|
||||
import {
|
||||
ScaffoldContainer,
|
||||
|
||||
@@ -716,7 +716,7 @@ function createStorageExplorerState({
|
||||
})
|
||||
}
|
||||
|
||||
if (state.openedFolders[columnIndex].name === folder.name) {
|
||||
if (state.openedFolders[columnIndex]?.name === folder.name) {
|
||||
state.setSelectedFilePreview(undefined)
|
||||
state.popOpenedFoldersAtIndex(columnIndex - 1)
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ categories:
|
||||
tags:
|
||||
- postgres
|
||||
- planetpg
|
||||
date: '07-09-2020'
|
||||
date: '2020-07-09'
|
||||
---
|
||||
|
||||
Whenever you create a new database in Postgres, you are actually [basing it off an already present database](https://www.postgresql.org/docs/current/manage-ag-templatedbs.html) in your cluster.
|
||||
|
||||
@@ -10,7 +10,7 @@ categories:
|
||||
tags:
|
||||
- postgres
|
||||
- planetpg
|
||||
date: '07-07-2020'
|
||||
date: '2020-07-07'
|
||||
---
|
||||
|
||||
PostgreSQL backups can be categorized into two types: _logical_ and _physical_. This post briefly covers each type and discusses the situations where you would use either one.
|
||||
|
||||