From 0fe4dd96d8ba01bf6e9476cd6e0884b2ecfa3f69 Mon Sep 17 00:00:00 2001 From: Inian Date: Mon, 22 Aug 2022 16:42:13 +0800 Subject: [PATCH] update permissions needed for copy --- .../generated/storage-from-copy.mdx | 2 +- .../version-v1/storage-from-copy.mdx | 2 +- spec/WIP_supabase_js_v2_sdk.yaml | 42 ++--- spec/supabase_js_v1_legacy.yml | 170 +++++++++--------- spec/supabase_js_v2_legacy.yml | 2 +- 5 files changed, 109 insertions(+), 109 deletions(-) diff --git a/apps/reference/_supabase_js/generated/storage-from-copy.mdx b/apps/reference/_supabase_js/generated/storage-from-copy.mdx index 3ed7733f453..b8d9952e011 100644 --- a/apps/reference/_supabase_js/generated/storage-from-copy.mdx +++ b/apps/reference/_supabase_js/generated/storage-from-copy.mdx @@ -66,7 +66,7 @@ The new file path, including the new file name. For example `folder/image-copy.p - Policy permissions required: - `buckets` permissions: none - - `objects` permissions: `update` and `select` + - `objects` permissions: `insert` and `select` ## Examples diff --git a/apps/reference/_supabase_js_versioned_docs/version-v1/storage-from-copy.mdx b/apps/reference/_supabase_js_versioned_docs/version-v1/storage-from-copy.mdx index a73137c6b6c..ffb320a47da 100644 --- a/apps/reference/_supabase_js_versioned_docs/version-v1/storage-from-copy.mdx +++ b/apps/reference/_supabase_js_versioned_docs/version-v1/storage-from-copy.mdx @@ -66,7 +66,7 @@ The new file path, including the new file name. For example `folder/image-copy.p - Policy permissions required: - `buckets` permissions: none - - `objects` permissions: `update` and `select` + - `objects` permissions: `insert` and `select` ## Examples diff --git a/spec/WIP_supabase_js_v2_sdk.yaml b/spec/WIP_supabase_js_v2_sdk.yaml index b7a93682bf4..82339fdb6f6 100644 --- a/spec/WIP_supabase_js_v2_sdk.yaml +++ b/spec/WIP_supabase_js_v2_sdk.yaml @@ -41,7 +41,7 @@ functions: ```js import { createClient } from '@supabase/supabase-js' - // Create a single supabase client for interacting with your database + // Create a single supabase client for interacting with your database const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key') ``` - id: example-init-with-params @@ -62,7 +62,7 @@ functions: - id: example-init-scheams summary: API schemas description: | - By default the API server points to the `public` schema. You can enable other database schemas within the Dashboard. + By default the API server points to the `public` schema. You can enable other database schemas within the Dashboard. Go to `Settings > API > Schema` and add the schema which you want to expose to the API. Note: each client connection can only access a single schema, so the code above can access the `other_schema` schema but cannot access the `public` schema. @@ -71,22 +71,22 @@ functions: import { createClient } from '@supabase/supabase-js' // Provide a custom schema. Defaults to "public". - const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', { - schema: 'other_schema' + const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', { + schema: 'other_schema' }) ``` - id: example-init-fetch summary: Custom `fetch` implementation description: | - `supabase-js` uses the [`cross-fetch`](https://www.npmjs.com/package/cross-fetch) library to make HTTP requests, - but an alternative `fetch` implementation can be provided as an option. + `supabase-js` uses the [`cross-fetch`](https://www.npmjs.com/package/cross-fetch) library to make HTTP requests, + but an alternative `fetch` implementation can be provided as an option. This is most useful in environments where `cross-fetch` is not compatible (for instance Cloudflare Workers). code: | ```js import { createClient } from '@supabase/supabase-js' - const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', { - fetch: fetch.bind(globalThis) + const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', { + fetch: fetch.bind(globalThis) }) ``` @@ -128,8 +128,8 @@ functions: password: 'example-password', }, { - data: { - first_name: 'John', + data: { + first_name: 'John', age: 27, } } @@ -203,10 +203,10 @@ functions: - id: example-signin-redirect summary: Sign in with redirect. description: | - Note that the `redirectTo` param is only relevant for OAuth logins, where the login flow is managed by + Note that the `redirectTo` param is only relevant for OAuth logins, where the login flow is managed by the Auth server. If you are using email/phone logins you should set up your own redirects (within the email/sms template). - - Sometimes you want to control where the user is redirected to after they are logged in. Supabase supports this for + + Sometimes you want to control where the user is redirected to after they are logged in. Supabase supports this for any URL path on your website (the URL must either be on the same domain as your Site URL [see Auth>Settings in dashboard], or must match one of the Additional Redirect URLs [also in Auth>Settings]). code: | ```js @@ -294,7 +294,7 @@ functions: To toggle this behavior off and only send a single confirmation link to the new email, toggle "Double confirm email changes" under "Authentication" -> "Settings" off. - User metadata: It's generally better to store user data in a table inside your public schema (i.e. `public.users`). + User metadata: It's generally better to store user data in a table inside your public schema (i.e. `public.users`). Use the `update()` method if you have data which rarely changes or is specific only to the logged in user. examples: - id: example-auth-update-email @@ -314,8 +314,8 @@ functions: summary: Update a user's metadata. code: | ```js - const { user, error } = await supabase.auth.update({ - data: { hello: 'world' } + const { user, error } = await supabase.auth.update({ + data: { hello: 'world' } }) ``` @@ -330,9 +330,9 @@ functions: ```js function apiFunction(req, res) { // Assuming the access token was sent as a header "X-Supabase-Auth" - const { access_token } = req.get('X-Supabase-Auth') + const { access_token } = req.get('X-Supabase-Auth') - // You can now use it within a Supabase Client + // You can now use it within a Supabase Client const supabase = createClient("https://xyzcompany.supabase.co", "public-anon-key") const { user, error } = supabase.auth.setAuth(access_token) @@ -367,9 +367,9 @@ functions: * Use the Auth token in your server-side function. */ async function apiFunction(req, res) { - const { access_token } = req.get('X-Supabase-Auth') + const { access_token } = req.get('X-Supabase-Auth') - // You can now use it within a Supabase Client + // You can now use it within a Supabase Client const supabase = createClient("https://xyzcompany.supabase.co", "public-anon-key") const { user, error } = supabase.auth.setAuth(access_token) @@ -1410,7 +1410,7 @@ functions: description: | - Policy permissions required: - `buckets` permissions: none - - `objects` permissions: `update` and `select` + - `objects` permissions: `insert` and `select` examples: - id: example-storage-file-copy summary: Copy file diff --git a/spec/supabase_js_v1_legacy.yml b/spec/supabase_js_v1_legacy.yml index 7e9c1c7b01d..c5358848c23 100644 --- a/spec/supabase_js_v1_legacy.yml +++ b/spec/supabase_js_v1_legacy.yml @@ -18,7 +18,7 @@ info: pages: Installing: description: | - All JavaScript libraries are built directly by the Supabase team. + All JavaScript libraries are built directly by the Supabase team. Other languages are built by the community and supported by Supabase. @@ -34,7 +34,7 @@ pages: yarn add @supabase/supabase-js ``` - Find the source code on [GitHub](https://github.com/supabase/supabase-js). + Find the source code on [GitHub](https://github.com/supabase/supabase-js). Or via CDN ```js @@ -57,7 +57,7 @@ pages: ```js import { createClient } from '@supabase/supabase-js' - // Create a single supabase client for interacting with your database + // Create a single supabase client for interacting with your database const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key') ``` - name: With additional parameters @@ -80,12 +80,12 @@ pages: import { createClient } from '@supabase/supabase-js' // Provide a custom schema. Defaults to "public". - const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', { - schema: 'other_schema' + const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', { + schema: 'other_schema' }) ``` - By default the API server points to the `public` schema. You can enable other database schemas within the Dashboard. + By default the API server points to the `public` schema. You can enable other database schemas within the Dashboard. Go to `Settings > API > Schema` and add the schema which you want to expose to the API. Note: each client connection can only access a single schema, so the code above can access the `other_schema` schema but cannot access the `public` schema. @@ -94,13 +94,13 @@ pages: ```js import { createClient } from '@supabase/supabase-js' - const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', { - fetch: fetch.bind(globalThis) + const supabase = createClient('https://xyzcompany.supabase.co', 'public-anon-key', { + fetch: fetch.bind(globalThis) }) ``` - `supabase-js` uses the [`cross-fetch`](https://www.npmjs.com/package/cross-fetch) library to make HTTP requests, - but an alternative `fetch` implementation can be provided as an option. + `supabase-js` uses the [`cross-fetch`](https://www.npmjs.com/package/cross-fetch) library to make HTTP requests, + but an alternative `fetch` implementation can be provided as an option. This is most useful in environments where `cross-fetch` is not compatible (for instance Cloudflare Workers). Generating Types: @@ -111,7 +111,7 @@ pages: `supabase-js` ships with type definitions for usage with TypeScript and for convenient IntelliSense auto-complete and documentation in your editor. - When using TypeScript, you can pass the type of database row as a type parameter to the `from` method to get better auto-completion support down the chain. + When using TypeScript, you can pass the type of database row as a type parameter to the `from` method to get better auto-completion support down the chain. If you don't provide a type for the row you need to explicitly pass `from('tableName')`. ```ts @@ -170,8 +170,8 @@ pages: password: 'example-password', }, { - data: { - first_name: 'John', + data: { + first_name: 'John', age: 27, } } @@ -244,10 +244,10 @@ pages: ``` - name: Sign in with redirect. description: | - Note that the `redirectTo` param is only relevant for OAuth logins, where the login flow is managed by + Note that the `redirectTo` param is only relevant for OAuth logins, where the login flow is managed by the Auth server. If you are using email/phone logins you should set up your own redirects (within the email/sms template). - - Sometimes you want to control where the user is redirected to after they are logged in. Supabase supports this for + + Sometimes you want to control where the user is redirected to after they are logged in. Supabase supports this for any URL path on your website (the URL must either be on the same domain as your Site URL [see Auth>Settings in dashboard], or must match one of the Additional Redirect URLs [also in Auth>Settings]). js: | ```js @@ -333,7 +333,7 @@ pages: To toggle this behavior off and only send a single confirmation link to the new email, toggle "Double confirm email changes" under "Authentication" -> "Settings" off. - User metadata: It's generally better to store user data in a table inside your public schema (i.e. `public.users`). + User metadata: It's generally better to store user data in a table inside your public schema (i.e. `public.users`). Use the `update()` method if you have data which rarely changes or is specific only to the logged in user. examples: - name: Update email for authenticated user. @@ -353,8 +353,8 @@ pages: isSpotlight: true js: | ```js - const { user, error } = await supabase.auth.update({ - data: { hello: 'world' } + const { user, error } = await supabase.auth.update({ + data: { hello: 'world' } }) ``` @@ -369,9 +369,9 @@ pages: ```js function apiFunction(req, res) { // Assuming the access token was sent as a header "X-Supabase-Auth" - const { access_token } = req.get('X-Supabase-Auth') + const { access_token } = req.get('X-Supabase-Auth') - // You can now use it within a Supabase Client + // You can now use it within a Supabase Client const supabase = createClient("https://xyzcompany.supabase.co", "public-anon-key") const { user, error } = supabase.auth.setAuth(access_token) @@ -406,9 +406,9 @@ pages: * Use the Auth token in your server-side function. */ async function apiFunction(req, res) { - const { access_token } = req.get('X-Supabase-Auth') + const { access_token } = req.get('X-Supabase-Auth') - // You can now use it within a Supabase Client + // You can now use it within a Supabase Client const supabase = createClient("https://xyzcompany.supabase.co", "public-anon-key") const { user, error } = supabase.auth.setAuth(access_token) @@ -727,8 +727,8 @@ pages: js: | ```js const { data: user, error } = await supabase.functions.invoke('hello', { - headers: { - "my-custom-header": 'my-custom-header-value' + headers: { + "my-custom-header": 'my-custom-header-value' }, body: JSON.stringify({ foo: 'bar' }) }) @@ -779,11 +779,11 @@ pages: For more details, [follow the link](https://postgrest.org/en/latest/api.html#embedding-through-join-tables). - name: Query the same foreign table multiple times description: | - Sometimes you will need to query the same foreign table twice. - In this case, you can use the name of the joined column to identify - which join you intend to use. For convenience, you can also give an - alias for each column. For example, if we had a shop of products, - and we wanted to get the supplier and the purchaser at the same time + Sometimes you will need to query the same foreign table twice. + In this case, you can use the name of the joined column to identify + which join you intend to use. For convenience, you can also give an + alias for each column. For example, if we had a shop of products, + and we wanted to get the supplier and the purchaser at the same time (both in the users) table: js: | ```js @@ -797,7 +797,7 @@ pages: ``` - name: Filtering with inner joins description: | - If you want to filter a table based on a child table's values you can use the `!inner()` function. For example, if you wanted + If you want to filter a table based on a child table's values you can use the `!inner()` function. For example, if you wanted to select all rows in a `message` table which belong to a user with the `username` "Jane": js: | ```js @@ -818,10 +818,10 @@ pages: ``` - name: Querying JSON data description: | - If you have data inside of a JSONB column, you can apply select - and query filters to the data values. Postgres offers a - [number of operators](https://www.postgresql.org/docs/current/functions-json.html) - for querying JSON data. Also see + If you have data inside of a JSONB column, you can apply select + and query filters to the data values. Postgres offers a + [number of operators](https://www.postgresql.org/docs/current/functions-json.html) + for querying JSON data. Also see [PostgREST docs](http://postgrest.org/en/v7.0.0/api.html#json-columns) for more details. js: | ```js @@ -875,7 +875,7 @@ pages: $ref: '@supabase/postgrest-js."lib/PostgrestQueryBuilder".PostgrestQueryBuilder.insert' notes: | - By default, every time you run `insert()`, the client library will make a `select` to return the full record. - This is convenient, but it can also cause problems if your Policies are not configured to allow the `select` operation. + This is convenient, but it can also cause problems if your Policies are not configured to allow the `select` operation. If you are using Row Level Security and you are encountering problems, try setting the `returning` param to `minimal`. examples: - name: Create a record @@ -890,7 +890,7 @@ pages: ``` - name: Bulk create description: | - When running a bulk create, the operation is handled in a single transaction. If any of the inserts fail, all other operations are + When running a bulk create, the operation is handled in a single transaction. If any of the inserts fail, all other operations are rolled back. js: | ```js @@ -903,10 +903,10 @@ pages: ``` - name: Upsert description: | - For upsert, if set to true, primary key columns would need to be included - in the data parameter in order for an update to properly happen. Also, primary keys - used must be natural, not surrogate. There are however, - [workarounds](https://github.com/PostgREST/postgrest/issues/1118) + For upsert, if set to true, primary key columns would need to be included + in the data parameter in order for an update to properly happen. Also, primary keys + used must be natural, not surrogate. There are however, + [workarounds](https://github.com/PostgREST/postgrest/issues/1118) for surrogate primary keys. js: | ```js @@ -938,16 +938,16 @@ pages: ``` - name: Updating JSON data description: | - Postgres offers a - [number of operators](https://www.postgresql.org/docs/current/functions-json.html) - for working with JSON data. Right now it is only possible to update an entire JSON document, + Postgres offers a + [number of operators](https://www.postgresql.org/docs/current/functions-json.html) + for working with JSON data. Right now it is only possible to update an entire JSON document, but we are [working on ideas](https://github.com/PostgREST/postgrest/issues/465) for updating individual keys. js: | ```js const { data, error } = await supabase .from('users') .update(` - address: { + address: { street: 'Melrose Place', postcode: 90210 } @@ -959,7 +959,7 @@ pages: title: 'Upsert data: upsert()' $ref: '@supabase/postgrest-js."lib/PostgrestQueryBuilder".PostgrestQueryBuilder.upsert' notes: | - - Primary keys should be included in the data payload in order for an update to work correctly. + - Primary keys should be included in the data payload in order for an update to work correctly. - Primary keys must be natural, not surrogate. There are however, [workarounds](https://github.com/PostgREST/postgrest/issues/1118) for surrogate primary keys. examples: - name: Upsert your data @@ -983,8 +983,8 @@ pages: ``` - name: Upserting into tables with constraints description: | - Running the following will cause supabase to upsert data into the `users` table. - If the username 'supabot' already exists, the `onConflict` argument tells supabase to overwrite that row + Running the following will cause supabase to upsert data into the `users` table. + If the username 'supabot' already exists, the `onConflict` argument tells supabase to overwrite that row based on the column passed into `onConflict`. isSpotlight: true js: | @@ -999,11 +999,11 @@ pages: ```js const { data, error, count } = await supabase .from('users') - .upsert({ - id: 3, message: 'foo', - username: 'supabot' - }, { - count: 'exact' + .upsert({ + id: 3, message: 'foo', + username: 'supabot' + }, { + count: 'exact' }) ``` @@ -1067,7 +1067,7 @@ pages: - name: With filters description: | Postgres functions that return tables can also be combined with - [Modifiers](/docs/reference/javascript/using-modifiers) and + [Modifiers](/docs/reference/javascript/using-modifiers) and [Filters](/docs/reference/javascript/using-filters). js: | ```js @@ -1126,8 +1126,8 @@ pages: ``` - name: Listening to updates description: | - By default, Supabase will send only the updated record. If you want to receive the previous values as well you can - enable full replication for the table you are listening too: + By default, Supabase will send only the updated record. If you want to receive the previous values as well you can + enable full replication for the table you are listening too: ```sql alter table "your_table" replica identity full; @@ -1143,8 +1143,8 @@ pages: ``` - name: Listening to deletes description: | - By default, Supabase does not send deleted records. If you want to receive the deleted record you can - enable full replication for the table you are listening too: + By default, Supabase does not send deleted records. If you want to receive the deleted record you can + enable full replication for the table you are listening too: ```sql alter table "your_table" replica identity full; @@ -1222,7 +1222,7 @@ pages: $ref: '@supabase/storage-js."lib/StorageBucketApi".StorageBucketApi.listBuckets' notes: | - Policy permissions required: - - `buckets` permissions: `select` + - `buckets` permissions: `select` - `objects` permissions: none examples: - name: List buckets @@ -1239,7 +1239,7 @@ pages: $ref: '@supabase/storage-js."lib/StorageBucketApi".StorageBucketApi.getBucket' notes: | - Policy permissions required: - - `buckets` permissions: `select` + - `buckets` permissions: `select` - `objects` permissions: none examples: - name: Get bucket @@ -1256,7 +1256,7 @@ pages: $ref: '@supabase/storage-js."lib/StorageBucketApi".StorageBucketApi.createBucket' notes: | - Policy permissions required: - - `buckets` permissions: `insert` + - `buckets` permissions: `insert` - `objects` permissions: none examples: - name: Create bucket @@ -1273,7 +1273,7 @@ pages: $ref: '@supabase/storage-js."lib/StorageBucketApi".StorageBucketApi.emptyBucket' notes: | - Policy permissions required: - - `buckets` permissions: `select` + - `buckets` permissions: `select` - `objects` permissions: `select` and `delete` examples: - name: Empty bucket @@ -1323,7 +1323,7 @@ pages: $ref: '@supabase/storage-js."lib/StorageFileApi".StorageFileApi.upload' notes: | - Policy permissions required: - - `buckets` permissions: none + - `buckets` permissions: none - `objects` permissions: `insert` - For React Native, using either `Blob`, `File` or `FormData` does not work as intended. Upload file using `ArrayBuffer` from base64 file data instead, see example below. examples: @@ -1358,7 +1358,7 @@ pages: $ref: '@supabase/storage-js."lib/StorageFileApi".StorageFileApi.update' notes: | - Policy permissions required: - - `buckets` permissions: none + - `buckets` permissions: none - `objects` permissions: `update` and `select` - For React Native, using either `Blob`, `File` or `FormData` does not work as intended. Update file using `ArrayBuffer` from base64 file data instead, see example below. examples: @@ -1393,7 +1393,7 @@ pages: $ref: '@supabase/storage-js."lib/StorageFileApi".StorageFileApi.move' notes: | - Policy permissions required: - - `buckets` permissions: none + - `buckets` permissions: none - `objects` permissions: `update` and `select` examples: - name: Move file @@ -1411,8 +1411,8 @@ pages: $ref: '@supabase/storage-js."lib/StorageFileApi".StorageFileApi.copy' notes: | - Policy permissions required: - - `buckets` permissions: none - - `objects` permissions: `update` and `select` + - `buckets` permissions: none + - `objects` permissions: `insert` and `select` examples: - name: Copy file isSpotlight: true @@ -1429,7 +1429,7 @@ pages: $ref: '@supabase/storage-js."lib/StorageFileApi".StorageFileApi.createSignedUrl' notes: | - Policy permissions required: - - `buckets` permissions: none + - `buckets` permissions: none - `objects` permissions: `select` examples: - name: Create Signed URL @@ -1447,7 +1447,7 @@ pages: $ref: '@supabase/storage-js."lib/StorageFileApi".StorageFileApi.createSignedUrls' notes: | - Policy permissions required: - - `buckets` permissions: none + - `buckets` permissions: none - `objects` permissions: `select` examples: - name: Create Signed URLs @@ -1466,7 +1466,7 @@ pages: notes: | - The bucket needs to be set to public, either via [updateBucket()](/docs/reference/javascript/storage-updatebucket) or by going to Storage on [app.supabase.com](https://app.supabase.com), clicking the overflow menu on a bucket and choosing "Make public" - Policy permissions required: - - `buckets` permissions: none + - `buckets` permissions: none - `objects` permissions: none examples: - name: Returns the URL for an asset in a public bucket @@ -1484,7 +1484,7 @@ pages: $ref: '@supabase/storage-js."lib/StorageFileApi".StorageFileApi.download' notes: | - Policy permissions required: - - `buckets` permissions: none + - `buckets` permissions: none - `objects` permissions: `select` examples: - name: Download file @@ -1502,7 +1502,7 @@ pages: $ref: '@supabase/storage-js."lib/StorageFileApi".StorageFileApi.remove' notes: | - Policy permissions required: - - `buckets` permissions: none + - `buckets` permissions: none - `objects` permissions: `delete` and `select` examples: - name: Delete file @@ -1520,7 +1520,7 @@ pages: $ref: '@supabase/storage-js."lib/StorageFileApi".StorageFileApi.list' notes: | - Policy permissions required: - - `buckets` permissions: none + - `buckets` permissions: none - `objects` permissions: `select` examples: - name: List files in a bucket @@ -1552,7 +1552,7 @@ pages: Using Modifiers: description: | - Modifiers can be used on `select()` queries. + Modifiers can be used on `select()` queries. If a Postgres function returns a table response, you can also apply modifiers to the `rpc()` function. @@ -1651,7 +1651,7 @@ pages: Using Filters: description: | - Filters can be used on `select()`, `update()`, and `delete()` queries. + Filters can be used on `select()`, `update()`, and `delete()` queries. If a Postgres function returns a table response, you can also apply filters. @@ -1695,7 +1695,7 @@ pages: let query = supabase .from('cities') .select('name, country_id') - + if (filterByName) { query = query.eq('name', filterByName) } if (filterPopLow) { query = query.gte('population', filterPopLow) } if (filterPopHigh) { query = query.lt('population', filterPopHigh) } @@ -2529,8 +2529,8 @@ pages: const { data, error } = await supabase .from('quotes') .select('catchphrase') - .textSearch('catchphrase', `'fat' & 'cat'`, { - config: 'english' + .textSearch('catchphrase', `'fat' & 'cat'`, { + config: 'english' }) ``` - name: Basic normalization @@ -2540,9 +2540,9 @@ pages: const { data, error } = await supabase .from('quotes') .select('catchphrase') - .textSearch('catchphrase', `'fat' & 'cat'`, { + .textSearch('catchphrase', `'fat' & 'cat'`, { type: 'plain', - config: 'english' + config: 'english' }) ``` - name: Full normalization @@ -2552,15 +2552,15 @@ pages: const { data, error } = await supabase .from('quotes') .select('catchphrase') - .textSearch('catchphrase', `'fat' & 'cat'`, { + .textSearch('catchphrase', `'fat' & 'cat'`, { type: 'phrase', - config: 'english' + config: 'english' }) ``` - name: Websearch description: | - Uses PostgreSQL's `websearch_to_tsquery` function. - This function will never raise syntax errors, which makes it possible to use raw user-supplied input for search, and can be used + Uses PostgreSQL's `websearch_to_tsquery` function. + This function will never raise syntax errors, which makes it possible to use raw user-supplied input for search, and can be used with advanced operators. - `unquoted text`: text not inside quote marks will be converted to terms separated by & operators, as if processed by plainto_tsquery. @@ -2573,7 +2573,7 @@ pages: const { data, error } = await supabase .from('quotes') .select('catchphrase') - .textSearch('catchphrase', `'fat or cat'`, { + .textSearch('catchphrase', `'fat or cat'`, { type: 'websearch', config: 'english' }) diff --git a/spec/supabase_js_v2_legacy.yml b/spec/supabase_js_v2_legacy.yml index 52d60472051..c167b455140 100644 --- a/spec/supabase_js_v2_legacy.yml +++ b/spec/supabase_js_v2_legacy.yml @@ -1314,7 +1314,7 @@ pages: notes: | - Policy permissions required: - `buckets` permissions: none - - `objects` permissions: `update` and `select` + - `objects` permissions: `insert` and `select` examples: - name: Copy file isSpotlight: true