mirror of
https://github.com/supabase/supabase.git
synced 2026-10-10 11:55:05 +03:00
Merge branch 'master' into chore/move-policies
This commit is contained in:
commit
f4428b7147
83 files changed
+13570
-10840
No files matched your search
@@ -138,7 +138,7 @@ const selfHostingOptions = [
|
||||
|
||||
const clientLibraries = [
|
||||
{
|
||||
title: 'Javascript',
|
||||
title: 'JavaScript',
|
||||
icon: 'reference-javascript',
|
||||
href: '/reference/javascript/introduction',
|
||||
enabled: true,
|
||||
|
||||
@@ -62,7 +62,7 @@ Create a [Supabase project](/dashboard) and database by following the instructio
|
||||
export OPENAI_API_KEY=<open_ai_api_key>
|
||||
export DATASTORE=supabase
|
||||
export SUPABASE_URL=<supabase_url>
|
||||
export SUPABASE_SERVICE_ROLE_KEY=<supabase_key>
|
||||
export SUPABASE_SECRET_KEY=<supabase_secret_key>
|
||||
```
|
||||
|
||||
For Postgres datastore, you'll need to export these environment variables instead:
|
||||
|
||||
@@ -65,12 +65,12 @@ jobs:
|
||||
- uses: supabase/embeddings-generator@v0.0.x # Update this to the latest version.
|
||||
with:
|
||||
supabase-url: 'https://your-project-ref.supabase.co' # Update this to your project URL.
|
||||
supabase-service-role-key: ${{ secrets.SUPABASE_SERVICE_ROLE_KEY }}
|
||||
supabase-secret-key: ${{ secrets.SUPABASE_SECRET_KEY }}
|
||||
openai-key: ${{ secrets.OPENAI_API_KEY }}
|
||||
docs-root-path: 'docs' # the path to the root of your md(x) files
|
||||
```
|
||||
|
||||
Make sure to choose the latest version, and set your `SUPABASE_SERVICE_ROLE_KEY` and `OPENAI_API_KEY` as repository secrets in your repo settings (settings > secrets > actions).
|
||||
Make sure to choose the latest version, and set your `SUPABASE_SECRET_KEY` and `OPENAI_API_KEY` as repository secrets in your repo settings (settings > secrets > actions).
|
||||
|
||||
### Add a search interface
|
||||
|
||||
|
||||
@@ -284,7 +284,7 @@ With our database set up, we need to process and store all `.mdx` files in the `
|
||||
```bash
|
||||
NEXT_PUBLIC_SUPABASE_URL=
|
||||
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=
|
||||
SUPABASE_SERVICE_ROLE_KEY=
|
||||
SUPABASE_SECRET_KEY=
|
||||
|
||||
# Get your key at https://platform.openai.com/account/api-keys
|
||||
OPENAI_API_KEY=
|
||||
|
||||
@@ -168,7 +168,7 @@ import { createClient } from 'npm:@supabase/supabase-js@2'
|
||||
import OpenAI from 'npm:openai'
|
||||
|
||||
const supabaseUrl = Deno.env.get('SUPABASE_URL')!
|
||||
const supabaseServiceRoleKey = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!
|
||||
const supabaseSecretKey = Deno.env.get('SUPABASE_SECRET_KEY')!
|
||||
const openaiApiKey = Deno.env.get('OPENAI_API_KEY')!
|
||||
|
||||
Deno.serve(async (req) => {
|
||||
|
||||
@@ -82,8 +82,8 @@ import { SupabaseVectorStore } from '@langchain/community/vectorstores/supabase'
|
||||
import { OpenAIEmbeddings } from '@langchain/openai'
|
||||
import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
const supabaseKey = process.env.SUPABASE_SERVICE_ROLE_KEY
|
||||
if (!supabaseKey) throw new Error(`Expected SUPABASE_SERVICE_ROLE_KEY`)
|
||||
const supabaseKey = process.env.SUPABASE_SECRET_KEY
|
||||
if (!supabaseKey) throw new Error(`Expected SUPABASE_SECRET_KEY`)
|
||||
|
||||
const url = process.env.SUPABASE_URL
|
||||
if (!url) throw new Error(`Expected env var SUPABASE_URL`)
|
||||
@@ -119,8 +119,8 @@ import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
// First, follow set-up instructions above
|
||||
|
||||
const privateKey = process.env.SUPABASE_SERVICE_ROLE_KEY
|
||||
if (!privateKey) throw new Error(`Expected env var SUPABASE_SERVICE_ROLE_KEY`)
|
||||
const privateKey = process.env.SUPABASE_SECRET_KEY
|
||||
if (!privateKey) throw new Error(`Expected env var SUPABASE_SECRET_KEY`)
|
||||
|
||||
const url = process.env.SUPABASE_URL
|
||||
if (!url) throw new Error(`Expected env var SUPABASE_URL`)
|
||||
@@ -158,8 +158,8 @@ import { createClient } from '@supabase/supabase-js'
|
||||
|
||||
// First, follow set-up instructions above
|
||||
|
||||
const privateKey = process.env.SUPABASE_SERVICE_ROLE_KEY
|
||||
if (!privateKey) throw new Error(`Expected env var SUPABASE_SERVICE_ROLE_KEY`)
|
||||
const privateKey = process.env.SUPABASE_SECRET_KEY
|
||||
if (!privateKey) throw new Error(`Expected env var SUPABASE_SECRET_KEY`)
|
||||
|
||||
const url = process.env.SUPABASE_URL
|
||||
if (!url) throw new Error(`Expected env var SUPABASE_URL`)
|
||||
|
||||
@@ -138,12 +138,12 @@ Let's build an Edge Function that will accept an input string and generate an em
|
||||
|
||||
```shell
|
||||
curl --request POST 'http://localhost:54321/functions/v1/embed' \
|
||||
--header 'Authorization: Bearer ANON_KEY' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--header 'apikey: SUPABASE_PUBLISHABLE_KEY' \
|
||||
--data '{ "input": "hello world" }'
|
||||
```
|
||||
|
||||
Be sure to replace `ANON_KEY` with your project's anonymous key. You can get this key by running `supabase status`.
|
||||
Be sure to replace `SUPABASE_PUBLISHABLE_KEY` with your project's publishable key. You can get this key by running `supabase status`.
|
||||
|
||||
</StepHikeCompact.Details>
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@ using the API URL (`SUPABASE_URL`) and Key (`SUPABASE_PUBLISHABLE_KEY`) we provi
|
||||
defaultActiveId="javascript"
|
||||
queryGroup="language"
|
||||
>
|
||||
<TabPanel id="javascript" label="Javascript">
|
||||
<TabPanel id="javascript" label="JavaScript">
|
||||
|
||||
```javascript
|
||||
// Initialize the JS client
|
||||
|
||||
@@ -11,7 +11,7 @@ Supabase provides client libraries for the REST and Realtime APIs. Some librarie
|
||||
|
||||
| `Language` | `Source Code` | `Documentation` |
|
||||
| --------------------- | ---------------------------------------------------------------------------------------------------- | ----------------------------------------------- |
|
||||
| Javascript/Typescript | [supabase-js](https://github.com/supabase/supabase-js) | [Docs](/docs/reference/javascript/introduction) |
|
||||
| JavaScript/TypeScript | [supabase-js](https://github.com/supabase/supabase-js) | [Docs](/docs/reference/javascript/introduction) |
|
||||
| Dart/Flutter | [supabase-flutter](https://github.com/supabase/supabase-flutter/tree/main/packages/supabase_flutter) | [Docs](/docs/reference/dart/introduction) |
|
||||
| Swift | [supabase-swift](https://github.com/supabase/supabase-swift) | [Docs](/docs/reference/swift/introduction) |
|
||||
| Python | [supabase-py](https://github.com/supabase/supabase-py) | [Docs](/docs/reference/python/initializing) |
|
||||
|
||||
@@ -727,7 +727,7 @@ import { createClient } from 'https://esm.sh/@supabase/supabase-js'
|
||||
|
||||
const whSecret = Deno.env.get('BEFORE_USER_CREATED_HOOK_SECRET')?.replace('v1,whsec_', '')
|
||||
const supabaseUrl = Deno.env.get('SUPABASE_URL')
|
||||
const supabaseKey = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')
|
||||
const supabaseKey = Deno.env.get('SUPABASE_SECRET_KEY')
|
||||
|
||||
const wh = new Webhook(whSecret)
|
||||
const supabase = createClient(supabaseUrl, supabaseKey)
|
||||
|
||||
@@ -172,8 +172,6 @@ The following fields support the `encrypted:` syntax:
|
||||
- `auth.publishable_key`
|
||||
- `auth.secret_key`
|
||||
- `auth.jwt_secret`
|
||||
- `auth.anon_key`
|
||||
- `auth.service_role_key`
|
||||
|
||||
**Auth - Email (SMTP)**
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ tocVideo: 'AE7dKIKMJy4'
|
||||
|
||||
<$Partial path="quickstart_intro.mdx" />
|
||||
|
||||

|
||||

|
||||
|
||||
<Admonition type="note">
|
||||
|
||||
@@ -37,7 +37,7 @@ cd expo-user-management
|
||||
Then install the additional dependencies:
|
||||
|
||||
```bash
|
||||
npx expo install @supabase/supabase-js @rneui/themed expo-sqlite
|
||||
npx expo install @supabase/supabase-js @react-native-async-storage/async-storage
|
||||
```
|
||||
|
||||
Now create a helper file to initialize the Supabase client using the API URL and the key that you copied [earlier](#get-api-details).
|
||||
@@ -75,7 +75,7 @@ These variables are safe to expose in your Expo app since Supabase has
|
||||
|
||||
```bash
|
||||
npm install @supabase/supabase-js
|
||||
npm install @rneui/themed @react-native-async-storage/async-storage
|
||||
npm install @react-native-async-storage/async-storage
|
||||
npm install aes-js react-native-get-random-values
|
||||
npm install --save-dev @types/aes-js
|
||||
npx expo install expo-secure-store
|
||||
@@ -156,6 +156,16 @@ These variables are safe to expose in your Expo app since Supabase has
|
||||
</TabPanel>
|
||||
</Tabs>
|
||||
|
||||
### App styling
|
||||
|
||||
You can use the following `StyleSheet` component in `styles/styles.ts` to add style to the app:
|
||||
|
||||
<$CodeSample
|
||||
path="/user-management/expo-user-management/styles/styles.ts"
|
||||
lines={[[1, -1]]}
|
||||
meta="name=styles/styles.ts"
|
||||
/>
|
||||
|
||||
### Set up a login component
|
||||
|
||||
Set up a React Native component to manage logins and sign ups.
|
||||
@@ -177,7 +187,7 @@ While testing, you can disable email confirmation in your [project's email auth
|
||||
|
||||
### Account page
|
||||
|
||||
After a user signs in, you can let them to edit their profile details and manage their account.
|
||||
After a user signs in, let them edit their profile details and manage their account.
|
||||
|
||||
Create a new component for that called `Account.tsx`.
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ POSTGRES_USER
|
||||
POSTGRES_HOST
|
||||
POSTGRES_PASSWORD
|
||||
POSTGRES_DATABASE
|
||||
SUPABASE_SERVICE_ROLE_KEY
|
||||
SUPABASE_SECRET_KEY
|
||||
SUPABASE_PUBLISHABLE_KEY
|
||||
SUPABASE_URL
|
||||
SUPABASE_JWT_SECRET
|
||||
|
||||
@@ -21,7 +21,7 @@ Supabase provides several [tools](https://github.com/supabase-community/firebase
|
||||
1. In the `/storage` directory, rename [supabase-keys-sample.js](https://github.com/supabase-community/firebase-to-supabase/blob/main/storage/supabase-keys-sample.js) to `supabase-keys.js`.
|
||||
1. Go to your Supabase project's [API settings](/dashboard/project/_/settings/api) in the Dashboard.
|
||||
1. Copy the **Project URL** and update the `SUPABASE_URL` value in `supabase-keys.js`.
|
||||
1. Under **Project API keys**, copy the **service_role** key and update the `SUPABASE_KEY` value in `supabase-keys.js`.
|
||||
1. Under **Project API keys**, copy the **secret** key and update the `SUPABASE_KEY` value in `supabase-keys.js`.
|
||||
|
||||
## Generate a Firebase private key [#generate-firebase-private-key]
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ S3 access keys provide full access to all S3 operations across all buckets and b
|
||||
|
||||
</Admonition>
|
||||
|
||||
To authenticate with S3, generate a pair of credentials (Access Key ID and Secret Access Key), copy the endpoint and region from the [project settings page](/dashboard/project/_/storage/settings).
|
||||
To authenticate with S3, generate a pair of credentials (Access Key ID and Secret Access Key), copy the endpoint and region from the [S3 configuration page](/dashboard/project/_/storage/s3).
|
||||
|
||||
This is all the information you need to connect to Supabase Storage using any S3-compatible service.
|
||||
|
||||
@@ -79,7 +79,7 @@ All S3 operations performed with the Session Token are scoped to the authenticat
|
||||
To authenticate with S3 using a Session Token, use the following credentials:
|
||||
|
||||
- access_key_id: `project_ref`
|
||||
- secret_access_key: `anonKey`
|
||||
- secret_access_key: `publishableKey`
|
||||
- session_token: `valid jwt token`
|
||||
|
||||
For example, using the `aws-sdk` library:
|
||||
|
||||
@@ -136,8 +136,8 @@ Instead of `https://project-id.supabase.co` use `https://project-id.storage.supa
|
||||
export const useUppyWithSupabase = ({ bucketName }: { bucketName: string }) => {
|
||||
// Initialize Uppy instance only once
|
||||
const [uppy] = useState(() => new Uppy());
|
||||
// Initialize Supabase client with project URL and anon key
|
||||
const supabase = createClient(`https://${projectId}.supabase.co`, anonKey);
|
||||
// Initialize Supabase client with project URL and publishable key
|
||||
const supabase = createClient(`https://${projectId}.supabase.co`, publishableKey);
|
||||
|
||||
useEffect(() => {
|
||||
const initializeUppy = async () => {
|
||||
|
||||
@@ -47,7 +47,7 @@ Unsigned requests to HTTP endpoints are temporary and all requests will signed i
|
||||
|
||||
1. Create and deploy the edge function
|
||||
|
||||
Generate a new edge function template and update it to log out the received JSON payload. For simplicity, we will accept any request with an Anon Key.
|
||||
Generate a new edge function template and update it to log out the received JSON payload. For simplicity, we will accept any request with a Publishable Key.
|
||||
|
||||
```bash
|
||||
supabase functions new hello-world
|
||||
@@ -86,7 +86,7 @@ Create an HTTP drain under the [Project Settings > Log Drains](/dashboard/projec
|
||||
|
||||
- Disable the Gzip, as we want to receive the payload without compression.
|
||||
- Under URL, set it to your edge function URL `https://[PROJECT REF].supabase.co/functions/v1/hello-world`
|
||||
- Under Headers, set the `Authorization: Bearer [ANON KEY]`
|
||||
- Under Headers, set the `Authorization: Bearer [PUBLISHABLE KEY]`
|
||||
|
||||
<ProjectConfigVariables variable="publishableKey" />
|
||||
|
||||
|
||||
@@ -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` / `sb_secret_...`).
|
||||
- HTTP Basic Auth credentials (`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.
|
||||
|
||||
@@ -31,7 +31,7 @@ scrape_configs:
|
||||
metrics_path: /customer/v1/privileged/metrics
|
||||
scheme: https
|
||||
basic_auth:
|
||||
username: service_role
|
||||
username: username
|
||||
password: '<secret API key (sb_secret_...)>'
|
||||
static_configs:
|
||||
- targets:
|
||||
|
||||
@@ -24,7 +24,7 @@ No matter which collector you use, you need to hit the Metrics API once per minu
|
||||
metrics_path: /customer/v1/privileged/metrics
|
||||
scheme: https
|
||||
basic_auth:
|
||||
username: service_role
|
||||
username: username
|
||||
password: '<secret API key (sb_secret_...)>'
|
||||
static_configs:
|
||||
- targets:
|
||||
|
||||
@@ -2,10 +2,9 @@
|
||||
title = "PostgREST not recognizing the objects(tables/functions/views) in a schema even after adding it to the exposed schemas"
|
||||
topics = [
|
||||
"database",
|
||||
"rest-api",
|
||||
"platform"
|
||||
]
|
||||
keywords = []
|
||||
keywords = ["REST API"]
|
||||
---
|
||||
|
||||
PostgREST is returning errors by not recognizing the objects(tables/functions/views) in a schema and logging errors similar to:
|
||||
|
||||
+1
-1
@@ -2,9 +2,9 @@
|
||||
title = "schema \"pg_pgrst_no_exposed_schemas\" does not exist"
|
||||
topics = [
|
||||
"database",
|
||||
"rest-api",
|
||||
"platform"
|
||||
]
|
||||
keywords = ["REST API"]
|
||||
[[errors]]
|
||||
message = "schema pg_pgrst_no_exposed_schemas does not exist"
|
||||
---
|
||||
|
||||
@@ -107,11 +107,11 @@ const levelsData = {
|
||||
},
|
||||
reference_javascript_v1: {
|
||||
icon: 'reference-javascript',
|
||||
name: 'Javascript Reference v1.0',
|
||||
name: 'JavaScript Reference v1.0',
|
||||
},
|
||||
reference_javascript_v2: {
|
||||
icon: 'reference-javascript',
|
||||
name: 'Javascript Reference v2.0',
|
||||
name: 'JavaScript Reference v2.0',
|
||||
},
|
||||
reference_dart_v1: {
|
||||
icon: 'reference-dart',
|
||||
|
||||
@@ -91,6 +91,7 @@ Felipe Stival
|
||||
Ferhat Elmas
|
||||
Firas El Rachidi
|
||||
Francesco Sansalvadore
|
||||
Gabriel Claudino
|
||||
Garrett Crowell
|
||||
Gerardo Estaba
|
||||
Gildas Garcia
|
||||
@@ -182,6 +183,7 @@ Natalie Roberge
|
||||
Nick B
|
||||
Nick Littman
|
||||
Nick Nowlan
|
||||
Nicolas Nosenzo
|
||||
Nyannyacha
|
||||
Oli R
|
||||
Pamela Chia
|
||||
@@ -208,6 +210,7 @@ Ronan Lehane
|
||||
Rory Wilding
|
||||
Ryan Goulet
|
||||
Ruan Maia
|
||||
Saba Pochkhua
|
||||
Sam Meech-Ward
|
||||
Sam Rome
|
||||
Sam Rose
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 69 KiB |
@@ -429,7 +429,7 @@
|
||||
},
|
||||
"/v1/projects": {
|
||||
"get": {
|
||||
"description": "Returns a list of all projects you've previously created.\n\nUse `/v1/organizations/{slug}/projects` instead when possible to get more precise results and pagination support.",
|
||||
"description": "Returns a list of all projects you've previously created.",
|
||||
"operationId": "v1-list-all-projects",
|
||||
"parameters": [],
|
||||
"responses": {
|
||||
@@ -443,7 +443,10 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": { "description": "Unauthorized" },
|
||||
"403": { "description": "Forbidden action" },
|
||||
"429": { "description": "Rate limit exceeded" }
|
||||
},
|
||||
"security": [{ "bearer": [] }, { "fga_permissions": ["projects_read"] }],
|
||||
"summary": "List all projects",
|
||||
@@ -467,7 +470,10 @@
|
||||
"content": {
|
||||
"application/json": { "schema": { "$ref": "#/components/schemas/V1ProjectResponse" } }
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": { "description": "Unauthorized" },
|
||||
"403": { "description": "Forbidden action" },
|
||||
"429": { "description": "Rate limit exceeded" }
|
||||
},
|
||||
"security": [{ "bearer": [] }, { "fga_permissions": ["organization_projects_create"] }],
|
||||
"summary": "Create a project",
|
||||
@@ -563,6 +569,9 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": { "description": "Unauthorized" },
|
||||
"403": { "description": "Forbidden action" },
|
||||
"429": { "description": "Rate limit exceeded" },
|
||||
"500": { "description": "Unexpected error listing organizations" }
|
||||
},
|
||||
"security": [{ "bearer": [] }, { "fga_permissions": ["organizations_read"] }],
|
||||
@@ -592,6 +601,9 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": { "description": "Unauthorized" },
|
||||
"403": { "description": "Forbidden action" },
|
||||
"429": { "description": "Rate limit exceeded" },
|
||||
"500": { "description": "Unexpected error creating an organization" }
|
||||
},
|
||||
"security": [{ "bearer": [] }, { "fga_permissions": ["organizations_create"] }],
|
||||
@@ -802,7 +814,12 @@
|
||||
"schema": { "example": "S256", "type": "string", "enum": ["plain", "sha256", "S256"] }
|
||||
}
|
||||
],
|
||||
"responses": { "204": { "description": "" } },
|
||||
"responses": {
|
||||
"204": { "description": "" },
|
||||
"401": { "description": "Unauthorized" },
|
||||
"403": { "description": "Forbidden action" },
|
||||
"429": { "description": "Rate limit exceeded" }
|
||||
},
|
||||
"security": [
|
||||
{ "bearer": [] },
|
||||
{ "fga_permissions": ["organization_admin_write", "project_admin_write"] }
|
||||
@@ -856,6 +873,9 @@
|
||||
"application/json": { "schema": { "$ref": "#/components/schemas/SnippetList" } }
|
||||
}
|
||||
},
|
||||
"401": { "description": "Unauthorized" },
|
||||
"403": { "description": "Forbidden action" },
|
||||
"429": { "description": "Rate limit exceeded" },
|
||||
"500": { "description": "Failed to list user's SQL snippets" }
|
||||
},
|
||||
"security": [{ "bearer": [] }, { "fga_permissions": ["snippets_read"] }],
|
||||
@@ -888,6 +908,9 @@
|
||||
"application/json": { "schema": { "$ref": "#/components/schemas/SnippetResponse" } }
|
||||
}
|
||||
},
|
||||
"401": { "description": "Unauthorized" },
|
||||
"403": { "description": "Forbidden action" },
|
||||
"429": { "description": "Rate limit exceeded" },
|
||||
"500": { "description": "Failed to retrieve SQL snippet" }
|
||||
},
|
||||
"security": [{ "bearer": [] }, { "fga_permissions": ["snippets_read"] }],
|
||||
@@ -1540,9 +1563,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": { "description": "Unauthorized" },
|
||||
"403": { "description": "Forbidden action" },
|
||||
"429": { "description": "Rate limit exceeded" },
|
||||
"500": { "description": "Failed to retrieve database branches" }
|
||||
},
|
||||
"security": [
|
||||
@@ -1587,9 +1607,6 @@
|
||||
"application/json": { "schema": { "$ref": "#/components/schemas/BranchResponse" } }
|
||||
}
|
||||
},
|
||||
"401": { "description": "Unauthorized" },
|
||||
"403": { "description": "Forbidden action" },
|
||||
"429": { "description": "Rate limit exceeded" },
|
||||
"500": { "description": "Failed to create database branch" }
|
||||
},
|
||||
"security": [
|
||||
@@ -1668,9 +1685,6 @@
|
||||
"application/json": { "schema": { "$ref": "#/components/schemas/BranchResponse" } }
|
||||
}
|
||||
},
|
||||
"401": { "description": "Unauthorized" },
|
||||
"403": { "description": "Forbidden action" },
|
||||
"429": { "description": "Rate limit exceeded" },
|
||||
"500": { "description": "Failed to fetch database branch" }
|
||||
},
|
||||
"security": [
|
||||
@@ -7141,6 +7155,9 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": { "description": "Unauthorized" },
|
||||
"403": { "description": "Forbidden action" },
|
||||
"429": { "description": "Rate limit exceeded" },
|
||||
"500": { "description": "Failed to retrieve projects" }
|
||||
},
|
||||
"security": [{ "bearer": [] }, { "fga_permissions": ["organization_projects_read"] }],
|
||||
@@ -7351,92 +7368,6 @@
|
||||
"properties": { "message": { "type": "string", "enum": ["Branch restoration initiated"] } },
|
||||
"required": ["message"]
|
||||
},
|
||||
"V1ListProjectsPaginatedResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"projects": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"id": { "type": "number" },
|
||||
"cloud_provider": { "type": "string" },
|
||||
"inserted_at": { "type": "string", "nullable": true },
|
||||
"name": { "type": "string" },
|
||||
"organization_id": { "type": "number" },
|
||||
"organization_slug": { "type": "string" },
|
||||
"ref": { "type": "string" },
|
||||
"region": { "type": "string" },
|
||||
"status": { "type": "string" },
|
||||
"subscription_id": { "type": "string", "nullable": true },
|
||||
"is_branch_enabled": { "type": "boolean" },
|
||||
"is_physical_backups_enabled": { "type": "boolean", "nullable": true },
|
||||
"preview_branch_refs": { "type": "array", "items": { "type": "string" } },
|
||||
"disk_volume_size_gb": { "type": "number" },
|
||||
"infra_compute_size": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"pico",
|
||||
"nano",
|
||||
"micro",
|
||||
"small",
|
||||
"medium",
|
||||
"large",
|
||||
"xlarge",
|
||||
"2xlarge",
|
||||
"4xlarge",
|
||||
"8xlarge",
|
||||
"12xlarge",
|
||||
"16xlarge",
|
||||
"24xlarge",
|
||||
"24xlarge_optimized_memory",
|
||||
"24xlarge_optimized_cpu",
|
||||
"24xlarge_high_memory",
|
||||
"48xlarge",
|
||||
"48xlarge_optimized_memory",
|
||||
"48xlarge_optimized_cpu",
|
||||
"48xlarge_high_memory"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"id",
|
||||
"cloud_provider",
|
||||
"inserted_at",
|
||||
"name",
|
||||
"organization_id",
|
||||
"organization_slug",
|
||||
"ref",
|
||||
"region",
|
||||
"status",
|
||||
"subscription_id",
|
||||
"is_branch_enabled",
|
||||
"is_physical_backups_enabled",
|
||||
"preview_branch_refs"
|
||||
]
|
||||
}
|
||||
},
|
||||
"pagination": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"count": {
|
||||
"type": "number",
|
||||
"description": "Total number of projects. Use this to calculate the total number of pages."
|
||||
},
|
||||
"limit": {
|
||||
"type": "number",
|
||||
"description": "Maximum number of projects per page (actual number may be less)"
|
||||
},
|
||||
"offset": {
|
||||
"type": "number",
|
||||
"description": "Number of projects skipped in this response"
|
||||
}
|
||||
},
|
||||
"required": ["count", "limit", "offset"]
|
||||
}
|
||||
},
|
||||
"required": ["projects", "pagination"]
|
||||
},
|
||||
"V1ProjectWithDatabaseResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -23,7 +23,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 96,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L96"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L96"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -42,7 +42,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 97,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L97"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L97"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -61,7 +61,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 98,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L98"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L98"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -80,7 +80,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 99,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L99"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L99"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -99,7 +99,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 100,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L100"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L100"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -118,7 +118,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 101,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L101"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L101"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -137,7 +137,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 102,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L102"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L102"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -156,7 +156,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 103,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L103"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L103"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -175,7 +175,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 104,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L104"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L104"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -194,7 +194,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 105,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L105"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L105"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -213,7 +213,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 106,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L106"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L106"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -232,7 +232,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 107,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L107"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L107"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -251,7 +251,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 108,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L108"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L108"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -270,7 +270,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 109,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L109"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L109"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -289,7 +289,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 110,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L110"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L110"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -309,7 +309,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 95,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L95"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L95"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -339,7 +339,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 44,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L44"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L44"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -393,7 +393,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 44,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L44"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L44"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -436,7 +436,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 52,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L52"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L52"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -665,7 +665,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 51,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L51"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L51"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -702,7 +702,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 53,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L53"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L53"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -725,7 +725,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 50,
|
||||
"character": 7,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L50"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L50"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -755,7 +755,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 19,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L19"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L19"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -984,7 +984,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 17,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L17"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L17"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1020,7 +1020,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 18,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L18"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L18"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1043,7 +1043,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 16,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L16"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L16"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1062,7 +1062,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 202,
|
||||
"character": 8,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L202"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L202"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -1505,7 +1505,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 202,
|
||||
"character": 8,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L202"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L202"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -1604,7 +1604,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 73,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L73"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L73"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -1648,7 +1648,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 73,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L73"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L73"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -1709,7 +1709,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 15,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L15"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L15"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -1750,7 +1750,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 32,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L32"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L32"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -1765,7 +1765,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 32,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L32"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L32"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -1836,7 +1836,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 31,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L31"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L31"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1855,7 +1855,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -1870,7 +1870,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1893,7 +1893,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 45,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1912,7 +1912,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 28,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1931,7 +1931,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 14,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1951,7 +1951,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1979,7 +1979,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 30,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L30"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L30"
|
||||
}
|
||||
],
|
||||
"extendedTypes": [
|
||||
@@ -2048,7 +2048,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 58,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L58"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L58"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -2063,7 +2063,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 58,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L58"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L58"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -2111,7 +2111,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 31,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L31"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L31"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2137,7 +2137,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -2154,7 +2154,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2177,7 +2177,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 45,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2196,7 +2196,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 28,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2215,7 +2215,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 14,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2235,7 +2235,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2273,7 +2273,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 57,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L57"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L57"
|
||||
}
|
||||
],
|
||||
"extendedTypes": [
|
||||
@@ -2322,7 +2322,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 90,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L90"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L90"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -2337,7 +2337,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 90,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L90"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L90"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -2385,7 +2385,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 31,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L31"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L31"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2411,7 +2411,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -2428,7 +2428,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2451,7 +2451,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 45,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2470,7 +2470,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 28,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2489,7 +2489,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 14,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2509,7 +2509,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2547,7 +2547,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 89,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L89"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L89"
|
||||
}
|
||||
],
|
||||
"extendedTypes": [
|
||||
@@ -2596,7 +2596,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 74,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L74"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L74"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -2611,7 +2611,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 74,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L74"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L74"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -2659,7 +2659,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 31,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L31"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L31"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2685,7 +2685,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -2702,7 +2702,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2725,7 +2725,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 45,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2744,7 +2744,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 28,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2763,7 +2763,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 14,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2783,7 +2783,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2821,7 +2821,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 73,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L73"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L73"
|
||||
}
|
||||
],
|
||||
"extendedTypes": [
|
||||
@@ -2844,7 +2844,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 113,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L113"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L113"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2877,7 +2877,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 129,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L129"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L129"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2986,7 +2986,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 117,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L117"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L117"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -3002,7 +3002,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 117,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L117"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L117"
|
||||
}
|
||||
],
|
||||
"indexSignatures": [
|
||||
@@ -3017,7 +3017,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 117,
|
||||
"character": 14,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L117"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L117"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -3063,7 +3063,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 121,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L121"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L121"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -3113,7 +3113,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 125,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L125"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L125"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -3144,7 +3144,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 140,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L140"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L140"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -3178,7 +3178,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 145,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L145"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L145"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -3198,7 +3198,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 113,
|
||||
"character": 36,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L113"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L113"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -3215,7 +3215,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 16,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L16"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L16"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 96,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L96"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L96"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -42,7 +42,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 97,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L97"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L97"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -61,7 +61,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 98,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L98"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L98"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -80,7 +80,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 99,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L99"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L99"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -99,7 +99,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 100,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L100"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L100"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -118,7 +118,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 101,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L101"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L101"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -137,7 +137,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 102,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L102"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L102"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -156,7 +156,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 103,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L103"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L103"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -175,7 +175,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 104,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L104"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L104"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -194,7 +194,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 105,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L105"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L105"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -213,7 +213,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 106,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L106"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L106"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -232,7 +232,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 107,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L107"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L107"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -251,7 +251,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 108,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L108"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L108"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -270,7 +270,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 109,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L109"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L109"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -289,7 +289,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 110,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L110"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L110"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -309,7 +309,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 95,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L95"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L95"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -339,7 +339,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 44,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L44"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L44"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -393,7 +393,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 44,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L44"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L44"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -436,7 +436,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 52,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L52"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L52"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -665,7 +665,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 51,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L51"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L51"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -702,7 +702,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 53,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L53"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L53"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -725,7 +725,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 50,
|
||||
"character": 7,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L50"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L50"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -755,7 +755,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 19,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L19"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L19"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -984,7 +984,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 17,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L17"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L17"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1020,7 +1020,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 18,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L18"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L18"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1043,7 +1043,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 16,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L16"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L16"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1062,7 +1062,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 202,
|
||||
"character": 8,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L202"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L202"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -1505,7 +1505,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 202,
|
||||
"character": 8,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L202"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L202"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -1604,7 +1604,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 73,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L73"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L73"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -1648,7 +1648,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 73,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L73"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L73"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -1709,7 +1709,7 @@
|
||||
"fileName": "packages/core/functions-js/src/FunctionsClient.ts",
|
||||
"line": 15,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/FunctionsClient.ts#L15"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/FunctionsClient.ts#L15"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -1750,7 +1750,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 32,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L32"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L32"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -1765,7 +1765,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 32,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L32"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L32"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -1836,7 +1836,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 31,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L31"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L31"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1855,7 +1855,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -1870,7 +1870,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1893,7 +1893,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 45,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1912,7 +1912,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 28,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1931,7 +1931,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 14,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -1951,7 +1951,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1979,7 +1979,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 30,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L30"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L30"
|
||||
}
|
||||
],
|
||||
"extendedTypes": [
|
||||
@@ -2048,7 +2048,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 58,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L58"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L58"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -2063,7 +2063,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 58,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L58"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L58"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -2111,7 +2111,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 31,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L31"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L31"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2137,7 +2137,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -2154,7 +2154,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2177,7 +2177,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 45,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2196,7 +2196,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 28,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2215,7 +2215,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 14,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2235,7 +2235,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2273,7 +2273,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 57,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L57"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L57"
|
||||
}
|
||||
],
|
||||
"extendedTypes": [
|
||||
@@ -2322,7 +2322,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 90,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L90"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L90"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -2337,7 +2337,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 90,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L90"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L90"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -2385,7 +2385,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 31,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L31"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L31"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2411,7 +2411,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -2428,7 +2428,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2451,7 +2451,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 45,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2470,7 +2470,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 28,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2489,7 +2489,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 14,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2509,7 +2509,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2547,7 +2547,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 89,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L89"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L89"
|
||||
}
|
||||
],
|
||||
"extendedTypes": [
|
||||
@@ -2596,7 +2596,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 74,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L74"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L74"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -2611,7 +2611,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 74,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L74"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L74"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -2659,7 +2659,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 31,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L31"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L31"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2685,7 +2685,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -2702,7 +2702,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2725,7 +2725,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 45,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2744,7 +2744,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 28,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2763,7 +2763,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 14,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2783,7 +2783,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 38,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L38"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L38"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -2821,7 +2821,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 73,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L73"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L73"
|
||||
}
|
||||
],
|
||||
"extendedTypes": [
|
||||
@@ -2844,7 +2844,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 113,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L113"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L113"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2877,7 +2877,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 129,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L129"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L129"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -2986,7 +2986,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 117,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L117"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L117"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -3002,7 +3002,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 117,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L117"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L117"
|
||||
}
|
||||
],
|
||||
"indexSignatures": [
|
||||
@@ -3017,7 +3017,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 117,
|
||||
"character": 14,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L117"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L117"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -3063,7 +3063,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 121,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L121"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L121"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -3113,7 +3113,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 125,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L125"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L125"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -3144,7 +3144,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 140,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L140"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L140"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -3178,7 +3178,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 145,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L145"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L145"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -3198,7 +3198,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 113,
|
||||
"character": 36,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L113"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L113"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -3215,7 +3215,7 @@
|
||||
"fileName": "packages/core/functions-js/src/types.ts",
|
||||
"line": 16,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/functions-js/src/types.ts#L16"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/functions-js/src/types.ts#L16"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -51,7 +51,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/cors.ts",
|
||||
"line": 54,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/cors.ts#L54"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/cors.ts#L54"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -107,7 +107,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/cors.ts",
|
||||
"line": 78,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/cors.ts#L78"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/cors.ts#L78"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -134,7 +134,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/cors.ts",
|
||||
"line": 1,
|
||||
"character": 0,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/cors.ts#L1"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/cors.ts#L1"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -55346,7 +55346,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 279,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L279"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L279"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -55624,7 +55624,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 279,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L279"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L279"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -55672,7 +55672,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 44,
|
||||
"character": 8,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L44"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L44"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -55692,7 +55692,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 44,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L44"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L44"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -56042,7 +56042,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 59,
|
||||
"character": 26,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L59"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L59"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56062,7 +56062,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 59,
|
||||
"character": 24,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L59"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L59"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -56143,7 +56143,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 62,
|
||||
"character": 25,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56166,7 +56166,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 62,
|
||||
"character": 47,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56186,7 +56186,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 62,
|
||||
"character": 45,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -56204,7 +56204,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 62,
|
||||
"character": 23,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -56254,7 +56254,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 65,
|
||||
"character": 10,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L65"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L65"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56274,7 +56274,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 65,
|
||||
"character": 8,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L65"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L65"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -56310,7 +56310,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 66,
|
||||
"character": 42,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L66"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L66"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56330,7 +56330,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 66,
|
||||
"character": 40,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L66"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L66"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -56506,7 +56506,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 88,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L88"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L88"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56522,7 +56522,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 88,
|
||||
"character": 26,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L88"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L88"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -56537,7 +56537,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 88,
|
||||
"character": 26,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L88"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L88"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56588,7 +56588,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 73,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L73"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L73"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56614,7 +56614,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 81,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L81"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L81"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56641,7 +56641,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 87,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L87"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L87"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56663,7 +56663,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 86,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L86"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L86"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56892,7 +56892,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 83,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L83"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L83"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56918,7 +56918,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 90,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L90"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L90"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56952,7 +56952,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 74,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L74"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L74"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56976,7 +56976,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 80,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L80"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L80"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -57002,7 +57002,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 84,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L84"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L84"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -57060,7 +57060,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 78,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L78"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L78"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -57086,7 +57086,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 85,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L85"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L85"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -57107,7 +57107,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 82,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L82"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L82"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -57141,7 +57141,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 281,
|
||||
"character": 14,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L281"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L281"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -57170,7 +57170,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 280,
|
||||
"character": 14,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L280"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L280"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -57187,9 +57187,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 364,
|
||||
"line": 365,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L364"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L365"
|
||||
}
|
||||
],
|
||||
"getSignature": {
|
||||
@@ -57209,9 +57209,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 364,
|
||||
"line": 365,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L364"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L365"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -57234,9 +57234,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 478,
|
||||
"line": 479,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L478"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L479"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -57257,9 +57257,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 478,
|
||||
"line": 479,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L478"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L479"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -57344,21 +57344,21 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 372,
|
||||
"line": 373,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L372"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L373"
|
||||
},
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 376,
|
||||
"line": 377,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L376"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L377"
|
||||
},
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 384,
|
||||
"line": 385,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L384"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L385"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -57371,9 +57371,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 372,
|
||||
"line": 373,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L372"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L373"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -57469,9 +57469,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 376,
|
||||
"line": 377,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L376"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L377"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -57569,9 +57569,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 492,
|
||||
"line": 493,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L492"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L493"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -57613,9 +57613,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 492,
|
||||
"line": 493,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L492"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L493"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -57640,9 +57640,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 529,
|
||||
"line": 530,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L529"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L530"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -57693,9 +57693,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 529,
|
||||
"line": 530,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L529"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L530"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -57741,9 +57741,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 512,
|
||||
"line": 513,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L512"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L513"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -57794,9 +57794,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 512,
|
||||
"line": 513,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L512"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L513"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -57863,9 +57863,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 431,
|
||||
"line": 432,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L431"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L432"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -57886,9 +57886,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 431,
|
||||
"line": 432,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L431"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L432"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -58112,9 +58112,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 445,
|
||||
"line": 446,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L445"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L446"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -58162,9 +58162,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 444,
|
||||
"line": 445,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L444"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L445"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -58207,9 +58207,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 443,
|
||||
"line": 444,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L443"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L444"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -58227,9 +58227,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 442,
|
||||
"line": 443,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L442"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L443"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -58333,9 +58333,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 396,
|
||||
"line": 397,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L396"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L397"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -58356,9 +58356,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 396,
|
||||
"line": 397,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L396"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L397"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -58519,7 +58519,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 37,
|
||||
"character": 21,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L37"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L37"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -58599,7 +58599,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 44,
|
||||
"character": 8,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L44"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L44"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -58619,7 +58619,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 44,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L44"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L44"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -59089,7 +59089,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 59,
|
||||
"character": 26,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L59"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L59"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -59109,7 +59109,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 59,
|
||||
"character": 24,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L59"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L59"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -59190,7 +59190,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 62,
|
||||
"character": 25,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -59213,7 +59213,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 62,
|
||||
"character": 47,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -59233,7 +59233,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 62,
|
||||
"character": 45,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -59251,7 +59251,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 62,
|
||||
"character": 23,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -59291,7 +59291,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 65,
|
||||
"character": 10,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L65"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L65"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -59311,7 +59311,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 65,
|
||||
"character": 8,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L65"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L65"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -59347,7 +59347,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 66,
|
||||
"character": 42,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L66"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L66"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -59367,7 +59367,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 66,
|
||||
"character": 40,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L66"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L66"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -72862,7 +72862,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 173,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L173"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L173"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -79982,7 +79982,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 161,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L161"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L161"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -80030,7 +80030,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 161,
|
||||
"character": 51,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L161"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L161"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -80050,7 +80050,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 161,
|
||||
"character": 49,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L161"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L161"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -80101,7 +80101,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 162,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L162"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L162"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -80130,7 +80130,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 160,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L160"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L160"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -86905,7 +86905,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 28,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L28"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L28"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -86955,7 +86955,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 154,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L154"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L154"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -86971,7 +86971,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 154,
|
||||
"character": 16,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L154"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L154"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -87023,7 +87023,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 61,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L61"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L61"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87056,7 +87056,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 65,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L65"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L65"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87085,7 +87085,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 115,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L115"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L115"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87138,7 +87138,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 95,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L95"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L95"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87161,7 +87161,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 95,
|
||||
"character": 36,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L95"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L95"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -87207,7 +87207,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 95,
|
||||
"character": 55,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L95"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L95"
|
||||
}
|
||||
],
|
||||
"indexSignatures": [
|
||||
@@ -87222,7 +87222,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 95,
|
||||
"character": 57,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L95"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L95"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -87280,7 +87280,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 111,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L111"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L111"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87322,7 +87322,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 121,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L121"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L121"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87363,7 +87363,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 73,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L73"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L73"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87392,7 +87392,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 99,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L99"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L99"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87433,7 +87433,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 69,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L69"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L69"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87462,7 +87462,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 126,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L126"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L126"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87504,7 +87504,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 107,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L107"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L107"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87536,7 +87536,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 61,
|
||||
"character": 9,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L61"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L61"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -87571,7 +87571,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 32,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L32"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L32"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87596,7 +87596,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 33,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L33"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L33"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87640,7 +87640,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 45,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L45"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L45"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87681,7 +87681,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 58,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L58"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L58"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87701,7 +87701,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 32,
|
||||
"character": 7,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L32"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L32"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -87720,7 +87720,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 133,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L133"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L133"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87761,7 +87761,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 137,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L137"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L137"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87795,7 +87795,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 141,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L141"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L141"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87830,7 +87830,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 133,
|
||||
"character": 11,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L133"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L133"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -87857,7 +87857,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 131,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L131"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L131"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87880,7 +87880,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 132,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L132"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L132"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87905,7 +87905,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 28,
|
||||
"character": 48,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L28"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L28"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -89419,7 +89419,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/index.ts",
|
||||
"line": 46,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/index.ts#L46"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/index.ts#L46"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -89434,7 +89434,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/index.ts",
|
||||
"line": 46,
|
||||
"character": 28,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/index.ts#L46"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/index.ts#L46"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -89482,7 +89482,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/index.ts",
|
||||
"line": 50,
|
||||
"character": 8,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/index.ts#L50"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/index.ts#L50"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -89502,7 +89502,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/index.ts",
|
||||
"line": 50,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/index.ts#L50"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/index.ts#L50"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -90715,7 +90715,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/index.ts",
|
||||
"line": 1,
|
||||
"character": 0,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/index.ts#L1"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/index.ts#L1"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/cors.ts",
|
||||
"line": 54,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/cors.ts#L54"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/cors.ts#L54"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -107,7 +107,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/cors.ts",
|
||||
"line": 78,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/cors.ts#L78"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/cors.ts#L78"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -134,7 +134,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/cors.ts",
|
||||
"line": 1,
|
||||
"character": 0,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/cors.ts#L1"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/cors.ts#L1"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -55346,7 +55346,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 279,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L279"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L279"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -55624,7 +55624,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 279,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L279"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L279"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -55672,7 +55672,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 44,
|
||||
"character": 8,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L44"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L44"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -55692,7 +55692,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 44,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L44"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L44"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -56042,7 +56042,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 59,
|
||||
"character": 26,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L59"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L59"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56062,7 +56062,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 59,
|
||||
"character": 24,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L59"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L59"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -56143,7 +56143,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 62,
|
||||
"character": 25,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56166,7 +56166,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 62,
|
||||
"character": 47,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56186,7 +56186,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 62,
|
||||
"character": 45,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -56204,7 +56204,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 62,
|
||||
"character": 23,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -56254,7 +56254,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 65,
|
||||
"character": 10,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L65"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L65"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56274,7 +56274,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 65,
|
||||
"character": 8,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L65"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L65"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -56310,7 +56310,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 66,
|
||||
"character": 42,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L66"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L66"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56330,7 +56330,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 66,
|
||||
"character": 40,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L66"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L66"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -56506,7 +56506,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 88,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L88"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L88"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56522,7 +56522,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 88,
|
||||
"character": 26,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L88"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L88"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -56537,7 +56537,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 88,
|
||||
"character": 26,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L88"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L88"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56588,7 +56588,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 73,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L73"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L73"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56614,7 +56614,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 81,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L81"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L81"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56641,7 +56641,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 87,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L87"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L87"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56663,7 +56663,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 86,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L86"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L86"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56892,7 +56892,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 83,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L83"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L83"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56918,7 +56918,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 90,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L90"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L90"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56952,7 +56952,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 74,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L74"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L74"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -56976,7 +56976,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 80,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L80"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L80"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -57002,7 +57002,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 84,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L84"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L84"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -57060,7 +57060,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 78,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L78"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L78"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -57086,7 +57086,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 85,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L85"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L85"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -57107,7 +57107,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 82,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L82"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L82"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -57141,7 +57141,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 281,
|
||||
"character": 14,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L281"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L281"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -57170,7 +57170,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 280,
|
||||
"character": 14,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L280"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L280"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -57187,9 +57187,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 364,
|
||||
"line": 365,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L364"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L365"
|
||||
}
|
||||
],
|
||||
"getSignature": {
|
||||
@@ -57209,9 +57209,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 364,
|
||||
"line": 365,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L364"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L365"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -57234,9 +57234,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 478,
|
||||
"line": 479,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L478"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L479"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -57257,9 +57257,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 478,
|
||||
"line": 479,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L478"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L479"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -57344,21 +57344,21 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 372,
|
||||
"line": 373,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L372"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L373"
|
||||
},
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 376,
|
||||
"line": 377,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L376"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L377"
|
||||
},
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 384,
|
||||
"line": 385,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L384"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L385"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -57371,9 +57371,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 372,
|
||||
"line": 373,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L372"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L373"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -57469,9 +57469,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 376,
|
||||
"line": 377,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L376"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L377"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -57569,9 +57569,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 492,
|
||||
"line": 493,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L492"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L493"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -57613,9 +57613,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 492,
|
||||
"line": 493,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L492"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L493"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -57640,9 +57640,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 529,
|
||||
"line": 530,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L529"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L530"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -57693,9 +57693,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 529,
|
||||
"line": 530,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L529"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L530"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -57741,9 +57741,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 512,
|
||||
"line": 513,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L512"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L513"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -57794,9 +57794,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 512,
|
||||
"line": 513,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L512"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L513"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -57863,9 +57863,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 431,
|
||||
"line": 432,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L431"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L432"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -57886,9 +57886,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 431,
|
||||
"line": 432,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L431"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L432"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -58112,9 +58112,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 445,
|
||||
"line": 446,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L445"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L446"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -58162,9 +58162,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 444,
|
||||
"line": 445,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L444"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L445"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -58207,9 +58207,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 443,
|
||||
"line": 444,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L443"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L444"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -58227,9 +58227,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 442,
|
||||
"line": 443,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L442"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L443"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -58333,9 +58333,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 396,
|
||||
"line": 397,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L396"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L397"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -58356,9 +58356,9 @@
|
||||
"sources": [
|
||||
{
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 396,
|
||||
"line": 397,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L396"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L397"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -58519,7 +58519,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 37,
|
||||
"character": 21,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L37"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L37"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -58599,7 +58599,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 44,
|
||||
"character": 8,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L44"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L44"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -58619,7 +58619,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 44,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L44"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L44"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -59089,7 +59089,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 59,
|
||||
"character": 26,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L59"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L59"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -59109,7 +59109,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 59,
|
||||
"character": 24,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L59"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L59"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -59190,7 +59190,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 62,
|
||||
"character": 25,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -59213,7 +59213,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 62,
|
||||
"character": 47,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -59233,7 +59233,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 62,
|
||||
"character": 45,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -59251,7 +59251,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 62,
|
||||
"character": 23,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L62"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -59291,7 +59291,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 65,
|
||||
"character": 10,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L65"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L65"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -59311,7 +59311,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 65,
|
||||
"character": 8,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L65"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L65"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -59347,7 +59347,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 66,
|
||||
"character": 42,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L66"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L66"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -59367,7 +59367,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/SupabaseClient.ts",
|
||||
"line": 66,
|
||||
"character": 40,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/SupabaseClient.ts#L66"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/SupabaseClient.ts#L66"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -72862,7 +72862,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 173,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L173"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L173"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -79982,7 +79982,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 161,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L161"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L161"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -80030,7 +80030,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 161,
|
||||
"character": 51,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L161"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L161"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -80050,7 +80050,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 161,
|
||||
"character": 49,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L161"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L161"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -80101,7 +80101,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 162,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L162"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L162"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -80130,7 +80130,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 160,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L160"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L160"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -86905,7 +86905,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 28,
|
||||
"character": 12,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L28"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L28"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -86955,7 +86955,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 154,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L154"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L154"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -86971,7 +86971,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 154,
|
||||
"character": 16,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L154"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L154"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -87023,7 +87023,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 61,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L61"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L61"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87056,7 +87056,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 65,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L65"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L65"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87085,7 +87085,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 115,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L115"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L115"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87138,7 +87138,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 95,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L95"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L95"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87161,7 +87161,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 95,
|
||||
"character": 36,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L95"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L95"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -87207,7 +87207,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 95,
|
||||
"character": 55,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L95"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L95"
|
||||
}
|
||||
],
|
||||
"indexSignatures": [
|
||||
@@ -87222,7 +87222,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 95,
|
||||
"character": 57,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L95"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L95"
|
||||
}
|
||||
],
|
||||
"parameters": [
|
||||
@@ -87280,7 +87280,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 111,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L111"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L111"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87322,7 +87322,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 121,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L121"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L121"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87363,7 +87363,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 73,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L73"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L73"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87392,7 +87392,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 99,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L99"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L99"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87433,7 +87433,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 69,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L69"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L69"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87462,7 +87462,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 126,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L126"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L126"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87504,7 +87504,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 107,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L107"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L107"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87536,7 +87536,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 61,
|
||||
"character": 9,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L61"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L61"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -87571,7 +87571,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 32,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L32"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L32"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87596,7 +87596,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 33,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L33"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L33"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87640,7 +87640,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 45,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L45"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L45"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87681,7 +87681,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 58,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L58"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L58"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87701,7 +87701,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 32,
|
||||
"character": 7,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L32"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L32"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -87720,7 +87720,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 133,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L133"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L133"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87761,7 +87761,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 137,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L137"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L137"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87795,7 +87795,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 141,
|
||||
"character": 4,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L141"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L141"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87830,7 +87830,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 133,
|
||||
"character": 11,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L133"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L133"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -87857,7 +87857,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 131,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L131"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L131"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87880,7 +87880,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 132,
|
||||
"character": 2,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L132"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L132"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -87905,7 +87905,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/lib/types.ts",
|
||||
"line": 28,
|
||||
"character": 48,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/lib/types.ts#L28"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/lib/types.ts#L28"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -89419,7 +89419,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/index.ts",
|
||||
"line": 46,
|
||||
"character": 13,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/index.ts#L46"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/index.ts#L46"
|
||||
}
|
||||
],
|
||||
"signatures": [
|
||||
@@ -89434,7 +89434,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/index.ts",
|
||||
"line": 46,
|
||||
"character": 28,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/index.ts#L46"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/index.ts#L46"
|
||||
}
|
||||
],
|
||||
"typeParameters": [
|
||||
@@ -89482,7 +89482,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/index.ts",
|
||||
"line": 50,
|
||||
"character": 8,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/index.ts#L50"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/index.ts#L50"
|
||||
}
|
||||
],
|
||||
"type": {
|
||||
@@ -89502,7 +89502,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/index.ts",
|
||||
"line": 50,
|
||||
"character": 6,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/index.ts#L50"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/index.ts#L50"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -90715,7 +90715,7 @@
|
||||
"fileName": "packages/core/supabase-js/src/index.ts",
|
||||
"line": 1,
|
||||
"character": 0,
|
||||
"url": "https://github.com/supabase/supabase-js/blob/897fb8e9d288e74dd47e765b5d6ec647e765a3cb/packages/core/supabase-js/src/index.ts#L1"
|
||||
"url": "https://github.com/supabase/supabase-js/blob/116fe12c648f156d2748487abbf82a7e662d35bb/packages/core/supabase-js/src/index.ts#L1"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -740,6 +740,7 @@
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"minProperties": 1,
|
||||
"properties": {
|
||||
"public": { "type": "boolean", "example": false },
|
||||
"file_size_limit": {
|
||||
@@ -753,7 +754,12 @@
|
||||
"nullable": true,
|
||||
"items": { "type": "string", "example": ["image/png", "image/jpg"] }
|
||||
}
|
||||
}
|
||||
},
|
||||
"anyOf": [
|
||||
{ "required": ["public"] },
|
||||
{ "required": ["file_size_limit"] },
|
||||
{ "required": ["allowed_mime_types"] }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -947,7 +947,7 @@
|
||||
},
|
||||
"/v1/projects": {
|
||||
"get": {
|
||||
"description": "Returns a list of all projects you've previously created.\n\nUse `/v1/organizations/{slug}/projects` instead when possible to get more precise results and pagination support.",
|
||||
"description": "Returns a list of all projects you've previously created.",
|
||||
"operationId": "v1-list-all-projects",
|
||||
"parameters": [],
|
||||
"responses": {
|
||||
@@ -1054,6 +1054,15 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized"
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden action"
|
||||
},
|
||||
"429": {
|
||||
"description": "Rate limit exceeded"
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
@@ -1321,6 +1330,15 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized"
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden action"
|
||||
},
|
||||
"429": {
|
||||
"description": "Rate limit exceeded"
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
@@ -1610,6 +1628,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized"
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden action"
|
||||
},
|
||||
"429": {
|
||||
"description": "Rate limit exceeded"
|
||||
},
|
||||
"500": {
|
||||
"description": "Unexpected error listing organizations"
|
||||
}
|
||||
@@ -1685,6 +1712,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized"
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden action"
|
||||
},
|
||||
"429": {
|
||||
"description": "Rate limit exceeded"
|
||||
},
|
||||
"500": {
|
||||
"description": "Unexpected error creating an organization"
|
||||
}
|
||||
@@ -2050,6 +2086,15 @@
|
||||
"responses": {
|
||||
"204": {
|
||||
"description": ""
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized"
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden action"
|
||||
},
|
||||
"429": {
|
||||
"description": "Rate limit exceeded"
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
@@ -2220,6 +2265,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized"
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden action"
|
||||
},
|
||||
"429": {
|
||||
"description": "Rate limit exceeded"
|
||||
},
|
||||
"500": {
|
||||
"description": "Failed to list user's SQL snippets"
|
||||
}
|
||||
@@ -2366,6 +2420,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized"
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden action"
|
||||
},
|
||||
"429": {
|
||||
"description": "Rate limit exceeded"
|
||||
},
|
||||
"500": {
|
||||
"description": "Failed to retrieve SQL snippet"
|
||||
}
|
||||
@@ -4010,15 +4073,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized"
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden action"
|
||||
},
|
||||
"429": {
|
||||
"description": "Rate limit exceeded"
|
||||
},
|
||||
"500": {
|
||||
"description": "Failed to retrieve database branches"
|
||||
}
|
||||
@@ -4258,15 +4312,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized"
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden action"
|
||||
},
|
||||
"429": {
|
||||
"description": "Rate limit exceeded"
|
||||
},
|
||||
"500": {
|
||||
"description": "Failed to create database branch"
|
||||
}
|
||||
@@ -4486,15 +4531,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized"
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden action"
|
||||
},
|
||||
"429": {
|
||||
"description": "Rate limit exceeded"
|
||||
},
|
||||
"500": {
|
||||
"description": "Failed to fetch database branch"
|
||||
}
|
||||
@@ -22362,6 +22398,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "Unauthorized"
|
||||
},
|
||||
"403": {
|
||||
"description": "Forbidden action"
|
||||
},
|
||||
"429": {
|
||||
"description": "Rate limit exceeded"
|
||||
},
|
||||
"500": {
|
||||
"description": "Failed to retrieve projects"
|
||||
}
|
||||
@@ -22650,126 +22695,6 @@
|
||||
},
|
||||
"required": ["message"]
|
||||
},
|
||||
"V1ListProjectsPaginatedResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"projects": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "number"
|
||||
},
|
||||
"cloud_provider": {
|
||||
"type": "string"
|
||||
},
|
||||
"inserted_at": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"organization_id": {
|
||||
"type": "number"
|
||||
},
|
||||
"organization_slug": {
|
||||
"type": "string"
|
||||
},
|
||||
"ref": {
|
||||
"type": "string"
|
||||
},
|
||||
"region": {
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"type": "string"
|
||||
},
|
||||
"subscription_id": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"is_branch_enabled": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"is_physical_backups_enabled": {
|
||||
"type": "boolean",
|
||||
"nullable": true
|
||||
},
|
||||
"preview_branch_refs": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"disk_volume_size_gb": {
|
||||
"type": "number"
|
||||
},
|
||||
"infra_compute_size": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"pico",
|
||||
"nano",
|
||||
"micro",
|
||||
"small",
|
||||
"medium",
|
||||
"large",
|
||||
"xlarge",
|
||||
"2xlarge",
|
||||
"4xlarge",
|
||||
"8xlarge",
|
||||
"12xlarge",
|
||||
"16xlarge",
|
||||
"24xlarge",
|
||||
"24xlarge_optimized_memory",
|
||||
"24xlarge_optimized_cpu",
|
||||
"24xlarge_high_memory",
|
||||
"48xlarge",
|
||||
"48xlarge_optimized_memory",
|
||||
"48xlarge_optimized_cpu",
|
||||
"48xlarge_high_memory"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"id",
|
||||
"cloud_provider",
|
||||
"inserted_at",
|
||||
"name",
|
||||
"organization_id",
|
||||
"organization_slug",
|
||||
"ref",
|
||||
"region",
|
||||
"status",
|
||||
"subscription_id",
|
||||
"is_branch_enabled",
|
||||
"is_physical_backups_enabled",
|
||||
"preview_branch_refs"
|
||||
]
|
||||
}
|
||||
},
|
||||
"pagination": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"count": {
|
||||
"type": "number",
|
||||
"description": "Total number of projects. Use this to calculate the total number of pages."
|
||||
},
|
||||
"limit": {
|
||||
"type": "number",
|
||||
"description": "Maximum number of projects per page (actual number may be less)"
|
||||
},
|
||||
"offset": {
|
||||
"type": "number",
|
||||
"description": "Number of projects skipped in this response"
|
||||
}
|
||||
},
|
||||
"required": ["count", "limit", "offset"]
|
||||
}
|
||||
},
|
||||
"required": ["projects", "pagination"]
|
||||
},
|
||||
"V1ProjectWithDatabaseResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
||||
@@ -1215,6 +1215,7 @@
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"minProperties": 1,
|
||||
"properties": {
|
||||
"public": {
|
||||
"type": "boolean",
|
||||
@@ -1243,7 +1244,18 @@
|
||||
"example": ["image/png", "image/jpg"]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"anyOf": [
|
||||
{
|
||||
"required": ["public"]
|
||||
},
|
||||
{
|
||||
"required": ["file_size_limit"]
|
||||
},
|
||||
{
|
||||
"required": ["allowed_mime_types"]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
import { cn } from 'ui'
|
||||
|
||||
import { formatCurrency } from '@/lib/helpers'
|
||||
|
||||
export interface ChargeBreakdownProps {
|
||||
subtotal: number
|
||||
total: number
|
||||
tax?: { amount: number; percentage: number }
|
||||
taxStatus?: 'calculated' | 'failed' | 'not_applicable'
|
||||
isFetching: boolean
|
||||
}
|
||||
|
||||
export const ChargeBreakdown = ({
|
||||
subtotal,
|
||||
total,
|
||||
tax,
|
||||
taxStatus,
|
||||
isFetching,
|
||||
}: ChargeBreakdownProps) => {
|
||||
return (
|
||||
<div
|
||||
className={cn('text-foreground-light text-sm transition-opacity', isFetching && 'opacity-50')}
|
||||
>
|
||||
{total !== subtotal && (
|
||||
<div className="flex items-center justify-between gap-2 border-b border-muted text-sm">
|
||||
<div className="py-2">Subtotal</div>
|
||||
<div className="py-2 text-right tabular-nums" translate="no">
|
||||
{formatCurrency(subtotal)}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{taxStatus === 'calculated' && tax && tax.amount > 0 && (
|
||||
<div className="flex items-center justify-between gap-2 border-b border-muted text-sm">
|
||||
<div className="py-2">Tax ({tax.percentage}%)</div>
|
||||
<div className="py-2 text-right tabular-nums" translate="no">
|
||||
{formatCurrency(tax.amount)}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{taxStatus === 'failed' && (
|
||||
<div className="flex items-center justify-between gap-2 border-b border-muted text-sm">
|
||||
<div className="py-2 text-foreground-lighter">
|
||||
Tax could not be estimated and may be applied separately
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className="flex items-center justify-between gap-2 text-foreground text-base">
|
||||
<div className="py-2">Total due today</div>
|
||||
<div className="py-2 text-right tabular-nums" translate="no">
|
||||
{formatCurrency(total)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
-17
@@ -92,7 +92,6 @@ export const RestoreToNewProject = () => {
|
||||
enabled: PHYSICAL_BACKUPS_ENABLED || PITR_ENABLED,
|
||||
}
|
||||
)
|
||||
const IS_CLONED_PROJECT = cloneStatus?.cloned_from?.source_project?.ref ? true : false
|
||||
const isLoading = !isPermissionsLoaded || cloneBackupsLoading || cloneStatusLoading
|
||||
|
||||
useEffect(() => {
|
||||
@@ -186,22 +185,6 @@ export const RestoreToNewProject = () => {
|
||||
return <GenericSkeletonLoader />
|
||||
}
|
||||
|
||||
if (IS_CLONED_PROJECT) {
|
||||
return (
|
||||
<Admonition type="default" title="This project cannot be restored to a new project">
|
||||
<Markdown
|
||||
className="max-w-full [&>p]:!leading-normal"
|
||||
content={`This is a temporary limitation whereby projects that were originally restored from another project cannot be restored to yet another project.`}
|
||||
/>
|
||||
<Button asChild type="default">
|
||||
<Link href={`/project/${cloneStatus?.cloned_from?.source_project?.ref || ''}`}>
|
||||
Go to original project
|
||||
</Link>
|
||||
</Button>
|
||||
</Admonition>
|
||||
)
|
||||
}
|
||||
|
||||
if (isError) {
|
||||
return <AlertError error={error} subject="Failed to retrieve backups" />
|
||||
}
|
||||
|
||||
@@ -319,7 +319,9 @@ export const QueuesSettings = () => {
|
||||
</FormPanelContent>
|
||||
|
||||
<FormPanelFooter className="flex px-8 py-4 flex items-center justify-between">
|
||||
<DocsButton href="https://github.com/tembo-io/pgmq?tab=readme-ov-file#sql-examples" />
|
||||
<DocsButton
|
||||
href={`${DOCS_URL}/guides/queues/quickstart#expose-queues-to-client-side-consumers`}
|
||||
/>
|
||||
<div className="flex items-center gap-x-2">
|
||||
<Button
|
||||
type="default"
|
||||
|
||||
+18
-1
@@ -5,7 +5,7 @@ import type {
|
||||
StripeAddressElementOptions,
|
||||
} from '@stripe/stripe-js'
|
||||
import { Check, ChevronsUpDown, Info, X } from 'lucide-react'
|
||||
import { useId, useMemo, useState } from 'react'
|
||||
import { useEffect, useId, useMemo, useRef, useState } from 'react'
|
||||
import { UseFormReturn } from 'react-hook-form'
|
||||
import {
|
||||
Button,
|
||||
@@ -87,6 +87,23 @@ export const BillingCustomerDataForm = ({
|
||||
)
|
||||
}, [addressCountry])
|
||||
|
||||
// Clear tax ID fields when the billing country changes so a stale tax ID
|
||||
// from the previous country doesn't persist under the new one.
|
||||
const prevCountryRef = useRef(addressCountry)
|
||||
useEffect(() => {
|
||||
if (!addressCountry) return
|
||||
|
||||
const isCountryChange =
|
||||
prevCountryRef.current !== undefined && prevCountryRef.current !== addressCountry
|
||||
prevCountryRef.current = addressCountry
|
||||
|
||||
if (isCountryChange) {
|
||||
form.setValue('tax_id_type', '', { shouldDirty: true })
|
||||
form.setValue('tax_id_value', '', { shouldDirty: true })
|
||||
form.setValue('tax_id_name', '', { shouldDirty: true })
|
||||
}
|
||||
}, [addressCountry, form])
|
||||
|
||||
return (
|
||||
<div className={cn('flex flex-col space-y-4', className)}>
|
||||
<div className={cn('relative', disabled && 'opacity-50')}>
|
||||
|
||||
@@ -4,6 +4,7 @@ import { Elements } from '@stripe/react-stripe-js'
|
||||
import { loadStripe, PaymentIntentResult } from '@stripe/stripe-js'
|
||||
import { PermissionAction, SupportCategories } from '@supabase/shared-types/out/constants'
|
||||
import { useQueryClient } from '@tanstack/react-query'
|
||||
import { useDebounce } from '@uidotdev/usehooks'
|
||||
import { AlertCircle, Info } from 'lucide-react'
|
||||
import { useTheme } from 'next-themes'
|
||||
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
||||
@@ -32,12 +33,15 @@ import { z } from 'zod'
|
||||
|
||||
import type { PaymentMethodElementRef } from '../../Billing/Payment/PaymentMethods/NewPaymentMethodElement'
|
||||
import PaymentMethodSelection from './Subscription/PaymentMethodSelection'
|
||||
import { ChargeBreakdown } from '@/components/interfaces/Billing/ChargeBreakdown'
|
||||
import { getStripeElementsAppearanceOptions } from '@/components/interfaces/Billing/Payment/Payment.utils'
|
||||
import { PaymentConfirmation } from '@/components/interfaces/Billing/Payment/PaymentConfirmation'
|
||||
import { NO_PROJECT_MARKER } from '@/components/interfaces/Support/SupportForm.utils'
|
||||
import { SupportLink } from '@/components/interfaces/Support/SupportLink'
|
||||
import { ButtonTooltip } from '@/components/ui/ButtonTooltip'
|
||||
import { useOrganizationCreditTopUpMutation } from '@/data/organizations/organization-credit-top-up-mutation'
|
||||
import { useCreditTopUpPreview } from '@/data/organizations/organization-credit-top-up-preview'
|
||||
import type { CustomerAddress, CustomerTaxId } from '@/data/organizations/types'
|
||||
import { subscriptionKeys } from '@/data/subscriptions/keys'
|
||||
import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions'
|
||||
import { STRIPE_PUBLIC_KEY } from '@/lib/constants'
|
||||
@@ -45,12 +49,14 @@ import { STRIPE_PUBLIC_KEY } from '@/lib/constants'
|
||||
const stripePromise = loadStripe(STRIPE_PUBLIC_KEY)
|
||||
|
||||
const FORM_ID = 'credit-top-up'
|
||||
const MIN_TOP_UP_AMOUNT = 300
|
||||
const MAX_TOP_UP_AMOUNT = 2000
|
||||
|
||||
const FormSchema = z.object({
|
||||
amount: z.coerce
|
||||
.number()
|
||||
.gte(300, 'Amount must be between $300 - $2000.')
|
||||
.lte(2000, 'Amount must be between $300 - $2000.')
|
||||
.gte(MIN_TOP_UP_AMOUNT, `Amount must be between $${MIN_TOP_UP_AMOUNT} - $${MAX_TOP_UP_AMOUNT}.`)
|
||||
.lte(MAX_TOP_UP_AMOUNT, `Amount must be between $${MIN_TOP_UP_AMOUNT} - $${MAX_TOP_UP_AMOUNT}.`)
|
||||
.int('Amount must be a whole number.'),
|
||||
paymentMethod: z.string(),
|
||||
})
|
||||
@@ -87,6 +93,52 @@ export const CreditTopUp = ({ slug }: { slug: string | undefined }) => {
|
||||
const [topUpModalVisible, setTopUpModalVisible] = useState(false)
|
||||
const [useAsDefaultBillingAddress, setUseAsDefaultBillingAddress] = useState(true)
|
||||
const [paymentConfirmationLoading, setPaymentConfirmationLoading] = useState(false)
|
||||
|
||||
const [latestAddress, setLatestAddress] = useState<CustomerAddress>()
|
||||
const [latestTaxId, setLatestTaxId] = useState<CustomerTaxId | null>()
|
||||
|
||||
const billingAddress = useAsDefaultBillingAddress ? latestAddress : undefined
|
||||
const billingTaxId = useAsDefaultBillingAddress ? latestTaxId : null
|
||||
const debouncedAddress = useDebounce(billingAddress, 1000)
|
||||
const debouncedTaxId = useDebounce(billingTaxId, 1000)
|
||||
|
||||
const watchedAmount = form.watch('amount')
|
||||
const debouncedAmount = useDebounce(watchedAmount, 1000)
|
||||
const parsedAmount = Number(debouncedAmount)
|
||||
const validAmount =
|
||||
!Number.isNaN(parsedAmount) &&
|
||||
Number.isInteger(parsedAmount) &&
|
||||
parsedAmount >= MIN_TOP_UP_AMOUNT &&
|
||||
parsedAmount <= MAX_TOP_UP_AMOUNT
|
||||
? parsedAmount
|
||||
: undefined
|
||||
|
||||
const isPreviewStale =
|
||||
watchedAmount !== debouncedAmount ||
|
||||
billingAddress !== debouncedAddress ||
|
||||
billingTaxId !== debouncedTaxId
|
||||
|
||||
const handleAddressChange = useCallback((address: CustomerAddress) => {
|
||||
setLatestAddress(address)
|
||||
}, [])
|
||||
|
||||
const handleTaxIdChange = useCallback((taxId: CustomerTaxId | null) => {
|
||||
setLatestTaxId(taxId)
|
||||
}, [])
|
||||
|
||||
const {
|
||||
data: creditPreview,
|
||||
isFetching: creditPreviewIsFetching,
|
||||
isSuccess: creditPreviewInitialized,
|
||||
} = useCreditTopUpPreview(
|
||||
{
|
||||
slug,
|
||||
amount: validAmount,
|
||||
address: debouncedAddress,
|
||||
taxId: debouncedTaxId ?? undefined,
|
||||
},
|
||||
{ enabled: topUpModalVisible && !!validAmount }
|
||||
)
|
||||
const [captchaToken, setCaptchaToken] = useState<string | null>(null)
|
||||
const [captchaRef, setCaptchaRef] = useState<HCaptcha | null>(null)
|
||||
|
||||
@@ -175,6 +227,8 @@ export const CreditTopUp = ({ slug }: { slug: string | undefined }) => {
|
||||
setCaptchaRef(null)
|
||||
setPaymentIntentConfirmation(undefined)
|
||||
setPaymentIntentSecret('')
|
||||
setLatestAddress(undefined)
|
||||
setLatestTaxId(null)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -288,6 +342,8 @@ export const CreditTopUp = ({ slug }: { slug: string | undefined }) => {
|
||||
readOnly={executingTopUp || paymentConfirmationLoading}
|
||||
useAsDefaultBillingAddress={useAsDefaultBillingAddress}
|
||||
onUseAsDefaultBillingAddressChange={setUseAsDefaultBillingAddress}
|
||||
onAddressChange={handleAddressChange}
|
||||
onTaxIdChange={handleTaxIdChange}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
@@ -324,6 +380,25 @@ export const CreditTopUp = ({ slug }: { slug: string | undefined }) => {
|
||||
</AlertDescription_Shadcn_>
|
||||
</Alert_Shadcn_>
|
||||
)}
|
||||
|
||||
{creditPreviewInitialized && !!validAmount && (
|
||||
<div className="mt-4">
|
||||
<ChargeBreakdown
|
||||
subtotal={creditPreview.amount}
|
||||
total={creditPreview.total}
|
||||
tax={
|
||||
creditPreview.tax
|
||||
? {
|
||||
amount: creditPreview.tax.tax_amount,
|
||||
percentage: creditPreview.tax.tax_rate_percentage,
|
||||
}
|
||||
: undefined
|
||||
}
|
||||
taxStatus={creditPreview.tax_status}
|
||||
isFetching={creditPreviewIsFetching}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
</DialogSection>
|
||||
|
||||
{!paymentIntentConfirmation?.paymentIntent && (
|
||||
@@ -332,6 +407,7 @@ export const CreditTopUp = ({ slug }: { slug: string | undefined }) => {
|
||||
htmlType="submit"
|
||||
type="primary"
|
||||
loading={executingTopUp || paymentConfirmationLoading}
|
||||
disabled={isPreviewStale || creditPreviewIsFetching}
|
||||
>
|
||||
Top Up
|
||||
</Button>
|
||||
|
||||
+57
-86
@@ -31,6 +31,14 @@ import { Admonition } from 'ui-patterns/admonition'
|
||||
import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout'
|
||||
import * as z from 'zod'
|
||||
|
||||
import {
|
||||
BatchInvitationResult,
|
||||
buildProjectPayload,
|
||||
buildSsoPayload,
|
||||
categorizeInviteEmails,
|
||||
emailSchema,
|
||||
parseEmails,
|
||||
} from './InviteMemberButton.utils'
|
||||
import { useGetRolesManagementPermissions } from './TeamSettings.utils'
|
||||
import { DiscardChangesConfirmationDialog } from '@/components/ui-patterns/Dialogs/DiscardChangesConfirmationDialog'
|
||||
import { ButtonTooltip } from '@/components/ui/ButtonTooltip'
|
||||
@@ -50,13 +58,6 @@ import { useConfirmOnClose } from '@/hooks/ui/useConfirmOnClose'
|
||||
import { DOCS_URL } from '@/lib/constants'
|
||||
import { useProfile } from '@/lib/profile'
|
||||
|
||||
function parseEmails(value: string): string[] {
|
||||
return value
|
||||
.split(',')
|
||||
.map((e) => e.trim())
|
||||
.filter(Boolean)
|
||||
}
|
||||
|
||||
export const InviteMemberButton = () => {
|
||||
const { slug } = useParams()
|
||||
const { profile } = useProfile()
|
||||
@@ -115,33 +116,23 @@ export const InviteMemberButton = () => {
|
||||
const { mutateAsync: inviteMemberAsync, isPending: isInviting } =
|
||||
useOrganizationCreateInvitationMutation()
|
||||
|
||||
const emailSchema = z
|
||||
.string()
|
||||
.min(1, 'At least one email address is required')
|
||||
.refine(
|
||||
(val) => {
|
||||
const emails = parseEmails(val)
|
||||
if (emails.length === 0) return false
|
||||
return emails.every((e) => z.string().email().safeParse(e).success)
|
||||
},
|
||||
(val) => {
|
||||
const emails = parseEmails(val)
|
||||
const invalid = emails.find((e) => !z.string().email().safeParse(e).success)
|
||||
return {
|
||||
message: invalid
|
||||
? `Invalid email address: ${invalid}`
|
||||
: 'At least one email address is required',
|
||||
}
|
||||
const FormSchema = z
|
||||
.object({
|
||||
email: emailSchema,
|
||||
role: z.string().min(1, 'Role is required'),
|
||||
applyToOrg: z.boolean(),
|
||||
projectRef: z.string(),
|
||||
requireSso: z.enum(['auto', 'sso', 'non-sso']),
|
||||
})
|
||||
.superRefine((data, ctx) => {
|
||||
if (!data.applyToOrg && !data.projectRef) {
|
||||
ctx.addIssue({
|
||||
code: z.ZodIssueCode.custom,
|
||||
message: 'A project must be selected',
|
||||
path: ['projectRef'],
|
||||
})
|
||||
}
|
||||
)
|
||||
|
||||
const FormSchema = z.object({
|
||||
email: emailSchema,
|
||||
role: z.string().min(1, 'Role is required'),
|
||||
applyToOrg: z.boolean(),
|
||||
projectRef: z.string(),
|
||||
requireSso: z.enum(['auto', 'sso', 'non-sso']),
|
||||
})
|
||||
})
|
||||
|
||||
const form = useForm<z.infer<typeof FormSchema>>({
|
||||
mode: 'onSubmit',
|
||||
@@ -159,22 +150,10 @@ export const InviteMemberButton = () => {
|
||||
if (profile?.id === undefined) return console.error('Profile ID required')
|
||||
const emails = parseEmails(values.email).map((e) => e.toLowerCase())
|
||||
|
||||
const alreadyInvited: string[] = []
|
||||
const alreadyMembers: string[] = []
|
||||
const toInvite: string[] = []
|
||||
|
||||
for (const emailAddress of emails) {
|
||||
const existingMember = (members ?? []).find((member) => member.primary_email === emailAddress)
|
||||
if (existingMember !== undefined) {
|
||||
if (existingMember.invited_id) {
|
||||
alreadyInvited.push(emailAddress)
|
||||
} else {
|
||||
alreadyMembers.push(emailAddress)
|
||||
}
|
||||
} else {
|
||||
toInvite.push(emailAddress)
|
||||
}
|
||||
}
|
||||
const { alreadyInvited, alreadyMembers, toInvite } = categorizeInviteEmails(
|
||||
emails,
|
||||
members ?? []
|
||||
)
|
||||
|
||||
if (alreadyInvited.length > 0) {
|
||||
toast.error(
|
||||
@@ -194,47 +173,39 @@ export const InviteMemberButton = () => {
|
||||
if (toInvite.length === 0) return
|
||||
}
|
||||
|
||||
const projectPayload =
|
||||
!values.applyToOrg && values.projectRef ? { projects: [values.projectRef] } : {}
|
||||
const projectPayload = buildProjectPayload(values.applyToOrg, values.projectRef)
|
||||
const ssoPayload = buildSsoPayload(values.requireSso)
|
||||
|
||||
// Transform SSO preference to backend format
|
||||
const ssoPayload =
|
||||
values.requireSso === 'sso'
|
||||
? { requireSso: true }
|
||||
: values.requireSso === 'non-sso'
|
||||
? { requireSso: false }
|
||||
: {} // 'auto' - let backend use automatic behavior
|
||||
|
||||
const results = await Promise.allSettled(
|
||||
toInvite.map((emailAddress) =>
|
||||
inviteMemberAsync({
|
||||
slug,
|
||||
email: emailAddress,
|
||||
roleId: Number(values.role),
|
||||
...projectPayload,
|
||||
...ssoPayload,
|
||||
})
|
||||
)
|
||||
)
|
||||
|
||||
const successCount = results.filter((r) => r.status === 'fulfilled').length
|
||||
const failedEmails = toInvite.filter((_, i) => results[i].status === 'rejected')
|
||||
|
||||
if (successCount > 0) {
|
||||
toast.success(
|
||||
successCount === 1
|
||||
? 'Successfully sent invitation to new member'
|
||||
: `Successfully sent invitations to ${successCount} new members`
|
||||
)
|
||||
closeInviteDialog()
|
||||
let result: BatchInvitationResult
|
||||
try {
|
||||
result = (await inviteMemberAsync({
|
||||
slug,
|
||||
emails: toInvite,
|
||||
roleId: Number(values.role),
|
||||
...projectPayload,
|
||||
...ssoPayload,
|
||||
})) as BatchInvitationResult
|
||||
} catch {
|
||||
return // onError callback already showed the toast
|
||||
}
|
||||
if (failedEmails.length > 0) {
|
||||
toast.error(
|
||||
failedEmails.length === 1
|
||||
? `Failed to send invitation to ${failedEmails[0]}`
|
||||
: `Failed to send invitations to ${failedEmails.length} emails`
|
||||
|
||||
const { succeeded, failed } = result
|
||||
|
||||
if (succeeded.length > 0) {
|
||||
toast.success(
|
||||
succeeded.length === 1
|
||||
? 'Successfully sent invitation to new member'
|
||||
: `Successfully sent invitations to ${succeeded.length} new members`
|
||||
)
|
||||
}
|
||||
|
||||
for (const { email, error } of failed) {
|
||||
toast.error(`Failed to invite ${email}: ${error}`)
|
||||
}
|
||||
|
||||
if (succeeded.length > 0) {
|
||||
closeInviteDialog()
|
||||
}
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
|
||||
+109
@@ -0,0 +1,109 @@
|
||||
import * as z from 'zod'
|
||||
|
||||
import type { OrganizationMember } from '@/data/organizations/organization-members-query'
|
||||
|
||||
export const MAX_BATCH_INVITE_SIZE = 50
|
||||
|
||||
/** Max characters to show when an invalid token is long (e.g. comma-less paste of many addresses). */
|
||||
const MAX_INVALID_EMAIL_SNIPPET_LENGTH = 120
|
||||
|
||||
function formatInvalidEmailSnippet(token: string): string {
|
||||
if (token.length <= MAX_INVALID_EMAIL_SNIPPET_LENGTH) return token
|
||||
return `${token.slice(0, MAX_INVALID_EMAIL_SNIPPET_LENGTH)}…`
|
||||
}
|
||||
|
||||
export const emailSchema = z
|
||||
.string()
|
||||
.min(1, 'At least one email address is required')
|
||||
.refine(
|
||||
(val) => {
|
||||
const emails = parseEmails(val)
|
||||
if (emails.length === 0) return false
|
||||
return emails.every((e) => z.string().email().safeParse(e).success)
|
||||
},
|
||||
(val) => {
|
||||
const emails = parseEmails(val)
|
||||
const invalid = emails.find((e) => !z.string().email().safeParse(e).success)
|
||||
return {
|
||||
message: invalid
|
||||
? `Invalid email address: "${formatInvalidEmailSnippet(invalid)}"`
|
||||
: 'At least one email address is required',
|
||||
}
|
||||
}
|
||||
)
|
||||
.refine(
|
||||
(val) => parseEmails(val).length <= MAX_BATCH_INVITE_SIZE,
|
||||
(val) => {
|
||||
const count = parseEmails(val).length
|
||||
return {
|
||||
message: `You can invite up to ${MAX_BATCH_INVITE_SIZE} members at a time. Remove ${count - MAX_BATCH_INVITE_SIZE} email ${count - MAX_BATCH_INVITE_SIZE === 1 ? 'address' : 'addresses'} to continue.`,
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
export function parseEmails(value: string): string[] {
|
||||
const emails = value
|
||||
.split(/[\s,]+/)
|
||||
.map((e) => e.trim().toLowerCase())
|
||||
.filter(Boolean)
|
||||
return [...new Set(emails)]
|
||||
}
|
||||
|
||||
export type CategorizedEmails = {
|
||||
alreadyInvited: string[]
|
||||
alreadyMembers: string[]
|
||||
toInvite: string[]
|
||||
}
|
||||
|
||||
export type BatchInvitationFailure = {
|
||||
email: string
|
||||
error: string
|
||||
}
|
||||
|
||||
export type BatchInvitationResult = {
|
||||
succeeded: string[]
|
||||
failed: BatchInvitationFailure[]
|
||||
}
|
||||
|
||||
export function categorizeInviteEmails(
|
||||
emails: string[],
|
||||
members: OrganizationMember[]
|
||||
): CategorizedEmails {
|
||||
const alreadyInvited: string[] = []
|
||||
const alreadyMembers: string[] = []
|
||||
const toInvite: string[] = []
|
||||
|
||||
for (const email of emails) {
|
||||
const existingMember = members.find((m) => m.primary_email === email)
|
||||
if (existingMember !== undefined) {
|
||||
if (existingMember.invited_id) {
|
||||
alreadyInvited.push(email)
|
||||
} else {
|
||||
alreadyMembers.push(email)
|
||||
}
|
||||
} else {
|
||||
toInvite.push(email)
|
||||
}
|
||||
}
|
||||
|
||||
return { alreadyInvited, alreadyMembers, toInvite }
|
||||
}
|
||||
|
||||
export function buildProjectPayload(
|
||||
applyToOrg: boolean,
|
||||
projectRef: string
|
||||
): { projects: string[] } | Record<string, never> {
|
||||
if (applyToOrg) return {}
|
||||
if (!projectRef) {
|
||||
throw new Error('projectRef is required when applyToOrg is false')
|
||||
}
|
||||
return { projects: [projectRef] }
|
||||
}
|
||||
|
||||
export function buildSsoPayload(
|
||||
requireSso: 'auto' | 'sso' | 'non-sso'
|
||||
): { requireSso: boolean } | Record<string, never> {
|
||||
if (requireSso === 'sso') return { requireSso: true }
|
||||
if (requireSso === 'non-sso') return { requireSso: false }
|
||||
return {}
|
||||
}
|
||||
@@ -128,12 +128,12 @@ export const MemberActions = ({ member }: MemberActionsProps) => {
|
||||
const projects = projectScopedRole.projects.map(({ ref }) => ref)
|
||||
inviteMember({
|
||||
slug,
|
||||
email: member.primary_email,
|
||||
emails: [member.primary_email],
|
||||
roleId: projectScopedRole.base_role_id,
|
||||
projects,
|
||||
})
|
||||
} else {
|
||||
inviteMember({ slug, email: member.primary_email, roleId })
|
||||
inviteMember({ slug, emails: [member.primary_email], roleId })
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
+7
@@ -137,6 +137,13 @@ export const GitHubIntegrationConnectionForm = ({
|
||||
onSuccess: () => {
|
||||
toast.success('GitHub integration successfully updated')
|
||||
},
|
||||
onError: (error) => {
|
||||
// Don't show error toast when connection already exists - the branch
|
||||
// settings update will still proceed and show its own success toast
|
||||
if (!error.message?.includes('already exists')) {
|
||||
toast.error(`Failed to create GitHub connection: ${error.message}`)
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
const { mutateAsync: deleteConnection, isPending: isDeletingConnection } =
|
||||
|
||||
@@ -27,6 +27,7 @@ import {
|
||||
useSidebar,
|
||||
} from 'ui'
|
||||
|
||||
import { Shortcut } from '../ui/Shortcut'
|
||||
import { Route } from '../ui/ui.types'
|
||||
import {
|
||||
useIsPlatformWebhooksEnabled,
|
||||
@@ -47,6 +48,7 @@ import { useLocalStorageQuery } from '@/hooks/misc/useLocalStorage'
|
||||
import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization'
|
||||
import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject'
|
||||
import { useAppStateSnapshot } from '@/state/app-state'
|
||||
import { SHORTCUT_IDS } from '@/state/shortcuts/registry'
|
||||
|
||||
export const ICON_SIZE = 32
|
||||
export const ICON_STROKE_WIDTH = 1.5
|
||||
@@ -167,14 +169,23 @@ export function SideBarNavLink({
|
||||
active?: boolean
|
||||
onClick?: () => void
|
||||
} & ComponentPropsWithoutRef<typeof SidebarMenuButton>) {
|
||||
const router = useRouter()
|
||||
const { state: sidebarState } = useSidebar()
|
||||
const [sidebarBehaviour] = useLocalStorageQuery(
|
||||
LOCAL_STORAGE_KEYS.SIDEBAR_BEHAVIOR,
|
||||
DEFAULT_SIDEBAR_BEHAVIOR
|
||||
)
|
||||
|
||||
const isActiveLink = !!(route.link && !route.disabled)
|
||||
const hasShortcut = !!(route.shortcutId && isActiveLink)
|
||||
|
||||
// Collapsed: show immediately (replaces the old label-only tooltip
|
||||
// that used to surface the name of an icon-only item). Expanded:
|
||||
// slight delay so the tooltip doesn't flash while skimming the nav.
|
||||
const shortcutPopoverDelay = sidebarState === 'collapsed' ? 0 : 1000
|
||||
|
||||
const buttonProps = {
|
||||
disabled: route.disabled,
|
||||
tooltip: sidebarBehaviour === 'closed' ? route.label : '',
|
||||
isActive: active,
|
||||
className: cn('text-sm', sidebarBehaviour === 'open' ? '!px-2' : ''),
|
||||
size: 'default' as const,
|
||||
@@ -190,14 +201,27 @@ export function SideBarNavLink({
|
||||
</>
|
||||
)
|
||||
|
||||
const button = isActiveLink ? (
|
||||
<SidebarMenuButton {...buttonProps} asChild>
|
||||
<Link href={route.link!}>{content}</Link>
|
||||
</SidebarMenuButton>
|
||||
) : (
|
||||
<SidebarMenuButton {...buttonProps}>{content}</SidebarMenuButton>
|
||||
)
|
||||
|
||||
return (
|
||||
<SidebarMenuItem>
|
||||
{route.link && !route.disabled ? (
|
||||
<SidebarMenuButton {...buttonProps} asChild>
|
||||
<Link href={route.link}>{content}</Link>
|
||||
</SidebarMenuButton>
|
||||
{hasShortcut ? (
|
||||
<Shortcut
|
||||
id={route.shortcutId!}
|
||||
onTrigger={() => router.push(route.link!)}
|
||||
side="right"
|
||||
delayDuration={shortcutPopoverDelay}
|
||||
>
|
||||
{button}
|
||||
</Shortcut>
|
||||
) : (
|
||||
<SidebarMenuButton {...buttonProps}>{content}</SidebarMenuButton>
|
||||
button
|
||||
)}
|
||||
</SidebarMenuItem>
|
||||
)
|
||||
@@ -218,13 +242,9 @@ const ProjectLinks = () => {
|
||||
const router = useRouter()
|
||||
const { ref } = useParams()
|
||||
const { data: project } = useSelectedProjectQuery()
|
||||
const { data: org } = useSelectedOrganizationQuery()
|
||||
const snap = useAppStateSnapshot()
|
||||
const { securityLints, errorLints } = useLints()
|
||||
const showReports = useIsFeatureEnabled('reports:all')
|
||||
const { mutate: sendEvent } = useSendEventMutation()
|
||||
|
||||
const platformWebhooksEnabled = useIsPlatformWebhooksEnabled()
|
||||
const { isEnabled: isUnifiedLogsEnabled } = useUnifiedLogsPreview()
|
||||
|
||||
const activeRoute = router.pathname.split('/')[3]
|
||||
@@ -269,6 +289,7 @@ const ProjectLinks = () => {
|
||||
icon: <Home size={ICON_SIZE} strokeWidth={ICON_STROKE_WIDTH} />,
|
||||
link: `/project/${ref}`,
|
||||
linkElement: <ProjectIndexPageLink projectRef={ref} />,
|
||||
shortcutId: SHORTCUT_IDS.NAV_HOME,
|
||||
}}
|
||||
/>
|
||||
{toolRoutes.map((route, i) => (
|
||||
@@ -291,7 +312,7 @@ const ProjectLinks = () => {
|
||||
</SidebarGroup>
|
||||
<Separator className="w-[calc(100%-1rem)] mx-auto" />
|
||||
<SidebarGroup className="gap-0.5">
|
||||
{otherRoutes.map((route, i) => {
|
||||
{otherRoutes.map((route) => {
|
||||
if (route.key === 'advisors') {
|
||||
return (
|
||||
<div className="relative" key={route.key}>
|
||||
@@ -354,24 +375,28 @@ const OrganizationLinks = () => {
|
||||
href: `/org/${organizationSlug}`,
|
||||
key: 'projects',
|
||||
icon: <Boxes size={ICON_SIZE} strokeWidth={ICON_STROKE_WIDTH} />,
|
||||
shortcutId: SHORTCUT_IDS.NAV_ORG_PROJECTS,
|
||||
},
|
||||
{
|
||||
label: 'Team',
|
||||
href: `/org/${organizationSlug}/team`,
|
||||
key: 'team',
|
||||
icon: <Users size={ICON_SIZE} strokeWidth={ICON_STROKE_WIDTH} />,
|
||||
shortcutId: SHORTCUT_IDS.NAV_ORG_TEAM,
|
||||
},
|
||||
{
|
||||
label: 'Integrations',
|
||||
href: `/org/${organizationSlug}/integrations`,
|
||||
key: 'integrations',
|
||||
icon: <Blocks size={ICON_SIZE} strokeWidth={ICON_STROKE_WIDTH} />,
|
||||
shortcutId: SHORTCUT_IDS.NAV_ORG_INTEGRATIONS,
|
||||
},
|
||||
{
|
||||
label: 'Usage',
|
||||
href: `/org/${organizationSlug}/usage`,
|
||||
key: 'usage',
|
||||
icon: <ChartArea size={ICON_SIZE} strokeWidth={ICON_STROKE_WIDTH} />,
|
||||
shortcutId: SHORTCUT_IDS.NAV_ORG_USAGE,
|
||||
},
|
||||
...(showBilling
|
||||
? [
|
||||
@@ -380,6 +405,7 @@ const OrganizationLinks = () => {
|
||||
href: `/org/${organizationSlug}/billing`,
|
||||
key: 'billing',
|
||||
icon: <Receipt size={ICON_SIZE} strokeWidth={ICON_STROKE_WIDTH} />,
|
||||
shortcutId: SHORTCUT_IDS.NAV_ORG_BILLING,
|
||||
},
|
||||
]
|
||||
: []),
|
||||
@@ -388,6 +414,7 @@ const OrganizationLinks = () => {
|
||||
href: `/org/${organizationSlug}/general`,
|
||||
key: 'settings',
|
||||
icon: <Settings size={ICON_SIZE} strokeWidth={ICON_STROKE_WIDTH} />,
|
||||
shortcutId: SHORTCUT_IDS.NAV_ORG_SETTINGS,
|
||||
},
|
||||
]
|
||||
|
||||
@@ -412,6 +439,7 @@ const OrganizationLinks = () => {
|
||||
key: item.label,
|
||||
icon: item.icon,
|
||||
disabled: disableAccessMfa,
|
||||
shortcutId: item.shortcutId,
|
||||
}}
|
||||
/>
|
||||
))}
|
||||
|
||||
@@ -6,6 +6,7 @@ import type { Route } from '@/components/ui/ui.types'
|
||||
import { EditorIndexPageLink } from '@/data/prefetchers/project.$ref.editor'
|
||||
import type { Project } from '@/data/projects/project-detail-query'
|
||||
import { IS_PLATFORM, PROJECT_STATUS } from '@/lib/constants'
|
||||
import { SHORTCUT_IDS } from '@/state/shortcuts/registry'
|
||||
|
||||
interface RouteContext {
|
||||
ref?: string
|
||||
@@ -52,6 +53,7 @@ export const generateToolRoutes = (ref?: string, project?: Project): Route[] =>
|
||||
icon: <TableEditor size={ICON_SIZE} strokeWidth={ICON_STROKE_WIDTH} />,
|
||||
link: ref && (isProjectBuilding ? buildingUrl : `/project/${ref}/editor`),
|
||||
linkElement: <EditorIndexPageLink projectRef={ref} />,
|
||||
shortcutId: SHORTCUT_IDS.NAV_TABLE_EDITOR,
|
||||
},
|
||||
{
|
||||
key: 'sql',
|
||||
@@ -59,6 +61,7 @@ export const generateToolRoutes = (ref?: string, project?: Project): Route[] =>
|
||||
disabled: !isProjectActive,
|
||||
icon: <SqlEditor size={ICON_SIZE} strokeWidth={ICON_STROKE_WIDTH} />,
|
||||
link: ref && (isProjectBuilding ? buildingUrl : `/project/${ref}/sql`),
|
||||
shortcutId: SHORTCUT_IDS.NAV_SQL_EDITOR,
|
||||
},
|
||||
]
|
||||
}
|
||||
@@ -89,6 +92,7 @@ export const generateProductRoutes = (
|
||||
: isProjectActive
|
||||
? `/project/${ref}/database/schemas`
|
||||
: `/project/${ref}/database/backups/scheduled`),
|
||||
shortcutId: SHORTCUT_IDS.NAV_DATABASE,
|
||||
},
|
||||
...(authEnabled
|
||||
? [
|
||||
@@ -104,6 +108,7 @@ export const generateProductRoutes = (
|
||||
: authOverviewPageEnabled
|
||||
? `/project/${ref}/auth/overview`
|
||||
: `/project/${ref}/auth/users`),
|
||||
shortcutId: SHORTCUT_IDS.NAV_AUTH,
|
||||
},
|
||||
]
|
||||
: []),
|
||||
@@ -115,6 +120,7 @@ export const generateProductRoutes = (
|
||||
disabled: !isProjectActive,
|
||||
icon: <Storage size={ICON_SIZE} strokeWidth={ICON_STROKE_WIDTH} />,
|
||||
link: ref && (isProjectBuilding ? buildingUrl : `/project/${ref}/storage/files`),
|
||||
shortcutId: SHORTCUT_IDS.NAV_STORAGE,
|
||||
},
|
||||
]
|
||||
: []),
|
||||
@@ -126,6 +132,7 @@ export const generateProductRoutes = (
|
||||
disabled: false,
|
||||
icon: <EdgeFunctions size={ICON_SIZE} strokeWidth={ICON_STROKE_WIDTH} />,
|
||||
link: ref && `/project/${ref}/functions`,
|
||||
shortcutId: SHORTCUT_IDS.NAV_FUNCTIONS,
|
||||
},
|
||||
]
|
||||
: []),
|
||||
@@ -137,6 +144,7 @@ export const generateProductRoutes = (
|
||||
disabled: !isProjectActive,
|
||||
icon: <Realtime size={ICON_SIZE} strokeWidth={ICON_STROKE_WIDTH} />,
|
||||
link: ref && (isProjectBuilding ? buildingUrl : `/project/${ref}/realtime/inspector`),
|
||||
shortcutId: SHORTCUT_IDS.NAV_REALTIME,
|
||||
},
|
||||
]
|
||||
: []),
|
||||
@@ -160,6 +168,7 @@ export const generateOtherRoutes = (
|
||||
disabled: !isProjectActive,
|
||||
icon: <Lightbulb size={ICON_SIZE} strokeWidth={ICON_STROKE_WIDTH} />,
|
||||
link: ref && (isProjectBuilding ? buildingUrl : `/project/${ref}/advisors/security`),
|
||||
shortcutId: SHORTCUT_IDS.NAV_ADVISORS,
|
||||
},
|
||||
// Observability is only available on the platform, not for self-hosted/CLI
|
||||
...(isPlatform && reportsEnabled
|
||||
@@ -170,6 +179,7 @@ export const generateOtherRoutes = (
|
||||
disabled: !isProjectActive,
|
||||
icon: <Telescope size={ICON_SIZE} strokeWidth={ICON_STROKE_WIDTH} />,
|
||||
link: ref && (isProjectBuilding ? buildingUrl : `/project/${ref}/observability`),
|
||||
shortcutId: SHORTCUT_IDS.NAV_OBSERVABILITY,
|
||||
},
|
||||
]
|
||||
: []),
|
||||
@@ -179,6 +189,7 @@ export const generateOtherRoutes = (
|
||||
disabled: false,
|
||||
icon: <List size={ICON_SIZE} strokeWidth={ICON_STROKE_WIDTH} />,
|
||||
link: ref && (unifiedLogsEnabled ? `/project/${ref}/logs` : `/project/${ref}/logs/explorer`),
|
||||
shortcutId: SHORTCUT_IDS.NAV_LOGS,
|
||||
},
|
||||
{
|
||||
key: 'integrations',
|
||||
@@ -186,6 +197,7 @@ export const generateOtherRoutes = (
|
||||
disabled: !isProjectActive,
|
||||
icon: <Blocks size={ICON_SIZE} strokeWidth={ICON_STROKE_WIDTH} />,
|
||||
link: ref && (isProjectBuilding ? buildingUrl : `/project/${ref}/integrations`),
|
||||
shortcutId: SHORTCUT_IDS.NAV_INTEGRATIONS,
|
||||
},
|
||||
]
|
||||
}
|
||||
@@ -202,6 +214,7 @@ export const generateSettingsRoutes = (ref?: string, features?: SettingsFeatures
|
||||
ref &&
|
||||
(isPlatform ? `/project/${ref}/settings/general` : `/project/${ref}/settings/log-drains`),
|
||||
disabled: false,
|
||||
shortcutId: SHORTCUT_IDS.NAV_SETTINGS,
|
||||
},
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,197 @@
|
||||
import { fireEvent, render, screen } from '@testing-library/react'
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
|
||||
import { Shortcut } from './Shortcut'
|
||||
import { SHORTCUT_IDS } from '@/state/shortcuts/registry'
|
||||
|
||||
const { mockUseShortcut, mockShortcutTooltip } = vi.hoisted(() => ({
|
||||
mockUseShortcut: vi.fn(),
|
||||
mockShortcutTooltip: vi.fn((props: any) => (
|
||||
<div data-testid="shortcut-tooltip">{props.children}</div>
|
||||
)),
|
||||
}))
|
||||
|
||||
vi.mock('@/state/shortcuts/useShortcut', () => ({
|
||||
useShortcut: mockUseShortcut,
|
||||
}))
|
||||
|
||||
vi.mock('./ShortcutTooltip', () => ({
|
||||
ShortcutTooltip: mockShortcutTooltip,
|
||||
}))
|
||||
|
||||
describe('Shortcut', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks()
|
||||
})
|
||||
|
||||
describe('rendering', () => {
|
||||
it('renders the wrapped child', () => {
|
||||
render(
|
||||
<Shortcut id={SHORTCUT_IDS.COMMAND_MENU_OPEN} onTrigger={() => {}}>
|
||||
<button>Open</button>
|
||||
</Shortcut>
|
||||
)
|
||||
expect(screen.getByRole('button', { name: 'Open' })).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('wraps the child in ShortcutTooltip', () => {
|
||||
render(
|
||||
<Shortcut id={SHORTCUT_IDS.COMMAND_MENU_OPEN} onTrigger={() => {}}>
|
||||
<button>Open</button>
|
||||
</Shortcut>
|
||||
)
|
||||
const tooltip = screen.getByTestId('shortcut-tooltip')
|
||||
expect(tooltip).toContainElement(screen.getByRole('button', { name: 'Open' }))
|
||||
})
|
||||
})
|
||||
|
||||
describe('useShortcut wiring', () => {
|
||||
it('forwards id and onTrigger to useShortcut', () => {
|
||||
const handler = vi.fn()
|
||||
render(
|
||||
<Shortcut id={SHORTCUT_IDS.ACTION_BAR_SAVE} onTrigger={handler}>
|
||||
<button>Save</button>
|
||||
</Shortcut>
|
||||
)
|
||||
expect(mockUseShortcut).toHaveBeenCalledWith(SHORTCUT_IDS.ACTION_BAR_SAVE, handler, undefined)
|
||||
})
|
||||
|
||||
it('forwards options to useShortcut', () => {
|
||||
const handler = vi.fn()
|
||||
const options = { enabled: true, registerInCommandMenu: true }
|
||||
render(
|
||||
<Shortcut id={SHORTCUT_IDS.ACTION_BAR_SAVE} onTrigger={handler} options={options}>
|
||||
<button>Save</button>
|
||||
</Shortcut>
|
||||
)
|
||||
expect(mockUseShortcut).toHaveBeenCalledWith(SHORTCUT_IDS.ACTION_BAR_SAVE, handler, options)
|
||||
})
|
||||
|
||||
it('passes updated options to useShortcut on rerender', () => {
|
||||
const handler = vi.fn()
|
||||
const { rerender } = render(
|
||||
<Shortcut
|
||||
id={SHORTCUT_IDS.ACTION_BAR_SAVE}
|
||||
onTrigger={handler}
|
||||
options={{ enabled: false }}
|
||||
>
|
||||
<button>Save</button>
|
||||
</Shortcut>
|
||||
)
|
||||
expect(mockUseShortcut).toHaveBeenLastCalledWith(SHORTCUT_IDS.ACTION_BAR_SAVE, handler, {
|
||||
enabled: false,
|
||||
})
|
||||
|
||||
rerender(
|
||||
<Shortcut id={SHORTCUT_IDS.ACTION_BAR_SAVE} onTrigger={handler} options={{ enabled: true }}>
|
||||
<button>Save</button>
|
||||
</Shortcut>
|
||||
)
|
||||
expect(mockUseShortcut).toHaveBeenLastCalledWith(SHORTCUT_IDS.ACTION_BAR_SAVE, handler, {
|
||||
enabled: true,
|
||||
})
|
||||
})
|
||||
|
||||
it('passes updated id to useShortcut on rerender', () => {
|
||||
const handler = vi.fn()
|
||||
const { rerender } = render(
|
||||
<Shortcut id={SHORTCUT_IDS.NAV_HOME} onTrigger={handler}>
|
||||
<button>Go</button>
|
||||
</Shortcut>
|
||||
)
|
||||
expect(mockUseShortcut).toHaveBeenLastCalledWith(SHORTCUT_IDS.NAV_HOME, handler, undefined)
|
||||
|
||||
rerender(
|
||||
<Shortcut id={SHORTCUT_IDS.NAV_TABLE_EDITOR} onTrigger={handler}>
|
||||
<button>Go</button>
|
||||
</Shortcut>
|
||||
)
|
||||
expect(mockUseShortcut).toHaveBeenLastCalledWith(
|
||||
SHORTCUT_IDS.NAV_TABLE_EDITOR,
|
||||
handler,
|
||||
undefined
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
describe('ShortcutTooltip wiring', () => {
|
||||
it('forwards shortcutId to ShortcutTooltip', () => {
|
||||
render(
|
||||
<Shortcut id={SHORTCUT_IDS.NAV_HOME} onTrigger={() => {}}>
|
||||
<button>Home</button>
|
||||
</Shortcut>
|
||||
)
|
||||
expect(mockShortcutTooltip).toHaveBeenCalled()
|
||||
expect(mockShortcutTooltip.mock.calls.at(-1)![0].shortcutId).toBe(SHORTCUT_IDS.NAV_HOME)
|
||||
})
|
||||
|
||||
it('forwards tooltip positioning props', () => {
|
||||
render(
|
||||
<Shortcut
|
||||
id={SHORTCUT_IDS.NAV_HOME}
|
||||
onTrigger={() => {}}
|
||||
side="right"
|
||||
align="start"
|
||||
sideOffset={8}
|
||||
delayDuration={100}
|
||||
>
|
||||
<button>Home</button>
|
||||
</Shortcut>
|
||||
)
|
||||
const props = mockShortcutTooltip.mock.calls.at(-1)![0]
|
||||
expect(props.side).toBe('right')
|
||||
expect(props.align).toBe('start')
|
||||
expect(props.sideOffset).toBe(8)
|
||||
expect(props.delayDuration).toBe(100)
|
||||
})
|
||||
|
||||
it('forwards label override to ShortcutTooltip', () => {
|
||||
render(
|
||||
<Shortcut id={SHORTCUT_IDS.NAV_HOME} onTrigger={() => {}} label="Go home">
|
||||
<button>Home</button>
|
||||
</Shortcut>
|
||||
)
|
||||
expect(mockShortcutTooltip.mock.calls.at(-1)![0].label).toBe('Go home')
|
||||
})
|
||||
|
||||
it('omits undefined positioning props rather than fabricating them', () => {
|
||||
render(
|
||||
<Shortcut id={SHORTCUT_IDS.NAV_HOME} onTrigger={() => {}}>
|
||||
<button>Home</button>
|
||||
</Shortcut>
|
||||
)
|
||||
const props = mockShortcutTooltip.mock.calls.at(-1)![0]
|
||||
expect(props.side).toBeUndefined()
|
||||
expect(props.align).toBeUndefined()
|
||||
expect(props.sideOffset).toBeUndefined()
|
||||
expect(props.delayDuration).toBeUndefined()
|
||||
expect(props.label).toBeUndefined()
|
||||
})
|
||||
})
|
||||
|
||||
describe('child interactivity', () => {
|
||||
it('does not intercept clicks on the wrapped child', () => {
|
||||
const onClick = vi.fn()
|
||||
const onTrigger = vi.fn()
|
||||
render(
|
||||
<Shortcut id={SHORTCUT_IDS.COMMAND_MENU_OPEN} onTrigger={onTrigger}>
|
||||
<button onClick={onClick}>Open</button>
|
||||
</Shortcut>
|
||||
)
|
||||
|
||||
fireEvent.click(screen.getByRole('button', { name: 'Open' }))
|
||||
expect(onClick).toHaveBeenCalledTimes(1)
|
||||
expect(onTrigger).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('does not invoke onTrigger during render — only the hotkey should trigger it', () => {
|
||||
const onTrigger = vi.fn()
|
||||
render(
|
||||
<Shortcut id={SHORTCUT_IDS.COMMAND_MENU_OPEN} onTrigger={onTrigger}>
|
||||
<button>Open</button>
|
||||
</Shortcut>
|
||||
)
|
||||
expect(onTrigger).not.toHaveBeenCalled()
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,77 @@
|
||||
import { TooltipContentProps } from '@ui/components/shadcn/ui/tooltip'
|
||||
import type { ReactNode } from 'react'
|
||||
|
||||
import { ShortcutTooltip } from './ShortcutTooltip'
|
||||
import type { ShortcutId } from '@/state/shortcuts/registry'
|
||||
import type { ShortcutOptions } from '@/state/shortcuts/types'
|
||||
import { useShortcut } from '@/state/shortcuts/useShortcut'
|
||||
|
||||
interface ShortcutProps {
|
||||
/** Registered shortcut id — drives both the hotkey binding and the tooltip. */
|
||||
id: ShortcutId
|
||||
/** Fires on the hotkey. Usually the same handler wired to the child's `onClick`. */
|
||||
onTrigger: () => void
|
||||
/** Element to bind the shortcut to and wrap in the tooltip. */
|
||||
children: ReactNode
|
||||
/** Per-mount overrides for the shortcut — see `ShortcutOptions`. */
|
||||
options?: ShortcutOptions
|
||||
side?: TooltipContentProps['side']
|
||||
align?: TooltipContentProps['align']
|
||||
sideOffset?: number
|
||||
delayDuration?: number
|
||||
/**
|
||||
* Override the label from the registry. Use when the wrapped element's
|
||||
* action is a narrower/contextual variant of the registered shortcut.
|
||||
*/
|
||||
label?: string
|
||||
}
|
||||
|
||||
/**
|
||||
* Bind a registered shortcut to an element AND show its keybind on hover,
|
||||
* Linear-style. Single source of truth: one `id` drives both the hotkey
|
||||
* listener and the tooltip, so they can't drift.
|
||||
*
|
||||
* The wrapped child stays fully interactive — Radix `asChild` passes clicks,
|
||||
* focus, and refs through untouched.
|
||||
*
|
||||
* @example
|
||||
* <Shortcut id={SHORTCUT_IDS.RESULTS_COPY_MARKDOWN} onTrigger={handleCopy}>
|
||||
* <Button onClick={handleCopy}>Copy</Button>
|
||||
* </Shortcut>
|
||||
*
|
||||
* @example
|
||||
* // Gate the hotkey on local state; tooltip still renders:
|
||||
* <Shortcut
|
||||
* id={SHORTCUT_IDS.ACTION_BAR_SAVE}
|
||||
* onTrigger={handleSave}
|
||||
* options={{ enabled: hasUnsavedChanges }}
|
||||
* >
|
||||
* <Button onClick={handleSave} disabled={!hasUnsavedChanges}>Save</Button>
|
||||
* </Shortcut>
|
||||
*/
|
||||
export const Shortcut = ({
|
||||
id,
|
||||
onTrigger,
|
||||
children,
|
||||
options,
|
||||
side,
|
||||
align,
|
||||
sideOffset,
|
||||
delayDuration,
|
||||
label,
|
||||
}: ShortcutProps) => {
|
||||
useShortcut(id, onTrigger, options)
|
||||
|
||||
return (
|
||||
<ShortcutTooltip
|
||||
shortcutId={id}
|
||||
side={side}
|
||||
align={align}
|
||||
sideOffset={sideOffset}
|
||||
delayDuration={delayDuration}
|
||||
label={label}
|
||||
>
|
||||
{children}
|
||||
</ShortcutTooltip>
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
import { TooltipContentProps } from '@ui/components/shadcn/ui/tooltip'
|
||||
import { Fragment, type ReactNode } from 'react'
|
||||
import { KeyboardShortcut, Tooltip, TooltipContent, TooltipTrigger } from 'ui'
|
||||
|
||||
import { hotkeyToKeys } from '@/state/shortcuts/formatShortcut'
|
||||
import { SHORTCUT_DEFINITIONS, type ShortcutId } from '@/state/shortcuts/registry'
|
||||
|
||||
interface ShortcutTooltipProps {
|
||||
shortcutId: ShortcutId
|
||||
children: ReactNode
|
||||
side?: TooltipContentProps['side']
|
||||
align?: TooltipContentProps['align']
|
||||
sideOffset?: number
|
||||
delayDuration?: number
|
||||
/**
|
||||
* Override the label from the registry. Use when the wrapped element's
|
||||
* action is a narrower/contextual variant of the registered shortcut.
|
||||
*/
|
||||
label?: string
|
||||
}
|
||||
|
||||
/**
|
||||
* Wraps any element to show its bound keyboard shortcut on hover/focus, in the
|
||||
* style of Linear's shortcut tooltips: `"<label> <key> [then <key>]"`.
|
||||
*
|
||||
* Uses Radix's `asChild` trigger, so the wrapped element remains fully
|
||||
* interactive — clicks, focus, and event handlers pass through untouched.
|
||||
*
|
||||
* @example
|
||||
* <ShortcutTooltip shortcutId={SHORTCUT_IDS.RESULTS_COPY_MARKDOWN}>
|
||||
* <Button onClick={handleCopy}>Copy</Button>
|
||||
* </ShortcutTooltip>
|
||||
*/
|
||||
export const ShortcutTooltip = ({
|
||||
shortcutId,
|
||||
children,
|
||||
side,
|
||||
align,
|
||||
sideOffset,
|
||||
delayDuration,
|
||||
label: labelOverride,
|
||||
}: ShortcutTooltipProps) => {
|
||||
const def = SHORTCUT_DEFINITIONS[shortcutId]
|
||||
const label = labelOverride ?? def.label
|
||||
|
||||
return (
|
||||
<Tooltip delayDuration={delayDuration}>
|
||||
<TooltipTrigger asChild>{children}</TooltipTrigger>
|
||||
<TooltipContent
|
||||
side={side}
|
||||
align={align}
|
||||
sideOffset={sideOffset}
|
||||
className="flex items-center gap-2"
|
||||
>
|
||||
<span>{label}</span>
|
||||
<span className="flex items-center gap-1">
|
||||
{def.sequence.map((step, i) => (
|
||||
<Fragment key={i}>
|
||||
{i > 0 && <span className="text-foreground-lighter text-[11px]">then</span>}
|
||||
<KeyboardShortcut keys={hotkeyToKeys(step)} />
|
||||
</Fragment>
|
||||
))}
|
||||
</span>
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
)
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
import { ReactNode } from 'react'
|
||||
|
||||
import type { ShortcutId } from '@/state/shortcuts/registry'
|
||||
|
||||
export interface Route {
|
||||
key: string
|
||||
label: string
|
||||
@@ -8,4 +10,10 @@ export interface Route {
|
||||
disabled?: boolean
|
||||
linkElement?: ReactNode
|
||||
items?: any | Route[]
|
||||
/**
|
||||
* Binds a registered keyboard shortcut to this route when set. The sidebar
|
||||
* entry shows the keybind on hover and jumps to `link` when the shortcut
|
||||
* fires. Ignored if `link` is not set.
|
||||
*/
|
||||
shortcutId?: ShortcutId
|
||||
}
|
||||
@@ -9,7 +9,7 @@ import type { ResponseError, UseCustomMutationOptions } from '@/types'
|
||||
|
||||
export type OrganizationCreateInvitationVariables = {
|
||||
slug: string
|
||||
email: string
|
||||
emails: string[]
|
||||
roleId: number
|
||||
projects?: string[]
|
||||
requireSso?: boolean
|
||||
@@ -17,12 +17,12 @@ export type OrganizationCreateInvitationVariables = {
|
||||
|
||||
export async function createOrganizationInvitation({
|
||||
slug,
|
||||
email,
|
||||
emails,
|
||||
roleId,
|
||||
projects,
|
||||
requireSso,
|
||||
}: OrganizationCreateInvitationVariables) {
|
||||
const payload: components['schemas']['CreateInvitationBody'] = { email, role_id: roleId }
|
||||
const payload: components['schemas']['CreateInvitationBody'] = { emails, role_id: roleId }
|
||||
if (projects !== undefined) payload.role_scoped_projects = projects
|
||||
if (requireSso !== undefined) payload.require_sso = requireSso
|
||||
|
||||
@@ -69,7 +69,7 @@ export const useOrganizationCreateInvitationMutation = ({
|
||||
},
|
||||
async onError(data, variables, context) {
|
||||
if (onError === undefined) {
|
||||
toast.error(`Failed to update member role: ${data.message}`)
|
||||
toast.error(`Failed to send invitation${data.message ? ': ' + data.message : ''}`)
|
||||
} else {
|
||||
onError(data, variables, context)
|
||||
}
|
||||
|
||||
@@ -32,4 +32,8 @@ export const organizationKeys = {
|
||||
) => ['organizations', 'creation-preview', tier, params] as const,
|
||||
previewCreditCode: (slug: string | undefined, code: string) =>
|
||||
['organizations', slug, 'preview-credit-code', code] as const,
|
||||
creditTopUpPreview: (
|
||||
slug: string | undefined,
|
||||
params?: { amount?: number; address?: Record<string, unknown>; taxId?: Record<string, unknown> }
|
||||
) => ['organizations', slug, 'credits', 'preview', params] as const,
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
import { keepPreviousData, useQuery } from '@tanstack/react-query'
|
||||
|
||||
import { organizationKeys } from './keys'
|
||||
import type { CustomerAddress, CustomerTaxId } from './types'
|
||||
import { handleError, post } from '@/data/fetchers'
|
||||
import type { ResponseError, UseCustomQueryOptions } from '@/types'
|
||||
|
||||
export type CreditTopUpPreviewVariables = {
|
||||
slug?: string
|
||||
amount?: number
|
||||
address?: CustomerAddress
|
||||
taxId?: CustomerTaxId
|
||||
}
|
||||
|
||||
export async function previewCreditTopUp({
|
||||
slug,
|
||||
amount,
|
||||
address,
|
||||
taxId,
|
||||
}: CreditTopUpPreviewVariables) {
|
||||
if (!slug) throw new Error('slug is required')
|
||||
if (!amount) throw new Error('amount is required')
|
||||
|
||||
const { data, error } = await post(`/platform/organizations/{slug}/billing/credits/preview`, {
|
||||
params: { path: { slug } },
|
||||
body: {
|
||||
amount,
|
||||
...(address && { address }),
|
||||
...(taxId && { tax_id: taxId }),
|
||||
},
|
||||
})
|
||||
|
||||
if (error) handleError(error)
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
export type CreditTopUpPreviewData = Awaited<ReturnType<typeof previewCreditTopUp>>
|
||||
|
||||
export const useCreditTopUpPreview = <TData = CreditTopUpPreviewData>(
|
||||
{ slug, amount, address, taxId }: CreditTopUpPreviewVariables,
|
||||
{
|
||||
enabled = true,
|
||||
...options
|
||||
}: UseCustomQueryOptions<CreditTopUpPreviewData, ResponseError, TData> = {}
|
||||
) =>
|
||||
useQuery<CreditTopUpPreviewData, ResponseError, TData>({
|
||||
queryKey: organizationKeys.creditTopUpPreview(slug, {
|
||||
amount,
|
||||
address: address as Record<string, unknown> | undefined,
|
||||
taxId: taxId as Record<string, unknown> | undefined,
|
||||
}),
|
||||
queryFn: () => previewCreditTopUp({ slug, amount, address, taxId }),
|
||||
enabled: enabled && typeof slug !== 'undefined' && typeof amount !== 'undefined',
|
||||
placeholderData: keepPreviousData,
|
||||
...options,
|
||||
})
|
||||
@@ -1,4 +1,3 @@
|
||||
import type { CloudProvider } from 'shared-data'
|
||||
import { AWS_REGIONS, FLY_REGIONS } from 'shared-data'
|
||||
|
||||
import type { components } from '@/data/api'
|
||||
@@ -36,11 +35,7 @@ export const PRICING_TIER_PRODUCT_IDS = {
|
||||
}
|
||||
|
||||
export function useDefaultProvider() {
|
||||
const defaultProvider: CloudProvider =
|
||||
process.env.NEXT_PUBLIC_ENVIRONMENT &&
|
||||
['staging', 'preview'].includes(process.env.NEXT_PUBLIC_ENVIRONMENT)
|
||||
? 'AWS_K8S'
|
||||
: 'AWS'
|
||||
const defaultProvider = 'AWS'
|
||||
|
||||
const { infraCloudProviders: validCloudProviders } = useCustomContent(['infra:cloud_providers'])
|
||||
|
||||
@@ -48,7 +43,7 @@ export function useDefaultProvider() {
|
||||
return defaultProvider
|
||||
}
|
||||
|
||||
return (validCloudProviders?.[0] ?? 'AWS') as CloudProvider
|
||||
return validCloudProviders?.[0] ?? 'AWS'
|
||||
}
|
||||
|
||||
export const PROVIDERS = {
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
|
||||
import { hotkeyToKeys } from './formatShortcut'
|
||||
|
||||
describe('hotkeyToKeys', () => {
|
||||
describe('single-step hotkeys', () => {
|
||||
it('returns a single letter key unchanged', () => {
|
||||
expect(hotkeyToKeys('K')).toEqual(['K'])
|
||||
})
|
||||
|
||||
it('preserves named keys', () => {
|
||||
expect(hotkeyToKeys('Enter')).toEqual(['Enter'])
|
||||
expect(hotkeyToKeys('Escape')).toEqual(['Escape'])
|
||||
expect(hotkeyToKeys('Tab')).toEqual(['Tab'])
|
||||
expect(hotkeyToKeys('ArrowUp')).toEqual(['ArrowUp'])
|
||||
expect(hotkeyToKeys('ArrowDown')).toEqual(['ArrowDown'])
|
||||
expect(hotkeyToKeys('ArrowLeft')).toEqual(['ArrowLeft'])
|
||||
expect(hotkeyToKeys('ArrowRight')).toEqual(['ArrowRight'])
|
||||
})
|
||||
|
||||
it('preserves punctuation keys', () => {
|
||||
expect(hotkeyToKeys(',')).toEqual([','])
|
||||
expect(hotkeyToKeys('.')).toEqual(['.'])
|
||||
expect(hotkeyToKeys('/')).toEqual(['/'])
|
||||
})
|
||||
})
|
||||
|
||||
describe('Mod mapping', () => {
|
||||
it('converts standalone Mod to Meta', () => {
|
||||
expect(hotkeyToKeys('Mod')).toEqual(['Meta'])
|
||||
})
|
||||
|
||||
it('converts Mod to Meta when combined with a single key', () => {
|
||||
expect(hotkeyToKeys('Mod+K')).toEqual(['Meta', 'K'])
|
||||
})
|
||||
|
||||
it('is case sensitive — only exact "Mod" is converted', () => {
|
||||
expect(hotkeyToKeys('mod+K')).toEqual(['mod', 'K'])
|
||||
expect(hotkeyToKeys('MOD+K')).toEqual(['MOD', 'K'])
|
||||
})
|
||||
|
||||
it('does not rewrite keys that merely contain "Mod" as a substring', () => {
|
||||
expect(hotkeyToKeys('Model')).toEqual(['Model'])
|
||||
expect(hotkeyToKeys('Mod+Model')).toEqual(['Meta', 'Model'])
|
||||
})
|
||||
})
|
||||
|
||||
describe('modifier combos', () => {
|
||||
it('handles Mod+Shift combos', () => {
|
||||
expect(hotkeyToKeys('Mod+Shift+M')).toEqual(['Meta', 'Shift', 'M'])
|
||||
expect(hotkeyToKeys('Mod+Shift+J')).toEqual(['Meta', 'Shift', 'J'])
|
||||
expect(hotkeyToKeys('Mod+Shift+C')).toEqual(['Meta', 'Shift', 'C'])
|
||||
})
|
||||
|
||||
it('preserves modifier order', () => {
|
||||
expect(hotkeyToKeys('Shift+Mod+K')).toEqual(['Shift', 'Meta', 'K'])
|
||||
expect(hotkeyToKeys('Alt+Mod+K')).toEqual(['Alt', 'Meta', 'K'])
|
||||
})
|
||||
|
||||
it('leaves Ctrl, Alt, Shift, Meta literals untouched', () => {
|
||||
expect(hotkeyToKeys('Ctrl+K')).toEqual(['Ctrl', 'K'])
|
||||
expect(hotkeyToKeys('Alt+K')).toEqual(['Alt', 'K'])
|
||||
expect(hotkeyToKeys('Shift+K')).toEqual(['Shift', 'K'])
|
||||
expect(hotkeyToKeys('Meta+K')).toEqual(['Meta', 'K'])
|
||||
})
|
||||
|
||||
it('handles three-modifier combos', () => {
|
||||
expect(hotkeyToKeys('Mod+Alt+Shift+K')).toEqual(['Meta', 'Alt', 'Shift', 'K'])
|
||||
})
|
||||
})
|
||||
|
||||
describe('named-key combos from the registry', () => {
|
||||
it('handles Mod+ArrowUp/Down/Left/Right', () => {
|
||||
expect(hotkeyToKeys('Mod+ArrowUp')).toEqual(['Meta', 'ArrowUp'])
|
||||
expect(hotkeyToKeys('Mod+ArrowDown')).toEqual(['Meta', 'ArrowDown'])
|
||||
expect(hotkeyToKeys('Mod+ArrowLeft')).toEqual(['Meta', 'ArrowLeft'])
|
||||
expect(hotkeyToKeys('Mod+ArrowRight')).toEqual(['Meta', 'ArrowRight'])
|
||||
})
|
||||
|
||||
it('handles Mod+Enter and Mod+Escape', () => {
|
||||
expect(hotkeyToKeys('Mod+Enter')).toEqual(['Meta', 'Enter'])
|
||||
expect(hotkeyToKeys('Mod+Escape')).toEqual(['Meta', 'Escape'])
|
||||
})
|
||||
|
||||
it('handles Mod+. (operation queue toggle / logs reset)', () => {
|
||||
expect(hotkeyToKeys('Mod+.')).toEqual(['Meta', '.'])
|
||||
})
|
||||
})
|
||||
|
||||
describe('edge cases', () => {
|
||||
it('returns a single-element array for empty input', () => {
|
||||
expect(hotkeyToKeys('')).toEqual([''])
|
||||
})
|
||||
|
||||
it('preserves empty segments from trailing plus', () => {
|
||||
expect(hotkeyToKeys('Mod+')).toEqual(['Meta', ''])
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -29,6 +29,25 @@ export const SHORTCUT_IDS = {
|
||||
OPERATION_QUEUE_TOGGLE: 'operation-queue.toggle',
|
||||
OPERATION_QUEUE_UNDO: 'operation-queue.undo',
|
||||
UNIFIED_LOGS_RESET_FOCUS: 'unified-logs.reset-focus',
|
||||
NAV_HOME: 'nav.home',
|
||||
NAV_TABLE_EDITOR: 'nav.table-editor',
|
||||
NAV_SQL_EDITOR: 'nav.sql-editor',
|
||||
NAV_DATABASE: 'nav.database',
|
||||
NAV_AUTH: 'nav.auth',
|
||||
NAV_STORAGE: 'nav.storage',
|
||||
NAV_FUNCTIONS: 'nav.functions',
|
||||
NAV_REALTIME: 'nav.realtime',
|
||||
NAV_ADVISORS: 'nav.advisors',
|
||||
NAV_OBSERVABILITY: 'nav.observability',
|
||||
NAV_LOGS: 'nav.logs',
|
||||
NAV_INTEGRATIONS: 'nav.integrations',
|
||||
NAV_SETTINGS: 'nav.settings',
|
||||
NAV_ORG_PROJECTS: 'nav.org-projects',
|
||||
NAV_ORG_TEAM: 'nav.org-team',
|
||||
NAV_ORG_INTEGRATIONS: 'nav.org-integrations',
|
||||
NAV_ORG_USAGE: 'nav.org-usage',
|
||||
NAV_ORG_BILLING: 'nav.org-billing',
|
||||
NAV_ORG_SETTINGS: 'nav.org-settings',
|
||||
} as const
|
||||
|
||||
/**
|
||||
@@ -181,4 +200,118 @@ export const SHORTCUT_DEFINITIONS: Record<ShortcutId, ShortcutDefinition> = {
|
||||
sequence: ['Mod+.'],
|
||||
showInSettings: false,
|
||||
},
|
||||
[SHORTCUT_IDS.NAV_HOME]: {
|
||||
id: SHORTCUT_IDS.NAV_HOME,
|
||||
label: 'Go to Project Overview',
|
||||
sequence: ['G', 'H'],
|
||||
showInSettings: false,
|
||||
},
|
||||
[SHORTCUT_IDS.NAV_TABLE_EDITOR]: {
|
||||
id: SHORTCUT_IDS.NAV_TABLE_EDITOR,
|
||||
label: 'Go to Table Editor',
|
||||
sequence: ['G', 'T'],
|
||||
showInSettings: false,
|
||||
},
|
||||
[SHORTCUT_IDS.NAV_SQL_EDITOR]: {
|
||||
id: SHORTCUT_IDS.NAV_SQL_EDITOR,
|
||||
label: 'Go to SQL Editor',
|
||||
sequence: ['G', 'S'],
|
||||
showInSettings: false,
|
||||
},
|
||||
[SHORTCUT_IDS.NAV_DATABASE]: {
|
||||
id: SHORTCUT_IDS.NAV_DATABASE,
|
||||
label: 'Go to Database',
|
||||
sequence: ['G', 'D'],
|
||||
showInSettings: false,
|
||||
},
|
||||
[SHORTCUT_IDS.NAV_AUTH]: {
|
||||
id: SHORTCUT_IDS.NAV_AUTH,
|
||||
label: 'Go to Authentication',
|
||||
sequence: ['G', 'A'],
|
||||
showInSettings: false,
|
||||
},
|
||||
[SHORTCUT_IDS.NAV_STORAGE]: {
|
||||
id: SHORTCUT_IDS.NAV_STORAGE,
|
||||
label: 'Go to Storage',
|
||||
sequence: ['G', 'B'],
|
||||
showInSettings: false,
|
||||
},
|
||||
[SHORTCUT_IDS.NAV_FUNCTIONS]: {
|
||||
id: SHORTCUT_IDS.NAV_FUNCTIONS,
|
||||
label: 'Go to Edge Functions',
|
||||
sequence: ['G', 'F'],
|
||||
showInSettings: false,
|
||||
},
|
||||
[SHORTCUT_IDS.NAV_REALTIME]: {
|
||||
id: SHORTCUT_IDS.NAV_REALTIME,
|
||||
label: 'Go to Realtime',
|
||||
sequence: ['G', 'R'],
|
||||
showInSettings: false,
|
||||
},
|
||||
[SHORTCUT_IDS.NAV_ADVISORS]: {
|
||||
id: SHORTCUT_IDS.NAV_ADVISORS,
|
||||
label: 'Go to Advisors',
|
||||
sequence: ['G', 'V'],
|
||||
showInSettings: false,
|
||||
},
|
||||
[SHORTCUT_IDS.NAV_OBSERVABILITY]: {
|
||||
id: SHORTCUT_IDS.NAV_OBSERVABILITY,
|
||||
label: 'Go to Observability',
|
||||
sequence: ['G', 'U'],
|
||||
showInSettings: false,
|
||||
},
|
||||
[SHORTCUT_IDS.NAV_LOGS]: {
|
||||
id: SHORTCUT_IDS.NAV_LOGS,
|
||||
label: 'Go to Logs',
|
||||
sequence: ['G', 'L'],
|
||||
showInSettings: false,
|
||||
},
|
||||
[SHORTCUT_IDS.NAV_INTEGRATIONS]: {
|
||||
id: SHORTCUT_IDS.NAV_INTEGRATIONS,
|
||||
label: 'Go to Integrations',
|
||||
sequence: ['G', 'I'],
|
||||
showInSettings: false,
|
||||
},
|
||||
[SHORTCUT_IDS.NAV_SETTINGS]: {
|
||||
id: SHORTCUT_IDS.NAV_SETTINGS,
|
||||
label: 'Go to Project Settings',
|
||||
sequence: ['G', ','],
|
||||
showInSettings: false,
|
||||
},
|
||||
[SHORTCUT_IDS.NAV_ORG_PROJECTS]: {
|
||||
id: SHORTCUT_IDS.NAV_ORG_PROJECTS,
|
||||
label: 'Go to Projects',
|
||||
sequence: ['G', 'P'],
|
||||
showInSettings: false,
|
||||
},
|
||||
[SHORTCUT_IDS.NAV_ORG_TEAM]: {
|
||||
id: SHORTCUT_IDS.NAV_ORG_TEAM,
|
||||
label: 'Go to Team',
|
||||
sequence: ['G', 'M'],
|
||||
showInSettings: false,
|
||||
},
|
||||
[SHORTCUT_IDS.NAV_ORG_INTEGRATIONS]: {
|
||||
id: SHORTCUT_IDS.NAV_ORG_INTEGRATIONS,
|
||||
label: 'Go to Organization Integrations',
|
||||
sequence: ['G', 'I'],
|
||||
showInSettings: false,
|
||||
},
|
||||
[SHORTCUT_IDS.NAV_ORG_USAGE]: {
|
||||
id: SHORTCUT_IDS.NAV_ORG_USAGE,
|
||||
label: 'Go to Usage',
|
||||
sequence: ['G', 'U'],
|
||||
showInSettings: false,
|
||||
},
|
||||
[SHORTCUT_IDS.NAV_ORG_BILLING]: {
|
||||
id: SHORTCUT_IDS.NAV_ORG_BILLING,
|
||||
label: 'Go to Billing',
|
||||
sequence: ['G', 'B'],
|
||||
showInSettings: false,
|
||||
},
|
||||
[SHORTCUT_IDS.NAV_ORG_SETTINGS]: {
|
||||
id: SHORTCUT_IDS.NAV_ORG_SETTINGS,
|
||||
label: 'Go to Organization Settings',
|
||||
sequence: ['G', 'O'],
|
||||
showInSettings: false,
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,266 @@
|
||||
import { render, renderHook } from '@testing-library/react'
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
|
||||
import { SHORTCUT_DEFINITIONS, SHORTCUT_IDS } from './registry'
|
||||
import { useShortcut } from './useShortcut'
|
||||
|
||||
const { mockUseHotkeySequence, mockUseRegisterCommands, mockUseIsShortcutEnabled } = vi.hoisted(
|
||||
() => ({
|
||||
mockUseHotkeySequence: vi.fn(),
|
||||
mockUseRegisterCommands: vi.fn(),
|
||||
mockUseIsShortcutEnabled: vi.fn(),
|
||||
})
|
||||
)
|
||||
|
||||
vi.mock('@tanstack/react-hotkeys', () => ({
|
||||
useHotkeySequence: mockUseHotkeySequence,
|
||||
}))
|
||||
|
||||
vi.mock('ui-patterns/CommandMenu', () => ({
|
||||
useRegisterCommands: mockUseRegisterCommands,
|
||||
}))
|
||||
|
||||
vi.mock('./useIsShortcutEnabled', () => ({
|
||||
useIsShortcutEnabled: mockUseIsShortcutEnabled,
|
||||
}))
|
||||
|
||||
const getLastHotkeyOptions = () => {
|
||||
const call = mockUseHotkeySequence.mock.calls.at(-1)
|
||||
if (!call) throw new Error('useHotkeySequence was not called')
|
||||
return call[2] as { enabled: boolean; timeout: number | undefined; ignoreInputs?: boolean }
|
||||
}
|
||||
|
||||
const getLastRegisterCall = () => {
|
||||
const call = mockUseRegisterCommands.mock.calls.at(-1)
|
||||
if (!call) throw new Error('useRegisterCommands was not called')
|
||||
return call as [
|
||||
string,
|
||||
Array<{ id: string; name: string; action: () => void; badge: () => any }>,
|
||||
{ enabled: boolean; deps: unknown[] },
|
||||
]
|
||||
}
|
||||
|
||||
describe('useShortcut', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks()
|
||||
mockUseIsShortcutEnabled.mockReturnValue(true)
|
||||
})
|
||||
|
||||
describe('hotkey wiring', () => {
|
||||
it('passes the registry sequence to useHotkeySequence', () => {
|
||||
const cb = vi.fn()
|
||||
renderHook(() => useShortcut(SHORTCUT_IDS.COMMAND_MENU_OPEN, cb))
|
||||
|
||||
const [sequence, callback] = mockUseHotkeySequence.mock.calls[0]
|
||||
expect(sequence).toEqual(SHORTCUT_DEFINITIONS[SHORTCUT_IDS.COMMAND_MENU_OPEN].sequence)
|
||||
expect(callback).toBe(cb)
|
||||
})
|
||||
|
||||
it('passes multi-step sequences (G-chords) through unchanged', () => {
|
||||
renderHook(() => useShortcut(SHORTCUT_IDS.NAV_HOME, vi.fn()))
|
||||
expect(mockUseHotkeySequence.mock.calls[0][0]).toEqual(['G', 'H'])
|
||||
})
|
||||
|
||||
it('wires the callback by reference — useHotkeySequence receives the same function', () => {
|
||||
const cb = vi.fn()
|
||||
renderHook(() => useShortcut(SHORTCUT_IDS.ACTION_BAR_SAVE, cb))
|
||||
const passedCallback = mockUseHotkeySequence.mock.calls[0][1]
|
||||
passedCallback()
|
||||
expect(cb).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
})
|
||||
|
||||
describe('enabled resolution', () => {
|
||||
it('defaults to enabled: true when no options and no registry default', () => {
|
||||
renderHook(() => useShortcut(SHORTCUT_IDS.COMMAND_MENU_OPEN, vi.fn()))
|
||||
expect(getLastHotkeyOptions().enabled).toBe(true)
|
||||
})
|
||||
|
||||
it('caller option takes priority over fallback', () => {
|
||||
renderHook(() => useShortcut(SHORTCUT_IDS.COMMAND_MENU_OPEN, vi.fn(), { enabled: false }))
|
||||
expect(getLastHotkeyOptions().enabled).toBe(false)
|
||||
})
|
||||
|
||||
it('global disable forces enabled to false, regardless of caller', () => {
|
||||
mockUseIsShortcutEnabled.mockReturnValue(false)
|
||||
renderHook(() => useShortcut(SHORTCUT_IDS.COMMAND_MENU_OPEN, vi.fn(), { enabled: true }))
|
||||
expect(getLastHotkeyOptions().enabled).toBe(false)
|
||||
})
|
||||
|
||||
it('global enabled AND caller enabled = true', () => {
|
||||
mockUseIsShortcutEnabled.mockReturnValue(true)
|
||||
renderHook(() => useShortcut(SHORTCUT_IDS.COMMAND_MENU_OPEN, vi.fn(), { enabled: true }))
|
||||
expect(getLastHotkeyOptions().enabled).toBe(true)
|
||||
})
|
||||
|
||||
it('global enabled AND caller undefined = true', () => {
|
||||
mockUseIsShortcutEnabled.mockReturnValue(true)
|
||||
renderHook(() => useShortcut(SHORTCUT_IDS.COMMAND_MENU_OPEN, vi.fn()))
|
||||
expect(getLastHotkeyOptions().enabled).toBe(true)
|
||||
})
|
||||
|
||||
it('subscribes to the correct shortcut id for global preference', () => {
|
||||
renderHook(() => useShortcut(SHORTCUT_IDS.NAV_TABLE_EDITOR, vi.fn()))
|
||||
expect(mockUseIsShortcutEnabled).toHaveBeenCalledWith(SHORTCUT_IDS.NAV_TABLE_EDITOR)
|
||||
})
|
||||
})
|
||||
|
||||
describe('timeout resolution', () => {
|
||||
it('defaults to undefined (falls through to TanStack default)', () => {
|
||||
renderHook(() => useShortcut(SHORTCUT_IDS.COMMAND_MENU_OPEN, vi.fn()))
|
||||
expect(getLastHotkeyOptions().timeout).toBeUndefined()
|
||||
})
|
||||
|
||||
it('uses caller-provided timeout', () => {
|
||||
renderHook(() => useShortcut(SHORTCUT_IDS.COMMAND_MENU_OPEN, vi.fn(), { timeout: 2000 }))
|
||||
expect(getLastHotkeyOptions().timeout).toBe(2000)
|
||||
})
|
||||
})
|
||||
|
||||
describe('ignoreInputs resolution', () => {
|
||||
it('omits the key when no registry default and no caller override (library applies its per-hotkey default)', () => {
|
||||
renderHook(() => useShortcut(SHORTCUT_IDS.COMMAND_MENU_OPEN, vi.fn()))
|
||||
const options = getLastHotkeyOptions()
|
||||
expect('ignoreInputs' in options).toBe(false)
|
||||
})
|
||||
|
||||
it('uses the registry default when no caller override', () => {
|
||||
renderHook(() => useShortcut(SHORTCUT_IDS.TABLE_EDITOR_JUMP_FIRST_ROW, vi.fn()))
|
||||
expect(getLastHotkeyOptions().ignoreInputs).toBe(true)
|
||||
})
|
||||
|
||||
it('caller override takes priority over registry default', () => {
|
||||
renderHook(() =>
|
||||
useShortcut(SHORTCUT_IDS.TABLE_EDITOR_JUMP_FIRST_ROW, vi.fn(), { ignoreInputs: false })
|
||||
)
|
||||
expect(getLastHotkeyOptions().ignoreInputs).toBe(false)
|
||||
})
|
||||
})
|
||||
|
||||
describe('command menu registration', () => {
|
||||
it('calls useRegisterCommands under the "Shortcuts" section', () => {
|
||||
renderHook(() => useShortcut(SHORTCUT_IDS.COMMAND_MENU_OPEN, vi.fn()))
|
||||
const [section] = getLastRegisterCall()
|
||||
expect(section).toBe('Shortcuts')
|
||||
})
|
||||
|
||||
it('is disabled by default (registerInCommandMenu defaults to false)', () => {
|
||||
renderHook(() => useShortcut(SHORTCUT_IDS.COMMAND_MENU_OPEN, vi.fn()))
|
||||
expect(getLastRegisterCall()[2].enabled).toBe(false)
|
||||
})
|
||||
|
||||
it('is enabled when registerInCommandMenu: true AND enabled', () => {
|
||||
renderHook(() =>
|
||||
useShortcut(SHORTCUT_IDS.COMMAND_MENU_OPEN, vi.fn(), { registerInCommandMenu: true })
|
||||
)
|
||||
expect(getLastRegisterCall()[2].enabled).toBe(true)
|
||||
})
|
||||
|
||||
it('is disabled when globally disabled, even with registerInCommandMenu: true', () => {
|
||||
mockUseIsShortcutEnabled.mockReturnValue(false)
|
||||
renderHook(() =>
|
||||
useShortcut(SHORTCUT_IDS.COMMAND_MENU_OPEN, vi.fn(), { registerInCommandMenu: true })
|
||||
)
|
||||
expect(getLastRegisterCall()[2].enabled).toBe(false)
|
||||
})
|
||||
|
||||
it('is disabled when caller passes enabled: false, even with registerInCommandMenu: true', () => {
|
||||
renderHook(() =>
|
||||
useShortcut(SHORTCUT_IDS.COMMAND_MENU_OPEN, vi.fn(), {
|
||||
enabled: false,
|
||||
registerInCommandMenu: true,
|
||||
})
|
||||
)
|
||||
expect(getLastRegisterCall()[2].enabled).toBe(false)
|
||||
})
|
||||
|
||||
it('registers the command with id and label from the registry', () => {
|
||||
renderHook(() =>
|
||||
useShortcut(SHORTCUT_IDS.RESULTS_COPY_MARKDOWN, vi.fn(), { registerInCommandMenu: true })
|
||||
)
|
||||
const [, commands] = getLastRegisterCall()
|
||||
expect(commands).toHaveLength(1)
|
||||
expect(commands[0].id).toBe(SHORTCUT_IDS.RESULTS_COPY_MARKDOWN)
|
||||
expect(commands[0].name).toBe(SHORTCUT_DEFINITIONS[SHORTCUT_IDS.RESULTS_COPY_MARKDOWN].label)
|
||||
})
|
||||
|
||||
it('command action calls the LATEST callback after a rerender (no stale closure)', () => {
|
||||
const cb1 = vi.fn()
|
||||
const cb2 = vi.fn()
|
||||
const { rerender } = renderHook(
|
||||
({ cb }: { cb: () => void }) =>
|
||||
useShortcut(SHORTCUT_IDS.COMMAND_MENU_OPEN, cb, { registerInCommandMenu: true }),
|
||||
{ initialProps: { cb: cb1 } }
|
||||
)
|
||||
|
||||
// Capture the action from the first render and fire it after a rerender —
|
||||
// it should call the NEW callback, proving we dodge the stale closure.
|
||||
const firstAction = mockUseRegisterCommands.mock.calls[0][1][0].action
|
||||
|
||||
rerender({ cb: cb2 })
|
||||
|
||||
firstAction()
|
||||
expect(cb1).not.toHaveBeenCalled()
|
||||
expect(cb2).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
|
||||
it('command action identity is stable across renders', () => {
|
||||
const { rerender } = renderHook(
|
||||
({ cb }: { cb: () => void }) =>
|
||||
useShortcut(SHORTCUT_IDS.COMMAND_MENU_OPEN, cb, { registerInCommandMenu: true }),
|
||||
{ initialProps: { cb: vi.fn() } }
|
||||
)
|
||||
const firstAction = mockUseRegisterCommands.mock.calls[0][1][0].action
|
||||
|
||||
rerender({ cb: vi.fn() })
|
||||
const secondAction = mockUseRegisterCommands.mock.calls.at(-1)![1][0].action
|
||||
|
||||
expect(firstAction).toBe(secondAction)
|
||||
})
|
||||
|
||||
it('deps track enabled + label so downstream can invalidate correctly', () => {
|
||||
renderHook(() =>
|
||||
useShortcut(SHORTCUT_IDS.COMMAND_MENU_OPEN, vi.fn(), { registerInCommandMenu: true })
|
||||
)
|
||||
const [, , options] = getLastRegisterCall()
|
||||
expect(options.deps).toEqual([
|
||||
true,
|
||||
SHORTCUT_DEFINITIONS[SHORTCUT_IDS.COMMAND_MENU_OPEN].label,
|
||||
])
|
||||
})
|
||||
|
||||
describe('badge rendering', () => {
|
||||
it('renders a single KeyboardShortcut pill for single-step sequences (no "then")', () => {
|
||||
renderHook(() =>
|
||||
useShortcut(SHORTCUT_IDS.COMMAND_MENU_OPEN, vi.fn(), { registerInCommandMenu: true })
|
||||
)
|
||||
const badgeNode = getLastRegisterCall()[1][0].badge()
|
||||
const { container } = render(badgeNode)
|
||||
expect(container.textContent).not.toContain('then')
|
||||
})
|
||||
|
||||
it('renders a "then" separator between steps for multi-step sequences', () => {
|
||||
renderHook(() =>
|
||||
useShortcut(SHORTCUT_IDS.NAV_HOME, vi.fn(), { registerInCommandMenu: true })
|
||||
)
|
||||
const badgeNode = getLastRegisterCall()[1][0].badge()
|
||||
const { container } = render(badgeNode)
|
||||
expect(container.textContent).toContain('then')
|
||||
})
|
||||
|
||||
it('renders the converted keys (Mod → ⌘ or Ctrl via KeyboardShortcut)', () => {
|
||||
renderHook(() =>
|
||||
useShortcut(SHORTCUT_IDS.RESULTS_COPY_MARKDOWN, vi.fn(), {
|
||||
registerInCommandMenu: true,
|
||||
})
|
||||
)
|
||||
const badgeNode = getLastRegisterCall()[1][0].badge()
|
||||
const { container } = render(badgeNode)
|
||||
// Mod+Shift+M → the "M" key is always rendered as-is; the platform-specific
|
||||
// ⌘/Ctrl handling lives in KeyboardShortcut and is asserted there.
|
||||
expect(container.textContent).toContain('M')
|
||||
expect(container.textContent).toContain('⇧')
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -60,7 +60,16 @@ export function useShortcut(id: ShortcutId, callback: () => void, options?: Shor
|
||||
const timeout = options?.timeout ?? def.options?.timeout ?? undefined
|
||||
const ignoreInputs = options?.ignoreInputs ?? def.options?.ignoreInputs
|
||||
|
||||
useHotkeySequence(def.sequence, callback, { enabled, timeout, ignoreInputs })
|
||||
// Only include `ignoreInputs` when set. The library resolves it to a concrete
|
||||
// boolean at register time (false for Meta/Ctrl/Escape, true otherwise), but
|
||||
// its setOptions does an object spread on every re-render — passing
|
||||
// `ignoreInputs: undefined` would overwrite the resolved value and re-enable
|
||||
// the input-focus guard for shortcuts that should always fire.
|
||||
useHotkeySequence(def.sequence, callback, {
|
||||
enabled,
|
||||
timeout,
|
||||
...(ignoreInputs !== undefined && { ignoreInputs }),
|
||||
})
|
||||
|
||||
// Handle overrides for command menu
|
||||
const enabledInCommandMenu = enabled && (options?.registerInCommandMenu ?? false)
|
||||
|
||||
@@ -0,0 +1,254 @@
|
||||
import { fireEvent, screen, waitFor } from '@testing-library/react'
|
||||
import userEvent from '@testing-library/user-event'
|
||||
import { toast } from 'sonner'
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
|
||||
import { InviteMemberButton } from '@/components/interfaces/Organization/TeamSettings/InviteMemberButton'
|
||||
import { customRender } from '@/tests/lib/custom-render'
|
||||
|
||||
vi.mock('sonner', () => ({
|
||||
toast: { success: vi.fn(), error: vi.fn() },
|
||||
}))
|
||||
|
||||
vi.mock('common', async (importOriginal) => {
|
||||
const actual = (await importOriginal()) as typeof import('common')
|
||||
return { ...actual, useParams: () => ({ slug: 'test-org' }) }
|
||||
})
|
||||
|
||||
vi.mock('@/lib/profile', () => ({
|
||||
useProfile: () => ({ profile: { id: 1, gotrue_id: 'user-1' } }),
|
||||
}))
|
||||
|
||||
vi.mock('@/hooks/misc/useSelectedOrganization', () => ({
|
||||
useSelectedOrganizationQuery: () => ({
|
||||
data: { id: 1, slug: 'test-org', name: 'Test Org' },
|
||||
}),
|
||||
}))
|
||||
|
||||
vi.mock('@/hooks/misc/useCheckPermissions', () => ({
|
||||
useGetPermissions: () => ({ permissions: [], organizationSlug: 'test-org' }),
|
||||
doPermissionsCheck: () => true,
|
||||
useAsyncCheckPermissions: () => ({ can: true, isSuccess: true }),
|
||||
}))
|
||||
|
||||
vi.mock('@/hooks/misc/useIsFeatureEnabled', () => ({
|
||||
useIsFeatureEnabled: () => ({ organizationMembersCreate: true }),
|
||||
}))
|
||||
|
||||
vi.mock('@/data/organizations/organization-members-query', () => ({
|
||||
useOrganizationMembersQuery: () => ({
|
||||
data: [
|
||||
{
|
||||
gotrue_id: 'user-1',
|
||||
primary_email: 'me@example.com',
|
||||
role_ids: [1],
|
||||
},
|
||||
{
|
||||
gotrue_id: 'existing-user',
|
||||
primary_email: 'existing@example.com',
|
||||
role_ids: [1],
|
||||
},
|
||||
],
|
||||
}),
|
||||
}))
|
||||
|
||||
const mockRoles = {
|
||||
org_scoped_roles: [{ id: 1, name: 'Developer', description: null }],
|
||||
}
|
||||
vi.mock('@/data/organization-members/organization-roles-query', () => ({
|
||||
useOrganizationRolesV2Query: () => ({ data: mockRoles, isSuccess: true }),
|
||||
}))
|
||||
|
||||
vi.mock('@/data/sso/sso-config-query', () => ({
|
||||
useOrgSSOConfigQuery: () => ({ data: null }),
|
||||
}))
|
||||
|
||||
vi.mock('@/data/subscriptions/org-subscription-query', () => ({
|
||||
useHasAccessToProjectLevelPermissions: () => false,
|
||||
}))
|
||||
|
||||
vi.mock('@/hooks/misc/useCheckEntitlements', () => ({
|
||||
useCheckEntitlements: () => ({ hasAccess: false }),
|
||||
}))
|
||||
|
||||
vi.mock('@/components/interfaces/Organization/TeamSettings/TeamSettings.utils', () => ({
|
||||
useGetRolesManagementPermissions: () => ({ rolesAddable: [1], rolesRemovable: [1] }),
|
||||
}))
|
||||
|
||||
const mockInvite = vi.fn().mockResolvedValue({ succeeded: [], failed: [] })
|
||||
vi.mock('@/data/organization-members/organization-invitation-create-mutation', () => ({
|
||||
useOrganizationCreateInvitationMutation: () => ({
|
||||
mutateAsync: mockInvite,
|
||||
isPending: false,
|
||||
}),
|
||||
}))
|
||||
|
||||
vi.mock('@/hooks/ui/useConfirmOnClose', () => ({
|
||||
useConfirmOnClose: ({ onClose }: { checkIsDirty: () => boolean; onClose: () => void }) => ({
|
||||
confirmOnClose: onClose,
|
||||
handleOpenChange: (open: boolean) => {
|
||||
if (!open) onClose()
|
||||
},
|
||||
modalProps: { visible: false, onClose, onCancel: vi.fn() },
|
||||
}),
|
||||
}))
|
||||
|
||||
// Helpers
|
||||
async function openDialog() {
|
||||
await userEvent.click(screen.getByRole('button', { name: /invite members/i }))
|
||||
return screen.findByRole('dialog')
|
||||
}
|
||||
|
||||
async function submitForm(emailValue: string) {
|
||||
await openDialog()
|
||||
fireEvent.change(screen.getByPlaceholderText(/name@example\.com/i), {
|
||||
target: { value: emailValue },
|
||||
})
|
||||
fireEvent.click(screen.getByRole('button', { name: /send invitation/i }))
|
||||
}
|
||||
|
||||
// Tests
|
||||
describe('InviteMemberButton', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks()
|
||||
mockInvite.mockResolvedValue({ succeeded: [], failed: [] })
|
||||
})
|
||||
|
||||
it('renders an enabled Invite members button', () => {
|
||||
customRender(<InviteMemberButton />)
|
||||
expect(screen.getByRole('button', { name: /invite members/i })).toBeEnabled()
|
||||
})
|
||||
|
||||
it('opens the invite dialog when the button is clicked', async () => {
|
||||
customRender(<InviteMemberButton />)
|
||||
await openDialog()
|
||||
expect(screen.getByRole('dialog')).toBeInTheDocument()
|
||||
expect(screen.getByText('Invite team members')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('calls the mutation with a single email in an array', async () => {
|
||||
customRender(<InviteMemberButton />)
|
||||
await submitForm('new@example.com')
|
||||
|
||||
await waitFor(() => {
|
||||
expect(mockInvite).toHaveBeenCalledWith(
|
||||
expect.objectContaining({ emails: ['new@example.com'] })
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
it('calls the mutation with multiple emails parsed from a comma-separated input', async () => {
|
||||
customRender(<InviteMemberButton />)
|
||||
await submitForm('alice@example.com, bob@example.com, carol@example.com')
|
||||
|
||||
await waitFor(() => {
|
||||
expect(mockInvite).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
emails: ['alice@example.com', 'bob@example.com', 'carol@example.com'],
|
||||
})
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
it('lowercases emails before sending', async () => {
|
||||
customRender(<InviteMemberButton />)
|
||||
await submitForm('User@Example.COM')
|
||||
|
||||
await waitFor(() => {
|
||||
expect(mockInvite).toHaveBeenCalledWith(
|
||||
expect.objectContaining({ emails: ['user@example.com'] })
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
it('shows a validation error for an invalid email', async () => {
|
||||
customRender(<InviteMemberButton />)
|
||||
await openDialog()
|
||||
fireEvent.change(screen.getByPlaceholderText(/name@example\.com/i), {
|
||||
target: { value: 'not-an-email' },
|
||||
})
|
||||
fireEvent.click(screen.getByRole('button', { name: /send invitation/i }))
|
||||
|
||||
expect(await screen.findByText(/invalid email address: "not-an-email"/i)).toBeInTheDocument()
|
||||
expect(mockInvite).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('shows an error toast and skips the mutation for an already-existing member', async () => {
|
||||
customRender(<InviteMemberButton />)
|
||||
await submitForm('existing@example.com')
|
||||
|
||||
await waitFor(() => {
|
||||
expect(toast.error).toHaveBeenCalledWith(
|
||||
'existing@example.com is already in this organization'
|
||||
)
|
||||
})
|
||||
expect(mockInvite).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('still invites new emails in a batch that also contains an existing member', async () => {
|
||||
customRender(<InviteMemberButton />)
|
||||
await submitForm('new@example.com, existing@example.com')
|
||||
|
||||
await waitFor(() => {
|
||||
expect(toast.error).toHaveBeenCalled()
|
||||
expect(mockInvite).toHaveBeenCalledWith(
|
||||
expect.objectContaining({ emails: ['new@example.com'] })
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
it('shows a success toast for a single email in succeeded', async () => {
|
||||
mockInvite.mockResolvedValueOnce({ succeeded: ['new@example.com'], failed: [] })
|
||||
customRender(<InviteMemberButton />)
|
||||
await submitForm('new@example.com')
|
||||
|
||||
await waitFor(() => {
|
||||
expect(toast.success).toHaveBeenCalledWith('Successfully sent invitation to new member')
|
||||
})
|
||||
})
|
||||
|
||||
it('shows a plural success toast when multiple emails succeeded', async () => {
|
||||
mockInvite.mockResolvedValueOnce({
|
||||
succeeded: ['alice@example.com', 'bob@example.com'],
|
||||
failed: [],
|
||||
})
|
||||
customRender(<InviteMemberButton />)
|
||||
await submitForm('alice@example.com, bob@example.com')
|
||||
|
||||
await waitFor(() => {
|
||||
expect(toast.success).toHaveBeenCalledWith('Successfully sent invitations to 2 new members')
|
||||
})
|
||||
})
|
||||
|
||||
it('shows an error toast with the server error for each failed email', async () => {
|
||||
mockInvite.mockResolvedValueOnce({
|
||||
succeeded: [],
|
||||
failed: [{ email: 'new@example.com', error: 'Domain not allowed' }],
|
||||
})
|
||||
customRender(<InviteMemberButton />)
|
||||
await submitForm('new@example.com')
|
||||
|
||||
await waitFor(() => {
|
||||
expect(toast.error).toHaveBeenCalledWith(
|
||||
'Failed to invite new@example.com: Domain not allowed'
|
||||
)
|
||||
})
|
||||
expect(toast.success).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('shows both success and error toasts for a partial batch result', async () => {
|
||||
mockInvite.mockResolvedValueOnce({
|
||||
succeeded: ['alice@example.com'],
|
||||
failed: [{ email: 'bob@example.com', error: 'Domain not allowed' }],
|
||||
})
|
||||
customRender(<InviteMemberButton />)
|
||||
await submitForm('alice@example.com, bob@example.com')
|
||||
|
||||
await waitFor(() => {
|
||||
expect(toast.success).toHaveBeenCalledWith('Successfully sent invitation to new member')
|
||||
expect(toast.error).toHaveBeenCalledWith(
|
||||
'Failed to invite bob@example.com: Domain not allowed'
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
+261
@@ -0,0 +1,261 @@
|
||||
import { describe, expect, test } from 'vitest'
|
||||
|
||||
import {
|
||||
buildProjectPayload,
|
||||
buildSsoPayload,
|
||||
categorizeInviteEmails,
|
||||
emailSchema,
|
||||
MAX_BATCH_INVITE_SIZE,
|
||||
parseEmails,
|
||||
} from '@/components/interfaces/Organization/TeamSettings/InviteMemberButton.utils'
|
||||
import type { OrganizationMember } from '@/data/organizations/organization-members-query'
|
||||
|
||||
describe('parseEmails', () => {
|
||||
test('parses a single email', () => {
|
||||
expect(parseEmails('user@example.com')).toStrictEqual(['user@example.com'])
|
||||
})
|
||||
|
||||
test('parses multiple comma-separated emails', () => {
|
||||
expect(parseEmails('a@example.com,b@example.com,c@example.com')).toStrictEqual([
|
||||
'a@example.com',
|
||||
'b@example.com',
|
||||
'c@example.com',
|
||||
])
|
||||
})
|
||||
|
||||
test('trims whitespace around each email', () => {
|
||||
expect(parseEmails(' a@example.com , b@example.com ')).toStrictEqual([
|
||||
'a@example.com',
|
||||
'b@example.com',
|
||||
])
|
||||
})
|
||||
|
||||
test('filters out empty entries from trailing, leading, or double commas', () => {
|
||||
expect(parseEmails(',a@example.com,,b@example.com,')).toStrictEqual([
|
||||
'a@example.com',
|
||||
'b@example.com',
|
||||
])
|
||||
})
|
||||
|
||||
test('removes duplicate email addresses', () => {
|
||||
expect(parseEmails('a@example.com,a@example.com')).toStrictEqual(['a@example.com'])
|
||||
})
|
||||
|
||||
test('returns an empty array for an empty string', () => {
|
||||
expect(parseEmails('')).toStrictEqual([])
|
||||
})
|
||||
|
||||
test('returns an empty array for a whitespace-only string', () => {
|
||||
expect(parseEmails(' ')).toStrictEqual([])
|
||||
})
|
||||
|
||||
test('returns an empty array for commas only', () => {
|
||||
expect(parseEmails(',,,,')).toStrictEqual([])
|
||||
})
|
||||
|
||||
test('parses space-separated emails', () => {
|
||||
expect(parseEmails('a@example.com b@example.com')).toStrictEqual([
|
||||
'a@example.com',
|
||||
'b@example.com',
|
||||
])
|
||||
})
|
||||
|
||||
test('parses line breaks and mixed comma or space separators', () => {
|
||||
expect(parseEmails('a@example.com\nb@example.com, c@example.com')).toStrictEqual([
|
||||
'a@example.com',
|
||||
'b@example.com',
|
||||
'c@example.com',
|
||||
])
|
||||
})
|
||||
})
|
||||
|
||||
function makeMember(overrides: Partial<OrganizationMember> = {}): OrganizationMember {
|
||||
return {
|
||||
gotrue_id: 'gotrue-1',
|
||||
primary_email: 'member@example.com',
|
||||
role_ids: [1],
|
||||
username: 'member',
|
||||
...overrides,
|
||||
} as OrganizationMember
|
||||
}
|
||||
|
||||
describe('categorizeInviteEmails', () => {
|
||||
test('places a new email in toInvite when no members exist', () => {
|
||||
expect(categorizeInviteEmails(['new@example.com'], [])).toStrictEqual({
|
||||
alreadyInvited: [],
|
||||
alreadyMembers: [],
|
||||
toInvite: ['new@example.com'],
|
||||
})
|
||||
})
|
||||
|
||||
test('places an email in alreadyMembers when that member exists without an invited_id', () => {
|
||||
const members = [makeMember({ primary_email: 'existing@example.com' })]
|
||||
expect(categorizeInviteEmails(['existing@example.com'], members)).toStrictEqual({
|
||||
alreadyInvited: [],
|
||||
alreadyMembers: ['existing@example.com'],
|
||||
toInvite: [],
|
||||
})
|
||||
})
|
||||
|
||||
test('places an email in alreadyInvited when that member has an invited_id', () => {
|
||||
const members = [makeMember({ primary_email: 'invited@example.com', invited_id: 42 })]
|
||||
expect(categorizeInviteEmails(['invited@example.com'], members)).toStrictEqual({
|
||||
alreadyInvited: ['invited@example.com'],
|
||||
alreadyMembers: [],
|
||||
toInvite: [],
|
||||
})
|
||||
})
|
||||
|
||||
test('correctly categorizes a mixed batch', () => {
|
||||
const members = [
|
||||
makeMember({ primary_email: 'member@example.com' }),
|
||||
makeMember({ primary_email: 'invited@example.com', invited_id: 7 }),
|
||||
]
|
||||
expect(
|
||||
categorizeInviteEmails(
|
||||
['new@example.com', 'member@example.com', 'invited@example.com'],
|
||||
members
|
||||
)
|
||||
).toStrictEqual({
|
||||
alreadyInvited: ['invited@example.com'],
|
||||
alreadyMembers: ['member@example.com'],
|
||||
toInvite: ['new@example.com'],
|
||||
})
|
||||
})
|
||||
|
||||
test('places all emails in toInvite when none match existing members', () => {
|
||||
const members = [makeMember({ primary_email: 'other@example.com' })]
|
||||
expect(
|
||||
categorizeInviteEmails(['a@example.com', 'b@example.com', 'c@example.com'], members)
|
||||
).toStrictEqual({
|
||||
alreadyInvited: [],
|
||||
alreadyMembers: [],
|
||||
toInvite: ['a@example.com', 'b@example.com', 'c@example.com'],
|
||||
})
|
||||
})
|
||||
|
||||
test('returns all-empty for an empty email list', () => {
|
||||
expect(categorizeInviteEmails([], [makeMember()])).toStrictEqual({
|
||||
alreadyInvited: [],
|
||||
alreadyMembers: [],
|
||||
toInvite: [],
|
||||
})
|
||||
})
|
||||
|
||||
test('uses strict equality — does not match different casing', () => {
|
||||
// The component lowercases emails before calling this function,
|
||||
// so 'member@example.com' must NOT match 'Member@Example.com'
|
||||
const members = [makeMember({ primary_email: 'Member@Example.com' })]
|
||||
const result = categorizeInviteEmails(['member@example.com'], members)
|
||||
expect(result.toInvite).toStrictEqual(['member@example.com'])
|
||||
expect(result.alreadyMembers).toStrictEqual([])
|
||||
})
|
||||
})
|
||||
|
||||
describe('buildProjectPayload', () => {
|
||||
test('returns empty object when applyToOrg is true', () => {
|
||||
expect(buildProjectPayload(true, 'ref_abc')).toStrictEqual({})
|
||||
})
|
||||
|
||||
test('throws an error when applyToOrg is false but projectRef is empty', () => {
|
||||
expect(() => buildProjectPayload(false, '')).toThrowError(
|
||||
'projectRef is required when applyToOrg is false'
|
||||
)
|
||||
})
|
||||
|
||||
test('returns projects array when applyToOrg is false and projectRef is set', () => {
|
||||
expect(buildProjectPayload(false, 'ref_abc')).toStrictEqual({ projects: ['ref_abc'] })
|
||||
})
|
||||
|
||||
test('wraps the projectRef in a single-element array', () => {
|
||||
expect(buildProjectPayload(false, 'my-project-ref')).toStrictEqual({
|
||||
projects: ['my-project-ref'],
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('buildSsoPayload', () => {
|
||||
test('returns empty object for "auto"', () => {
|
||||
expect(buildSsoPayload('auto')).toStrictEqual({})
|
||||
})
|
||||
|
||||
test('returns { requireSso: true } for "sso"', () => {
|
||||
expect(buildSsoPayload('sso')).toStrictEqual({ requireSso: true })
|
||||
})
|
||||
|
||||
test('returns { requireSso: false } for "non-sso"', () => {
|
||||
expect(buildSsoPayload('non-sso')).toStrictEqual({ requireSso: false })
|
||||
})
|
||||
})
|
||||
|
||||
function makeEmailList(count: number): string {
|
||||
return Array.from({ length: count }, (_, i) => `user${i + 1}@example.com`).join(', ')
|
||||
}
|
||||
|
||||
function makeEmailListSpaceSeparated(count: number): string {
|
||||
return Array.from({ length: count }, (_, i) => `user${i + 1}@example.com`).join(' ')
|
||||
}
|
||||
|
||||
describe('emailSchema', () => {
|
||||
test('accepts a single valid email', () => {
|
||||
expect(emailSchema.safeParse('user@example.com').success).toBe(true)
|
||||
})
|
||||
|
||||
test('accepts exactly 50 emails', () => {
|
||||
expect(emailSchema.safeParse(makeEmailList(MAX_BATCH_INVITE_SIZE)).success).toBe(true)
|
||||
})
|
||||
|
||||
test('rejects 51 emails — singular "address" when exactly 1 needs removing', () => {
|
||||
const result = emailSchema.safeParse(makeEmailList(51))
|
||||
expect(result.success).toBe(false)
|
||||
if (!result.success) {
|
||||
expect(result.error.issues[0].message).toBe(
|
||||
'You can invite up to 50 members at a time. Remove 1 email address to continue.'
|
||||
)
|
||||
}
|
||||
})
|
||||
|
||||
test('rejects 51 space-separated emails (same as comma-separated batch limit)', () => {
|
||||
const result = emailSchema.safeParse(makeEmailListSpaceSeparated(51))
|
||||
expect(result.success).toBe(false)
|
||||
if (!result.success) {
|
||||
expect(result.error.issues[0].message).toBe(
|
||||
'You can invite up to 50 members at a time. Remove 1 email address to continue.'
|
||||
)
|
||||
}
|
||||
})
|
||||
|
||||
test('rejects 99 emails — plural "addresses" when more than 1 needs removing', () => {
|
||||
const result = emailSchema.safeParse(makeEmailList(99))
|
||||
expect(result.success).toBe(false)
|
||||
if (!result.success) {
|
||||
expect(result.error.issues[0].message).toBe(
|
||||
'You can invite up to 50 members at a time. Remove 49 email addresses to continue.'
|
||||
)
|
||||
}
|
||||
})
|
||||
|
||||
test('rejects an empty string', () => {
|
||||
const result = emailSchema.safeParse('')
|
||||
expect(result.success).toBe(false)
|
||||
})
|
||||
|
||||
test('rejects an invalid email address and names it', () => {
|
||||
const result = emailSchema.safeParse('notanemail')
|
||||
expect(result.success).toBe(false)
|
||||
if (!result.success) {
|
||||
expect(result.error.issues[0].message).toBe('Invalid email address: "notanemail"')
|
||||
}
|
||||
})
|
||||
|
||||
test('truncates a very long invalid token in the error message', () => {
|
||||
const longToken = `${'x'.repeat(130)}@`
|
||||
const result = emailSchema.safeParse(longToken)
|
||||
expect(result.success).toBe(false)
|
||||
if (!result.success) {
|
||||
expect(result.error.issues[0].message.startsWith('Invalid email address: "')).toBe(true)
|
||||
expect(result.error.issues[0].message.endsWith('…"')).toBe(true)
|
||||
expect(result.error.issues[0].message.length).toBeLessThan(longToken.length + 50)
|
||||
}
|
||||
})
|
||||
})
|
||||
@@ -1,7 +1,12 @@
|
||||
import type { GoPageInput } from 'marketing'
|
||||
import Image from 'next/image'
|
||||
import Link from 'next/link'
|
||||
import { Button } from 'ui'
|
||||
|
||||
import authors from '@/lib/authors.json'
|
||||
|
||||
const speaker = authors.find((a) => a.author_id === 'pedro_rodrigues')
|
||||
|
||||
const page: GoPageInput = {
|
||||
template: 'lead-gen',
|
||||
slug: 'accenture-reinvention-2026/contest',
|
||||
@@ -31,6 +36,62 @@ const page: GoPageInput = {
|
||||
],
|
||||
},
|
||||
sections: [
|
||||
{
|
||||
type: 'single-column',
|
||||
title: 'What AI-Native Companies Figured Out About Infrastructure',
|
||||
children: (
|
||||
<div className="flex flex-col items-center gap-8">
|
||||
{speaker && (
|
||||
<div className="flex flex-col items-center gap-4">
|
||||
{speaker.author_image_url && (
|
||||
<Image
|
||||
src={speaker.author_image_url}
|
||||
alt={speaker.author}
|
||||
width={192}
|
||||
height={192}
|
||||
className="rounded-full object-cover aspect-square w-48 h-48"
|
||||
/>
|
||||
)}
|
||||
<div className="flex flex-col items-center gap-0">
|
||||
<p className="text-foreground-light font-medium text-center">
|
||||
{speaker.author}
|
||||
{speaker.position && `, ${speaker.position}`}
|
||||
</p>
|
||||
<p className="text-foreground-lighter text-sm text-center">Supabase</p>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
<p className="text-foreground-light text-lg text-center">
|
||||
Enterprise AI initiatives stall not because of the models, but because of the
|
||||
infrastructure underneath. While enterprises spend months provisioning backends for each
|
||||
AI project, AI native companies do it in seconds for millions of users. This session
|
||||
examines the infrastructure pattern that makes this possible and shows how enterprises
|
||||
can adopt it to accelerate AI initiatives, enable agentic workflows safely, and build AI
|
||||
native products for their teams and customers.
|
||||
</p>
|
||||
<div className="flex flex-wrap items-center justify-center gap-3">
|
||||
<Button asChild type="primary" size="medium">
|
||||
<Link
|
||||
href="https://supabase.com/docs/guides/getting-started/ai-skills"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Learn about Supabase AI Tools
|
||||
</Link>
|
||||
</Button>
|
||||
<Button asChild type="default" size="medium">
|
||||
<Link
|
||||
href="https://supabase.link/accenture-reinvention-2026-slides"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Download Slides
|
||||
</Link>
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
type: 'single-column',
|
||||
id: 'how-to-enter',
|
||||
|
||||
@@ -84,15 +84,22 @@ const page: GoPageInput = {
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
<Button asChild type="default" size="medium">
|
||||
<Link
|
||||
href="https://supabase.link/postgresconf-sjc-2026-slides"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Download slides
|
||||
</Link>
|
||||
</Button>
|
||||
<div className="flex flex-wrap items-center justify-center gap-3">
|
||||
<Button asChild type="primary" size="medium">
|
||||
<Link href="https://www.multigres.com" target="_blank" rel="noopener noreferrer">
|
||||
Learn about Multigres
|
||||
</Link>
|
||||
</Button>
|
||||
<Button asChild type="default" size="medium">
|
||||
<Link
|
||||
href="https://supabase.link/postgresconf-sjc-2026-slides"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Download slides
|
||||
</Link>
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
|
||||
@@ -11,6 +11,9 @@ export const metadata: Metadata = SHOW_RESULTS
|
||||
title: 'State of Startups 2026 | Supabase',
|
||||
description:
|
||||
'The latest trends among builders in tech stacks, AI usage, problem domains, and more.',
|
||||
alternates: {
|
||||
canonical: 'https://supabase.com/state-of-startups',
|
||||
},
|
||||
openGraph: {
|
||||
title: 'State of Startups 2026 | Supabase',
|
||||
description:
|
||||
@@ -26,6 +29,14 @@ export const metadata: Metadata = SHOW_RESULTS
|
||||
: {
|
||||
title: 'State of Startups 2026 — Survey | Supabase',
|
||||
description: 'Be the first to access the State of Startups 2026 report.',
|
||||
alternates: {
|
||||
canonical: 'https://supabase.com/state-of-startups',
|
||||
},
|
||||
openGraph: {
|
||||
title: 'State of Startups 2026 — Survey | Supabase',
|
||||
description: 'Be the first to access the State of Startups 2026 report.',
|
||||
url: 'https://supabase.com/state-of-startups',
|
||||
},
|
||||
}
|
||||
|
||||
export default function StateOfStartupsPage() {
|
||||
|
||||
@@ -134,6 +134,12 @@ export function RegisterContent() {
|
||||
<SurveySectionBreak />
|
||||
</section>
|
||||
|
||||
<section className="px-4 py-16 md:px-8 md:py-32">
|
||||
<div className="max-w-[60rem] mx-auto">
|
||||
<PreviousResultsCta />
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<Footer />
|
||||
</main>
|
||||
)
|
||||
@@ -173,3 +179,38 @@ function ShirtImage() {
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function PreviousResultsCta() {
|
||||
return (
|
||||
<Link
|
||||
href="/state-of-startups-2025"
|
||||
className="group grid gap-8 transition-colors md:grid-cols-[auto_1fr_auto] md:items-end md:gap-12"
|
||||
>
|
||||
<div className="flex w-fit flex-col gap-2" aria-hidden="true">
|
||||
<div className="w-fit bg-brand-300 px-5 py-3 text-[1.75rem] leading-8 tracking-tight text-brand md:text-[2.25rem] md:leading-10">
|
||||
State
|
||||
</div>
|
||||
<div className="w-fit bg-brand-300 px-5 py-3 text-[1.75rem] leading-8 tracking-tight text-brand md:text-[2.25rem] md:leading-10">
|
||||
of
|
||||
</div>
|
||||
<div className="w-fit bg-brand px-5 py-3 text-[1.75rem] leading-8 tracking-tight text-background dark:text-brand-200 md:text-[2.25rem] md:leading-10">
|
||||
Startups
|
||||
</div>
|
||||
<div className="w-fit bg-brand-500 px-5 py-3 text-[1.75rem] leading-8 tracking-tight text-brand-300 md:text-[2.25rem] md:leading-10">
|
||||
2025
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col gap-2 self-end">
|
||||
<p className="font-mono text-xs uppercase tracking-[0.18em] text-foreground-light">
|
||||
Previous Report
|
||||
</p>
|
||||
<p className="text-2xl tracking-tight text-foreground">See last year's report.</p>
|
||||
</div>
|
||||
|
||||
<div className="flex items-center self-end text-foreground-light transition-transform duration-200 group-hover:translate-x-1 group-hover:text-foreground md:justify-self-end">
|
||||
<ArrowRight size={18} />
|
||||
</div>
|
||||
</Link>
|
||||
)
|
||||
}
|
||||
@@ -174,10 +174,11 @@ function StateOfStartupsPage() {
|
||||
<NextSeo
|
||||
title={meta_title}
|
||||
description={meta_description}
|
||||
canonical="https://supabase.com/state-of-startups-2025"
|
||||
openGraph={{
|
||||
title: meta_title,
|
||||
description: meta_description,
|
||||
url: `https://supabase.com/state-of-startups`,
|
||||
url: `https://supabase.com/state-of-startups-2025`,
|
||||
images: [
|
||||
{
|
||||
url: `https://supabase.com/images/state-of-startups/state-of-startups-og.png`,
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
{
|
||||
"arrowParens": "always",
|
||||
"bracketSpacing": true,
|
||||
"bracketSameLine": false,
|
||||
"endOfLine": "lf",
|
||||
"jsxSingleQuote": false,
|
||||
"htmlWhitespaceSensitivity": "ignore",
|
||||
"printWidth": 100,
|
||||
"semi": false,
|
||||
"singleQuote": true,
|
||||
"tabWidth": 2,
|
||||
"trailingComma": "all",
|
||||
"useTabs": false
|
||||
}
|
||||
@@ -1,4 +1,3 @@
|
||||
import 'react-native-url-polyfill/auto'
|
||||
import { useState, useEffect } from 'react'
|
||||
import { supabase } from './lib/supabase'
|
||||
import Auth from './components/Auth'
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
import { useState, useEffect } from 'react'
|
||||
import { supabase } from '../lib/supabase'
|
||||
import { StyleSheet, View, Alert } from 'react-native'
|
||||
import { Button, Input } from '@rneui/themed'
|
||||
import { View, Alert, TextInput, Text, TouchableOpacity } from 'react-native'
|
||||
import Avatar from './Avatar'
|
||||
import { appStyles } from '../styles/styles'
|
||||
|
||||
export default function Account({ userId, email }: { userId: string; email?: string }) {
|
||||
const [loading, setLoading] = useState(true)
|
||||
const [username, setUsername] = useState('')
|
||||
const [website, setWebsite] = useState('')
|
||||
const [avatarUrl, setAvatarUrl] = useState('')
|
||||
const styles = appStyles
|
||||
|
||||
useEffect(() => {
|
||||
if (userId) getProfile()
|
||||
@@ -66,17 +67,15 @@ export default function Account({ userId, email }: { userId: string; email?: str
|
||||
if (error) {
|
||||
throw error
|
||||
}
|
||||
} catch (error) {
|
||||
if (error instanceof Error) {
|
||||
Alert.alert(error.message)
|
||||
}
|
||||
} catch (error: any) {
|
||||
Alert.alert(error.message)
|
||||
} finally {
|
||||
setLoading(false)
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<View>
|
||||
<View style={styles.container}>
|
||||
<View>
|
||||
<Avatar
|
||||
size={200}
|
||||
@@ -88,41 +87,46 @@ export default function Account({ userId, email }: { userId: string; email?: str
|
||||
/>
|
||||
</View>
|
||||
<View style={[styles.verticallySpaced, styles.mt20]}>
|
||||
<Input label="Email" value={email} disabled />
|
||||
<Text style={styles.label}>Email</Text>
|
||||
<TextInput
|
||||
value={email ?? ''}
|
||||
editable={false}
|
||||
selectTextOnFocus={false}
|
||||
style={[styles.input, styles.inputDisabled]}
|
||||
/>
|
||||
</View>
|
||||
<View style={styles.verticallySpaced}>
|
||||
<Input label="Username" value={username || ''} onChangeText={(text) => setUsername(text)} />
|
||||
<Text style={styles.label}>Username</Text>
|
||||
<TextInput
|
||||
value={username || ''}
|
||||
onChangeText={(text) => setUsername(text)}
|
||||
style={styles.input}
|
||||
/>
|
||||
</View>
|
||||
<View style={styles.verticallySpaced}>
|
||||
<Input label="Website" value={website || ''} onChangeText={(text) => setWebsite(text)} />
|
||||
</View>
|
||||
|
||||
<View style={[styles.verticallySpaced, styles.mt20]}>
|
||||
<Button
|
||||
title={loading ? 'Loading ...' : 'Update'}
|
||||
onPress={() => updateProfile({ username, website, avatar_url: avatarUrl })}
|
||||
disabled={loading}
|
||||
<Text style={styles.label}>Website</Text>
|
||||
<TextInput
|
||||
value={website || ''}
|
||||
onChangeText={(text) => setWebsite(text)}
|
||||
style={styles.input}
|
||||
/>
|
||||
</View>
|
||||
|
||||
<View style={[styles.verticallySpaced, styles.mt20]}>
|
||||
<TouchableOpacity
|
||||
style={[styles.button, loading && styles.buttonDisabled]}
|
||||
onPress={() => updateProfile({ username, website, avatar_url: avatarUrl })}
|
||||
disabled={loading}
|
||||
>
|
||||
<Text style={styles.buttonText}>{loading ? 'Loading ...' : 'Update'}</Text>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
|
||||
<View style={styles.verticallySpaced}>
|
||||
<Button title="Sign Out" onPress={() => supabase.auth.signOut()} />
|
||||
<TouchableOpacity style={styles.button} onPress={() => supabase.auth.signOut()}>
|
||||
<Text style={styles.buttonText}>Sign Out</Text>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
</View>
|
||||
)
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
marginTop: 40,
|
||||
padding: 12,
|
||||
},
|
||||
verticallySpaced: {
|
||||
paddingTop: 4,
|
||||
paddingBottom: 4,
|
||||
alignSelf: 'stretch',
|
||||
},
|
||||
mt20: {
|
||||
marginTop: 20,
|
||||
},
|
||||
})
|
||||
@@ -1,16 +1,16 @@
|
||||
import React, { useState } from 'react'
|
||||
import { Alert, StyleSheet, View } from 'react-native'
|
||||
import { Alert, Text, TextInput, TouchableOpacity, View } from 'react-native'
|
||||
import { supabase } from '../lib/supabase'
|
||||
import { Button, Input } from '@rneui/themed'
|
||||
import { appStyles } from '../styles/styles'
|
||||
|
||||
export default function Auth() {
|
||||
const [email, setEmail] = useState('')
|
||||
const [password, setPassword] = useState('')
|
||||
const [loading, setLoading] = useState(false)
|
||||
const styles = appStyles
|
||||
|
||||
async function signInWithEmail() {
|
||||
setLoading(true)
|
||||
console.log({ email, password })
|
||||
const { error } = await supabase.auth.signInWithPassword({
|
||||
email: email,
|
||||
password: password,
|
||||
@@ -32,49 +32,46 @@ export default function Auth() {
|
||||
}
|
||||
|
||||
return (
|
||||
<View>
|
||||
<View style={styles.container}>
|
||||
<View style={[styles.verticallySpaced, styles.mt20]}>
|
||||
<Input
|
||||
label="Email"
|
||||
leftIcon={{ type: 'font-awesome', name: 'envelope' }}
|
||||
<Text style={styles.label}>Email</Text>
|
||||
<TextInput
|
||||
onChangeText={(text) => setEmail(text)}
|
||||
value={email}
|
||||
placeholder="email@address.com"
|
||||
autoCapitalize={'none'}
|
||||
autoCapitalize="none"
|
||||
style={styles.input}
|
||||
/>
|
||||
</View>
|
||||
<View style={styles.verticallySpaced}>
|
||||
<Input
|
||||
label="Password"
|
||||
leftIcon={{ type: 'font-awesome', name: 'lock' }}
|
||||
<Text style={styles.label}>Password</Text>
|
||||
<TextInput
|
||||
onChangeText={(text) => setPassword(text)}
|
||||
value={password}
|
||||
secureTextEntry={true}
|
||||
placeholder="Password"
|
||||
autoCapitalize={'none'}
|
||||
autoCapitalize="none"
|
||||
style={styles.input}
|
||||
/>
|
||||
</View>
|
||||
<View style={[styles.verticallySpaced, styles.mt20]}>
|
||||
<Button title="Sign in" disabled={loading} onPress={() => signInWithEmail()} />
|
||||
<TouchableOpacity
|
||||
style={[styles.button, loading && styles.buttonDisabled]}
|
||||
onPress={() => signInWithEmail()}
|
||||
disabled={loading}
|
||||
>
|
||||
<Text style={styles.buttonText}>Sign in</Text>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
<View style={styles.verticallySpaced}>
|
||||
<Button title="Sign up" disabled={loading} onPress={() => signUpWithEmail()} />
|
||||
<TouchableOpacity
|
||||
style={[styles.button, loading && styles.buttonDisabled]}
|
||||
onPress={() => signUpWithEmail()}
|
||||
disabled={loading}
|
||||
>
|
||||
<Text style={styles.buttonText}>Sign up</Text>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
</View>
|
||||
)
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
marginTop: 40,
|
||||
padding: 12,
|
||||
},
|
||||
verticallySpaced: {
|
||||
paddingTop: 4,
|
||||
paddingBottom: 4,
|
||||
alignSelf: 'stretch',
|
||||
},
|
||||
mt20: {
|
||||
marginTop: 20,
|
||||
},
|
||||
})
|
||||
@@ -1,7 +1,8 @@
|
||||
import { useState, useEffect } from 'react'
|
||||
import { supabase } from '../lib/supabase'
|
||||
import { StyleSheet, View, Alert, Image, Button } from 'react-native'
|
||||
import { View, Alert, Image, Text, TouchableOpacity } from 'react-native'
|
||||
import * as ImagePicker from 'expo-image-picker'
|
||||
import { appStyles } from '../styles/styles'
|
||||
|
||||
interface Props {
|
||||
size: number
|
||||
@@ -13,6 +14,7 @@ export default function Avatar({ url, size = 150, onUpload }: Props) {
|
||||
const [uploading, setUploading] = useState(false)
|
||||
const [avatarUrl, setAvatarUrl] = useState<string | null>(null)
|
||||
const avatarSize = { height: size, width: size }
|
||||
const styles = appStyles
|
||||
|
||||
useEffect(() => {
|
||||
if (url) downloadImage(url)
|
||||
@@ -31,10 +33,8 @@ export default function Avatar({ url, size = 150, onUpload }: Props) {
|
||||
fr.onload = () => {
|
||||
setAvatarUrl(fr.result as string)
|
||||
}
|
||||
} catch (error) {
|
||||
if (error instanceof Error) {
|
||||
console.log('Error downloading image: ', error.message)
|
||||
}
|
||||
} catch (error: any) {
|
||||
console.log('Error downloading image: ', error.message)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,36 +43,45 @@ export default function Avatar({ url, size = 150, onUpload }: Props) {
|
||||
setUploading(true)
|
||||
|
||||
const result = await ImagePicker.launchImageLibraryAsync({
|
||||
mediaTypes: ['images'],
|
||||
allowsEditing: true,
|
||||
mediaTypes: ImagePicker.MediaTypeOptions.Images, // Restrict to only images
|
||||
allowsMultipleSelection: false, // Can only select one image
|
||||
allowsEditing: true, // Allows the user to crop / rotate their photo before uploading it
|
||||
quality: 1,
|
||||
exif: false, // We don't want nor need that data.
|
||||
})
|
||||
|
||||
if (result.canceled || !result.assets || result.assets.length === 0) {
|
||||
console.log('User cancelled image picker.')
|
||||
return
|
||||
}
|
||||
|
||||
const image = result.assets[0]
|
||||
console.log('Got image', image)
|
||||
|
||||
if (!image.uri) {
|
||||
throw new Error('No image uri!')
|
||||
throw new Error('No image uri!') // Realistically, this should never happen, but just in case...
|
||||
}
|
||||
|
||||
const arraybuffer = await fetch(image.uri).then((res) => res.arrayBuffer())
|
||||
const fileExt = image.uri.split('.').pop()?.toLowerCase() ?? 'jpeg'
|
||||
const filePath = `${Math.random()}.${fileExt}`
|
||||
|
||||
const { error } = await supabase.storage.from('avatars').upload(filePath, arraybuffer, {
|
||||
contentType: image.mimeType ?? 'image/jpeg',
|
||||
})
|
||||
const fileExt = image.uri?.split('.').pop()?.toLowerCase() ?? 'jpeg'
|
||||
const path = `${Date.now()}.${fileExt}`
|
||||
const { data, error: uploadError } = await supabase.storage
|
||||
.from('avatars')
|
||||
.upload(path, arraybuffer, {
|
||||
contentType: image.mimeType ?? 'image/jpeg',
|
||||
})
|
||||
|
||||
if (error) {
|
||||
throw error
|
||||
if (uploadError) {
|
||||
throw uploadError
|
||||
}
|
||||
|
||||
onUpload(filePath)
|
||||
} catch (error) {
|
||||
if (error instanceof Error) {
|
||||
onUpload(data.path)
|
||||
} catch (error: any) {
|
||||
if (error) {
|
||||
Alert.alert(error.message)
|
||||
} else {
|
||||
throw error
|
||||
}
|
||||
} finally {
|
||||
setUploading(false)
|
||||
@@ -80,7 +89,7 @@ export default function Avatar({ url, size = 150, onUpload }: Props) {
|
||||
}
|
||||
|
||||
return (
|
||||
<View>
|
||||
<View style={styles.avatarContainer}>
|
||||
{avatarUrl ? (
|
||||
<Image
|
||||
source={{ uri: avatarUrl }}
|
||||
@@ -91,28 +100,14 @@ export default function Avatar({ url, size = 150, onUpload }: Props) {
|
||||
<View style={[avatarSize, styles.avatar, styles.noImage]} />
|
||||
)}
|
||||
<View>
|
||||
<Button
|
||||
title={uploading ? 'Uploading ...' : 'Upload'}
|
||||
<TouchableOpacity
|
||||
style={[styles.button, uploading && styles.buttonDisabled]}
|
||||
onPress={uploadAvatar}
|
||||
disabled={uploading}
|
||||
/>
|
||||
>
|
||||
<Text style={styles.buttonText}>{uploading ? 'Uploading ...' : 'Upload'}</Text>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
</View>
|
||||
)
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
avatar: {
|
||||
borderRadius: 5,
|
||||
overflow: 'hidden',
|
||||
maxWidth: '100%',
|
||||
},
|
||||
image: {
|
||||
objectFit: 'cover',
|
||||
paddingTop: 0,
|
||||
},
|
||||
noImage: {
|
||||
backgroundColor: '#333',
|
||||
borderRadius: 5,
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,70 @@
|
||||
import { StyleSheet } from 'react-native'
|
||||
|
||||
export const appStyles = StyleSheet.create({
|
||||
container: {
|
||||
marginTop: 40,
|
||||
padding: 12,
|
||||
},
|
||||
verticallySpaced: {
|
||||
paddingTop: 4,
|
||||
paddingBottom: 4,
|
||||
alignSelf: 'stretch',
|
||||
},
|
||||
mt20: {
|
||||
marginTop: 20,
|
||||
},
|
||||
label: {
|
||||
fontSize: 16,
|
||||
fontWeight: '600',
|
||||
color: '#86939e',
|
||||
marginBottom: 6,
|
||||
},
|
||||
input: {
|
||||
borderWidth: 1,
|
||||
borderColor: '#86939e',
|
||||
borderRadius: 4,
|
||||
padding: 12,
|
||||
fontSize: 16,
|
||||
},
|
||||
inputDisabled: {
|
||||
backgroundColor: '#f2f2f2',
|
||||
borderColor: '#d1d1d1',
|
||||
color: '#9e9e9e',
|
||||
},
|
||||
button: {
|
||||
backgroundColor: '#2089dc',
|
||||
borderRadius: 4,
|
||||
padding: 12,
|
||||
alignItems: 'center',
|
||||
},
|
||||
buttonDisabled: {
|
||||
opacity: 0.5,
|
||||
},
|
||||
buttonText: {
|
||||
color: '#fff',
|
||||
fontSize: 16,
|
||||
fontWeight: '600',
|
||||
},
|
||||
avatarContainer: {
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
marginTop: 20,
|
||||
},
|
||||
avatar: {
|
||||
borderRadius: 5,
|
||||
overflow: 'hidden',
|
||||
maxWidth: '100%',
|
||||
marginBottom: 20,
|
||||
},
|
||||
image: {
|
||||
objectFit: 'cover',
|
||||
paddingTop: 0,
|
||||
},
|
||||
noImage: {
|
||||
backgroundColor: '#333',
|
||||
borderWidth: 1,
|
||||
borderStyle: 'solid',
|
||||
borderColor: 'rgb(200, 200, 200)',
|
||||
borderRadius: 5,
|
||||
},
|
||||
})
|
||||
Vendored
+168
-63
@@ -5625,6 +5625,27 @@ export interface operations {
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
}
|
||||
}
|
||||
'v1-revoke-token': {
|
||||
@@ -5688,6 +5709,27 @@ export interface operations {
|
||||
'application/json': components['schemas']['OrganizationResponseV1'][]
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Unexpected error listing organizations */
|
||||
500: {
|
||||
headers: {
|
||||
@@ -5718,6 +5760,27 @@ export interface operations {
|
||||
'application/json': components['schemas']['OrganizationResponseV1']
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Unexpected error creating an organization */
|
||||
500: {
|
||||
headers: {
|
||||
@@ -5954,6 +6017,27 @@ export interface operations {
|
||||
'application/json': components['schemas']['OrganizationProjectsResponse']
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Failed to retrieve projects */
|
||||
500: {
|
||||
headers: {
|
||||
@@ -5999,6 +6083,27 @@ export interface operations {
|
||||
'application/json': components['schemas']['V1ProjectWithDatabaseResponse'][]
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
}
|
||||
}
|
||||
'v1-create-a-project': {
|
||||
@@ -6022,6 +6127,27 @@ export interface operations {
|
||||
'application/json': components['schemas']['V1ProjectResponse']
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
}
|
||||
}
|
||||
'v1-get-project': {
|
||||
@@ -7252,27 +7378,6 @@ export interface operations {
|
||||
'application/json': components['schemas']['BranchResponse'][]
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Failed to retrieve database branches */
|
||||
500: {
|
||||
headers: {
|
||||
@@ -7306,27 +7411,6 @@ export interface operations {
|
||||
'application/json': components['schemas']['BranchResponse']
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Failed to create database branch */
|
||||
500: {
|
||||
headers: {
|
||||
@@ -7405,27 +7489,6 @@ export interface operations {
|
||||
'application/json': components['schemas']['BranchResponse']
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Failed to fetch database branch */
|
||||
500: {
|
||||
headers: {
|
||||
@@ -12898,6 +12961,27 @@ export interface operations {
|
||||
'application/json': components['schemas']['SnippetList']
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Failed to list user's SQL snippets */
|
||||
500: {
|
||||
headers: {
|
||||
@@ -12926,6 +13010,27 @@ export interface operations {
|
||||
'application/json': components['schemas']['SnippetResponse']
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Failed to retrieve SQL snippet */
|
||||
500: {
|
||||
headers: {
|
||||
|
||||
+438
-3
@@ -1077,6 +1077,23 @@ export interface paths {
|
||||
patch?: never
|
||||
trace?: never
|
||||
}
|
||||
'/platform/organizations/{slug}/billing/credits/preview': {
|
||||
parameters: {
|
||||
query?: never
|
||||
header?: never
|
||||
path?: never
|
||||
cookie?: never
|
||||
}
|
||||
get?: never
|
||||
put?: never
|
||||
/** Preview for credit top-up */
|
||||
post: operations['OrgCreditsController_previewTopUp']
|
||||
delete?: never
|
||||
options?: never
|
||||
head?: never
|
||||
patch?: never
|
||||
trace?: never
|
||||
}
|
||||
'/platform/organizations/{slug}/billing/credits/redeem': {
|
||||
parameters: {
|
||||
query?: never
|
||||
@@ -1888,6 +1905,23 @@ export interface paths {
|
||||
patch?: never
|
||||
trace?: never
|
||||
}
|
||||
'/platform/organizations/onboarding-survey': {
|
||||
parameters: {
|
||||
query?: never
|
||||
header?: never
|
||||
path?: never
|
||||
cookie?: never
|
||||
}
|
||||
get?: never
|
||||
put?: never
|
||||
/** Submit onboarding survey for a newly created organization */
|
||||
post: operations['OrganizationsController_handleOnboardingSurvey']
|
||||
delete?: never
|
||||
options?: never
|
||||
head?: never
|
||||
patch?: never
|
||||
trace?: never
|
||||
}
|
||||
'/platform/organizations/preview-creation': {
|
||||
parameters: {
|
||||
query?: never
|
||||
@@ -4988,11 +5022,24 @@ export interface components {
|
||||
workdir: string
|
||||
}
|
||||
CreateInvitationBody: {
|
||||
email: string
|
||||
/**
|
||||
* Format: email
|
||||
* @deprecated
|
||||
*/
|
||||
email?: string
|
||||
emails?: string[]
|
||||
require_sso?: boolean
|
||||
role_id: number
|
||||
role_scoped_projects?: string[]
|
||||
}
|
||||
CreateInvitationResponse: {
|
||||
failed: {
|
||||
/** Format: email */
|
||||
email: string
|
||||
error: string
|
||||
}[]
|
||||
succeeded: string[]
|
||||
} | null
|
||||
CreateNamespaceBody: {
|
||||
namespace: string
|
||||
}
|
||||
@@ -5222,6 +5269,8 @@ export interface components {
|
||||
| 'action_runs_read'
|
||||
| 'action_runs_write'
|
||||
| 'advisors_read'
|
||||
| 'analytics_config_read'
|
||||
| 'analytics_config_write'
|
||||
| 'analytics_logs_read'
|
||||
| 'analytics_usage_read'
|
||||
| 'api_gateway_keys_read'
|
||||
@@ -5685,6 +5734,8 @@ export interface components {
|
||||
| 'action_runs_read'
|
||||
| 'action_runs_write'
|
||||
| 'advisors_read'
|
||||
| 'analytics_config_read'
|
||||
| 'analytics_config_write'
|
||||
| 'analytics_logs_read'
|
||||
| 'analytics_usage_read'
|
||||
| 'api_gateway_keys_read'
|
||||
@@ -7631,6 +7682,13 @@ export interface components {
|
||||
)[]
|
||||
website: string
|
||||
}
|
||||
OnboardingSurveyBody: {
|
||||
building?: string
|
||||
heard_from?: string
|
||||
kind?: string
|
||||
size?: string
|
||||
slug: string
|
||||
}
|
||||
OrganizationProjectsResponse: {
|
||||
pagination: {
|
||||
/** @description Total number of projects. Use this to calculate the total number of pages. */
|
||||
@@ -8271,6 +8329,36 @@ export interface components {
|
||||
name: string
|
||||
schema: string
|
||||
}
|
||||
PreviewCreditTopUpRequest: {
|
||||
address?: {
|
||||
city?: string | null
|
||||
country: string
|
||||
line1: string
|
||||
line2?: string | null
|
||||
postal_code?: string | null
|
||||
state?: string | null
|
||||
}
|
||||
amount: number
|
||||
tax_id?: {
|
||||
country: string
|
||||
type: string
|
||||
value: string
|
||||
}
|
||||
}
|
||||
PreviewCreditTopUpResponse: {
|
||||
amount: number
|
||||
currency: string
|
||||
tax: {
|
||||
currency: string
|
||||
tax_amount: number
|
||||
tax_rate_percentage: number
|
||||
total_amount_excluding_tax: number
|
||||
total_amount_including_tax: number
|
||||
} | null
|
||||
/** @enum {string} */
|
||||
tax_status: 'calculated' | 'not_applicable' | 'failed'
|
||||
total: number
|
||||
}
|
||||
PreviewOrganizationCreationBody: {
|
||||
address?: {
|
||||
city?: string | null
|
||||
@@ -8648,7 +8736,7 @@ export interface components {
|
||||
| '48xlarge_optimized_cpu'
|
||||
| '48xlarge_high_memory'
|
||||
inserted_at: string
|
||||
integration_source?: string | null
|
||||
integration_source: string | null
|
||||
is_branch_enabled: boolean
|
||||
is_physical_backups_enabled: boolean
|
||||
lastDatabaseResizeAt?: string
|
||||
@@ -10591,6 +10679,8 @@ export interface components {
|
||||
| 'action_runs_read'
|
||||
| 'action_runs_write'
|
||||
| 'advisors_read'
|
||||
| 'analytics_config_read'
|
||||
| 'analytics_config_write'
|
||||
| 'analytics_logs_read'
|
||||
| 'analytics_usage_read'
|
||||
| 'api_gateway_keys_read'
|
||||
@@ -14002,6 +14092,27 @@ export interface operations {
|
||||
'application/json': components['schemas']['ListPlatformAppsResponse']
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
}
|
||||
}
|
||||
PlatformAppsController_createPlatformApp: {
|
||||
@@ -14028,6 +14139,27 @@ export interface operations {
|
||||
'application/json': components['schemas']['CreatePlatformAppResponse']
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
}
|
||||
}
|
||||
PlatformAppsController_getPlatformApp: {
|
||||
@@ -14051,6 +14183,27 @@ export interface operations {
|
||||
'application/json': components['schemas']['GetPlatformAppResponse']
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
}
|
||||
}
|
||||
PlatformAppsController_deletePlatformApp: {
|
||||
@@ -14072,6 +14225,27 @@ export interface operations {
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
}
|
||||
}
|
||||
PlatformAppsController_updatePlatformApp: {
|
||||
@@ -14099,6 +14273,27 @@ export interface operations {
|
||||
'application/json': components['schemas']['GetPlatformAppResponse']
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
}
|
||||
}
|
||||
PlatformAppSigningKeysController_listPlatformAppSigningKeys: {
|
||||
@@ -14122,6 +14317,27 @@ export interface operations {
|
||||
'application/json': components['schemas']['ListPlatformAppSigningKeysResponse']
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
}
|
||||
}
|
||||
PlatformAppSigningKeysController_createPlatformAppSigningKey: {
|
||||
@@ -14145,6 +14361,27 @@ export interface operations {
|
||||
'application/json': components['schemas']['CreatePlatformAppSigningKeyResponse']
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
}
|
||||
}
|
||||
PlatformAppSigningKeysController_deletePlatformAppSigningKey: {
|
||||
@@ -14167,6 +14404,27 @@ export interface operations {
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
}
|
||||
}
|
||||
PlatformAppInstallationsController_listPlatformAppInstallations: {
|
||||
@@ -14189,6 +14447,27 @@ export interface operations {
|
||||
'application/json': components['schemas']['ListPlatformAppInstallationsResponse']
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
}
|
||||
}
|
||||
PlatformAppInstallationsController_installPlatformApp: {
|
||||
@@ -14215,6 +14494,27 @@ export interface operations {
|
||||
'application/json': components['schemas']['InstallPlatformAppResponse']
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
}
|
||||
}
|
||||
PlatformAppInstallationsController_getPlatformAppInstallation: {
|
||||
@@ -14238,6 +14538,27 @@ export interface operations {
|
||||
'application/json': components['schemas']['GetPlatformAppInstallationResponse']
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
}
|
||||
}
|
||||
PlatformAppInstallationsController_uninstallPlatformInstallation: {
|
||||
@@ -14259,6 +14580,27 @@ export interface operations {
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
}
|
||||
}
|
||||
PlatformAppInstallationsController_updatePlatformAppInstallation: {
|
||||
@@ -14282,6 +14624,27 @@ export interface operations {
|
||||
'application/json': components['schemas']['UpdatePlatformAppInstallationResponse']
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
}
|
||||
}
|
||||
OrgAuditLogsController_getAuditLogs: {
|
||||
@@ -14393,6 +14756,54 @@ export interface operations {
|
||||
}
|
||||
}
|
||||
}
|
||||
OrgCreditsController_previewTopUp: {
|
||||
parameters: {
|
||||
query?: never
|
||||
header?: never
|
||||
path: {
|
||||
/** @description Organization slug */
|
||||
slug: string
|
||||
}
|
||||
cookie?: never
|
||||
}
|
||||
requestBody: {
|
||||
content: {
|
||||
'application/json': components['schemas']['PreviewCreditTopUpRequest']
|
||||
}
|
||||
}
|
||||
responses: {
|
||||
/** @description Credit top-up preview with tax calculation. */
|
||||
200: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content: {
|
||||
'application/json': components['schemas']['PreviewCreditTopUpResponse']
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Forbidden action */
|
||||
403: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
/** @description Rate limit exceeded */
|
||||
429: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
}
|
||||
}
|
||||
OrgCreditsController_redeemCode: {
|
||||
parameters: {
|
||||
query?: never
|
||||
@@ -15910,11 +16321,14 @@ export interface operations {
|
||||
}
|
||||
}
|
||||
responses: {
|
||||
/** @description Batch invitations result when using "emails" field. null/no body when using legacy "email" field. */
|
||||
201: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
content: {
|
||||
'application/json': components['schemas']['CreateInvitationResponse']
|
||||
}
|
||||
}
|
||||
/** @description Unauthorized */
|
||||
401: {
|
||||
@@ -17462,6 +17876,27 @@ export interface operations {
|
||||
}
|
||||
}
|
||||
}
|
||||
OrganizationsController_handleOnboardingSurvey: {
|
||||
parameters: {
|
||||
query?: never
|
||||
header?: never
|
||||
path?: never
|
||||
cookie?: never
|
||||
}
|
||||
requestBody: {
|
||||
content: {
|
||||
'application/json': components['schemas']['OnboardingSurveyBody']
|
||||
}
|
||||
}
|
||||
responses: {
|
||||
204: {
|
||||
headers: {
|
||||
[name: string]: unknown
|
||||
}
|
||||
content?: never
|
||||
}
|
||||
}
|
||||
}
|
||||
OrganizationsController_previewOrganizationCreation: {
|
||||
parameters: {
|
||||
query?: never
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
// @vitest-environment jsdom
|
||||
import { afterEach, beforeEach, describe, expect, it } from 'vitest'
|
||||
import type { UserDecision } from '@usercentrics/cmp-browser-sdk'
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
|
||||
import { detectPriorConsent } from './consent-state'
|
||||
import { applyPriorDecisionToSDK, consentState, detectPriorConsent } from './consent-state'
|
||||
|
||||
// jsdom's localStorage can be flaky in vitest, so ensure it's available
|
||||
const storage = new Map<string, string>()
|
||||
@@ -31,7 +32,7 @@ afterEach(() => {
|
||||
|
||||
describe('detectPriorConsent', () => {
|
||||
describe('scenario 1: GTM compressed format (ucData)', () => {
|
||||
it('returns true when ucData has all services consented', () => {
|
||||
it('returns uniform-accept when every service has consent: true', () => {
|
||||
storage.set(
|
||||
'ucData',
|
||||
JSON.stringify({
|
||||
@@ -46,64 +47,218 @@ describe('detectPriorConsent', () => {
|
||||
})
|
||||
)
|
||||
|
||||
expect(detectPriorConsent()).toBe(true)
|
||||
expect(detectPriorConsent()).toEqual({ kind: 'uniform-accept' })
|
||||
})
|
||||
|
||||
it('returns false when any service has consent: false', () => {
|
||||
// Real customer data shape from GROWTH-790: essentials and functional
|
||||
// services accepted, marketing/tracking services denied. This is what
|
||||
// Opt out or a Privacy Settings toggle of the Marketing category produces
|
||||
// in production — essentials are locked on and cannot actually be denied.
|
||||
it('returns per-service decisions when ucData has a mixed consent state (GROWTH-790)', () => {
|
||||
storage.set(
|
||||
'ucData',
|
||||
JSON.stringify({
|
||||
gcm: {
|
||||
adsDataRedaction: true,
|
||||
adStorage: 'denied',
|
||||
adPersonalization: 'denied',
|
||||
adUserData: 'denied',
|
||||
analyticsStorage: 'denied',
|
||||
},
|
||||
consent: {
|
||||
services: {
|
||||
J39GyuWQq: { name: 'Amazon Web Services', consent: true },
|
||||
HkIVcNiuoZX: { name: 'Cloudflare', consent: true },
|
||||
H1PKqNodoWQ: { name: 'Google AJAX', consent: true },
|
||||
HkPBYFofN: { name: 'Google Fonts', consent: true },
|
||||
QjO6LaiOd: { name: 'hCaptcha', consent: true },
|
||||
'F-REmjGq7': { name: 'JSDelivr', consent: true },
|
||||
Hko_qNsui_Q: { name: 'reCAPTCHA', consent: true },
|
||||
rH1vNPCFR: { name: 'Sentry', consent: true },
|
||||
ry3w9Vo_oZ7: { name: 'Stripe', consent: true },
|
||||
BJTzqNi_i_m: { name: 'Twitter Plugin', consent: true },
|
||||
HLap0udLC: { name: 'Twitter Syndication', consent: true },
|
||||
H1Vl5NidjWX: { name: 'Usercentrics Consent Management Platform', consent: true },
|
||||
BJz7qNsdj_7: { name: 'YouTube Video', consent: true },
|
||||
S1_9Vsuj_Q: { name: 'Google Ads', consent: false },
|
||||
HkocEodjb7: { name: 'Google Analytics', consent: false },
|
||||
BJ59EidsWQ: { name: 'Google Tag Manager', consent: false },
|
||||
nV4hGUA8RQK5Ez: { name: 'Supabase Event Tracking', consent: false },
|
||||
},
|
||||
},
|
||||
})
|
||||
)
|
||||
|
||||
const result = detectPriorConsent()
|
||||
if (result === null || result.kind !== 'decisions') {
|
||||
throw new Error(`expected decisions result, got ${JSON.stringify(result)}`)
|
||||
}
|
||||
expect(result.decisions).toHaveLength(17)
|
||||
// Essentials / functional services preserved as accepted
|
||||
expect(result.decisions).toContainEqual({ serviceId: 'J39GyuWQq', status: true })
|
||||
expect(result.decisions).toContainEqual({ serviceId: 'rH1vNPCFR', status: true })
|
||||
// Tracking services preserved as denied
|
||||
expect(result.decisions).toContainEqual({ serviceId: 'S1_9Vsuj_Q', status: false })
|
||||
expect(result.decisions).toContainEqual({ serviceId: 'HkocEodjb7', status: false })
|
||||
expect(result.decisions).toContainEqual({ serviceId: 'BJ59EidsWQ', status: false })
|
||||
expect(result.decisions).toContainEqual({ serviceId: 'nV4hGUA8RQK5Ez', status: false })
|
||||
})
|
||||
|
||||
it('returns per-service decisions (all false) when every service was denied', () => {
|
||||
storage.set(
|
||||
'ucData',
|
||||
JSON.stringify({
|
||||
consent: {
|
||||
services: {
|
||||
svc1: { name: 'Google Analytics', consent: true },
|
||||
svc1: { name: 'Google Analytics', consent: false },
|
||||
svc2: { name: 'Stripe', consent: false },
|
||||
},
|
||||
},
|
||||
})
|
||||
)
|
||||
|
||||
expect(detectPriorConsent()).toBe(false)
|
||||
expect(detectPriorConsent()).toEqual({
|
||||
kind: 'decisions',
|
||||
decisions: [
|
||||
{ serviceId: 'svc1', status: false },
|
||||
{ serviceId: 'svc2', status: false },
|
||||
],
|
||||
})
|
||||
})
|
||||
|
||||
it('returns false when services object is empty', () => {
|
||||
it('returns null when services object is empty', () => {
|
||||
storage.set('ucData', JSON.stringify({ consent: { services: {} } }))
|
||||
expect(detectPriorConsent()).toBe(false)
|
||||
expect(detectPriorConsent()).toBeNull()
|
||||
})
|
||||
|
||||
it('returns false when ucData is malformed JSON', () => {
|
||||
it('returns null when ucData is malformed JSON', () => {
|
||||
storage.set('ucData', 'not-json')
|
||||
expect(detectPriorConsent()).toBe(false)
|
||||
expect(detectPriorConsent()).toBeNull()
|
||||
})
|
||||
|
||||
it('returns false when ucData has no consent.services', () => {
|
||||
it('returns null when ucData has no consent.services', () => {
|
||||
storage.set('ucData', JSON.stringify({ gcm: {} }))
|
||||
expect(detectPriorConsent()).toBe(false)
|
||||
expect(detectPriorConsent()).toBeNull()
|
||||
})
|
||||
|
||||
it('returns false when services contains non-object values', () => {
|
||||
it('returns null when every service value is non-object', () => {
|
||||
storage.set('ucData', JSON.stringify({ consent: { services: { svc1: 'not-an-object' } } }))
|
||||
expect(detectPriorConsent()).toBe(false)
|
||||
expect(detectPriorConsent()).toBeNull()
|
||||
})
|
||||
|
||||
// Partial parse failures must fail closed. Cherry-picking the valid
|
||||
// subset and calling it uniform-accept would let corrupted third-party
|
||||
// storage silently upgrade a user's consent — the worst-direction bias
|
||||
// in this domain.
|
||||
it('returns null when any entry fails schema (fails closed on partial corruption)', () => {
|
||||
storage.set(
|
||||
'ucData',
|
||||
JSON.stringify({
|
||||
consent: {
|
||||
services: {
|
||||
svc1: 'not-an-object',
|
||||
svc2: { name: 'Valid', consent: true },
|
||||
},
|
||||
},
|
||||
})
|
||||
)
|
||||
expect(detectPriorConsent()).toBeNull()
|
||||
})
|
||||
})
|
||||
|
||||
describe('scenario 2: fast cross-app navigation (uc_user_interaction)', () => {
|
||||
it('returns true when uc_user_interaction is "true"', () => {
|
||||
describe('scenario 2: fast cross-app navigation (uc_settings gated by uc_user_interaction)', () => {
|
||||
const buildUcSettings = (services: Array<{ id: string; status: boolean }>) =>
|
||||
JSON.stringify({
|
||||
controllerId: 'test-controller',
|
||||
id: 'test-settings',
|
||||
language: 'en',
|
||||
services: services.map((s) => ({
|
||||
id: s.id,
|
||||
status: s.status,
|
||||
processorId: 'test-processor',
|
||||
history: [],
|
||||
version: '1.0.0',
|
||||
})),
|
||||
version: '1.0.0',
|
||||
})
|
||||
|
||||
it('returns uniform-accept when uc_settings has every service accepted', () => {
|
||||
storage.set('uc_user_interaction', 'true')
|
||||
expect(detectPriorConsent()).toBe(true)
|
||||
storage.set(
|
||||
'uc_settings',
|
||||
buildUcSettings([
|
||||
{ id: 'svc1', status: true },
|
||||
{ id: 'svc2', status: true },
|
||||
])
|
||||
)
|
||||
expect(detectPriorConsent()).toEqual({ kind: 'uniform-accept' })
|
||||
})
|
||||
|
||||
it('returns false when uc_user_interaction is "false"', () => {
|
||||
it('returns per-service decisions when uc_settings has a mixed state', () => {
|
||||
storage.set('uc_user_interaction', 'true')
|
||||
storage.set(
|
||||
'uc_settings',
|
||||
buildUcSettings([
|
||||
{ id: 'essential1', status: true },
|
||||
{ id: 'tracking1', status: false },
|
||||
{ id: 'tracking2', status: false },
|
||||
])
|
||||
)
|
||||
const result = detectPriorConsent()
|
||||
if (result === null || result.kind !== 'decisions') {
|
||||
throw new Error(`expected decisions result, got ${JSON.stringify(result)}`)
|
||||
}
|
||||
expect(result.decisions).toHaveLength(3)
|
||||
expect(result.decisions).toContainEqual({ serviceId: 'essential1', status: true })
|
||||
expect(result.decisions).toContainEqual({ serviceId: 'tracking1', status: false })
|
||||
expect(result.decisions).toContainEqual({ serviceId: 'tracking2', status: false })
|
||||
})
|
||||
|
||||
it('returns null when uc_user_interaction is "true" but uc_settings is absent', () => {
|
||||
storage.set('uc_user_interaction', 'true')
|
||||
expect(detectPriorConsent()).toBeNull()
|
||||
})
|
||||
|
||||
it('returns null when uc_settings is malformed JSON', () => {
|
||||
storage.set('uc_user_interaction', 'true')
|
||||
storage.set('uc_settings', 'not-json')
|
||||
expect(detectPriorConsent()).toBeNull()
|
||||
})
|
||||
|
||||
it('returns null when uc_settings services array is empty', () => {
|
||||
storage.set('uc_user_interaction', 'true')
|
||||
storage.set('uc_settings', buildUcSettings([]))
|
||||
expect(detectPriorConsent()).toBeNull()
|
||||
})
|
||||
|
||||
it('returns null when any uc_settings service entry fails schema', () => {
|
||||
storage.set('uc_user_interaction', 'true')
|
||||
storage.set(
|
||||
'uc_settings',
|
||||
JSON.stringify({
|
||||
services: [
|
||||
{ id: 'svc1', status: true, processorId: 'p', history: [], version: '1' },
|
||||
{ id: 'svc2', status: 'not-a-boolean', processorId: 'p', history: [], version: '1' },
|
||||
],
|
||||
})
|
||||
)
|
||||
expect(detectPriorConsent()).toBeNull()
|
||||
})
|
||||
|
||||
it('returns null when uc_user_interaction is "false" (even if uc_settings is valid)', () => {
|
||||
storage.set('uc_user_interaction', 'false')
|
||||
expect(detectPriorConsent()).toBe(false)
|
||||
storage.set('uc_settings', buildUcSettings([{ id: 'svc1', status: true }]))
|
||||
expect(detectPriorConsent()).toBeNull()
|
||||
})
|
||||
|
||||
it('returns false when uc_user_interaction is absent', () => {
|
||||
expect(detectPriorConsent()).toBe(false)
|
||||
it('returns null when uc_user_interaction is absent', () => {
|
||||
storage.set('uc_settings', buildUcSettings([{ id: 'svc1', status: true }]))
|
||||
expect(detectPriorConsent()).toBeNull()
|
||||
})
|
||||
})
|
||||
|
||||
describe('combined scenarios', () => {
|
||||
it('returns true when both ucData and uc_user_interaction indicate consent', () => {
|
||||
it('returns uniform-accept when ucData is fully accepted (ignoring uc_user_interaction/uc_settings)', () => {
|
||||
storage.set(
|
||||
'ucData',
|
||||
JSON.stringify({
|
||||
@@ -111,27 +266,185 @@ describe('detectPriorConsent', () => {
|
||||
})
|
||||
)
|
||||
storage.set('uc_user_interaction', 'true')
|
||||
expect(detectPriorConsent()).toBe(true)
|
||||
expect(detectPriorConsent()).toEqual({ kind: 'uniform-accept' })
|
||||
})
|
||||
|
||||
it('returns true when ucData has consent but uc_user_interaction is false', () => {
|
||||
it('prefers ucData decisions over uc_settings when both exist', () => {
|
||||
storage.set(
|
||||
'ucData',
|
||||
JSON.stringify({
|
||||
consent: { services: { svc1: { name: 'GA', consent: true } } },
|
||||
consent: { services: { svc1: { name: 'GA', consent: false } } },
|
||||
})
|
||||
)
|
||||
storage.set('uc_user_interaction', 'false')
|
||||
expect(detectPriorConsent()).toBe(true)
|
||||
})
|
||||
|
||||
it('returns true when ucData is absent but uc_user_interaction is true', () => {
|
||||
storage.set('uc_user_interaction', 'true')
|
||||
expect(detectPriorConsent()).toBe(true)
|
||||
storage.set(
|
||||
'uc_settings',
|
||||
JSON.stringify({
|
||||
services: [{ id: 'svc1', status: true, processorId: 'p', history: [], version: '1' }],
|
||||
})
|
||||
)
|
||||
expect(detectPriorConsent()).toEqual({
|
||||
kind: 'decisions',
|
||||
decisions: [{ serviceId: 'svc1', status: false }],
|
||||
})
|
||||
})
|
||||
|
||||
it('returns false when localStorage is completely empty', () => {
|
||||
expect(detectPriorConsent()).toBe(false)
|
||||
it('falls back to uc_settings when ucData is corrupt (scenario 1 fails closed, scenario 2 recovers)', () => {
|
||||
storage.set('ucData', JSON.stringify({ consent: { services: { svc1: 'corrupt' } } }))
|
||||
storage.set('uc_user_interaction', 'true')
|
||||
storage.set(
|
||||
'uc_settings',
|
||||
JSON.stringify({
|
||||
services: [{ id: 'svc1', status: false, processorId: 'p', history: [], version: '1' }],
|
||||
})
|
||||
)
|
||||
expect(detectPriorConsent()).toEqual({
|
||||
kind: 'decisions',
|
||||
decisions: [{ serviceId: 'svc1', status: false }],
|
||||
})
|
||||
})
|
||||
|
||||
it('returns null when localStorage is completely empty', () => {
|
||||
expect(detectPriorConsent()).toBeNull()
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('applyPriorDecisionToSDK', () => {
|
||||
type MockService = { id: string; isEssential: boolean }
|
||||
|
||||
const makeMockUC = (
|
||||
opts: {
|
||||
services?: MockService[]
|
||||
areAllAccepted?: boolean
|
||||
onAcceptAll?: () => Promise<void>
|
||||
onUpdateServices?: (decisions: UserDecision[]) => Promise<void>
|
||||
} = {}
|
||||
) => {
|
||||
const services = opts.services ?? []
|
||||
return {
|
||||
acceptAllServices: vi.fn(opts.onAcceptAll ?? (() => Promise.resolve())),
|
||||
denyAllServices: vi.fn(() => Promise.resolve()),
|
||||
updateServices: vi.fn(opts.onUpdateServices ?? (() => Promise.resolve())),
|
||||
getCategoriesBaseInfo: vi.fn(() => []),
|
||||
getServicesBaseInfo: vi.fn(() => services),
|
||||
areAllConsentsAccepted: vi.fn(() => opts.areAllAccepted ?? false),
|
||||
}
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
consentState.UC = null
|
||||
consentState.categories = null
|
||||
consentState.showConsentToast = false
|
||||
consentState.hasConsented = false
|
||||
})
|
||||
|
||||
it('uniform-accept: calls acceptAllServices, sets hasConsented, suppresses banner', () => {
|
||||
const UC = makeMockUC()
|
||||
applyPriorDecisionToSDK(UC as never, { initialLayer: 0 }, { kind: 'uniform-accept' })
|
||||
|
||||
expect(UC.acceptAllServices).toHaveBeenCalledOnce()
|
||||
expect(UC.updateServices).not.toHaveBeenCalled()
|
||||
expect(consentState.hasConsented).toBe(true)
|
||||
expect(consentState.showConsentToast).toBe(false)
|
||||
})
|
||||
|
||||
it('decisions with full coverage: calls updateServices with stored decisions, suppresses banner', () => {
|
||||
const UC = makeMockUC({
|
||||
services: [
|
||||
{ id: 'essential1', isEssential: true },
|
||||
{ id: 'tracking1', isEssential: false },
|
||||
{ id: 'tracking2', isEssential: false },
|
||||
],
|
||||
})
|
||||
const decisions: UserDecision[] = [
|
||||
{ serviceId: 'tracking1', status: true },
|
||||
{ serviceId: 'tracking2', status: false },
|
||||
]
|
||||
|
||||
applyPriorDecisionToSDK(UC as never, { initialLayer: 0 }, { kind: 'decisions', decisions })
|
||||
|
||||
expect(UC.updateServices).toHaveBeenCalledWith(decisions)
|
||||
expect(UC.acceptAllServices).not.toHaveBeenCalled()
|
||||
expect(consentState.showConsentToast).toBe(false)
|
||||
})
|
||||
|
||||
// GROWTH-790 compliance guard: when the ruleset adds a new non-essential
|
||||
// service after the user's stored decisions were written, we must NOT
|
||||
// silently restore — the user has never seen this service and can't have
|
||||
// consented to it. Show the banner instead.
|
||||
it('decisions with uncovered non-essential service: shows banner, does not mutate SDK', () => {
|
||||
const UC = makeMockUC({
|
||||
services: [
|
||||
{ id: 'tracking1', isEssential: false },
|
||||
{ id: 'tracking_new', isEssential: false }, // in ruleset, not in decisions
|
||||
],
|
||||
})
|
||||
|
||||
applyPriorDecisionToSDK(
|
||||
UC as never,
|
||||
{ initialLayer: 0 },
|
||||
{ kind: 'decisions', decisions: [{ serviceId: 'tracking1', status: false }] }
|
||||
)
|
||||
|
||||
expect(UC.updateServices).not.toHaveBeenCalled()
|
||||
expect(UC.acceptAllServices).not.toHaveBeenCalled()
|
||||
expect(consentState.showConsentToast).toBe(true)
|
||||
})
|
||||
|
||||
// Essentials are SDK-forced-on regardless of user decision, so a new
|
||||
// essential service appearing since the stored decisions were written
|
||||
// should not trigger a re-prompt — the user has nothing meaningful to
|
||||
// decide about it.
|
||||
it('decisions covering only non-essentials: still restores (essentials ignored in coverage check)', () => {
|
||||
const UC = makeMockUC({
|
||||
services: [
|
||||
{ id: 'essential_new', isEssential: true }, // not in decisions, but essential
|
||||
{ id: 'tracking1', isEssential: false },
|
||||
],
|
||||
})
|
||||
|
||||
applyPriorDecisionToSDK(
|
||||
UC as never,
|
||||
{ initialLayer: 0 },
|
||||
{ kind: 'decisions', decisions: [{ serviceId: 'tracking1', status: false }] }
|
||||
)
|
||||
|
||||
expect(UC.updateServices).toHaveBeenCalledOnce()
|
||||
expect(consentState.showConsentToast).toBe(false)
|
||||
})
|
||||
|
||||
it('null prior decision: shows banner at default', () => {
|
||||
const UC = makeMockUC()
|
||||
applyPriorDecisionToSDK(UC as never, { initialLayer: 0 }, null)
|
||||
|
||||
expect(UC.updateServices).not.toHaveBeenCalled()
|
||||
expect(UC.acceptAllServices).not.toHaveBeenCalled()
|
||||
expect(consentState.showConsentToast).toBe(true)
|
||||
})
|
||||
|
||||
it('SDK not requesting first-layer banner: no restore attempted even if priorDecision exists', () => {
|
||||
const UC = makeMockUC({ areAllAccepted: true })
|
||||
applyPriorDecisionToSDK(UC as never, { initialLayer: 1 }, { kind: 'uniform-accept' })
|
||||
|
||||
expect(UC.acceptAllServices).not.toHaveBeenCalled()
|
||||
expect(UC.updateServices).not.toHaveBeenCalled()
|
||||
expect(consentState.hasConsented).toBe(true)
|
||||
expect(consentState.showConsentToast).toBe(false)
|
||||
})
|
||||
|
||||
it('SDK already considers user consented: passes through, no restore', () => {
|
||||
const UC = makeMockUC({ areAllAccepted: true })
|
||||
applyPriorDecisionToSDK(
|
||||
UC as never,
|
||||
{ initialLayer: 0 },
|
||||
{
|
||||
kind: 'decisions',
|
||||
decisions: [{ serviceId: 'svc1', status: false }],
|
||||
}
|
||||
)
|
||||
|
||||
expect(UC.updateServices).not.toHaveBeenCalled()
|
||||
expect(consentState.hasConsented).toBe(true)
|
||||
})
|
||||
})
|
||||
@@ -4,61 +4,133 @@ import { proxy, snapshot, useSnapshot } from 'valtio'
|
||||
|
||||
import { IS_PLATFORM, LOCAL_STORAGE_KEYS } from './constants'
|
||||
|
||||
export type PriorConsentDecision =
|
||||
| null
|
||||
| { kind: 'uniform-accept' }
|
||||
| { kind: 'decisions'; decisions: UserDecision[] }
|
||||
|
||||
type UcDataServiceEntry = [string, { consent: boolean }]
|
||||
|
||||
const isValidUcDataServiceEntry = (entry: [string, unknown]): entry is UcDataServiceEntry => {
|
||||
const value = entry[1]
|
||||
return (
|
||||
typeof value === 'object' &&
|
||||
value !== null &&
|
||||
typeof (value as { consent: unknown }).consent === 'boolean'
|
||||
)
|
||||
}
|
||||
|
||||
type UcSettingsService = { id: string; status: boolean }
|
||||
|
||||
const isValidUcSettingsService = (service: unknown): service is UcSettingsService =>
|
||||
typeof service === 'object' &&
|
||||
service !== null &&
|
||||
typeof (service as { id: unknown }).id === 'string' &&
|
||||
typeof (service as { status: unknown }).status === 'boolean'
|
||||
|
||||
/**
|
||||
* Check if the user previously accepted all consent services by reading
|
||||
* Check whether the user previously made a consent decision by reading
|
||||
* localStorage state that was written before UC.init() overwrites it.
|
||||
*
|
||||
* Handles two scenarios (FE-2648):
|
||||
* Returns enough information for the caller to restore the user's exact
|
||||
* prior state via UC.updateServices, or to fast-path via UC.acceptAllServices
|
||||
* when we can safely identify a uniform accept. Returns null when nothing
|
||||
* trustworthy can be detected — in that case the caller should show the
|
||||
* banner rather than fabricate a decision.
|
||||
*
|
||||
* Handles two scenarios (FE-2648 and GROWTH-790):
|
||||
*
|
||||
* 1. Slow navigation: GTM's Usercentrics integration replaced uc_settings with
|
||||
* compressed ucString/ucData after acceptAllServices(). On the next page load,
|
||||
* UC.init() can't read that format and treats the user as new.
|
||||
* compressed ucString/ucData after the user's decision. On the next page
|
||||
* load, UC.init() can't read that format and treats the user as new. We
|
||||
* read ucData.consent.services directly and return every per-service
|
||||
* decision so the caller can restore the user's exact state — including
|
||||
* mixed states (essentials + functional accepted, tracking denied) that
|
||||
* users produce via the Privacy Settings modal or the Opt out button.
|
||||
*
|
||||
* 2. Fast navigation: User accepted on app A and navigated to app B before GTM
|
||||
* finished writing ucData. App B's UC.init() overwrites uc_settings with a
|
||||
* fresh controllerId and resets uc_user_interaction to false. We detect the
|
||||
* prior uc_user_interaction: "true" before init stomps it.
|
||||
* 2. Fast navigation: User decided on app A and navigated to app B before GTM
|
||||
* finished writing ucData (or before GTM loaded at all, which happens on
|
||||
* deny since TelemetryTagManager is gated behind hasAccepted). App B's
|
||||
* UC.init() overwrites uc_settings with a fresh controllerId and resets
|
||||
* uc_user_interaction to false. We check uc_user_interaction: "true" as
|
||||
* a gate confirming the user actually interacted, then parse uc_settings
|
||||
* to extract per-service decisions. uc_user_interaction alone is not
|
||||
* enough — without uc_settings we cannot tell accept from deny and must
|
||||
* not fabricate a direction.
|
||||
*
|
||||
* Both scenarios fail closed: any schema mismatch or partial corruption
|
||||
* returns null rather than proceeding with a subset of valid entries.
|
||||
* Over-consenting from malformed storage is the worst-direction bias in
|
||||
* this domain.
|
||||
*
|
||||
* Must be called BEFORE UC.init() since init overwrites these keys.
|
||||
*/
|
||||
export function detectPriorConsent(): boolean {
|
||||
export function detectPriorConsent(): PriorConsentDecision {
|
||||
try {
|
||||
// Scenario 1: GTM wrote compressed format (slow navigation / same-app refresh)
|
||||
const ucData = localStorage?.getItem('ucData')
|
||||
if (ucData) {
|
||||
const data = JSON.parse(ucData)
|
||||
const services = data?.consent?.services
|
||||
if (services && typeof services === 'object') {
|
||||
const serviceValues = Object.values(services)
|
||||
if (
|
||||
serviceValues.length > 0 &&
|
||||
serviceValues.every(
|
||||
(s) =>
|
||||
typeof s === 'object' && s !== null && (s as { consent: boolean }).consent === true
|
||||
)
|
||||
) {
|
||||
return true
|
||||
const rawEntries = Object.entries(services) as Array<[string, unknown]>
|
||||
if (rawEntries.length > 0) {
|
||||
if (!rawEntries.every(isValidUcDataServiceEntry)) {
|
||||
// Partial corruption: don't cherry-pick the valid subset. Fall
|
||||
// through to scenario 2 — uc_settings may still be intact.
|
||||
} else {
|
||||
const entries = rawEntries as UcDataServiceEntry[]
|
||||
if (entries.every(([, s]) => s.consent === true)) {
|
||||
return { kind: 'uniform-accept' }
|
||||
}
|
||||
return {
|
||||
kind: 'decisions',
|
||||
decisions: entries.map(([serviceId, s]) => ({
|
||||
serviceId,
|
||||
status: s.consent,
|
||||
})),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Scenario 2: SDK wrote uc_user_interaction: "true" (fast cross-app navigation)
|
||||
// uc_user_interaction gates trust in uc_settings — the SDK sets it on any
|
||||
// user interaction, which confirms uc_settings holds real decisions rather
|
||||
// than ruleset defaults.
|
||||
if (localStorage?.getItem('uc_user_interaction') === 'true') {
|
||||
return true
|
||||
const ucSettings = localStorage?.getItem('uc_settings')
|
||||
if (ucSettings) {
|
||||
const parsed = JSON.parse(ucSettings)
|
||||
const services = parsed?.services
|
||||
if (
|
||||
Array.isArray(services) &&
|
||||
services.length > 0 &&
|
||||
services.every(isValidUcSettingsService)
|
||||
) {
|
||||
const decisions: UserDecision[] = services.map((s) => ({
|
||||
serviceId: s.id,
|
||||
status: s.status,
|
||||
}))
|
||||
if (decisions.every((d) => d.status === true)) {
|
||||
return { kind: 'uniform-accept' }
|
||||
}
|
||||
return { kind: 'decisions', decisions }
|
||||
}
|
||||
}
|
||||
// Flag says interacted but uc_settings is missing or malformed.
|
||||
// Don't fabricate direction — show the banner on the next init.
|
||||
}
|
||||
|
||||
return false
|
||||
return null
|
||||
} catch {
|
||||
return false
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
export const consentState = proxy({
|
||||
// Usercentrics state
|
||||
UC: null as Usercentrics | null,
|
||||
categories: null as BaseCategory[] | null,
|
||||
|
||||
// Our state
|
||||
showConsentToast: false,
|
||||
hasConsented: false,
|
||||
acceptAll: () => {
|
||||
@@ -108,6 +180,95 @@ export const consentState = proxy({
|
||||
},
|
||||
})
|
||||
|
||||
/**
|
||||
* Apply a prior consent decision (or lack of one) to the freshly-initialized
|
||||
* Usercentrics SDK and the module's consentState proxy. Extracted from
|
||||
* initUserCentrics to make the orchestration unit-testable without mocking
|
||||
* the dynamic SDK import. Must be called after UC.init(). Mutates
|
||||
* consentState synchronously and may call UC methods asynchronously.
|
||||
*/
|
||||
export function applyPriorDecisionToSDK(
|
||||
UC: Usercentrics,
|
||||
initialUIValues: { initialLayer: number },
|
||||
priorDecision: PriorConsentDecision
|
||||
): void {
|
||||
consentState.UC = UC
|
||||
const hasConsented = UC.areAllConsentsAccepted()
|
||||
|
||||
// If the SDK wants to show the banner but the user previously made a
|
||||
// decision (detected via ucData or uc_settings before init overwrote
|
||||
// them), silently re-apply that decision instead of re-prompting
|
||||
// (FE-2648, GROWTH-790).
|
||||
if (initialUIValues.initialLayer === 0 && !hasConsented && priorDecision) {
|
||||
consentState.categories = UC.getCategoriesBaseInfo()
|
||||
consentState.showConsentToast = false
|
||||
localStorage?.removeItem(LOCAL_STORAGE_KEYS.TELEMETRY_CONSENT)
|
||||
|
||||
if (priorDecision.kind === 'uniform-accept') {
|
||||
// Uniform accept covers any currently-active service by definition,
|
||||
// including any added to the ruleset since the user's decision was
|
||||
// stored — acceptAllServices applies to all current services.
|
||||
consentState.hasConsented = true
|
||||
UC.acceptAllServices()
|
||||
.then(() => {
|
||||
consentState.categories = UC.getCategoriesBaseInfo()
|
||||
})
|
||||
.catch(() => {
|
||||
consentState.hasConsented = false
|
||||
consentState.showConsentToast = true
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// priorDecision.kind === 'decisions'. Only suppress the banner if the
|
||||
// stored decisions cover every non-essential service the SDK currently
|
||||
// knows about. If the ruleset has grown since the user's ucData/
|
||||
// uc_settings was written, force a re-prompt rather than silently
|
||||
// defaulting the new service. Essentials are skipped because the SDK
|
||||
// forces them on regardless of user decision.
|
||||
const currentNonEssentialIds = UC.getServicesBaseInfo()
|
||||
.filter((s) => !s.isEssential)
|
||||
.map((s) => s.id)
|
||||
const coveredIds = new Set(priorDecision.decisions.map((d) => d.serviceId))
|
||||
const allCovered = currentNonEssentialIds.every((id) => coveredIds.has(id))
|
||||
|
||||
if (!allCovered) {
|
||||
// Fall through to the banner path below. Reset the early writes
|
||||
// so the default-branch state assignments take effect correctly.
|
||||
consentState.showConsentToast = initialUIValues.initialLayer === 0
|
||||
consentState.hasConsented = hasConsented
|
||||
return
|
||||
}
|
||||
|
||||
// Restore the user's exact per-service state — handles deny and any
|
||||
// partial/category-level decision made via Privacy Settings. hasConsented
|
||||
// is computed from SDK state after the restore resolves (will be false
|
||||
// unless every service was accepted).
|
||||
UC.updateServices(priorDecision.decisions)
|
||||
.then(() => {
|
||||
consentState.hasConsented = UC.areAllConsentsAccepted()
|
||||
consentState.categories = UC.getCategoriesBaseInfo()
|
||||
})
|
||||
.catch(() => {
|
||||
// Falling back to the banner is safer than silently flipping to a
|
||||
// uniform state the user didn't choose.
|
||||
consentState.showConsentToast = true
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// 0 = first layer, aka show consent toast
|
||||
consentState.showConsentToast = initialUIValues.initialLayer === 0
|
||||
consentState.hasConsented = hasConsented
|
||||
consentState.categories = UC.getCategoriesBaseInfo()
|
||||
|
||||
// If the user has previously consented (before usercentrics), accept all services
|
||||
if (!hasConsented && localStorage?.getItem(LOCAL_STORAGE_KEYS.TELEMETRY_CONSENT) === 'true') {
|
||||
consentState.acceptAll()
|
||||
localStorage.removeItem(LOCAL_STORAGE_KEYS.TELEMETRY_CONSENT)
|
||||
}
|
||||
}
|
||||
|
||||
async function initUserCentrics() {
|
||||
if (process.env.NODE_ENV === 'test' || !IS_PLATFORM) return
|
||||
|
||||
@@ -124,7 +285,7 @@ async function initUserCentrics() {
|
||||
|
||||
// Check for prior consent BEFORE UC.init(), which can't read the compressed
|
||||
// ucData format written by the GTM/Usercentrics integration (FE-2648).
|
||||
const previouslyAccepted = detectPriorConsent()
|
||||
const priorDecision = detectPriorConsent()
|
||||
|
||||
try {
|
||||
const { default: Usercentrics } = await import('@usercentrics/cmp-browser-sdk')
|
||||
@@ -135,44 +296,13 @@ async function initUserCentrics() {
|
||||
})
|
||||
|
||||
const initialUIValues = await UC.init()
|
||||
|
||||
consentState.UC = UC
|
||||
const hasConsented = UC.areAllConsentsAccepted()
|
||||
|
||||
// If the SDK wants to show the banner but the user previously accepted
|
||||
// (detected via ucData or uc_user_interaction before init overwrote them),
|
||||
// silently re-accept instead of showing the banner again (FE-2648).
|
||||
if (initialUIValues.initialLayer === 0 && !hasConsented && previouslyAccepted) {
|
||||
consentState.hasConsented = true
|
||||
consentState.showConsentToast = false
|
||||
consentState.categories = UC.getCategoriesBaseInfo()
|
||||
localStorage?.removeItem(LOCAL_STORAGE_KEYS.TELEMETRY_CONSENT)
|
||||
UC.acceptAllServices()
|
||||
.then(() => {
|
||||
consentState.categories = UC.getCategoriesBaseInfo()
|
||||
})
|
||||
.catch(() => {
|
||||
// If re-accept fails, fall back to showing the banner
|
||||
consentState.hasConsented = false
|
||||
consentState.showConsentToast = true
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// 0 = first layer, aka show consent toast
|
||||
consentState.showConsentToast = initialUIValues.initialLayer === 0
|
||||
consentState.hasConsented = hasConsented
|
||||
consentState.categories = UC.getCategoriesBaseInfo()
|
||||
|
||||
// If the user has previously consented (before usercentrics), accept all services
|
||||
if (!hasConsented && localStorage?.getItem(LOCAL_STORAGE_KEYS.TELEMETRY_CONSENT) === 'true') {
|
||||
consentState.acceptAll()
|
||||
localStorage.removeItem(LOCAL_STORAGE_KEYS.TELEMETRY_CONSENT)
|
||||
}
|
||||
applyPriorDecisionToSDK(UC, initialUIValues, priorDecision)
|
||||
} catch (error) {
|
||||
console.error('Failed to initialize Usercentrics:', error)
|
||||
// If SDK fails but user previously accepted, honor that
|
||||
if (previouslyAccepted) {
|
||||
// If SDK fails but user previously accepted uniformly, honor that.
|
||||
// For explicit per-service decisions we can't restore without the SDK,
|
||||
// and showing the banner when the SDK is broken would fail anyway.
|
||||
if (priorDecision?.kind === 'uniform-accept') {
|
||||
consentState.hasConsented = true
|
||||
}
|
||||
}
|
||||
@@ -183,8 +313,6 @@ if (typeof window !== 'undefined') {
|
||||
initUserCentrics()
|
||||
}
|
||||
|
||||
// Public API for consent
|
||||
|
||||
export function hasConsented() {
|
||||
return snapshot(consentState).hasConsented
|
||||
}
|
||||
|
||||
@@ -40,4 +40,6 @@ const TooltipContent = React.forwardRef<
|
||||
))
|
||||
TooltipContent.displayName = TooltipPrimitive.Content.displayName
|
||||
|
||||
export type TooltipContentProps = React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>
|
||||
|
||||
export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TooltipPortal }
|
||||
Reference in new issue
Block a user